public async Task <IActionResult> Edit( string slug = "", string parentSlug = "" ) { var projectSettings = await projectService.GetCurrentProjectSettings(); if (projectSettings == null) { log.LogInformation("redirecting to index because project settings not found"); return(RedirectToRoute(pageRoutes.PageRouteName)); } var canEdit = await User.CanEditPages(projectSettings.Id, authorizationService); if (!canEdit) { log.LogInformation("redirecting to index because user cannot edit"); return(RedirectToRoute(pageRoutes.PageRouteName)); } if (slug == "none") { slug = string.Empty; } var model = new PageEditViewModel(); model.ProjectId = projectSettings.Id; model.DisqusShortname = projectSettings.DisqusShortName; IPage page = null; if (!string.IsNullOrEmpty(slug)) { page = await pageService.GetPageBySlug(slug); } if (page == null) { ViewData["Title"] = sr["New Page"]; model.Slug = slug; model.ParentSlug = parentSlug; model.PageOrder = await pageService.GetNextChildPageOrder(parentSlug); var rootList = await pageService.GetRootPages().ConfigureAwait(false); if (rootList.Count == 0) { // expected if home page doesn't exist yet if (slug == "home") { model.Title = sr["Home"]; } } model.Author = await authorNameResolver.GetAuthorName(User); model.PubDate = timeZoneHelper.ConvertToLocalTime(DateTime.UtcNow, projectSettings.TimeZoneId).ToString(); } else // page not null { // if the page is protected by view roles return 404 if user is not in an allowed role if ((!string.IsNullOrEmpty(page.ViewRoles))) { if (!User.IsInRoles(page.ViewRoles)) { log.LogWarning($"page {page.Title} is protected by roles that user is not in so returning 404"); return(NotFound()); } } ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, sr["Edit - {0}"], page.Title); model.Author = page.Author; model.Content = page.Content; model.Id = page.Id; model.CorrelationKey = page.CorrelationKey; model.IsPublished = page.IsPublished; model.ShowMenu = page.ShowMenu; model.MenuOnly = page.MenuOnly; model.MetaDescription = page.MetaDescription; model.PageOrder = page.PageOrder; model.ParentId = page.ParentId; model.ParentSlug = page.ParentSlug; model.PubDate = timeZoneHelper.ConvertToLocalTime(page.PubDate, projectSettings.TimeZoneId).ToString(); model.ShowHeading = page.ShowHeading; model.Slug = page.Slug; model.ExternalUrl = page.ExternalUrl; model.Title = page.Title; model.MenuFilters = page.MenuFilters; model.ViewRoles = page.ViewRoles; model.ShowComments = page.ShowComments; } return(View(model)); }
public async Task <IActionResult> Edit(string slug = "") { var projectSettings = await projectService.GetCurrentProjectSettings(); if (projectSettings == null) { log.LogInformation("redirecting to index because project settings not found"); return(RedirectToRoute(blogRoutes.BlogIndexRouteName)); } var canEdit = await User.CanEditPages(projectSettings.Id, authorizationService); if (!canEdit) { log.LogInformation("redirecting to index because user cannot edit"); return(RedirectToRoute(blogRoutes.BlogIndexRouteName)); } if (slug == "none") { slug = string.Empty; } var model = new PostEditViewModel(); model.ProjectId = projectSettings.Id; PostResult postResult = null; if (!string.IsNullOrEmpty(slug)) { postResult = await blogService.GetPostBySlug(slug); } if (postResult == null || postResult.Post == null) { ViewData["Title"] = sr["New Post"]; model.Author = await authorNameResolver.GetAuthorName(User); model.IsPublished = true; model.PubDate = timeZoneHelper.ConvertToLocalTime(DateTime.UtcNow, projectSettings.TimeZoneId).ToString(); model.CurrentPostUrl = Url.RouteUrl(blogRoutes.BlogIndexRouteName); } else { ViewData["Title"] = string.Format(CultureInfo.CurrentUICulture, sr["Edit - {0}"], postResult.Post.Title); model.Author = postResult.Post.Author; model.Content = postResult.Post.Content; model.Id = postResult.Post.Id; model.CorrelationKey = postResult.Post.CorrelationKey; model.IsPublished = postResult.Post.IsPublished; model.MetaDescription = postResult.Post.MetaDescription; model.PubDate = timeZoneHelper.ConvertToLocalTime(postResult.Post.PubDate, projectSettings.TimeZoneId).ToString(); model.Slug = postResult.Post.Slug; model.Title = postResult.Post.Title; model.CurrentPostUrl = await blogService.ResolvePostUrl(postResult.Post).ConfigureAwait(false); model.DeletePostRouteName = blogRoutes.PostDeleteRouteName; model.Categories = string.Join(",", postResult.Post.Categories); model.ImageUrl = postResult.Post.ImageUrl; model.ThumbnailUrl = postResult.Post.ThumbnailUrl; model.IsFeatured = postResult.Post.IsFeatured; } return(View(model)); }