From 7d190a3d9ff2011b136551851f9c416d82a8ef62 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 16:47:02 +0300 Subject: [PATCH] shows users with publish permission that they have blog posts waiting for review --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Admin/Blogs/BlogPostAdminAppService.cs | 6 ++++ .../BlogPostAdminClientProxy.Generated.cs | 5 +++ .../Admin/Blogs/BlogPostAdminController.cs | 10 +++++- .../Pages/CmsKit/BlogPosts/Index.cshtml | 7 +++- .../Pages/CmsKit/BlogPosts/index.js | 34 +++++++++++++++++-- .../client-proxies/cms-kit-admin-proxy.js | 7 ++++ .../CmsKit/Localization/Resources/en.json | 3 +- .../CmsKit/Localization/Resources/tr.json | 3 +- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 6 ++++ .../MongoDB/Blogs/MongoBlogPostRepository.cs | 8 +++++ 12 files changed, 87 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 061f9094b8..5b7868627f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -22,4 +22,6 @@ public interface IBlogPostAdminAppService Task SendToReviewAsync(Guid id); Task CreateAndSendToReviewAsync(CreateBlogPostDto input); + + Task HasBlogPostWaitingForReviewAsync(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index b512406454..1fef52f0c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -157,4 +157,10 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.Status = BlogPostStatus.WaitingForReview; return blogPost; } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public async Task HasBlogPostWaitingForReviewAsync() + { + return await BlogPostRepository.HasBlogPostWaitingForReviewAsync(); + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index c3f94e1992..974d0a279b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -95,4 +95,9 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase HasBlogPostWaitingForReviewAsync() + { + return await RequestAsync(nameof(HasBlogPostWaitingForReviewAsync)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 0efb2bf2d5..b48350a361 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -102,4 +102,12 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); } -} + + [HttpGet] + [Route("hasblogpostwaitingforreview")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual Task HasBlogPostWaitingForReviewAsync() + { + return BlogPostAdminAppService.HasBlogPostWaitingForReviewAsync(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index 9eeb977e84..e9e882098a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -27,6 +27,11 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } + + +
@@ -43,4 +48,4 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index a813a612ea..1e3b898225 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -8,11 +8,18 @@ $(function () { }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; - + var _statusFilter; var getFilter = function () { - return { + var filter = { filter: $('#CmsKitBlogPostsWrapper input.page-search-filter-text').val() }; + + if (_statusFilter) { + filter.status = _statusFilter; + _statusFilter = null; + } + + return filter; }; var dataTable = $("#BlogPostsTable").DataTable(abp.libs.datatables.normalizeConfiguration({ @@ -52,6 +59,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullyPublished')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -87,6 +95,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullySaved')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -149,4 +158,25 @@ $(function () { e.preventDefault(); window.location.href = "BlogPosts/Create" }); + + $('#button-show-waiting-for-review').on('click', function (e) { + e.preventDefault(); + _statusFilter = blogPostStatus.SendToReview; + dataTable.ajax.reload(); + }); + + function checkHasBlogPostWaitingForReview(){ + if (!abp.auth.isGranted('CmsKit.BlogPosts.Publish')){ + $('#alertHasBlogPostWaitingForReview').hide(); + } + + blogsService.hasBlogPostWaitingForReview().then(function (result) { + if (result) { + $('#alertHasBlogPostWaitingForReview').show('fast'); + } else { + $('#alertHasBlogPostWaitingForReview').hide('fast'); + } + }); + } + checkHasBlogPostWaitingForReview(); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 4c97f154a8..754efd41b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -431,6 +431,13 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.hasBlogPostWaitingForReview = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/hasblogpostwaitingforreview', + type: 'GET' + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 48dc92ce92..eeb81b7447 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -178,6 +178,7 @@ "SaveAsDraft": "Save as draft", "SendToReview": "Send to review", "SendToReviewToPublish": "Send to review to publish", - "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing." + "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", + "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 38d8243ad6..3dad725d5b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -177,6 +177,7 @@ "SaveAsDraft": "Taslak olarak kaydet", "SendToReview": "İncelemeye gönder", "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", - "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi." + "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi.", + "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index d73512a204..aa1b2e134a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -31,4 +31,6 @@ public interface IBlogPostRepository : IBasicRepository Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); + + Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cc78ffa698..a5d36e2f01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -109,4 +109,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.Author).Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); } + + public virtual async Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 65a8bf9c13..8a8cf70d57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -125,4 +125,12 @@ public class MongoBlogPostRepository : MongoDbRepository HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, cancellationToken); + } }