Beispiel #1
0
        protected void LanguageToggleLinks_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.DataItem == null)
            {
                return;
            }

            var language     = (FrameworkLibrary.Language)e.Item.DataItem;
            var languageLink = (HyperLink)e.Item.FindControl("LanguageLink");

            languageLink.Text = language.Name;

            if (BasePage.CurrentMediaDetail.Language.CultureCode == language.CultureCode)
            {
                languageLink.CssClass = "current";
            }

            var item = MediaDetailsMapper.GetByMedia(BasePage.CurrentMedia, language);

            if (item == null)
            {
                e.Item.Visible = false;
                return;
            }

            languageLink.NavigateUrl = URIHelper.ConvertToAbsUrl(item.AutoCalculatedVirtualPath);
        }
Beispiel #2
0
        public void ProcessRequest(HttpContext context)
        {
            this.context = context;

            var templateBaseUrl = URIHelper.ConvertToAbsUrl(context.Request.QueryString["templateBaseUrl"]);

            var method = "loadfile";
            var path   = context.Request.QueryString["path"];

            if (!string.IsNullOrEmpty(context.Request["method"]))
            {
                method = context.Request["method"].ToLower();
            }

            if (string.IsNullOrEmpty(path))
            {
                path = context.Request.FilePath;
            }

            switch (method)
            {
            case "loadfile":
                LoadFile(path, templateBaseUrl);
                break;

                /*case "loadjsincludes":
                 *  LoadJsIncludes(context.Request.QueryString["pageId"], templateBaseUrl);
                 *  break;
                 *
                 * case "loadcssincludes":
                 *  LoadCssIncludes(context.Request.QueryString["pageId"], templateBaseUrl);
                 *  break;*/
            }
        }
Beispiel #3
0
        public void SetItem(IMediaDetail mediaDetail)
        {
            if (mediaDetail == null)
            {
                return;
            }

            Link.NavigateUrl = URIHelper.ConvertToAbsUrl(mediaDetail.AutoCalculatedVirtualPath);

            var title            = mediaDetail.SectionTitle;
            var shortDescription = mediaDetail.ShortDescription;

            var maxCharsTitle            = 40;
            var maxCharsShortDescription = 116;

            if (title.Length > maxCharsTitle)
            {
                title = title.Substring(0, maxCharsTitle);
            }

            if (shortDescription.Length > maxCharsShortDescription)
            {
                shortDescription = shortDescription.Substring(0, maxCharsShortDescription) + " ...";
            }

            Link.Attributes["title"] = "<span class='toolTipTitle'>" + title + "</span><br />" + shortDescription;
        }
Beispiel #4
0
        public void UpdateFieldsFromObject()
        {
            IMediaDetail item = (IMediaDetail)SelectedItem;

            if ((item.ID == 0) && (item.LinkTitle == null || item.LinkTitle == ""))
            {
                var mediaType    = MediaTypesMapper.GetByID(item.MediaTypeID);
                var createdItems = mediaType.MediaDetails.Where(i => !i.IsHistory && i.Media.ParentMediaID == item.Media.ParentMediaID && i.LanguageID == AdminBasePage.CurrentLanguage.ID).Select(i => i);

                var newIndex = createdItems.Count() + 1;

                item.LinkTitle = AdminBasePage.CurrentLanguage.DisplayName + " - " + mediaType.Name + " " + newIndex;
            }

            LinkTitle.Text = item.LinkTitle;

            var virtualPath = item.AutoCalculatedVirtualPath;

            /*if (LanguagesMapper.GetAllActive().Count() > 1)
             *  virtualPath = URIHelper.ConvertAbsUrlToTilda(URIHelper.ConvertToAbsUrl(virtualPath).Replace(URIHelper.BaseUrl, URIHelper.BaseUrlWithLanguage));*/

            VirtualPath.Text        = virtualPath;
            VirtualPath.NavigateUrl = URIHelper.ConvertToAbsUrl(virtualPath) + "?version=" + item.HistoryVersionNumber;

            UpdateTags();

            UpdateTabsFieldsFromObject();

            UpdateMediaFieldsFromObject();

            //SEOSettingsTab.UpdateFieldsFromObject();
            //PublishSettingsTab.UpdateFieldsFromObject();
        }
