Skip to content

Commit c877dbd

Browse files
author
Binon
committed
Refactored some of the codes, fixed sorting, and new catalogue layout
1 parent a4d9c97 commit c877dbd

File tree

20 files changed

+311
-192
lines changed

20 files changed

+311
-192
lines changed

AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
<PackageReference Include="HtmlSanitizer" Version="6.0.453" />
9090
<PackageReference Include="IdentityModel" Version="4.6.0" />
9191
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.2" />
92-
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.3" />
92+
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.5" />
9393
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
9494
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.36" />
9595
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.36" />

LearningHub.Nhs.WebUI.AutomatedUiTests/LearningHub.Nhs.WebUI.AutomatedUiTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<ItemGroup>
1313
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.14" />
1414
<PackageReference Include="FluentAssertions" Version="6.12.0" />
15-
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.3" />
15+
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.5" />
1616
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.13" />
1717
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
1818
<PackageReference Include="Selenium.Axe" Version="4.0.19" />

LearningHub.Nhs.WebUI/Helpers/UtilityHelper.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ public static class UtilityHelper
2525
{ "article", ResourceTypeEnum.Article },
2626
{ "case", ResourceTypeEnum.Case },
2727
{ "weblink", ResourceTypeEnum.WebLink },
28+
{ "web link", ResourceTypeEnum.WebLink },
2829
{ "audio", ResourceTypeEnum.Audio },
2930
{ "scorm", ResourceTypeEnum.Scorm },
3031
{ "assessment", ResourceTypeEnum.Assessment },
3132
{ "genericfile", ResourceTypeEnum.GenericFile },
33+
{ "file", ResourceTypeEnum.GenericFile },
3234
{ "image", ResourceTypeEnum.Image },
3335
{ "html", ResourceTypeEnum.Html },
3436
{ "moodle", ResourceTypeEnum.Moodle },
37+
{ "catalogue", ResourceTypeEnum.Catalogue },
3538
};
3639

3740
/// <summary>
@@ -146,6 +149,8 @@ public static string GetPrettifiedResourceTypeName(ResourceTypeEnum resourceType
146149
return "HTML";
147150
case ResourceTypeEnum.Moodle:
148151
return "Course";
152+
case ResourceTypeEnum.Catalogue:
153+
return "Catalogue";
149154
default:
150155
return "File";
151156
}
@@ -186,6 +191,8 @@ public static string GetPrettifiedResourceTypeName(ResourceTypeEnum resourceType
186191
return "HTML";
187192
case ResourceTypeEnum.Moodle:
188193
return "Course";
194+
case ResourceTypeEnum.Catalogue:
195+
return "Catalogue";
189196
default:
190197
return "File";
191198
}

LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ public static string GetResourceTypeDesc(ResourceTypeEnum resourceType)
116116
case ResourceTypeEnum.Moodle:
117117
typeText = "Course";
118118
break;
119+
case ResourceTypeEnum.Catalogue:
120+
typeText = "Catalogue";
121+
break;
119122
default:
120123
typeText = string.Empty;
121124
break;

LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
<PackageReference Include="HtmlAgilityPack" Version="1.11.72" />
114114
<PackageReference Include="IdentityModel" Version="4.6.0" />
115115
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
116-
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.3" />
116+
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.5" />
117117
<PackageReference Include="linqtotwitter" Version="6.9.0" />
118118
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
119119
<PackageReference Include="Microsoft.ApplicationInsights.EventCounterCollector" Version="2.21.0" />

LearningHub.Nhs.WebUI/Views/Search/Index.cshtml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,14 @@
5656
</p>
5757
}
5858

59-
@if (azureSearchEnabled)
59+
@* @if (azureSearchEnabled) // [BY] Use this when we create quick filters for Azure Search
6060
{
6161
@await Html.PartialAsync("_SearchFilter", Model)
62-
}
63-
else
64-
{
65-
@await Html.PartialAsync("_ResourceFilter", Model)
66-
}
67-
62+
} *@
63+
64+
@await Html.PartialAsync("_ResourceFilter", Model)
65+
66+
6867
<div class="nhsuk-grid-row">
6968
<div class="nhsuk-grid-column-full">
7069
<div class="nhsuk-u-reading-width">

LearningHub.Nhs.WebUI/Views/Search/_ResourceFilter.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
}
4747

4848
<h2 class="nhsuk-u-margin-bottom-3">
49-
@($"{resourceResult.TotalHits} resource{(resourceResult.TotalHits == 1 ? string.Empty : "s")}")
49+
@($"Showing {resourceResult.TotalHits} result{(resourceResult.TotalHits == 1 ? string.Empty : "s")}")
5050
</h2>
5151

