| @ -179,6 +179,17 @@ namespace Oqtane.Services | ||||
|         /// <returns></returns> | ||||
|         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> | ||||
|         /// Returns a specific setting | ||||
|         /// </summary> | ||||
|  | ||||
| @ -12,7 +12,7 @@ namespace Oqtane.Services | ||||
|     [PrivateApi("Don't show in the documentation, as everything should use the Interface")] | ||||
|     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"); | ||||
|  | ||||
| @ -134,7 +134,7 @@ namespace Oqtane.Services | ||||
|         public async Task<Dictionary<string, string>> GetSettingsAsync(string entityName, int entityId) | ||||
|         { | ||||
|             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) | ||||
|             { | ||||
|                 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) | ||||
|         { | ||||
|             var settingsList = await GetJsonAsync<List<Setting>>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); | ||||
|             var settingsList = await GetSettingsAsync(entityName, entityId, ""); | ||||
|  | ||||
|             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) | ||||
|         { | ||||
|             var settings = await GetJsonAsync<List<Setting>>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); | ||||
|             var setting = settings.FirstOrDefault(item => item.SettingName == settingName); | ||||
|             if (setting != null) | ||||
|             { | ||||
|                 await DeleteAsync($"{Apiurl}/{setting.SettingId}/{entityName}"); | ||||
|             } | ||||
|             await DeleteAsync($"{Apiurl}/{entityName}/{entityId}/{settingName}"); | ||||
|         } | ||||
|  | ||||
|         public async Task<List<Setting>> GetSettingsAsync(string entityName, int entityId, string settingName) | ||||
|  | ||||
| @ -134,8 +134,7 @@ | ||||
|             if (PageState.User != null)  | ||||
|             { | ||||
|                 // preserve edit mode for authenticated users | ||||
|                 var userSettings = new Dictionary<string, string> { { "CP-editmode", (PageState.EditMode) ? PageState.Page.PageId.ToString() : "-1" } }; | ||||
|                 await SettingService.UpdateUserSettingsAsync(userSettings, PageState.User.UserId); | ||||
|                 await SettingService.AddOrUpdateSettingAsync(EntityNames.User, PageState.User.UserId, "CP-editmode", (PageState.EditMode) ? PageState.Page.PageId.ToString() : "-1", false); | ||||
|             } | ||||
|  | ||||
|             // preserve other querystring parameters | ||||
|  | ||||
| @ -270,9 +270,8 @@ | ||||
|                     { | ||||
|                         if (editpageid != -1) | ||||
|                         { | ||||
|                             // reset edit page | ||||
|                             var userSettings = new Dictionary<string, string> { { "CP-editmode", "-1" } }; | ||||
|                             await SettingService.UpdateUserSettingsAsync(userSettings, user.UserId); | ||||
|                             // reset edit mode page | ||||
|                             await SettingService.AddOrUpdateSettingAsync(EntityNames.User, user.UserId, "CP-editmode", "-1", false); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
| @ -146,14 +146,52 @@ namespace Oqtane.Controllers | ||||
|             return setting; | ||||
|         } | ||||
|  | ||||
|         // DELETE api/<controller>/5/xxx | ||||
|         [HttpDelete("{id}/{entityName}")] | ||||
|         public void Delete(string entityName, int id) | ||||
|         // PUT api/<controller>/site/1/settingname/x/false | ||||
|         [HttpPut("{entityName}/{entityId}/{settingName}/{settingValue}/{isPrivate}")] | ||||
|         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)) | ||||
|             { | ||||
|                 _settings.DeleteSetting(setting.EntityName, id); | ||||
|                 _settings.DeleteSetting(setting.EntityName, setting.SettingId); | ||||
|                 AddSyncEvent(setting.EntityName, setting.EntityId, setting.SettingId, SyncEventActions.Delete); | ||||
|                 _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Setting Deleted {Setting}", setting); | ||||
|             } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker