fix #5708 - resolve issue saving settings

This commit is contained in:
sbwalker
2025-10-19 13:34:21 -04:00
parent 7b026c5b14
commit 2be11b52c3
2 changed files with 28 additions and 30 deletions

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);
}
}
}