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); } } } } }
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); } }
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); } } }
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); } } }
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); }
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); } } }
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(); // } // } //} } }
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); } } } } } }