private static void HandleContentTypeChange(SiteObjectEvent<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 ComputeStyle(SiteObjectEvent StyleEvent) { var sitedb = StyleEvent.SiteDb; var style = StyleEvent.Value as Style; if (style == null) { return; } if (StyleEvent.ChangeType == ChangeType.Add) { StyleRelation.Compute(style, sitedb); } else if (StyleEvent.ChangeType == ChangeType.Update) { var oldvalue = StyleEvent.OldValue as Style; if (oldvalue == null || !Lib.Helper.StringHelper.IsSameValue(oldvalue.Body, style.Body)) { StyleRelation.Compute(style, sitedb); } } else { // this is to delete style sheet... List <Guid> ownerguid = new List <Guid>(); ownerguid.Add(style.Id); var allownerrules = sitedb.CssRules.Query.Where(o => o.OwnerObjectId == style.Id).SelectAll(); var allstylerules = sitedb.CssRules.Query.Where(o => o.ParentStyleId == style.Id).SelectAll(); List <Guid> allruleid = new List <Guid>(); allruleid.AddRange(allownerrules.Select(o => o.Id).ToList()); allruleid.AddRange(allstylerules.Select(o => o.Id).ToList()); foreach (var item in allruleid.Distinct()) { sitedb.CssRules.Store.delete(item); } ownerguid.AddRange(allruleid.Distinct()); StyleEvent.SiteDb.Relations.CleanObjectRelation(StyleEvent.Value.Id); var relations = sitedb.Relations.Query.WhereIn <Guid>(o => o.objectXId, ownerguid).SelectAll(); foreach (var item in relations) { sitedb.Relations.Store.delete(item.Id); } var ReferByRelation = sitedb.Relations.Query.WhereIn <Guid>(o => o.objectYId, ownerguid).SelectAll(); foreach (var item in ReferByRelation) { sitedb.Relations.Store.delete(item.Id); } } }
private static void HandleRoute(SiteObjectEvent<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); } }
private static void HandleObjectRelationChange(SiteObjectEvent<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); } } } } }
private static void HandleLayoutChange(SiteObjectEvent<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>(SiteObjectEvent<T> e) where T : class, Data.Interface.ISiteObject { List<object> handler; if (!_handlers.TryGetValue(typeof(T), out handler)) return; foreach (var item in handler) { var HandleItem = item as Action<SiteObjectEvent<T>>; if (HandleItem !=null) { HandleItem(e); } } }
private static void HandleViewChange(SiteObjectEvent<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 Document GetDom(Type ModelType, SiteObjectEvent SiteEvent) { string domhtml = string.Empty; if (SiteEvent.ChangeType == ChangeType.Update || SiteEvent.ChangeType == ChangeType.Add) { if (ModelType == typeof(TextContent)) { domhtml = GetTextContentBody(SiteEvent.Value as TextContent, SiteEvent.SiteDb); } else { var newvalue = SiteEvent.Value as IDomObject; if (newvalue != null) { domhtml = newvalue.Body; } } } return(Kooboo.Dom.DomParser.CreateDom(domhtml)); }
private static void HandlePageChange(SiteObjectEvent <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); }
public static bool ShouldCheck(Type ModelType, SiteObjectEvent SiteEvent) { if (SiteEvent.ChangeType == ChangeType.Update) { // this can only be idomobject now because of early check. var old = SiteEvent.OldValue as IDomObject; var newvalue = SiteEvent.Value as IDomObject; if (old != null && newvalue != null) { if (Lib.Helper.StringHelper.IsSameValue(old.Body, newvalue.Body)) { if (ModelType == typeof(Page)) { // if page and the header does not change.. var oldpage = old as Page; var newpage = newvalue as Page; if (oldpage.Headers.GetHashCode() == newpage.Headers.GetHashCode()) { return(false); } } else { return(false); } } } } if ((ModelType == typeof(CmsCssRule)) && SiteEvent.ChangeType != ChangeType.Delete) { return(false); } return(true); }
private static void HandleTransferTask(SiteObjectEvent <SiteTransfer.TransferTask> taskEvent) { // check whether need to continue download or not. var sitedb = taskEvent.SiteDb; var taskcount = sitedb.TransferTasks.Count(); if (taskcount > 0) { if (sitedb.WebSite.ContinueDownload == false) { sitedb.WebSite.ContinueDownload = true; Kooboo.Data.GlobalDb.WebSites.AddOrUpdate(sitedb.WebSite); } } else if (taskcount == 0) { if (sitedb.WebSite.ContinueDownload == true) { sitedb.WebSite.ContinueDownload = false; Kooboo.Data.GlobalDb.WebSites.AddOrUpdate(sitedb.WebSite); } } }
/// <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 SiteObjectEvent <TValue> { Value = value, ChangeType = changetype, SiteDb = SiteDb, Store = this.Store }; 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); Kooboo.Sites.Events.Handler.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.OwnerDatabase.Flush(); 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 Compute(SiteObjectEvent SiteEvent) { if (SiteEvent == null || SiteEvent.Value == null) { return; } if (SiteEvent.Value is Style) { ComputeStyle(SiteEvent); return; } if (SiteEvent.Value is IDataMethodSetting) { if (SiteEvent.ChangeType == ChangeType.Delete) { DataMethodRelation.Clean(SiteEvent.SiteDb, SiteEvent.Value.Id); } else { DataMethodRelation.Compute(SiteEvent.Value as IDataMethodSetting, SiteEvent.SiteDb); } } if (SiteEvent.Value is ResourceGroup) { if (SiteEvent.ChangeType == ChangeType.Delete) { SiteEvent.SiteDb.Relations.CleanObjectRelation(SiteEvent.Value.Id); } else { GroupRelation.Compute(SiteEvent.Value as ResourceGroup, SiteEvent.SiteDb); } } Type ModelType = SiteEvent.Value.GetType(); //only below needs to compute relation. if (SiteEvent.Value is IDomObject || ModelType == typeof(CmsCssRule)) { string basurl = null; HtmlHeader header = null; Document Dom = null; if (Attributes.AttributeHelper.IsRoutable(ModelType)) { basurl = Service.ObjectService.GetObjectRelativeUrl(SiteEvent.SiteDb, SiteEvent.Value.Id, SiteEvent.Value.ConstType); } if (ModelType == typeof(Page)) { var page = SiteEvent.Value as Page; header = page.Headers; } if (!ShouldCheck(ModelType, SiteEvent)) { return; } Dom = GetDom(ModelType, SiteEvent); if (SiteEvent.ChangeType == ChangeType.Delete) { var siteobject = SiteEvent.Value as SiteObject; if (siteobject != null) { RelationManager.Clean(SiteEvent.SiteDb, siteobject); } } else { if (Dom != null || SiteEvent.Value is IDomObject) { DomRelation.Compute(SiteEvent.SiteDb, Dom, SiteEvent.Value.Id, SiteEvent.Value.ConstType, basurl, header); } } } }
private static void HandleContentFolderChange(SiteObjectEvent<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); } } } } } }