CmsKit - Draft design for Menu Appservices

pull/9261/head
enisn 4 years ago
parent bbd4865f4b
commit 623d6e3e10

@ -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<MenuDto, Guid, PagedAndSortedResultRequestDto, MenuCreateInput>
{
}
}

@ -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<MenuItemCreateInput> Items { get; set; }
}
}

@ -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<Guid>
{
public List<MenuItemDto> Items { get; set; }
}
}

@ -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<MenuItemCreateInput> MenuItems { get; set; }
}
}

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Admin.Menus
{
public class MenuItemDto : AuditedEntityDto<Guid>
{
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<MenuItemDto> SubMenuItems { get; set; }
}
}

@ -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";
}
}
}

@ -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<Tag, TagDto>();
CreateMap<MediaDescriptor, MediaDescriptorDto>();
CreateMap<Menu, MenuDto>();
CreateMap<MenuItem, MenuItemDto>();
CreateMap<MenuCreateInput, Menu>()
.Ignore(d => d.Items);
CreateMap<MenuItemCreateInput, MenuItem>();
}
}
}

@ -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<MenuDto> CreateAsync(MenuCreateInput input)
{
var menu = ObjectMapper.Map<MenuCreateInput, Menu>(input);
foreach (var item in input.Items)
{
menu.Items.Add(await MapToMenuItemAsync(item));
}
await MenuRepository.InsertAsync(menu);
return ObjectMapper.Map<Menu, MenuDto>(menu);
}
private async Task<MenuItem> 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<MenuDto> GetAsync(Guid id)
{
throw new NotImplementedException();
}
public Task<PagedResultDto<MenuDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
throw new NotImplementedException();
}
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task<MenuDto> UpdateAsync(Guid id, MenuCreateInput input)
{
throw new NotImplementedException();
}
}
}

@ -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"
}
}

@ -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",

@ -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"
}
}

@ -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"
}
}

@ -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": "删除",

@ -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": "刪除",

Loading…
Cancel
Save