Browse Source

cmskit - implement concurrency stamp

pull/9838/head
enisn 5 years ago
parent
commit
aab8498f24
  1. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs
  2. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs
  3. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs
  4. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogPostDto.cs
  5. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs
  6. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs
  7. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs
  8. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs
  9. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs
  10. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs
  11. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
  12. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs
  13. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs
  14. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Update.cshtml.cs
  15. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml.cs
  16. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  17. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  18. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml
  19. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml.cs
  20. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/EditModal.cshtml.cs
  21. 15
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  22. 5
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs
  23. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs
  24. 10
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs
  25. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentDto.cs
  26. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs
  27. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs
  28. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs
  29. 7
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml
  30. 3
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js

4
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs

@ -1,13 +1,15 @@
using System; using System;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Blogs namespace Volo.CmsKit.Admin.Blogs
{ {
[Serializable] [Serializable]
public class BlogDto : EntityDto<Guid> public class BlogDto : EntityDto<Guid>, IHasConcurrencyStamp
{ {
public string Name { get; set; } public string Name { get; set; }
public string Slug { get; set; } public string Slug { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs

@ -1,11 +1,12 @@
using System; using System;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Blogs namespace Volo.CmsKit.Admin.Blogs
{ {
[Serializable] [Serializable]
public class BlogPostDto : EntityDto<Guid>, IHasCreationTime, IHasModificationTime public class BlogPostDto : EntityDto<Guid>, IHasCreationTime, IHasModificationTime, IHasConcurrencyStamp
{ {
public Guid BlogId { get; set; } public Guid BlogId { get; set; }
@ -22,5 +23,7 @@ namespace Volo.CmsKit.Admin.Blogs
public DateTime CreationTime { get; set; } public DateTime CreationTime { get; set; }
public DateTime? LastModificationTime { get; set; } public DateTime? LastModificationTime { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs

@ -1,10 +1,11 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
namespace Volo.CmsKit.Admin.Blogs namespace Volo.CmsKit.Admin.Blogs
{ {
public class UpdateBlogDto public class UpdateBlogDto : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))]
@ -13,5 +14,7 @@ namespace Volo.CmsKit.Admin.Blogs
[Required] [Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))] [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))]
public string Slug { get; set; } public string Slug { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogPostDto.cs

@ -1,12 +1,13 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
namespace Volo.CmsKit.Admin.Blogs namespace Volo.CmsKit.Admin.Blogs
{ {
[Serializable] [Serializable]
public class UpdateBlogPostDto public class UpdateBlogPostDto : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))] [DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))]
@ -23,5 +24,7 @@ namespace Volo.CmsKit.Admin.Blogs
public string Content { get; set; } public string Content { get; set; }
public Guid? CoverImageMediaId { get; set; } public Guid? CoverImageMediaId { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs

@ -1,10 +1,11 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Menus namespace Volo.CmsKit.Admin.Menus
{ {
[Serializable] [Serializable]
public class MenuItemUpdateInput public class MenuItemUpdateInput : IHasConcurrencyStamp
{ {
[Required] [Required]
public string DisplayName { get; set; } public string DisplayName { get; set; }
@ -22,5 +23,7 @@ namespace Volo.CmsKit.Admin.Menus
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs

@ -1,10 +1,11 @@
using System; using System;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Pages namespace Volo.CmsKit.Admin.Pages
{ {
[Serializable] [Serializable]
public class PageDto : AuditedEntityDto<Guid> public class PageDto : AuditedEntityDto<Guid>, IHasConcurrencyStamp
{ {
public string Title { get; set; } public string Title { get; set; }
@ -15,5 +16,7 @@ namespace Volo.CmsKit.Admin.Pages
public string Script { get; set; } public string Script { get; set; }
public string Style { get; set; } public string Style { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

7
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs

@ -1,12 +1,13 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Pages; using Volo.CmsKit.Pages;
namespace Volo.CmsKit.Admin.Pages namespace Volo.CmsKit.Admin.Pages
{ {
[Serializable] [Serializable]
public class UpdatePageInputDto public class UpdatePageInputDto : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))]
@ -15,7 +16,7 @@ namespace Volo.CmsKit.Admin.Pages
[Required] [Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxSlugLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxSlugLength))]
public string Slug { get; set; } public string Slug { get; set; }
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxContentLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxContentLength))]
public string Content { get; set; } public string Content { get; set; }
@ -24,5 +25,7 @@ namespace Volo.CmsKit.Admin.Pages
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))]
public string Style { get; set; } public string Style { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs

@ -1,15 +1,18 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Tags; using Volo.CmsKit.Tags;
namespace Volo.CmsKit.Admin.Tags namespace Volo.CmsKit.Admin.Tags
{ {
[Serializable] [Serializable]
public class TagUpdateDto public class TagUpdateDto : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))] [DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))]
public string Name { get; set; } public string Name { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

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

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
@ -67,6 +68,8 @@ namespace Volo.CmsKit.Admin.Blogs
blog = await BlogManager.UpdateAsync(blog, input.Name, input.Slug); blog = await BlogManager.UpdateAsync(blog, input.Name, input.Slug);
blog.SetConcurrencyStamp(input.ConcurrencyStamp);
await BlogRepository.UpdateAsync(blog); await BlogRepository.UpdateAsync(blog);
return ObjectMapper.Map<Blog, BlogDto>(blog); return ObjectMapper.Map<Blog, BlogDto>(blog);

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

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.Abp.Users; using Volo.Abp.Users;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
@ -63,6 +63,7 @@ namespace Volo.CmsKit.Admin.Blogs
blogPost.SetTitle(input.Title); blogPost.SetTitle(input.Title);
blogPost.SetShortDescription(input.ShortDescription); blogPost.SetShortDescription(input.ShortDescription);
blogPost.SetContent(input.Content); blogPost.SetContent(input.Content);
blogPost.SetConcurrencyStamp(input.ConcurrencyStamp);
blogPost.CoverImageMediaId = input.CoverImageMediaId; blogPost.CoverImageMediaId = input.CoverImageMediaId;
if (blogPost.Slug != input.Slug) if (blogPost.Slug != input.Slug)

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus; using Volo.CmsKit.Menus;
@ -87,6 +88,7 @@ namespace Volo.CmsKit.Admin.Menus
menuItem.Target = input.Target; menuItem.Target = input.Target;
menuItem.ElementId = input.ElementId; menuItem.ElementId = input.ElementId;
menuItem.CssClass = input.CssClass; menuItem.CssClass = input.CssClass;
menuItem.SetConcurrencyStamp(input.ConcurrencyStamp);
await MenuItemRepository.UpdateAsync(menuItem); await MenuItemRepository.UpdateAsync(menuItem);

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using AutoMapper; using AutoMapper;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.Admin.Menus; using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
@ -72,6 +73,7 @@ namespace Volo.CmsKit.Admin.Pages
page.SetContent(input.Content); page.SetContent(input.Content);
page.SetScript(input.Script); page.SetScript(input.Script);
page.SetStyle(input.Style); page.SetStyle(input.Style);
input.SetConcurrencyStamp(input.ConcurrencyStamp);
await PageRepository.UpdateAsync(page); await PageRepository.UpdateAsync(page);

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Permissions; using Volo.CmsKit.Permissions;
@ -53,6 +54,8 @@ namespace Volo.CmsKit.Admin.Tags
id, id,
input.Name); input.Name);
tag.SetConcurrencyStamp(input.ConcurrencyStamp);
await Repository.UpdateAsync(tag); await Repository.UpdateAsync(tag);
return ObjectMapper.Map<Tag, TagDto>(tag); return ObjectMapper.Map<Tag, TagDto>(tag);

5
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Update.cshtml.cs

@ -8,6 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Admin.Blogs;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
@ -56,7 +57,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts
[AutoMap(typeof(BlogPostDto))] [AutoMap(typeof(BlogPostDto))]
[AutoMap(typeof(UpdateBlogPostDto), ReverseMap = true)] [AutoMap(typeof(UpdateBlogPostDto), ReverseMap = true)]
public class UpdateBlogPostViewModel public class UpdateBlogPostViewModel : IHasConcurrencyStamp
{ {
[DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))] [DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))]
[Required] [Required]
@ -79,6 +80,8 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts
[HiddenInput] [HiddenInput]
public Guid? CoverImageMediaId { get; set; } public Guid? CoverImageMediaId { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }
} }

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml.cs

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc;
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Admin.Blogs;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
@ -43,7 +44,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs
[AutoMap(typeof(BlogDto))] [AutoMap(typeof(BlogDto))]
[AutoMap(typeof(UpdateBlogDto), ReverseMap = true)] [AutoMap(typeof(UpdateBlogDto), ReverseMap = true)]
public class UpdateBlogViewModel public class UpdateBlogViewModel : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))]
@ -52,6 +53,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))] [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))]
[Required] [Required]
public string Slug { get; set; } public string Slug { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }
} }

