Beispiel #1
0
        public static void HandleObjectRelationChange(SiteObjectChangeEvent <ObjectRelation> relationEvent)
        {
            if (relationEvent.ChangeType == ChangeType.Delete)
            {
                if (relationEvent.Value != null)
                {
                    var item = relationEvent.Value;

                    if (item.ConstTypeY == ConstObjectType.Route)
                    {
                        var route = relationEvent.SiteDb.Routes.Get(item.objectYId);
                        if (route != null && route.objectId == default(Guid))
                        {
                            var stillusedby = relationEvent.SiteDb.Relations.Query.Where(o => o.objectYId == item.objectYId).SelectAll();
                            if ((stillusedby == null || stillusedby.Count == 0 || (stillusedby.Count == 1 && stillusedby[0].objectXId == item.objectXId)))
                            {
                                relationEvent.SiteDb.Routes.Delete(item.objectYId);
                            }
                        }
                    }
                    else if (item.ConstTypeY == ConstObjectType.ExternalResource)
                    {
                        var stillusedby = relationEvent.SiteDb.Relations.Query.Where(o => o.objectYId == item.objectYId).SelectAll();
                        if (stillusedby == null || stillusedby.Count == 0 || (stillusedby.Count == 1 && stillusedby[0].objectXId == item.objectXId))
                        {
                            relationEvent.SiteDb.ExternalResource.Delete(item.objectYId);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public static void HandleRoute(SiteObjectChangeEvent <Routing.Route> ChangeEvent)
        {
            if (ChangeEvent.ChangeType == ChangeType.Add)
            {
                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb).AddOrUpdate(ChangeEvent.Value);
                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb, ChangeEvent.Value.DestinationConstType).AddOrUpdate(ChangeEvent.Value);
            }

            else if (ChangeEvent.ChangeType == ChangeType.Update)
            {
                if (ChangeEvent.OldValue.Name.ToLower() != ChangeEvent.Value.Name.ToLower())
                {
                    Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb).Del(ChangeEvent.OldValue.Name);
                    Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb, ChangeEvent.OldValue.DestinationConstType).Del(ChangeEvent.OldValue.Name);
                }

                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb).AddOrUpdate(ChangeEvent.Value);
                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb, ChangeEvent.Value.DestinationConstType).AddOrUpdate(ChangeEvent.Value);
            }
            else
            {
                // delete an route..
                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb).Del(ChangeEvent.Value.Name);
                Cache.RouteTreeCache.RouteTree(ChangeEvent.SiteDb, ChangeEvent.Value.DestinationConstType).Del(ChangeEvent.Value.Name);
            }
        }
Beispiel #3
0
        public static void HandleContentTypeChange(SiteObjectChangeEvent <ContentType> contenttypeevent)
        {
            if (contenttypeevent.ChangeType == ChangeType.Add)
            {
                var folder = contenttypeevent.SiteDb.ContentFolders.Query.Where(it => it.Name == contenttypeevent.Value.Name).FirstOrDefault();
                if (folder == null)
                {
                    folder = new ContentFolder
                    {
                        Name          = contenttypeevent.Value.Name,
                        ContentTypeId = contenttypeevent.Value.Id,
                    };
                    contenttypeevent.SiteDb.ContentFolders.AddOrUpdate(folder);
                }
            }
            else if (contenttypeevent.ChangeType == ChangeType.Delete)
            {
                var allfolders = contenttypeevent.SiteDb.ContentFolders.Query.Where(o => o.ContentTypeId == contenttypeevent.Value.Id).SelectAll();

                foreach (var item in allfolders)
                {
                    contenttypeevent.SiteDb.ContentFolders.Delete(item.Id);
                }
            }
        }
Beispiel #4
0
        public static void HandleLayoutChange(SiteObjectChangeEvent <Layout> LayoutEvent)
        {
            if (LayoutEvent.ChangeType == ChangeType.Add)
            {
            }
            else if (LayoutEvent.ChangeType == ChangeType.Update)
            {
                if (LayoutEvent.Value.Body != LayoutEvent.OldValue.Body)
                {
                    Kooboo.Sites.Cache.RenderPlan.RemovePlan(LayoutEvent.SiteDb, LayoutEvent.Value.Id);

                    var allpages = LayoutEvent.SiteDb.Pages.TableScan.Where(o => o.LayoutName == LayoutEvent.Value.Name).SelectAll();

                    foreach (var item in allpages)
                    {
                        Kooboo.Sites.Cache.RenderPlan.RemovePlan(LayoutEvent.SiteDb, item.Id);
                    }
                }
            }
            else
            {
                Kooboo.Sites.Cache.RenderPlan.RemovePlan(LayoutEvent.SiteDb, LayoutEvent.Value.Id);

                var allpages = LayoutEvent.SiteDb.Pages.TableScan.Where(o => o.LayoutName == LayoutEvent.Value.Name).SelectAll();

                foreach (var item in allpages)
                {
                    Kooboo.Sites.Cache.RenderPlan.RemovePlan(LayoutEvent.SiteDb, item.Id);
                }
            }
        }
