Пример #1
0
        public static string CheckForSpecialURL(SiteData site)
        {
            string sRequestedURL = "/";

            if (IsWebView)
            {
                sRequestedURL = CurrentScriptName;
                string sFileRequested = sRequestedURL;

                if (!sRequestedURL.ToLowerInvariant().StartsWith(AdminFolderPath) && site != null)
                {
                    if (sFileRequested.ToLowerInvariant().StartsWith(site.BlogFolderPath.ToLowerInvariant()))
                    {
                        if (site.GetSpecialFilePathPrefixes().Where(x => sFileRequested.ToLowerInvariant().StartsWith(x)).Count() > 0)
                        {
                            if (site.Blog_Root_ContentID.HasValue)
                            {
                                using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                                    SiteNav blogNavPage = navHelper.GetLatestVersion(site.SiteID, site.Blog_Root_ContentID.Value);
                                    if (blogNavPage != null)
                                    {
                                        sRequestedURL = blogNavPage.FileName;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(sRequestedURL);
        }
Пример #2
0
        public List <ContentCategory> GetPageCategories(int takeTop)
        {
            if (takeTop < 0)
            {
                takeTop = 300000;
            }

            if (SecurityData.AdvancedEditMode && !this.IsPageLocked)
            {
                using (CMSConfigHelper cmsHelper = new CMSConfigHelper()) {
                    cmsHelper.OverrideKey(this.ThePage.FileName);
                    if (cmsHelper.cmsAdminContent != null)
                    {
                        return(cmsHelper.cmsAdminContent.ContentCategories.Take(takeTop).ToList());
                    }
                }
            }
            else
            {
                using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                    return(navHelper.GetCategoryListForPost(this.TheSite.SiteID, takeTop, this.ThePage.Root_ContentID));
                }
            }
            return(new List <ContentCategory>());
        }
Пример #3
0
        public static HtmlString GetSiteMap()
        {
            StringBuilder sb = new StringBuilder();

            SiteData       site   = SiteData.CurrentSite;
            List <SiteNav> lstNav = new List <SiteNav>();

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                //lstNav = navHelper.GetTwoLevelNavigation(SiteData.CurrentSiteID, true);
                lstNav = navHelper.GetLevelDepthNavigation(SiteData.CurrentSiteID, 4, true);
            }
            lstNav.RemoveAll(x => x.ShowInSiteMap == false);

            DateTime dtMax      = lstNav.Min(x => x.EditDate);
            string   DateFormat = "yyyy-MM-dd";

            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent          = true;
            settings.Encoding        = Encoding.UTF8;
            settings.CheckCharacters = true;

            XmlWriter writer = XmlWriter.Create(sb, settings);

            //writer.WriteStartDocument();
            writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");
            writer.WriteRaw("\n");
            writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
            writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
            writer.WriteAttributeString("xsi", "schemaLocation", null, "http://www.sitemaps.org/schemas/sitemap/0.9    http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");

            writer.WriteRaw("\n");
            writer.WriteStartElement("url");
            writer.WriteElementString("loc", site.MainURL);
            writer.WriteElementString("lastmod", dtMax.ToString(DateFormat));
            writer.WriteElementString("priority", "1.0");
            writer.WriteEndElement();
            writer.WriteRaw("\n");

            // always, hourly, daily, weekly, monthly, yearly, never

            foreach (SiteNav n in lstNav)
            {
                writer.WriteStartElement("url");
                writer.WriteElementString("loc", site.ConstructedCanonicalURL(n));
                writer.WriteElementString("lastmod", n.EditDate.ToString(DateFormat));
                writer.WriteElementString("changefreq", "weekly");
                writer.WriteElementString("priority", n.Parent_ContentID.HasValue ? "0.60" : "0.80");
                writer.WriteEndElement();
                writer.WriteRaw("\n");
            }

            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();

            return(new HtmlString(sb.ToString()));
        }
Пример #4
0
        public void GenerateSuccessResponse(HttpRequest request, XmlWriter writer, TrackBackInfo tb)
        {
            SiteNav navData = null;

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                navData = navHelper.FindByFilename(SiteData.CurrentSiteID, tb.BlogPostID);
            }
            string sReferer = null;
            string sIP      = request.ServerVariables["REMOTE_ADDR"].ToString();

            try { sReferer = request.ServerVariables["HTTP_REFERER"].ToString(); } catch { }

            PostComment pc = new PostComment();

            pc.ContentCommentID = Guid.NewGuid();
            pc.Root_ContentID   = navData.Root_ContentID;
            pc.CreateDate       = SiteData.CurrentSite.Now;
            pc.IsApproved       = false;
            pc.IsSpam           = false;
            pc.CommenterIP      = sIP;
            pc.CommenterEmail   = "trackback";

            pc.CommenterName   = tb.BlogName;
            pc.PostCommentText = tb.BlogExcerpt;

#if DEBUG
            pc.PostCommentText = request.UserAgent + "\r\n" + tb.RequestSourceURL + "\r\n" + tb.BlogExcerpt;
#endif

            pc.CommenterURL = tb.RequestSourceURL;
            if (!string.IsNullOrEmpty(sReferer))
            {
                pc.CommenterURL = sReferer;
            }

            pc.Save();

            writer.WriteStartElement("response");
            writer.WriteElementString("error", "0");
            writer.WriteStartElement("rss");
            writer.WriteAttributeString("version", "0.91");
            writer.WriteStartElement("channel");

            if (navData != null)
            {
                writer.WriteElementString("title", navData.NavMenuText);
                writer.WriteElementString("link", SiteData.CurrentSite.ConstructedCanonicalURL(navData));
                writer.WriteElementString("description", navData.PageTextPlainSummary);
            }

            writer.WriteElementString("language", "");

            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndElement();

            writer.Flush();
            writer.Close();
        }
Пример #5
0
        public void RenderSiteMap(HttpContext context)
        {
            HttpRequest  request  = context.Request;
            HttpResponse response = context.Response;

            SiteData       site   = SiteData.CurrentSite;
            List <SiteNav> lstNav = new List <SiteNav>();

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                //lstNav = navHelper.GetTwoLevelNavigation(SiteData.CurrentSiteID, true);
                lstNav = navHelper.GetLevelDepthNavigation(SiteData.CurrentSiteID, 4, true);
            }
            lstNav.RemoveAll(x => x.ShowInSiteMap == false);

            DateTime dtMax      = lstNav.Min(x => x.EditDate);
            string   DateFormat = "yyyy-MM-dd";

            response.Buffer = false;
            response.Clear();
            response.ContentType = "application/xml";

            XmlWriter writer = XmlWriter.Create(response.Output);

            writer.WriteStartDocument();
            writer.WriteRaw("\n");
            writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
            writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
            writer.WriteAttributeString("xsi", "schemaLocation", null, "http://www.sitemaps.org/schemas/sitemap/0.9    http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");

            writer.WriteRaw("\n");
            writer.WriteStartElement("url");
            writer.WriteElementString("loc", site.MainURL);
            writer.WriteElementString("lastmod", dtMax.ToString(DateFormat));
            writer.WriteElementString("priority", "1.0");
            writer.WriteEndElement();
            writer.WriteRaw("\n");

            // always, hourly, daily, weekly, monthly, yearly, never

            foreach (SiteNav n in lstNav)
            {
                writer.WriteStartElement("url");
                writer.WriteElementString("loc", site.ConstructedCanonicalURL(n));
                writer.WriteElementString("lastmod", n.EditDate.ToString(DateFormat));
                writer.WriteElementString("changefreq", "weekly");
                writer.WriteElementString("priority", n.Parent_ContentID.HasValue ? "0.60" : "0.80");
                writer.WriteEndElement();
                writer.WriteRaw("\n");
            }

            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();
        }
Пример #6
0
        public string SendTrackback(string sourceURL, Guid siteID, string sTgtURL)
        {
            this.DestinationUrl = new Uri(sTgtURL);
            this.BlogSite       = SiteData.GetSiteFromCache(siteID);

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                this.SourcePage = navHelper.FindByFilename(siteID, sourceURL);
            }

            return(SendTrackback());
        }
Пример #7
0
        public string SendTrackback(Guid sourceGuid, Guid siteID, string sTgtURL)
        {
            this.DestinationUrl = new Uri(sTgtURL);
            this.BlogSite       = SiteData.GetSiteFromCache(siteID);

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                this.SourcePage = navHelper.GetLatestVersion(siteID, sourceGuid);
            }

            return(SendTrackback());
        }
