using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; using Oqtane.Models; using Oqtane.Security; using Oqtane.Services; using Oqtane.Shared; // ReSharper disable UnassignedGetOnlyAutoProperty // ReSharper disable MemberCanBePrivate.Global namespace Oqtane.Themes.Controls { public class ModuleActionsBase : ContainerBase { [Inject]public NavigationManager NavigationManager{get; set;} [Inject]public IPageModuleService PageModuleService{get; set;} protected List Actions; protected override void OnParametersSet() { Actions = GetActions(); } protected virtual List GetActions() { var actionList = new List(); if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, ModuleState.Permissions)) { actionList.Add(new ActionViewModel {Name = "Manage Settings", Action = async (u,m) => Settings(u, m)}); if (ModuleState.ModuleDefinition != null && ModuleState.ModuleDefinition.ServerManagerType != "") { actionList.Add(new ActionViewModel {Name = "Import Content", Action = async(u,m)=> EditUrl(m.ModuleId, "Import")}); actionList.Add(new ActionViewModel {Name = "Export Content", Action = async(u,m)=> EditUrl(m.ModuleId, "Export")}); } actionList.Add(new ActionViewModel {Name = "Delete Module" , Action = async (u,m) => await DeleteModule(u, m)}); actionList.Add(new ActionViewModel {Name = "" }); if (ModuleState.PaneModuleIndex > 0) { actionList.Add(new ActionViewModel {Name = "Move To Top" , Action = async (s,m) => await MoveTop(s, m)}); } if (ModuleState.PaneModuleIndex > 0) { actionList.Add(new ActionViewModel {Name = "Move Up" , Action = async (s,m) => await MoveUp(s, m)}); } if (ModuleState.PaneModuleIndex < (ModuleState.PaneModuleCount - 1)) { actionList.Add(new ActionViewModel {Name = "Move Down", Action = async (s,m) => await MoveDown(s, m) }); } if (ModuleState.PaneModuleIndex < (ModuleState.PaneModuleCount - 1)) { actionList.Add(new ActionViewModel {Name = "Move To Bottom", Action = async (s,m) => await MoveBottom(s, m) }); } foreach (string pane in PageState.Page.Panes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { if (pane != ModuleState.Pane) { actionList.Add(new ActionViewModel {Name = "Move To " + pane + " Pane", Action = async (s,m) => await MoveToPane(s,pane, m) }); } } } return actionList; } protected async Task ModuleAction(ActionViewModel action) { if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, ModuleState.Permissions)) { PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId); string url = NavigateUrl(); if (action.Action!=null) { url = await action.Action(url, pagemodule); } NavigationManager.NavigateTo(url); } } private async Task MoveToPane(string url, string newPane, PageModule pagemodule) { string oldPane = pagemodule.Pane; pagemodule.Pane = newPane; pagemodule.Order = int.MaxValue; // add to bottom of pane await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, oldPane); return url; } private async Task DeleteModule(string url,PageModule pagemodule) { pagemodule.IsDeleted = true; await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); return url; } private string Settings(string url, PageModule pagemodule) { url = EditUrl(pagemodule.ModuleId, "Settings"); return url; } private async Task MoveTop(string s, PageModule pagemodule) { pagemodule.Order = 0; await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); return s; } private async Task MoveBottom(string s, PageModule pagemodule) { pagemodule.Order = int.MaxValue; await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); return s; } private async Task MoveUp(string s, PageModule pagemodule) { pagemodule.Order -= 3; await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); return s; } private async Task MoveDown(string s, PageModule pagemodule) { pagemodule.Order += 3; await PageModuleService.UpdatePageModuleAsync(pagemodule); await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); return s; } public class ActionViewModel { public string Name { set; get; } public Func> Action { set; get; } } } }