diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index a63a2895..ce2ca569 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -2,43 +2,100 @@ @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageModuleService PageModuleService +@inject IModuleService ModuleService @inject IPageService PageService -@*Add TabControl with Pages and Modules tabs*@ -

Pages

-@if (pageModules.Count == 0) -{ -

No deleted pages

-} -else -{ - -
- Name - Deletion audit -   -   -
- - @context.Name - @context.DeletedBy - @context.DeletedOn - - - -
-} + + + @if (pages.Count == 0) + { +
+

No deleted pages

+ } + else + { + +
+ Name + Deletion Audit +   +   +
+ + @context.Name + @context.DeletedBy - @context.DeletedOn + + + +
+ } +
+ + @if (pageModules.Count == 0) + { +
+

No deleted modules in pages

+ } + else + { + +
+ Page Name + Control Title + Deletion Audit +   +   +
+ + @PageState.Pages.Find(item => item.PageId == context.PageId).Name + @context.Title + @context.DeletedBy - @context.DeletedOn + + + +
+ } +
+
@code { public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } - List pageModules = new List(); + bool loadentities { get; set; } + + List pages { get; set; } + List pageModules { get; set; } + + protected override async Task OnInitializedAsync() + { + pages = new List(); + pageModules = new List(); + + loadentities = true; + + await LoadEntities(); + } protected override void OnParametersSet() { - pageModules = PageState.Pages.Where(item => item.IsDeleted).ToList(); + pages = PageState.Pages.Where(item => item.IsDeleted).ToList(); } - private async Task Restore(Page Page) + private async Task LoadEntities() + { + if (loadentities) + { + pageModules.Clear(); + foreach (var module in PageState.Modules.Where(item => item.IsDeleted)) + { + var pageModule = await PageModuleService.GetPageModuleAsync(module.PageModuleId); + pageModules.Add(pageModule); + } + loadentities = false; + } + } + + private async Task RestorePage(Page Page) { try { @@ -52,11 +109,52 @@ else } } - private async Task Delete(int PageId) + private async Task DeletePage(int PageId) { try { + var deletedPageModules = PageState.Modules.Where(item => item.PageId == PageId); await PageService.DeletePageAsync(PageId); + foreach (var module in deletedPageModules) + { + await ModuleService.DeleteModuleAsync(module.ModuleId); + } + NavigationManager.NavigateTo(NavigateUrl("admin/recyclebin", Reload.Site)); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + + private async Task RestorePageModule(PageModule PageModule) + { + try + { + PageModule.IsDeleted = false; + await PageModuleService.UpdatePageModuleAsync(PageModule); + loadentities = true; + await LoadEntities(); + NavigationManager.NavigateTo(NavigateUrl("admin/recyclebin", Reload.Site)); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + + private async Task DeletePageModule(int PageModuleId, int ModuleId) + { + try + { + await PageModuleService.DeletePageModuleAsync(PageModuleId); + if (PageState.Modules.Count(item => item.ModuleId == ModuleId) == 1) + { + await ModuleService.DeleteModuleAsync(ModuleId); + } + PageState.Modules.RemoveAt(PageState.Modules.FindIndex(item => item.ModuleId == ModuleId)); + loadentities = true; + await LoadEntities(); NavigationManager.NavigateTo(NavigateUrl("admin/recyclebin", Reload.Site)); } catch (Exception ex) diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 8bef98e7..d27c38ad 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -149,7 +149,7 @@ string moduletype = "new"; List categories = new List(); List moduledefinitions; - List pages; + List pages = new List(); string pageid = ""; string moduleid = "-"; List modules = new List(); @@ -176,7 +176,7 @@ if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) { - pages = new List(); + pages?.Clear(); foreach (ModuleDefinition moduledefinition in PageState.ModuleDefinitions) { @@ -224,6 +224,7 @@ private void PageChanged(ChangeEventArgs e) { pageid = (string)e.Value; + modules?.Clear(); if (pageid != "") { foreach (Module module in PageState.Modules.Where(item => item.PageId == int.Parse(pageid) && !item.IsDeleted)) diff --git a/Oqtane.Server/Repository/PageRepository.cs b/Oqtane.Server/Repository/PageRepository.cs index 78a21e9e..51b6510a 100644 --- a/Oqtane.Server/Repository/PageRepository.cs +++ b/Oqtane.Server/Repository/PageRepository.cs @@ -10,14 +10,12 @@ namespace Oqtane.Repository private TenantDBContext db; private readonly IPermissionRepository Permissions; private readonly IPageModuleRepository PageModules; - private readonly IModuleRepository ModuleRepository; - public PageRepository(TenantDBContext context, IPermissionRepository Permissions, IPageModuleRepository PageModules, IModuleRepository ModuleRepository) + public PageRepository(TenantDBContext context, IPermissionRepository Permissions, IPageModuleRepository PageModules) { db = context; this.Permissions = Permissions; this.PageModules = PageModules; - this.ModuleRepository = ModuleRepository; } public IEnumerable GetPages() diff --git a/Oqtane.Shared/Models/Module.cs b/Oqtane.Shared/Models/Module.cs index 09393b0a..259f3ee0 100644 --- a/Oqtane.Shared/Models/Module.cs +++ b/Oqtane.Shared/Models/Module.cs @@ -15,7 +15,11 @@ namespace Oqtane.Models public DateTime CreatedOn { get; set; } public string ModifiedBy { get; set; } public DateTime ModifiedOn { get; set; } - + + [NotMapped] + public string DeletedBy { get; set; } + [NotMapped] + public DateTime? DeletedOn { get; set; } [NotMapped] public bool IsDeleted { get; set; }