Beispiel #5
0
        public static void HandleChange <T>(SiteObjectChangeEvent <T> e)
            where T : class, Data.Interface.ISiteObject
        {
            object handler;

            if (!_handlers.TryGetValue(typeof(T), out handler))
            {
                return;
            }

            (handler as Action <SiteObjectChangeEvent <T> >)(e);
        }
Beispiel #6
0
        public static void HandleViewChange(SiteObjectChangeEvent <View> ViewEvent)
        {
            if (ViewEvent.ChangeType == ChangeType.Add)
            {
            }
            else if (ViewEvent.ChangeType == ChangeType.Update)
            {
                if (ViewEvent.Value.Body != ViewEvent.OldValue.Body)
                {
                    Cache.RenderPlan.RemovePlan(ViewEvent.SiteDb, ViewEvent.Value.Id);

                    var pageviewrelation = ViewEvent.SiteDb.Relations.GetReferredBy(ViewEvent.Value, ConstObjectType.Page);
                    foreach (var item in pageviewrelation)
                    {
                        Cache.RenderPlan.RemovePlan(ViewEvent.SiteDb, item.objectXId);

                        // also the route parameter.
                        Routing.PageRoute.UpdatePageRouteParameter(ViewEvent.SiteDb, item.objectXId);
                    }
                }
            }
            else
            {
                Cache.RenderPlan.RemovePlan(ViewEvent.SiteDb, ViewEvent.Value.Id);

                var pageviewrelation = ViewEvent.SiteDb.Relations.GetReferredBy(ViewEvent.Value);
                foreach (var item in pageviewrelation)
                {
                    Cache.RenderPlan.RemovePlan(ViewEvent.SiteDb, item.objectXId);

                    // also the route parameter.
                    Routing.PageRoute.UpdatePageRouteParameter(ViewEvent.SiteDb, item.objectXId);
                }

                // delete view date method.
                var viewmethods = ViewEvent.SiteDb.ViewDataMethods.Query.Where(o => o.ViewId == ViewEvent.Value.Id).SelectAll();

                foreach (var item in viewmethods)
                {
                    ViewEvent.SiteDb.ViewDataMethods.Delete(item.Id);
                }
            }
        }
