﻿<%@ WebHandler Language="C#" Class="sitemap" %>

using System;
using System.Globalization;
using System.IO;
using System.Web;
using System.Xml;

public class sitemap : IHttpHandler
{

    private void WritePage(string url, XmlTextWriter writer, Telerik.Cms.ICmsPage page)
    {
        writer.WriteStartElement("url");
        writer.WriteElementString("loc", url + Telerik.Web.UrlPath.ResolveUrl(page.StaticUrl));
        writer.WriteElementString("lastmod", page.DateModified.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:sszzz"));
        writer.WriteEndElement(); // url
    }

    public void ProcessRequest(HttpContext context)
    {
        /// Change default site URL
        string url = String.Concat(context.Request.Url.Scheme, @"://", context.Request.Url.Host);
        if (!context.Request.Url.IsDefaultPort)
        {
            url = String.Concat(url, ":", context.Request.Url.Port);
        }

        using (TextWriter textWriter = new StreamWriter(context.Response.OutputStream,
             System.Text.Encoding.UTF8))
        {
            XmlTextWriter writer = new XmlTextWriter(textWriter);
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteStartElement("urlset");
            writer.WriteAttributeString("xmlns",
                "http://www.sitemaps.org/schemas/sitemap/0.9");

            Telerik.Cms.CmsManager cmsManager = new Telerik.Cms.CmsManager();
            System.Collections.IList pages = cmsManager.GetPages();

            foreach (Telerik.Cms.ICmsPage page in pages)
            {
                //change filter page
                if (page.PageType != Telerik.Cms.CmsPageType.Group && page.Status == Telerik.Cms.PageStatus.Published && (page.DenyAnonymous == false) && (page.DenyIndexing == false))
                {
                    WritePage(url, writer, page);
                }
            }

            writer.WriteEndElement(); // urlset
        }
        context.Response.ContentType = "text/xml";
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}
