Browse Source

CmsKit - Refactoring according to review

pull/9261/head
Enis Necipoğlu 5 years ago
parent
commit
0920b77fef
  1. 5
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs
  2. 1
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs
  3. 3
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs
  4. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs
  5. 16
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs
  6. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs
  7. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs
  8. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs
  9. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
  10. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs
  11. 32
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs
  12. 25
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs
  13. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs
  14. 29
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml
  15. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
  16. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs
  17. 20
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  18. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  19. 9
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js
  20. 11
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js
  21. 18
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js
  22. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs
  23. 28
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js
  24. 1
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  25. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs
  26. 4
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  27. 4
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  28. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs
  29. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs
  30. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs
  31. 27
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs
  32. 13
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs
  33. 15
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs
  34. 14
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs
  35. 12
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs
  36. 10
      modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs

5
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs → modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs

@ -11,7 +11,7 @@ using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.Migrations
{
[DbContext(typeof(UnifiedDbContext))]
[Migration("20210609132819_Initial")]
[Migration("20210614072230_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -1570,9 +1570,6 @@ namespace Volo.CmsKit.Migrations
b.Property<Guid?>("ParentId")
.HasColumnType("uniqueidentifier");
b.Property<string>("RequiredPermissionName")
.HasColumnType("nvarchar(max)");
b.Property<string>("Target")
.HasColumnType("nvarchar(max)");

1
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs → modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs

@ -765,7 +765,6 @@ namespace Volo.CmsKit.Migrations
Target = table.Column<string>(type: "nvarchar(max)", nullable: true),
ElementId = table.Column<string>(type: "nvarchar(max)", nullable: true),
CssClass = table.Column<string>(type: "nvarchar(max)", nullable: true),
RequiredPermissionName = table.Column<string>(type: "nvarchar(max)", nullable: true),
PageId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),

3
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs

@ -1568,9 +1568,6 @@ namespace Volo.CmsKit.Migrations
b.Property<Guid?>("ParentId")
.HasColumnType("uniqueidentifier");
b.Property<string>("RequiredPermissionName")
.HasColumnType("nvarchar(max)");
b.Property<string>("Target")
.HasColumnType("nvarchar(max)");

8
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs

@ -8,15 +8,13 @@ namespace Volo.CmsKit.Admin.Menus
{
public interface IMenuAdminAppService : IApplicationService
{
Task<PagedResultDto<MenuDto>> GetListAsync(PagedAndSortedResultRequestDto input);
Task<PagedResultDto<MenuWithDetailsDto>> GetListAsync(PagedAndSortedResultRequestDto input);
Task<MenuWithDetailsDto> GetAsync(Guid id);
Task<MenuDto> GetSimpleAsync(Guid id);
Task<MenuWithDetailsDto> CreateAsync(MenuCreateInput input);
Task<MenuDto> CreateAsync(MenuCreateInput input);
Task<MenuDto> UpdateAsync(Guid menuId, MenuUpdateInput input);
Task<MenuWithDetailsDto> UpdateAsync(Guid menuId, MenuUpdateInput input);
Task DeleteAsync(Guid menuId);

16
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Admin.Menus
{
[Serializable]
public class MenuDto : EntityDto<Guid>
{
public string Name { get; set; }
public bool IsMainMenu { get; set; }
}
}

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

@ -27,8 +27,6 @@ namespace Volo.CmsKit.Admin.Menus
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
public Guid? PageId { get; set; }
}
}

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

@ -21,8 +21,6 @@ namespace Volo.CmsKit.Admin.Menus
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
public Guid? PageId { get; set; }
}
}

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

