Skip to content

Commit 6242cfd

Browse files
authored
Merge pull request #1289 from TechnologyEnhancedLearning/Develop/Fixes/TD-5856_reload_moodle_user
Develop/fixes/td 5856 reload moodle user
2 parents a8c26db + 60f1317 commit 6242cfd

File tree

21 files changed

+590
-202
lines changed

21 files changed

+590
-202
lines changed

LearningHub.Nhs.WebUI/Controllers/HomeController.cs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace LearningHub.Nhs.WebUI.Controllers
1111
using LearningHub.Nhs.Models.Content;
1212
using LearningHub.Nhs.Models.Enums.Content;
1313
using LearningHub.Nhs.Models.Extensions;
14+
using LearningHub.Nhs.Models.Moodle.API;
1415
using LearningHub.Nhs.WebUI.Configuration;
1516
using LearningHub.Nhs.WebUI.Filters;
1617
using LearningHub.Nhs.WebUI.Helpers;
@@ -218,13 +219,12 @@ public async Task<IActionResult> Index(string myLearningDashboard = "my-in-progr
218219
var cataloguesTask = this.dashboardService.GetCataloguesAsync(catalogueDashboard, 1);
219220
var userGroupsTask = this.userGroupService.UserHasCatalogueContributionPermission();
220221

221-
var enrolledCoursesTask = Task.FromResult(new List<MoodleCourseResponseViewModel>());
222-
var enableMoodle = Task.Run(() => this.featureManager.IsEnabledAsync(FeatureFlags.EnableMoodle)).Result;
223-
this.ViewBag.EnableMoodle = enableMoodle;
224-
this.ViewBag.ValidMoodleUser = this.CurrentMoodleUserId > 0;
222+
var enrolledCoursesTask = Task.FromResult(new List<MoodleCourseResponseModel>());
223+
(bool enableMoodle, int currentMoodleUserId) = await this.GetMoodleFeatureStateAsync();
224+
225225
if (enableMoodle && myLearningDashboard == "my-enrolled-courses")
226226
{
227-
enrolledCoursesTask = this.dashboardService.GetEnrolledCoursesFromMoodleAsync(this.CurrentMoodleUserId, 1);
227+
enrolledCoursesTask = this.dashboardService.GetEnrolledCoursesFromMoodleAsync(currentMoodleUserId, 1);
228228
}
229229

230230
await Task.WhenAll(learningTask, resourcesTask, cataloguesTask, userGroupsTask);
@@ -280,9 +280,7 @@ public async Task<IActionResult> LoadPage(string dashBoardTray = "my-learning",
280280
Catalogues = new Nhs.Models.Dashboard.DashboardCatalogueResponseViewModel { Type = catalogueDashBoard },
281281
};
282282

283-
var enableMoodle = Task.Run(() => this.featureManager.IsEnabledAsync(FeatureFlags.EnableMoodle)).Result;
284-
this.ViewBag.EnableMoodle = enableMoodle;
285-
this.ViewBag.ValidMoodleUser = this.CurrentMoodleUserId > 0;
283+
(bool enableMoodle, int currentMoodleUserId) = await this.GetMoodleFeatureStateAsync();
286284

287285
bool isAjax = this.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";
288286

@@ -449,5 +447,28 @@ private async Task<LandingPageViewModel> GetLandingPageContent(bool preview = fa
449447
return new LandingPageViewModel { PageSectionDetailViewModels = new List<PageSectionDetailViewModel>(), PageViewModel = new PageViewModel { PageSections = new List<PageSectionViewModel> { } } };
450448
}
451449
}
450+
451+
/// <summary>
452+
/// Asynchronously retrieves the state of the Moodle feature and the current Moodle user ID.
453+
/// </summary>
454+
/// <remarks>The method checks if the Moodle feature is enabled and retrieves the current Moodle
455+
/// user ID. If the user ID is not already set, it attempts to obtain it asynchronously from the dashboard
456+
/// service.</remarks>
457+
/// <returns>A tuple containing a boolean indicating whether the Moodle feature is enabled and an integer representing
458+
/// the current Moodle user ID.</returns>
459+
private async Task<(bool enableMoodle, int currentMoodleUserId)> GetMoodleFeatureStateAsync()
460+
{
461+
var enableMoodle = Task.Run(() => this.featureManager.IsEnabledAsync(FeatureFlags.EnableMoodle)).Result;
462+
this.ViewBag.EnableMoodle = enableMoodle;
463+
int currentMoodleUserId = this.CurrentMoodleUserId;
464+
465+
if (currentMoodleUserId == 0)
466+
{
467+
currentMoodleUserId = await this.dashboardService.GetMoodleUserIdAsync(this.CurrentUserId);
468+
}
469+
470+
this.ViewBag.ValidMoodleUser = currentMoodleUserId > 0;
471+
return (enableMoodle, currentMoodleUserId);
472+
}
452473
}
453474
}

