diff --git a/SaxoniteCoreWeb/Base/Consoles/SaxActivityConsole_Web.cs b/SaxoniteCoreWeb/Base/Consoles/SaxActivityConsole_Web.cs index 74b13e6..34607e5 100644 --- a/SaxoniteCoreWeb/Base/Consoles/SaxActivityConsole_Web.cs +++ b/SaxoniteCoreWeb/Base/Consoles/SaxActivityConsole_Web.cs @@ -227,7 +227,7 @@ namespace Saxonite.Net.Core.Web.Base.Consoles SysId organisationId = new SysId(values.GetLong(colOrganisationId.DataName)); String organisation = values.GetString(colOrganisation.DataName); SysId authorId = new SysId(values.GetLong(colAuthorId.DataName)); - String author = values.GetString(colAuthor.DataName); + String author = Internals.ActivityMgr.GetArticleDataValue(colAuthor, values).ToString(); String headline = values.GetString(colHeadline.DataName); String summary = values.GetString(colSummary.DataName); SysId sportId = new SysId(values.GetLong(colSportId.DataName)); diff --git a/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs b/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs index a23f6fd..beb87a3 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/ActivityController-Ajax.cs @@ -15,6 +15,7 @@ using Saxonite.Net.Standard.Base.Mgr; using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Online.Controllers @@ -181,23 +182,35 @@ namespace Saxonite.Net.Core.Web.Online.Controllers // Period. indexContext.EffectiveTo = DateTime.Today; + // Search filter is dissected to extract regions and sports. + String searchFilter = model.Filter.Search.TrimAll(); + List sportIds = ExtractSearchFilterSports(ref searchFilter); + List regionIds = ExtractSearchFilterRegions(ref searchFilter); + // Sport and region combinations. - List sportIds = new List(); - foreach (SysId sportId in sessionData.Profile.Sports.Select(item => item.SportId)) + if (sportIds.IsEmpty()) { - if (sportIds.Contains(sportId)) continue; - sportIds.AddId(sportId); - // Include child sports. - sportIds.AddIds(model.GetChildSports_Active(sportId).Select(item => item.Id)); - model.GetSportCaption(sportId); + // No sports extractd from search filter - default to user's sports. + foreach (SysId sportId in sessionData.Profile.Sports.Select(item => item.SportId)) + { + if (sportIds.Contains(sportId)) continue; + sportIds.AddId(sportId); + // Include child sports. + sportIds.AddIds(model.GetChildSports_Active(sportId).Select(item => item.Id)); + model.GetSportCaption(sportId); + } + } + if (regionIds.IsEmpty()) + { + // No regions extracted from search filter - default to user's region(s). + regionIds.AddId(sessionData.User.RegionIdProvince); + if (regionIds.IsEmpty()) + regionIds.AddId(sessionData.User.RegionIdCountry); } foreach (SysId sportId in sportIds) { - // Regions. - if (SysId.IsValid(sessionData.User.RegionIdProvince)) - indexContext.SportRegionIdsIncluded.Add(new SaxActivityIndex.SportRegionIds(sportId, sessionData.User.RegionIdProvince)); - else if (SysId.IsValid(sessionData.User.RegionIdCountry)) - indexContext.SportRegionIdsIncluded.Add(new SaxActivityIndex.SportRegionIds(sportId, sessionData.User.RegionIdCountry)); + foreach (SysId regionId in regionIds) + indexContext.SportRegionIdsIncluded.Add(new SaxActivityIndex.SportRegionIds(sportId, regionId)); } // Populate activities. @@ -236,6 +249,42 @@ namespace Saxonite.Net.Core.Web.Online.Controllers return Json(responseData); } + //------------------------------------------------------------------- + /// Extract Sports from activity search filter. + private List ExtractSearchFilterSports(ref string searchFilter) + { + List sportIds = new List(); + if (StringUtil.IsEmpty(searchFilter)) return sportIds; + foreach (SaxSport.Data sport in DataCacheConsole.GetActiveSports()) + { + Regex reSport = new Regex("\\b" + Regex.Escape(sport.Name) + "\\b", RegexOptions.IgnoreCase); + Match match = reSport.Match(searchFilter); + if (match.Success) + { + sportIds.Add(sport.Id); + searchFilter = reSport.Replace(searchFilter, " ").TrimAll(); + } + } + return sportIds; + } + /// Extract Regions from activity search filter. + private List ExtractSearchFilterRegions(ref string searchFilter) + { + List regionIds = new List(); + if (StringUtil.IsEmpty(searchFilter)) return regionIds; + foreach (SaxRegion.Data region in DataCacheConsole.GetActiveRegions()) + { + Regex reRegion = new Regex("\\b" + Regex.Escape(region.Name) + "\\b", RegexOptions.IgnoreCase); + Match match = reRegion.Match(searchFilter); + if (match.Success) + { + regionIds.Add(region.Id); + searchFilter = reRegion.Replace(searchFilter, " ").TrimAll(); + } + } + return regionIds; + } + //------------------------------------------------------------------- // Activity Info //------------------------------------------------------------------- diff --git a/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs b/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs index 0ab3706..7ebdcd3 100644 --- a/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs +++ b/SaxoniteCoreWebOnline/Online/Controllers/ArticleController-Ajax.cs @@ -135,9 +135,9 @@ namespace Saxonite.Net.Core.Web.Online.Controllers { if (viewCount <= 0) return; data.Feedback = new ArticleData_List.FeedbackData(); - data.Feedback.Summary = viewCount.ToString(); + data.Feedback.Summary = feedbackCount.ToString() + "/" + viewCount.ToString(); if (feedbackCount > 0) - data.Feedback.Summary = feedbackAverage.ToString("N1") + " " + feedbackCount.ToString() + "/" + data.Feedback.Summary; + data.Feedback.Summary = feedbackAverage.ToString("N1") + " " + data.Feedback.Summary; data.Feedback.ViewCount = viewCount; data.Feedback.FeedbackCount = feedbackCount; data.Feedback.FeedbackAverage = feedbackAverage.ToString("N1"); diff --git a/SaxoniteCoreWebOnline/Online/Models/Model_Activity.cs b/SaxoniteCoreWebOnline/Online/Models/Model_Activity.cs index 88f939c..1bcf007 100644 --- a/SaxoniteCoreWebOnline/Online/Models/Model_Activity.cs +++ b/SaxoniteCoreWebOnline/Online/Models/Model_Activity.cs @@ -26,7 +26,7 @@ namespace Saxonite.Net.Core.Web.Online.Models // Activity filter. public class FilterData { - public String Activity { get; set; } + public String Search { get; set; } public String OrganisationId { get; set; } } public FilterData Filter { get; } = new FilterData(); diff --git a/SaxoniteCoreWebOnline/Views/Home/Index.cshtml b/SaxoniteCoreWebOnline/Views/Home/Index.cshtml index 2ea80e8..7598cf4 100644 --- a/SaxoniteCoreWebOnline/Views/Home/Index.cshtml +++ b/SaxoniteCoreWebOnline/Views/Home/Index.cshtml @@ -41,7 +41,7 @@ else {
@Localiser["label.search"]
-
+
} @@ -73,13 +73,12 @@ else
-
-
-
- - -
-
-
@Localiser["label.published"]: 
+
+
+
+
+
-
+
@Localiser["label.published"]: 
diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js index e3ec56e..1cdbbfc 100644 --- a/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js +++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-home.js @@ -44,12 +44,13 @@ let item = activity.item; let $item = activity.$item; if (!item) return; - $item.addClass(item.itemTypeClass);//.toggleClass('sax-activity-reaction-' + item.reaction, !!item.reaction); + $item.addClass(item.itemTypeClass); sax.refreshItemReaction(activity); $('.ActivityOrganisation', $item).text(item.organisation); $('.ActivityAuthor', $item).text(item.author); $('.ActivityCaption', $item).text(item.caption); $('.ActivityBlurb', $item).text(item.blurb); + $('.ActivityAuthor', $item).text(item.author); $('.ActivitySport', $item).text(item.sport); $('.ActivityRegion', $item).text(item.region); $('.ActivityPublishedOn', $item).text(item.publishedOnFmt); @@ -173,6 +174,7 @@ //-------------------------------------------------------------- $(function () { + sax.$pnl.filter = $('.sax-panel-filter').on('input', '#ifFilterSearch', function () { sax.refreshResults(500) }); sax.$pnl.results = $('.sax-panel-results'); var opt = sax.dlgOpts(); diff --git a/SaxoniteStandardBase/Base/App/Sax-Version.cs b/SaxoniteStandardBase/Base/App/Sax-Version.cs index 8dc725b..3ef71bd 100644 --- a/SaxoniteStandardBase/Base/App/Sax-Version.cs +++ b/SaxoniteStandardBase/Base/App/Sax-Version.cs @@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App //------------------------------------------------------------------- public static class Version { - private static String version { get; } = "1.2.5.0"; + private static String version { get; } = "1.2.5.1"; // Retrieve version. public static String GetFullVersion () { return version; } public static String GetAppVersion () @@ -42,6 +42,7 @@ namespace Saxonite.Net.Standard.Base.App //------------------------------------------------------------------- // 1.2.5 20-Apr-2022 Article feedback // - Online Activity/Article feedback 5 stars, summary on Article list/popup. + // - Online Activity filter. // - Admin - User - Sports listed. // 1.2.4 3-Mar-2022 View own articles. // - Online Home page lists own articlesregardless of sport/region.