@ -65,16 +65,6 @@ namespace Volo.CmsKit.Permissions
.RequireGlobalFeatures(typeof(MenuFeature));
menuManagement.AddChild(CmsKitAdminPermissions.Menus.Delete, L("Permission:MenuManagement.Delete"))
.RequireGlobalFeatures(typeof(MenuFeature));
var menuItemManagement = menuManagement.AddChild(CmsKitAdminPermissions.Menus.MenuItems.Default, L("Permission:MenuItemManagement"))
.RequireGlobalFeatures(typeof(MenuFeature));
menuItemManagement.AddChild(CmsKitAdminPermissions.Menus.MenuItems.Create, L("Permission:MenuItemManagement.Create"))
.RequireGlobalFeatures(typeof(MenuFeature));
menuItemManagement.AddChild(CmsKitAdminPermissions.Menus.MenuItems.Update, L("Permission:MenuItemManagement.Update"))
.RequireGlobalFeatures(typeof(MenuFeature));
menuItemManagement.AddChild(CmsKitAdminPermissions.Menus.MenuItems.Delete, L("Permission:MenuItemManagement.Delete"))
.RequireGlobalFeatures(typeof(MenuFeature));
}
private static LocalizableString L(string name)

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

@ -59,14 +59,6 @@ namespace Volo.CmsKit.Permissions
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public static class MenuItems
{
public const string Default = Menus.Default + ".Items";
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
}
}
}
}

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs

@ -43,7 +43,6 @@ namespace Volo.CmsKit.Admin
CreateMap<MediaDescriptor, MediaDescriptorDto>();
CreateMap<Menu, MenuDto>();
CreateMap<Menu, MenuWithDetailsDto>();
CreateMap<MenuItem, MenuItemDto>();
}

32
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs

