resolve issue with host setting overrides

This commit is contained in:
sbwalker
2025-04-30 13:46:52 -04:00
parent dc926bf838
commit 753ab3bdd7
5 changed files with 23 additions and 18 deletions

View File

@ -40,7 +40,7 @@ namespace Oqtane.Infrastructure
log += "Processing Notifications For Site: " + site.Name + "<br />"; log += "Processing Notifications For Site: " + site.Name + "<br />";
// get site settings // get site settings
List<Setting> sitesettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId).ToList(); List<Setting> sitesettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId, EntityNames.Host, -1).ToList();
Dictionary<string, string> settings = GetSettings(sitesettings); Dictionary<string, string> settings = GetSettings(sitesettings);
if (!site.IsDeleted && (!settings.ContainsKey("SMTPEnabled") || settings["SMTPEnabled"] == "True")) if (!site.IsDeleted && (!settings.ContainsKey("SMTPEnabled") || settings["SMTPEnabled"] == "True"))
{ {

View File

@ -39,7 +39,7 @@ namespace Oqtane.Infrastructure
var sitesettings = cache.GetOrCreate(Constants.HttpContextSiteSettingsKey + alias.SiteKey, entry => var sitesettings = cache.GetOrCreate(Constants.HttpContextSiteSettingsKey + alias.SiteKey, entry =>
{ {
var settingRepository = context.RequestServices.GetService(typeof(ISettingRepository)) as ISettingRepository; 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); .ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
}); });
context.Items.Add(Constants.HttpContextSiteSettingsKey, sitesettings); context.Items.Add(Constants.HttpContextSiteSettingsKey, sitesettings);

View File

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Oqtane.Models; using Oqtane.Models;
using Oqtane.Shared;
namespace Oqtane.Repository namespace Oqtane.Repository
{ {
@ -7,6 +8,7 @@ namespace Oqtane.Repository
{ {
IEnumerable<Setting> GetSettings(string entityName); IEnumerable<Setting> GetSettings(string entityName);
IEnumerable<Setting> GetSettings(string entityName, int entityId); IEnumerable<Setting> GetSettings(string entityName, int entityId);
IEnumerable<Setting> GetSettings(string entityName1, int entityId1, string entityName2, int entityId2);
Setting AddSetting(Setting setting); Setting AddSetting(Setting setting);
Setting UpdateSetting(Setting setting); Setting UpdateSetting(Setting setting);
Setting GetSetting(string entityName, int settingId); Setting GetSetting(string entityName, int settingId);

View File

@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Oqtane.Infrastructure; using Oqtane.Infrastructure;
@ -39,24 +39,27 @@ namespace Oqtane.Repository
public IEnumerable<Setting> GetSettings(string entityName, int entityId) public IEnumerable<Setting> GetSettings(string entityName, int entityId)
{ {
var settings = GetSettings(entityName).ToList(); return GetSettings(entityName).Where(item => item.EntityId == entityId);
if (entityName == EntityNames.Site) }
public IEnumerable<Setting> 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 setting1 = settings1.FirstOrDefault(item => item.SettingName == setting2.SettingName);
var hostsettings = GetSettings(EntityNames.Host); if (setting1 == null)
foreach (var hostsetting in hostsettings)
{ {
if (settings.Any(item => item.SettingName == hostsetting.SettingName)) settings1.Add(new Setting { EntityName = entityName1, EntityId = entityId1, SettingName = setting2.SettingName, SettingValue = setting2.SettingValue, IsPrivate = setting2.IsPrivate });
{ }
settings.First(item => item.SettingName == hostsetting.SettingName).SettingValue = hostsetting.SettingValue; else
} {
else setting1.SettingValue = setting2.SettingValue;
{ setting1.IsPrivate = setting2.IsPrivate;
settings.Add(new Setting { SettingId = -1, EntityName = entityName, EntityId = entityId, SettingName = hostsetting.SettingName, SettingValue = hostsetting.SettingValue, IsPrivate = hostsetting.IsPrivate });
}
} }
} }
return settings.Where(item => item.EntityId == entityId); return settings1;
} }
public Setting AddSetting(Setting setting) public Setting AddSetting(Setting setting)

View File

@ -111,7 +111,7 @@ namespace Oqtane.Services
if (site != null && site.SiteId == alias.SiteId) if (site != null && site.SiteId == alias.SiteId)
{ {
// site settings // 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); .ToDictionary(setting => setting.SettingName, setting => (setting.IsPrivate ? _private : "") + setting.SettingValue);
// populate file extensions // populate file extensions