@namespace Oqtane.Modules.Admin.Site @inherits ModuleBase @using System.Text.RegularExpressions @using Microsoft.Extensions.DependencyInjection @inject NavigationManager NavigationManager @inject ISiteService SiteService @inject IPageService PageService @inject ITenantService TenantService @inject IDatabaseService DatabaseService @inject IAliasService AliasService @inject IThemeService ThemeService @inject ISettingService SettingService @inject IServiceProvider ServiceProvider @inject IStringLocalizer Localizer @inject INotificationService NotificationService @inject IStringLocalizer SharedLocalizer @inject ICacheService CacheService @if (_initialized) {
@Localizer["Browse"]

@Localizer["Smtp.Required.EnableNotificationJob"]


@if (_aliases != null && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
    @Localizer["AliasName"] @Localizer["AliasDefault"]
@if (context.AliasId != _aliasid) { @if (_aliasid == -1) { } @if (_aliasid == -1) { } @context.Name @((context.IsDefault) ? SharedLocalizer["Yes"] : SharedLocalizer["No"]) } else { }
}


} @code { private ElementReference form; private bool validated = false; private bool _initialized = false; private List _themes = new List(); private List _containers = new List(); private List _pages; private string _name = string.Empty; private string _homepageid = "-"; private string _isdeleted; private string _sitemap = ""; private string _siteguid = ""; private string _version = ""; private int _logofileid = -1; private FileManager _logofilemanager; private int _faviconfileid = -1; private FileManager _faviconfilemanager; private string _themetype = ""; private string _containertype = ""; private string _admincontainertype = ""; private string _cookieconsent = ""; private Dictionary _textEditors = new Dictionary(); private string _textEditor = ""; private string _imageFiles = string.Empty; private string _headcontent = string.Empty; private string _bodycontent = string.Empty; private string _smtphost = string.Empty; private string _smtpport = string.Empty; private string _smtpssl = "False"; private string _smtpusername = string.Empty; private string _smtppassword = string.Empty; private string _smtppasswordtype = "password"; private string _togglesmtppassword = string.Empty; private string _smtpsender = string.Empty; private string _smtprelay = "False"; private string _smtpenabled = "True"; private int _retention = 30; private string _pwaisenabled; private int _pwaappiconfileid = -1; private FileManager _pwaappiconfilemanager; private int _pwasplashiconfileid = -1; private FileManager _pwasplashiconfilemanager; private List _aliases; private int _aliasid = -1; private string _aliasname; private string _defaultalias; private string _rendermode = RenderModes.Interactive; private string _runtime = Runtimes.Server; private string _prerender = "True"; private string _hybrid = "False"; private string _tenant = string.Empty; private string _database = string.Empty; private string _connectionstring = string.Empty; private string _createdby; private DateTime _createdon; private string _modifiedby; private DateTime _modifiedon; private string _deletedby; private DateTime? _deletedon; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; protected override async Task OnInitializedAsync() { try { if (PageState.QueryString.ContainsKey("updated")) { AddModuleMessage(Localizer["Success.Settings.SaveSite"], MessageType.Success); } Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId); if (site != null) { var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); _pages = await PageService.GetPagesAsync(PageState.Site.SiteId); _name = site.Name; if (site.HomePageId != null) { _homepageid = site.HomePageId.Value.ToString(); } _isdeleted = site.IsDeleted.ToString(); _sitemap = PageState.Alias.Protocol + PageState.Alias.Name + "/sitemap.xml"; _siteguid = site.SiteGuid; _version = site.Version; // appearance if (site.LogoFileId != null) { _logofileid = site.LogoFileId.Value; } if (site.FaviconFileId != null) { _faviconfileid = site.FaviconFileId.Value; } _themes = ThemeService.GetThemeControls(PageState.Site.Themes); _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme; _containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype); _containertype = (!string.IsNullOrEmpty(site.DefaultContainerType)) ? site.DefaultContainerType : Constants.DefaultContainer; _admincontainertype = (!string.IsNullOrEmpty(site.AdminContainerType)) ? site.AdminContainerType : Constants.DefaultAdminContainer; _cookieconsent = SettingService.GetSetting(settings, "CookieConsent", string.Empty); // functionality var textEditors = ServiceProvider.GetServices(); foreach (var textEditor in textEditors) { _textEditors.Add(textEditor.Name, Utilities.GetFullTypeName(textEditor.GetType().AssemblyQualifiedName)); } _textEditor = SettingService.GetSetting(settings, "TextEditor", Constants.DefaultTextEditor); _imageFiles = SettingService.GetSetting(settings, "ImageFiles", Constants.ImageFiles); _imageFiles = (string.IsNullOrEmpty(_imageFiles)) ? Constants.ImageFiles : _imageFiles; // page content _headcontent = site.HeadContent; _bodycontent = site.BodyContent; // SMTP _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty); _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty); _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False"); _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty); _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty); _togglesmtppassword = SharedLocalizer["ShowPassword"]; _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty); _smtprelay = SettingService.GetSetting(settings, "SMTPRelay", "False"); _smtpenabled = SettingService.GetSetting(settings, "SMTPEnabled", "True"); _retention = int.Parse(SettingService.GetSetting(settings, "NotificationRetention", "30")); // PWA _pwaisenabled = site.PwaIsEnabled.ToString(); if (site.PwaAppIconFileId != null) { _pwaappiconfileid = site.PwaAppIconFileId.Value; } if (site.PwaSplashIconFileId != null) { _pwasplashiconfileid = site.PwaSplashIconFileId.Value; } // aliases await GetAliases(); // hosting model _rendermode = site.RenderMode; _runtime = site.Runtime; _prerender = site.Prerender.ToString(); _hybrid = site.Hybrid.ToString(); // database if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { var tenants = await TenantService.GetTenantsAsync(); var _databases = await DatabaseService.GetDatabasesAsync(); var tenant = tenants.Find(item => item.TenantId == site.TenantId); if (tenant != null) { _tenant = tenant.Name; _database = _databases.Find(item => item.DBType == tenant.DBType && item.Name != "LocalDB")?.Name; _connectionstring = tenant.DBConnectionString; } } // audit _createdby = site.CreatedBy; _createdon = site.CreatedOn; _modifiedby = site.ModifiedBy; _modifiedon = site.ModifiedOn; _deletedby = site.DeletedBy; _deletedon = site.DeletedOn; _initialized = true; } } catch (Exception ex) { await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); AddModuleMessage(ex.Message, MessageType.Error); } } private async void ThemeChanged(ChangeEventArgs e) { try { _themetype = (string)e.Value; _containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype); _containertype = _containers.First().TypeName; _admincontainertype = Constants.DefaultAdminContainer; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Containers For Theme {ThemeType} {Error}", _themetype, ex.Message); AddModuleMessage(Localizer["Error.Theme.LoadPane"], MessageType.Error); } } private void RenderModeChanged(ChangeEventArgs e) { _rendermode = (string)e.Value; switch (_rendermode) { case RenderModes.Interactive: _prerender = "True"; break; case RenderModes.Static: _prerender = "False"; break; case RenderModes.Headless: _prerender = "False"; break; } } private async Task SaveSite() { validated = true; var interop = new Interop(JSRuntime); if (await interop.FormValid(form)) { try { if (_name != string.Empty && _themetype != "-" && _containertype != "-") { var site = await SiteService.GetSiteAsync(PageState.Site.SiteId); if (site != null) { site.Name = _name; site.HomePageId = (_homepageid != "-" ? int.Parse(_homepageid) : null); site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted)); // appearance site.LogoFileId = null; var logofileid = _logofilemanager.GetFileId(); if (logofileid != -1) { site.LogoFileId = logofileid; if (logofileid != _logofileid) { _logofileid = logofileid; } } int? faviconFieldId = _faviconfilemanager.GetFileId(); if (faviconFieldId == -1) faviconFieldId = null; if (site.FaviconFileId != faviconFieldId) { site.FaviconFileId = faviconFieldId; } if (site.DefaultThemeType != _themetype) { site.DefaultThemeType = _themetype; } if (site.DefaultContainerType != _containertype) { site.DefaultContainerType = _containertype; } site.AdminContainerType = _admincontainertype; // page content if (site.HeadContent != _headcontent) { site.HeadContent = _headcontent; } if (site.BodyContent != _bodycontent) { site.BodyContent = _bodycontent; } // PWA if (site.PwaIsEnabled.ToString() != _pwaisenabled) { site.PwaIsEnabled = Boolean.Parse(_pwaisenabled); } int? pwaappiconfileid = _pwaappiconfilemanager.GetFileId(); if (pwaappiconfileid == -1) pwaappiconfileid = null; if (site.PwaAppIconFileId != pwaappiconfileid) { site.PwaAppIconFileId = pwaappiconfileid; } int? pwasplashiconfileid = _pwasplashiconfilemanager.GetFileId(); if (pwasplashiconfileid == -1) pwasplashiconfileid = null; if (site.PwaSplashIconFileId != pwasplashiconfileid) { site.PwaSplashIconFileId = pwasplashiconfileid; } // hosting model if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { if (site.RenderMode != _rendermode || site.Runtime != _runtime || site.Prerender != bool.Parse(_prerender) || site.Hybrid != bool.Parse(_hybrid)) { site.RenderMode = _rendermode; site.Runtime = _runtime; site.Prerender = bool.Parse(_prerender); site.Hybrid = bool.Parse(_hybrid); } } site = await SiteService.UpdateSiteAsync(site); // SMTP var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); settings = SettingService.SetSetting(settings, "SMTPHost", _smtphost, true); settings = SettingService.SetSetting(settings, "SMTPPort", _smtpport, true); settings = SettingService.SetSetting(settings, "SMTPSSL", _smtpssl, true); settings = SettingService.SetSetting(settings, "SMTPUsername", _smtpusername, true); settings = SettingService.SetSetting(settings, "SMTPPassword", _smtppassword, true); settings = SettingService.SetSetting(settings, "SMTPSender", _smtpsender, true); settings = SettingService.SetSetting(settings, "SMTPRelay", _smtprelay, true); settings = SettingService.SetSetting(settings, "SMTPEnabled", _smtpenabled, true); settings = SettingService.SetSetting(settings, "SiteGuid", _siteguid, true); settings = SettingService.SetSetting(settings, "NotificationRetention", _retention.ToString(), true); //cookie consent settings = SettingService.SetSetting(settings, "CookieConsent", _cookieconsent); // functionality settings = SettingService.SetSetting(settings, "TextEditor", _textEditor); await SettingService.UpdateSiteSettingsAsync(settings, site.SiteId); await logger.LogInformation("Site Settings Saved {Site}", site); NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "updated=true"), true); // reload } } else { AddModuleMessage(Localizer["Message.Required.SiteName"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); AddModuleMessage(Localizer["Error.SaveSite"], MessageType.Error); } } else { AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); } } private async Task DeleteSite() { try { var aliases = await AliasService.GetAliasesAsync(); if (aliases.Any(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Site.TenantId)) { await SiteService.DeleteSiteAsync(PageState.Site.SiteId); await logger.LogInformation("Site Deleted {SiteId}", PageState.Site.SiteId); foreach (Alias alias in aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Site.TenantId)) { await AliasService.DeleteAliasAsync(alias.AliasId); } var redirect = aliases.First(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Site.TenantId); NavigationManager.NavigateTo(PageState.Uri.Scheme + "://" + redirect.Name, true); } else { AddModuleMessage(Localizer["Message.FailAuth.DeleteSite"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); AddModuleMessage(Localizer["Error.DeleteSite"], MessageType.Error); } } private async Task SendEmail() { if (_smtphost != "" && _smtpport != "" && _smtpsender != "") { try { var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); settings = SettingService.SetSetting(settings, "SMTPHost", _smtphost, true); settings = SettingService.SetSetting(settings, "SMTPPort", _smtpport, true); settings = SettingService.SetSetting(settings, "SMTPSSL", _smtpssl, true); settings = SettingService.SetSetting(settings, "SMTPUsername", _smtpusername, true); settings = SettingService.SetSetting(settings, "SMTPPassword", _smtppassword, true); settings = SettingService.SetSetting(settings, "SMTPSender", _smtpsender, true); await SettingService.UpdateSiteSettingsAsync(settings, PageState.Site.SiteId); await logger.LogInformation("Site SMTP Settings Saved"); await NotificationService.AddNotificationAsync(new Notification(PageState.Site.SiteId, PageState.User, PageState.Site.Name + " SMTP Configuration Test", "SMTP Server Is Configured Correctly.")); AddModuleMessage(Localizer["Info.Smtp.SaveSettings"], MessageType.Info); await ScrollToPageTop(); } catch (Exception ex) { await logger.LogError(ex, "Error Testing SMTP Configuration"); AddModuleMessage(Localizer["Error.Smtp.TestConfig"], MessageType.Error); } } else { AddModuleMessage(Localizer["Message.Required.Smtp"], MessageType.Warning); } } private void ToggleSMTPPassword() { if (_smtppasswordtype == "password") { _smtppasswordtype = "text"; _togglesmtppassword = SharedLocalizer["HidePassword"]; } else { _smtppasswordtype = "password"; _togglesmtppassword = SharedLocalizer["ShowPassword"]; } } private async Task GetAliases() { if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { _aliases = await AliasService.GetAliasesAsync(); _aliases = _aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Site.TenantId).OrderBy(item => item.AliasId).ToList(); } } private void AddAlias() { _aliases.Add(new Alias { AliasId = 0, Name = "", IsDefault = false }); _aliasid = 0; _aliasname = ""; _defaultalias = "False"; StateHasChanged(); } private void EditAlias(Alias alias) { _aliasid = alias.AliasId; _aliasname = alias.Name; _defaultalias = alias.IsDefault.ToString(); StateHasChanged(); } private async Task DeleteAlias(Alias alias) { if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { await AliasService.DeleteAliasAsync(alias.AliasId); await GetAliases(); StateHasChanged(); } } private async Task SaveAlias() { if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { if (!string.IsNullOrEmpty(_aliasname)) { var aliases = await AliasService.GetAliasesAsync(); int protocolIndex = _aliasname.IndexOf("://", StringComparison.OrdinalIgnoreCase); if (protocolIndex != -1) { _aliasname = _aliasname.Substring(protocolIndex + 3); } var alias = aliases.FirstOrDefault(item => item.Name == _aliasname); bool unique = (alias == null || alias.AliasId == _aliasid); if (unique) { if (_aliasid == 0) { alias = new Alias { SiteId = PageState.Site.SiteId, TenantId = PageState.Site.TenantId, Name = _aliasname, IsDefault = bool.Parse(_defaultalias) }; await AliasService.AddAliasAsync(alias); } else { alias = _aliases.SingleOrDefault(item => item.AliasId == _aliasid); if (alias != null) { alias.Name = _aliasname; alias.IsDefault = bool.Parse(_defaultalias); await AliasService.UpdateAliasAsync(alias); } } await GetAliases(); _aliasid = -1; _aliasname = ""; StateHasChanged(); } else // Duplicate alias { AddModuleMessage(Localizer["Message.Aliases.Taken"], MessageType.Warning); await ScrollToPageTop(); } } } } private async Task CancelAlias() { await GetAliases(); _aliasid = -1; _aliasname = ""; StateHasChanged(); } private async Task EvictSitemapOutputCache() { await CacheService.EvictOutputCacheByTag(Constants.SitemapOutputCacheTag); AddModuleMessage(Localizer["Success.SiteMap.CacheEvicted"], MessageType.Success); } }