﻿<%@ WebHandler Language="C#" Class="sitemap" %>

  using System;
  using System.Web;
  using System.Data;
  using Settings;
  using System.Collections.Generic;

  public class sitemap : IHttpHandler {

  public void ProcessRequest (HttpContext context) {
  context.Response.ContentType = "application/xml";

  string strOut = string.Empty;
  string hostForXLS =  context.Request.Url.Host.ToLower();
  string hostStr = context.Request.Url.Host.ToLower().Replace("www.", string.Empty);


  string siteID = MultiPage.getSiteIdByURL(hostStr).ToString();
  int siteIDint = Convert.ToInt32(siteID);
  int siteType = MultiPage.getSiteTypeBySiteId(siteIDint);

  System.Globalization.IdnMapping a = new System.Globalization.IdnMapping();
  hostStr = a.GetAscii(hostStr);

  object tempRow = new object();

  context.Cache.Remove("RewriteRules");
  if (context.Cache["RewriteRules" + siteID] == null)
  {
  tempRow = (DataRow)Settings.SiteSetting.getRewriteRules(siteIDint);
  context.Cache["RewriteRules" + siteID] = tempRow;
  }
  else
  tempRow = (DataRow)context.Cache["RewriteRules" + siteID];

  DataRow siteSettings = (DataRow)tempRow;

  string sitePageExtension = siteSettings["sitePageExtension"].ToString();
  string siteItemFolder = siteSettings["siteItemFolder"].ToString();
  string sitePageFolder = siteSettings["sitePageFolder"].ToString();
  string siteContentFolder = siteSettings["siteContentFolder"].ToString();


  strOut = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><?xml-stylesheet type=\"text/xsl\" href=\"http://" + hostForXLS + "/sitemap.xsl\"?>\r\n" + 
	"<urlset  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n";

		DataTable allPages = Pages.getPagesBySiteId(siteIDint, false);
		foreach (DataRow currpage in allPages.Rows)
		{

		string urlLoc = string.Empty;
		string seoID = currpage["pageSeoID"].ToString().ToLower();
		if (seoID != "/default.aspx")
		urlLoc = "http://" + hostStr + "/" + sitePageFolder + "/" + seoID + "." + sitePageExtension;
		else
		urlLoc = "http://" + hostStr + "/";

		strOut += " <url>\r\n";
			strOut += "    <loc>" + urlLoc + "</loc>\r\n";
			strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
			strOut += "    <changefreq>monthly</changefreq>\r\n";
			strOut += "    <priority>0.5</priority>\r\n";
			strOut += "		</url>\r\n";
		}

		allPages = Products.getPagesBySiteId(siteIDint, true);
		foreach (DataRow currpage in allPages.Rows)
		{

		string urlLoc = string.Empty;
		string seoID = currpage["pageSeoID"].ToString().ToLower();
		urlLoc = "http://" + hostStr + "/" + siteItemFolder + "/" + seoID + "." + sitePageExtension;


		strOut += " <url>	\r\n";
			strOut += "    <loc>" + urlLoc + "</loc>\r\n";
			strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
			strOut += "    <changefreq>monthly</changefreq>\r\n";
			strOut += "    <priority>0.5</priority>\r\n";
			strOut += "		</url>\r\n";
		}

		allPages = PageCatalog.getPagesBySiteIdNoRoot(siteIDint, false);
		foreach (DataRow currpage in allPages.Rows)
		{

		string urlLoc = string.Empty;
		string seoID = currpage["pageSeoID"].ToString().ToLower();
		urlLoc = "http://" + hostStr + "/" + siteContentFolder + "/" + seoID + "." + sitePageExtension;


		strOut += " <url>	\r\n";
			strOut += "    <loc>" + urlLoc + "</loc>\r\n";
			strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
			strOut += "    <changefreq>monthly</changefreq>\r\n";
			strOut += "    <priority>0.5</priority>\r\n";
			strOut += "		</url>\r\n";		}

    if (siteType == 18)
    {
    List<AgentonFlat>
      agentonFlats = new List<AgentonFlat>
        ();
        if (HttpContext.Current.Cache["agentonFlats" + siteID] == null)
        {
        string[] temoSrt = MultiPage.getAgentonHashBySiteID(Convert.ToInt32(siteID));
        if (temoSrt != null)
        {
        agentonFlats = agenton.GetAgentonFlatsByUser(temoSrt[0], temoSrt[1]);
        HttpContext.Current.Cache["agentonFlats" + siteID] = agentonFlats;
        }
        }
        else
        agentonFlats = (List<AgentonFlat>
          )HttpContext.Current.Cache["agentonFlats" + siteID];
          if (agentonFlats.Count > 0)
          {
          foreach (AgentonFlat af in agentonFlats)
          {
          strOut += " <url> \r\n";
            strOut += "    <loc>http://" + hostStr + "/objectag/" + af.id + ".aspx</loc>\r\n";
            strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
            strOut += "    <changefreq>monthly</changefreq>\r\n";
            strOut += "    <priority>0.5</priority>\r\n";
            strOut += "   </url>\r\n";
          }
          }
          }

          if (siteType == 2)
          {
          DataRow param = MP.LoadParams(siteIDint); //все-таки костыль... вытаскиваем сайт ИД и скрываем ненужные блоки... подмать как полечить...
          DataTable avaliableOperation = new DataTable();
          if (context.Cache["MPparam" + siteID + "_" + param["MPfilterC"].ToString() + "_" + param["MPfilterA"]] == null)
          {
          avaliableOperation = PageCatalog.GetAllCatsWithLevelsMP(param["MPfilterC"].ToString(), param["MPfilterA"].ToString());
          context.Cache.Add("MPparam" + siteID + "_" + param["MPfilterC"].ToString() + "_" + param["MPfilterA"], avaliableOperation, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(6, 0, 0), System.Web.Caching.CacheItemPriority.Default, null);
          }
          else
          avaliableOperation = (DataTable)context.Cache["MPparam" + siteID + "_" + param["MPfilterC"].ToString() + "_" + param["MPfilterA"]];

          foreach (DataRow dr in avaliableOperation.Rows)
          {
          strOut += " <url>			\r\n";
			strOut += "    <loc>http://" + hostStr + "/content/" + dr["_opId"].ToString() + "MPOBJ" + dr["typeID"].ToString() + ".aspx</loc>\r\n";
			strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
			strOut += "    <changefreq>monthly</changefreq>\r\n";
			strOut += "    <priority>0.5</priority>\r\n";
			strOut += "		</url>\r\n";

		DataTable findObjects = new DataTable();
		if (context.Cache["fObj" + siteID + "_" + dr["_opId"] +"_" +  dr["typeID"]] == null)
		{
		findObjects = Products.getObjectsByCityIDOrAdmUnitIDAndOperIdAndTypeIDMP(param["MPfilterC"].ToString(), param["MPfilterA"].ToString(), Convert.ToInt32(dr["_opId"]), Convert.ToInt32(dr["typeID"]), string.Empty);
		context.Cache.Add("fObj" + siteID + "_" + dr["_opId"] + "_" + dr["typeID"], findObjects, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(6, 0, 0), System.Web.Caching.CacheItemPriority.Default, null);
		}
		else
		findObjects = (DataTable)context.Cache["fObj" + siteID + "_" + dr["_opId"] + "_" + dr["typeID"]];

		foreach (DataRow objDR in findObjects.Rows)
		{
		strOut += " <url>			\r\n";
			strOut += "    <loc>http://" + hostStr + "/item/" + objDR["objectID"].ToString() + ".aspx</loc>\r\n";
			strOut += "    <lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>\r\n";
			strOut += "    <changefreq>monthly</changefreq>\r\n";
			strOut += "    <priority>0.5</priority>\r\n";
			strOut += "		</url>\r\n";
		}
		}
		}
		strOut += "	</urlset>";

	context.Response.Write(strOut);
	context.Response.End();
	}

	public bool IsReusable {
	get {
	return false;
	}
	}

	}