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); }