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); } } } }
public static void ComputeUrlRelation(SiteDb sitedb, Guid objectId, byte constType, List <string> urllist) { List <Guid> internalRoutes = new List <Guid>(); List <Guid> ExternalResource = new List <Guid>(); var oldRouteRelations = sitedb.Relations.GetRelationViaRoutes(objectId); var oldExternalResourceRelations = sitedb.Relations.GetExternalRelations(objectId, 0); byte FinalDestConstType = 0; foreach (var item in urllist.Distinct()) { FinalDestConstType = ConstTypeService.GetConstTypeByUrl(item);; if (Service.DomUrlService.IsExternalLink(item)) { Guid externalid = Kooboo.Data.IDGenerator.Generate(item, ConstObjectType.ExternalResource); ExternalResource.Add(externalid); if (oldExternalResourceRelations.Find(o => o.objectYId == externalid) == null) { sitedb.ExternalResource.AddOrUpdate(item, FinalDestConstType); } } else { var routeids = DomRelation.GetRouteIds(sitedb, item); internalRoutes.AddRange(routeids); if (routeids.Count == 1 && oldRouteRelations.Find(o => o.objectYId == routeids[0]) == null) { sitedb.Routes.EnsureExists(item, FinalDestConstType); } } } foreach (var item in oldRouteRelations) { if (!internalRoutes.Contains(item.objectYId)) { sitedb.Relations.Delete(item.Id); } } foreach (var item in internalRoutes) { if (oldRouteRelations.Find(o => o.objectYId == item) == null) { sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.Route, FinalDestConstType); } } foreach (var item in oldExternalResourceRelations) { if (!ExternalResource.Contains(item.objectYId)) { sitedb.Relations.Delete(item.Id); } } foreach (var item in ExternalResource) { if (oldExternalResourceRelations.Find(o => o.objectYId == item) == null) { sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.ExternalResource, FinalDestConstType); } } }