Пример #8
0
        internal List <SiteNav> GetSiteUpdates(ListContentType contentType, int takeTop, List <Guid> lstCategories, List <string> lstCategorySlugs)
        {
            List <SiteNav> _siteUpdates = new List <SiteNav>();

            if (lstCategories == null)
            {
                lstCategories = new List <Guid>();
            }
            if (lstCategorySlugs == null)
            {
                lstCategorySlugs = new List <string>();
            }

            if (lstCategories.Any() || lstCategorySlugs.Any())
            {
                contentType = ListContentType.SpecifiedCategories;
            }

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                switch (contentType)
                {
                case ListContentType.Blog:
                    _siteUpdates = navHelper.GetLatestPosts(this.TheSite.SiteID, takeTop, !SecurityData.IsAuthEditor);
                    break;

                case ListContentType.ContentPage:
                    _siteUpdates = navHelper.GetLatest(this.TheSite.SiteID, takeTop, !SecurityData.IsAuthEditor);
                    break;

                case ListContentType.SpecifiedCategories:
                    if (takeTop > 0)
                    {
                        _siteUpdates = navHelper.GetFilteredContentByIDPagedList(SiteData.CurrentSite, lstCategories, lstCategorySlugs, !SecurityData.IsAuthEditor, takeTop, 0, "GoLiveDate", "DESC");
                    }
                    else
                    {
                        _siteUpdates = navHelper.GetFilteredContentByIDPagedList(SiteData.CurrentSite, lstCategories, lstCategorySlugs, !SecurityData.IsAuthEditor, 250000, 0, "NavMenuText", "ASC");
                    }
                    break;
                }
            }

            if (_siteUpdates == null)
            {
                _siteUpdates = new List <SiteNav>();
            }

            _siteUpdates = TweakData(_siteUpdates);

            return(_siteUpdates);
        }
