Merge pull request #5727 from sbwalker/dev

fix #5708 - resolve issue saving settings
This commit is contained in:
Shaun Walker
2025-10-19 13:34:39 -04:00
committed by GitHub
2 changed files with 28 additions and 30 deletions

View File

@ -434,11 +434,26 @@ namespace Oqtane.Services
foreach (KeyValuePair<string, string> kvp in settings)
{
var setting = new Setting();
setting.SettingId = 0;
setting.EntityName = entityName;
setting.EntityId = entityId;
setting.SettingName = kvp.Key;
setting.SettingValue = kvp.Value;
setting.IsPrivate = true;
// manage settings modified with SetSetting method
if (setting.SettingValue.StartsWith("[Private]"))
{
setting.SettingValue = setting.SettingValue.Substring(9);
setting.IsPrivate = true;
setting.SettingId = -1; // indicates IsPrivate was explicitly set
}
if (setting.SettingValue.StartsWith("[Public]"))
{
setting.SettingValue = setting.SettingValue.Substring(8);
setting.IsPrivate = false;
setting.SettingId = -1; // indicates IsPrivate was explicitly set
}
settingsList.Add(setting);
}

View File

@ -16,8 +16,6 @@ using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.Extensions.Options;
using System.IO;
using System.Text.RegularExpressions;
using Oqtane.Migrations.Tenant;
using Google.Protobuf.WellKnownTypes;
using System;
namespace Oqtane.Controllers
@ -220,39 +218,24 @@ namespace Oqtane.Controllers
var existingSettings = _settings.GetSettings(entityName, entityId).ToList();
foreach (Setting setting in settings)
{
bool modified = false;
// manage settings modified with SetSetting method
if (setting.SettingValue.StartsWith("[Private]"))
Setting existing = existingSettings.FirstOrDefault(item => item.SettingName.Equals(setting.SettingName, StringComparison.OrdinalIgnoreCase));
if (existing == null)
{
modified = true;
setting.IsPrivate = true;
setting.SettingValue = setting.SettingValue.Substring(9);
}
if (setting.SettingValue.StartsWith("[Public]"))
{
modified = true;
setting.IsPrivate = false;
setting.SettingValue = setting.SettingValue.Substring(8);
}
Setting existingSetting = existingSettings.FirstOrDefault(item => item.SettingName.Equals(setting.SettingName, StringComparison.OrdinalIgnoreCase));
if (existingSetting == null)
{
_settings.AddSetting(setting);
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Create);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Created {Setting}", setting);
existing = _settings.AddSetting(setting);
AddSyncEvent(existing.EntityName, existing.EntityId, existing.SettingId, SyncEventActions.Create);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Created {Setting}", existing);
}
else
{
if (existingSetting.SettingValue != setting.SettingValue || (modified && existingSetting.IsPrivate != setting.IsPrivate))
// note that SettingId will pnly be 0 if the Settings were converted from a Dictionary in the SettingService
if (existing.SettingValue != setting.SettingValue || (existing.IsPrivate != setting.IsPrivate && setting.SettingId != 0))
{
existingSetting.SettingValue = setting.SettingValue;
existingSetting.IsPrivate = setting.IsPrivate;
_settings.UpdateSetting(existingSetting);
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Update);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", setting);
existing.SettingValue = setting.SettingValue;
existing.IsPrivate = setting.IsPrivate;
existing = _settings.UpdateSetting(existing);
AddSyncEvent(existing.EntityName, existing.EntityId, existing.SettingId, SyncEventActions.Update);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", existing);
}
}
}