From 0920b77fef7459f1be1e1e4afe751b05bf41b2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enis=20Necipo=C4=9Flu?= Date: Mon, 14 Jun 2021 10:51:17 +0300 Subject: [PATCH] CmsKit - Refactoring according to review --- ....cs => 20210614072230_Initial.Designer.cs} | 5 +-- ...9_Initial.cs => 20210614072230_Initial.cs} | 1 - .../UnifiedDbContextModelSnapshot.cs | 3 -- .../Admin/Menus/IMenuAdminAppService.cs | 8 ++--- .../Volo/CmsKit/Admin/Menus/MenuDto.cs | 16 ---------- .../CmsKit/Admin/Menus/MenuItemCreateInput.cs | 2 -- .../CmsKit/Admin/Menus/MenuItemUpdateInput.cs | 2 -- ...CmsKitAdminPermissionDefinitionProvider.cs | 10 ------ .../Permissions/CmsKitAdminPermissions.cs | 8 ----- ...CmsKitAdminApplicationAutoMapperProfile.cs | 1 - .../CmsKit/Admin/Menus/MenuAdminAppService.cs | 32 +++++++++---------- .../CmsKit/Admin/Menus/MenuAdminController.cs | 25 ++++++--------- .../CmsKitAdminWebModule.cs | 4 +-- .../CmsKit/Menus/MenuItems/CreateModal.cshtml | 29 +++++++++++------ .../Menus/MenuItems/CreateModal.cshtml.cs | 2 -- .../CmsKit/Menus/MenuItems/Index.cshtml.cs | 5 +-- .../CmsKit/Menus/MenuItems/UpdateModal.cshtml | 20 ++++++------ .../Menus/MenuItems/UpdateModal.cshtml.cs | 2 -- .../CmsKit/Menus/MenuItems/createModal.js | 9 +----- .../Pages/CmsKit/Menus/MenuItems/index.js | 11 ++----- .../CmsKit/Menus/MenuItems/updateModal.js | 18 ++++------- .../Pages/CmsKit/Menus/UpdateModal.cshtml.cs | 6 ++-- .../Pages/CmsKit/Menus/index.js | 28 ++++++++-------- .../Volo/CmsKit/Menus/MenuItemDto.cs | 1 - .../Volo/CmsKit/Menus/MenuWithDetailsDto.cs | 2 ++ .../CmsKit/Localization/Resources/en.json | 4 +-- .../CmsKit/Localization/Resources/tr.json | 4 +-- .../Volo/CmsKit/Menus/IMenuRepository.cs | 6 ++++ .../Volo/CmsKit/Menus/Menu.cs | 2 +- .../Volo/CmsKit/Menus/MenuItem.cs | 6 +--- .../Volo/CmsKit/Menus/MenuManager.cs | 27 +++++++++++++++- .../Volo/CmsKit/Menus/EfCoreMenuExtensions.cs | 13 ++++++++ .../Volo/CmsKit/Menus/EfCoreMenuRepository.cs | 15 +++++++-- .../MongoDB/Menus/MongoMenuRepository.cs | 14 ++++++-- .../Menus/CmsKitPublicMenuContributor.cs | 12 +++---- .../Menus/MenuRepository_Test.cs | 10 ++++++ 36 files changed, 185 insertions(+), 178 deletions(-) rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20210609132819_Initial.Designer.cs => 20210614072230_Initial.Designer.cs} (99%) rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20210609132819_Initial.cs => 20210614072230_Initial.cs} (99%) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs similarity index 99% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs index 3b2029f349..df5ded83e3 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs +++ b/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("ParentId") .HasColumnType("uniqueidentifier"); - b.Property("RequiredPermissionName") - .HasColumnType("nvarchar(max)"); - b.Property("Target") .HasColumnType("nvarchar(max)"); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs similarity index 99% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs index 8c9cca8a66..55ba6e859f 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs @@ -765,7 +765,6 @@ namespace Volo.CmsKit.Migrations Target = table.Column(type: "nvarchar(max)", nullable: true), ElementId = table.Column(type: "nvarchar(max)", nullable: true), CssClass = table.Column(type: "nvarchar(max)", nullable: true), - RequiredPermissionName = table.Column(type: "nvarchar(max)", nullable: true), PageId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 51f7abf3b7..7fa1014d5b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1568,9 +1568,6 @@ namespace Volo.CmsKit.Migrations b.Property("ParentId") .HasColumnType("uniqueidentifier"); - b.Property("RequiredPermissionName") - .HasColumnType("nvarchar(max)"); - b.Property("Target") .HasColumnType("nvarchar(max)"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs index be56196e46..cd091fbec5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs +++ b/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> GetListAsync(PagedAndSortedResultRequestDto input); + Task> GetListAsync(PagedAndSortedResultRequestDto input); Task GetAsync(Guid id); - Task GetSimpleAsync(Guid id); + Task CreateAsync(MenuCreateInput input); - Task CreateAsync(MenuCreateInput input); - - Task UpdateAsync(Guid menuId, MenuUpdateInput input); + Task UpdateAsync(Guid menuId, MenuUpdateInput input); Task DeleteAsync(Guid menuId); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs deleted file mode 100644 index 9852ebe83e..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs +++ /dev/null @@ -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 - { - public string Name { get; set; } - public bool IsMainMenu { get; set; } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs index 8092eec631..6ee0fdd4eb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs +++ b/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; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs index f78d4b27af..8450d79b34 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs +++ b/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; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs index 27301551a0..91ab3310a2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs +++ b/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) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index 1bf1f5274f..0ecc97362f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/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"; - } } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 44de42e0ed..c4e29cf143 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -43,7 +43,6 @@ namespace Volo.CmsKit.Admin CreateMap(); - CreateMap(); CreateMap(); CreateMap(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs index c1b9c5f018..582a8928de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs +++ b/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> GetListAsync(PagedAndSortedResultRequestDto input) + public async Task> GetListAsync(PagedAndSortedResultRequestDto input) { var menus = await MenuRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, input.Sorting); - return new PagedResultDto( + return new PagedResultDto( await MenuRepository.GetCountAsync(), - ObjectMapper.Map, List>(menus) + ObjectMapper.Map, List>(menus) ); } @@ -48,24 +48,24 @@ namespace Volo.CmsKit.Admin.Menus return ObjectMapper.Map(menu); } - public async Task GetSimpleAsync(Guid id) + public async Task GetSimpleAsync(Guid id) { var menu = await MenuRepository.GetAsync(id, includeDetails: false); - return ObjectMapper.Map(menu); + return ObjectMapper.Map(menu); } [Authorize(CmsKitAdminPermissions.Menus.Create)] - public async Task CreateAsync(MenuCreateInput input) + public async Task 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); + return ObjectMapper.Map(menu); } [Authorize(CmsKitAdminPermissions.Menus.Update)] - public async Task UpdateAsync(Guid menuId, MenuUpdateInput input) + public async Task 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); + return ObjectMapper.Map(menu); } [Authorize(CmsKitAdminPermissions.Menus.Delete)] @@ -92,7 +92,7 @@ namespace Volo.CmsKit.Admin.Menus return ObjectMapper.Map(menuItem); } - [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Create)] + [Authorize(CmsKitAdminPermissions.Menus.Update)] public virtual async Task 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); } - [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Update)] + [Authorize(CmsKitAdminPermissions.Menus.Update)] public virtual async Task 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); } - [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); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs index 7392369464..4b73521f86 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs +++ b/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 CreateAsync(MenuCreateInput input) + public Task CreateAsync(MenuCreateInput input) { return MenuAdminAppService.CreateAsync(input); } [Route("{menuId}/menu-items/{menuItemId}")] - [Authorize(CmsKitAdminPermissions.Menus.MenuItems.Default)] + [Authorize(CmsKitAdminPermissions.Menus.Update)] [HttpGet] public Task 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 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 GetAsync(Guid menuId) { return MenuAdminAppService.GetAsync(menuId); } - [Route("{menuId}")] [HttpGet] - public Task GetSimpleAsync(Guid menuId) - { - return MenuAdminAppService.GetSimpleAsync(menuId); - } - - [HttpGet] - public Task> GetListAsync(PagedAndSortedResultRequestDto input) + public Task> 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 UpdateAsync(Guid menuId, MenuUpdateInput input) + public Task 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 UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input) { return MenuAdminAppService.UpdateMenuItemAsync(menuId, menuItemId, input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs index 9f01965ffd..920e35f414 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs +++ b/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(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 ); }); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 87a6c10d76..2dbc67ba8b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -17,29 +17,40 @@ -
- + @*
*@ + @* *@ + @* *@ + @* *@ + @* *@ + @* *@ + @*
*@ + @* *@ + @* *@ - - -
+ + + - + + -
+ + + +
+
+
- -
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs index 25dd62e139..15d80ecf65 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs +++ b/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; } - } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs index 8938719323..d515b8ac5d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs +++ b/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); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index aadbc88851..8709c0a481 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -18,27 +18,29 @@ - -
- - + + + - -
+ + - + + + + + +
- -
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index 1ab02f429d..cab93b3de9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/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; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js index ae4e1db8c6..a0db03cf52 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js +++ b/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 (){ diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js index 732db91404..fdfc717167 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js +++ b/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: { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js index 6005387a6f..6cbe242123 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js +++ b/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'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs index addad60b15..8310e44e1d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs +++ b/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(menu); + ViewModel = ObjectMapper.Map(menu); } public async Task 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 { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js index adcb18b812..7b4e6d7556 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js +++ b/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 ( - '' - + data + - '' + '' + + + l("MainMenu") + + + '' ); } else { return data; diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs index c000b6760e..c6c054e5d7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs +++ b/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; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs index bd15a68d61..85cc6b431f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs +++ b/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 { public string Name { get; set; } + public bool IsMainMenu { get; set; } + public List Items { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 8952949cea..0dd924289b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -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", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 1c6851ffff..1177ef8983 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -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", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs index 25ed98b3f1..ec8efa5d80 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs +++ b/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 { Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default); + + Task> GetCurrentAndNextMainMenusAsync( + Guid nextMainMenuId, + bool includeDetails = true, + CancellationToken cancellationToken = default); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs index e5d6479869..ec91bc04f6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs @@ -18,7 +18,7 @@ namespace Volo.CmsKit.Menus public ICollection 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); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index f54316aa7f..f8bb18e923 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/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) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs index 19a7c54fd5..7016afda49 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs +++ b/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; } + /// + /// Creates a new instance of without inserting into database. + /// + /// Tenant Id of Menu. + /// Name of Menu. + /// Created instance. + public virtual async Task 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) { diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs new file mode 100644 index 0000000000..bed9516c8f --- /dev/null +++ b/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 IncludeDetails(this IQueryable source) + { + return source.Include(i => i.Items); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs index c4fc6e2b4c..5902c40a8d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs +++ b/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> WithDetailsAsync() { - return (await base.WithDetailsAsync()).Include(i => i.Items); + return (await base.WithDetailsAsync()).IncludeDetails(); } - public async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) { return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync()) .FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken)); } + + public virtual async Task> 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)); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs index f7cc583658..dd9f26a694 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs +++ b/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 FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task 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> 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)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs index b50d50d895..64f7a581c0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs +++ b/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 source, ApplicationMenuItem parent = null) + private void AddChildItems(MenuItemDto menuItem, List 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 ); } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs index 4ec0fc8052..d4f428b940 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs +++ b/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); + } } } \ No newline at end of file