/// <summary> /// Rebuilds the Routes for the given Node, optionally allows for settings to be passed /// </summary> /// <param name="NodeID">The NodeID</param> /// <param name="Settings">The Node Item Build Settings, if null will create settings based on the Node itself.</param> private static void RebuildRoutesByNode(int NodeID, NodeItemBuilderSettings Settings = null) { // If settings are not set, then get settings based on the given Node if (Settings == null) { // Get Site from Node TreeNode Page = DocumentHelper.GetDocuments() .WhereEquals("NodeID", NodeID) .Columns("NodeSiteID") .FirstOrDefault(); // Get Settings based on the Page itself Settings = GetNodeItemBuilderSettings(Page.NodeAliasPath, GetSite(Page.NodeSiteID).SiteName, true, false); } // Build and save NodeItem GivenNodeItem = new NodeItem(NodeID, Settings); if (ErrorOnConflict()) { // If error on conflict, everything MUST be done syncly. GivenNodeItem.BuildChildren(); if (GivenNodeItem.ConflictsExist()) { throw new UrlSlugCollisionException("Conflict Exists, aborting save"); } // Save changes GivenNodeItem.SaveChanges(); } else { // Do rest asyncly. QueueUpUrlSlugGeneration(GivenNodeItem); } }
/// <summary> /// Rebuilds all URL Routes on the given Site /// </summary> /// <param name="SiteName">The Site name</param> public static void RebuildRoutesBySite(string SiteName) { //EventLogProvider.LogInformation("DynamicRouteTesting", "SyncBuildStart", eventDescription: DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString()); // Get NodeItemBuilderSettings NodeItemBuilderSettings BuilderSettings = GetNodeItemBuilderSettings(SiteName, true, true, true, true, true); // Get root NodeID TreeNode RootNode = DocumentHelper.GetDocument(new NodeSelectionParameters() { AliasPath = "/", SiteName = SiteName }, new TreeProvider()); // Rebuild NodeItem tree structure, this will only affect the initial node syncly. NodeItem RootNodeItem = new NodeItem(RootNode.NodeID, BuilderSettings); if (ErrorOnConflict()) { // If error on conflict, everything MUST be done syncly. RootNodeItem.BuildChildren(); if (RootNodeItem.ConflictsExist()) { throw new UrlSlugCollisionException("Conflict Exists, aborting save"); } // Save changes RootNodeItem.SaveChanges(); } else { // Do rest asyncly. QueueUpUrlSlugGeneration(RootNodeItem); } //EventLogProvider.LogInformation("DynamicRouteTesting", "SyncBuildEnd", eventDescription: DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString()); }
/// <summary> /// Adds the NodeItem to the Url Slug Generation Queue so it can be handled asyncly in the order it's added. /// </summary> /// <param name="NodeItem">The Node Item</param> private static void QueueUpUrlSlugGeneration(NodeItem NodeItem) { // Add item to the Slug Generation Queue SlugGenerationQueueInfo NewQueue = new SlugGenerationQueueInfo() { SlugGenerationQueueNodeItem = SerializeObject <NodeItem>(NodeItem) }; SlugGenerationQueueInfoProvider.SetSlugGenerationQueueInfo(NewQueue); // Run Queue checker CheckUrlSlugGenerationQueue(); }
/// <summary> /// Rebuilds the Routes for the given Node, optionally allows for settings to be passed /// </summary> /// <param name="NodeID">The NodeID</param> /// <param name="Settings">The Node Item Build Settings, if null will create settings based on the Node itself.</param> private static void RebuildRoutesByNode(int NodeID, NodeItemBuilderSettings Settings = null, bool CheckConflictOnly = false) { // If settings are not set, then get settings based on the given Node string NodeAliasPath = ""; if (Settings == null) { // Get Site from Node TreeNode Page = DocumentHelper.GetDocuments() .WhereEquals("NodeID", NodeID) .Columns("NodeSiteID, NodeAliasPath") .CombineWithAnyCulture() .FirstOrDefault(); NodeAliasPath = Page.NodeAliasPath; // Get Settings based on the Page itself Settings = GetNodeItemBuilderSettings(Page.NodeAliasPath, GetSite(Page.NodeSiteID).SiteName, true, false); } // Build and save NodeItem GivenNodeItem = new NodeItem(NodeID, Settings, CheckConflictOnly); if (ErrorOnConflict() || CheckConflictOnly) { // If error on conflict, everything MUST be done syncly. GivenNodeItem.BuildChildren(); if (GivenNodeItem.ConflictsExist()) { string Error = $"Could not save document at {NodeAliasPath} due to a conflict in the generated route:\n\r {string.Join("\n\r", GivenNodeItem.GetConflictItems())}"; EventLogProvider.LogEvent("E", "DynamicRouting", "Conflict Exists", eventDescription: Error); throw new UrlSlugCollisionException($"{Error} aborting save"); } // Save changes if not only checking conflict if (CheckConflictOnly) { return; } GivenNodeItem.SaveChanges(); } else { // Save main one GivenNodeItem.SaveChanges(false); // Do rest asyncly. QueueUpUrlSlugGeneration(GivenNodeItem, Settings.CheckQueueImmediately); } }
public NodeItem(NodeItem parent, TreeNode Node, NodeItemBuilderSettings Settings, bool BuildChildren = false) { NodeID = Node.NodeID; Parent = parent; UrlSlugs = new List <NodeUrlSlug>(); Children = new List <NodeItem>(); IsContainer = Node.IsCoupled; ClassName = Node.ClassName; this.Settings = Settings; // Build it's slugs BuildUrlSlugs(); // If build children, or settings to build descendents, or if an update was found, build children if (BuildChildren || Settings.BuildDescendents || HasUpdates) { this.BuildChildren(); } }
/// <summary> /// Rebuilds all URL Routes on the given Site /// </summary> /// <param name="SiteName">The Site name</param> public static void RebuildRoutesBySite(string SiteName) { //EventLogProvider.LogInformation("DynamicRouteTesting", "SyncBuildStart", eventDescription: DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString()); // Get NodeItemBuilderSettings NodeItemBuilderSettings BuilderSettings = GetNodeItemBuilderSettings(SiteName, true, true, true, true, true); // Get root NodeID TreeNode RootNode = DocumentHelper.GetDocuments() .Path("/", PathTypeEnum.Single) .OnSite(SiteName) .CombineWithAnyCulture() .FirstOrDefault(); // Rebuild NodeItem tree structure, this will only affect the initial node syncly. NodeItem RootNodeItem = new NodeItem(RootNode.NodeID, BuilderSettings); if (ErrorOnConflict()) { // If error on conflict, everything MUST be done syncly. RootNodeItem.BuildChildren(); if (RootNodeItem.ConflictsExist()) { EventLogProvider.LogEvent("E", "DynamicRouting", "Conflict Exists", eventDescription: $"Could not rebuild the site {SiteName}'s routes due to a conflict in the generated routes."); throw new UrlSlugCollisionException("Conflict Exists, aborting save"); } // Save changes RootNodeItem.SaveChanges(); } else { // Save itself and then queue up rest RootNodeItem.SaveChanges(false); // Do rest asyncly. QueueUpUrlSlugGeneration(RootNodeItem, BuilderSettings.CheckQueueImmediately); } //EventLogProvider.LogInformation("DynamicRouteTesting", "SyncBuildEnd", eventDescription: DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString()); }