diff --git a/src/Blogifier/Blog.db b/src/Blogifier/Blog.db index d45ff9f4f..4adeb088a 100644 Binary files a/src/Blogifier/Blog.db and b/src/Blogifier/Blog.db differ diff --git a/src/Blogifier/Controllers/HomeController.cs b/src/Blogifier/Controllers/HomeController.cs index 1c83ba44e..6d20428ba 100644 --- a/src/Blogifier/Controllers/HomeController.cs +++ b/src/Blogifier/Controllers/HomeController.cs @@ -37,73 +37,46 @@ public HomeController(IBlogProvider blogProvider, _compositeViewEngine = compositeViewEngine; } - public async Task Index(string term, int page = 1) + public async Task Index(int page = 1) { - var model = new ListModel { PostListType = PostListType.Blog }; - try - { - model.Blog = await _blogProvider.GetBlogItem(); - } - catch - { - return Redirect("~/admin"); - } - model.Pager = new Pager(page, model.Blog.ItemsPerPage); + var model = await getBlogPosts(pager: page); - if (string.IsNullOrEmpty(term)) - { - if (model.Blog.IncludeFeatured) - model.Posts = await _postProvider.GetList(model.Pager, 0, "", "FP"); - else - model.Posts = await _postProvider.GetList(model.Pager, 0, "", "P"); - } - else - { - model.PostListType = PostListType.Search; - model.Blog.Title = term; - model.Blog.Description = ""; - model.Posts = await _postProvider.Search(model.Pager, term, 0, "FP"); - } + return View($"~/Views/Themes/{model.Blog.Theme}/Index.cshtml", model); + } - if (model.Pager.ShowOlder) model.Pager.LinkToOlder = $"?page={model.Pager.Older}"; - if (model.Pager.ShowNewer) model.Pager.LinkToNewer = $"?page={model.Pager.Newer}"; + [HttpGet("/{slug}")] + public async Task Index(string slug) + { + if (!string.IsNullOrEmpty(slug)) + { + return await getSingleBlogPost(slug); + } + return Redirect("/"); + } + [HttpPost] + public async Task Search(string term, int page = 1) + { + if (!string.IsNullOrEmpty(term)) { + var model = await getBlogPosts(term, page); string viewPath = $"~/Views/Themes/{model.Blog.Theme}/Search.cshtml"; if (IsViewExists(viewPath)) return View(viewPath, model); + else + return Redirect("~/home"); } + else{ + return Redirect("~/home"); + } + } - return View($"~/Views/Themes/{model.Blog.Theme}/Index.cshtml", model); - } - - [HttpPost] - public IActionResult Search(string term) - { - return Redirect($"/home?term={term}"); - } - - [HttpGet("categories/{category}")] + [HttpGet("categories/{category}")] public async Task Categories(string category, int page = 1) { - var model = new ListModel { PostListType = PostListType.Category }; - try - { - model.Blog = await _blogProvider.GetBlogItem(); - } - catch - { - return Redirect("~/admin"); - } - - model.Pager = new Pager(page, model.Blog.ItemsPerPage); - model.Posts = await _postProvider.GetList(model.Pager, 0, category, "PF"); - - if (model.Pager.ShowOlder) model.Pager.LinkToOlder = $"?page={model.Pager.Older}"; - if (model.Pager.ShowNewer) model.Pager.LinkToNewer = $"?page={model.Pager.Newer}"; - + var model = await getBlogPosts("", page, category); string viewPath = $"~/Views/Themes/{model.Blog.Theme}/Category.cshtml"; if (IsViewExists(viewPath)) @@ -112,41 +85,11 @@ public async Task Categories(string category, int page = 1) return View($"~/Views/Themes/{model.Blog.Theme}/Index.cshtml", model); } - [HttpGet("posts/{slug}")] - public async Task Single(string slug) - { - try - { - ViewBag.Slug = slug; - PostModel model = await _postProvider.GetPostModel(slug); - - // If unpublished and unauthorised redirect to error / 404. - if (model.Post.Published == DateTime.MinValue && !User.Identity.IsAuthenticated) - { - return Redirect("~/error"); - } - - model.Blog = await _blogProvider.GetBlogItem(); - model.Post.Description = model.Post.Description.MdToHtml(); - model.Post.Content = model.Post.Content.MdToHtml(); - - if(!model.Post.Author.Avatar.StartsWith("data:")) - model.Post.Author.Avatar = Url.Content($"~/{model.Post.Author.Avatar}"); - - if(model.Post.PostType == PostType.Page) - { - string viewPath = $"~/Views/Themes/{model.Blog.Theme}/Page.cshtml"; - if (IsViewExists(viewPath)) - return View(viewPath, model); - } - - return View($"~/Views/Themes/{model.Blog.Theme}/Post.cshtml", model); - } - catch - { - return Redirect("~/error"); - } - } + [HttpGet("posts/{slug}")] + public async Task Single(string slug) + { + return await getSingleBlogPost(slug); + } [HttpGet("error")] public async Task Error() @@ -226,5 +169,81 @@ private bool IsViewExists(string viewPath) var result = _compositeViewEngine.GetView("", viewPath, false); return result.Success; } + + + public async Task getSingleBlogPost(string slug){ + try + { + ViewBag.Slug = slug; + PostModel model = await _postProvider.GetPostModel(slug); + + // If unpublished and unauthorised redirect to error / 404. + if (model.Post.Published == DateTime.MinValue && !User.Identity.IsAuthenticated) + { + return Redirect("~/error"); + } + + model.Blog = await _blogProvider.GetBlogItem(); + model.Post.Description = model.Post.Description.MdToHtml(); + model.Post.Content = model.Post.Content.MdToHtml(); + + if (!model.Post.Author.Avatar.StartsWith("data:")) + model.Post.Author.Avatar = Url.Content($"~/{model.Post.Author.Avatar}"); + + if (model.Post.PostType == PostType.Page) + { + string viewPath = $"~/Views/Themes/{model.Blog.Theme}/Page.cshtml"; + if (IsViewExists(viewPath)) + return View(viewPath, model); + } + + return View($"~/Views/Themes/{model.Blog.Theme}/Post.cshtml", model); + } + catch + { + return Redirect("~/error"); + } + } + public async Task getBlogPosts(string term ="", int pager = 1, string category = "", string slug = ""){ + + var model = new ListModel{}; + + try + { + model.Blog = await _blogProvider.GetBlogItem(); + } + catch + { + Redirect("~/admin"); + } + + model.Pager = new Pager(pager, model.Blog.ItemsPerPage); + + if(!string.IsNullOrEmpty(category)) + { + model.PostListType = PostListType.Category; + model.Posts = await _postProvider.GetList(model.Pager, 0, category, "PF"); + } + else if (string.IsNullOrEmpty(term)) + { + model.PostListType = PostListType.Blog; + if (model.Blog.IncludeFeatured) + model.Posts = await _postProvider.GetList(model.Pager, 0, "", "FP"); + else + model.Posts = await _postProvider.GetList(model.Pager, 0, "", "P"); + } + else + { + model.PostListType = PostListType.Search; + model.Blog.Title = term; + model.Blog.Description = ""; + model.Posts = await _postProvider.Search(model.Pager, term, 0, "FP"); + } + + if (model.Pager.ShowOlder) model.Pager.LinkToOlder = $"?page={model.Pager.Older}"; + if (model.Pager.ShowNewer) model.Pager.LinkToNewer = $"?page={model.Pager.Newer}"; + + return model; + } } } diff --git a/src/Blogifier/Startup.cs b/src/Blogifier/Startup.cs index ccb380211..9655c81ae 100644 --- a/src/Blogifier/Startup.cs +++ b/src/Blogifier/Startup.cs @@ -44,8 +44,8 @@ public void ConfigureServices(IServiceCollection services) services.AddBlogProviders(); - services.AddControllersWithViews(); services.AddRazorPages(); + services.AddControllersWithViews(); Log.Warning("Done configure services"); } diff --git a/src/Blogifier/Views/Shared/HeaderScript.cshtml b/src/Blogifier/Views/Shared/HeaderScript.cshtml index a48e06ba7..441fca2ff 100644 --- a/src/Blogifier/Views/Shared/HeaderScript.cshtml +++ b/src/Blogifier/Views/Shared/HeaderScript.cshtml @@ -1,4 +1,4 @@ -@using Blogifier.Core +@using Blogifier.Core @{ var request = Url.ActionContext.HttpContext.Request; var absoluteUrl = $"{request.Scheme}://{request.Host.ToUriComponent()}{request.PathBase.ToUriComponent()}"; @@ -9,7 +9,12 @@ @postModel.Post.Title & @postModel.Blog.Title - + if(postModel.Post.PostType == PostType.Page){ + + } + else{ + + } } else { @@ -19,4 +24,4 @@ } } -@Html.Raw(Model.Blog.HeaderScript) \ No newline at end of file +@Html.Raw(Model.Blog.HeaderScript) diff --git a/src/Blogifier/Views/Themes/standard/components/metadata.cshtml b/src/Blogifier/Views/Themes/standard/components/metadata.cshtml index 9b39427c5..3ccb0833f 100644 --- a/src/Blogifier/Views/Themes/standard/components/metadata.cshtml +++ b/src/Blogifier/Views/Themes/standard/components/metadata.cshtml @@ -5,7 +5,7 @@ PostModel postModel = (PostModel)Model; var postTitle = postModel.Post.Title; var postDesc = postModel.Post.Description.StripHtml(); - var postUrl = absoluteUrl + "/posts/" + postModel.Post.Slug; + var postUrl = postModel.Post.PostType == PostType.Post ? absoluteUrl + "/posts/" + postModel.Post.Slug : absoluteUrl + "/" + postModel.Post.Slug; var postCover = absoluteUrl + "/" + postModel.Post.Cover; var postPublished = postModel.Post.Published.ToString("s"); var postAuthor = postModel.Post.Author.DisplayName; diff --git a/src/Blogifier/Views/Themes/standard/layouts/_main.cshtml b/src/Blogifier/Views/Themes/standard/layouts/_main.cshtml index 2fcf74e23..552893d46 100644 --- a/src/Blogifier/Views/Themes/standard/layouts/_main.cshtml +++ b/src/Blogifier/Views/Themes/standard/layouts/_main.cshtml @@ -15,7 +15,7 @@ PostModel postModel = (PostModel)Model; pageTitle = postModel.Post.Title + " | " + siteTitle; pageDesc = postModel.Post.Description.StripHtml(); - pageCanonical = absoluteUrl + "/posts/" + postModel.Post.Slug; + pageCanonical = postModel.Post.PostType == PostType.Post ? absoluteUrl + "/posts/" + postModel.Post.Slug : absoluteUrl + "/" + postModel.Post.Slug; } }