Files
Saxonite/SaxoniteCoreWebOnline/Online/Controllers/AjaxController-UserConfig.cs
T
2022-11-15 18:20:46 +00:00

136 lines
4.9 KiB
C#

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<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
{
// Retrieve User Config.
Dictionary<Sax.UserConfigType, SaxUserConfig> userConfigs = new Dictionary<Sax.UserConfigType, SaxUserConfig>();
// 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);
}
//-------------------------------------------------------------------
/// <summary>
/// Retrieve the corresponding User Config if previously stored, otherwise create.
/// </summary>
private SaxUserConfig RefreshUserConfig(Sax.UserConfigType configType, Dictionary<Sax.UserConfigType, SaxUserConfig> 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;
}
//-------------------------------------------------------------------
}
//=======================================================================
}