Пример #9
0
        private List <SyndicationItem> GetRecentPagesOrPosts(RSSFeedInclude feedData)
        {
            List <SyndicationItem> syndRSS = new List <SyndicationItem>();
            List <SiteNav>         lst     = new List <SiteNav>();

            ContentPageType PageType = new ContentPageType();

            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                if (feedData == RSSFeedInclude.PageOnly || feedData == RSSFeedInclude.BlogAndPages)
                {
                    List <SiteNav> lst1 = navHelper.GetLatest(this.SiteID, 8, true);
                    lst = lst.Union(lst1).ToList();
                    List <SiteNav> lst2 = navHelper.GetLatestUpdates(this.SiteID, 10, true);
                    lst = lst.Union(lst2).ToList();
                }
                if (feedData == RSSFeedInclude.BlogOnly || feedData == RSSFeedInclude.BlogAndPages)
                {
                    List <SiteNav> lst1 = navHelper.GetLatestPosts(this.SiteID, 8, true);
                    lst = lst.Union(lst1).ToList();
                    List <SiteNav> lst2 = navHelper.GetLatestPostUpdates(this.SiteID, 10, true);
                    lst = lst.Union(lst2).ToList();
                }
            }

            lst.RemoveAll(x => x.ShowInSiteMap == false && x.ContentType == ContentPageType.PageType.ContentEntry);
            lst.RemoveAll(x => x.BlockIndex == true);

            foreach (SiteNav sn in lst)
            {
                SyndicationItem si = new SyndicationItem();

                string sPageURI = RemoveDupeSlashesURL(this.ConstructedCanonicalURL(sn));

                Uri PageURI = new Uri(sPageURI);

                si.Content = new TextSyndicationContent(sn.PageTextPlainSummaryMedium.ToString());
                si.Title   = new TextSyndicationContent(sn.NavMenuText);
                si.Links.Add(SyndicationLink.CreateSelfLink(PageURI));
                si.AddPermalink(PageURI);

                si.LastUpdatedTime = sn.EditDate;
                si.PublishDate     = sn.CreateDate;

                syndRSS.Add(si);
            }

            return(syndRSS.OrderByDescending(p => p.PublishDate).ToList());
        }
