using Oqtane.Models; using System.Threading.Tasks; using System.Net.Http; using System.Linq; using Microsoft.AspNetCore.Components; using System.Collections.Generic; using Oqtane.Shared; namespace Oqtane.Services { public class SettingService : ServiceBase, ISettingService { private readonly SiteState _siteState; private readonly NavigationManager _navigationManager; public SettingService(HttpClient http, SiteState siteState, NavigationManager navigationManager) : base(http) { _siteState = siteState; _navigationManager = navigationManager; } private string Apiurl { get { return CreateApiUrl(_siteState.Alias, _navigationManager.Uri, "Setting"); } } 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.ToString()}"); 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.ToString()}"); foreach (KeyValuePair kvp in settings) { Setting setting = settingsList.FirstOrDefault(item => item.SettingName == kvp.Key); 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.ToString()}"); } public async Task AddSettingAsync(Setting setting) { return await PostJsonAsync(Apiurl, setting); } public async Task UpdateSettingAsync(Setting setting) { return await PutJsonAsync($"{Apiurl}/{setting.SettingId.ToString()}", setting); } public async Task DeleteSettingAsync(int settingId) { await DeleteAsync($"{Apiurl}/{settingId.ToString()}"); } public string GetSetting(Dictionary settings, string settingName, string defaultValue) { string value = defaultValue; if (settings.ContainsKey(settingName)) { value = settings[settingName]; } return value; } public Dictionary SetSetting(Dictionary settings, string settingName, string settingValue) { if (settings.ContainsKey(settingName)) { settings[settingName] = settingValue; } else { settings.Add(settingName, settingValue); } return settings; } } }