Merge pull request #4509 from sbwalker/dev

improve SettingService
This commit is contained in:
Shaun Walker 2024-08-12 10:20:56 -04:00 committed by GitHub
commit 8ee9aed817
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 66 additions and 19 deletions

View File

@ -179,6 +179,17 @@ namespace Oqtane.Services
/// <returns></returns> /// <returns></returns>
Task UpdateSettingsAsync(Dictionary<string, string> settings, string entityName, int entityId); Task UpdateSettingsAsync(Dictionary<string, string> settings, string entityName, int entityId);
/// <summary>
/// Updates setting for a given entityName and Id
/// </summary>
/// <param name="entityName"></param>
/// <param name="entityId"></param>
/// <param name="settingName"></param>
/// <param name="settingValue"></param>
/// <param name="isPrivate"></param>
/// <returns></returns>
Task AddOrUpdateSettingAsync(string entityName, int entityId, string settingName, string settingValue, bool isPrivate);
/// <summary> /// <summary>
/// Returns a specific setting /// Returns a specific setting
/// </summary> /// </summary>

View File

@ -12,7 +12,7 @@ namespace Oqtane.Services
[PrivateApi("Don't show in the documentation, as everything should use the Interface")] [PrivateApi("Don't show in the documentation, as everything should use the Interface")]
public class SettingService : ServiceBase, ISettingService public class SettingService : ServiceBase, ISettingService
{ {
public SettingService(HttpClient http, SiteState siteState) : base(http, siteState) { } public SettingService(HttpClient http, SiteState siteState) : base(http, siteState) {}
private string Apiurl => CreateApiUrl("Setting"); private string Apiurl => CreateApiUrl("Setting");
@ -134,7 +134,7 @@ namespace Oqtane.Services
public async Task<Dictionary<string, string>> GetSettingsAsync(string entityName, int entityId) public async Task<Dictionary<string, string>> GetSettingsAsync(string entityName, int entityId)
{ {
var dictionary = new Dictionary<string, string>(); var dictionary = new Dictionary<string, string>();
var settings = await GetJsonAsync<List<Setting>>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); var settings = await GetSettingsAsync(entityName, entityId, "");
if (settings != null) if (settings != null)
{ {
foreach (Setting setting in settings.OrderBy(item => item.SettingName).ToList()) foreach (Setting setting in settings.OrderBy(item => item.SettingName).ToList())
@ -147,7 +147,7 @@ namespace Oqtane.Services
public async Task UpdateSettingsAsync(Dictionary<string, string> settings, string entityName, int entityId) public async Task UpdateSettingsAsync(Dictionary<string, string> settings, string entityName, int entityId)
{ {
var settingsList = await GetJsonAsync<List<Setting>>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); var settingsList = await GetSettingsAsync(entityName, entityId, "");
foreach (KeyValuePair<string, string> kvp in settings) foreach (KeyValuePair<string, string> kvp in settings)
{ {
@ -192,14 +192,14 @@ namespace Oqtane.Services
} }
} }
public async Task AddOrUpdateSettingAsync(string entityName, int entityId, string settingName, string settingValue, bool isPrivate)
{
await PutJsonAsync<object>($"{Apiurl}/{entityName}/{entityId}/{settingName}/{settingValue}/{isPrivate}", null);
}
public async Task DeleteSettingAsync(string entityName, int entityId, string settingName) public async Task DeleteSettingAsync(string entityName, int entityId, string settingName)
{ {
var settings = await GetJsonAsync<List<Setting>>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); await DeleteAsync($"{Apiurl}/{entityName}/{entityId}/{settingName}");
var setting = settings.FirstOrDefault(item => item.SettingName == settingName);
if (setting != null)
{
await DeleteAsync($"{Apiurl}/{setting.SettingId}/{entityName}");
}
} }
public async Task<List<Setting>> GetSettingsAsync(string entityName, int entityId, string settingName) public async Task<List<Setting>> GetSettingsAsync(string entityName, int entityId, string settingName)

View File

@ -134,8 +134,7 @@
if (PageState.User != null) if (PageState.User != null)
{ {
// preserve edit mode for authenticated users // preserve edit mode for authenticated users
var userSettings = new Dictionary<string, string> { { "CP-editmode", (PageState.EditMode) ? PageState.Page.PageId.ToString() : "-1" } }; await SettingService.AddOrUpdateSettingAsync(EntityNames.User, PageState.User.UserId, "CP-editmode", (PageState.EditMode) ? PageState.Page.PageId.ToString() : "-1", false);
await SettingService.UpdateUserSettingsAsync(userSettings, PageState.User.UserId);
} }
// preserve other querystring parameters // preserve other querystring parameters

View File

@ -270,9 +270,8 @@
{ {
if (editpageid != -1) if (editpageid != -1)
{ {
// reset edit page // reset edit mode page
var userSettings = new Dictionary<string, string> { { "CP-editmode", "-1" } }; await SettingService.AddOrUpdateSettingAsync(EntityNames.User, user.UserId, "CP-editmode", "-1", false);
await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId);
} }
} }
} }

View File

@ -146,14 +146,52 @@ namespace Oqtane.Controllers
return setting; return setting;
} }
// DELETE api/<controller>/5/xxx // PUT api/<controller>/site/1/settingname/x/false
[HttpDelete("{id}/{entityName}")] [HttpPut("{entityName}/{entityId}/{settingName}/{settingValue}/{isPrivate}")]
public void Delete(string entityName, int id) public void Put(string entityName, int entityId, string settingName, string settingValue, bool isPrivate)
{ {
Setting setting = _settings.GetSetting(entityName, id); if (IsAuthorized(entityName, entityId, PermissionNames.Edit))
{
Setting setting = _settings.GetSetting(entityName, entityId, settingName);
if (setting == null)
{
setting = new Setting();
setting.EntityName = entityName;
setting.EntityId = entityId;
setting.SettingName = settingName;
setting.SettingValue = settingValue;
setting.IsPrivate = isPrivate;
setting = _settings.AddSetting(setting);
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Create);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Created {Setting}", setting);
}
else
{
if (setting.SettingValue != settingValue || setting.IsPrivate != isPrivate)
{
setting.SettingValue = settingValue;
setting.IsPrivate = isPrivate;
setting = _settings.UpdateSetting(setting);
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Update);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Setting Updated {Setting}", setting);
}
}
}
else
{
_logger.Log(LogLevel.Error, this, LogFunction.Update, "User Not Authorized To Add Or Update Setting {EntityName} {EntityId} {SettingName}", entityName, entityId, settingName);
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
}
}
// DELETE api/<controller>/site/1/settingname
[HttpDelete("{entityName}/{entityId}/{settingName}")]
public void Delete(string entityName, int entityId, string settingName)
{
Setting setting = _settings.GetSetting(entityName, entityId, settingName);
if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit)) if (IsAuthorized(setting.EntityName, setting.EntityId, PermissionNames.Edit))
{ {
_settings.DeleteSetting(setting.EntityName, id); _settings.DeleteSetting(setting.EntityName, setting.SettingId);
AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Delete); AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Delete);
_logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting); _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting);
} }