Browse Source

add publish

pull/12073/head
Musa Demir 4 years ago
parent
commit
5697171ee1
No known key found for this signature in database GPG Key ID: 117DF92322553DC8
  1. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs
  2. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs
  3. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs
  4. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
  5. 11
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs
  6. 9
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs
  7. 9
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs
  8. 11
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml
  9. 16
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs
  10. 21
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js
  11. 33
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js
  12. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
  13. 9
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  14. 9
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  15. 7
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs
  16. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs
  17. 2
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs

7
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs

@ -1,5 +1,6 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.CmsKit.Blogs;
namespace Volo.CmsKit.Admin.Blogs;
@ -8,6 +9,8 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto
public string Filter { get; set; }
public Guid? BlogId { get; set; }
public Guid? AuthorId { get; set; }
}
public BlogPostStatus? Status { get; set; }
}

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs

@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace Volo.CmsKit.Admin.Blogs;
@ -12,4 +13,6 @@ public interface IBlogPostAdminAppService
CreateBlogPostDto,
UpdateBlogPostDto>
{
Task PublishAsync(Guid id);
}

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs

@ -55,6 +55,8 @@ public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvi
.RequireGlobalFeatures(typeof(BlogsFeature));
blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Delete, L("Permission:BlogPostManagement.Delete"))
.RequireGlobalFeatures(typeof(BlogsFeature));
blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Publish, L("Permission:BlogPostManagement.Publish"))
.RequireGlobalFeatures(typeof(BlogsFeature));
var menuManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.Menus.Default, L("Permission:MenuManagement"))
.RequireGlobalFeatures(typeof(MenuFeature));

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs

@ -51,6 +51,7 @@ public class CmsKitAdminPermissions
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string Publish = Default + ".Publish";
}
public static class Menus

11
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs

@ -92,6 +92,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe
var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id);
var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId,
statusFilter: input.Status,
input.MaxResultCount, input.SkipCount, input.Sorting);
var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId);
@ -112,4 +113,12 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe
{
await BlogPostRepository.DeleteAsync(id);
}
}
[Authorize(CmsKitAdminPermissions.BlogPosts.Publish)]
public virtual async Task PublishAsync(Guid id)
{
var blogPost = await BlogPostRepository.GetAsync(id);
blogPost.SetPublished();
}
}

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

@ -55,4 +55,13 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase<IBlogPostAdminAp
{ typeof(UpdateBlogPostDto), input }
});
}
public virtual async Task PublishAsync(Guid id)
{
await RequestAsync(nameof(PublishAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid), id },
});
}
}

9
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs

@ -61,4 +61,13 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS
{
return BlogPostAdminAppService.UpdateAsync(id, input);
}
[HttpPost]
[Route("publish/{id}")]
[Authorize(CmsKitAdminPermissions.BlogPosts.Publish)]
public virtual Task PublishAsync(Guid id)
{
return BlogPostAdminAppService.PublishAsync(id);
}
}

11
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml

