Example #1
0
        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));
        }