Fix #3068 - support microsites in .NET MAUI
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user