@ -32,13 +32,13 @@ namespace Volo.CmsKit.Admin.Menus
PageRepository = pageRepository;
}
public async Task<PagedResultDto<MenuDto>> GetListAsync(PagedAndSortedResultRequestDto input)
public async Task<PagedResultDto<MenuWithDetailsDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
var menus = await MenuRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, input.Sorting);
return new PagedResultDto<MenuDto>(
return new PagedResultDto<MenuWithDetailsDto>(
await MenuRepository.GetCountAsync(),
ObjectMapper.Map<List<Menu>, List<MenuDto>>(menus)
ObjectMapper.Map<List<Menu>, List<MenuWithDetailsDto>>(menus)
);
}
@ -48,24 +48,24 @@ namespace Volo.CmsKit.Admin.Menus
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
}
public async Task<MenuDto> GetSimpleAsync(Guid id)
public async Task<MenuWithDetailsDto> GetSimpleAsync(Guid id)
{
var menu = await MenuRepository.GetAsync(id, includeDetails: false);
return ObjectMapper.Map<Menu, MenuDto>(menu);
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
}
[Authorize(CmsKitAdminPermissions.Menus.Create)]
public async Task<MenuDto> CreateAsync(MenuCreateInput input)
public async Task<MenuWithDetailsDto> CreateAsync(MenuCreateInput input)
{
var menu = new Menu(GuidGenerator.Create(), CurrentTenant.Id, input.Name);
var menu = await MenuManager.CreateAsync(CurrentTenant.Id, input.Name);
await MenuRepository.InsertAsync(menu);
return ObjectMapper.Map<Menu, MenuDto>(menu);
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
}
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public async Task<MenuDto> UpdateAsync(Guid menuId, MenuUpdateInput input)
public async Task<MenuWithDetailsDto> UpdateAsync(Guid menuId, MenuUpdateInput input)
{
var menu = await MenuRepository.GetAsync(menuId);
@ -73,7 +73,7 @@ namespace Volo.CmsKit.Admin.Menus
await MenuRepository.UpdateAsync(menu);
return ObjectMapper.Map<Menu, MenuDto>(menu);
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
}
[Authorize(CmsKitAdminPermissions.Menus.Delete)]
@ -92,7 +92,7 @@ namespace Volo.CmsKit.Admin.Menus
return ObjectMapper.Map<MenuItem, MenuItemDto>(menuItem);
}
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Create)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public virtual async Task<MenuItemDto> CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input)
{
var menu = await MenuRepository.GetAsync(menuId, includeDetails: true);
@ -109,8 +109,7 @@ namespace Volo.CmsKit.Admin.Menus
input.Order,
input.Target,
input.ElementId,
input.CssClass,
input.RequiredPermissionName);
input.CssClass);
if (input.PageId.HasValue)
{
@ -127,7 +126,7 @@ namespace Volo.CmsKit.Admin.Menus
return ObjectMapper.Map<MenuItem, MenuItemDto>(menuItem);
}
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Update)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public virtual async Task<MenuItemDto> UpdateMenuItemAsync(Guid menuId, Guid menuItemId,
MenuItemUpdateInput input)
{
@ -151,14 +150,13 @@ namespace Volo.CmsKit.Admin.Menus
menuItem.Target = input.Target;
menuItem.ElementId = input.ElementId;
menuItem.CssClass = input.CssClass;
menuItem.RequiredPermissionName = input.RequiredPermissionName;
await MenuRepository.UpdateAsync(menu);
return ObjectMapper.Map<MenuItem, MenuItemDto>(menuItem);
}
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Delete)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public virtual async Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId)
{
var menu = await MenuRepository.GetAsync(menuId, includeDetails: true);
@ -171,7 +169,7 @@ namespace Volo.CmsKit.Admin.Menus
await MenuRepository.UpdateAsync(menu);
}
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Update)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public virtual Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input)
{
return MenuManager.MoveAsync(menuId, menuItemId, input.NewParentId, input.Position);

25
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs

@ -31,13 +31,13 @@ namespace Volo.CmsKit.Admin.Menus
[HttpPost]
[Authorize(CmsKitAdminPermissions.Menus.Create)]
public Task<MenuDto> CreateAsync(MenuCreateInput input)
public Task<MenuWithDetailsDto> CreateAsync(MenuCreateInput input)
{
return MenuAdminAppService.CreateAsync(input);
}
[Route("{menuId}/menu-items/{menuItemId}")]
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Default)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
[HttpGet]
public Task<MenuItemDto> GetMenuItemAsync(Guid menuId, Guid menuItemId)
{
@ -46,7 +46,7 @@ namespace Volo.CmsKit.Admin.Menus
[Route("{menuId}/menu-items")]
[HttpPost]
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Create)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task<MenuItemDto> CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input)
{
return MenuAdminAppService.CreateMenuItemAsync(menuId, input);
@ -62,35 +62,28 @@ namespace Volo.CmsKit.Admin.Menus
[Route("{menuId}/menu-items/{menuItemId}")]
[HttpDelete]
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Delete)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId)
{
return MenuAdminAppService.DeleteMenuItemAsync(menuId, menuItemId);
}
[Route("{menuId}/details")]
[Route("{menuId}")]
[HttpGet]
public Task<MenuWithDetailsDto> GetAsync(Guid menuId)
{
return MenuAdminAppService.GetAsync(menuId);
}
[Route("{menuId}")]
[HttpGet]
public Task<MenuDto> GetSimpleAsync(Guid menuId)
{
return MenuAdminAppService.GetSimpleAsync(menuId);
}
[HttpGet]
public Task<PagedResultDto<MenuDto>> GetListAsync(PagedAndSortedResultRequestDto input)
public Task<PagedResultDto<MenuWithDetailsDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
return MenuAdminAppService.GetListAsync(input);
}
[Route("{menuId}/menu-items/{menuItemId}/move")]
[HttpPut]
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Update)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input)
{
return MenuAdminAppService.MoveMenuItemAsync(menuId, menuItemId, input);
@ -107,14 +100,14 @@ namespace Volo.CmsKit.Admin.Menus
[Route("{menuId}")]
[HttpPut]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task<MenuDto> UpdateAsync(Guid menuId, MenuUpdateInput input)
public Task<MenuWithDetailsDto> UpdateAsync(Guid menuId, MenuUpdateInput input)
{
return MenuAdminAppService.UpdateAsync(menuId, input);
}
[Route("{menuId}/menu-items/{menuItemId}")]
[HttpPut]
[Authorize(CmsKitAdminPermissions.Menus.MenuItems.Update)]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task<MenuItemDto> UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input)
{
return MenuAdminAppService.UpdateMenuItemAsync(menuId, menuItemId, input);

4
modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs

@ -72,7 +72,7 @@ namespace Volo.CmsKit.Admin.Web
options.Conventions.AuthorizeFolder("/CmsKit/Menus", CmsKitAdminPermissions.Menus.Default);
options.Conventions.AuthorizePage("/CmsKit/Menus/CreateModal", CmsKitAdminPermissions.Menus.Create);
options.Conventions.AuthorizePage("/CmsKit/Menus/UpdateModal", CmsKitAdminPermissions.Menus.Update);
options.Conventions.AuthorizeFolder("/CmsKit/Menus/MenuItems", CmsKitAdminPermissions.Menus.MenuItems.Default);
options.Conventions.AuthorizeFolder("/CmsKit/Menus/MenuItems", CmsKitAdminPermissions.Menus.Update);
});
Configure<RazorPagesOptions>(options =>
@ -161,7 +161,7 @@ namespace Volo.CmsKit.Admin.Web
icon: "plus",
name: "CreateMenuItem",
id: "CreateMenuItem",
requiredPolicyName: CmsKitAdminPermissions.Menus.MenuItems.Create
requiredPolicyName: CmsKitAdminPermissions.Menus.Update
);
});
});

