using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Saxonite.Net.Core.Web.Online.Models; using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.Controllers; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Saxonite.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Saxonite.Net.Standard.Base.App; using MailKit; using Org.BouncyCastle.Asn1.Mozilla; using Microsoft.Extensions.Primitives; using Saxonite.Net.Standard.Base.Data; namespace Saxonite.Net.Core.Web.Online.Controllers { //======================================================================= // Online Ajax Controller - User Config. //======================================================================= partial class AccountController { //------------------------------------------------------------------- // Data definitions. //------------------------------------------------------------------- // Update User Config. //------------------------------------------------------------------- private class AjaxResponse_UserConfigData : AjaxResponse_Data { // Construction. public AjaxResponse_UserConfigData(SaxModel_Online model) : base(model) { } } // Ajax request. [HttpPost] [Route("UserConfig/Ajax/Update")] public IActionResult UpdateUserConfig(SaxModel_Online model) { String fn = GetType().Name + ".UpdateUserConfig"; AjaxResponse_UserConfigData responseData = new AjaxResponse_UserConfigData(model); String messageTitle = Localiser["caption.user.config"]; // Validate session and referrer. if (!ValidReferer) return Forbid(); if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); RefreshModel(model); // Record disposable items as they are created so all can be disposed when needed. using (DisposableCollection disposableItems = new DisposableCollection()) { // Retrieve User Config. Dictionary userConfigs = new Dictionary(); // Update user's configuration. foreach (String key in Request.Form.Keys) { StringValues formValue = ""; Request.Form.TryGetValue(key, out formValue); SaLogger.Debug(fn + " Form data. Key: " + key + ". Value: " + formValue); if (key.EqualsCI("HideProfileEligibilityInfo")) { SaxUserConfig userConfig = RefreshUserConfig(Sax.UserConfigType.Online_Profile, userConfigs); if (userConfig != null) { disposableItems.Add(userConfig); SessionData_Online.UserConfig.Profile.Eligibility.HideInfo = StringUtil.ToBool(formValue); userConfig.ConfigData = SaxConfigData.ProfileData.ToXml(SessionData_Online.UserConfig.Profile); } } } // Store configuration. foreach (SaxUserConfig userConfig in userConfigs.Values) { if (!SysId.IsValid(userConfig.Id)) { // Add new configuration. if (!AccountMgr.InsertUserConfig(userConfig, DbUpdateInfo)) SaLogger.Warn(fn + " Failed to insert User Config: " + AccountMgr.ErrorStateMessage); } else { // Update existing configuration. if (!AccountMgr.UpdateUserConfig(userConfig, DbUpdateInfo)) SaLogger.Warn(fn + " Failed to update User Config: " + AccountMgr.ErrorStateMessage); } } } // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- /// /// Retrieve the corresponding User Config if previously stored, otherwise create. /// private SaxUserConfig RefreshUserConfig(Sax.UserConfigType configType, Dictionary userConfigs) { // Check if Config is already in cache. if (userConfigs.ContainsKey(configType)) return userConfigs.GetValueOrDefault(configType, null); // Retrieve user config. SaxUserConfig userConfig = AccountMgr.GetUserConfig(SessionUserAccountId, configType); if (userConfig == null) { // Configuration doesn't currently exist. userConfig = AccountMgr.CreateUserConfig(SessionUserAccountId, configType); } else { // User Configuration already exists. // Refresh configuration in case updated elsewhere. switch (configType) { case Sax.UserConfigType.Online_Profile: SessionData_Online.UserConfig.Profile = SaxConfigData.ProfileData.FromXml(userConfig.ConfigData); break; } } userConfigs.Add(userConfig.ConfigType, userConfig); return userConfig; } //------------------------------------------------------------------- } //======================================================================= }