fix #5708 - resolve issue saving settings
This commit is contained in:
@@ -434,11 +434,26 @@ namespace Oqtane.Services
|
|||||||
foreach (KeyValuePair<string, string> kvp in settings)
|
foreach (KeyValuePair<string, string> kvp in settings)
|
||||||
{
|
{
|
||||||
var setting = new Setting();
|
var setting = new Setting();
|
||||||
|
setting.SettingId = 0;
|
||||||
setting.EntityName = entityName;
|
setting.EntityName = entityName;
|
||||||
setting.EntityId = entityId;
|
setting.EntityId = entityId;
|
||||||
setting.SettingName = kvp.Key;
|
setting.SettingName = kvp.Key;
|
||||||
setting.SettingValue = kvp.Value;
|
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);
|
settingsList.Add(setting);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ using Microsoft.AspNetCore.Authentication.Cookies;
|
|||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using Oqtane.Migrations.Tenant;
|
|
||||||
using Google.Protobuf.WellKnownTypes;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Oqtane.Controllers
|
namespace Oqtane.Controllers
|
||||||
@@ -220,39 +218,24 @@ namespace Oqtane.Controllers
|
|||||||
var existingSettings = _settings.GetSettings(entityName, entityId).ToList();
|
var existingSettings = _settings.GetSettings(entityName, entityId).ToList();
|
||||||
foreach (Setting setting in settings)
|
foreach (Setting setting in settings)
|
||||||
{
|
{
|
||||||
bool modified = false;
|
Setting existing = existingSettings.FirstOrDefault(item => item.SettingName.Equals(setting.SettingName, StringComparison.OrdinalIgnoreCase));
|
||||||
|
if (existing == null)
|
||||||
// manage settings modified with SetSetting method
|
|
||||||
if (setting.SettingValue.StartsWith("[Private]"))
|
|
||||||
{
|
{
|
||||||
modified = true;
|
existing = _settings.AddSetting(setting);
|
||||||
setting.IsPrivate = true;
|
AddSyncEvent(existing.EntityName, existing.EntityId, existing.SettingId, SyncEventActions.Create);
|
||||||
setting.SettingValue = setting.SettingValue.Substring(9);
|
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Created {Setting}", existing);
|
||||||
}
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
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;
|
existing.SettingValue = setting.SettingValue;
|
||||||
existingSetting.IsPrivate = setting.IsPrivate;
|
existing.IsPrivate = setting.IsPrivate;
|
||||||
_settings.UpdateSetting(existingSetting);
|
existing = _settings.UpdateSetting(existing);
|
||||||
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Update);
|
AddSyncEvent(existing.EntityName, existing.EntityId, existing.SettingId, SyncEventActions.Update);
|
||||||
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", setting);
|
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", existing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user