29
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml

@ -17,29 +17,40 @@
<abp-modal-header title="@L["New"].Value"></abp-modal-header>
<abp-modal-body>
<div class="form-group">
<label asp-for="ViewModel.PageId"></label>
@* <div class="form-group"> *@
@* <label asp-for="ViewModel.PageId"></label> *@
@* *@
@* <select class="form-control" asp-for="ViewModel.PageId"></select> *@
@* *@
@* <span asp-validation-for="ViewModel.PageId"></span> *@
@* </div> *@
@* *@
@* <abp-button id="page-id-clear-button" button-type="Outline_Danger" text="@L["Clear"]"/> *@
<select class="form-control" asp-for="ViewModel.PageId"></select>
<span asp-validation-for="ViewModel.PageId"></span>
</div>
<abp-tabs tab-style="Tab">
<abp-tab name="url" title="@L["Url"]">
<abp-input asp-for="ViewModel.Url"/>
<abp-button id="page-id-clear-button" button-type="Outline_Danger" text="@L["Clear"]"/>
</abp-tab>
<abp-tab title="@L["Page"]">
<hr/>
<label asp-for="ViewModel.PageId"></label>
<select class="form-control" asp-for="ViewModel.PageId"></select>
</abp-tab>
</abp-tabs>
<hr/>
<abp-input asp-for="ViewModel.MenuId"/>
<abp-input asp-for="ViewModel.ParentId"/>
<abp-input asp-for="ViewModel.DisplayName"/>
<abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Url"/>
<abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Order"/>
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<abp-input asp-for="ViewModel.RequiredPermissionName"/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel | AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>

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

@ -70,8 +70,6 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
}
}
}

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

@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
{
@ -20,11 +21,11 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
[BindProperty(SupportsGet = true)]
public Guid Id { get; set; }
public MenuDto Menu { get; protected set; }
public MenuWithDetailsDto Menu { get; protected set; }
public async Task OnGetAsync()
{
Menu = await MenuAdminAppService.GetSimpleAsync(Id);
Menu = await MenuAdminAppService.GetAsync(Id);
}
}
}

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

@ -18,27 +18,29 @@
<abp-modal-body>
<abp-input asp-for="MenuId"/>
<abp-input asp-for="Id"/>
<div class="form-group">
<label asp-for="ViewModel.PageId"></label>
<select class="form-control" asp-for="ViewModel.PageId"></select>
<abp-tabs tab-style="Tab">
<abp-tab name="url" title="@L["Url"]">
<abp-input asp-for="ViewModel.Url"/>
<span asp-validation-for="ViewModel.PageId"></span>
</div>
</abp-tab>
<abp-tab title="@L["Page"]">
<abp-button id="page-id-clear-button" button-type="Outline_Danger" text="@L["Clear"]"/>
<label asp-for="ViewModel.PageId"></label>
<select class="form-control" asp-for="ViewModel.PageId"></select>
</abp-tab>
</abp-tabs>
<hr/>
<abp-input asp-for="ViewModel.DisplayName"/>
<abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Url"/>
<abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<abp-input asp-for="ViewModel.RequiredPermissionName"/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel | AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>

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

