diff --git a/Oqtane.Server/Infrastructure/Jobs/NotificationJob.cs b/Oqtane.Server/Infrastructure/Jobs/NotificationJob.cs
index d65acb0a..bfee3066 100644
--- a/Oqtane.Server/Infrastructure/Jobs/NotificationJob.cs
+++ b/Oqtane.Server/Infrastructure/Jobs/NotificationJob.cs
@@ -40,7 +40,7 @@ namespace Oqtane.Infrastructure
log += "Processing Notifications For Site: " + site.Name + "
";
// get site settings
- List sitesettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId).ToList();
+ List sitesettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId, EntityNames.Host, -1).ToList();
Dictionary settings = GetSettings(sitesettings);
if (!site.IsDeleted && (!settings.ContainsKey("SMTPEnabled") || settings["SMTPEnabled"] == "True"))
{
diff --git a/Oqtane.Server/Infrastructure/Middleware/TenantMiddleware.cs b/Oqtane.Server/Infrastructure/Middleware/TenantMiddleware.cs
index fe0210fd..13b74176 100644
--- a/Oqtane.Server/Infrastructure/Middleware/TenantMiddleware.cs
+++ b/Oqtane.Server/Infrastructure/Middleware/TenantMiddleware.cs
@@ -39,7 +39,7 @@ namespace Oqtane.Infrastructure
var sitesettings = cache.GetOrCreate(Constants.HttpContextSiteSettingsKey + alias.SiteKey, entry =>
{
var settingRepository = context.RequestServices.GetService(typeof(ISettingRepository)) as ISettingRepository;
- return settingRepository.GetSettings(EntityNames.Site, alias.SiteId)
+ return settingRepository.GetSettings(EntityNames.Site, alias.SiteId, EntityNames.Host, -1)
.ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
});
context.Items.Add(Constants.HttpContextSiteSettingsKey, sitesettings);
diff --git a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
index febb7c5c..3708d4cd 100644
--- a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
+++ b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Oqtane.Models;
+using Oqtane.Shared;
namespace Oqtane.Repository
{
@@ -7,6 +8,7 @@ namespace Oqtane.Repository
{
IEnumerable GetSettings(string entityName);
IEnumerable GetSettings(string entityName, int entityId);
+ IEnumerable GetSettings(string entityName1, int entityId1, string entityName2, int entityId2);
Setting AddSetting(Setting setting);
Setting UpdateSetting(Setting setting);
Setting GetSetting(string entityName, int settingId);
diff --git a/Oqtane.Server/Repository/SettingRepository.cs b/Oqtane.Server/Repository/SettingRepository.cs
index 4fc7c70e..fdf57a13 100644
--- a/Oqtane.Server/Repository/SettingRepository.cs
+++ b/Oqtane.Server/Repository/SettingRepository.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
using System.Linq;
-using System.Linq.Expressions;
+using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Oqtane.Infrastructure;
@@ -39,24 +39,27 @@ namespace Oqtane.Repository
public IEnumerable GetSettings(string entityName, int entityId)
{
- var settings = GetSettings(entityName).ToList();
- if (entityName == EntityNames.Site)
+ return GetSettings(entityName).Where(item => item.EntityId == entityId);
+ }
+
+ public IEnumerable GetSettings(string entityName1, int entityId1, string entityName2, int entityId2)
+ {
+ // merge settings from entity2 into entity1
+ var settings1 = GetSettings(entityName1, entityId1).ToList();
+ foreach (var setting2 in GetSettings(entityName2, entityId2))
{
- // site settings can be overridden by host settings
- var hostsettings = GetSettings(EntityNames.Host);
- foreach (var hostsetting in hostsettings)
+ var setting1 = settings1.FirstOrDefault(item => item.SettingName == setting2.SettingName);
+ if (setting1 == null)
{
- if (settings.Any(item => item.SettingName == hostsetting.SettingName))
- {
- settings.First(item => item.SettingName == hostsetting.SettingName).SettingValue = hostsetting.SettingValue;
- }
- else
- {
- settings.Add(new Setting { SettingId = -1, EntityName = entityName, EntityId = entityId, SettingName = hostsetting.SettingName, SettingValue = hostsetting.SettingValue, IsPrivate = hostsetting.IsPrivate });
- }
+ settings1.Add(new Setting { EntityName = entityName1, EntityId = entityId1, SettingName = setting2.SettingName, SettingValue = setting2.SettingValue, IsPrivate = setting2.IsPrivate });
+ }
+ else
+ {
+ setting1.SettingValue = setting2.SettingValue;
+ setting1.IsPrivate = setting2.IsPrivate;
}
}
- return settings.Where(item => item.EntityId == entityId);
+ return settings1;
}
public Setting AddSetting(Setting setting)
diff --git a/Oqtane.Server/Services/SiteService.cs b/Oqtane.Server/Services/SiteService.cs
index 11c624c3..cc0991d8 100644
--- a/Oqtane.Server/Services/SiteService.cs
+++ b/Oqtane.Server/Services/SiteService.cs
@@ -111,7 +111,7 @@ namespace Oqtane.Services
if (site != null && site.SiteId == alias.SiteId)
{
// site settings
- site.Settings = _settings.GetSettings(EntityNames.Site, site.SiteId)
+ site.Settings = _settings.GetSettings(EntityNames.Site, site.SiteId, EntityNames.Host, -1)
.ToDictionary(setting => setting.SettingName, setting => (setting.IsPrivate ? _private : "") + setting.SettingValue);
// populate file extensions