@@ -517,7 +518,7 @@
@if (_siteGroupId != -1 && _siteId != -1)
{
- @if (_primary == "False" && _groupType == SiteGroupTypes.Synchronization)
+ @if (_primary == "False" && (_groupType == SiteGroupTypes.Synchronization || _groupType == SiteGroupTypes.Comparison))
{
-
+
@@ -678,7 +670,6 @@
private string _groupName = string.Empty;
private string _groupType = SiteGroupTypes.Synchronization;
private string _primary = "True";
- private string _notify = "True";
private string _synchronized = string.Empty;
private bool _addSiteGroup = false;
private bool _addSiteGroupMember = false;
@@ -1304,7 +1295,6 @@
if (siteGroupMember != null)
{
_primary = (siteGroupMember.SiteGroup.PrimarySiteId == _siteId) ? "True" : "False";
- _notify = siteGroupMember.Notify.ToString();
_synchronized = UtcToLocal(siteGroupMember.SynchronizedOn).ToString();
}
}
@@ -1317,7 +1307,6 @@
if (siteGroupMember != null)
{
_primary = (siteGroupMember.SiteGroup.PrimarySiteId == _siteId) ? "True" : "False";
- _notify = siteGroupMember.Notify.ToString();
_synchronized = UtcToLocal(siteGroupMember.SynchronizedOn).ToString();
}
StateHasChanged();
@@ -1338,29 +1327,33 @@
_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)
{
- if (!string.IsNullOrEmpty(_groupName))
+ siteGroup = new SiteGroup
{
- siteGroup = new SiteGroup
- {
- Name = _groupName,
- Type = _groupType,
- PrimarySiteId = _siteId,
- Synchronize = false
- };
- siteGroup = await SiteGroupService.AddSiteGroupAsync(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 && !string.IsNullOrEmpty(_groupName))
+ if (siteGroup != null)
{
siteGroup.Name = _groupName;
siteGroup.Type = _groupType;
@@ -1375,22 +1368,23 @@
if (siteGroup != null)
{
- var siteGroupMember = await SiteGroupMemberService.GetSiteGroupMemberAsync(_siteId, siteGroup.SiteGroupId);
- if (siteGroupMember == null)
+ if (_siteId != -1)
{
- siteGroupMember = new SiteGroupMember
+ var siteGroupMember = await SiteGroupMemberService.GetSiteGroupMemberAsync(_siteId, siteGroup.SiteGroupId);
+ if (siteGroupMember == null)
{
- SiteGroupId = siteGroup.SiteGroupId,
- SiteId = _siteId,
- Notify = bool.Parse(_notify)
- };
- await SiteGroupMemberService.AddSiteGroupMemberAsync(siteGroupMember);
- }
- else
- {
- siteGroupMember.Notify = bool.Parse(_notify);
- siteGroupMember.SynchronizedOn = string.IsNullOrEmpty(_synchronized) ? null : siteGroupMember.SynchronizedOn;
- await SiteGroupMemberService.UpdateSiteGroupMemberAsync(siteGroupMember);
+ 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)
@@ -1407,11 +1401,6 @@
await LoadSiteGroups();
}
- else
- {
- AddModuleMessage(Localizer["Message.Required.GroupName"], MessageType.Warning);
- await ScrollToPageTop();
- }
}
private async Task CancelSiteGroupMember()
diff --git a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
index 3ea74b8e..b12fb46d 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
@@ -508,7 +508,7 @@
Primary?
- Indicates if the selected site is the primary member of the site group
+ Indicates if the selected member is the primary site of the site group
Name:
@@ -535,17 +535,11 @@
Are You Sure You Wish To Delete This Member From The Site Group?
- Group Name Is Required
+ Site Group Name Is Required
Site Submitted For Synchronization
-
- Notify?
-
-
- Specifies if site administrators should be notified of any synchronization activity
-
Members:
@@ -559,10 +553,10 @@
Type:
- The site group type (ie. synchronization, localization)
+ The site group type (ie. synchronization, comparison, localization)
- The date/time of the last synchronization for the site
+ The date/time when the site was last synchronized
Synchronization
@@ -570,4 +564,7 @@
Localization
+
+ Comparison
+
\ No newline at end of file
diff --git a/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor b/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor
index 91860090..15fe5b3a 100644
--- a/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor
+++ b/Oqtane.Client/Themes/Controls/Theme/ControlPanelInteractive.razor
@@ -35,9 +35,10 @@
- @if (_siteGroups.Any(item => item.Type == SiteGroupTypes.Synchronization))
+ @if (_siteGroups.Any(item => item.Type == SiteGroupTypes.Synchronization || item.Type == SiteGroupTypes.Comparison))
{
-
+
+
}
}
@@ -641,7 +642,7 @@
private async Task SynchronizeSite()
{
- foreach (var group in _siteGroups.Where(item => item.Type == SiteGroupTypes.Synchronization))
+ foreach (var group in _siteGroups.Where(item => item.Type == SiteGroupTypes.Synchronization || item.Type == SiteGroupTypes.Comparison))
{
group.Synchronize = true;
await SiteGroupService.UpdateSiteGroupAsync(group);
diff --git a/Oqtane.Server/Infrastructure/Jobs/SynchronizationJob.cs b/Oqtane.Server/Infrastructure/Jobs/SynchronizationJob.cs
index 6b8c3897..3fb1513b 100644
--- a/Oqtane.Server/Infrastructure/Jobs/SynchronizationJob.cs
+++ b/Oqtane.Server/Infrastructure/Jobs/SynchronizationJob.cs
@@ -53,7 +53,7 @@ namespace Oqtane.Infrastructure
var siteGroups = siteGroupRepository.GetSiteGroups();
// iterate through site groups which need to be synchronized
- foreach (var siteGroup in siteGroups.Where(item => item.Type == SiteGroupTypes.Synchronization && item.Synchronize))
+ foreach (var siteGroup in siteGroups.Where(item => item.Synchronize && (item.Type == SiteGroupTypes.Synchronization || item.Type == SiteGroupTypes.Comparison)))
{
// get data
if (siteGroupMembers == null)
@@ -64,7 +64,8 @@ namespace Oqtane.Infrastructure
}
var aliasName = "https://" + aliases.First(item => item.TenantId == tenantManager.GetTenant().TenantId && item.SiteId == siteGroup.PrimarySiteId && item.IsDefault).Name;
- log += $"Processing Primary Site: {sites.First(item => item.SiteId == siteGroup.PrimarySiteId).Name} - {CreateLink(aliasName)}
";
+ log += (siteGroup.Type == SiteGroupTypes.Synchronization) ? "Synchronizing " : "Comparing ";
+ log += $"Primary Site: {sites.First(item => item.SiteId == siteGroup.PrimarySiteId).Name} - {CreateLink(aliasName)}
";
// get primary site
var primarySite = sites.FirstOrDefault(item => item.SiteId == siteGroup.PrimarySiteId);
@@ -90,14 +91,14 @@ namespace Oqtane.Infrastructure
siteGroupMember.SynchronizedOn = DateTime.MinValue;
}
- // replicate site
- var siteLog = ReplicateSite(provider, tenantManager, settingRepository, siteGroupMember, primarySite, secondarySite);
+ // synchronize site
+ var siteLog = SynchronizeSite(provider, tenantManager, settingRepository, siteGroupMember, primarySite, secondarySite);
// set synchronized on date/time
siteGroupMember.SynchronizedOn = DateTime.UtcNow;
siteGroupMemberRepository.UpdateSiteGroupMember(siteGroupMember);
- log += $"Processed Secondary Site: {secondarySite.Name} - {CreateLink(siteGroupMember.AliasName)}
" + siteLog;
+ log += $"With Secondary Site: {secondarySite.Name} - {CreateLink(siteGroupMember.AliasName)}
" + siteLog;
}
else
{
@@ -119,20 +120,20 @@ namespace Oqtane.Infrastructure
return log;
}
- private string ReplicateSite(IServiceProvider provider, ITenantManager tenantManager, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, Site primarySite, Site secondarySite)
+ private string SynchronizeSite(IServiceProvider provider, ITenantManager tenantManager, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, Site primarySite, Site secondarySite)
{
var log = "";
- // replicate roles/users
- log += ReplicateRoles(provider, settingRepository, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
+ // synchronize roles/users
+ log += SynchronizeRoles(provider, settingRepository, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
- // replicate folders/files
- log += ReplicateFolders(provider, settingRepository, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
+ // synchronize folders/files
+ log += SynchronizeFolders(provider, settingRepository, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
- // replicate pages/modules
- log += ReplicatePages(provider, settingRepository, tenantManager, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
+ // synchronize pages/modules
+ log += SynchronizePages(provider, settingRepository, tenantManager, siteGroupMember, primarySite.SiteId, secondarySite.SiteId);
- // replicate site
+ // synchronize site
if (primarySite.ModifiedOn > siteGroupMember.SynchronizedOn)
{
secondarySite.TimeZoneId = primarySite.TimeZoneId;
@@ -177,23 +178,26 @@ namespace Oqtane.Infrastructure
secondarySite.DeletedBy = primarySite.DeletedBy;
secondarySite.DeletedOn = primarySite.DeletedOn;
- var siteRepository = provider.GetRequiredService
();
- siteRepository.UpdateSite(secondarySite);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ var siteRepository = provider.GetRequiredService();
+ siteRepository.UpdateSite(secondarySite);
+ }
log += Log(siteGroupMember, $"Site Updated: {secondarySite.Name}");
}
// site settings
- log += ReplicateSettings(settingRepository, siteGroupMember, EntityNames.Site, primarySite.SiteId, secondarySite.SiteId);
+ log += SynchronizeSettings(settingRepository, siteGroupMember, EntityNames.Site, primarySite.SiteId, secondarySite.SiteId);
if (siteGroupMember.SynchronizedOn == DateTime.MinValue || !string.IsNullOrEmpty(log))
{
- // clear cache for secondary site if any content was replicated
+ // clear cache for secondary site if any content was Synchronized
var syncManager = provider.GetRequiredService();
var alias = new Alias { TenantId = tenantManager.GetTenant().TenantId, SiteId = secondarySite.SiteId };
syncManager.AddSyncEvent(alias, EntityNames.Site, secondarySite.SiteId, SyncEventActions.Refresh);
}
- if (!string.IsNullOrEmpty(log) && siteGroupMember.Notify)
+ if (!string.IsNullOrEmpty(log) && siteGroupMember.SiteGroup.Type == SiteGroupTypes.Comparison)
{
// send change log to administrators
SendNotifications(provider, secondarySite.SiteId, secondarySite.Name, log);
@@ -213,7 +217,7 @@ namespace Oqtane.Infrastructure
return fileId;
}
- private string ReplicateRoles(IServiceProvider provider, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
+ private string SynchronizeRoles(IServiceProvider provider, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
{
// get roles
var roleRepository = provider.GetRequiredService();
@@ -242,12 +246,18 @@ namespace Oqtane.Infrastructure
if (role == null)
{
- roleRepository.AddRole(secondaryRole);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ roleRepository.AddRole(secondaryRole);
+ }
log += Log(siteGroupMember, $"Role Added: {secondaryRole.Name}");
}
else
{
- roleRepository.UpdateRole(secondaryRole);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ roleRepository.UpdateRole(secondaryRole);
+ }
log += Log(siteGroupMember, $"Role Updated: {secondaryRole.Name}");
secondaryRoles.Remove(role);
}
@@ -257,17 +267,20 @@ namespace Oqtane.Infrastructure
// remove roles in the secondary site which do not exist in the primary site
foreach (var secondaryRole in secondaryRoles.Where(item => !primaryRoles.Select(item => item.Name).Contains(item.Name)))
{
- roleRepository.DeleteRole(secondaryRole.RoleId);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ roleRepository.DeleteRole(secondaryRole.RoleId);
+ }
log += Log(siteGroupMember, $"Role Deleted: {secondaryRole.Name}");
}
// settings
- log += ReplicateSettings(settingRepository, siteGroupMember, EntityNames.Role, primarySiteId, secondarySiteId);
+ log += SynchronizeSettings(settingRepository, siteGroupMember, EntityNames.Role, primarySiteId, secondarySiteId);
return log;
}
- private string ReplicateFolders(IServiceProvider provider, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
+ private string SynchronizeFolders(IServiceProvider provider, ISettingRepository settingRepository, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
{
var folderRepository = provider.GetRequiredService();
var fileRepository = provider.GetRequiredService();
@@ -308,23 +321,29 @@ namespace Oqtane.Infrastructure
secondaryFolder.Capacity = primaryFolder.Capacity;
secondaryFolder.ImageSizes = primaryFolder.ImageSizes;
secondaryFolder.IsSystem = primaryFolder.IsSystem;
- secondaryFolder.PermissionList = ReplicatePermissions(primaryFolder.PermissionList, secondarySiteId);
+ secondaryFolder.PermissionList = SynchronizePermissions(primaryFolder.PermissionList, secondarySiteId);
if (folder == null)
{
- folderRepository.AddFolder(secondaryFolder);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ folderRepository.AddFolder(secondaryFolder);
+ }
log += Log(siteGroupMember, $"Folder Added: {secondaryFolder.Path}");
}
else
{
- folderRepository.UpdateFolder(secondaryFolder);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ folderRepository.UpdateFolder(secondaryFolder);
+ }
log += Log(siteGroupMember, $"Folder Updated: {secondaryFolder.Path}");
secondaryFolders.Remove(folder);
}
}
// folder settings
- log += ReplicateSettings(settingRepository, siteGroupMember, EntityNames.Folder, primaryFolder.FolderId, secondaryFolder.FolderId);
+ log += SynchronizeSettings(settingRepository, siteGroupMember, EntityNames.Folder, primaryFolder.FolderId, secondaryFolder.FolderId);
// get files for folder
var primaryFiles = fileRepository.GetFiles(primaryFolder.FolderId);
@@ -353,14 +372,20 @@ namespace Oqtane.Infrastructure
if (file == null)
{
- fileRepository.AddFile(secondaryFile);
- ReplicateFile(folderRepository, primaryFolder, primaryFile, secondaryFolder, secondaryFile);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ fileRepository.AddFile(secondaryFile);
+ SynchronizeFile(folderRepository, primaryFolder, primaryFile, secondaryFolder, secondaryFile);
+ }
log += Log(siteGroupMember, $"File Added: {CreateLink(siteGroupMember.AliasName + secondaryFolder.Path + secondaryFile.Name)}");
}
else
{
- fileRepository.UpdateFile(secondaryFile);
- ReplicateFile(folderRepository, primaryFolder, primaryFile, secondaryFolder, secondaryFile);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ fileRepository.UpdateFile(secondaryFile);
+ SynchronizeFile(folderRepository, primaryFolder, primaryFile, secondaryFolder, secondaryFile);
+ }
log += Log(siteGroupMember, $"File Updated: {CreateLink(siteGroupMember.AliasName + secondaryFolder.Path + secondaryFile.Name)}");
secondaryFiles.Remove(file);
}
@@ -370,9 +395,12 @@ namespace Oqtane.Infrastructure
// remove files in the secondary site which do not exist in the primary site
foreach (var secondaryFile in secondaryFiles.Where(item => !primaryFiles.Select(item => item.Name).Contains(item.Name)))
{
- fileRepository.DeleteFile(secondaryFile.FileId);
- var secondaryPath = Path.Combine(folderRepository.GetFolderPath(secondaryFolder), secondaryFile.Name);
- System.IO.File.Delete(secondaryPath);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ fileRepository.DeleteFile(secondaryFile.FileId);
+ var secondaryPath = Path.Combine(folderRepository.GetFolderPath(secondaryFolder), secondaryFile.Name);
+ System.IO.File.Delete(secondaryPath);
+ }
log += Log(siteGroupMember, $"File Deleted: {CreateLink(siteGroupMember.AliasName + secondaryFolder.Path + secondaryFile.Name)}");
}
}
@@ -380,14 +408,17 @@ namespace Oqtane.Infrastructure
// remove folders in the secondary site which do not exist in the primary site
foreach (var secondaryFolder in secondaryFolders.Where(item => !primaryFolders.Select(item => item.Path).Contains(item.Path)))
{
- folderRepository.DeleteFolder(secondaryFolder.FolderId);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ folderRepository.DeleteFolder(secondaryFolder.FolderId);
+ }
log += Log(siteGroupMember, $"Folder Deleted: {secondaryFolder.Path}");
}
return log;
}
- private void ReplicateFile(IFolderRepository folderRepository, Folder primaryFolder, Models.File primaryFile, Folder secondaryFolder, Models.File secondaryFile)
+ private void SynchronizeFile(IFolderRepository folderRepository, Folder primaryFolder, Models.File primaryFile, Folder secondaryFolder, Models.File secondaryFile)
{
var primaryPath = Path.Combine(folderRepository.GetFolderPath(primaryFolder), primaryFile.Name);
if (System.IO.File.Exists(primaryPath))
@@ -401,7 +432,7 @@ namespace Oqtane.Infrastructure
}
}
- private string ReplicatePages(IServiceProvider provider, ISettingRepository settingRepository, ITenantManager tenantManager, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
+ private string SynchronizePages(IServiceProvider provider, ISettingRepository settingRepository, ITenantManager tenantManager, SiteGroupMember siteGroupMember, int primarySiteId, int secondarySiteId)
{
var pageRepository = provider.GetRequiredService();
var pageModuleRepository = provider.GetRequiredService();
@@ -464,23 +495,29 @@ namespace Oqtane.Infrastructure
secondaryPage.DeletedBy = primaryPage.DeletedBy;
secondaryPage.DeletedOn = primaryPage.DeletedOn;
secondaryPage.IsDeleted = primaryPage.IsDeleted;
- secondaryPage.PermissionList = ReplicatePermissions(primaryPage.PermissionList, secondarySiteId);
+ secondaryPage.PermissionList = SynchronizePermissions(primaryPage.PermissionList, secondarySiteId);
if (page == null)
{
- secondaryPage = pageRepository.AddPage(secondaryPage);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ secondaryPage = pageRepository.AddPage(secondaryPage);
+ }
log += Log(siteGroupMember, $"Page Added: {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
}
else
{
- secondaryPage = pageRepository.UpdatePage(secondaryPage);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ secondaryPage = pageRepository.UpdatePage(secondaryPage);
+ }
log += Log(siteGroupMember, $"Page Updated: {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
secondaryPages.Remove(page);
}
}
// page settings
- log += ReplicateSettings(settingRepository, siteGroupMember, EntityNames.Page, primaryPage.PageId, secondaryPage.PageId);
+ log += SynchronizeSettings(settingRepository, siteGroupMember, EntityNames.Page, primaryPage.PageId, secondaryPage.PageId);
// modules
if (primaryPageModules == null)
@@ -517,7 +554,7 @@ namespace Oqtane.Infrastructure
secondaryPageModule.Header = primaryPageModule.Header;
secondaryPageModule.Footer = primaryPageModule.Footer;
secondaryPageModule.IsDeleted = primaryPageModule.IsDeleted;
- secondaryPageModule.Module.PermissionList = ReplicatePermissions(primaryPageModule.Module.PermissionList, secondarySiteId);
+ secondaryPageModule.Module.PermissionList = SynchronizePermissions(primaryPageModule.Module.PermissionList, secondarySiteId);
secondaryPageModule.Module.AllPages = false;
secondaryPageModule.Module.IsDeleted = false;
@@ -530,15 +567,21 @@ namespace Oqtane.Infrastructure
if (module == null)
{
// add new module
- module = moduleRepository.AddModule(secondaryPageModule.Module);
- updateContent = true;
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ module = moduleRepository.AddModule(secondaryPageModule.Module);
+ updateContent = true;
+ }
log += Log(siteGroupMember, $"Module Added: {module.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
}
if (module != null)
{
secondaryPageModule.ModuleId = module.ModuleId;
secondaryPageModule.Module = null; // remove tracking
- secondaryPageModule = pageModuleRepository.AddPageModule(secondaryPageModule);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ secondaryPageModule = pageModuleRepository.AddPageModule(secondaryPageModule);
+ }
log += Log(siteGroupMember, $"Module Instance Added: {module.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
secondaryPageModule.Module = module;
}
@@ -548,13 +591,19 @@ namespace Oqtane.Infrastructure
// update existing module
if (primaryPageModule.Module.ModifiedOn > siteGroupMember.SynchronizedOn)
{
- moduleRepository.UpdateModule(secondaryPageModule.Module);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ moduleRepository.UpdateModule(secondaryPageModule.Module);
+ }
updateContent = true;
log += Log(siteGroupMember, $"Module Updated: {secondaryPageModule.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
}
if (primaryPageModule.ModifiedOn > siteGroupMember.SynchronizedOn)
{
- secondaryPageModule = pageModuleRepository.UpdatePageModule(secondaryPageModule);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ secondaryPageModule = pageModuleRepository.UpdatePageModule(secondaryPageModule);
+ }
log += Log(siteGroupMember, $"Module Instance Updated: {secondaryPageModule.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
secondaryPageModules.Remove(pageModule);
}
@@ -573,7 +622,10 @@ namespace Oqtane.Infrastructure
var secondaryModuleContent = ((ISynchronizable)moduleObject).ExtractModule(secondaryPageModule.Module);
if (primaryModuleContent != secondaryModuleContent)
{
- ((ISynchronizable)moduleObject).LoadModule(secondaryPageModule.Module, primaryModuleContent, primaryPageModule.Module.ModuleDefinition.Version);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ ((ISynchronizable)moduleObject).LoadModule(secondaryPageModule.Module, primaryModuleContent, primaryPageModule.Module.ModuleDefinition.Version);
+ }
log += Log(siteGroupMember, $"Module Content Updated: {secondaryPageModule.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
}
}
@@ -586,7 +638,7 @@ namespace Oqtane.Infrastructure
}
// module settings
- log += ReplicateSettings(settingRepository, siteGroupMember, EntityNames.Module, primaryPageModule.ModuleId, secondaryPageModule.ModuleId);
+ log += SynchronizeSettings(settingRepository, siteGroupMember, EntityNames.Module, primaryPageModule.ModuleId, secondaryPageModule.ModuleId);
}
}
@@ -605,7 +657,10 @@ namespace Oqtane.Infrastructure
}
if (!primaryPageModules.Any(item => item.PageId == primaryPageId && item.Module.ModuleDefinitionName == secondaryPageModule.Module.ModuleDefinitionName && item.Title.ToLower() == secondaryPageModule.Title.ToLower()))
{
- pageModuleRepository.DeletePageModule(secondaryPageModule.PageModuleId);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ pageModuleRepository.DeletePageModule(secondaryPageModule.PageModuleId);
+ }
log += Log(siteGroupMember, $"Module Instance Deleted: {secondaryPageModule.Title} - {CreateLink(siteGroupMember.AliasName + secondaryPageModule.Page.Path)}");
}
}
@@ -613,13 +668,16 @@ namespace Oqtane.Infrastructure
// remove pages in the secondary site which do not exist in the primary site
foreach (var secondaryPage in secondaryPages.Where(item => !primaryPages.Select(item => item.Path).Contains(item.Path)))
{
- pageRepository.DeletePage(secondaryPage.PageId);
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization)
+ {
+ pageRepository.DeletePage(secondaryPage.PageId);
+ }
log += Log(siteGroupMember, $"Page Deleted: {CreateLink(siteGroupMember.AliasName + secondaryPage.Path)}");
}
if (siteGroupMember.SynchronizedOn == DateTime.MinValue || !string.IsNullOrEmpty(log))
{
- // clear cache for secondary site if any content was replicated
+ // clear cache for secondary site if any content was Synchronized
var syncManager = provider.GetRequiredService();
var alias = new Alias { TenantId = tenantManager.GetTenant().TenantId, SiteId = secondarySiteId };
syncManager.AddSyncEvent(alias, EntityNames.Site, secondarySiteId, SyncEventActions.Refresh);
@@ -628,7 +686,7 @@ namespace Oqtane.Infrastructure
return log;
}
- private List ReplicatePermissions(List permissionList, int siteId)
+ private List SynchronizePermissions(List permissionList, int siteId)
{
return permissionList.Select(item => new Permission
{
@@ -644,7 +702,7 @@ namespace Oqtane.Infrastructure
}).ToList();
}
- private string ReplicateSettings(ISettingRepository settingRepository, SiteGroupMember siteGroupMember, string entityName, int primaryEntityId, int secondaryEntityId)
+ private string SynchronizeSettings(ISettingRepository settingRepository, SiteGroupMember siteGroupMember, string entityName, int primaryEntityId, int secondaryEntityId)
{
var log = "";
var updated = false;
@@ -661,7 +719,7 @@ namespace Oqtane.Infrastructure
secondarySetting.SettingName = primarySetting.SettingName;
secondarySetting.SettingValue = primarySetting.SettingValue;
secondarySetting.IsPrivate = primarySetting.IsPrivate;
- if (!excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization && !excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
{
settingRepository.AddSetting(secondarySetting);
updated = true;
@@ -673,7 +731,7 @@ namespace Oqtane.Infrastructure
{
secondarySetting.SettingValue = primarySetting.SettingValue;
secondarySetting.IsPrivate = primarySetting.IsPrivate;
- if (!excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization && !excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
{
settingRepository.UpdateSetting(secondarySetting);
updated = true;
@@ -686,7 +744,7 @@ namespace Oqtane.Infrastructure
// any remaining secondary settings need to be deleted
foreach (var secondarySetting in secondarySettings)
{
- if (!excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
+ if (siteGroupMember.SiteGroup.Type == SiteGroupTypes.Synchronization && !excludedSettings.Any(item => item.EntityName == secondarySetting.EntityName && item.SettingName == secondarySetting.SettingName))
{
settingRepository.DeleteSetting(secondarySetting.EntityName, secondarySetting.SettingId);
updated = true;
@@ -715,7 +773,7 @@ namespace Oqtane.Infrastructure
private string Log(SiteGroupMember siteGroupMember, string content)
{
- // not necessary to log initial replication
+ // not necessary to log initial synchronization
if (siteGroupMember.SynchronizedOn != DateTime.MinValue)
{
return content + "
";
diff --git a/Oqtane.Server/Migrations/EntityBuilders/SiteGroupMemberEntityBuilder.cs b/Oqtane.Server/Migrations/EntityBuilders/SiteGroupMemberEntityBuilder.cs
index 92b6cfd2..d5ff717b 100644
--- a/Oqtane.Server/Migrations/EntityBuilders/SiteGroupMemberEntityBuilder.cs
+++ b/Oqtane.Server/Migrations/EntityBuilders/SiteGroupMemberEntityBuilder.cs
@@ -28,7 +28,6 @@ namespace Oqtane.Migrations.EntityBuilders
SiteGroupMemberId = AddAutoIncrementColumn(table, "SiteGroupMemberId");
SiteGroupId = AddIntegerColumn(table, "SiteGroupId");
SiteId = AddIntegerColumn(table, "SiteId");
- Notify = AddBooleanColumn(table, "Notify");
SynchronizedOn = AddDateTimeColumn(table, "SynchronizedOn", true);
AddAuditableColumns(table);
@@ -42,8 +41,6 @@ namespace Oqtane.Migrations.EntityBuilders
public OperationBuilder SiteId { get; set; }
- public OperationBuilder Notify { get; set; }
-
public OperationBuilder SynchronizedOn { get; set; }
}
}
diff --git a/Oqtane.Shared/Models/SiteGroupMember.cs b/Oqtane.Shared/Models/SiteGroupMember.cs
index 0101a4eb..cb572509 100644
--- a/Oqtane.Shared/Models/SiteGroupMember.cs
+++ b/Oqtane.Shared/Models/SiteGroupMember.cs
@@ -20,11 +20,6 @@ namespace Oqtane.Models
///
public int SiteId { get; set; }
- ///
- /// Indicates if the site administrator should be notified of any synchronization activity
- ///
- public bool Notify { get; set; }
-
///
/// The last date/time the site was synchronized
///
diff --git a/Oqtane.Shared/Shared/SiteGroupTypes.cs b/Oqtane.Shared/Shared/SiteGroupTypes.cs
index c1b028a5..55e0f7ff 100644
--- a/Oqtane.Shared/Shared/SiteGroupTypes.cs
+++ b/Oqtane.Shared/Shared/SiteGroupTypes.cs
@@ -3,6 +3,7 @@ namespace Oqtane.Shared
public class SiteGroupTypes
{
public const string Synchronization = "Synchronization";
+ public const string Comparison = "Comparison";
public const string Localization = "Localization";
}
}