/// <summary>
        /// Processes all items in site under root path
        /// </summary>
        /// <param name="items">List of Items</param>
        /// <param name="sitemapSiteConfiguration">Current sitemap configuration</param>
        /// <param name="options">Url Options</param>
        public List <UrlElement> ProcessItems(List <Item> items, SitemapSiteConfiguration sitemapSiteConfiguration, UrlOptions options)
        {
            var urlElements = new List <UrlElement>();

            if (sitemapSiteConfiguration == null)
            {
                return(null);
            }

            Sitecore.Context.SetActiveSite(sitemapSiteConfiguration.Site.Name);

            foreach (Item item in items)
            {
                if (item.Versions.Count > 0)
                {
                    if (IsIncluded(item, sitemapSiteConfiguration))
                    {
                        sitemapSiteConfiguration.ItemsCount++;

                        string url = LinkManager.GetItemUrl(item, options);

                        if (string.IsNullOrEmpty(url))
                        {
                            continue;
                        }

                        url = DynamicSitemapHelper.EnsureHttpPrefix(url, sitemapSiteConfiguration.ForceHttps);

                        if (!String.IsNullOrEmpty(sitemapSiteConfiguration.ServerHost))
                        {
                            url = DynamicSitemapHelper.ReplaceHost(url, sitemapSiteConfiguration.ServerHost);
                        }

                        if (string.IsNullOrEmpty(url))
                        {
                            continue;
                        }

                        urlElements.Add(
                            new UrlElement()
                        {
                            Location         = url,
                            LastModification = item.Statistics.Updated,
                            ChangeFrequency  = sitemapSiteConfiguration.GetChangeFrequency(item),
                            Priority         = sitemapSiteConfiguration.GetPriority(item)
                        });
                    }
                }
            }

            if (sitemapSiteConfiguration.ItemsProcessor != null)
            {
                var urlItems = sitemapSiteConfiguration.ItemsProcessor.ProcessItems(sitemapSiteConfiguration);

                urlItems.AddRange(urlItems);
            }

            return(urlElements);
        }
        public void TestReplaceHost()
        {
            String url     = "http://old.host.dev/page?arg=1";
            String newHost = "new.host.dev";
            String newHostInvalidFormat = "http://new.host.dev/";
            String newUrl = "http://new.host.dev/page?arg=1";

            Assert.AreEqual(DynamicSitemapHelper.ReplaceHost(url, newHost), newUrl);
            Assert.AreEqual(DynamicSitemapHelper.ReplaceHost(url, newHostInvalidFormat), newUrl);
        }