@ -64,8 +64,6 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
public Guid? PageId { get; set; }
}
}

9
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js

@ -7,26 +7,19 @@ $(function () {
var $pageId = $('#ViewModel_PageId');
var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName');
var $pageIdClearButton = $('#page-id-clear-button');
var $pageIdClearButton = $('#url-tab');
initSelectPageId();
$pageIdClearButton.hide();
$pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val());
if ($pageId.val())
{
$pageIdClearButton.show();
if (!$displayName.val()){
$displayName.val($pageId.text());
}
}
else
{
$pageIdClearButton.hide();
}
})
$pageIdClearButton.click(function (){

11
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js

@ -57,7 +57,6 @@ $(function () {
menuTree.selectedMenuItem.Target = null;
menuTree.selectedMenuItem.ElementId = null;
menuTree.selectedMenuItem.CssClass = null;
menuTree.selectedMenuItem.RequiredPermissionName = null;
menuTree.selectedMenuItem.PageId = null;
} else {
menuTree.selectedMenuItem.id = menuItemOnTree.id;
@ -69,7 +68,6 @@ $(function () {
menuTree.selectedMenuItem.Target = menuItemOnTree.original.Target;
menuTree.selectedMenuItem.ElementId = menuItemOnTree.original.ElementId;
menuTree.selectedMenuItem.CssClass = menuItemOnTree.original.CssClass;
menuTree.selectedMenuItem.RequiredPermissionName = menuItemOnTree.original.RequiredPermissionName;
menuTree.selectedMenuItem.PageId = menuItemOnTree.original.PageId;
}
@ -83,7 +81,6 @@ $(function () {
target: menuTree.selectedMenuItem.Target,
elementId: menuTree.selectedMenuItem.ElementId,
cssClass: menuTree.selectedMenuItem.CssClass,
requiredPermissionName: menuTree.selectedMenuItem.RequiredPermissionName,
pageId: menuTree.selectedMenuItem.PageId
});
}
@ -94,7 +91,7 @@ $(function () {
edit: {
label: l('Edit'),
icon: 'fa fa-pencil',
_disabled: !abp.auth.isGranted('CmsKit.Menus.Items.Update'),
_disabled: !abp.auth.isGranted('CmsKit.Menus.Update'),
action: function (data) {
var instance = $.jstree.reference(data.reference);
@ -108,7 +105,7 @@ $(function () {
addSubMenuItem: {
label: l('AddSubMenuItem'),
icon: 'fa fa-plus',
_disabled: !abp.auth.isGranted('CmsKit.Menus.Items.Create'),
_disabled: !abp.auth.isGranted('CmsKit.Menus.Update'),
action: function () {
menuTree.addItem(node.id);
}
@ -117,7 +114,7 @@ $(function () {
'delete': {
label: l('Delete'),
icon: 'fa fa-remove',
_disabled: !abp.auth.isGranted('CmsKit.Menus.Items.Delete'),
_disabled: !abp.auth.isGranted('CmsKit.Menus.Update'),
action: function (data) {
var instance = $.jstree.reference(data.reference);
@ -167,7 +164,6 @@ $(function () {
target: newMenuItem.target,
elementId: newMenuItem.elementId,
cssClass: newMenuItem.cssClass,
requiredPermissionName: newMenuItem.requiredPermissionName,
pageId: newMenuItem.pageId,
state: {
opened: true
@ -199,7 +195,6 @@ $(function () {
target: item.target,
elementId: item.elementId,
cssClass: item.cssClass,
requiredPermissionName: item.requiredPermissionName,
pageId: item.pageId,
text: menuTree.generateTextOnTree(item),
state: {

18
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js

@ -7,33 +7,27 @@ $(function () {
var $pageId = $('#ViewModel_PageId');
var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName');
var $pageIdClearButton = $('#page-id-clear-button');
var $pageIdClearButton = $('#url-tab');
initSelectPageId();
$pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val());
if ($pageId.val())
{
$pageIdClearButton.show();
if (!$displayName.val()){
if ($pageId.val()) {
if (!$displayName.val()) {
$displayName.val($pageId.text());
}
}
else
{
$pageIdClearButton.hide();
}
})
$pageId.trigger('change');
$pageIdClearButton.click(function (){
$pageIdClearButton.click(function () {
$pageId.val('');
$pageId.trigger('change');
});
function initSelectPageId() {
$pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menus/lookup/pages');
$pageId.data('autocompleteDisplayProperty', 'title');

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

@ -27,9 +27,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus
public async Task OnGetAsync()
{
var menu = await MenuAdminAppService.GetSimpleAsync(Id);
var menu = await MenuAdminAppService.GetAsync(Id);
ViewModel = ObjectMapper.Map<MenuDto, UpdateMenuViewModel>(menu);
ViewModel = ObjectMapper.Map<MenuWithDetailsDto, UpdateMenuViewModel>(menu);
}
public async Task<IActionResult> OnPostAsync()
@ -41,7 +41,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus
return NoContent();
}
[AutoMap(typeof(MenuDto))]
[AutoMap(typeof(MenuWithDetailsDto))]
[AutoMap(typeof(MenuUpdateInput), ReverseMap = true)]
public class UpdateMenuViewModel
{

28
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js

@ -24,19 +24,19 @@
items: [
{
text: l('MenuItems'),
visible: abp.auth.isGranted('CmsKit.Menus.Items'),
visible: abp.auth.isGranted('CmsKit.Menus.Update'),
action: function (data) {
location.href = "/Cms/Menus/" + data.record.id + "/menu-items"
}
},
{
text: l('MakeMainMenu'),
visible: function(data){
return abp.auth.isGranted('CmsKit.Menus.Update') && !data.isMainMenu
visible: function (data) {
return abp.auth.isGranted('CmsKit.Menus.Update') && !data.isMainMenu
},
action: function (data) {
menusService
.updateMainMenu(data.record.id, { isMainMenu: true})
.updateMainMenu(data.record.id, {isMainMenu: true})
.then(function () {
dataTable.ajax.reload();
});
@ -44,12 +44,12 @@
},
{
text: l('UnMakeMainMenu'),
visible: function(data){
return abp.auth.isGranted('CmsKit.Menus.Update') && data.isMainMenu
visible: function (data) {
return abp.auth.isGranted('CmsKit.Menus.Update') && data.isMainMenu
},
action: function (data) {
menusService
.updateMainMenu(data.record.id, { isMainMenu: false})
.updateMainMenu(data.record.id, {isMainMenu: false})
.then(function () {
dataTable.ajax.reload();
});
@ -59,7 +59,7 @@
text: l('Edit'),
visible: abp.auth.isGranted('CmsKit.Menus.Update'),
action: function (data) {
updateModal.open({ id: data.record.id });
updateModal.open({id: data.record.id});
}
},
{
@ -83,15 +83,17 @@
title: l("Name"),
orderable: true,
data: "name",
render: function (data, val ,record) {
render: function (data, val, record) {
if (record.isMainMenu) {
return (
'<strong>'
+
data
+
'</strong>'
'<span class="badge badge-pill badge-info ml-1">'
+
l("MainMenu")
+
'</span>'
);
} else {
return data;

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

@ -16,7 +16,6 @@ namespace Volo.CmsKit.Menus
public string Target { get; set; }
public string ElementId { get; set; }
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
public Guid? PageId { get; set; }
}
}

2
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs

@ -10,7 +10,9 @@ namespace Volo.CmsKit.Menus
public class MenuWithDetailsDto : FullAuditedEntityDto<Guid>
{
public string Name { get; set; }
public bool IsMainMenu { get; set; }
public List<MenuItemDto> Items { get; set; }
}
}

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

@ -54,6 +54,7 @@
"LoginToRate": "Login to rate",
"LoginToReact": "Login to react",
"LoginToReply": "Login to reply",
"MainMenu": "Main Menu",
"MakeMainMenu": "Make Main Menu",
"Menu:CMS": "CMS",
"Menus": "Menus",
@ -66,7 +67,7 @@
"NewBlog": "New Blog",
"NewBlogPost": "New Blog Post",
"NewMenu": "New Menu",
"NewMenuItem": "New Menu Item",
"NewMenuItem": "New Root Menu Item",
"NewPage": "New Page",
"NewTag": "New Tag",
"NoMenuItems": "There is no menu item yet!",
@ -119,7 +120,6 @@
"RatingUndoMessage": "Your rating will be undo.",
"Reactions": "Reactions",
"Read": "Read",
"RequiredPermissionName": "Required permission name",
"RepliesToThisComment": "Replies to this comment",
"Reply": "Reply",
"ReplyTo": "Reply to",

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

@ -53,6 +53,7 @@
"LoginToRate": "Oylamak için giriş yapın",
"LoginToReact": "Reaksiyon vermek için giriş yap",
"LoginToReply": "Cevap vermek için giriş yap",
"MainMenu": "Ana Menü",
"MakeMainMenu": "Ana Menü Yap",
"Menu:CMS": "CMS",
"Menus": "Menüler",
@ -66,7 +67,7 @@
"NewBlog": "Yeni Blog",
"NewBlogPost": "Yeni Blog Yazısı",
"NewMenu": "Yeni Menü",
"NewMenuItem": "Yeni Menü Ögesi",
"NewMenuItem": "Yeni Kök Menü Ögesi",
"NewPage": "Yeni Sayfa",
"NewTag": "Yeni Etiket",
"NoMenuItems": "Herhangi bir menü elemanı bulunmuyor.",
@ -109,7 +110,6 @@
"RatingUndoMessage": "Oylamanız geri alınacak.",
"Reactions": "Reaksiyonlar",
"Read": "Oku",
"RequiredPermissionName": "Gerekli yetki adı",
"RepliesToThisComment": "Bu yoruma yapılan yorumlar",
"Reply": "Cevapla",
"ReplyTo": "Cevap",

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
@ -8,5 +9,10 @@ namespace Volo.CmsKit.Menus
public interface IMenuRepository : IBasicRepository<Menu, Guid>
{
Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<Menu>> GetCurrentAndNextMainMenusAsync(
Guid nextMainMenuId,
bool includeDetails = true,
CancellationToken cancellationToken = default);
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs

@ -18,7 +18,7 @@ namespace Volo.CmsKit.Menus
public ICollection<MenuItem> Items { get; protected set; }
public Menu(Guid id, Guid? tenantId, [NotNull] string name) : base(id)
internal Menu(Guid id, Guid? tenantId, [NotNull] string name) : base(id)
{
TenantId = tenantId;
SetName(name);

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs

@ -41,8 +41,6 @@ namespace Volo.CmsKit.Menus
public string CssClass { get; set; }
public string RequiredPermissionName { get; set; }
public Guid? PageId { get; protected set; }
@ -56,8 +54,7 @@ namespace Volo.CmsKit.Menus
int order = 0,
[CanBeNull] string target = null,
[CanBeNull] string elementId = null,
[CanBeNull] string cssClass = null,
[CanBeNull] string requiredPermissionName = null)
[CanBeNull] string cssClass = null)
:base(id)
{
MenuId = menuId;
@ -70,7 +67,6 @@ namespace Volo.CmsKit.Menus
Target = target;
ElementId = elementId;
CssClass = cssClass;
RequiredPermissionName = requiredPermissionName;
}
public void SetDisplayName([NotNull] string displayName)

27
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Services;
using Volo.Abp.Uow;
@ -19,6 +21,29 @@ namespace Volo.CmsKit.Menus
MenuRepository = menuRepository;
}
/// <summary>
/// Creates a new instance of <see cref="Menu"/> without inserting into database.
/// </summary>
/// <param name="tenantId">Tenant Id of Menu.</param>
/// <param name="name">Name of Menu.</param>
/// <returns>Created instance.</returns>
public virtual async Task<Menu> CreateAsync(Guid? tenantId, [NotNull] string name)
{
var menu = new Menu(
GuidGenerator.Create(),
tenantId,
Check.NotNullOrEmpty(name, nameof(name), MenuConsts.MaxNameLength));
var existingMenuCount = await MenuRepository.GetCountAsync();
if (existingMenuCount == 0)
{
menu.IsMainMenu = true;
}
return menu;
}
public virtual void SetPageUrl(MenuItem menuItem, Page page)
{
menuItem.SetPageId(page.Id);
@ -62,7 +87,7 @@ namespace Volo.CmsKit.Menus
public virtual async Task SetMainMenuAsync(Guid menuId)
{
var menus = await MenuRepository.GetListAsync(includeDetails: false);
var menus = await MenuRepository.GetCurrentAndNextMainMenusAsync(menuId ,includeDetails: false);
foreach (var menu in menus)
{

13
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs

@ -0,0 +1,13 @@
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace Volo.CmsKit.Menus
{
public static class EfCoreMenuExtensions
{
public static IQueryable<Menu> IncludeDetails(this IQueryable<Menu> source)
{
return source.Include(i => i.Items);
}
}
}

15
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs

@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@ -17,13 +18,23 @@ namespace Volo.CmsKit.Menus
public override async Task<IQueryable<Menu>> WithDetailsAsync()
{
return (await base.WithDetailsAsync()).Include(i => i.Items);
return (await base.WithDetailsAsync()).IncludeDetails();
}
public async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
public virtual async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync())
.FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken));
}
public virtual async Task<List<Menu>> GetCurrentAndNextMainMenusAsync(
Guid nextMainMenuId,
bool includeDetails = true,
CancellationToken cancellationToken = default)
{
return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync())
.Where(x => x.IsMainMenu || x.Id == nextMainMenuId)
.ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

14
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
@ -17,9 +18,18 @@ namespace Volo.CmsKit.MongoDB.Menus
{
}
public async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
public virtual async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetMongoQueryableAsync()).FirstOrDefaultAsync(x => x.IsMainMenu);
return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken)))
.FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken));
}
public virtual async Task<List<Menu>> GetCurrentAndNextMainMenusAsync(Guid nextMainMenuId, bool includeDetails = true,
CancellationToken cancellationToken = default)
{
return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken)))
.Where(x => x.IsMainMenu || x.Id == nextMainMenuId)
.ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

12
modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs

@ -32,23 +32,22 @@ namespace Volo.CmsKit.Public.Web.Menus
{
foreach (var menuItemDto in mainMenu.Items.Where(x => x.ParentId == null && x.IsActive))
{
var applicationMenuItem = CreateApplicationMenuItem(menuItemDto);
context.Menu.Items.Add(applicationMenuItem);
AddChildItems(menuItemDto, mainMenu.Items);
AddChildItems(menuItemDto, mainMenu.Items, context.Menu);
}
}
}
}
private void AddChildItems(MenuItemDto menuItem, List<MenuItemDto> source, ApplicationMenuItem parent = null)
private void AddChildItems(MenuItemDto menuItem, List<MenuItemDto> source, IHasMenuItems parent = null)
{
var applicationMenuItem = CreateApplicationMenuItem(menuItem);
parent?.Items.Add(applicationMenuItem);
foreach (var item in source.Where(x => x.ParentId == menuItem.Id && x.IsActive))
{
AddChildItems(item, source, applicationMenuItem);
}
parent?.Items.Add(applicationMenuItem);
}
private ApplicationMenuItem CreateApplicationMenuItem(MenuItemDto menuItem)
@ -62,8 +61,7 @@ namespace Volo.CmsKit.Public.Web.Menus
customData: null,
menuItem.Target,
menuItem.ElementId,
menuItem.CssClass,
menuItem.RequiredPermissionName
menuItem.CssClass
);
}
}

10
modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs

@ -37,5 +37,15 @@ namespace Volo.CmsKit.Menus
mainMenu.Items.ShouldNotBeEmpty();
mainMenu.Items.Count.ShouldBe(2);
}
[Fact]
public async Task GetCurrentAndNextMainMenusAsync_ShouldWorkProperly()
{
var menus = await menuRepository.GetCurrentAndNextMainMenusAsync(
testData.Menu_2_Id);
menus.ShouldNotBeEmpty();
menus.Count.ShouldBe(2);
}
}
}
Loading…
Cancel
Save