@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 ISiteGroupService SiteGroupService @inject ISiteGroupMemberService SiteGroupMemberService @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 (!_addSiteGroup) {
@if (!_addSiteGroup) { }
} @if (_siteGroupId != -1 || _addSiteGroup) {
} @if (_siteGroupId != -1) {
@if (!_addSiteGroupMember) { } else { }
} @if (_siteGroupId != -1 && _siteId != -1) {
@if (_primary == "False" && !string.IsNullOrEmpty(_synchronized) && (_groupType == SiteGroupTypes.Synchronization || _groupType == SiteGroupTypes.ChangeDetection)) {
@if (!string.IsNullOrEmpty(_synchronized)) { }
} }
@if ((_siteGroupId != -1 || _addSiteGroup)) { } @if (_siteGroupId != -1 && !_addSiteGroup && _siteId != -1 && !_addSiteGroupMember) { } @if (_addSiteGroup) { }
}


} @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 _siteGroups = new List(); private List _sites = new List(); private int _siteGroupId = -1; private int _siteId; private string _groupName = string.Empty; private string _groupType = SiteGroupTypes.Synchronization; private string _primary = "True"; private string _synchronized = string.Empty; private bool _addSiteGroup = false; private bool _addSiteGroupMember = 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.GetNeutralCulturesAsync(); 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() { _siteGroups = await SiteGroupService.GetSiteGroupsAsync(); _siteGroupId = -1; _addSiteGroup = false; StateHasChanged(); } private async Task SiteGroupChanged(ChangeEventArgs e) { _siteGroupId = int.Parse(e.Value.ToString()); if (_siteGroupId != -1) { var group = _siteGroups.FirstOrDefault(item => item.SiteGroupId == _siteGroupId); if (group != null) { _groupName = group.Name; _groupType = group.Type; _siteId = -1; _primary = "False"; _addSiteGroupMember = false; await LoadSites(); } } StateHasChanged(); } private async Task LoadSites() { var siteGroupMembers = await SiteGroupMemberService.GetSiteGroupMembersAsync(-1, _siteGroupId); _sites = await SiteService.GetSitesAsync(); if (_addSiteGroupMember) { // include sites which are not members _sites = _sites.ExceptBy(siteGroupMembers.Select(item => item.SiteId), item => item.SiteId).ToList(); } else { // include sites which are members _sites = _sites.Where(item => siteGroupMembers.Any(item2 => item2.SiteId == item.SiteId)).ToList(); var group = _siteGroups.FirstOrDefault(item => item.SiteGroupId == _siteGroupId); foreach (var site in _sites) { if (group.PrimarySiteId == site.SiteId) { site.Name += $" ({Localizer["Primary"]})"; } else { site.Name += $" ({Localizer["Secondary"]})"; } } var siteGroupMember = siteGroupMembers.FirstOrDefault(item => item.SiteId == _siteId); if (siteGroupMember != null) { _primary = (siteGroupMember.SiteGroup.PrimarySiteId == _siteId) ? "True" : "False"; _synchronized = UtcToLocal(siteGroupMember.SynchronizedOn).ToString(); } } } private async Task SiteChanged(ChangeEventArgs e) { _siteId = int.Parse(e.Value.ToString()); var siteGroupMember = await SiteGroupMemberService.GetSiteGroupMemberAsync(_siteId, _siteGroupId); if (siteGroupMember != null) { _primary = (siteGroupMember.SiteGroup.PrimarySiteId == _siteId) ? "True" : "False"; _synchronized = UtcToLocal(siteGroupMember.SynchronizedOn).ToString(); } StateHasChanged(); } private async Task AddSiteGroup() { _groupName = ""; _siteId = PageState.Site.SiteId; _primary = "True"; _synchronized = ""; _addSiteGroup = true; } private async Task AddSiteGroupMember() { _addSiteGroupMember = !_addSiteGroupMember; _siteId = -1; await LoadSites(); } private async Task SaveSiteGroupMember() { if (string.IsNullOrEmpty(_groupName)) { AddModuleMessage(Localizer["Message.Required.GroupName"], MessageType.Warning); await ScrollToPageTop(); return; } SiteGroup siteGroup = null; if (_siteGroupId == -1) { siteGroup = new SiteGroup { Name = _groupName, Type = _groupType, PrimarySiteId = _siteId, Synchronize = false }; siteGroup = await SiteGroupService.AddSiteGroupAsync(siteGroup); } else { siteGroup = _siteGroups.FirstOrDefault(item => item.SiteGroupId == _siteGroupId); if (siteGroup != null) { siteGroup.Name = _groupName; siteGroup.Type = _groupType; siteGroup.PrimarySiteId = (_primary == "True") ? _siteId : siteGroup.PrimarySiteId; siteGroup = await SiteGroupService.UpdateSiteGroupAsync(siteGroup); } else { siteGroup = null; } } if (siteGroup != null) { if (_siteId != -1) { var siteGroupMember = await SiteGroupMemberService.GetSiteGroupMemberAsync(_siteId, siteGroup.SiteGroupId); if (siteGroupMember == null) { siteGroupMember = new SiteGroupMember { SiteGroupId = siteGroup.SiteGroupId, SiteId = _siteId }; await SiteGroupMemberService.AddSiteGroupMemberAsync(siteGroupMember); } else { siteGroupMember.SynchronizedOn = string.IsNullOrEmpty(_synchronized) ? null : siteGroupMember.SynchronizedOn; await SiteGroupMemberService.UpdateSiteGroupMemberAsync(siteGroupMember); } } if (siteGroup.Type == SiteGroupTypes.Synchronization) { // 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); } } await LoadSiteGroups(); } } private async Task CancelSiteGroupMember() { _groupName = ""; await LoadSiteGroups(); } private async Task DeleteSiteGroupMember() { if (_siteGroupId != -1) { var siteGroupMember = await SiteGroupMemberService.GetSiteGroupMemberAsync(PageState.Site.SiteId, _siteGroupId); if (siteGroupMember != null) { await SiteGroupMemberService.DeleteSiteGroupMemberAsync(siteGroupMember.SiteGroupId); } var siteGroupMembers = await SiteGroupMemberService.GetSiteGroupMembersAsync(-1, _siteGroupId); if (!siteGroupMembers.Any()) { await SiteGroupService.DeleteSiteGroupAsync(_siteGroupId); } await LoadSiteGroups(); } } private async Task ResetSiteGroupMember() { _synchronized = ""; } }