@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 ITimeZoneService TimeZoneService @inject ILocalizationService LocalizationService @inject IServiceProvider ServiceProvider @inject IStringLocalizer Localizer @inject INotificationService NotificationService @inject IJobService JobService @inject IStringLocalizer SharedLocalizer @inject IOutputCacheService CacheService @inject ISiteGroupDefinitionService SiteGroupDefinitionService @inject ISiteGroupService SiteGroupService @if (_initialized) {
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
}
@Localizer["Browse"]

@if (_smtpenabled == "True" && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
@if (_smtpauthentication == "Basic") {
} else {
}


}
@if (_aliases != null && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) {
@if (_rendermode == RenderModes.Static) {
}
@if (!_addAlias) {
@if (!_addAlias) { }
} @if (_aliasid != -1 || _addAlias) {
}
@if (_aliasid != -1 || _addAlias) { } @if (_aliasid != -1 && !_addAlias) { } @if (_addAlias) { }
@if (!_addSiteGroupDefinition) {
@if (!_addSiteGroupDefinition) { }
} @if (_siteGroupDefinitionId != -1 || _addSiteGroupDefinition) {
@if (_synchronization != "False") {
}
} @if (_siteGroupDefinitionId != -1) {
} @if (_siteGroupDefinitionId != -1) {
@if (_member == "Secondary") {
} }
@if ((_siteGroupDefinitionId != -1 || _addSiteGroupDefinition)) { } @if ((_siteGroupDefinitionId != -1 && !_addSiteGroupDefinition) && _member != "False") { } @if (_addSiteGroupDefinition) { }
}
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host) && _siteGroupDefinitions.Any(item => item.PrimarySiteId == PageState.Site.SiteId && item.Synchronization != null)) { }

} @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 List _timezones; private IEnumerable _cultures; private string _name = string.Empty; private string _timezoneid = string.Empty; private string _culturecode = string.Empty; 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 _smtpenabled = "False"; private string _smtpauthentication = "Basic"; private string _smtphost = string.Empty; private string _smtpport = string.Empty; private string _smtpssl = "Auto"; private string _smtpusername = string.Empty; private string _smtppassword = string.Empty; private string _smtppasswordtype = "password"; private string _togglesmtppassword = string.Empty; private string _smtpauthority = string.Empty; private string _smtpclientid = string.Empty; private string _smtpclientsecret = string.Empty; private string _smtpclientsecrettype = "password"; private string _togglesmtpclientsecret = string.Empty; private string _smtpscopes = string.Empty; private string _smtpsender = string.Empty; private int _retention = 30; private string _pwaisenabled; private int _pwaappiconfileid = -1; private FileManager _pwaappiconfilemanager; private int _pwasplashiconfileid = -1; private FileManager _pwasplashiconfilemanager; private string _rendermode = RenderModes.Interactive; private string _enhancednavigation = "True"; private string _runtime = Runtimes.Server; private string _prerender = "True"; private string _hybrid = "False"; private List _aliases; private int _aliasid = -1; private string _aliasname; private string _defaultalias; private bool _addAlias = false; private List _siteGroupDefinitions = new List(); private List _sites = new List(); private int _siteGroupDefinitionId = -1; private int _siteId; private string _groupName = string.Empty; private string _synchronization = "Update"; private string _notify = "True"; private string _localization = "False"; private string _member = "Primary"; private string _synchronized = string.Empty; private bool _addSiteGroupDefinition = 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) { _timezones = TimeZoneService.GetTimeZones(); _cultures = await LocalizationService.GetCulturesAsync(false); var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); _pages = await PageService.GetPagesAsync(PageState.Site.SiteId); _name = site.Name; _timezoneid = site.TimeZoneId; _culturecode = site.CultureCode; _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; } var themes = new List(); foreach (var theme in PageState.Site.Themes) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.Utilize, theme.PermissionList)) { themes.Add(theme); } } _themes = ThemeService.GetThemeControls(themes); _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme; _containers = ThemeService.GetContainerControls(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 _smtpenabled = SettingService.GetSetting(settings, "SMTPEnabled", "False"); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty); _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty); _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "Auto"); if (_smtpssl == "True") _smtpssl = "SslOnConnect"; if (_smtpssl == "False") _smtpssl = "StartTlsWhenAvailable"; _smtpauthentication = SettingService.GetSetting(settings, "SMTPAuthentication", "Basic"); _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty); _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty); _togglesmtppassword = SharedLocalizer["ShowPassword"]; _smtpauthority = SettingService.GetSetting(settings, "SMTPAuthority", string.Empty); _smtpclientid = SettingService.GetSetting(settings, "SMTPClientId", string.Empty); _smtpclientsecret = SettingService.GetSetting(settings, "SMTPClientSecret", string.Empty); _togglesmtpclientsecret = SharedLocalizer["ShowPassword"]; _smtpscopes = SettingService.GetSetting(settings, "SMTPScopes", string.Empty); _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty); _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 LoadAliases(); // hosting model _rendermode = site.RenderMode; _enhancednavigation = site.EnhancedNavigation.ToString(); _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 == PageState.Alias.TenantId); if (tenant != null) { _tenant = tenant.Name; // hack - there are 3 providers with SqlServerDatabase DBTypes - so we are choosing the last one in alphabetical order _database = _databases.Where(item => item.DBType == tenant.DBType).OrderBy(item => item.Name).Last()?.Name; _connectionstring = tenant.DBConnectionString; } } // site groups if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { await LoadSiteGroups(); } // 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.TimeZoneId = _timezoneid; site.CultureCode = _culturecode; 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)) { site.RenderMode = _rendermode; site.EnhancedNavigation = bool.Parse(_enhancednavigation); 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, "SMTPEnabled", _smtpenabled, true); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { 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, "SMTPAuthentication", _smtpauthentication, true); settings = SettingService.SetSetting(settings, "SMTPUsername", _smtpusername, true); settings = SettingService.SetSetting(settings, "SMTPPassword", _smtppassword, true); settings = SettingService.SetSetting(settings, "SMTPAuthority", _smtpauthority, true); settings = SettingService.SetSetting(settings, "SMTPClientId", _smtpclientid, true); settings = SettingService.SetSetting(settings, "SMTPClientSecret", _smtpclientsecret, true); settings = SettingService.SetSetting(settings, "SMTPScopes", _smtpscopes, true); settings = SettingService.SetSetting(settings, "SMTPSender", _smtpsender, true); settings = SettingService.SetSetting(settings, "NotificationRetention", _retention.ToString(), true); if (_smtpenabled == "True") { var jobs = await JobService.GetJobsAsync(); var job = jobs.FirstOrDefault(item => item.JobType == "Oqtane.Infrastructure.NotificationJob, Oqtane.Server"); if (job != null && !job.IsEnabled) { job.IsEnabled = true; await JobService.UpdateJobAsync(job); } } } //cookie consent settings = SettingService.SetSetting(settings, "CookieConsent", _cookieconsent); // functionality settings = SettingService.SetSetting(settings, "TextEditor", _textEditor); settings = SettingService.SetSetting(settings, "SiteGuid", _siteguid, true); 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.Alias.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.Alias.TenantId)) { await AliasService.DeleteAliasAsync(alias.AliasId); } var redirect = aliases.First(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Alias.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 void SMTPAuthenticationChanged(ChangeEventArgs e) { _smtpauthentication = (string)e.Value; StateHasChanged(); } private void SMTPEnabledChanged(ChangeEventArgs e) { _smtpenabled = (string)e.Value; StateHasChanged(); } private void ToggleSMTPPassword() { if (_smtppasswordtype == "password") { _smtppasswordtype = "text"; _togglesmtppassword = SharedLocalizer["HidePassword"]; } else { _smtppasswordtype = "password"; _togglesmtppassword = SharedLocalizer["ShowPassword"]; } } private void ToggleSmtpClientSecret() { if (_smtpclientsecrettype == "password") { _smtpclientsecrettype = "text"; _togglesmtpclientsecret = SharedLocalizer["HidePassword"]; } else { _smtpclientsecrettype = "password"; _togglesmtpclientsecret = SharedLocalizer["ShowPassword"]; } } private async Task SendEmail() { if (_smtphost != "" && _smtpport != "" && _smtpsender != "") { try { _smtpenabled = "True"; var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); settings = SettingService.SetSetting(settings, "SMTPEnabled", _smtpenabled, true); 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, "SMTPAuthentication", _smtpauthentication, true); settings = SettingService.SetSetting(settings, "SMTPUsername", _smtpusername, true); settings = SettingService.SetSetting(settings, "SMTPPassword", _smtppassword, true); settings = SettingService.SetSetting(settings, "SMTPAuthority", _smtpauthority, true); settings = SettingService.SetSetting(settings, "SMTPClientId", _smtpclientid, true); settings = SettingService.SetSetting(settings, "SMTPClientSecret", _smtpclientsecret, true); settings = SettingService.SetSetting(settings, "SMTPScopes", _smtpscopes, true); settings = SettingService.SetSetting(settings, "SMTPSender", _smtpsender, true); await SettingService.UpdateSiteSettingsAsync(settings, PageState.Site.SiteId); await logger.LogInformation("Site SMTP Settings Saved"); var jobs = await JobService.GetJobsAsync(); var job = jobs.FirstOrDefault(item => item.JobType == "Oqtane.Infrastructure.NotificationJob, Oqtane.Server"); if (job != null && !job.IsEnabled) { job.IsEnabled = true; await JobService.UpdateJobAsync(job); } 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 async Task LoadAliases() { _aliases = await AliasService.GetAliasesAsync(); _aliases = _aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Alias.TenantId).OrderBy(item => item.AliasId).ToList(); _aliasid = -1; _addAlias = false; } private async void AliasChanged(ChangeEventArgs e) { _aliasid = int.Parse(e.Value.ToString()); if (_aliasid != -1) { var alias = _aliases.FirstOrDefault(item => item.AliasId == _aliasid); if (alias != null) { _aliasname = alias.Name; _defaultalias = alias.IsDefault.ToString(); } } else { _aliasname = ""; _defaultalias = "False"; } StateHasChanged(); } private void AddAlias() { _aliasid = -1; _aliasname = ""; _defaultalias = "False"; _addAlias = true; StateHasChanged(); } private async Task DeleteAlias() { await AliasService.DeleteAliasAsync(_aliasid); await LoadAliases(); StateHasChanged(); } private async Task SaveAlias() { 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.Alias.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 LoadAliases(); _aliasid = -1; _aliasname = ""; StateHasChanged(); } else // Duplicate alias { AddModuleMessage(Localizer["Message.Aliases.Taken"], MessageType.Warning); await ScrollToPageTop(); } } } private async Task CancelAlias() { await LoadAliases(); _aliasid = -1; _aliasname = ""; StateHasChanged(); } private async Task EvictSitemapOutputCache() { await CacheService.EvictByTag(Constants.SitemapOutputCacheTag); AddModuleMessage(Localizer["Success.SiteMap.CacheEvicted"], MessageType.Success); } private async Task LoadSiteGroups() { _siteGroupDefinitions = await SiteGroupDefinitionService.GetSiteGroupDefinitionsAsync(); _siteGroupDefinitionId = -1; _addSiteGroupDefinition = false; StateHasChanged(); } private async void SiteGroupChanged(ChangeEventArgs e) { _siteGroupDefinitionId = int.Parse(e.Value.ToString()); if (_siteGroupDefinitionId != -1) { var group = _siteGroupDefinitions.FirstOrDefault(item => item.SiteGroupDefinitionId == _siteGroupDefinitionId); if (group != null) { _groupName = group.Name; if (group.Synchronization == null) { _synchronization = "False"; } else { _synchronization = (group.Synchronization.Value) ? "Update" : "Compare"; } _notify = group.Notify.ToString(); _localization = group.Localization.ToString(); if (_sites.Count == 0) { _sites = await SiteService.GetSitesAsync(); } _siteId = PageState.Site.SiteId; _member = "False"; var siteGroups = await SiteGroupService.GetSiteGroupsAsync(-1, _siteGroupDefinitionId); foreach (var site in _sites) { site.Fingerprint = ""; // used as temporary state var siteGroup = siteGroups.FirstOrDefault(item => item.SiteId == site.SiteId); if (siteGroup != null) { if (group.PrimarySiteId == site.SiteId) { site.Fingerprint = "Primary"; } else { site.Fingerprint = "Secondary"; } if (siteGroup.SiteId == _siteId) { _member = site.Fingerprint; _synchronized = UtcToLocal(siteGroup.SynchronizedOn).ToString(); } } } } } StateHasChanged(); } private async void SiteChanged(ChangeEventArgs e) { _siteId = int.Parse(e.Value.ToString()); var siteGroup = await SiteGroupService.GetSiteGroupAsync(_siteId, _siteGroupDefinitionId); if (siteGroup != null) { if (siteGroup.SiteGroupDefinition.PrimarySiteId == _siteId) { _member = "Primary"; } else { _member = "Secondary"; } _synchronized = UtcToLocal(siteGroup.SynchronizedOn).ToString(); } else { _member = "False"; } StateHasChanged(); } private async Task AddSiteGroup() { _groupName = ""; _siteId = PageState.Site.SiteId; _member = "Primary"; _synchronized = ""; _addSiteGroupDefinition = true; } private async Task SaveSiteGroup() { SiteGroupDefinition siteGroupDefinition = null; bool? synchronization = null; if (_synchronization == "Compare") synchronization = false; if (_synchronization == "Update") synchronization = true; if (_siteGroupDefinitionId == -1) { if (!string.IsNullOrEmpty(_groupName)) { siteGroupDefinition = new Models.SiteGroupDefinition { Name = _groupName, PrimarySiteId = _siteId, Synchronization = synchronization, Notify = bool.Parse(_notify), Localization = bool.Parse(_localization), Synchronize = false }; siteGroupDefinition = await SiteGroupDefinitionService.AddSiteGroupDefinitionAsync(siteGroupDefinition); } } else { siteGroupDefinition = _siteGroupDefinitions.FirstOrDefault(item => item.SiteGroupDefinitionId == _siteGroupDefinitionId); if (siteGroupDefinition != null && !string.IsNullOrEmpty(_groupName)) { siteGroupDefinition.Name = _groupName; siteGroupDefinition.PrimarySiteId = (_member == "Primary") ? _siteId : siteGroupDefinition.PrimarySiteId; siteGroupDefinition.Synchronization = synchronization; siteGroupDefinition.Notify = bool.Parse(_notify); siteGroupDefinition.Localization = bool.Parse(_localization); siteGroupDefinition = await SiteGroupDefinitionService.UpdateSiteGroupDefinitionAsync(siteGroupDefinition); } else { siteGroupDefinition = null; } } if (siteGroupDefinition != null) { var siteGroup = await SiteGroupService.GetSiteGroupAsync(_siteId, siteGroupDefinition.SiteGroupDefinitionId); if (siteGroup == null) { siteGroup = new SiteGroup { SiteGroupDefinitionId = siteGroupDefinition.SiteGroupDefinitionId, SiteId = _siteId }; await SiteGroupService.AddSiteGroupAsync(siteGroup); } else { if (_member == "False") { await SiteGroupService.DeleteSiteGroupAsync(siteGroup.SiteGroupId); } } await LoadSiteGroups(); } else { AddModuleMessage(Localizer["Message.Required.GroupName"], MessageType.Warning); await ScrollToPageTop(); } } private async Task CancelSiteGroup() { _groupName = ""; await LoadSiteGroups(); } private async Task DeleteSiteGroup() { if (_siteGroupDefinitionId != -1) { var siteGroup = await SiteGroupService.GetSiteGroupAsync(PageState.Site.SiteId, _siteGroupDefinitionId); if (siteGroup != null) { await SiteGroupService.DeleteSiteGroupAsync(siteGroup.SiteGroupDefinitionId); } var siteGroups = await SiteGroupService.GetSiteGroupsAsync(-1, _siteGroupDefinitionId); if (!siteGroups.Any()) { await SiteGroupDefinitionService.DeleteSiteGroupDefinitionAsync(_siteGroupDefinitionId); } await LoadSiteGroups(); } } private async Task SynchronizeSite() { // enable synchronization job if it is not enabled already var jobs = await JobService.GetJobsAsync(); var job = jobs.FirstOrDefault(item => item.JobType == "Oqtane.Infrastructure.SynchronizationJob, Oqtane.Server"); if (job != null && !job.IsEnabled) { job.IsEnabled = true; await JobService.UpdateJobAsync(job); } // mark secondary sites for synchronization foreach (var group in _siteGroupDefinitions.Where(item => item.PrimarySiteId == PageState.Site.SiteId && item.Synchronization != null)) { group.Synchronize = true; await SiteGroupDefinitionService.UpdateSiteGroupDefinitionAsync(group); } AddModuleMessage(Localizer["Message.Site.Synchronize"], MessageType.Success); await ScrollToPageTop(); } }