Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b000123
tinyUpdates
OluwatobiAwe Apr 15, 2025
7733dc9
Merge branch 'RC' of https://github.com/TechnologyEnhancedLearning/Le…
OluwatobiAwe Apr 15, 2025
f8b08ae
repository update
OluwatobiAwe Apr 16, 2025
7ff31de
Provider Mapping updates
OluwatobiAwe Apr 22, 2025
63862d0
Service mapping update
OluwatobiAwe Apr 22, 2025
cdf7b22
Addition of GetNodeContentsForCatalogueBrowse endpoint
OluwatobiAwe Apr 29, 2025
3a03458
ResourceVersionValidation Map Update
OluwatobiAwe May 1, 2025
b0571e1
User bookmark mapping
OluwatobiAwe May 2, 2025
d89f787
Folder mapping fix
OluwatobiAwe May 12, 2025
4202a5c
Addition of GetImageResourceVersion endpoint
OluwatobiAwe May 12, 2025
851e916
fix for cyclic reference
OluwatobiAwe May 13, 2025
12a8076
LH Menu and reverted route comflict
OluwatobiAwe May 15, 2025
8f48caa
documentation change
OluwatobiAwe May 15, 2025
bcb74c9
LH Menu refactor
OluwatobiAwe May 15, 2025
65bffcc
.
OluwatobiAwe May 15, 2025
0233e88
Removed API calls from LH navigation
OluwatobiAwe May 16, 2025
016ed55
bugfix
OluwatobiAwe May 22, 2025
ebca4fe
Permission for ReadWrite
OluwatobiAwe May 22, 2025
7c43544
emailchange mapping update
OluwatobiAwe May 23, 2025
78f00d3
Fixes
AnjuJose011 May 30, 2025
e503b8e
Merge pull request #1148 from TechnologyEnhancedLearning/TD-5651-Vali…
AnjuJose011 May 30, 2025
fc87d1c
fixes
AnjuJose011 May 30, 2025
38fd3a5
Merge pull request #1149 from TechnologyEnhancedLearning/TD-5653-Typo…
AnjuJose011 May 30, 2025
a481ba0
Fixes-TD-5651
AnjuJose011 Jun 2, 2025
7891f8d
Merge pull request #1154 from TechnologyEnhancedLearning/TD-5651-Erro…
AnjuJose011 Jun 2, 2025
5d02716
fixes-TD-5570
AnjuJose011 Jun 3, 2025
6c1de72
fixes
AnjuJose011 Jun 3, 2025
bc2772a
Merge pull request #1155 from TechnologyEnhancedLearning/TD-5570-Issu…
AnjuJose011 Jun 3, 2025
7cc1919
P3 endpoint fix
OluwatobiAwe Jun 6, 2025
8f6473b
catalogue service test fix
OluwatobiAwe Jun 6, 2025
76aedd7
Moodel course discoverable in LH
Jun 6, 2025
f8752af
Internal Sytem db mapping
OluwatobiAwe Jun 9, 2025
0e499e2
azure appsetting config
OluwatobiAwe Jun 11, 2025
576b084
image annotation mapping
OluwatobiAwe Jun 12, 2025
54703da
Updated progress data type from int to double
Jun 13, 2025
8b94524
Merge pull request #1169 from TechnologyEnhancedLearning/Develop/POC/…
binon Jun 13, 2025
dbe3e75
Fixed the issue with fall back image downloading locally and cionsist…
Jun 13, 2025
58a456d
Merge pull request #1171 from TechnologyEnhancedLearning/Develop/POC/…
binon Jun 13, 2025
a9ec81e
appsettings update
OluwatobiAwe Jun 13, 2025
1a86b09
Merge pull request #1168 from TechnologyEnhancedLearning/Develop/Fixe…
AnjuJose011 Jun 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,15 @@ public async Task<IActionResult> Details(UserGroupAdminDetailViewModel userGroup
if (userGroup.IsNew())
{
validationResult = await this.userGroupService.CreateUserGroup(userGroup);
userGroup = await this.userGroupService.GetUserGroupAdminDetailbyIdAsync(validationResult.CreatedId.Value);
if (validationResult.IsValid)
{
userGroup = await this.userGroupService.GetUserGroupAdminDetailbyIdAsync(validationResult.CreatedId.Value);
}
else
{
this.ViewBag.ErrorMessage = $"Update failed: {string.Join(Environment.NewLine, validationResult.Details)}";
return this.View("Details", userGroup);
}
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@
{
<tr>
<td style="vertical-align: middle">
@Html.ActionLink(item.Id.ToString(), "Details", new { id = item.Id })
@Html.ActionLink(item.Id.ToString(), "Details", "User", new { id = item.Id })
</td>
<td style="vertical-align: middle">
@Html.ActionLink(item.UserName.ToString(), "Details", new { id = item.Id })
@Html.ActionLink(item.UserName.ToString(), "Details", "User", new { id = item.Id })
</td>
<td style="vertical-align: middle">
<input type="checkbox" id=@($"user_{item.Id}") class="list-item-checked" />
Expand Down
8 changes: 6 additions & 2 deletions LearningHub.Nhs.WebUI/Controllers/MyAccountController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -810,7 +810,7 @@ public async Task<IActionResult> ChangeGrade([FromQuery] UserGradeUpdateViewMode
viewModel.SelectedMedicalCouncilId = jobRole.MedicalCouncilId;
if (formSubmission)
{
if (this.User.IsInRole("BasicUser") || viewModel.SelectedGradeId.HasValue)
if (this.User.IsInRole("BasicUser") || viewModel.SelectedGradeId != null)
{
var medicalCouncilNoRequired = jobRole.MedicalCouncilId > 0 && jobRole.MedicalCouncilId < 4;
await this.userService.UpdateUserEmployment(
Expand All @@ -821,7 +821,7 @@ await this.userService.UpdateUserEmployment(
JobRoleId = viewModel.SelectedJobRoleId,
MedicalCouncilId = medicalCouncilNoRequired ? jobRole.MedicalCouncilId : null,
MedicalCouncilNo = medicalCouncilNoRequired ? (viewModel.SelectedMedicalCouncilNo ?? profile.MedicalCouncilNo) : null,
GradeId = viewModel.SelectedGradeId,
GradeId = Convert.ToInt32(viewModel.SelectedGradeId),
SpecialtyId = profile.SpecialtyId,
StartDate = profile.JobStartDate,
LocationId = profile.LocationId,
Expand All @@ -836,6 +836,10 @@ await this.userService.UpdateUserEmployment(
return this.View("ChangeGrade", viewModel);
}
}
else
{
viewModel.SelectedGradeId = profile.GradeId.ToString();
}

return this.View("ChangeGrade", viewModel);
}
Expand Down
82 changes: 82 additions & 0 deletions LearningHub.Nhs.WebUI/Helpers/ResourceTypeEnumMoodle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
namespace LearningHub.Nhs.WebUI.Helpers;

/// <summary>
/// Represents the types of resources available in Moodle.
/// </summary>
public enum ResourceTypeEnumMoodle
{
/// <summary>
/// The undefined resource type.
/// </summary>
Undefined,

/// <summary>
/// The article resource type.
/// </summary>
Article,

/// <summary>
/// The audio resource type.
/// </summary>
Audio,

/// <summary>
/// The embedded resource type.
/// </summary>
Embedded,

/// <summary>
/// The equipment resource type.
/// </summary>
Equipment,

/// <summary>
/// The image resource type.
/// </summary>
Image,

/// <summary>
/// The SCORM resource type.
/// </summary>
Scorm,

/// <summary>
/// The video resource type.
/// </summary>
Video,

/// <summary>
/// The web link resource type.
/// </summary>
WebLink,

/// <summary>
/// The generic file resource type.
/// </summary>
GenericFile,

/// <summary>
/// The clinical case resource type.
/// </summary>
Case,

/// <summary>
/// The assessment resource type.
/// </summary>
Assessment,

/// <summary>
/// The HTML resource type.
/// </summary>
Html,

/// <summary>
/// The Moodle resource type.
/// </summary>
Moodle,

/// <summary>
/// The Moodle course resource type.
/// </summary>
Course,
}
67 changes: 67 additions & 0 deletions LearningHub.Nhs.WebUI/Helpers/UtilityHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,25 @@ public static class UtilityHelper
{ "html", ResourceTypeEnum.Html },
};

/// TODO: Remove this method after adding to Moodle resource types to models project.
/// <summary>
/// Findwise Moodle resource type dictionary.
/// </summary>
public static readonly Dictionary<string, ResourceTypeEnumMoodle> FindwiseResourceMoodleTypeDict = new Dictionary<string, ResourceTypeEnumMoodle>()
{
{ "video", ResourceTypeEnumMoodle.Video },
{ "article", ResourceTypeEnumMoodle.Article },
{ "case", ResourceTypeEnumMoodle.Case },
{ "weblink", ResourceTypeEnumMoodle.WebLink },
{ "audio", ResourceTypeEnumMoodle.Audio },
{ "scorm", ResourceTypeEnumMoodle.Scorm },
{ "assessment", ResourceTypeEnumMoodle.Assessment },
{ "genericfile", ResourceTypeEnumMoodle.GenericFile },
{ "image", ResourceTypeEnumMoodle.Image },
{ "html", ResourceTypeEnumMoodle.Html },
{ "moodle", ResourceTypeEnumMoodle.Course },
};

/// <summary>
/// The FormatTwitterDate.
/// </summary>
Expand Down Expand Up @@ -147,6 +166,54 @@ public static string GetPrettifiedResourceTypeName(ResourceTypeEnum resourceType
}
}

/// TODO: Remove this method after adding to Moodle resource types to models project.
/// <summary>
/// Returns a prettified resource type name, suitable for display in the UI. Includes video/audio duration string.
/// </summary>
/// <param name="resourceType">The resource type.</param>
/// <param name="durationInMilliseconds">The media duration in milliseconds.</param>
/// <returns>The resource type name, and duration if applicable.</returns>
public static string GetPrettifiedResourceTypeNameMoodle(ResourceTypeEnumMoodle resourceType, int? durationInMilliseconds = 0)
{
switch (resourceType)
{
case ResourceTypeEnumMoodle.Assessment:
return "Assessment";
case ResourceTypeEnumMoodle.Article:
return "Article";
case ResourceTypeEnumMoodle.Audio:
string durationText = GetDurationText(durationInMilliseconds ?? 0);
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
return "Audio" + durationText;
case ResourceTypeEnumMoodle.Equipment:
return "Equipment";
case ResourceTypeEnumMoodle.Image:
return "Image";
case ResourceTypeEnumMoodle.Scorm:
return "elearning";
case ResourceTypeEnumMoodle.Video:
durationText = GetDurationText(durationInMilliseconds ?? 0);
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
return "Video" + durationText;
case ResourceTypeEnumMoodle.WebLink:
return "Web link";
case ResourceTypeEnumMoodle.GenericFile:
return "File";
case ResourceTypeEnumMoodle.Embedded:
return "Embedded";
case ResourceTypeEnumMoodle.Case:
return "Case";
case ResourceTypeEnumMoodle.Html:
return "HTML";
case ResourceTypeEnumMoodle.Moodle:
return "Course";
case ResourceTypeEnumMoodle.Course:
return "Course";
default:
return "File";
}
}

/// <summary>
/// Returns a prettified resource type name, suitable for display in the UI. Excludes video/audio duration string.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,15 @@ public class MoodleCourseResponseViewModel
/// </summary>
public int? Category { get; set; }

/// <summary>
/// Gets the progress percentage formatted as a string.
/// </summary>
public string ProgressPercentage => $"{System.Math.Round(this.Progress ?? 0)}%";

/// <summary>
/// Gets or sets the progress.
/// </summary>
public int? Progress { get; set; }
public double? Progress { get; set; }

/// <summary>
/// Gets or sets the completion status.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class UserGradeUpdateViewModel
/// <summary>
/// Gets or sets the selected grade id.
/// </summary>
public int? SelectedGradeId { get; set; }
public string SelectedGradeId { get; set; }

/// <summary>
/// Gets or sets the grade list.
Expand Down
6 changes: 3 additions & 3 deletions LearningHub.Nhs.WebUI/Services/SearchService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,10 @@ public async Task<SearchResultViewModel> PerformSearch(IPrincipal user, SearchRe
{
var filter = filters.Where(x => x.DisplayName == filteritem).FirstOrDefault();

if (filter != null && UtilityHelper.FindwiseResourceTypeDict.ContainsKey(filter.DisplayName))
if (filter != null && UtilityHelper.FindwiseResourceMoodleTypeDict.ContainsKey(filter.DisplayName))
{
var resourceTypeEnum = UtilityHelper.FindwiseResourceTypeDict[filter.DisplayName];
var searchfilter = new SearchFilterModel() { DisplayName = UtilityHelper.GetPrettifiedResourceTypeName(resourceTypeEnum), Count = filter.Count, Value = filteritem, Selected = searchRequest.Filters?.Contains(filter.DisplayName) ?? false };
var resourceTypeEnum = UtilityHelper.FindwiseResourceMoodleTypeDict[filter.DisplayName];
var searchfilter = new SearchFilterModel() { DisplayName = UtilityHelper.GetPrettifiedResourceTypeNameMoodle(resourceTypeEnum), Count = filter.Count, Value = filteritem, Selected = searchRequest.Filters?.Contains(filter.DisplayName) ?? false };
searchfilters.Add(searchfilter);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<vc:back-link asp-controller="Catalogue" asp-action="@Model.CatalogueUrl" link-text="Back to: @Model.CatalogueName" />
<h1>Access requested</h1>

<p>Your request to access this cataloque has seen sent to the cataloque administrator.</p>
<p>Your request to access this catalogue has seen sent to the catalogue administrator.</p>

<h2>What happens next?</h2>
<p>The catalogue administrator will review your request and you will be notified of their decision by email.</p>
Expand Down
10 changes: 4 additions & 6 deletions LearningHub.Nhs.WebUI/Views/Home/_CourseEnrolled.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
{
var apiBaseUrl = Configuration["MoodleAPIConfig:BaseUrl"];
string path = $"course/view.php";
string returnUrl = $@"{apiBaseUrl}/{path}?id={courseId}";
string returnUrl = $@"{apiBaseUrl}{path}?id={courseId}";

return returnUrl;
}
Expand All @@ -21,11 +21,9 @@
<div class="nhsuk-card-banner-container">
@if (!string.IsNullOrWhiteSpace(Model.CourseImage))
{
if (Model.CourseImage.EndsWith(".svg", StringComparison.OrdinalIgnoreCase))
@if (Model.CourseImage.EndsWith(".svg", StringComparison.OrdinalIgnoreCase))
{
<object class="nhsuk-card__img nhsuk-card-banner" type="image/svg+xml" data="@Model.CourseImage">
<img src="/images/default-course.jpg" alt="Fallback image" />
</object>
<img class="nhsuk-card__img nhsuk-card-banner" src="@Model.CourseImage" alt="Course image" onerror="this.onerror=null;this.src='/images/default-course.jpg';" />
}
else
{
Expand Down Expand Up @@ -60,7 +58,7 @@
<div class="line-clamp-3 nhsuk-u-margin-bottom-2point5">
@if (@Model?.Progress != null)
{
<div>Progress: @Model.Progress%</div>
<div>Progress: @Model.ProgressPercentage</div>
}
</div>

Expand Down
Loading
Loading