Пример #10
0
        public SiteNav GetSiteNav()
        {
            SiteNav sd = null;

            if (SiteData.IsPageSampler || !SiteData.IsWebView)
            {
                sd = SiteNavHelper.GetSamplerView();
            }
            else
            {
                using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                    sd = navHelper.GetLatestVersion(this.SiteID, this.Root_ContentID);
                }
            }
            return(sd);
        }
Пример #11
0
        public List <ContentDateTally> GetSiteDates(int takeTop)
        {
            List <ContentDateTally> lstNav = new List <ContentDateTally>();

            if (takeTop < 0)
            {
                takeTop = 100000;
            }
            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                lstNav = navHelper.GetMonthBlogUpdateList(this.TheSite.SiteID, takeTop, !SecurityData.IsAuthEditor);
            }

            lstNav.RemoveAll(x => x.Count < 1);
            lstNav = lstNav.OrderByDescending(x => x.TallyDate).ToList();

            return(lstNav);
        }
Пример #12
0
        public List <ContentCategory> GetSiteCategories(int takeTop, bool ShowNonZeroCountOnly)
        {
            List <ContentCategory> lstNav = new List <ContentCategory>();

            if (takeTop < 0)
            {
                takeTop = 100000;
            }
            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                lstNav = navHelper.GetCategoryList(this.TheSite.SiteID, takeTop);
            }

            lstNav.RemoveAll(x => x.Count < 1 && ShowNonZeroCountOnly);
            lstNav = lstNav.OrderByDescending(x => x.Count).ToList();

            return(lstNav);
        }