1
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml

@ -17,6 +17,7 @@
<abp-modal-header title="@L["New"].Value"></abp-modal-header> <abp-modal-header title="@L["New"].Value"></abp-modal-header>
<abp-modal-body> <abp-modal-body>
<abp-input asp-for="Id"/> <abp-input asp-for="Id"/>
<abp-input asp-for="ViewModel.ConcurrencyStamp"/>
<abp-tabs tab-style="Tab"> <abp-tabs tab-style="Tab">
<abp-tab name="url" title="@L["Url"]"> <abp-tab name="url" title="@L["Url"]">

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using AutoMapper; using AutoMapper;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.CmsKit.Admin.Menus; using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.Menus; using Volo.CmsKit.Menus;
@ -43,7 +44,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
[AutoMap(typeof(MenuItemDto))] [AutoMap(typeof(MenuItemDto))]
[AutoMap(typeof(MenuItemUpdateInput), ReverseMap = true)] [AutoMap(typeof(MenuItemUpdateInput), ReverseMap = true)]
public class MenuItemUpdateViewModel public class MenuItemUpdateViewModel : IHasConcurrencyStamp
{ {
[Required] [Required]
public string DisplayName { get; set; } public string DisplayName { get; set; }
@ -61,6 +62,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }
} }

2
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml

@ -40,6 +40,8 @@
<form asp-page="/CmsKit/Pages/Update" id="form-page-update"> <form asp-page="/CmsKit/Pages/Update" id="form-page-update">
<abp-input asp-for="@Model.Id" /> <abp-input asp-for="@Model.Id" />
<abp-input asp-for="@Model.ViewModel.ConcurrencyStamp" />
<abp-input asp-for="@Model.ViewModel.Title" /> <abp-input asp-for="@Model.ViewModel.Title" />
<abp-input asp-for="ViewModel.Slug" title="@L["PageSlugInformation"]" data-toggle="tooltip" /> <abp-input asp-for="ViewModel.Slug" title="@L["PageSlugInformation"]" data-toggle="tooltip" />

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml.cs

@ -4,6 +4,7 @@ using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Pages; using Volo.CmsKit.Admin.Pages;
using Volo.CmsKit.Pages; using Volo.CmsKit.Pages;
@ -44,7 +45,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages
[AutoMap(typeof(PageDto))] [AutoMap(typeof(PageDto))]
[AutoMap(typeof(UpdatePageInputDto), ReverseMap = true)] [AutoMap(typeof(UpdatePageInputDto), ReverseMap = true)]
public class UpdatePageViewModel public class UpdatePageViewModel : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))]
@ -65,6 +66,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages
[TextArea(Rows = 6)] [TextArea(Rows = 6)]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))] [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))]
public string Style { get; set; } public string Style { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }
} }

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/EditModal.cshtml.cs

