Skip to content

Commit 2c0d658

Browse files
authored
Merge branch 'RC' into Automatic_version_update_dependabot
2 parents 5e74bd4 + e662e23 commit 2c0d658

File tree

77 files changed

+3959
-280
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+3959
-280
lines changed

AdminUI/LearningHub.Nhs.AdminUI/Helpers/LearningActivityHelper.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,15 @@ public static string GetResourceTypeVerb(this MyLearningDetailedItemViewModel my
8585
case ResourceTypeEnum.Article:
8686
return "Read";
8787
case ResourceTypeEnum.Audio:
88-
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000);
88+
if ((myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000) > myLearningDetailedItemViewModel.ResourceDurationMilliseconds)
89+
{
90+
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ResourceDurationMilliseconds);
91+
}
92+
else
93+
{
94+
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000);
95+
}
96+
8997
case ResourceTypeEnum.Embedded:
9098
return string.Empty;
9199
case ResourceTypeEnum.Equipment:
@@ -113,7 +121,15 @@ public static string GetResourceTypeVerb(this MyLearningDetailedItemViewModel my
113121
}
114122

115123
case ResourceTypeEnum.Video:
116-
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000);
124+
if ((myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000) > myLearningDetailedItemViewModel.ResourceDurationMilliseconds)
125+
{
126+
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ResourceDurationMilliseconds);
127+
}
128+
else
129+
{
130+
return "Played " + GetDurationText(myLearningDetailedItemViewModel.ActivityDurationSeconds * 1000);
131+
}
132+
117133
case ResourceTypeEnum.WebLink:
118134
return "Visited";
119135
case ResourceTypeEnum.Html:
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
namespace LearningHub.Nhs.WebUI.Helpers;
2+
3+
/// <summary>
4+
/// Represents the types of resources available in Moodle.
5+
/// </summary>
6+
public enum ResourceTypeEnumMoodle
7+
{
8+
/// <summary>
9+
/// The undefined resource type.
10+
/// </summary>
11+
Undefined,
12+
13+
/// <summary>
14+
/// The article resource type.
15+
/// </summary>
16+
Article,
17+
18+
/// <summary>
19+
/// The audio resource type.
20+
/// </summary>
21+
Audio,
22+
23+
/// <summary>
24+
/// The embedded resource type.
25+
/// </summary>
26+
Embedded,
27+
28+
/// <summary>
29+
/// The equipment resource type.
30+
/// </summary>
31+
Equipment,
32+
33+
/// <summary>
34+
/// The image resource type.
35+
/// </summary>
36+
Image,
37+
38+
/// <summary>
39+
/// The SCORM resource type.
40+
/// </summary>
41+
Scorm,
42+
43+
/// <summary>
44+
/// The video resource type.
45+
/// </summary>
46+
Video,
47+
48+
/// <summary>
49+
/// The web link resource type.
50+
/// </summary>
51+
WebLink,
52+
53+
/// <summary>
54+
/// The generic file resource type.
55+
/// </summary>
56+
GenericFile,
57+
58+
/// <summary>
59+
/// The clinical case resource type.
60+
/// </summary>
61+
Case,
62+
63+
/// <summary>
64+
/// The assessment resource type.
65+
/// </summary>
66+
Assessment,
67+
68+
/// <summary>
69+
/// The HTML resource type.
70+
/// </summary>
71+
Html,
72+
73+
/// <summary>
74+
/// The Moodle resource type.
75+
/// </summary>
76+
Moodle,
77+
78+
/// <summary>
79+
/// The Moodle course resource type.
80+
/// </summary>
81+
Course,
82+
}

LearningHub.Nhs.WebUI/Helpers/UtilityHelper.cs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ public static class UtilityHelper
3232
{ "html", ResourceTypeEnum.Html },
3333
};
3434