Beispiel #7
0
        public static void HandlePageChange(SiteObjectChangeEvent <Page> PageEvent)
        {
            if (PageEvent.ChangeType == ChangeType.Add)
            {
                //PageEvent.SiteDb.DomElements.AddOrUpdateDom(PageEvent.Value.Dom, PageEvent.Value.Id, PageEvent.Value.ConstType);
            }
            else if (PageEvent.ChangeType == ChangeType.Update)
            {
                //if (PageEvent.OldValue.Body != PageEvent.Value.Body)
                //{
                //   PageEvent.SiteDb.DomElements.AddOrUpdateDom(PageEvent.Value.Dom, PageEvent.Value.Id, PageEvent.Value.ConstType);
                //}

                Cache.RenderPlan.RemovePlan(PageEvent.SiteDb, PageEvent.OldValue.Id);
            }
            else
            {
                Cache.RenderPlan.RemovePlan(PageEvent.SiteDb, PageEvent.Value.Id);
                //PageEvent.SiteDb.DomElements.CleanObject(PageEvent.Value.Id, PageEvent.Value.ConstType);
            }

            Routing.PageRoute.UpdatePageRouteParameter(PageEvent.SiteDb, PageEvent.Value.Id);
        }
        /// <summary>
        /// After event
        /// </summary>
        /// <param name="value"></param>
        /// <param name="changetype"></param>
        /// <param name="oldValue"></param>
        protected void RaiseEvent(TValue value, ChangeType changetype, TValue oldValue = default(TValue))
        {
            if (value == null)
            {
                return;
            }

            if (changetype == ChangeType.Delete && value is ICoreObject)
            {
                var bytes           = Service.ObjectService.KeyConverter.ToByte(value.Id);
                var lastdeletelogid = SiteDb.Log.GetJustDeletedVersion(this.StoreName, bytes);
                var core            = value as ICoreObject;
                core.Version = lastdeletelogid;
            }

            var siteevent = new SiteObjectChangeEvent <TValue>
            {
                Value      = value,
                ChangeType = changetype,
                SiteDb     = SiteDb
            };

            if (changetype == ChangeType.Update)
            {
                siteevent.OldValue = oldValue;
            }

            if (this.SiteDb.WebSite.EnableDiskSync)
            {
                Sync.DiskSyncHelper.SyncToDisk(SiteDb, value, changetype, this.StoreName);
            }



            if (this.SiteDb.WebSite.EnableFullTextSearch)
            {
                this.SiteDb.SearchIndex.Sync(SiteDb, value, changetype, this.StoreName);
            }

            if (this.SiteDb.WebSite.EnableCluster && this.SiteDb.ClusterManager != null)
            {
                this.SiteDb.ClusterManager.AddTask(this, value, changetype);
            }

            ///add to cache.
            if (this.UseCache)
            {
                if (changetype == ChangeType.Delete)
                {
                    Cache.SiteObjectCache <TValue> .Remove(this.SiteDb, value);
                }
                else
                {
                    Cache.SiteObjectCache <TValue> .AddOrUpdate(this.SiteDb, value);
                }
            }

            if (siteevent.ChangeType == ChangeType.Delete)
            {
                var objectvalue = siteevent.Value;
                if (Attributes.AttributeHelper.IsRoutable(objectvalue))
                {
                    Sites.Helper.ChangeHelper.DeleteRoutableObject(SiteDb, this, objectvalue);
                }
                Sites.Helper.ChangeHelper.DeleteComponentFromSource(SiteDb, objectvalue);
            }

            Relation.RelationManager.Compute(siteevent);

            CmsChangeHandler.HandleChange(siteevent);

            Data.Events.EventBus.Raise(siteevent);

            if (siteevent.Value is DomObject)
            {
                var newojbect = siteevent.Value as DomObject;
                newojbect.DisposeDom();
            }

            if (siteevent.Value is Page)
            {
                PageRoute.UpdatePageRouteParameter(siteevent.SiteDb, siteevent.Value.Id);
            }

            ///close database
            if (value is ICoreObject)
            {
                this.Store.Close();
                if (this.SiteObjectType == typeof(Image))
                {
                    lock (this.SiteDb.ImagePool.Locker)
                    {
                        this.SiteDb.ImagePool.ClearAll();
                    }
                }
            }
            else
            {
                //{
                //    this.Store.Close();
                //    if (this.SiteObjectType == typeof(Image))
                //    {
                //        lock (this.SiteDb.ImagePool.Locker)
                //        {
                //            this.SiteDb.ImagePool.ClearAll();
                //        }
                //    }
                //}
            }
        }
Beispiel #9
0
        public static void HandleContentFolderChange(SiteObjectChangeEvent <ContentFolder> TheEvent)
        {
            var sitedb = TheEvent.SiteDb;

            if (TheEvent.Value == null || TheEvent.Value.Id == default(Guid))
            {
                return;
            }

            if (TheEvent.ChangeType == ChangeType.Delete)
            {
                // delete content folder, delete all content.
                var foldercontent = sitedb.TextContent.Query.Where(o => o.FolderId == TheEvent.Value.Id).UseColumnData().SelectAll();

                foreach (var item in foldercontent)
                {
                    TheEvent.SiteDb.TextContent.Delete(item.Id);
                }
                // delete all  categories.

                var AllAssignedCategories = sitedb.ContentCategories.Query.Where(o => o.CategoryFolder == TheEvent.Value.Id).SelectAll();
                foreach (var item in AllAssignedCategories)
                {
                    sitedb.ContentCategories.Delete(item.Id);
                }

                var allfolder = sitedb.ContentFolders.All().ToList().Where(o => o.Id != TheEvent.Value.Id).ToList();

                foreach (var folder in allfolder)
                {
                    var catteds = folder.Category.FindAll(o => o.FolderId == TheEvent.Value.Id).ToList();
                    if (catteds != null && catteds.Count() > 0)
                    {
                        foreach (var item in catteds)
                        {
                            folder.Category.Remove(item);
                        }
                        sitedb.ContentFolders.AddOrUpdate(folder);
                    }
                }

                // remove embedded.

                foreach (var folder in allfolder)
                {
                    var embedfolders = folder.Embedded.FindAll(o => o.FolderId == TheEvent.Value.Id).ToList();

                    if (embedfolders != null && embedfolders.Count() > 0)
                    {
                        foreach (var embedfolder in embedfolders)
                        {
                            folder.Embedded.Remove(embedfolder);
                        }

                        sitedb.ContentFolders.AddOrUpdate(folder);

                        var allTextContents = sitedb.TextContent.Query.Where(o => o.FolderId == folder.Id).SelectAll();
                        foreach (var item in allTextContents)
                        {
                            if (item.Embedded.ContainsKey(TheEvent.Value.Id))
                            {
                                item.Embedded.Remove(TheEvent.Value.Id);
                                sitedb.TextContent.AddOrUpdate(item);
                            }
                        }
                    }
                }
            }
        }