Browse Source

shows users with publish permission that they have blog posts waiting for review

pull/12087/head
Musa Demir 4 years ago
parent
commit
7d190a3d9f
No known key found for this signature in database GPG Key ID: 117DF92322553DC8
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs
  2. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs
  3. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs
  4. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs
  5. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml
  6. 34
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js
  7. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
  8. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  9. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  10. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs
  11. 6
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs
  12. 8
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs

2
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<BlogPostDto> CreateAndSendToReviewAsync(CreateBlogPostDto input);
Task<bool> HasBlogPostWaitingForReviewAsync();
}

6
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<bool> HasBlogPostWaitingForReviewAsync()
{
return await BlogPostRepository.HasBlogPostWaitingForReviewAsync();
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs

@ -95,4 +95,9 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase<IBlogPostAdminAp
{ typeof(CreateBlogPostDto), input }
});
}
public virtual async Task<bool> HasBlogPostWaitingForReviewAsync()
{
return await RequestAsync<bool>(nameof(HasBlogPostWaitingForReviewAsync));
}
}

10
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<bool> HasBlogPostWaitingForReviewAsync()
{
return BlogPostAdminAppService.HasBlogPostWaitingForReviewAsync();
}
}

7
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})
}
<div class="alert alert-warning" style="display: none" role="alert" id="alertHasBlogPostWaitingForReview">
<abp-button button-type="Link" type="button" text="@L["HasBlogPostWaitingForReviewMessage"].Value" id="button-show-waiting-for-review"/>
</div>
<abp-card class="mb-4">
<abp-card-body>
<div id="CmsKitBlogPostsWrapper">
@ -43,4 +48,4 @@
<abp-card-body>
<abp-table striped-rows="true" id="BlogPostsTable" class="nowrap"></abp-table>
</abp-card-body>
</abp-card>
</abp-card>

34
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();
});

7
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));
};
})();
})();

3
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."
}
}

3
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."
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs

@ -31,4 +31,6 @@ public interface IBlogPostRepository : IBasicRepository<BlogPost, Guid>
Task<BlogPost> GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default);
Task<List<CmsUser>> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default);
Task<bool> HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default);
}

6
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs

@ -109,4 +109,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository<CmsKitDbContext, BlogPo
return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, GetCancellationToken(cancellationToken));
}
}

8
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs

@ -125,4 +125,12 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken));
}
public virtual async Task<bool> HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default)
{
cancellationToken = GetCancellationToken(cancellationToken);
return await (await GetMongoQueryableAsync(cancellationToken))
.AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, cancellationToken);
}
}

Loading…
Cancel
Save