LearningHub.Nhs.WebUI/Helpers/UtilityHelper.cs

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,19 @@ public static class UtilityHelper
3636
/// <summary>
3737
/// Findwise Moodle resource type dictionary.
3838
/// </summary>
39-
public static readonly Dictionary<string, ResourceTypeEnumMoodle> FindwiseResourceMoodleTypeDict = new Dictionary<string, ResourceTypeEnumMoodle>()
39+
public static readonly Dictionary<string, ResourceTypeEnum> FindwiseResourceMoodleTypeDict = new Dictionary<string, ResourceTypeEnum>()
4040
{
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 },
41+
{ "video", ResourceTypeEnum.Video },
42+
{ "article", ResourceTypeEnum.Article },
43+
{ "case", ResourceTypeEnum.Case },
44+
{ "weblink", ResourceTypeEnum.WebLink },
45+
{ "audio", ResourceTypeEnum.Audio },
46+
{ "scorm", ResourceTypeEnum.Scorm },
47+
{ "assessment", ResourceTypeEnum.Assessment },
48+
{ "genericfile", ResourceTypeEnum.GenericFile },
49+
{ "image", ResourceTypeEnum.Image },
50+
{ "html", ResourceTypeEnum.Html },
51+
{ "moodle", ResourceTypeEnum.Moodle },
5252
};
5353

