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);
        }
Beispiel #2
0
            /// <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);
            }
Beispiel #3
0
            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);
        }
Beispiel #5
0
            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);
                }
            }
Beispiel #6
0
            /// <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);
                }
            }
Beispiel #7
0
            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);
                }
            }
Beispiel #8
0
            /// <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) { }
Beispiel #10
0
            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)
 {
 }
Beispiel #12
0
            /// <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);
            }