Fix #3068 - support microsites in .NET MAUI

This commit is contained in:
sbwalker
2023-08-02 13:55:01 -04:00
parent 122fcfd701
commit 7a42646bed
20 changed files with 144 additions and 91 deletions

View File

@ -11,7 +11,7 @@ namespace Oqtane.Repository
Site GetSite(int siteId);
Site GetSite(int siteId, bool tracking);
void DeleteSite(int siteId);
Site InitializeSite(Alias alias);
void InitializeSite(Alias alias);
void CreatePages(Site site, List<PageTemplate> pageTemplates, Alias alias);
}
}

View File

@ -21,10 +21,10 @@ namespace Oqtane.Repository
private readonly IPermissionRepository _permissions;
private readonly ITenantManager _tenants;
private readonly ISettingRepository _settings;
private readonly ServerStateManager _serverState;
private readonly IServerStateManager _serverState;
private readonly string settingprefix = "SiteEnabled:";
public ModuleDefinitionRepository(MasterDBContext context, IMemoryCache cache, IPermissionRepository permissions, ITenantManager tenants, ISettingRepository settings, ServerStateManager serverState)
public ModuleDefinitionRepository(MasterDBContext context, IMemoryCache cache, IPermissionRepository permissions, ITenantManager tenants, ISettingRepository settings, IServerStateManager serverState)
{
_db = context;
_cache = cache;
@ -179,6 +179,8 @@ namespace Oqtane.Repository
if (siteId != -1)
{
var siteKey = _tenants.GetAlias().SiteKey;
// get all module definition permissions for site
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
@ -186,7 +188,7 @@ namespace Oqtane.Repository
var settings = _settings.GetSettings(EntityNames.ModuleDefinition).ToList();
// populate module definition site settings and permissions
var serverState = _serverState.GetServerState(siteId);
var serverState = _serverState.GetServerState(siteKey);
foreach (ModuleDefinition moduledefinition in ModuleDefinitions)
{
moduledefinition.SiteId = siteId;
@ -251,7 +253,6 @@ namespace Oqtane.Repository
}
}
}
_serverState.SetServerState(siteId, serverState);
// clean up any orphaned permissions
var ids = new HashSet<int>(ModuleDefinitions.Select(item => item.ModuleDefinitionId));

View File

@ -27,13 +27,13 @@ namespace Oqtane.Repository
private readonly IThemeRepository _themeRepository;
private readonly IServiceProvider _serviceProvider;
private readonly IConfigurationRoot _config;
private readonly ServerStateManager _serverState;
private readonly IServerStateManager _serverState;
private readonly ILogManager _logger;
private static readonly object _lock = new object();
public SiteRepository(TenantDBContext context, IRoleRepository roleRepository, IProfileRepository profileRepository, IFolderRepository folderRepository, IPageRepository pageRepository,
IModuleRepository moduleRepository, IPageModuleRepository pageModuleRepository, IModuleDefinitionRepository moduleDefinitionRepository, IThemeRepository themeRepository, IServiceProvider serviceProvider,
IConfigurationRoot config, ServerStateManager serverState, ILogManager logger)
IConfigurationRoot config, IServerStateManager serverState, ILogManager logger)
{
_db = context;
_roleRepository = roleRepository;
@ -95,23 +95,25 @@ namespace Oqtane.Repository
_db.SaveChanges();
}
public Site InitializeSite(Alias alias)
public void InitializeSite(Alias alias)
{
var site = GetSite(alias.SiteId);
// load themes and module definitions
site.Themes = _themeRepository.GetThemes().ToList();
var moduleDefinitions = _moduleDefinitionRepository.GetModuleDefinitions(alias.SiteId);
// site migrations
var serverstate = _serverState.GetServerState(alias.SiteId);
if (!serverstate.IsMigrated)
var serverstate = _serverState.GetServerState(alias.SiteKey);
if (!serverstate.IsInitialized)
{
// ensure migrations are only executed once
// ensure site initialization is only executed once
lock (_lock)
{
if (!serverstate.IsMigrated)
if (!serverstate.IsInitialized)
{
var site = GetSite(alias.SiteId);
// initialize theme Assemblies and Scripts
site.Themes = _themeRepository.GetThemes().ToList();
// initialize module Assemblies and Scripts
var moduleDefinitions = _moduleDefinitionRepository.GetModuleDefinitions(alias.SiteId);
// execute migrations
var version = ProcessSiteMigrations(alias, site);
version = ProcessPageTemplates(alias, site, moduleDefinitions, version);
if (site.Version != version)
@ -119,13 +121,11 @@ namespace Oqtane.Repository
site.Version = version;
UpdateSite(site);
}
serverstate.IsMigrated = true;
_serverState.SetServerState(alias.SiteId, serverstate);
serverstate.IsInitialized = true;
}
}
}
return site;
}
}
private string ProcessSiteMigrations(Alias alias, Site site)

View File

@ -22,10 +22,10 @@ namespace Oqtane.Repository
private readonly IMemoryCache _cache;
private readonly ITenantManager _tenants;
private readonly ISettingRepository _settings;
private readonly ServerStateManager _serverState;
private readonly IServerStateManager _serverState;
private readonly string settingprefix = "SiteEnabled:";
public ThemeRepository(MasterDBContext context, IMemoryCache cache, ITenantManager tenants, ISettingRepository settings, ServerStateManager serverState)
public ThemeRepository(MasterDBContext context, IMemoryCache cache, ITenantManager tenants, ISettingRepository settings, IServerStateManager serverState)
{
_db = context;
_cache = cache;
@ -157,11 +157,13 @@ namespace Oqtane.Repository
if (siteId != -1)
{
var siteKey = _tenants.GetAlias().SiteKey;
// get settings for site
var settings = _settings.GetSettings(EntityNames.Theme).ToList();
// populate theme site settings
var serverState = _serverState.GetServerState(siteId);
var serverState = _serverState.GetServerState(siteKey);
foreach (Theme theme in Themes)
{
theme.SiteId = siteId;
@ -206,7 +208,6 @@ namespace Oqtane.Repository
}
}
}
_serverState.SetServerState(siteId, serverState);
}
return Themes;