using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Online.App; using Saxonite.Net.Core.Web.Online.Models; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Bus; using Saxonite.Net.Standard.Base.Consoles; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Online.Controllers { //======================================================================= // Online Activity Controller - Ajax actions only. //======================================================================= public partial class ActivityController : SaxController_Online { //------------------------------------------------------------------- // Construction. public ActivityController(SaxLocaliser localiser, ILogger logger) : base(localiser, logger) { } //------------------------------------------------------------------- // Data definitions. public class ActivityResponseData { public short ItemType { get; set; } public long ItemIdx { get; set; } public String Caption { get; set; } public String Blurb { get; set; } public String Sport { get; set; } public String Region { get; set; } public String PublishedOnFmt{ get; set; } } //------------------------------------------------------------------- // Activities //------------------------------------------------------------------- public class AjaxResponse_ActivityList : AjaxResponse_Base { public List Activities { get; } = new List(); } //------------------------------------------------------------------- [HttpPost] [Route("Activity/Ajax/GetList")] [Route("Activity/Ajax/GetActivityList")] [Route("Activity/Ajax/GetActivities")] public IActionResult Ajax_GetActivityList(Model_Activity model) { String fn = GetType().Name + ".Ajax_GetActivityList"; String messageTitle = Localiser["activity.caption.activities"]; AjaxResponse_ActivityList responseData = new AjaxResponse_ActivityList(); // Validate session and referrer. if (!ValidReferer) return Forbid(); if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); SaxSessionData_Online sessionData = SessionData_Online; // User context. SaxActivityConsole.IndexContext indexContext = new SaxActivityConsole.IndexContext(); // Regions. if (SysId.IsValid(sessionData.User.RegionIdProvince)) indexContext.RegionIds.Add(sessionData.User.RegionIdProvince); else if (SysId.IsValid(sessionData.User.RegionIdCountry)) indexContext.RegionIds.Add(sessionData.User.RegionIdCountry); // Sports. indexContext.SportIds.AddRange(sessionData.Profile.Sports.Select(item => item.SportId)); // Populate activities. SaxActivityConsole.IndexResults indexResults = ActivityConsole.QueryIndex(indexContext); foreach (SaxActivityConsole.IndexResults.ActivityData itemData in indexResults.Items) { ActivityResponseData activityData = new ActivityResponseData(); activityData.ItemType = itemData.ItemId.Type; // ToDo Mask activity index Id with cross-reference stored in session data. activityData.ItemIdx = SysId.ToLong(itemData.ItemId.Id); activityData.Caption = itemData.Caption; activityData.Blurb = itemData.Blurb; activityData.Sport = Localiser.GetSportName(itemData.SportId, itemData.SportName); activityData.Region = Localiser.GetRegionName(itemData.RegionId, itemData.RegionName); activityData.PublishedOnFmt = Localiser.FormatDate(itemData.EffectiveOn); responseData.Activities.Add(activityData); } // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- } //======================================================================= }