NotFoundPage(IUnitOfWork unitOfWork, ISiteContext siteContext) { var notFoundPage = this .PageVersionQuery(unitOfWork, siteContext) .Where(o => o.Page.Node.Type == "NotFoundErrorPage") .Select(o => o.Value) .FirstOrDefault(); if (notFoundPage == null) { LogHelper.For(this).Warn("NotFoundErrorPage is not found"); } var errorResult = new RetrievePageResult { StatusCode = HttpStatusCode.NotFound, Page = notFoundPage != null ? JsonConvert .DeserializeObject <PageModel>(notFoundPage) : null }; return(errorResult); }
private RetrievePageResult CreateResult(string pageJson, IUnitOfWork unitOfWork, ISiteContext siteContext, string url) { var result = new RetrievePageResult(); if (pageJson == null) { return(this.NotFoundPage(unitOfWork, siteContext)); } result.Page = JsonConvert.DeserializeObject <PageModel>(pageJson); if (result.Page.Type.EqualsIgnoreCase("UnhandledErrorPage")) { result.StatusCode = HttpStatusCode.InternalServerError; } if (this.contentModeProvider.BypassFilters) { return(result); } var parameter = new NavigationFilterParameter { SiteContext = siteContext, Url = url, Type = NavigationFilterType.RetrievingPage, Page = result.Page, SignInPageUrl = new Lazy <string>(() => GetSignInPageUrl(this, unitOfWork, siteContext)) }; var filterResult = this.navigationFilterService.ApplyFilters(result.Page.Type, parameter); if (filterResult == null) { return(result); } if (filterResult.StatusCode == HttpStatusCode.NotFound) { return(this.NotFoundPage(unitOfWork, siteContext)); } result.Page = null; result.StatusCode = filterResult.StatusCode; result.RedirectTo = filterResult.RedirectTo; return(result); }
GetCatalogNodeId( IUnitOfWork unitOfWork, ISiteContext siteContext, string url, bool isSwitchingLanguage, out RetrievePageResult retrievePageResult ) { var relativeUrlNoQuery = url.Contains("?") ? url .Substring( 0, url.IndexOf("?", StringComparison.Ordinal)) : url; var urlParts = relativeUrlNoQuery.Trim('/', ' ').Split('/'); var result = this .catalogService .GetCatalogPage( new GetCatalogPageParameter( relativeUrlNoQuery) { GetSubCategories = true }); var activeLanguage = siteContext.LanguageDto.Id; retrievePageResult = null; if ( result?.RedirectUrl != null && urlParts.Length > 0 // URL requested doesn't match the active language. ) { if (isSwitchingLanguage) { retrievePageResult = new RetrievePageResult { StatusCode = HttpStatusCode.Found, RedirectTo = result.RedirectUrl }; return(null); } else { var languageIds = this .catalogPathFinder .Value .GetLanguageIdsForCatalogUrlPath( siteContext.WebsiteDto.Id, urlParts[0]); if ( languageIds.Count != 0 && !languageIds.Contains(activeLanguage) ) { this .siteContextService .SetLanguage(languageIds.First()); retrievePageResult = new RetrievePageResult { StatusCode = HttpStatusCode.Found, RedirectTo = url }; return(null); } } } if (result?.Product != null) { return(GetNodeIdByType( unitOfWork, siteContext, "ProductDetailsPage")); } if ( result?.Category != null && result?.SubCategories != null && result.SubCategories.Any() ) { return(GetNodeIdByType( unitOfWork, siteContext, "CategoryDetailsPage")); } // url with brand root and brand url segment is brand detail page if ( urlParts.Length == 2 && urlParts[0] .EqualsIgnoreCase( this.catalogPathBuilder.GetBrandRootPath()) ) { return(GetNodeIdByType( unitOfWork, siteContext, "BrandDetailsPage")); } var brandsLanguageIds = this .catalogPathFinder .Value .GetLanguageIdsForBrandPath( siteContext.WebsiteDto.Id, urlParts[0]); if ( brandsLanguageIds.Count != 0 && !brandsLanguageIds.Contains(activeLanguage) ) { if (isSwitchingLanguage) { retrievePageResult = new RetrievePageResult { StatusCode = HttpStatusCode.Found, RedirectTo = $"/{this .catalogPathBuilder .GetBrandRootPath()}/{string .Join("/", urlParts.Skip(1))}" }; return(null); } else { this .siteContextService .SetLanguage(brandsLanguageIds.First()); retrievePageResult = new RetrievePageResult { StatusCode = HttpStatusCode.Found, RedirectTo = url }; return(null); } } if ( result?.ResultCode == ResultCode.Error && result?.SubCode == SubCode.NotFound ) { return(null); } if ( result?.Category != null || result?.Brand != null || result?.ProductLine != null || (urlParts.Length == 1 && urlParts[0].EqualsIgnoreCase("search")) ) { return(GetNodeIdByType( unitOfWork, siteContext, "ProductListPage")); } return(null); }