Start Date and Expiry Date for Module instances and Pages #3538
This is complete excluding Reporting and Notifications which can be added at a later date. I just really wanted to get the schema and the functionality into place.
This commit is contained in:
		| @ -75,6 +75,8 @@ namespace Oqtane.Controllers | ||||
|                         module.Pane = pagemodule.Pane; | ||||
|                         module.Order = pagemodule.Order; | ||||
|                         module.ContainerType = pagemodule.ContainerType; | ||||
|                         module.EffectiveDate = pagemodule.EffectiveDate; | ||||
|                         module.ExpiryDate = pagemodule.ExpiryDate; | ||||
|  | ||||
|                         module.ModuleDefinition = _moduleDefinitions.FilterModuleDefinition(moduledefinitions.Find(item => item.ModuleDefinitionName == module.ModuleDefinitionName)); | ||||
|  | ||||
| @ -169,7 +171,7 @@ namespace Oqtane.Controllers | ||||
|                         { | ||||
|                             if (!pageModules.Exists(item => item.ModuleId == module.ModuleId && item.PageId == page.PageId) && !page.Path.StartsWith("admin/")) | ||||
|                             { | ||||
|                                 _pageModules.AddPageModule(new PageModule { PageId = page.PageId, ModuleId = pageModule.ModuleId, Title = pageModule.Title, Pane = pageModule.Pane, Order = pageModule.Order, ContainerType = pageModule.ContainerType }); | ||||
|                                 _pageModules.AddPageModule(new PageModule { PageId = page.PageId, ModuleId = pageModule.ModuleId, Title = pageModule.Title, Pane = pageModule.Pane, Order = pageModule.Order, ContainerType = pageModule.ContainerType, EffectiveDate = pageModule.EffectiveDate, ExpiryDate = pageModule.ExpiryDate }); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
| @ -13,6 +13,8 @@ using System.Globalization; | ||||
| using Microsoft.Extensions.Caching.Memory; | ||||
| using Oqtane.Extensions; | ||||
| using System; | ||||
| using Oqtane.UI; | ||||
| using Microsoft.EntityFrameworkCore.Metadata.Internal; | ||||
|  | ||||
| namespace Oqtane.Controllers | ||||
| { | ||||
| @ -92,59 +94,71 @@ namespace Oqtane.Controllers | ||||
|                 site.UploadableFiles = site.Settings.ContainsKey("UploadableFiles") && !string.IsNullOrEmpty(site.Settings["UploadableFiles"]) | ||||
|                 ? site.Settings["UploadableFiles"] : Constants.UploadableFiles; | ||||
|  | ||||
|                 var modelsUser = _userPermissions.GetUser(User); | ||||
|                 var isAdminOrHost = modelsUser.Roles.Contains(RoleNames.Host) || modelsUser.Roles.Contains(RoleNames.Admin); | ||||
|  | ||||
|                 // pages | ||||
|                 List<Setting> settings = _settings.GetSettings(EntityNames.Page).ToList(); | ||||
|                 site.Pages = new List<Page>(); | ||||
|                 foreach (Page page in _pages.GetPages(site.SiteId)) | ||||
|                 foreach (Page page in _pages.GetPages(site.SiteId).Where(p => !p.IsDeleted && _userPermissions.IsAuthorized(User, PermissionNames.View, p.PermissionList))) | ||||
|                 { | ||||
|                     if (!page.IsDeleted && _userPermissions.IsAuthorized(User, PermissionNames.View, page.PermissionList)) | ||||
|                     if (isAdminOrHost || IsPageModuleVisible(page.EffectiveDate, page.ExpiryDate)) | ||||
|                     { | ||||
|                         page.Settings = settings.Where(item => item.EntityId == page.PageId) | ||||
|                         page.Settings = settings | ||||
|                             .Where(item => item.EntityId == page.PageId) | ||||
|                             .Where(item => !item.IsPrivate || _userPermissions.IsAuthorized(User, PermissionNames.Edit, page.PermissionList)) | ||||
|                             .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); | ||||
|  | ||||
|                         site.Pages.Add(page); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 site.Pages = GetPagesHierarchy(site.Pages); | ||||
|  | ||||
|                 // modules | ||||
|                 List<ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(site.SiteId).ToList(); | ||||
|                 settings = _settings.GetSettings(EntityNames.Module).ToList(); | ||||
|                 site.Modules = new List<Module>(); | ||||
|                 foreach (PageModule pagemodule in _pageModules.GetPageModules(site.SiteId)) | ||||
|                 foreach (PageModule pagemodule in _pageModules.GetPageModules(site.SiteId).Where(pm => !pm.IsDeleted && _userPermissions.IsAuthorized(User, PermissionNames.View, pm.Module.PermissionList))) | ||||
|                 { | ||||
|                     if (!pagemodule.IsDeleted && _userPermissions.IsAuthorized(User, PermissionNames.View, pagemodule.Module.PermissionList)) | ||||
|                     if (isAdminOrHost || IsPageModuleVisible(pagemodule.EffectiveDate, pagemodule.ExpiryDate)) | ||||
|                     { | ||||
|                         Module module = new Module(); | ||||
|                         module.SiteId = pagemodule.Module.SiteId; | ||||
|                         module.ModuleDefinitionName = pagemodule.Module.ModuleDefinitionName; | ||||
|                         module.AllPages = pagemodule.Module.AllPages; | ||||
|                         module.PermissionList = pagemodule.Module.PermissionList; | ||||
|                         module.CreatedBy = pagemodule.Module.CreatedBy; | ||||
|                         module.CreatedOn = pagemodule.Module.CreatedOn; | ||||
|                         module.ModifiedBy = pagemodule.Module.ModifiedBy; | ||||
|                         module.ModifiedOn = pagemodule.Module.ModifiedOn; | ||||
|                         module.DeletedBy = pagemodule.DeletedBy; | ||||
|                         module.DeletedOn = pagemodule.DeletedOn; | ||||
|                         module.IsDeleted = pagemodule.IsDeleted; | ||||
|                         Module module = new Module | ||||
|                         { | ||||
|                             SiteId = pagemodule.Module.SiteId, | ||||
|                             ModuleDefinitionName = pagemodule.Module.ModuleDefinitionName, | ||||
|                             AllPages = pagemodule.Module.AllPages, | ||||
|                             PermissionList = pagemodule.Module.PermissionList, | ||||
|                             CreatedBy = pagemodule.Module.CreatedBy, | ||||
|                             CreatedOn = pagemodule.Module.CreatedOn, | ||||
|                             ModifiedBy = pagemodule.Module.ModifiedBy, | ||||
|                             ModifiedOn = pagemodule.Module.ModifiedOn, | ||||
|                             DeletedBy = pagemodule.DeletedBy, | ||||
|                             DeletedOn = pagemodule.DeletedOn, | ||||
|                             IsDeleted = pagemodule.IsDeleted, | ||||
|  | ||||
|                         module.PageModuleId = pagemodule.PageModuleId; | ||||
|                         module.ModuleId = pagemodule.ModuleId; | ||||
|                         module.PageId = pagemodule.PageId; | ||||
|                         module.Title = pagemodule.Title; | ||||
|                         module.Pane = pagemodule.Pane; | ||||
|                         module.Order = pagemodule.Order; | ||||
|                         module.ContainerType = pagemodule.ContainerType; | ||||
|                             PageModuleId = pagemodule.PageModuleId, | ||||
|                             ModuleId = pagemodule.ModuleId, | ||||
|                             PageId = pagemodule.PageId, | ||||
|                             Title = pagemodule.Title, | ||||
|                             Pane = pagemodule.Pane, | ||||
|                             Order = pagemodule.Order, | ||||
|                             ContainerType = pagemodule.ContainerType, | ||||
|                             EffectiveDate = pagemodule.EffectiveDate, | ||||
|                             ExpiryDate = pagemodule.ExpiryDate, | ||||
|  | ||||
|                         module.ModuleDefinition = _moduleDefinitions.FilterModuleDefinition(moduledefinitions.Find(item => item.ModuleDefinitionName == module.ModuleDefinitionName)); | ||||
|                             ModuleDefinition = _moduleDefinitions.FilterModuleDefinition(moduledefinitions.Find(item => item.ModuleDefinitionName == pagemodule.Module.ModuleDefinitionName)), | ||||
|  | ||||
|                         module.Settings = settings.Where(item => item.EntityId == pagemodule.ModuleId) | ||||
|                             Settings = settings | ||||
|                             .Where(item => item.EntityId == pagemodule.ModuleId) | ||||
|                             .Where(item => !item.IsPrivate || _userPermissions.IsAuthorized(User, PermissionNames.Edit, pagemodule.Module.PermissionList)) | ||||
|                             .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue); | ||||
|                             .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue) | ||||
|                         }; | ||||
|  | ||||
|                         site.Modules.Add(module); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 site.Modules = site.Modules.OrderBy(item => item.PageId).ThenBy(item => item.Pane).ThenBy(item => item.Order).ToList(); | ||||
|  | ||||
|                 // languages | ||||
| @ -277,5 +291,30 @@ namespace Oqtane.Controllers | ||||
|             } | ||||
|             return hierarchy; | ||||
|         } | ||||
|         private bool IsPageModuleVisible(DateTime? effectiveDate, DateTime? expiryDate) | ||||
|         { | ||||
|             DateTime currentUtcTime = DateTime.UtcNow; | ||||
|  | ||||
|             // Check if either effectiveDate or expiryDate is provided | ||||
|             if (effectiveDate.HasValue && expiryDate.HasValue) | ||||
|             { | ||||
|                 return currentUtcTime >= effectiveDate.Value && currentUtcTime <= expiryDate.Value; | ||||
|             } | ||||
|             // Check if only effectiveDate is provided | ||||
|             else if (effectiveDate.HasValue) | ||||
|             { | ||||
|                 return currentUtcTime >= effectiveDate.Value; | ||||
|             } | ||||
|             // Check if only expiryDate is provided | ||||
|             else if (expiryDate.HasValue) | ||||
|             { | ||||
|                 return currentUtcTime <= expiryDate.Value; | ||||
|             } | ||||
|             // If neither effectiveDate nor expiryDate is provided, consider the page/module visible | ||||
|             else | ||||
|             { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Leigh Pointer
					Leigh Pointer