35+
/// TODO: Remove this method after adding to Moodle resource types to models project.
36+
/// <summary>
37+
/// Findwise Moodle resource type dictionary.
38+
/// </summary>
39+
public static readonly Dictionary<string, ResourceTypeEnumMoodle> FindwiseResourceMoodleTypeDict = new Dictionary<string, ResourceTypeEnumMoodle>()
40+
{
41+
{ "video", ResourceTypeEnumMoodle.Video },
42+
{ "article", ResourceTypeEnumMoodle.Article },
43+
{ "case", ResourceTypeEnumMoodle.Case },
44+
{ "weblink", ResourceTypeEnumMoodle.WebLink },
45+
{ "audio", ResourceTypeEnumMoodle.Audio },
46+
{ "scorm", ResourceTypeEnumMoodle.Scorm },
47+
{ "assessment", ResourceTypeEnumMoodle.Assessment },
48+
{ "genericfile", ResourceTypeEnumMoodle.GenericFile },
49+
{ "image", ResourceTypeEnumMoodle.Image },
50+
{ "html", ResourceTypeEnumMoodle.Html },
51+
{ "moodle", ResourceTypeEnumMoodle.Course },
52+
};
53+
3554
/// <summary>
3655
/// The FormatTwitterDate.
3756
/// </summary>
@@ -147,6 +166,54 @@ public static string GetPrettifiedResourceTypeName(ResourceTypeEnum resourceType
147166
}
148167
}
149168

169+
/// TODO: Remove this method after adding to Moodle resource types to models project.
170+
/// <summary>
171+
/// Returns a prettified resource type name, suitable for display in the UI. Includes video/audio duration string.
172+
/// </summary>
173+
/// <param name="resourceType">The resource type.</param>
174+
/// <param name="durationInMilliseconds">The media duration in milliseconds.</param>
175+
/// <returns>The resource type name, and duration if applicable.</returns>
176+
public static string GetPrettifiedResourceTypeNameMoodle(ResourceTypeEnumMoodle resourceType, int? durationInMilliseconds = 0)
177+
{
178+
switch (resourceType)
179+
{
180+
case ResourceTypeEnumMoodle.Assessment:
181+
return "Assessment";
182+
case ResourceTypeEnumMoodle.Article:
183+
return "Article";
184+
case ResourceTypeEnumMoodle.Audio:
185+
string durationText = GetDurationText(durationInMilliseconds ?? 0);
186+
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
187+
return "Audio" + durationText;
188+
case ResourceTypeEnumMoodle.Equipment:
189+
return "Equipment";
190+
case ResourceTypeEnumMoodle.Image:
191+
return "Image";
192+
case ResourceTypeEnumMoodle.Scorm:
193+
return "elearning";
194+
case ResourceTypeEnumMoodle.Video:
195+
durationText = GetDurationText(durationInMilliseconds ?? 0);
196+
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
197+
return "Video" + durationText;
198+
case ResourceTypeEnumMoodle.WebLink:
199+
return "Web link";
200+
case ResourceTypeEnumMoodle.GenericFile:
201+
return "File";
202+
case ResourceTypeEnumMoodle.Embedded:
203+
return "Embedded";
204+
case ResourceTypeEnumMoodle.Case:
205+
return "Case";
206+
case ResourceTypeEnumMoodle.Html:
207+
return "HTML";
208+
case ResourceTypeEnumMoodle.Moodle:
209+
return "Course";
210+
case ResourceTypeEnumMoodle.Course:
211+
return "Course";
212+
default:
213+
return "File";
214+
}
215+
}
216+
150217
/// <summary>
151218
/// Returns a prettified resource type name, suitable for display in the UI. Excludes video/audio duration string.
152219
/// </summary>

LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,15 @@ public static string GetResourceTypeVerb(this ActivityDetailedItemViewModel acti
8484
case ResourceTypeEnum.Article:
8585
return "Read";
8686
case ResourceTypeEnum.Audio:
87-
return "Played " + GetDurationText(activityDetailedItemViewModel.ActivityDurationSeconds * 1000);
87+
if ((activityDetailedItemViewModel.ActivityDurationSeconds * 1000) > activityDetailedItemViewModel.ResourceDurationMilliseconds)
88+
{
89+
return "Played " + GetDurationText(activityDetailedItemViewModel.ResourceDurationMilliseconds);
90+
}
91+
else
92+
{
93+
return "Played " + GetDurationText(activityDetailedItemViewModel.ActivityDurationSeconds * 1000);
94+
}
95+
8896
case ResourceTypeEnum.Embedded:
8997
return string.Empty;
9098
case ResourceTypeEnum.Equipment:
@@ -112,7 +120,15 @@ public static string GetResourceTypeVerb(this ActivityDetailedItemViewModel acti
112120
}
113121

114122
case ResourceTypeEnum.Video:
115-
return "Played " + GetDurationText(activityDetailedItemViewModel.ActivityDurationSeconds * 1000);
123+
if ((activityDetailedItemViewModel.ActivityDurationSeconds * 1000) > activityDetailedItemViewModel.ResourceDurationMilliseconds)
124+
{
125+
return "Played " + GetDurationText(activityDetailedItemViewModel.ResourceDurationMilliseconds);
126+
}
127+
else
128+
{
129+
return "Played " + GetDurationText(activityDetailedItemViewModel.ActivityDurationSeconds * 1000);
130+
}
131+
116132
case ResourceTypeEnum.WebLink:
117133
return "Visited";
118134
case ResourceTypeEnum.Html:

LearningHub.Nhs.WebUI/Models/MoodleCourseResponseViewModel.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,15 @@ public class MoodleCourseResponseViewModel
9292
/// </summary>
9393
public int? Category { get; set; }
9494

95+
/// <summary>
96+
/// Gets the progress percentage formatted as a string.
97+
/// </summary>
98+
public string ProgressPercentage => $"{System.Math.Round(this.Progress ?? 0)}%";
99+
95100
/// <summary>
96101
/// Gets or sets the progress.
97102
/// </summary>
98-
public int? Progress { get; set; }
103+
public double? Progress { get; set; }
99104

100105
/// <summary>
101106
/// Gets or sets the completion status.

LearningHub.Nhs.WebUI/Services/SearchService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ public async Task<SearchResultViewModel> PerformSearch(IPrincipal user, SearchRe
163163
{
164164
var filter = filters.Where(x => x.DisplayName == filteritem).FirstOrDefault();
165165

166-
if (filter != null && UtilityHelper.FindwiseResourceTypeDict.ContainsKey(filter.DisplayName))
166+
if (filter != null && UtilityHelper.FindwiseResourceMoodleTypeDict.ContainsKey(filter.DisplayName))
167167
{
168-
var resourceTypeEnum = UtilityHelper.FindwiseResourceTypeDict[filter.DisplayName];
169-
var searchfilter = new SearchFilterModel() { DisplayName = UtilityHelper.GetPrettifiedResourceTypeName(resourceTypeEnum), Count = filter.Count, Value = filteritem, Selected = searchRequest.Filters?.Contains(filter.DisplayName) ?? false };
168+
var resourceTypeEnum = UtilityHelper.FindwiseResourceMoodleTypeDict[filter.DisplayName];
169+
var searchfilter = new SearchFilterModel() { DisplayName = UtilityHelper.GetPrettifiedResourceTypeNameMoodle(resourceTypeEnum), Count = filter.Count, Value = filteritem, Selected = searchRequest.Filters?.Contains(filter.DisplayName) ?? false };
170170
searchfilters.Add(searchfilter);
171171
}
172172
}

LearningHub.Nhs.WebUI/Views/Home/_CourseEnrolled.cshtml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
{
1313
var apiBaseUrl = Configuration["MoodleAPIConfig:BaseUrl"];
1414
string path = $"course/view.php";
15-
string returnUrl = $@"{apiBaseUrl}/{path}?id={courseId}";
15+
string returnUrl = $@"{apiBaseUrl}{path}?id={courseId}";
1616

1717
return returnUrl;
1818
}
@@ -21,11 +21,9 @@
2121
<div class="nhsuk-card-banner-container">
2222
@if (!string.IsNullOrWhiteSpace(Model.CourseImage))
2323
{
24-
if (Model.CourseImage.EndsWith(".svg", StringComparison.OrdinalIgnoreCase))
24+
@if (Model.CourseImage.EndsWith(".svg", StringComparison.OrdinalIgnoreCase))
2525
{
26-
<object class="nhsuk-card__img nhsuk-card-banner" type="image/svg+xml" data="@Model.CourseImage">
27-
<img src="/images/default-course.jpg" alt="Fallback image" />
28-
</object>
26+
<img class="nhsuk-card__img nhsuk-card-banner" src="@Model.CourseImage" alt="Course image" onerror="this.onerror=null;this.src='/images/default-course.jpg';" />
2927
}
3028
else
3129
{
@@ -60,7 +58,7 @@
6058
<div class="line-clamp-3 nhsuk-u-margin-bottom-2point5">
6159
@if (@Model?.Progress != null)
6260
{
63-
<div>Progress: @Model.Progress%</div>
61+
<div>Progress: @Model.ProgressPercentage</div>
6462
}
6563
</div>
6664

0 commit comments

Comments
 (0)