Merge pull request #5151 from sbwalker/dev

allow site settings to be overidden at host level
This commit is contained in:
Shaun Walker 2025-03-07 14:15:31 -05:00 committed by GitHub
commit a6e87abf99
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Oqtane.Infrastructure; using Oqtane.Infrastructure;
@ -27,7 +28,7 @@ namespace Oqtane.Repository
{ {
if (IsMaster(entityName)) if (IsMaster(entityName))
{ {
return _master.Setting.Where(item => item.EntityName == entityName); return _master.Setting.Where(item => item.EntityName == entityName).ToList();
} }
else else
{ {
@ -38,13 +39,28 @@ namespace Oqtane.Repository
public IEnumerable<Setting> GetSettings(string entityName, int entityId) public IEnumerable<Setting> GetSettings(string entityName, int entityId)
{ {
var settings = GetSettings(entityName); var settings = GetSettings(entityName).ToList();
if (entityName == EntityNames.Site)
{
// site settings can be overridden by host settings
var hostsettings = GetSettings(EntityNames.Host);
foreach (var hostsetting in hostsettings)
{
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 });
}
}
}
return settings.Where(item => item.EntityId == entityId); return settings.Where(item => item.EntityId == entityId);
} }
public Setting AddSetting(Setting setting) public Setting AddSetting(Setting setting)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(setting.EntityName)) if (IsMaster(setting.EntityName))
{ {
_master.Setting.Add(setting); _master.Setting.Add(setting);
@ -52,6 +68,7 @@ namespace Oqtane.Repository
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
tenant.Setting.Add(setting); tenant.Setting.Add(setting);
tenant.SaveChanges(); tenant.SaveChanges();
} }
@ -61,7 +78,6 @@ namespace Oqtane.Repository
public Setting UpdateSetting(Setting setting) public Setting UpdateSetting(Setting setting)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(setting.EntityName)) if (IsMaster(setting.EntityName))
{ {
_master.Entry(setting).State = EntityState.Modified; _master.Entry(setting).State = EntityState.Modified;
@ -69,6 +85,7 @@ namespace Oqtane.Repository
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
tenant.Entry(setting).State = EntityState.Modified; tenant.Entry(setting).State = EntityState.Modified;
tenant.SaveChanges(); tenant.SaveChanges();
} }
@ -78,33 +95,32 @@ namespace Oqtane.Repository
public Setting GetSetting(string entityName, int settingId) public Setting GetSetting(string entityName, int settingId)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(entityName)) if (IsMaster(entityName))
{ {
return _master.Setting.Find(settingId); return _master.Setting.Find(settingId);
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
return tenant.Setting.Find(settingId); return tenant.Setting.Find(settingId);
} }
} }
public Setting GetSetting(string entityName, int entityId, string settingName) public Setting GetSetting(string entityName, int entityId, string settingName)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(entityName)) if (IsMaster(entityName))
{ {
return _master.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault(); return _master.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault();
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
return tenant.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault(); return tenant.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault();
} }
} }
public void DeleteSetting(string entityName, int settingId) public void DeleteSetting(string entityName, int settingId)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(entityName)) if (IsMaster(entityName))
{ {
Setting setting = _master.Setting.Find(settingId); Setting setting = _master.Setting.Find(settingId);
@ -113,6 +129,7 @@ namespace Oqtane.Repository
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
Setting setting = tenant.Setting.Find(settingId); Setting setting = tenant.Setting.Find(settingId);
tenant.Setting.Remove(setting); tenant.Setting.Remove(setting);
tenant.SaveChanges(); tenant.SaveChanges();
@ -122,7 +139,6 @@ namespace Oqtane.Repository
public void DeleteSettings(string entityName, int entityId) public void DeleteSettings(string entityName, int entityId)
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
if (IsMaster(entityName)) if (IsMaster(entityName))
{ {
IEnumerable<Setting> settings = _master.Setting IEnumerable<Setting> settings = _master.Setting
@ -136,6 +152,7 @@ namespace Oqtane.Repository
} }
else else
{ {
using var tenant = _tenantContextFactory.CreateDbContext();
IEnumerable<Setting> settings = tenant.Setting IEnumerable<Setting> settings = tenant.Setting
.Where(item => item.EntityName == entityName) .Where(item => item.EntityName == entityName)
.Where(item => item.EntityId == entityId); .Where(item => item.EntityId == entityId);