示例#1
0
        public static CommonPageInfo InitFromQueryParams(List <string> allSlashedParams, List <KeyValuePair <string, string> > queryParams)
        {
            var db  = new DB();
            var url = "";

            foreach (var allSlashedParam in allSlashedParams)
            {
            }


            var slashedParams =
                allSlashedParams.Where(x => AccessHelper.CurrentLang.AvailableList.All(z => z.ShortName != x)).ToList();

            //var request = HttpContext.Current.Request;
            url = slashedParams.All(x => x.IsNullOrEmpty())
                      ? db.CMSPages.First(x => x.PageType.TypeName == "Catalog").URL
                      : slashedParams.Last(x => !x.IsNullOrEmpty());



            var            routes = new RouteValueDictionary();
            CommonPageInfo info;
            var            main = CatalogBrowser.ParentPage;

            if (main == null)
            {
                main = db.CMSPages.FirstOrDefault(x => x.PageType.TypeName == "MainPage");
            }
            if (main == null)
            {
                main = db.CMSPages.First();
            }

            if (slashedParams.Any() && slashedParams[0] == "Master")
            {
                var offset = AccessHelper.CurrentLang.AvailableList.Any(z => slashedParams.Contains(z.ShortName)) ? 0 : 1;
                routes = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values;
                if (routes.ContainsKey("url"))
                {
                    return(InitFromQueryParams(routes["url"].ToString()));
                }

                if (slashedParams.Count == 1)
                {
                    slashedParams.Add(AccessHelper.MasterPanel.DefaultController);
                    slashedParams.Add(AccessHelper.MasterPanel.DefaultAction);
                }

                if (slashedParams.Count < 3)
                {
                    slashedParams.Add("Index");
                }



                info = new CommonPageInfo()
                {
                    Controller  = slashedParams[2 - offset],
                    Action      = slashedParams[3 - offset],
                    CurrentPage = main.LoadLangValues(),
                    CurrentLang = AccessHelper.CurrentLang,
                    Layout      = "_Master",
                    Routes      = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values
                };
                return(info);
            }

            var pathPairs =
                slashedParams.Where(x => !x.IsNullOrEmpty()).Select((x, index) => new { Key = "url" + (index + 1), Value = x }).ToList();



            var cntBefore = pathPairs.Count;

            pathPairs = pathPairs.Where(x => !CatalogBrowser.CategoriesList.ContainsKey(x.Value) || x.Value == "catalog").ToList();
            pathPairs = pathPairs.Where(x => !CatalogBrowser.Products.ContainsValue(x.Value) || x.Value == "catalog").ToList();
            if (pathPairs.Count != cntBefore && pathPairs.Count > 0)
            {
                url = pathPairs.Last().Value;
            }

            foreach (var pair in pathPairs)
            {
                routes.Add(pair.Key, pair.Value);
            }
            foreach (var pair in queryParams)
            {
                routes.Add(pair.Key, pair.Value);
            }
            var cmsPage = db.CMSPages.FirstOrDefault(x => x.URL.ToLower() == url.ToLower());
            var browser = CatalogBrowser.Init();

            if (cmsPage == null && CatalogBrowser.CategoriesList.ContainsKey(url.ToLower()))
            {
                cmsPage = db.CMSPages.FirstOrDefault(x => x.ID == main.ID);
            }

/*
 *          var trunks = url.Split<string>("-").ToList();
 *          if (trunks.Count() > 1 && CatalogBrowser.Products.ContainsKey(trunks.Last().ToInt()))
 *          {
 *              cmsPage = db.CMSPages.FirstOrDefault(x => x.ID == main.ID);
 *          }
 *          else
 *          {
 */

            if (cmsPage == null && CatalogBrowser.Products.ContainsValue(url.ToLower()))
            {
                cmsPage = db.CMSPages.FirstOrDefault(x => x.ID == main.ID);
            }

/*
 *          }
 */

            if (cmsPage == null || (slashedParams.Any() && slashedParams[0] == "404") || (CatalogBrowser.ParentPage != null && CatalogBrowser.ParentPage.ID == cmsPage.ID && browser.IsNotFound(cmsPage)))
            {
                info = new CommonPageInfo
                {
                    URL         = "404",
                    Action      = "NotFound",
                    Controller  = "TextPage",
                    CurrentPage = main.LoadLangValues(),
                    CurrentLang = AccessHelper.CurrentLang,
                    Routes      = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values,
                    StatusCode  = 404,
                    Title       = SiteSetting.Get <string>("CommonTitle") + "Страница не найдена"
                };
            }
            else
            {
                info = new CommonPageInfo()
                {
                    ID          = cmsPage.ID,
                    URL         = url,
                    CurrentPage = cmsPage.LoadLangValues(),
                    Routes      = routes,
                    CurrentLang = AccessHelper.CurrentLang,
                    StatusCode  = 200
                };
                info.CurrentPage.Title = SiteSetting.Get <string>("CommonTitle") +
                                         (cmsPage.Title.IsNullOrEmpty() ? cmsPage.PageName : cmsPage.Title);
                if (browser.IsCategory(cmsPage))
                {
                    if (browser.CurrentCategory.ID == 1)
                    {
                        info.CurrentPage.Title = SiteSetting.Get <string>("CommonTitle") +
                                                 cmsPage.Title;
                        info.CurrentPage.Keywords    = cmsPage.Keywords;
                        info.CurrentPage.Description = cmsPage.Description;
                    }
                    else
                    {
                        info.CurrentPage.Title = SiteSetting.Get <string>("CommonTitle") +
                                                 browser.CurrentCategory.PageTitle;
                        info.CurrentPage.Keywords    = browser.CurrentCategory.PageKeywords;
                        info.CurrentPage.Description = browser.CurrentCategory.PageDescription;
                    }
                }
                if (browser.IsProductPage)
                {
                    info.CurrentPage.Title       = SiteSetting.Get <string>("CommonTitle") + browser.CurrentProduct.PageTitle;
                    info.CurrentPage.Keywords    = browser.CurrentProduct.PageKeywords;
                    info.CurrentPage.Description = browser.CurrentProduct.PageDescription;
                }
            }

            info.Layout = "MainPage";
            if (cmsPage != null)
            {
                var currentRole = AccessHelper.CurrentRole;
                var rel         = db.CMSPageRoleRels.FirstOrDefault(
                    x =>
                    x.PageID == cmsPage.ID &&
                    (!HttpContext.Current.User.Identity.IsAuthenticated || currentRole.IsNullOrEmpty()
                         ? !x.RoleID.HasValue
                         : x.Role.RoleName == currentRole));

                if (rel == null)
                {
                    info.Controller = "TextPage";
                    info.Action     = "AccessDenied";
                    info.Layout     = "MainPage";
                    info.StatusCode = 403;
                    info.Title      = SiteSetting.Get <string>("CommonTitle") + "Доступ к этой странице ограничен";
                }


                info.Layout = cmsPage.PageType.CMSPageTemplate.Layout;
            }
            return(info);
        }
        public static CommonPageInfo InitFromQueryParams(List <string> allSlashedParams, List <KeyValuePair <string, string> > queryParams)
        {
            var db  = new DB();
            var url = "";

            var slashedParams =
                allSlashedParams.Where(x => AccessHelper.CurrentLang.AvailableList.All(z => z.ShortName != x)).ToList();

            //var request = HttpContext.Current.Request;
            url = slashedParams.All(x => x.IsNullOrEmpty())
                      ? db.CMSPages.First(x => x.PageType.TypeName == "MainPage").URL
                      : slashedParams.Last(x => !x.IsNullOrEmpty());



            var            routes = new RouteValueDictionary();
            CommonPageInfo info;

            if (slashedParams.Any() && slashedParams[0] == "Master")
            {
                var offset = AccessHelper.CurrentLang.AvailableList.Any(z => slashedParams.Contains(z.ShortName)) ? 0:1;
                routes = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values;
                if (routes.ContainsKey("url"))
                {
                    return(InitFromQueryParams(routes["url"].ToString()));
                }
                info = new CommonPageInfo()
                {
                    Controller  = slashedParams[2 - offset],
                    Action      = slashedParams[3 - offset],
                    CurrentPage = db.CMSPages.First(x => x.PageType.TypeName == "MainPage"),
                    CurrentLang = AccessHelper.CurrentLang,
                    Layout      = "_Master",
                    Routes      = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values
                };
                return(info);
            }

            var pathPairs =
                slashedParams.Where(x => !x.IsNullOrEmpty()).Select((x, index) => new { Key = "url" + (index + 1), Value = x }).ToList();

            foreach (var pair in pathPairs)
            {
                routes.Add(pair.Key, pair.Value);
            }
            foreach (var pair in queryParams)
            {
                routes.Add(pair.Key, pair.Value);
            }
            var cmsPage = db.CMSPages.FirstOrDefault(x => x.URL.ToLower() == url.ToLower());

            if (cmsPage == null || (slashedParams.Any() && slashedParams[0] == "404"))
            {
                info = new CommonPageInfo
                {
                    URL         = "404",
                    Action      = "NotFound",
                    Controller  = "TextPage",
                    CurrentPage = db.CMSPages.First(x => x.PageType.TypeName == "MainPage"),
                    CurrentLang = AccessHelper.CurrentLang,
                    Routes      = ((MvcHandler)HttpContext.Current.Handler).RequestContext.RouteData.Values
                };
            }
            else
            {
                cmsPage.LoadLangValues();
                info = new CommonPageInfo()
                {
                    ID          = cmsPage.ID,
                    URL         = url,
                    CurrentPage = cmsPage,
                    Routes      = routes,
                    CurrentLang = AccessHelper.CurrentLang
                };
                info.CurrentPage.Title = cmsPage.Title.IsNullOrEmpty() ? cmsPage.PageName : cmsPage.Title;
            }

            info.Layout = "MainPage";
            if (cmsPage != null)
            {
                var currentRole = AccessHelper.CurrentRole;
                var rel         = db.CMSPageRoleRels.FirstOrDefault(
                    x =>
                    x.PageID == cmsPage.ID &&
                    (!HttpContext.Current.User.Identity.IsAuthenticated || currentRole.IsNullOrEmpty()
                         ? !x.RoleID.HasValue
                         : x.Role.RoleName == currentRole));

                if (rel == null)
                {
                    info.Controller = "TextPage";
                    info.Action     = "AccessDenied";
                    info.Layout     = "MainPage";
                }
            }
            return(info);
        }