Beispiel #5
0
        private void Application_BeginRequest(Object source, EventArgs e)
        {
            var installerPath    = "~/Installer/";
            var absInstallerUrl  = URIHelper.ConvertToAbsUrl(installerPath);
            var absInstallerPath = URIHelper.ConvertToAbsPath(installerPath);

            if (Request.CurrentExecutionFilePathExtension == "" && !Request.Url.AbsoluteUri.StartsWith(absInstallerUrl))
            {
                if (Directory.Exists(absInstallerPath) && AppSettings.EnableInstaller)
                {
                    Response.Redirect(installerPath);
                }
            }


            if (AppSettings.IsRunningOnProd && AppSettings.ForceWWWRedirect)
            {
                var isSubDomain = (Request.Url.AbsoluteUri.Split('.').Length > 2);
                var isLocalHost = Request.Url.Host.StartsWith("localhost");

                if (!Request.Url.Host.StartsWith("www.") && !isLocalHost && !isSubDomain)
                {
                    Response.RedirectPermanent(Request.Url.AbsoluteUri.Replace("://", "://www."));
                }
            }


            BaseService.AddResponseHeaders();

            var virtualPathRequest = HttpContext.Current.Request.Path.EndsWith("/");

            if (virtualPathRequest)
            {
                Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
                Response.Cache.SetNoStore();
            }

            if (isFirstApplicationRequest)
            {
                ContextHelper.ClearAllMemoryCache();
                FrameworkBaseMedia.InitConnectionSettings(AppSettings.GetConnectionSettings());
                isFirstApplicationRequest = false;
            }

            if (Request.Url.AbsolutePath.Contains("robots.txt"))
            {
                var absPath = URIHelper.ConvertToAbsPath(Request.Url.AbsolutePath);

                if (File.Exists(absPath))
                {
                    var fileContent = File.ReadAllText(absPath);

                    var parsedContent = ParserHelper.ParseData(fileContent, BasePage.GetDefaultTemplateVars(""));

                    BaseService.WriteText(parsedContent);
                }
            }
        }