5454
/// <summary>
@@ -173,41 +173,39 @@ public static string GetPrettifiedResourceTypeName(ResourceTypeEnum resourceType
173173
/// <param name="resourceType">The resource type.</param>
174174
/// <param name="durationInMilliseconds">The media duration in milliseconds.</param>
175175
/// <returns>The resource type name, and duration if applicable.</returns>
176-
public static string GetPrettifiedResourceTypeNameMoodle(ResourceTypeEnumMoodle resourceType, int? durationInMilliseconds = 0)
176+
public static string GetPrettifiedResourceTypeNameMoodle(ResourceTypeEnum resourceType, int? durationInMilliseconds = 0)
177177
{
178178
switch (resourceType)
179179
{
180-
case ResourceTypeEnumMoodle.Assessment:
180+
case ResourceTypeEnum.Assessment:
181181
return "Assessment";
182-
case ResourceTypeEnumMoodle.Article:
182+
case ResourceTypeEnum.Article:
183183
return "Article";
184-
case ResourceTypeEnumMoodle.Audio:
184+
case ResourceTypeEnum.Audio:
185185
string durationText = GetDurationText(durationInMilliseconds ?? 0);
186186
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
187187
return "Audio" + durationText;
188-
case ResourceTypeEnumMoodle.Equipment:
188+
case ResourceTypeEnum.Equipment:
189189
return "Equipment";
190-
case ResourceTypeEnumMoodle.Image:
190+
case ResourceTypeEnum.Image:
191191
return "Image";
192-
case ResourceTypeEnumMoodle.Scorm:
192+
case ResourceTypeEnum.Scorm:
193193
return "elearning";
194-
case ResourceTypeEnumMoodle.Video:
194+
case ResourceTypeEnum.Video:
195195
durationText = GetDurationText(durationInMilliseconds ?? 0);
196196
durationText = string.IsNullOrEmpty(durationText) ? string.Empty : " - " + durationText;
197197
return "Video" + durationText;
198-
case ResourceTypeEnumMoodle.WebLink:
198+
case ResourceTypeEnum.WebLink:
199199
return "Web link";
200-
case ResourceTypeEnumMoodle.GenericFile:
200+
case ResourceTypeEnum.GenericFile:
201201
return "File";
202-
case ResourceTypeEnumMoodle.Embedded:
202+
case ResourceTypeEnum.Embedded:
203203
return "Embedded";
204-
case ResourceTypeEnumMoodle.Case:
204+
case ResourceTypeEnum.Case:
205205
return "Case";
206-
case ResourceTypeEnumMoodle.Html:
206+
case ResourceTypeEnum.Html:
207207
return "HTML";
208-
case ResourceTypeEnumMoodle.Moodle:
209-
return "Course";
210-
case ResourceTypeEnumMoodle.Course:
208+
case ResourceTypeEnum.Moodle:
211209
return "Course";
212210
default:
213211
return "File";

LearningHub.Nhs.WebUI/Interfaces/IDashboardService.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Threading.Tasks;
55
using LearningHub.Nhs.Models.Dashboard;
6+
using LearningHub.Nhs.Models.Moodle.API;
67
using LearningHub.Nhs.WebUI.Models;
78

89
/// <summary>
@@ -47,6 +48,13 @@ public interface IDashboardService
4748
/// <param name="currentUserId">The current User Id type.</param>
4849
/// <param name="pageNumber">The page Number.</param>
4950
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
50-
Task<List<MoodleCourseResponseViewModel>> GetEnrolledCoursesFromMoodleAsync(int currentUserId, int pageNumber);
51+
Task<List<MoodleCourseResponseModel>> GetEnrolledCoursesFromMoodleAsync(int currentUserId, int pageNumber);
52+
53+
/// <summary>
54+
/// GetEnrolledCoursesFromMoodleAsync.
55+
/// </summary>
56+
/// <param name="currentUserId">The current User Id type.</param>
57+
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
58+
Task<int> GetMoodleUserIdAsync(int currentUserId);
5159
}
5260
}

LearningHub.Nhs.WebUI/Interfaces/IMoodleApiService.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,36 @@
22
{
33
using System.Collections.Generic;
44
using System.Threading.Tasks;
5-
using LearningHub.Nhs.Models.Dashboard;
6-
using LearningHub.Nhs.WebUI.Models;
5+
using LearningHub.Nhs.Models.Moodle.API;
6+
using MoodleCourseCompletionModel = LearningHub.Nhs.Models.Moodle.API.MoodleCourseCompletionModel;
77

88
/// <summary>
99
/// IMoodleApiService.
1010
/// </summary>
1111
public interface IMoodleApiService
1212
{
13+
/// <summary>
14+
/// GetMoodleUserIdByUsernameAsync.
15+
/// </summary>
16+
/// <param name="currentUserId">The current LH User Id.</param>
17+
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
18+
Task<int> GetMoodleUserIdByUsernameAsync(int currentUserId);
19+
1320
/// <summary>
1421
/// GetEnrolledCoursesAsync.
1522
/// </summary>
1623
/// <param name="currentUserId">Moodle user id.</param>
1724
/// <param name="pageNumber">pageNumber.</param>
18-
/// <returns> List of MoodleCourseResponseViewModel.</returns>
19-
Task<List<MoodleCourseResponseViewModel>> GetEnrolledCoursesAsync(int currentUserId, int pageNumber);
25+
/// <returns> List of MoodleCourseResponseModel.</returns>
26+
Task<List<MoodleCourseResponseModel>> GetEnrolledCoursesAsync(int currentUserId, int pageNumber);
2027

2128
/// <summary>
2229
/// GetEnrolledCoursesAsync.
2330
/// </summary>
2431
/// <param name="userId">Moodle user id.</param>
2532
/// <param name="courseId">Moodle course id.</param>
2633
/// <param name="pageNumber">pageNumber.</param>
27-
/// <returns> List of MoodleCourseResponseViewModel.</returns>
28-
Task<MoodleCourseCompletionViewModel> GetCourseCompletionAsync(int userId, int courseId, int pageNumber);
34+
/// <returns> List of MoodleCourseResponseModel.</returns>
35+
Task<MoodleCourseCompletionModel> GetCourseCompletionAsync(int userId, int courseId, int pageNumber);
2936
}
3037
}

LearningHub.Nhs.WebUI/Models/DashboardViewModel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System.Collections.Generic;
44
using LearningHub.Nhs.Models.Dashboard;
5+
using LearningHub.Nhs.Models.Moodle.API;
56

67
/// <summary>
78
/// Defines the <see cref="DashboardViewModel" />.
@@ -33,6 +34,6 @@ public DashboardViewModel()
3334
/// <summary>
3435
/// Gets or sets a list of enrolled courses to be displayed in the dashboard.
3536
/// </summary>
36-
public List<MoodleCourseResponseViewModel> EnrolledCourses { get; set; }
37+
public List<MoodleCourseResponseModel> EnrolledCourses { get; set; }
3738
}
3839
}