@ -1,6 +1,7 @@
@page
@using System.Globalization
@using Microsoft.AspNetCore.Authorization
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar
@using Volo.CmsKit.Admin.Web.Pages
@ -10,9 +11,10 @@
@using Volo.CmsKit.Blogs
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Uppy
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Slugify
@using Volo.CmsKit.Permissions
@inherits CmsKitAdminPageBase
@inject IAuthorizationService AuthorizationService
@model CreateModel
@{
@ -69,6 +71,7 @@
data-input-id="@Html.IdFor(x => x.ViewModel.Content)"
data-language="@(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)">
</div>
<input type="hidden" id="ViewModel_Status" name="ViewModel.Status" value="" class="form-control ">
</abp-dynamic-form>
<div id="blog-post-tags-wrapper">
@ -84,6 +87,10 @@
</abp-card-body>
<abp-card-footer>
<abp-button button-type="Primary" type="submit" text="@L["Submit"].Value" id="button-blog-post-create" />
<abp-button button-type="Primary" type="button" text="@L["Draft"].Value" id="button-blog-post-create" />
@if ((await AuthorizationService.AuthorizeAsync(CmsKitAdminPermissions.BlogPosts.Publish)).Succeeded)
{
<abp-button button-type="Primary" type="button" text="@L["Publish"].Value" id="button-blog-post-publish"/>
}
</abp-card-footer>
</abp-card>

16
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs

@ -31,9 +31,17 @@ public class CreateModel : CmsKitAdminPageModel
{
var dto = ObjectMapper.Map<CreateBlogPostViewModel, CreateBlogPostDto>(ViewModel);
var created = await BlogPostAdminAppService.CreateAsync(dto);
BlogPostDto createResult;
if (ViewModel.Status == BlogPostStatus.Published)
{
createResult = await BlogPostAdminAppService.CreateAndPublishAsync(dto);
}
else
{
createResult = await BlogPostAdminAppService.CreateAsync(dto);
}
return new OkObjectResult(created);
return new OkObjectResult(createResult);
}
[AutoMap(typeof(CreateBlogPostDto), ReverseMap = true)]
@ -65,5 +73,9 @@ public class CreateModel : CmsKitAdminPageModel
[HiddenInput]
public Guid? CoverImageMediaId { get; set; }
[HiddenInput]
[DynamicFormIgnore]
public BlogPostStatus Status { get; set; }
}
}

21
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js

@ -2,13 +2,20 @@ $(function () {
var l = abp.localization.getResource("CmsKit");
var blogPostStatus = {
Draft: 0,
Published: 1
};
var $selectBlog = $('#BlogSelectionSelect');
var $formCreate = $('#form-blog-post-create');
var $title = $('#ViewModel_Title');
var $shortDescription = $('#ViewModel_ShortDescription');
var $coverImage = $('#ViewModel_CoverImageMediaId');
var $url = $('#ViewModel_Slug');
var $status = $('#ViewModel_Status');
var $buttonSubmit = $('#button-blog-post-create');
var $buttonPublish = $('#button-blog-post-publish');
var $pageContentInput = $('#ViewModel_Content');
var $tagsInput = $('.tag-editor-form input[name=tags]');
var $fileInput = $('#BlogPostCoverImage');
@ -59,9 +66,23 @@ $(function () {
$buttonSubmit.click(function (e) {
e.preventDefault();
$status.val(blogPostStatus.Draft);
submitCoverImage();
});
$buttonPublish.click(function (e) {
abp.message.confirm(
l('BlogPostPublishConfirmationMessage', $title.val()),
function (isConfirmed) {
if (isConfirmed) {
e.preventDefault();
$status.val(blogPostStatus.Published);
submitCoverImage();
}
}
);
});
function submitEntityTags(blogPostId) {
var tags = $tagsInput.val().split(',').map(x => x.trim()).filter(x => x);

33
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js

@ -1,7 +1,11 @@
$(function () {
var l = abp.localization.getResource("CmsKit");
var blogPostStatus = {
Draft: 0,
Published: 1
};
var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin;
var getFilter = function () {
@ -33,6 +37,23 @@ $(function () {
location.href = "BlogPosts/Update/" + data.record.id
}
},
{
text: l('Publish'),
visible: function(data) {
return data?.status !== blogPostStatus.Published && abp.auth.isGranted('CmsKit.BlogPosts.Publish');
},
confirmMessage: function (data) {
return l("BlogPostPublishConfirmationMessage", data.record.title)
},
action: function (data) {
blogsService
.publish(data.record.id)
.then(function () {
dataTable.ajax.reload();
abp.notify.success(l('SuccessfullyPublished'));
});
}
},
{
text: l('Delete'),
visible: abp.auth.isGranted('CmsKit.BlogPosts.Delete'),
@ -71,7 +92,15 @@ $(function () {
orderable: true,
data: 'creationTime',
dataFormat: "datetime"
}
},
{
title: l("Status"),
orderable: true,
data: "status",
render: function (data) {
return l("CmsKit.BlogPost.Status." + data);
}
},
]
}));

10
modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js

@ -378,7 +378,7 @@
volo.cmsKit.admin.blogs.blogPostAdmin.getList = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'authorId', value: input.authorId }, { name: 'status', value: input.status }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
type: 'GET'
}, ajaxParams));
};
@ -391,6 +391,14 @@
}, ajaxParams));
};
volo.cmsKit.admin.blogs.blogPostAdmin.publish = function(id, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/publish/' + id + '',
type: 'POST',
dataType: null
}, ajaxParams));
};
})();
})();

