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 new file mode 100644 index 0000000000..0dd8752633 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Admin.Menus +{ + public interface IMenuAdminAppService : ICrudAppService + { + + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuCreateInput.cs new file mode 100644 index 0000000000..e47d30149b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuCreateInput.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Admin.Menus +{ + public class MenuCreateInput + { + public List Items { get; set; } + } +} 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 new file mode 100644 index 0000000000..48fbf3099b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs @@ -0,0 +1,14 @@ +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 +{ + public class MenuDto : FullAuditedEntityDto + { + public List Items { 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 new file mode 100644 index 0000000000..ee50557cfb --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Admin.Menus +{ + public class MenuItemCreateInput + { + public Guid MenuId { get; set; } + + public Guid? ParentMenuId { get; set; } + + [Required] + public string DisplayName { get; set; } + + public bool IsActive { get; set; } + + [Required] + public string Url { get; set; } + + public string Icon { get; set; } + + public int Order { get; set; } + + 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; } + + public List MenuItems { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemDto.cs new file mode 100644 index 0000000000..302f74f951 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemDto.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Menus +{ + public class MenuItemDto : AuditedEntityDto + { + public Guid MenuId { get; set; } + public Guid? ParentMenuId { get; set; } + public string DisplayName { get; set; } + public bool IsActive { get; set; } + public string Url { get; set; } + public string Icon { get; set; } + public int Order { get; set; } + public string Target { get; set; } + public string ElementId { get; set; } + public string CssClass { get; set; } + public string RequiredPermissionName { get; set; } + + public List SubMenuItems { get; set; } + } +} 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 c524e7e6b5..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 @@ -52,5 +52,13 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } + + public static class Menus + { + public const string Default = GroupName + ".Menus"; + 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 748d3a1cfb..bd87f8f2cf 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 @@ -11,6 +11,8 @@ using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Tags; using Volo.CmsKit.Users; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Admin.Menus; namespace Volo.CmsKit.Admin { @@ -39,6 +41,14 @@ namespace Volo.CmsKit.Admin CreateMap(); CreateMap(); + + CreateMap(); + CreateMap(); + + CreateMap() + .Ignore(d => d.Items); + + 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 new file mode 100644 index 0000000000..42d08b85d2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs @@ -0,0 +1,101 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices.ComTypes; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Pages; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + [Authorize(CmsKitAdminPermissions.Menus.Default)] + public class MenuAdminAppService : CmsKitAdminAppServiceBase, IMenuAdminAppService + { + protected MenuManager MenuManager { get; } + protected IMenuRepository MenuRepository { get; } + protected IPageRepository PageRepository { get; } + + public MenuAdminAppService( + MenuManager menuManager, + IMenuRepository menuRepository, + IPageRepository pageRepository) + { + MenuManager = menuManager; + MenuRepository = menuRepository; + PageRepository = pageRepository; + } + + + [Authorize(CmsKitAdminPermissions.Menus.Create)] + public async Task CreateAsync(MenuCreateInput input) + { + var menu = ObjectMapper.Map(input); + + foreach (var item in input.Items) + { + menu.Items.Add(await MapToMenuItemAsync(item)); + } + + await MenuRepository.InsertAsync(menu); + + return ObjectMapper.Map(menu); + } + + private async Task MapToMenuItemAsync(MenuItemCreateInput dto) + { + var menuItem = new MenuItem( + GuidGenerator.Create(), + dto.MenuId, + dto.DisplayName, + dto.Url, + dto.IsActive, + dto.ParentMenuId) + + menuItem.SetDisplayName(dto.DisplayName); + menuItem.SetUrl(dto.Url); + + if (dto.PageId.HasValue) + { + var page = await PageRepository.GetAsync(dto.PageId.Value, includeDetails: false); + + MenuManager.SetPageUrl(menuItem, page); + } + + foreach (var item in dto.MenuItems) + { + menuItem.MenuItems.Add(await MapToMenuItemAsync(item)); + } + + return menuItem; + } + + [Authorize(CmsKitAdminPermissions.Menus.Delete)] + public Task DeleteAsync(Guid id) + { + throw new NotImplementedException(); + } + + public Task GetAsync(Guid id) + { + throw new NotImplementedException(); + } + + public Task> GetListAsync(PagedAndSortedResultRequestDto input) + { + throw new NotImplementedException(); + } + + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public Task UpdateAsync(Guid id, MenuCreateInput input) + { + throw new NotImplementedException(); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json index e5d9e294dc..26c409d9f0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json @@ -1,22 +1,26 @@ { "culture": "de-DE", "texts": { - "PickYourReaction": "Wählen Sie Ihre Reaktion", - "YourComment": "Ihr Kommentar", - "YourReply": "Ihre Antwort", + "CommentAuthorizationExceptionMessage": "Diese Kommentare dürfen nicht öffentlich angezeigt werden.", "Comments": "Kommentare", - "Send": "Senden", "Delete": "Löschen", - "Reply": "Antworten", - "Update": "Aktualisieren", "Edit": "Bearbeiten", "LoginToAddComment": "Melden Sie sich an, um zu Kommentieren", + "LoginToRate": "Melden Sie sich an, um zu Bewerten", "LoginToReply": "Melden Sie sich an, um zu Antworten", "MessageDeletionConfirmationMessage": "Dieser Kommentar wird vollständig gelöscht.", - "CommentAuthorizationExceptionMessage": "Diese Kommentare dürfen nicht öffentlich angezeigt werden.", - "Undo": "Rüchkängig machen", + "Permission:Menus": "Menüverwaltung", + "Permission:Menus.Create": "Erstellen", + "Permission:Menus.Delete": "Löschen", + "Permission:Menus.Update": "Aktualisieren", + "PickYourReaction": "Wählen Sie Ihre Reaktion", "RatingUndoMessage": "Ihre Bewertung wird rückgängig gemacht.", - "LoginToRate": "Melden Sie sich an, um zu Bewerten", - "Star": "Stern" + "Reply": "Antworten", + "Send": "Senden", + "Star": "Stern", + "Undo": "Rüchkängig machen", + "Update": "Aktualisieren", + "YourComment": "Ihr Kommentar", + "YourReply": "Ihre Antwort" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json index 8ffa807e9b..f6256d81ba 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json @@ -14,6 +14,10 @@ "Permission:TagManagement.Create": "Create Tag", "Permission:TagManagement.Delete": "Delete Tag", "Permission:TagManagement.Update": "Update Tag", + "Permission:Menus": "Menu Management", + "Permission:Menus.Create": "Create", + "Permission:Menus.Delete": "Delete", + "Permission:Menus.Update": "Update", "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undone.", "Reply": "Reply", 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 02ab4d1415..e0085d0233 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 @@ -45,6 +45,7 @@ "Features": "Features", "GenericDeletionConfirmationMessage": "Are you sure to delete '{0}'?", "LastModification": "Last Modification", + "LastModificationTime": "Last Modification Time", "LoginToAddComment": "Login to add comment", "LoginToRate": "Login to rate", "LoginToReact": "Login to react", @@ -52,9 +53,9 @@ "Menu:CMS": "CMS", "Message": "Message", "MessageDeletionConfirmationMessage": "This comment will be deleted completely.", - "NewPage": "New Page", "NewBlog": "New Blog", "NewBlogPost": "New Blog Post", + "NewPage": "New Page", "NewTag": "New Tag", "OK": "OK", "PageDeletionConfirmationMessage": "Are you sure to delete this page?", @@ -79,6 +80,10 @@ "Permission:MediaDescriptorManagement": "Media Management", "Permission:MediaDescriptorManagement:Create": "Create", "Permission:MediaDescriptorManagement:Delete": "Delete", + "Permission:Menus": "Menu Management", + "Permission:Menus.Create": "Create", + "Permission:Menus.Delete": "Delete", + "Permission:Menus.Update": "Update", "Permission:PageManagement": "Page Management", "Permission:PageManagement:Create": "Create", "Permission:PageManagement:Delete": "Delete", @@ -129,7 +134,6 @@ "YourEmailAddress": "Your e-mail address", "YourFullName": "Your full name", "YourMessage": "Your Message", - "YourReply": "Your reply", - "LastModificationTime": "Last Modification Time" + "YourReply": "Your reply" } } 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 5ccb216598..b672710d8f 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 @@ -9,9 +9,6 @@ "Blogs": "Bloglar", "ChoosePreference": "Tercih seçiniz...", "Cms": "CMS", - "Content": "İçerik", - "Script": "Script Kodları", - "Style": "Stil Kodları", "CmsKit.Comments": "Yorumlar", "CmsKit.Ratings": "Puanlama", "CmsKit.Reactions": "Tepkiler", @@ -28,6 +25,7 @@ "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "CommentDeletionConfirmationMessage": "Bu yorum ve buna yapılan tüm yorumlan silinecektir!", "Comments": "Yorumlar", + "Content": "İçerik", "ContentDeletionConfirmationMessage": "Bu içeriği gerçekten silmek istediğinize emin misiniz?", "Contents": "İçerikler", "CoverImage": "Kapak Resmi", @@ -46,6 +44,7 @@ "Features": "Özellikler", "GenericDeletionConfirmationMessage": "'{0}' kaydını silmek istediğinize emin misiniz?", "LastModification": "Son Güncellenme", + "LastModificationTime": "Son Güncelleme Zamanı", "LoginToAddComment": "Yorum yapmak için giriş yap", "LoginToRate": "Oylamak için giriş yapın", "LoginToReact": "Reaksiyon vermek için giriş yap", @@ -54,9 +53,9 @@ "Message": "Mesaj", "MessageDeletionConfirmationMessage": "Bu yorum tamamen silinecektir", "Name": "Ad", - "NewPage": "Yeni Sayfa", "NewBlog": "Yeni Blog", "NewBlogPost": "Yeni Blog Yazısı", + "NewPage": "Yeni Sayfa", "NewTag": "Yeni Etiket", "OK": "Tamam", "PageDeletionConfirmationMessage": "Bu sayfayı silmek istediğinize emin misiniz?", @@ -75,6 +74,10 @@ "Permission:Contents.Create": "İçerik Oluşturma", "Permission:Contents.Delete": "İçerik Silme", "Permission:Contents.Update": "İçerik Güncelleme", + "Permission:Menus": "Menü Yönetimi", + "Permission:Menus.Create": "Menü Oluşturma", + "Permission:Menus.Delete": "Menü Silme", + "Permission:Menus.Update": "Menü Güncelleme", "Permission:TagManagement": "Etiket Yönetimi", "Permission:TagManagement.Create": "Etiket Oluşturma", "Permission:TagManagement.Delete": "Etiket Silme", @@ -89,6 +92,7 @@ "ReplyTo": "Cevap", "SamplePageMessage": "Pro modulünden örnek bir sayfa", "SaveChanges": "Değişiklikleri Kaydet", + "Script": "Script Kodları", "SelectAll": "Hepsini seç", "Send": "Gönder", "SendMessage": "Mesajı Gönder", @@ -98,6 +102,7 @@ "SourceUrl": "Kaynak Link", "Star": "Yıldız", "StartDate": "Başlangıç Tarihi", + "Style": "Stil Kodları", "Subject": "Konu", "SubjectPlaceholder": "Lütfen bir konu yazınız", "Submit": "Kaydet", @@ -120,7 +125,6 @@ "YourEmailAddress": "Email adresiniz", "YourFullName": "Tam adınız", "YourMessage": "Mesajınız", - "YourReply": "Cevabınız", - "LastModificationTime": "Son Güncelleme Zamanı" + "YourReply": "Cevabınız" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json index 82cae7b19c..3773d14811 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json @@ -72,6 +72,10 @@ "Permission:MediaDescriptorManagement": "媒体管理", "Permission:MediaDescriptorManagement:Create": "创建", "Permission:MediaDescriptorManagement:Delete": "删除", + "Permission:Menus": "Menu Management", + "Permission:Menus.Create": "Create", + "Permission:Menus.Delete": "Delete", + "Permission:Menus.Update": "Update", "Permission:PageManagement": "页面管理", "Permission:PageManagement:Create": "创建", "Permission:PageManagement:Delete": "删除", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json index 17517c773d..76af220593 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json @@ -73,6 +73,10 @@ "Permission:MediaDescriptorManagement": "媒體管理", "Permission:MediaDescriptorManagement:Create": "創建", "Permission:MediaDescriptorManagement:Delete": "刪除", + "Permission:Menus": "Menu Management", + "Permission:Menus.Create": "Create", + "Permission:Menus.Delete": "Delete", + "Permission:Menus.Update": "Update", "Permission:PageManagement": "頁面管理", "Permission:PageManagement:Create": "創建", "Permission:PageManagement:Delete": "刪除",