diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index cb9fb716..acf61a87 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -76,8 +76,8 @@ else } @code { - private List _pages; - private List _modules; + private List _pages; + private List _modules; private int _pagePage = 1; private int _pageModule = 1; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; @@ -184,13 +184,6 @@ else try { await PageModuleService.DeletePageModuleAsync(module.PageModuleId); - - // check if there are any remaining module instances in the site - if (!_modules.Exists (item => item.ModuleId == module.ModuleId && item.PageModuleId != module.PageModuleId)) - { - await ModuleService.DeleteModuleAsync(module.ModuleId); - } - await logger.LogInformation("Module Permanently Deleted {Module}", module); await Load(); StateHasChanged(); @@ -210,16 +203,7 @@ else foreach (Module module in _modules.Where(item => item.IsDeleted).ToList()) { await PageModuleService.DeletePageModuleAsync(module.PageModuleId); - - // DeletePageModuleAsync does not update _modules so remove it. - _modules.Remove(module); - // check if there are any remaining module instances in the site - if (!_modules.Exists(item => item.ModuleId == module.ModuleId && item.PageModuleId != module.PageModuleId)) - { - await ModuleService.DeleteModuleAsync(module.ModuleId); - } } - await logger.LogInformation("Modules Permanently Deleted"); await Load(); ModuleInstance.HideProgressIndicator(); diff --git a/Oqtane.Server/Repository/PageModuleRepository.cs b/Oqtane.Server/Repository/PageModuleRepository.cs index 5aa38884..9bc8c0ad 100644 --- a/Oqtane.Server/Repository/PageModuleRepository.cs +++ b/Oqtane.Server/Repository/PageModuleRepository.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Reflection; using Microsoft.EntityFrameworkCore; using Oqtane.Extensions; using Oqtane.Models; @@ -11,16 +12,20 @@ namespace Oqtane.Repository { private TenantDBContext _db; private readonly IModuleDefinitionRepository _moduleDefinitions; + private readonly IModuleRepository _modules; private readonly IPermissionRepository _permissions; + private readonly ISettingRepository _settings; - public PageModuleRepository(TenantDBContext context, IModuleDefinitionRepository moduleDefinitions, IPermissionRepository permissions) + public PageModuleRepository(TenantDBContext context, IModuleDefinitionRepository moduleDefinitions, IModuleRepository modules, IPermissionRepository permissions, ISettingRepository settings) { _db = context; _moduleDefinitions = moduleDefinitions; + _modules = modules; _permissions = permissions; - } + _settings = settings; + } - public IEnumerable GetPageModules(int siteId) + public IEnumerable GetPageModules(int siteId) { var pagemodules = _db.PageModule .Include(item => item.Module) // eager load modules @@ -93,9 +98,18 @@ namespace Oqtane.Repository public void DeletePageModule(int pageModuleId) { - PageModule pageModule = _db.PageModule.Find(pageModuleId); + PageModule pageModule = _db.PageModule.Include(item => item.Module) // eager load modules + .SingleOrDefault(item => item.PageModuleId == pageModuleId); + _settings.DeleteSettings(EntityNames.PageModule, pageModuleId); _db.PageModule.Remove(pageModule); _db.SaveChanges(); + + // check if there are any remaining module instances in the site + var pageModules = GetPageModules(pageModule.Module.SiteId); + if (!pageModules.Any(item => item.ModuleId == pageModule.ModuleId)) + { + _modules.DeleteModule(pageModule.ModuleId); + } } private PageModule GetPageModule(PageModule pageModule, List moduleDefinitions, List modulePermissions) diff --git a/Oqtane.Server/Repository/PageRepository.cs b/Oqtane.Server/Repository/PageRepository.cs index e3e50200..d454bfe0 100644 --- a/Oqtane.Server/Repository/PageRepository.cs +++ b/Oqtane.Server/Repository/PageRepository.cs @@ -10,14 +10,16 @@ namespace Oqtane.Repository public class PageRepository : IPageRepository { private TenantDBContext _db; - private readonly IPermissionRepository _permissions; private readonly IPageModuleRepository _pageModules; + private readonly IPermissionRepository _permissions; + private readonly ISettingRepository _settings; - public PageRepository(TenantDBContext context, IPermissionRepository permissions, IPageModuleRepository pageModules) + public PageRepository(TenantDBContext context, IPageModuleRepository pageModules, IPermissionRepository permissions, ISettingRepository settings) { _db = context; - _permissions = permissions; _pageModules = pageModules; + _permissions = permissions; + _settings = settings; } public IEnumerable GetPages(int siteId) @@ -85,11 +87,14 @@ namespace Oqtane.Repository { Page page = _db.Page.Find(pageId); _permissions.DeletePermissions(page.SiteId, EntityNames.Page, pageId); - IEnumerable pageModules = _db.PageModule.Where(item => item.PageId == pageId).ToList(); + _settings.DeleteSettings(EntityNames.Page, pageId); + // remove page modules for page + var pageModules = _db.PageModule.Where(item => item.PageId == pageId).ToList(); foreach (var pageModule in pageModules) { _pageModules.DeletePageModule(pageModule.PageModuleId); } + // must occur after page modules are deleted because of cascading delete relationship _db.Page.Remove(page); _db.SaveChanges(); }