9
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -85,6 +85,7 @@
"Permission:BlogPostManagement.Create": "Create",
"Permission:BlogPostManagement.Delete": "Delete",
"Permission:BlogPostManagement.Update": "Update",
"Permission:BlogPostManagement.Publish": "Publish",
"Permission:CmsKit": "CmsKit",
"Permission:Comments": "Comment Management",
"Permission:Comments.Delete": "Delete",
@ -164,6 +165,12 @@
"GlobalResources": "Global Resources",
"Script": "Script",
"Style": "Style",
"SavedSuccessfully": "Saved successfully"
"SavedSuccessfully": "Saved successfully",
"CmsKit.BlogPost.Status.0": "Draft",
"CmsKit.BlogPost.Status.1": "Published",
"BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?",
"SuccessfullyPublished": "Successfully published!",
"Draft": "Draft",
"Publish": "Publish",
}
}

9
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -85,6 +85,7 @@
"Permission:BlogPostManagement.Create": "Oluşturma",
"Permission:BlogPostManagement.Delete": "Silme",
"Permission:BlogPostManagement.Update": "Güncelleme",
"Permission:BlogPostManagement.Publish": "Yayınlama",
"Permission:CmsKit": "CmsKit",
"Permission:Comments": "Yorum Yönetimi",
"Permission:Comments.Delete": "Silmek",
@ -163,6 +164,12 @@
"GlobalResources": "Global Kaynaklar",
"Script": "Script",
"Style": "Style",
"SavedSuccessfully": "Başarıyla kaydedildi"
"SavedSuccessfully": "Başarıyla kaydedildi",
"CmsKit.BlogPost.Status.0": "Taslak",
"CmsKit.BlogPost.Status.1": "Yayınlandı",
"BlogPostPublishConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak istediğinize emin misiniz?",
"SuccessfullyPublished": "Başarıyla yayınlandı",
"Draft": "Taslak olarak kaydet",
"Publish": "Yayınla",
}
}

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

@ -43,6 +43,7 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
string filter = null,
Guid? blogId = null,
Guid? authorId = null,
BlogPostStatus? statusFilter = null,
CancellationToken cancellationToken = default)
{
cancellationToken = GetCancellationToken(cancellationToken);
@ -51,14 +52,15 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(authorId.HasValue, x => x.AuthorId == authorId)
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(statusFilter.HasValue, x => x.Status == statusFilter)
.CountAsync(cancellationToken);
}
public virtual async Task<List<BlogPost>> GetListAsync(
string filter = null,
Guid? blogId = null,
Guid? authorId = null,
BlogPostStatus? statusFilter = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string sorting = null,
@ -73,7 +75,8 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
var queryable = blogPostQueryable
.WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId);
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId)
.WhereIf(statusFilter.HasValue, x => x.Status == statusFilter);
queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting);

2
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs

@ -38,7 +38,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub
{
var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount,
var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, BlogPostStatus.Published, input.MaxResultCount,
input.SkipCount, input.Sorting);
return new PagedResultDto<BlogPostPublicDto>(

2
modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs

@ -367,6 +367,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende
blog,
_cmsKitTestData.BlogPost_1_Title,
_cmsKitTestData.BlogPost_1_Slug,
BlogPostStatus.Published,
"Short desc 1",
"Blog Post 1 Content"))).Id;
@ -377,6 +378,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende
blog,
_cmsKitTestData.BlogPost_2_Title,
_cmsKitTestData.BlogPost_2_Slug,
BlogPostStatus.Published,
"Short desc 2",
"Blog Post 2 Content"))).Id;
}

Loading…
Cancel
Save