5252
@if (resourceResult.TotalHits > 0)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
@using System.Web;
2+
@using LearningHub.Nhs.WebUI.Extensions
3+
@using LearningHub.Nhs.Models.Search.SearchClick;
4+
5+
@model LearningHub.Nhs.Models.Search.Document
6+
7+
@{
8+
var item = Model;
9+
var searchString = string.Empty;// HttpUtility.UrlEncode(Model.se);
10+
var suggestedSearchString = string.Empty; /* Model.DidYouMeanEnabled ? HttpUtility.UrlEncode(Model.SuggestedCatalogue) : HttpUtility.UrlEncode (Model.SearchString);*/
11+
12+
string GetUrl(string catalogueUrl, int? nodePathId, int itemIndex, int catalogueId, SearchClickPayloadModel payload)
13+
{
14+
15+
var searchSignal = payload?.SearchSignal;
16+
var pagingModel = "1";// Model.CatalogueResultPaging;
17+
string encodedCatalogueUrl = HttpUtility.UrlEncode("/Catalogue/" + catalogueUrl);
18+
string groupId = "binongid";// HttpUtility.UrlEncode(Model.GroupId.ToString());
19+
string searchSignalQueryEncoded = HttpUtility.UrlEncode(HttpUtility.UrlDecode(searchSignal?.Query));
20+
21+
var url = $@"/search/record-catalogue-click?url={encodedCatalogueUrl}&nodePathId={nodePathId}&itemIndex={payload?.HitNumber}
22+
&pageIndex={pagingModel}&totalNumberOfHits={payload?.SearchSignal?.Stats?.TotalHits}&searchText={suggestedSearchString}&catalogueId={catalogueId}
23+
&GroupId={groupId}&searchId={searchSignal?.SearchId}&timeOfSearch={searchSignal?.TimeOfSearch}&userQuery={HttpUtility.UrlEncode(searchSignal?.UserQuery)}
24+
&query={searchSignalQueryEncoded}&name={payload?.DocumentFields?.Name}";
25+
return url;
26+
}
27+
// var catalogueResult = Model.ResourceSearchResult;
28+
// var pagingModel = Model.CatalogueResultPaging;
29+
// var searchString = HttpUtility.UrlEncode(Model.SearchString);
30+
// var suggestedSearchString = Model.DidYouMeanEnabled ? HttpUtility.UrlEncode(Model.SuggestedCatalogue) : HttpUtility.UrlEncode(Model.SearchString);
31+
32+
// string GetCatalogueUrl(string catalogueUrl, int? nodePathId, int itemIndex, int catalogueId, SearchClickPayloadModel payload)
33+
// {
34+
// var searchSignal = payload?.SearchSignal;
35+
// string encodedCatalogueUrl = HttpUtility.UrlEncode("/Catalogue/" + catalogueUrl);
36+
// string groupId = HttpUtility.UrlEncode(Model.GroupId.ToString());
37+
// string searchSignalQueryEncoded = HttpUtility.UrlEncode(HttpUtility.UrlDecode(searchSignal?.Query));
38+
39+
// var url = $@"/search/record-catalogue-click?url={encodedCatalogueUrl}&nodePathId={nodePathId}&itemIndex={payload?.HitNumber}
40+
// &pageIndex={pagingModel.CurrentPage}&totalNumberOfHits={payload?.SearchSignal?.Stats?.TotalHits}&searchText={suggestedSearchString}&catalogueId={catalogueId}
41+
// &GroupId={groupId}&searchId={searchSignal?.SearchId}&timeOfSearch={searchSignal?.TimeOfSearch}&userQuery={HttpUtility.UrlEncode(searchSignal?.UserQuery)}
42+
// &query={searchSignalQueryEncoded}&name={payload?.DocumentFields?.Name}";
43+
// return url;
44+
}
45+
46+
<div class="resource-item nhsuk-card nhsuk-card--clickable nhsuk-u-margin-bottom-4">
47+
48+
<div class="nhsuk-card__content" style="padding: 10px;">
49+
50+
<div style="position: absolute; top: 0; right: 0; background-color: #0056b3; color: white; padding: 5px 15px; border-top-right-radius: 8px; border-bottom-left-radius: 8px; font-size: 0.8em;"> Catalogue </div>
51+
52+
<h3 class="nhsuk-heading-xs nhsuk-u-margin-bottom-2">
53+
<a class="nhsuk-card__link" href="@GetUrl(item.CatalogueUrl, item.NodePathId ?? 0, 0,Convert.ToInt32(item.Id), item.Click.Payload)">@item.Title</a>
54+
55+
</h3>
56+
57+
<p class="nhsuk-body-s nhsuk-u-margin-bottom-2 resource-description line-clamp-3">
58+
@item.Description
59+
</p>
60+
61+
</div>
62+
</div>

