@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService @inject IAliasService AliasService @inject ISiteService SiteService @inject IThemeService ThemeService @inject ISiteTemplateService SiteTemplateService @inject IUserService UserService @if (_tenants == null) {

Loading...

} else { @if (!_isinitialized) { }
Cancel } @code { private Dictionary _themes = new Dictionary(); private Dictionary _panelayouts = new Dictionary(); private Dictionary _containers = new Dictionary(); private List _siteTemplates; private List _themeList; private List _tenants; private string _tenantid = "-1"; private string _name = string.Empty; private string _urls = string.Empty; private string _themetype = string.Empty; private string _layouttype = string.Empty; private string _containertype = string.Empty; private string _sitetemplatetype = string.Empty; private bool _isinitialized = true; private string _username = string.Empty; private string _password = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; protected override async Task OnInitializedAsync() { _themeList = await ThemeService.GetThemesAsync(); _tenants = await TenantService.GetTenantsAsync(); _urls = PageState.Alias.Name; _themes = ThemeService.GetThemeTypes(_themeList); _containers = ThemeService.GetContainerTypes(_themeList); _siteTemplates = await SiteTemplateService.GetSiteTemplatesAsync(); _username = Constants.HostUser; } private async void TenantChanged(ChangeEventArgs e) { try { _tenantid = (string)e.Value; if (_tenantid != "-1") { var tenant = _tenants.FirstOrDefault(item => item.TenantId == int.Parse(_tenantid)); if (tenant != null) { _isinitialized = tenant.IsInitialized; StateHasChanged(); } } } catch (Exception ex) { await logger.LogError(ex, "Error Loading Tenant {TenantId} {Error}", _tenantid, ex.Message); AddModuleMessage("Error Loading Tenant", MessageType.Error); } } private async void ThemeChanged(ChangeEventArgs e) { try { _themetype = (string)e.Value; if (_themetype != string.Empty) { _panelayouts = ThemeService.GetPaneLayoutTypes(_themeList, _themetype); } else { _panelayouts = new Dictionary(); } StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); } } private async Task SaveSite() { if (_tenantid != "-1" && _name != string.Empty && _urls != string.Empty && !string.IsNullOrEmpty(_themetype) && (_panelayouts.Count == 0 || !string.IsNullOrEmpty(_layouttype)) && !string.IsNullOrEmpty(_containertype) && !string.IsNullOrEmpty(_sitetemplatetype)) { var unique = true; var aliases = await AliasService.GetAliasesAsync(); foreach (string name in _urls.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (aliases.Exists(item => item.Name == name)) { unique = false; } } if (unique) { var isvalid = true; if (!_isinitialized) { var user = new User(); user.SiteId = PageState.Site.SiteId; user.Username = _username; user.Password = _password; user = await UserService.LoginUserAsync(user, false, false); isvalid = user.IsAuthenticated; } if (isvalid) { ShowProgressIndicator(); aliases = new List(); _urls = _urls.Replace("\n", ","); foreach (string name in _urls.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { var alias = new Alias(); alias.Name = name; alias.TenantId = int.Parse(_tenantid); alias.SiteId = -1; alias = await AliasService.AddAliasAsync(alias); aliases.Add(alias); } var site = new Site(); site.TenantId = int.Parse(_tenantid); site.Name = _name; site.LogoFileId = null; site.FaviconFileId = null; site.DefaultThemeType = _themetype; site.DefaultLayoutType = (_layouttype == null ? string.Empty : _layouttype); site.DefaultContainerType = _containertype; site.PwaIsEnabled = false; site.PwaAppIconFileId = null; site.PwaSplashIconFileId = null; site.AllowRegistration = false; site.SiteTemplateType = _sitetemplatetype; site = await SiteService.AddSiteAsync(site, aliases[0]); foreach (Alias alias in aliases) { alias.SiteId = site.SiteId; await AliasService.UpdateAliasAsync(alias); } if (!_isinitialized) { var user = new User(); user.SiteId = site.SiteId; user.Username = _username; user.Password = _password; user.Email = PageState.User.Email; user.DisplayName = PageState.User.DisplayName; user = await UserService.AddUserAsync(user, aliases[0]); if (user != null) { var tenant = _tenants.FirstOrDefault(item => item.TenantId == int.Parse(_tenantid)); if (tenant != null) { tenant.IsInitialized = true; await TenantService.UpdateTenantAsync(tenant); } } } await Log(aliases[0], LogLevel.Information, string.Empty, null, "Site Created {Site}", site); var uri = new Uri(NavigationManager.Uri); NavigationManager.NavigateTo(uri.Scheme + "://" + aliases[0].Name, true); } else { await logger.LogError("Invalid Password Entered For Host {Username}", _username); AddModuleMessage("Invalid Host Password", MessageType.Error); } } else { AddModuleMessage("An Alias Specified Has Already Been Used For Another Site", MessageType.Warning); } } else { AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, Default Theme/Container, And Site Template", MessageType.Warning); } } }