private SiteMapContainer LoadSiteMap(CultureInfo culture, Guid rootPageId) { var uri = ProcessUrl(HttpContext.Current.Request.Url); var host = uri.Host; SiteMapContainer siteMap = SiteMapContainer.GetFromCache(host, culture, rootPageId); if (siteMap == null) { lock (_lock) { siteMap = SiteMapContainer.GetFromCache(host, culture, rootPageId); if (siteMap == null) { var publicationScope = DataScopeManager.CurrentDataScope.ToPublicationScope(); siteMap = SiteMapContainer.LoadSiteMap(this, culture, publicationScope, rootPageId); if (siteMap != null) { AddRolesInternal(siteMap); } else { siteMap = _emptySiteMap; } SiteMapContainer.AddToCache(siteMap, host, culture, rootPageId); } } } return(object.ReferenceEquals(siteMap, _emptySiteMap) ? null : siteMap); }
/// <summary> /// Adds sitemap to cache. /// </summary> /// <param name="siteMap">The site map.</param> /// <param name="host">The host.</param> /// <param name="culture">The culture.</param> /// <param name="rootPageId">The root page id.</param> public static void AddToCache(SiteMapContainer siteMap, string host, CultureInfo culture, Guid rootPageId) { var key = GetCacheKey(host, culture, rootPageId); var context = HttpContext.Current; context.Items[key] = siteMap; MemoryCache.Default.Add(key, siteMap, ObjectCache.InfiniteAbsoluteExpiration); }
private static void LoadNodes(CompositeC1SiteMapProvider provider, PageNode pageNode, SiteMapNode parent, SiteMapContainer container, DataConnection data, int level) { if (pageNode.Url == null) { return; } var node = new CompositeC1SiteMapNode(provider, pageNode, data, level); AddNode(node, parent, container); var childs = pageNode.ChildPages; foreach (var child in childs) { LoadNodes(provider, child, node, container, data, level + 1); } }
/// <exclude /> public override void Initialize(string name, NameValueCollection attributes) { StoreEventHandler handler = (sender, e) => SiteMapContainer.ClearCache(); DataEventSystemFacade.SubscribeToStoreChanged <IPage>(handler, true); DataEventSystemFacade.SubscribeToStoreChanged <IPageStructure>(handler, true); DataEventSystemFacade.SubscribeToStoreChanged <ISystemActiveLocale>(handler, true); if (attributes != null) { bool extranetEnabled; if (bool.TryParse(attributes["extranetEnabled"], out extranetEnabled)) { ExtranetEnabled = extranetEnabled; } attributes.Remove("extranetEnabled"); } base.Initialize(name, attributes); }
private static void AddNode(SiteMapNode node, SiteMapNode parentNode, SiteMapContainer container) { Verify.ArgumentNotNull(node, "node"); Verify.ArgumentNotNull(container, "container"); container.KeyToNodesMap.Add(node.Key, node); container.ParentNodesMap.Add(node.Key, parentNode); if (!container.RawUrlToNodesMap.ContainsKey(node.Url)) { container.RawUrlToNodesMap.Add(node.Url, node); } if (parentNode != null) { if (!container.ChildCollectionsMap.ContainsKey(parentNode.Key)) { container.ChildCollectionsMap[parentNode.Key] = new SiteMapNodeCollection(); } container.ChildCollectionsMap[parentNode.Key].Add(node); } }
/// <exclude /> public static SiteMapContainer LoadSiteMap(CompositeC1SiteMapProvider provider, CultureInfo culture, PublicationScope publicationScope, Guid rootPageId) { using (var data = new DataConnection(publicationScope, culture)) { PageManager.PreloadPageCaching(); var rootPage = data.SitemapNavigator.GetPageNodeById(rootPageId); if (rootPage == null) { return(null); } var container = new SiteMapContainer { Root = new CompositeC1SiteMapNode(provider, rootPage, data, 1) }; LoadNodes(provider, rootPage, null, container, data, 1); return(container); } }
private static void AddNode(SiteMapNode node, SiteMapNode parentNode, SiteMapContainer container) { Verify.ArgumentNotNull(node, "node"); Verify.ArgumentNotNull(container, "container"); container.KeyToNodesMap.Add(node.Key, node); container.ParentNodesMap.Add(node.Key, parentNode); if (!container.RawUrlToNodesMap.ContainsKey(node.Url)) { container.RawUrlToNodesMap.Add(node.Url, node); } if (parentNode != null) { if (!container.ChildCollectionsMap.ContainsKey(parentNode.Key)) { container.ChildCollectionsMap[parentNode.Key] = new SiteMapNodeCollection(); } container.ChildCollectionsMap[parentNode.Key].Add(node); } }
/// <exclude /> public static SiteMapContainer LoadSiteMap(CompositeC1SiteMapProvider provider, CultureInfo culture, PublicationScope publicationScope, Guid rootPageId) { using (var data = new DataConnection(publicationScope, culture)) { PageManager.PreloadPageCaching(); var rootPage = data.SitemapNavigator.GetPageNodeById(rootPageId); if (rootPage == null) { return null; } var container = new SiteMapContainer { Root = new CompositeC1SiteMapNode(provider, rootPage, data, 1) }; LoadNodes(provider, rootPage, null, container, data, 1); return container; } }
/// <exclude /> protected virtual void AddRolesInternal(SiteMapContainer siteMapContainer) { }
private static void LoadNodes(CompositeC1SiteMapProvider provider, PageNode pageNode, SiteMapNode parent, SiteMapContainer container, DataConnection data, int level) { if (pageNode.Url == null) { return; } var node = new CompositeC1SiteMapNode(provider, pageNode, data, level); AddNode(node, parent, container); var childs = pageNode.ChildPages; foreach (var child in childs) { LoadNodes(provider, child, node, container, data, level + 1); } }
/// <exclude /> protected virtual void AddRolesInternal(SiteMapContainer siteMapContainer) { }
/// <summary> /// Adds sitemap to cache. /// </summary> /// <param name="siteMap">The site map.</param> /// <param name="host">The host.</param> /// <param name="culture">The culture.</param> /// <param name="rootPageId">The root page id.</param> public static void AddToCache(SiteMapContainer siteMap, string host, CultureInfo culture, Guid rootPageId) { var key = GetCacheKey(host, culture, rootPageId); var context = HttpContext.Current; context.Items[key] = siteMap; MemoryCache.Default.Add(key, siteMap, ObjectCache.InfiniteAbsoluteExpiration); }