Пример #13
0
        protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestCtx)
        {
            string requestedUri = (string)requestCtx.RouteData.Values["RequestedUri"];

            requestedUri = String.IsNullOrEmpty(requestedUri) ? String.Empty : requestedUri.ToLower();
            if (!requestedUri.StartsWith("/"))
            {
                requestedUri = String.Format("/{0}", requestedUri);
            }
            if (requestedUri.EndsWith("/"))
            {
                requestedUri = requestedUri.Substring(0, requestedUri.Length - 1);
            }

            if (requestedUri.EndsWith(".ashx"))
            {
                if (requestedUri == "/rss.ashx")
                {
                    requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                    requestCtx.RouteData.Values["action"]     = "RSSFeed";
                    return(base.GetHttpHandler(requestCtx));
                }
                if (requestedUri == "/sitemap.ashx")
                {
                    requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                    requestCtx.RouteData.Values["action"]     = "SiteMap";
                    return(base.GetHttpHandler(requestCtx));
                }

                //if (requestedUri == "/trackback.ashx") {	// will be dead link
                //	requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                //	requestCtx.RouteData.Values["action"] = "Trackback";
                //	return base.GetHttpHandler(requestCtx);
                //}

                requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                requestCtx.RouteData.Values["action"]     = "PageNotFound";
                requestCtx.RouteData.Values["id"]         = null;

                SiteData.WriteDebugException("cmsroutehandler ashx not matched", new Exception(String.Format("RequestedUri: {0}", requestedUri)));

                return(base.GetHttpHandler(requestCtx));
            }
            else if (requestedUri.EndsWith(".aspx"))
            {
                //since .aspx is not supported
                requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                requestCtx.RouteData.Values["action"]     = "PageNotFound";
                requestCtx.RouteData.Values["id"]         = null;
            }
            else
            {
                string sCurrentPage = SiteData.CurrentScriptName;

                try {
                    string sScrubbedURL = SiteData.AlternateCurrentScriptName;

                    if (sScrubbedURL.ToLower() != sCurrentPage.ToLower())
                    {
                        requestedUri = sScrubbedURL;
                    }

                    SiteNav navData             = null;
                    bool    bIsHomePage         = false;
                    bool    bIgnorePublishState = SecurityData.AdvancedEditMode || SecurityData.IsAdmin || SecurityData.IsSiteEditor;

                    using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                        if (SiteData.IsLikelyHomePage(requestedUri))
                        {
                            navData = navHelper.FindHome(SiteData.CurrentSiteID, !bIgnorePublishState);

                            if (navData != null)
                            {
                                requestedUri = navData.FileName;
                                bIsHomePage  = true;
                            }
                        }

                        if (!bIsHomePage)
                        {
                            navData = navHelper.GetLatestVersion(SiteData.CurrentSiteID, !bIgnorePublishState, requestedUri);
                        }

                        if ((SiteData.IsLikelyHomePage(requestedUri)) && navData == null)
                        {
                            navData = SiteNavHelper.GetEmptyHome();
                        }

                        requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                        if (navData != null)
                        {
                            SiteData.WriteDebugException("cmsroutehandler != null", new Exception(String.Format("Default: {0}", navData.FileName)));
                            requestCtx.RouteData.Values["action"] = "Default";
                        }
                        else
                        {
                            SiteData.WriteDebugException("cmsroutehandler == null", new Exception(String.Format("_PageNotFound: {0}", sCurrentPage)));
                            requestCtx.RouteData.Values["action"] = "PageNotFound";
                        }
                        requestCtx.RouteData.Values["id"] = null;
                    }
                } catch (Exception ex) {
                    SiteData.WriteDebugException("cmsroutehandler_exception_uri", new Exception(String.Format("Exception: {0}", sCurrentPage)));

                    if (DatabaseUpdate.SystemNeedsChecking(ex) || DatabaseUpdate.AreCMSTablesIncomplete())
                    {
                        requestCtx.RouteData.Values["controller"] = ContentCtrlr;
                        requestCtx.RouteData.Values["action"]     = "Default";
                        requestCtx.RouteData.Values["id"]         = null;
                        SiteData.WriteDebugException("cmsroutehandler_exception_systemneedschecking", ex);
                    }
                    else
                    {
                        //something bad has gone down, toss back the error
                        SiteData.WriteDebugException("cmsroutehandler_exception", ex);
                        throw;
                    }
                }
            }

            return(base.GetHttpHandler(requestCtx));
        }
        public void ProcessRequest(HttpContext context)
        {
            using (ISiteNavHelper navHelper = SiteNavFactory.GetSiteNavHelper()) {
                SiteNav navData        = null;
                string  sFileRequested = context.Request.Path;
                sRequestedURL = sFileRequested;
                string sScrubbedURL = sFileRequested;

                sRequestedURL = SiteData.AppendDefaultPath(sRequestedURL);

                try {
                    sScrubbedURL = SiteData.AlternateCurrentScriptName;

                    if (sScrubbedURL.ToLower() != sRequestedURL.ToLower())
                    {
                        sFileRequested = sScrubbedURL;
                        bURLOverride   = true;
                    }

                    VirtualDirectory.RegisterRoutes();
                } catch (Exception ex) {
                    //assumption is database is probably empty / needs updating, so trigger the under construction view
                    if (DatabaseUpdate.SystemNeedsChecking(ex) || DatabaseUpdate.AreCMSTablesIncomplete())
                    {
                        if (navData == null)
                        {
                            navData = SiteNavHelper.GetEmptyHome();
                        }
                    }
                    else
                    {
                        //something bad has gone down, toss back the error
                        throw;
                    }
                }

                sFileRequested = SiteData.AppendDefaultPath(sFileRequested);

                if (context.User.Identity.IsAuthenticated)
                {
                    try {
                        if (context.Request.UrlReferrer != null && !string.IsNullOrEmpty(context.Request.UrlReferrer.AbsolutePath))
                        {
                            if (context.Request.UrlReferrer.AbsolutePath.ToLower().Contains(FormsAuthentication.LoginUrl.ToLower()) ||
                                FormsAuthentication.LoginUrl.ToLower() == sFileRequested.ToLower())
                            {
                                if (SiteFilename.DashboardURL.ToLower() != sFileRequested.ToLower() &&
                                    SiteFilename.SiteInfoURL.ToLower() != sFileRequested.ToLower())
                                {
                                    sFileRequested = SiteData.AdminDefaultFile;
                                }
                            }
                        }
                    } catch (Exception ex) { }
                }

                if (sFileRequested.ToLower().EndsWith(".aspx") || SiteData.IsLikelyHomePage(sFileRequested))
                {
                    bool bIgnorePublishState = SecurityData.AdvancedEditMode || SecurityData.IsAdmin || SecurityData.IsSiteEditor;

                    string queryString = String.Empty;
                    queryString = context.Request.QueryString.ToString();
                    if (string.IsNullOrEmpty(queryString))
                    {
                        queryString = String.Empty;
                    }

                    if (!CMSConfigHelper.CheckRequestedFileExistence(sFileRequested, SiteData.CurrentSiteID) || SiteData.IsLikelyHomePage(sFileRequested))
                    {
                        context.Items[REQ_PATH]  = context.Request.PathInfo;
                        context.Items[REQ_QUERY] = context.Request.QueryString.ToString();

                        // handle a case where this site was migrated from a format where all pages varied on a consistent querystring
                        // allow this QS parm to be set in a config file.
                        if (SiteData.IsLikelyHomePage(sFileRequested))
                        {
                            string sParm = String.Empty;
                            if (SiteData.OldSiteQuerystring != string.Empty)
                            {
                                if (context.Request.QueryString[SiteData.OldSiteQuerystring] != null)
                                {
                                    sParm = context.Request.QueryString[SiteData.OldSiteQuerystring].ToString();
                                }
                            }
                            if (!string.IsNullOrEmpty(sParm))
                            {
                                sFileRequested = "/" + sParm + ".aspx";

                                SiteData.Show301Message(sFileRequested);

                                context.Response.Redirect(sFileRequested);
                                context.Items[REQ_PATH]  = sFileRequested;
                                context.Items[REQ_QUERY] = String.Empty;
                            }
                        }

                        try {
                            //periodic test of database up-to-dated-ness
                            if (DatabaseUpdate.TablesIncomplete)
                            {
                                navData = SiteNavHelper.GetEmptyHome();
                            }
                            else
                            {
                                bool bIsHomePage = false;

                                if (SiteData.IsLikelyHomePage(sFileRequested))
                                {
                                    navData = navHelper.FindHome(SiteData.CurrentSiteID, !bIgnorePublishState);

                                    if (SiteData.IsLikelyHomePage(sFileRequested) && navData != null)
                                    {
                                        sFileRequested = navData.FileName;
                                        bIsHomePage    = true;
                                    }
                                }

                                if (!bIsHomePage)
                                {
                                    string pageName = sFileRequested;
                                    navData = navHelper.GetLatestVersion(SiteData.CurrentSiteID, !bIgnorePublishState, pageName);
                                }

                                if (SiteData.IsLikelyHomePage(sFileRequested) && navData == null)
                                {
                                    navData = SiteNavHelper.GetEmptyHome();
                                }
                            }
                        } catch (Exception ex) {
                            //assumption is database is probably empty / needs updating, so trigger the under construction view
                            if (DatabaseUpdate.SystemNeedsChecking(ex) || DatabaseUpdate.AreCMSTablesIncomplete())
                            {
                                if (navData == null)
                                {
                                    navData = SiteNavHelper.GetEmptyHome();
                                }
                            }
                            else
                            {
                                //something bad has gone down, toss back the error
                                throw;
                            }
                        }

                        if (navData != null)
                        {
                            string sSelectedTemplate = navData.TemplateFile;

                            // selectivly engage the cms helper only if in advance mode
                            if (SecurityData.AdvancedEditMode)
                            {
                                using (CMSConfigHelper cmsHelper = new CMSConfigHelper()) {
                                    if (cmsHelper.cmsAdminContent != null)
                                    {
                                        try { sSelectedTemplate = cmsHelper.cmsAdminContent.TemplateFile.ToLower(); } catch { }
                                    }
                                }
                            }

                            if (!CMSConfigHelper.CheckFileExistence(sSelectedTemplate))
                            {
                                sSelectedTemplate = SiteData.DefaultTemplateFilename;
                            }

                            sVirtualReqFile = sFileRequested;

                            if (bURLOverride)
                            {
                                sVirtualReqFile = sRequestedURL;
                                sFileRequested  = sRequestedURL;
                            }

                            RewriteCMSPath(context, sSelectedTemplate, queryString);
                        }
                        else
                        {
                            SiteData.PerformRedirectToErrorPage(404, sFileRequested);
                            SiteData.Show404MessageFull(true);
                        }
                    }
                    else
                    {
                        sVirtualReqFile = sFileRequested;

                        RewriteCMSPath(context, sVirtualReqFile, queryString);
                    }
                }

                context.ApplicationInstance.CompleteRequest();
            }
        }