LearningHub.Nhs.WebUI/Views/Search/_SearchResult.cshtml

Lines changed: 76 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,8 @@
3030

3131
string GetMoodleCourseUrl(string courseIdWithPrefix)
3232
{
33-
const string prefix = "M";
34-
35-
if (string.IsNullOrWhiteSpace(courseIdWithPrefix))
36-
{
37-
return string.Empty;
38-
}
39-
40-
if (!courseIdWithPrefix.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
41-
{
42-
return string.Empty;
43-
}
44-
45-
var courseIdPart = courseIdWithPrefix.Substring(prefix.Length);
46-
47-
if (int.TryParse(courseIdPart, out int courseId))
33+
34+
if (int.TryParse(courseIdWithPrefix, out int courseId))
4835
{
4936
return moodleApiService.GetCourseUrl(courseId);
5037
}
@@ -60,87 +47,95 @@
6047

6148
@foreach (var item in resourceResult.DocumentModel)
6249
{
63-
var provider = item.Providers?.FirstOrDefault();
6450

65-
<div class="resource-item nhsuk-list-item--border nhsuk-u-padding-bottom-4 nhsuk-u-margin-bottom-4">
66-
<h3 class="nhsuk-heading-xs nhsuk-u-margin-bottom-2">
67-
@if (item.ResourceType == "moodle")
68-
{
69-
<a class="nhsuk-card__link" href="@GetMoodleCourseUrl(item.Id)">@item.Title</a>
70-
}
71-
else
72-
{
73-
<a class="nhsuk-card__link" href="@GetUrl(item.ResourceReferenceId, index, item.NodePathId ?? 0, item.Click.Payload)">@item.Title</a>
74-
}
75-
</h3>
76-
77-
@if (provider != null)
78-
{
79-
<div>
80-
<div class="provider-details">
81-
<img src="~/images/provider-logos/@provider.Logo" alt="@provider.Name" class="logo" />
82-
<span class="title">@ProviderHelper.GetProviderString(provider.Name)</span>
83-
</div>
84-
</div>
85-
}
86-
@if (item.CatalogueRestrictedAccess && !Model.HideRestrictedBadge && showCatalogueFieldsInResources)
87-
{
88-
<p class="nhsuk-body-s nhsuk-u-margin-bottom-2 nhsuk-u-font-weight-bold">
89-
@((item.CatalogueHasAccess || this.User.IsInRole("Administrator")) ? "Access Granted" : "Access restricted")
90-
</p>
91-
}
51+
@if (item.ResourceType == "catalogue")
52+
{
53+
@await Html.PartialAsync("_SearchCatalogueResult", item)
54+
}
55+
else
56+
{
57+
var provider = item.Providers?.FirstOrDefault();
9258

93-
@if (!resourceAccessLevelFilterSelected)
94-
{
95-
<div class="nhsuk-body-s nhsuk-u-margin-bottom-2">
96-
<div class="nhsuk-u-margin-right-4">
97-
<strong>Audience access level: </strong>
98-
@ResourceAccessLevelHelper.GetResourceAccessLevelText((ResourceAccessibilityEnum)item.ResourceAccessLevel)
99-
</div>
100-
</div>
101-
}
59+
<div class="resource-item nhsuk-list-item--border nhsuk-u-padding-bottom-4 nhsuk-u-margin-bottom-4">
60+
<h3 class="nhsuk-heading-xs nhsuk-u-margin-bottom-2">
61+
@if (item.ResourceType == "moodle")
62+
{
63+
<a class="nhsuk-card__link" href="@GetMoodleCourseUrl(item.Id)">@item.Title</a>
64+
}
65+
else
66+
{
67+
<a class="nhsuk-card__link" href="@GetUrl(item.ResourceReferenceId, index, item.NodePathId ?? 0, item.Click.Payload)">@item.Title</a>
68+
}
69+
</h3>
10270

103-
@if (!string.IsNullOrEmpty(item.ResourceType))
104-
{
105-
<div class="resource-info nhsuk-body-s nhsuk-u-margin-bottom-2">
106-
<div class="nhsuk-u-margin-right-4">
107-
<strong>Type: </strong>
108-
@UtilityHelper.GetPrettifiedResourceTypeName(UtilityHelper.ToEnum<ResourceTypeEnum>(item.ResourceType), 0)
109-
</div>
71+
@if (provider != null)
72+
{
11073
<div>
111-
@if (item.ResourceType != "moodle")
112-
{
113-
@await Html.PartialAsync("../Shared/_StarRating.cshtml", item.Rating)
114-
}
74+
<div class="provider-details">
75+
<img src="~/images/provider-logos/@provider.Logo" alt="@provider.Name" class="logo" />
76+
<span class="title">@ProviderHelper.GetProviderString(provider.Name)</span>
77+
</div>
11578
</div>
116-
</div>
117-
}
118-
<p class="nhsuk-body-s nhsuk-u-margin-bottom-2 resource-description line-clamp-3">
119-
@item.Description
120-
</p>
79+
}
80+
@if (item.CatalogueRestrictedAccess && !Model.HideRestrictedBadge && showCatalogueFieldsInResources)
81+
{
82+
<p class="nhsuk-body-s nhsuk-u-margin-bottom-2 nhsuk-u-font-weight-bold">
83+
@((item.CatalogueHasAccess || this.User.IsInRole("Administrator")) ? "Access Granted" : "Access restricted")
84+
</p>
85+
}
12186

122-
<div class="resource-author">
123-
@if (!string.IsNullOrWhiteSpace(item.CatalogueBadgeUrl) && showCatalogueFieldsInResources)
87+
@if (!resourceAccessLevelFilterSelected)
12488
{
125-
<img class="resource-catalogue-badge" src="/search/image/@item.CatalogueBadgeUrl" alt="Provider's catalogue badge" />
89+
<div class="nhsuk-body-s nhsuk-u-margin-bottom-2">
90+
<div class="nhsuk-u-margin-right-4">
91+
<strong>Audience access level: </strong>
92+
@ResourceAccessLevelHelper.GetResourceAccessLevelText((ResourceAccessibilityEnum)item.ResourceAccessLevel)
93+
</div>
94+
</div>
12695
}
12796

128-
@if (!string.IsNullOrEmpty(item.CatalogueName) && !this.Model.CatalogueId.HasValue && showCatalogueFieldsInResources)
97+
@if (!string.IsNullOrEmpty(item.ResourceType))
12998
{
130-
<div class="nhsuk-u-margin-right-3">
131-
<a href="@("/Catalogue/" + item.CatalogueUrl)" class="catalogue-resource-search-result-name">@item.CatalogueName</a>
99+
<div class="resource-info nhsuk-body-s nhsuk-u-margin-bottom-2">
100+
<div class="nhsuk-u-margin-right-4">
101+
<strong>Type: </strong>
102+
@UtilityHelper.GetPrettifiedResourceTypeName(UtilityHelper.ToEnum<ResourceTypeEnum>(item.ResourceType), 0)
103+
</div>
104+
<div>
105+
@if (item.ResourceType != "moodle")
106+
{
107+
@await Html.PartialAsync("../Shared/_StarRating.cshtml", item.Rating)
108+
}
109+
</div>
132110
</div>
133111
}
112+
<p class="nhsuk-body-s nhsuk-u-margin-bottom-2 resource-description line-clamp-3">
113+
@item.Description
114+
</p>
134115

135-
<div>
136-
@UtilityHelper.GetAttribution(item.Authors)
137-
@if (!string.IsNullOrEmpty(item.AuthoredDate))
116+
<div class="resource-author">
117+
@if (!string.IsNullOrWhiteSpace(item.CatalogueBadgeUrl) && showCatalogueFieldsInResources)
138118
{
139-
@UtilityHelper.GetInOn(item.AuthoredDate)
140-
@: @item.AuthoredDate
119+
<img class="resource-catalogue-badge" src="/search/image/@item.CatalogueBadgeUrl" alt="Provider's catalogue badge" />
141120
}
121+
122+
@if (!string.IsNullOrEmpty(item.CatalogueName) && !this.Model.CatalogueId.HasValue && showCatalogueFieldsInResources)
123+
{
124+
<div class="nhsuk-u-margin-right-3">
125+
<a href="@("/Catalogue/" + item.CatalogueUrl)" class="catalogue-resource-search-result-name">@item.CatalogueName</a>
126+
</div>
127+
}
128+
129+
<div>
130+
@UtilityHelper.GetAttribution(item.Authors)
131+
@if (!string.IsNullOrEmpty(item.AuthoredDate))
132+
{
133+
@UtilityHelper.GetInOn(item.AuthoredDate)
134+
@: @item.AuthoredDate
135+
}
136+
</div>
142137
</div>
143138
</div>
144-
</div>
145-
index++;
139+
index++;
140+
}
146141
}

OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<ItemGroup>
1919
<PackageReference Include="Azure.Search.Documents" Version="11.6.0" />
20-
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.3" />
20+
<PackageReference Include="LearningHub.Nhs.Models" Version="4.0.5" />
2121
<PackageReference Include="NLog.Web.AspNetCore" Version="4.15.0" />
2222
</ItemGroup>
2323

0 commit comments

Comments
 (0)