LearningHub.Nhs.WebUI/Services/DashboardService.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using LearningHub.Nhs.Models.Dashboard;
1010
using LearningHub.Nhs.Models.Entities.Analytics;
1111
using LearningHub.Nhs.Models.Entities.Reporting;
12+
using LearningHub.Nhs.Models.Moodle.API;
1213
using LearningHub.Nhs.Services.Interface;
1314
using LearningHub.Nhs.WebUI.Interfaces;
1415
using LearningHub.Nhs.WebUI.Models;
@@ -128,14 +129,26 @@ public async Task<DashboardResourceResponseViewModel> GetResourcesAsync(string d
128129
/// <param name="currentUserId">The dashboard type.</param>
129130
/// <param name="pageNumber">The page Number.</param>
130131
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
131-
public async Task<List<MoodleCourseResponseViewModel>> GetEnrolledCoursesFromMoodleAsync(int currentUserId, int pageNumber)
132+
public async Task<List<MoodleCourseResponseModel>> GetEnrolledCoursesFromMoodleAsync(int currentUserId, int pageNumber)
132133
{
133-
List<MoodleCourseResponseViewModel> viewmodel = new List<MoodleCourseResponseViewModel> { };
134-
MoodleApiService moodleApiService = new MoodleApiService(this.moodleHttpClient);
134+
List<MoodleCourseResponseModel> viewmodel = new List<MoodleCourseResponseModel> { };
135+
MoodleApiService moodleApiService = new MoodleApiService(this.moodleHttpClient, this.OpenApiHttpClient);
135136
viewmodel = await moodleApiService.GetEnrolledCoursesAsync(currentUserId, pageNumber);
136137
return viewmodel;
137138
}
138139

140+
/// <summary>
141+
/// GetEnrolledCoursesFromMoodleAsync.
142+
/// </summary>
143+
/// <param name="currentUserId">The current User Id type.</param>
144+
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
145+
public async Task<int> GetMoodleUserIdAsync(int currentUserId)
146+
{
147+
MoodleApiService moodleApiService = new MoodleApiService(this.moodleHttpClient, this.OpenApiHttpClient);
148+
var moodleUserId = await moodleApiService.GetMoodleUserIdByUsernameAsync(currentUserId);
149+
return moodleUserId;
150+
}
151+
139152
/// <summary>
140153
/// Logs Dashboared viewed event.
141154
/// </summary>

0 commit comments

Comments
 (0)