@ -6,6 +6,7 @@ using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Tags; using Volo.CmsKit.Admin.Tags;
using Volo.CmsKit.Tags; using Volo.CmsKit.Tags;
@ -44,11 +45,14 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags
[AutoMap(typeof(TagDto))] [AutoMap(typeof(TagDto))]
[AutoMap(typeof(TagUpdateDto), ReverseMap = true)] [AutoMap(typeof(TagUpdateDto), ReverseMap = true)]
public class TagEditViewModel public class TagEditViewModel : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))] [DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))]
public string Name { get; set; } public string Name { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }
} }

15
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs

@ -1,21 +1,32 @@
using System; using System;
using System.Collections.Generic;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Menus namespace Volo.CmsKit.Menus
{ {
[Serializable] [Serializable]
public class MenuItemDto : AuditedEntityDto<Guid> public class MenuItemDto : AuditedEntityDto<Guid>, IHasConcurrencyStamp
{ {
public Guid? ParentId { get; set; } public Guid? ParentId { get; set; }
public string DisplayName { get; set; } public string DisplayName { get; set; }
public bool IsActive { get; set; } public bool IsActive { get; set; }
public string Url { get; set; } public string Url { get; set; }
public string Icon { get; set; } public string Icon { get; set; }
public int Order { get; set; } public int Order { get; set; }
public string Target { get; set; } public string Target { get; set; }
public string ElementId { get; set; } public string ElementId { get; set; }
public string CssClass { get; set; } public string CssClass { get; set; }
public Guid? PageId { get; set; } public Guid? PageId { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs

@ -1,13 +1,16 @@
using System; using System;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Tags namespace Volo.CmsKit.Tags
{ {
[Serializable] [Serializable]
public class TagDto : EntityDto<Guid> public class TagDto : EntityDto<Guid>, IHasConcurrencyStamp
{ {
public string EntityType { get; set; } public string EntityType { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs

@ -7,7 +7,7 @@ using Volo.Abp.MultiTenancy;
namespace Volo.CmsKit.Comments namespace Volo.CmsKit.Comments
{ {
public class Comment: BasicAggregateRoot<Guid>, IHasCreationTime, IMustHaveCreator, IMultiTenant public class Comment: AggregateRoot<Guid>, IHasCreationTime, IMustHaveCreator, IMultiTenant
{ {
public virtual Guid? TenantId { get; protected set; } public virtual Guid? TenantId { get; protected set; }

10
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs

@ -156,6 +156,11 @@ namespace Volo.CmsKit.MongoDB.Comments
.Where(x => x.RepliedCommentId == comment.Id) .Where(x => x.RepliedCommentId == comment.Id)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
await base.DeleteAsync(
comment,
cancellationToken: GetCancellationToken(cancellationToken)
);
foreach (var reply in replies) foreach (var reply in replies)
{ {
await base.DeleteAsync( await base.DeleteAsync(
@ -163,11 +168,6 @@ namespace Volo.CmsKit.MongoDB.Comments
cancellationToken: GetCancellationToken(cancellationToken) cancellationToken: GetCancellationToken(cancellationToken)
); );
} }
await base.DeleteAsync(
comment,
cancellationToken: GetCancellationToken(cancellationToken)
);
} }
protected virtual async Task<IQueryable<Comment>> GetListQueryAsync( protected virtual async Task<IQueryable<Comment>> GetListQueryAsync(

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentDto.cs

@ -1,9 +1,10 @@
using System; using System;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Public.Comments namespace Volo.CmsKit.Public.Comments
{ {
[Serializable] [Serializable]
public class CommentDto public class CommentDto : IHasConcurrencyStamp
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
@ -20,5 +21,7 @@ namespace Volo.CmsKit.Public.Comments
public DateTime CreationTime { get; set; } public DateTime CreationTime { get; set; }
public CmsUserDto Author { get; set; } //TODO: Should only have AuthorId for the basic dto. see https://docs.abp.io/en/abp/latest/Best-Practices/Application-Services public CmsUserDto Author { get; set; } //TODO: Should only have AuthorId for the basic dto. see https://docs.abp.io/en/abp/latest/Best-Practices/Application-Services
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs

@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Public.Comments namespace Volo.CmsKit.Public.Comments
{ {
[Serializable] [Serializable]
public class CommentWithDetailsDto public class CommentWithDetailsDto : IHasConcurrencyStamp
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
@ -21,5 +22,7 @@ namespace Volo.CmsKit.Public.Comments
public List<CommentDto> Replies { get; set; } public List<CommentDto> Replies { get; set; }
public CmsUserDto Author { get; set; } public CmsUserDto Author { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs

@ -1,15 +1,18 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.CmsKit.Comments; using Volo.CmsKit.Comments;
namespace Volo.CmsKit.Public.Comments namespace Volo.CmsKit.Public.Comments
{ {
[Serializable] [Serializable]
public class UpdateCommentInput public class UpdateCommentInput : IHasConcurrencyStamp
{ {
[Required] [Required]
[DynamicStringLength(typeof(CommentConsts), nameof(CommentConsts.MaxTextLength))] [DynamicStringLength(typeof(CommentConsts), nameof(CommentConsts.MaxTextLength))]
public string Text { get; set; } public string Text { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

2
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.Data;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.Abp.Users; using Volo.Abp.Users;
@ -86,6 +87,7 @@ namespace Volo.CmsKit.Public.Comments
} }
comment.SetText(input.Text); comment.SetText(input.Text);
comment.SetConcurrencyStamp(input.ConcurrencyStamp);
var updatedComment = await CommentRepository.UpdateAsync(comment); var updatedComment = await CommentRepository.UpdateAsync(comment);

7
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml

@ -89,7 +89,7 @@
</div>; </div>;
} }
@{ @{
Func<dynamic, IHtmlContent> GetEditArea(Guid id, string text) => Func<dynamic, IHtmlContent> GetEditArea(Guid id, string text, string concurrencyStamp) =>
@<div class="cms-comment-edit-area" id="@($"cms-comment_{Model.EntityType}_{Model.EntityId}_{id}")" data-id="@id.ToString()" style="display:none"> @<div class="cms-comment-edit-area" id="@($"cms-comment_{Model.EntityType}_{Model.EntityId}_{id}")" data-id="@id.ToString()" style="display:none">
<div class="card bg-light p-3 mx-0 mt-3"> <div class="card bg-light p-3 mx-0 mt-3">
<form class="cms-comment-update-form"> <form class="cms-comment-update-form">
@ -98,6 +98,7 @@
<div class="col"> <div class="col">
<div class="form-group m-0"> <div class="form-group m-0">
<textarea class="form-control" name="commentText" rows="3">@text</textarea> <textarea class="form-control" name="commentText" rows="3">@text</textarea>
<input name="commentConcurrencyStamp" value="@concurrencyStamp" type="hidden" />
</div> </div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -151,7 +152,7 @@
</div> </div>
</div> </div>
</div> </div>
@GetEditArea(comment.Id, comment.Text).Invoke(null) @GetEditArea(comment.Id, comment.Text, comment.ConcurrencyStamp).Invoke(null)
@if (comment.Replies.Any()) @if (comment.Replies.Any())
{ {
@ -181,7 +182,7 @@
</div> </div>
</div> </div>
@GetEditArea(reply.Id, reply.Text).Invoke(null) @GetEditArea(reply.Id, reply.Text, reply.ConcurrencyStamp).Invoke(null)
</div> </div>
</div> </div>
} }

3
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js

@ -106,7 +106,8 @@
volo.cmsKit.public.comments.commentPublic.update( volo.cmsKit.public.comments.commentPublic.update(
formAsObject.id, formAsObject.id,
{ {
text: formAsObject.commentText text: formAsObject.commentText,
concurrencyStamp: formAsObject.commentConcurrencyStamp
} }
).then(function () { ).then(function () {
widgetManager.refresh($widget); widgetManager.refresh($widget);

Loading…
Cancel
Save