using System; using Oqtane.Models; using System.Threading.Tasks; using System.Net.Http; using System.Linq; using System.Collections.Generic; using Oqtane.Documentation; using Oqtane.Shared; namespace Oqtane.Services { [PrivateApi("Don't show in the documentation, as everything should use the Interface")] public class SettingService : ServiceBase, ISettingService { private readonly SiteState _siteState; public SettingService(HttpClient http, SiteState siteState) : base(http) { _siteState = siteState; } private string Apiurl => CreateApiUrl("Setting", _siteState.Alias); public async Task> GetTenantSettingsAsync() { return await GetSettingsAsync(EntityNames.Tenant, -1); } public async Task UpdateTenantSettingsAsync(Dictionary tenantSettings) { await UpdateSettingsAsync(tenantSettings, EntityNames.Tenant, -1); } public async Task> GetSiteSettingsAsync(int siteId) { return await GetSettingsAsync(EntityNames.Site, siteId); } public async Task UpdateSiteSettingsAsync(Dictionary siteSettings, int siteId) { await UpdateSettingsAsync(siteSettings, EntityNames.Site, siteId); } public async Task> GetPageSettingsAsync(int pageId) { return await GetSettingsAsync(EntityNames.Page, pageId); } public async Task UpdatePageSettingsAsync(Dictionary pageSettings, int pageId) { await UpdateSettingsAsync(pageSettings, EntityNames.Page, pageId); } public async Task> GetPageModuleSettingsAsync(int pageModuleId) { return await GetSettingsAsync(EntityNames.PageModule, pageModuleId); } public async Task UpdatePageModuleSettingsAsync(Dictionary pageModuleSettings, int pageModuleId) { await UpdateSettingsAsync(pageModuleSettings, EntityNames.PageModule, pageModuleId); } public async Task> GetModuleSettingsAsync(int moduleId) { return await GetSettingsAsync(EntityNames.Module, moduleId); } public async Task UpdateModuleSettingsAsync(Dictionary moduleSettings, int moduleId) { await UpdateSettingsAsync(moduleSettings, EntityNames.Module, moduleId); } public async Task> GetUserSettingsAsync(int userId) { return await GetSettingsAsync(EntityNames.User, userId); } public async Task UpdateUserSettingsAsync(Dictionary userSettings, int userId) { await UpdateSettingsAsync(userSettings, EntityNames.User, userId); } public async Task> GetFolderSettingsAsync(int folderId) { return await GetSettingsAsync( EntityNames.Folder, folderId); } public async Task UpdateFolderSettingsAsync(Dictionary folderSettings, int folderId) { await UpdateSettingsAsync(folderSettings, EntityNames.Folder, folderId); } public async Task> GetSettingsAsync(string entityName, int entityId) { var dictionary = new Dictionary(); var settings = await GetJsonAsync>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); foreach(Setting setting in settings.OrderBy(item => item.SettingName).ToList()) { dictionary.Add(setting.SettingName, setting.SettingValue); } return dictionary; } public async Task UpdateSettingsAsync(Dictionary settings, string entityName, int entityId) { var settingsList = await GetJsonAsync>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); foreach (KeyValuePair kvp in settings) { Setting setting = settingsList.FirstOrDefault(item => item.SettingName.Equals(kvp.Key,StringComparison.OrdinalIgnoreCase)); if (setting == null) { setting = new Setting(); setting.EntityName = entityName; setting.EntityId = entityId; setting.SettingName = kvp.Key; setting.SettingValue = kvp.Value; setting = await AddSettingAsync(setting); } else { if (setting.SettingValue != kvp.Value) { setting.SettingValue = kvp.Value; setting = await UpdateSettingAsync(setting); } } } } public async Task GetSettingAsync(int settingId) { return await GetJsonAsync($"{Apiurl}/{settingId}"); } public async Task AddSettingAsync(Setting setting) { return await PostJsonAsync(Apiurl, setting); } public async Task UpdateSettingAsync(Setting setting) { return await PutJsonAsync($"{Apiurl}/{setting.SettingId}", setting); } public async Task DeleteSettingAsync(int settingId) { await DeleteAsync($"{Apiurl}/{settingId}"); } public string GetSetting(Dictionary settings, string settingName, string defaultValue) { string value = defaultValue; if (settings != null && settings.ContainsKey(settingName)) { value = settings[settingName]; } return value; } public Dictionary SetSetting(Dictionary settings, string settingName, string settingValue) { if (settings == null) { settings = new Dictionary(); } if (settings.ContainsKey(settingName)) { settings[settingName] = settingValue; } else { settings.Add(settingName, settingValue); } return settings; } } }