Beispiel #6
0
        public static void RenderRss(IEnumerable <RssItem> rssItems = null, string rssTitle = "", string rssDescription = "", string rssLink = "")
        {
            if (rssItems == null)
            {
                rssItems = MediaDetailsMapper.GetRssItems(MediaDetailsMapper.GetAllChildMediaDetails(FrameworkSettings.Current.CurrentMedia.ID, FrameworkSettings.Current.CurrentLanguage.ID).Where(i => i.CanRender && i.MediaType.ShowInSiteTree).OrderByDescending(i => i.PublishDate));
            }

            if (rssLink == "")
            {
                if (FrameworkSettings.Current.CurrentMediaDetail != null)
                {
                    rssLink = URIHelper.ConvertToAbsUrl(FrameworkSettings.Current.CurrentMediaDetail.VirtualPath);
                }
                else
                {
                    rssLink = URIHelper.ConvertToAbsUrl(URIHelper.GetCurrentVirtualPath());
                }
            }

            if (rssTitle == "")
            {
                rssTitle = FrameworkSettings.Current.CurrentMediaDetail.Title;
            }

            if (rssDescription == "")
            {
                rssDescription = FrameworkSettings.Current.CurrentMediaDetail.GetMetaDescription();
            }

            Rss rss = new Rss(rssTitle, rssLink, rssDescription);

            rss.Items = rssItems;

            var Response = HttpContext.Current.Response;

            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType     = "text/xml";

            RssHelper.WriteRss(rss, Response.OutputStream);

            Response.Flush();
            Response.End();
        }
        public override void SetValue(object value)
        {
            if (value != null)
            {
                var valAsString = value.ToString();

                if (!string.IsNullOrEmpty(valAsString) && valAsString.Contains(URIHelper.BaseUrl))
                {
                    valAsString = URIHelper.ConvertToAbsUrl(valAsString);
                    value       = valAsString;
                }

                SelectedFile.Text = value.ToString();

                if (!string.IsNullOrEmpty(SelectedFile.Text))
                {
                    try
                    {
                        SelectedFile.Text = ParserHelper.ParseData(SelectedFile.Text, BasePage.GetDefaultTemplateVars(""));
                        DirPath           = SelectedFile.Text;
                    }
                    catch (Exception ex)
                    {
                    }
                }

                if (CanSetSelectedImage(SelectedFile.Text))
                {
                    SelectedImage.ImageUrl = SelectedFile.Text;
                }
                else
                {
                    return;
                }
            }
        }
    public void LoadByVirtualPath(string virtualPath)
    {
        if ((!virtualPath.StartsWith("http")) && System.IO.File.Exists(HttpContext.Current.Server.MapPath(virtualPath)))
        {
            return;
        }

        currentVirtualPath = virtualPath;

        if (currentLanguage == null)
        {
            throw new Exception("Error loading default language");
        }

        if ((currentVirtualPath == "~/") || currentVirtualPath == URIHelper.ConvertAbsUrlToTilda(URIHelper.ConvertToAbsUrl(currentLanguage.UriSegment)))
        {
            long version = 0;
            long.TryParse(HttpContext.Current.Request["version"], out version);

            currentMediaDetail = WebsitesMapper.GetWebsite(version);
        }
        else
        {
            currentMediaDetail = MediaDetailsMapper.GetByVirtualPath(currentVirtualPath);
        }

        if (currentMediaDetail == null)
        {
            return;
        }

        currentLanguage = currentMediaDetail.Language;
        FrameworkSettings.SetCurrentLanguage(currentMediaDetail.Language);

        //rootMedia = FrameworkSettings.RootMedia;
        //rootMediaDetail = FrameworkSettings.RootMediaDetail;

        currentMedia = currentMediaDetail.Media;
    }
        private void UpdateTreeNode(JsTreeNode node, IMediaDetail detail)
        {
            if (detail == null)
            {
                return;
            }

            node.id     = detail.MediaID.ToString();
            node.parent = (detail.Media.ParentMediaID == null) ? "#" : detail.Media.ParentMediaID.ToString();
            node.text   = detail.SectionTitle;

            //node.children =( MediaDetailsMapper.GetAtleastOneChildByMedia(detail.Media, AdminBasePage.CurrentLanguage).Where(i => i.MediaType.ShowInSiteTree).Count() > 0);
            node.children = (BaseMapper.GetDataModel().MediaDetails.Count(i => i.MediaType.ShowInSiteTree && i.HistoryVersionNumber == 0 && i.Media.ParentMediaID == detail.MediaID) > 0);

            node.text = detail.SectionTitle.ToString();
            //node.Attributes.Add("FrontEndUrl", detail.AbsoluteUrl);

            var nodeText = "";

            if (detail.LanguageID != AdminBasePage.CurrentLanguage.ID)
            {
                nodeText            = $"{detail.LinkTitle} - {LanguagesMapper.GetByID(detail.Language.ID).Name} ({node.id})";
                node.li_attr._class = "doesNotExistInLanguage";
            }
            else
            {
                nodeText = $"{detail.LinkTitle} <small>({detail.MediaID})</small>";
            }

            if (detail.IsDeleted)
            {
                node.li_attr._class += " isDeleted";
            }

            if (detail.WillPublish)
            {
                node.li_attr._class += " willPublish";

                var autoPublishCode = $"<i class='fa fa-clock-o' aria-hidden='true' title='This page is set to auto-publish at: {detail.PublishDate}'></i> ";

                nodeText += $"<small class='willPublishWrapper'>{autoPublishCode}Will Publish</small>";
            }

            if (detail.IsPublished && detail.WillExpire)
            {
                node.li_attr._class += " willExpire";

                var autoPublishCode = $"<i class='fa fa-clock-o' aria-hidden='true' title='This page is set to auto-expire at: {detail.ExpiryDate}'></i> ";

                nodeText += $"<small class='willExpireWrapper'>{autoPublishCode}Will Expire</small>";
            }

            if ((!detail.ShowInMenu) && (!detail.RenderInFooter))
            {
                node.li_attr._class += " isHidden";
            }


            if (detail.HasExpired)
            {
                node.li_attr._class += " hasExpired";

                nodeText += $"<small class='hasExpiredWrapper'>Has Expired</small>";
            }
            else
            {
                if (!detail.IsPublished && !detail.WillPublish)
                {
                    node.li_attr._class += " unPublished";

                    nodeText += $"<small class='unPublishedWrapper'>UnPublished</small>";
                }
            }

            if (AdminBasePage.SelectedMediaDetail != null && AdminBasePage.SelectedMediaDetail.ID == detail.ID)
            {
                node.li_attr._class += " selected";
            }

            var draft = detail.GetLatestDraft();

            if (detail.HasDraft && draft != null)
            {
                node.li_attr._class += " hasDraft";

                var autoPublishCode = "";

                if (draft.DateLastModified > detail.DateLastModified)
                {
                    node.li_attr._class += " draftIsNewer";
                }

                if ((draft.PublishDate - detail.PublishDate) > TimeSpan.FromSeconds(10))
                {
                    autoPublishCode = $"<i class='fa fa-clock-o' aria-hidden='true' title='This draft is set to auto-publish at: {draft.PublishDate}'></i> ";
                }

                nodeText += $"<small class='hasDraftWrapper'>{autoPublishCode}Has Draft</small>";
            }

            var pendingComments = detail.Media.Comments.Count(i => i.Status == StatusEnum.Pending.ToString() && i.LanguageID == detail.LanguageID);

            if (pendingComments > 0)
            {
                node.li_attr._class += " hasPendingComments";
                nodeText            += $"<small class='hasPendingCommentsWrapper'>Pending Comments</small>";
            }

            if (detail.MediaType.GetRoles().Count > 0 || detail.Media.RolesMedias.Count > 0)
            {
                var fontAwsomeClasses = "fa";

                node.li_attr._class += " restricted";
                if (MediaDetailsMapper.CanAccessMediaDetail(detail, FrameworkSettings.CurrentUser).IsError)
                {
                    fontAwsomeClasses += " fa-lock";
                }
                else
                {
                    fontAwsomeClasses += " fa-unlock";
                }

                nodeText += $"<small class='restrictedWrapper'><i class='fa {fontAwsomeClasses}' aria-hidden='true'></i></small>";
            }

            node.text = nodeText;

            //node.LinkAttributes.Add("data-frontendurl", detail.Media.PermaLink);
            node.a_attr.frontendurl    = detail.AbsoluteUrl;
            node.li_attr.mediaDetailId = detail.ID.ToString();

            node.a_attr.href = URIHelper.ConvertToAbsUrl(WebApplication.BasePage.GetAdminUrl(detail.MediaTypeID, detail.MediaID));

            if (detail?.MediaType?.Name == "Website" || detail?.MediaType?.Name == "RootPage")
            {
                node.state.opened = true;
            }

            IEnumerable <Media> parentItems = new List <Media>();

            if (AdminBasePage.SelectedMedia != null)
            {
                parentItems = MediaDetailsMapper.GetAllParentMedias(AdminBasePage.SelectedMedia);

                if (parentItems.Any(i => i.ID == detail.MediaID))
                {
                    node.state.opened = true;
                }
            }

            if (detail.MediaID == AdminBasePage.SelectedMedia?.ID)
            {
                node.state.opened   = true;
                node.state.selected = true;
            }
        }
Beispiel #10
0
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            RedisCacheHelper.SetRedisCacheConnectionString(AppSettings.RedisCacheConnectionString);
            FileCacheHelper.SetFileSystemCacheDirPath(AppSettings.FileSystemCacheDirPath);

            virtualPath = URIHelper.GetCurrentVirtualPath().ToLower();

            var queryString = HttpContext.Current.Request.QueryString.ToString();

            queryString = System.Web.HttpUtility.UrlDecode(queryString);


            if (!Request.Path.EndsWith("/") || ((virtualPath != "~/") && (!virtualPath.EndsWith("/"))))
            {
                var path = Request.Path + "/";

                if (!string.IsNullOrEmpty(queryString))
                {
                    path = path + "?" + queryString;
                }

                HttpContext.Current.Response.RedirectPermanent(path);
            }

            Settings cmsSettings            = null;
            bool     isAttemptingAdminLogin = false;

            if ((virtualPath != "~/login/") && (virtualPath != "~/admin/") && string.IsNullOrEmpty(Request.QueryString["format"]))
            {
                cmsSettings = SettingsMapper.GetSettings();

                if (cmsSettings != null)
                {
                    var isSiteOnline = cmsSettings.IsSiteOnline();

                    if (isSiteOnline)
                    {
                        if (virtualPath.Contains(cmsSettings.SiteOfflineUrl))
                        {
                            Response.Redirect("~/");
                        }

                        AttemptToLoadFromCache();
                    }
                    else
                    {
                        if (!virtualPath.Contains(cmsSettings.SiteOfflineUrl))
                        {
                            Response.Redirect(cmsSettings.SiteOfflineUrl);
                        }
                    }
                }
                else
                {
                    AttemptToLoadFromCache();
                }
            }
            else
            {
                isAttemptingAdminLogin = true;
            }

            var languageSegment = FrameworkSettings.GetCurrentLanguage().UriSegment;

            if (LanguagesMapper.GetAllActive().Count() > 1 && !Request.Url.PathAndQuery.Contains($"/{languageSegment}/"))
            {
                var url = URIHelper.ConvertToAbsUrl("/" + languageSegment + Request.Url.PathAndQuery);
                Response.RedirectPermanent(url, true);
            }

            var segments = URIHelper.GetUriSegments(virtualPath).ToList();

            string firstSegment = "";

            if (segments.Count > 0)
            {
                firstSegment = segments[0];

                var language = LanguagesMapper.GetAllActive().SingleOrDefault(i => i.UriSegment == firstSegment);

                if (language != null)
                {
                    FrameworkSettings.SetCurrentLanguage(language);
                }
            }

            if (!isAttemptingAdminLogin && AppSettings.EnableUrlRedirectRules)
            {
                var path = virtualPath;

                if (!string.IsNullOrEmpty(queryString))
                {
                    path = path + "?" + queryString;
                }

                var redirectRule = UrlRedirectRulesMapper.GetRuleForUrl(path);

                if (redirectRule != null)
                {
                    var newUrl = redirectRule.RedirectToUrl;

                    if (newUrl.Contains("{"))
                    {
                        newUrl = MediaDetailsMapper.ParseSpecialTags(redirectRule, newUrl);
                    }

                    newUrl = URIHelper.ConvertToAbsUrl(newUrl);

                    var possibleLoopRules      = UrlRedirectRulesMapper.GetRulesFromUrl(URIHelper.ConvertAbsUrlToTilda(newUrl));
                    var foundActiveVirtualPath = MediaDetailsMapper.GetByVirtualPath(path);

                    if (possibleLoopRules.Any())
                    {
                        foreach (var rule in possibleLoopRules)
                        {
                            var returnObj = MediaDetailsMapper.DeletePermanently(rule);
                        }
                    }

                    if (foundActiveVirtualPath != null)
                    {
                        var returnObj = MediaDetailsMapper.DeletePermanently(redirectRule);
                    }

                    if (Request.QueryString.Count > 0)
                    {
                        newUrl += "?" + Request.QueryString;
                    }

                    if (redirectRule.Is301Redirect)
                    {
                        Response.RedirectPermanent(newUrl);
                    }
                    else
                    {
                        Response.Redirect(newUrl);
                    }
                }
            }

            if (!File.Exists(HttpContext.Current.Server.MapPath(virtualPath)) && !virtualPath.Contains(ParserHelper.OpenToken) && !virtualPath.Contains(ParserHelper.CloseToken))
            {
                string viewPath = "";

                long mediaDetailId = 0;
                long.TryParse(requestContext.HttpContext.Request["MediaDetailID"], out mediaDetailId);

                long mediaId = 0;
                long.TryParse(requestContext.HttpContext.Request["MediaID"], out mediaId);

                MediaDetail detail = null;

                if (mediaDetailId == 0 && mediaId == 0)
                {
                    FrameworkSettings.Current = FrameworkBaseMedia.GetInstanceByVirtualPath(virtualPath, true);
                    detail = (MediaDetail)FrameworkSettings.Current.CurrentMediaDetail;
                }
                else if (mediaDetailId != 0)
                {
                    var mediaDetail = MediaDetailsMapper.GetByID(mediaDetailId);

                    FrameworkSettings.Current = FrameworkBaseMedia.GetInstanceByMediaDetail(mediaDetail);
                    detail = (MediaDetail)FrameworkSettings.Current.CurrentMediaDetail;
                }
                else if (mediaId != 0)
                {
                    var media = MediasMapper.GetByID(mediaId);

                    FrameworkSettings.Current = FrameworkBaseMedia.GetInstanceByMedia(media);
                    detail = (MediaDetail)FrameworkSettings.Current.CurrentMediaDetail;
                }

                /*if (detail != null && !detail.CanUserAccessSection(FrameworkSettings.CurrentUser))
                 * {
                 *  FormsAuthentication.RedirectToLoginPage();
                 * }*/

                /*if (detail != null)
                 * {
                 *  var absUrlBase = URIHelper.ConvertAbsUrlToTilda(detail.AbsoluteUrl).Replace("~", "");
                 *  var absPathBase = URIHelper.ConvertAbsUrlToTilda(Request.Url.AbsolutePath).Replace("~", "");
                 *
                 *  if (absUrlBase != absPathBase)
                 *  {
                 *      Response.Redirect(detail.AbsoluteUrl + Request.Url.Query);
                 *  }
                 * }*/

                if (detail != null)
                {
                    if (detail.ForceSSL || AppSettings.ForceSSL)
                    {
                        URIHelper.ForceSSL();
                    }
                }
                else
                {
                    var currentLanguageId = FrameworkSettings.GetCurrentLanguage().ID;

                    var historyVersion = BaseMapper.GetDataModel().MediaDetails.FirstOrDefault(i => i.LanguageID == currentLanguageId && i.CachedVirtualPath == virtualPath && i.MediaType.ShowInSiteTree && i.HistoryVersionNumber != 0 && i.HistoryForMediaDetail != null);

                    if (historyVersion != null && historyVersion.VirtualPath != historyVersion.HistoryForMediaDetail.VirtualPath)
                    {
                        var foundRedirectUrl = UrlRedirectRulesMapper.GetRuleForUrl(virtualPath);

                        if (foundRedirectUrl == null)
                        {
                            var urlRedirectRule = UrlRedirectRulesMapper.CreateUrlRedirect(virtualPath, historyVersion.HistoryForMediaDetail.Media);

                            if (urlRedirectRule != null)
                            {
                                var returnObj = UrlRedirectRulesMapper.Insert(urlRedirectRule);
                                HttpContext.Current.Response.RedirectPermanent(historyVersion.HistoryForMediaDetail.CachedVirtualPath);
                            }
                            else
                            {
                                HttpContext.Current.Response.RedirectPermanent("/");
                            }
                        }
                    }
                    else
                    {
                        HttpContext.Current.Response.RedirectPermanent("/");
                    }
                }

                if ((detail == null) || (!IsValidRequest(detail)))
                {
                    detail = null;
                    if (cmsSettings != null)
                    {
                        if (!string.IsNullOrEmpty(cmsSettings.PageNotFoundUrl))
                        {
                            ErrorHelper.LogException(new Exception($"Page Not Found: {virtualPath}"));

                            Response.Redirect(cmsSettings.PageNotFoundUrl);

                            /*FrameworkSettings.CurrentFrameworkBaseMedia = null;
                             *
                             * FrameworkSettings.CurrentFrameworkBaseMedia = FrameworkBaseMedia.GetInstanceByVirtualPath(cmsSettings.PageNotFoundUrl, true);
                             * detail = (MediaDetail)FrameworkSettings.CurrentFrameworkBaseMedia.CurrentMediaDetail;
                             *
                             * ErrorHelper.LogException(new Exception($"Page Not Found: {virtualPath}"));*/

                            //Response.StatusCode = 301;
                        }
                    }
                }

                if (detail != null)
                {
                    var draft = detail.GetLatestDraft();

                    if (draft != null && (draft.PublishDate - detail.PublishDate) > TimeSpan.FromSeconds(10) && draft.CanRender)
                    {
                        var returnObj = draft.PublishLive();

                        if (!returnObj.IsError)
                        {
                            detail.RemoveFromCache();
                            draft.RemoveFromCache();

                            FrameworkSettings.Current = FrameworkBaseMedia.GetInstanceByMediaDetail(draft);
                            detail = (MediaDetail)FrameworkSettings.Current.CurrentMediaDetail;
                        }
                    }

                    if (detail.RedirectToFirstChild)
                    {
                        var child = detail.ChildMediaDetails.FirstOrDefault();

                        if (child != null)
                        {
                            var redirectPath = child.AutoCalculatedVirtualPath;

                            if (!string.IsNullOrEmpty(queryString))
                            {
                                redirectPath = redirectPath + "?" + queryString;
                            }

                            HttpContext.Current.Response.Redirect(redirectPath);
                        }
                    }

                    viewPath = FrameworkSettings.Current.CurrentMediaDetail.Handler;

                    if ((viewPath == null) || (viewPath.Trim() == ""))
                    {
                        viewPath = MediaTypesMapper.GetByID(FrameworkSettings.Current.CurrentMediaDetail.MediaTypeID).MediaTypeHandler;
                    }

                    viewPath = URIHelper.ConvertAbsUrlToTilda(viewPath);

                    if (!string.IsNullOrEmpty(Request.QueryString["format"]))
                    {
                        FrontEndBasePage.HandleFormatQueryString(detail, Request.QueryString["format"], Request.QueryString["depth"]);
                    }

                    return(CreateInstanceFromVirtualPath(viewPath, typeof(BasePage)));
                }
            }

            return(new DefaultHttpHandler());
        }
        protected void ItemsList_OnItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                HyperLink Link      = (HyperLink)e.Item.FindControl("Link");
                ListView  ChildList = (ListView)e.Item.FindControl("ChildList");

                IMediaDetail detail = (IMediaDetail)e.Item.DataItem;

                if (!displayProtectedSections && detail.IsProtected)
                {
                    if (BasePage.CurrentUser == null)
                    {
                        e.Item.Visible = false;
                    }
                }

                Link.Text = detail.LinkTitle;

                string virtualPath = detail.AutoCalculatedVirtualPath;

                if (detail.UseDirectLink)
                {
                    virtualPath = detail.DirectLink;
                }

                if (currentDepth == 1)
                {
                    if (Link.CssClass == "")
                    {
                        Link.CssClass = TopLevelAnchorClasses;
                    }
                    else
                    {
                        Link.CssClass = Link.CssClass + " " + TopLevelAnchorClasses;
                    }
                }
                else
                {
                    if (Link.CssClass == "")
                    {
                        Link.CssClass = SubAnchorClasses;
                    }
                    else
                    {
                        Link.CssClass = Link.CssClass + " " + SubAnchorClasses;
                    }
                }

                if (detail.OpenInNewWindow)
                {
                    Link.Target = "_blank";
                }

                if (!virtualPath.StartsWith("{") && !virtualPath.EndsWith("/"))
                {
                    if (!virtualPath.Contains("."))
                    {
                        virtualPath += "/";
                    }
                }

                var path = virtualPath;

                if (!virtualPath.StartsWith("{"))
                {
                    path = URIHelper.ConvertToAbsUrl(virtualPath);

                    if (path.Contains("#") && path.EndsWith("/"))
                    {
                        path = path.Remove(path.Length - 1);
                    }
                }

                if (detail.RedirectToFirstChild)
                {
                    path = detail.ChildMediaDetails.Where(i => i.ShowInMenu).ElementAt(0).AbsoluteUrl;
                }

                Link.NavigateUrl = path;

                if (IsBreadCrumbMenu)
                {
                    if (URIHelper.GetCurrentVirtualPath() == virtualPath)
                    {
                        Link.NavigateUrl = "javascript:void(0);";
                    }
                }

                HtmlContainerControl li = (HtmlContainerControl)e.Item.FindControl("li");

                if (li.Attributes["class"] == null)
                {
                    li.Attributes.Add("class", "index-" + e.Item.DataItemIndex.ToString());
                }

                if (virtualPath == currentVirtualPath || detail.VirtualPath == currentVirtualPath)
                {
                    li.Attributes["class"] += " current";
                }
                else if (currentVirtualPath.Contains(virtualPath) || currentVirtualPath.Contains(detail.VirtualPath))
                {
                    li.Attributes["class"] += " currentParent";

                    if ((rootMedia != null) && (detail.MediaID == rootMedia.ID))
                    {
                        li.Attributes["class"] += " rootParent";
                    }
                }

                li.Attributes["class"] += $" MediaID-{detail.MediaID}";

                if (li.Attributes["class"].EndsWith("-"))
                {
                    li.Attributes["class"] = li.Attributes["class"].Substring(0, li.Attributes["class"].Length - 1);
                }

                if (!string.IsNullOrEmpty(detail.CssClasses))
                {
                    li.Attributes["class"] += " " + detail.CssClasses;
                }

                if (!string.IsNullOrEmpty(SubLIClasses))
                {
                    li.Attributes["class"] += " " + SubLIClasses;
                }

                li.Attributes["class"] = li.Attributes["class"].Trim();

                IEnumerable <IMediaDetail> childItems = new List <IMediaDetail>();

                if ((rootMedia != null) && (detail.MediaID != rootMedia.ID))
                {
                    //childItems = new List<IMediaDetail>();
                    //childItems = detail.ChildMediaDetails.Where(i=>i.ShowInMenu);

                    //childItems = details.Media.ChildMedias.SelectMany(i => i.MediaDetails.Where(j => j.HistoryVersionNumber == 0 && !j.IsDeleted && j.PostPublishDate <= DateTime.Now && j.LanguageID == details.LanguageID));
                    //childItems = MediaDetailsMapper.FilterOutDeletedAndArchived(MediaDetailsMapper.GetAllChildMediaDetails(details.Media, details.Language));

                    if (!renderHiddenMediaTypes)
                    {
                        childItems = MediaDetailsMapper.GetDataModel().MediaDetails.Where(i => i.ShowInMenu && i.Media.ParentMediaID == detail.Media.ID && i.HistoryVersionNumber == 0 && i.LanguageID == detail.LanguageID && !i.IsDeleted && i.PublishDate <= DateTime.Now && (i.ExpiryDate == null || i.ExpiryDate > DateTime.Now)).OrderBy(i => i.Media.OrderIndex).ToList();
                    }
                    else
                    {
                        childItems = MediaDetailsMapper.GetDataModel().MediaDetails.Where(i => i.Media.ParentMediaID == detail.Media.ID && i.HistoryVersionNumber == 0 && i.LanguageID == detail.LanguageID && !i.IsDeleted && i.PublishDate <= DateTime.Now && (i.ExpiryDate == null || i.ExpiryDate > DateTime.Now)).OrderBy(i => i.Media.OrderIndex).ToList();
                    }
                }

                if (!detail.CssClasses.Contains("NoChildren") && childItems.Any())
                {
                    if ((currentDepth < renderDepth) || (renderDepth == -1))
                    {
                        //ChildList.LayoutTemplate = ItemsList.LayoutTemplate;
                        ChildList.ItemTemplate   = ItemsList.ItemTemplate;
                        ChildList.ItemDataBound += new EventHandler <ListViewItemEventArgs>(ItemsList_OnItemDataBound);
                        ChildList.LayoutCreated += new EventHandler(ItemsList_OnLayoutCreated);

                        if ((childItems != null) && (IsFooterMenu))
                        {
                            childItems = childItems.Where(i => i.RenderInFooter);
                        }
                        else if (childItems != null)
                        {
                            childItems = childItems.Where(i => i.ShowInMenu);
                        }

                        if (!displayProtectedSections)
                        {
                            var list = childItems.OrderBy(i => i.Media.OrderIndex).ToList();

                            if (list.Count > 0)
                            {
                                li.Attributes["class"] += " has-children";
                            }

                            if ((currentDepth > 0) && (RenderParentItemInChildNav))
                            {
                                /*var parentDetails = new List<IMediaDetail>();
                                 * detail.CssClasses = "NoChildren";
                                 * parentDetails.Add(detail);*/

                                list = list.ToList();
                                detail.CssClasses = "NoChildren";
                                ((List <IMediaDetail>)list).Insert(0, detail);

                                //list = list.Concat(parentDetails);
                            }

                            ChildList.DataSource = list;
                            ChildList.DataBind();
                        }

                        currentDepth = currentDepth - 1;
                    }
                }
            }
        }
        protected void SlidesList_OnItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                HyperLink FlashAltLink = (HyperLink)e.Item.FindControl("Link");
                HyperLink Link         = (HyperLink)e.Item.FindControl("Link");
                Image     Image        = (Image)e.Item.FindControl("Image");

                Panel ImageSliderPanel   = (Panel)e.Item.FindControl("ImageSliderPanel");
                Panel ContentSliderPanel = (Panel)e.Item.FindControl("ContentSliderPanel");

                Panel NonFlashPanel = (Panel)e.Item.FindControl("NonFlashPanel");

                HtmlControl Slide = (HtmlControl)e.Item.FindControl("Slide");

                Slide Item = (Slide)e.Item.DataItem;

                if ((this.gallery.PathToRenderControl != null && this.gallery.PathToRenderControl != ""))
                {
                    ImageSliderPanel.Visible   = false;
                    ContentSliderPanel.Visible = true;

                    Literal ItemRenderedLayout = new Literal();
                    ItemRenderedLayout.Text = LoaderHelper.RenderControl(this.gallery.PathToRenderControl, Item.MediaDetail);
                    ContentSliderPanel.Controls.Add(ItemRenderedLayout);
                }
                else
                {
                    ImageSliderPanel.Visible   = true;
                    ContentSliderPanel.Visible = false;

                    if (Item.PathToFile.Trim() != "")
                    {
                        Link.NavigateUrl = FlashAltLink.NavigateUrl = Item.Link;
                    }

                    this.BasePage.AddToJSPreload(Item.PathToFile);

                    if (!Item.PathToFile.Contains(".swf"))
                    {
                        Image.ImageUrl = Item.PathToFile;
                        Image.Attributes["data-alt-image"] = URIHelper.ConvertToAbsUrl(Item.PathToAlternativeFile);
                        Image.AlternateText = Item.Title;

                        NonFlashPanel.CssClass = NonFlashPanel.CssClass + " InteriorBanner";

                        if (!string.IsNullOrEmpty(Item.BgColor))
                        {
                            NonFlashPanel.Style["background-color"] = Item.BgColor;
                        }
                    }
                    else
                    {
                        NonFlashPanel.Visible = false;
                    }

                    Link.ToolTip = Item.Title;

                    if (Link.NavigateUrl != "")
                    {
                        Link.CssClass += " popup";
                    }
                }
            }
        }