Exemplo n.º 3
0
        public void TestEnsureHttpPrefix()
        {
            String urlWithHttp    = "http://old.host.dev/page?arg=1";
            String urlWithHttps   = "https://old.host.dev/page?arg=1";
            String urlWithoutHttp = "://old.host.dev/page?arg=1";

            Assert.AreEqual(DynamicSitemapHelper.EnsureHttpPrefix(urlWithHttp), urlWithHttp);
            Assert.AreEqual(DynamicSitemapHelper.EnsureHttpPrefix(urlWithHttps), urlWithHttps);

            Assert.AreEqual(DynamicSitemapHelper.EnsureHttpPrefix(urlWithoutHttp), "http" + urlWithoutHttp);
            Assert.AreEqual(DynamicSitemapHelper.EnsureHttpPrefix(urlWithoutHttp, true), "https" + urlWithoutHttp);
            Assert.AreEqual(DynamicSitemapHelper.EnsureHttpPrefix(urlWithHttp, true), "https" + urlWithoutHttp);
        }
        /// <summary>
        /// Processes all items in site under root path
        /// </summary>
        /// <param name="items">List of Items</param>
        /// <param name="sitemapSiteConfiguration">Current sitemap configuration</param>
        /// <param name="options">Url Options</param>
        public List <UrlElement> ProcessItems(List <Item> items, SitemapSiteConfiguration sitemapSiteConfiguration, UrlOptions options)
        {
            var urlElements = new List <UrlElement>();

            foreach (var item in items)
            {
                if (item.Versions.Count > 0)
                {
                    //if (DynamicSitemapHelper.IsWildcard(item))
                    //{
                    //    PrepareDynamicItems(item, sitemapSiteConfiguration, xml);
                    //}

                    if (IsIncluded(item, sitemapSiteConfiguration))
                    {
                        sitemapSiteConfiguration.ItemsCount++;

                        var url = LinkManager.GetItemUrl(item, options);
                        url = DynamicSitemapHelper.EnsureHttpPrefix(url, sitemapSiteConfiguration.ForceHttps);

                        if (!String.IsNullOrEmpty(sitemapSiteConfiguration.ServerHost))
                        {
                            url = DynamicSitemapHelper.ReplaceHost(url, sitemapSiteConfiguration.ServerHost);
                        }

                        urlElements.Add(
                            new UrlElement()
                        {
                            Location         = url,
                            LastModification = item.Statistics.Updated,
                            ChangeFrequency  = sitemapSiteConfiguration.GetChangeFrequency(item),
                            Priority         = sitemapSiteConfiguration.GetPriority(item)
                        });
                    }
                }
            }

            if (sitemapSiteConfiguration.ItemsProcessor != null)
            {
                var urlItems = sitemapSiteConfiguration.ItemsProcessor.ProcessItems(sitemapSiteConfiguration);

                urlItems.AddRange(urlItems);
            }

            return(urlElements);
        }
        /// <summary>
        /// Prepares dynamic items - items accessed by wildcard
        /// </summary>
        /// <param name="wildcardItem">Wildcard Item</param>
        /// <param name="sitemapSiteConfiguration">Sitemap site configuration</param>
        /// <param name="xml">XmlTextWriter object</param>
        protected virtual void PrepareDynamicItems(Item wildcardItem, SitemapSiteConfiguration sitemapSiteConfiguration, XmlTextWriter xml)
        {
            var dynamicRoute = sitemapSiteConfiguration.DynamicRoutes.SingleOrDefault(x => x["Dynamic Item"] == wildcardItem.ID.ToString());

            if (dynamicRoute != null)
            {
                var datasource = Database.GetItem(dynamicRoute["Data Source"]);

                if (datasource != null && datasource.HasChildren)
                {
                    UrlOptions options = GetUrlOptions();
                    options.Site = sitemapSiteConfiguration.Site;

                    var dynamicItemActualUrl = LinkManager.GetItemUrl(wildcardItem, options);

                    foreach (var item in datasource.Children.ToList())
                    {
                        if (item.Versions.Count > 0 && IsIncluded(item, sitemapSiteConfiguration, true))
                        {
                            var lastSegment = item.Name;
                            lastSegment = options.LowercaseUrls ? lastSegment.ToLower() : lastSegment;

                            var url = dynamicItemActualUrl
                                      .Replace(",-w-,", lastSegment)
                                      .Replace("*", lastSegment);

                            url = DynamicSitemapHelper.EnsureHttpPrefix(url, sitemapSiteConfiguration.ForceHttps);

                            if (!String.IsNullOrEmpty(sitemapSiteConfiguration.ServerHost))
                            {
                                url = DynamicSitemapHelper.ReplaceHost(url, sitemapSiteConfiguration.ServerHost);
                            }

                            GenerateUrlElement(url, item, sitemapSiteConfiguration, xml);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Processes all items in site under root path
        /// </summary>
        /// <param name="items">List of Items</param>
        /// <param name="sitemapSiteConfiguration">Current sitemap configuration</param>
        /// <param name="options">Url Options</param>
        /// <param name="xml">Xml Text Writer object</param>
        public void ProcessItems(List <Item> items, SitemapSiteConfiguration sitemapSiteConfiguration, UrlOptions options, XmlTextWriter xml)
        {
            var templateCache = new Dictionary <Guid, bool>();

            foreach (var item in items)
            {
                if (item.Versions.Count > 0)
                {
                    if (DynamicSitemapHelper.IsWildcard(item))
                    {
                        this.PrepareDynamicItems(item, sitemapSiteConfiguration, xml, templateCache);
                    }

                    else if (this.IsIncluded(item, sitemapSiteConfiguration, templateCache))
                    {
                        var url = LinkManager.GetItemUrl(item, options);
                        url = DynamicSitemapHelper.EnsureHttpPrefix(url, sitemapSiteConfiguration.ForceHttps);

                        if (!String.IsNullOrEmpty(sitemapSiteConfiguration.ServerHost))
                        {
                            url = DynamicSitemapHelper.ReplaceHost(url, sitemapSiteConfiguration.ServerHost);
                        }

                        this.GenerateUrlElement(url, item, sitemapSiteConfiguration, xml);
                    }
                }
            }

            if (sitemapSiteConfiguration.ItemsProcessor != null)
            {
                var urlItems = sitemapSiteConfiguration.ItemsProcessor.ProcessItems(sitemapSiteConfiguration);

                foreach (var urlItem in urlItems)
                {
                    this.GenerateUrlElement(urlItem, sitemapSiteConfiguration, xml);
                }
            }
        }