Skip to content

Commit 3de8392

Browse files
author
Binon
committed
fixing the conflict
2 parents 07ff7c4 + 39ac467 commit 3de8392

File tree

85 files changed

+4006
-330
lines changed

Some content is hidden

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

85 files changed

+4006
-330
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,6 @@ obj
5353
/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj.user
5454
/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj.user
5555
/ReportAPI/LearningHub.Nhs.ReportApi/web.config
56+
/AdminUI/LearningHub.Nhs.AdminUI/web.config
57+
/LearningHub.Nhs.WebUI/web.config
58+
/WebAPI/LearningHub.Nhs.API/web.config

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:

AdminUI/LearningHub.Nhs.AdminUI/web.config

Lines changed: 0 additions & 21 deletions
This file was deleted.

LearningHub.Nhs.WebUI/Controllers/HomeController.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class HomeController : BaseController
4040
private readonly IDashboardService dashboardService;
4141
private readonly IContentService contentService;
4242
private readonly IFeatureManager featureManager;
43+
private readonly IUserGroupService userGroupService;
4344
private readonly Microsoft.Extensions.Configuration.IConfiguration configuration;
4445

4546
/// <summary>
@@ -55,6 +56,7 @@ public class HomeController : BaseController
5556
/// <param name="dashboardService">Dashboard service.</param>
5657
/// <param name="contentService">Content service.</param>
5758
/// <param name="featureManager"> featureManager.</param>
59+
/// <param name="userGroupService"> userGroupService.</param>
5860
/// <param name="configuration"> config.</param>
5961
public HomeController(
6062
IHttpClientFactory httpClientFactory,
@@ -67,6 +69,7 @@ public HomeController(
6769
IDashboardService dashboardService,
6870
IContentService contentService,
6971
IFeatureManager featureManager,
72+
IUserGroupService userGroupService,
7073
Microsoft.Extensions.Configuration.IConfiguration configuration)
7174
: base(hostingEnvironment, httpClientFactory, logger, settings.Value)
7275
{
@@ -76,6 +79,7 @@ public HomeController(
7679
this.dashboardService = dashboardService;
7780
this.contentService = contentService;
7881
this.featureManager = featureManager;
82+
this.userGroupService = userGroupService;
7983
this.configuration = configuration;
8084
}
8185

@@ -212,6 +216,7 @@ public async Task<IActionResult> Index(string myLearningDashboard = "my-in-progr
212216
var learningTask = this.dashboardService.GetMyAccessLearningsAsync(myLearningDashboard, 1);
213217
var resourcesTask = this.dashboardService.GetResourcesAsync(resourceDashboard, 1);
214218
var cataloguesTask = this.dashboardService.GetCataloguesAsync(catalogueDashboard, 1);
219+
var userGroupsTask = this.userGroupService.UserHasCatalogueContributionPermission();
215220

216221
var enrolledCoursesTask = Task.FromResult(new List<MoodleCourseResponseViewModel>());
217222
var enableMoodle = Task.Run(() => this.featureManager.IsEnabledAsync(FeatureFlags.EnableMoodle)).Result;
@@ -222,7 +227,7 @@ public async Task<IActionResult> Index(string myLearningDashboard = "my-in-progr
222227
enrolledCoursesTask = this.dashboardService.GetEnrolledCoursesFromMoodleAsync(this.CurrentMoodleUserId, 1);
223228
}
224229

225-
await Task.WhenAll(learningTask, resourcesTask, cataloguesTask);
230+
await Task.WhenAll(learningTask, resourcesTask, cataloguesTask, userGroupsTask);
226231

227232
var model = new DashboardViewModel()
228233
{
@@ -231,7 +236,8 @@ public async Task<IActionResult> Index(string myLearningDashboard = "my-in-progr
231236
Catalogues = await cataloguesTask,
232237
EnrolledCourses = await enrolledCoursesTask,
233238
};
234-
239+
var userHasContributePermission = await userGroupsTask;
240+
this.ViewBag.userHasContributePermission = userHasContributePermission;
235241
if (!string.IsNullOrEmpty(this.Request.Query["preview"]) && Convert.ToBoolean(this.Request.Query["preview"]))
236242
{
237243
return this.View("LandingPage", await this.GetLandingPageContent(Convert.ToBoolean(this.Request.Query["preview"])));
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/Interfaces/IUserGroupService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ public interface IUserGroupService
2222
/// <returns>The <see cref="Task{List}"/>.</returns>
2323
Task<List<RoleUserGroupViewModel>> GetRoleUserGroupDetailForUserAsync(int userId);
2424

25+
/// <summary>
26+
/// The UserHasCatalogueContributionPermission.
27+
/// </summary>
28+
/// <returns>The <see cref="UserHasCatalogueContributionPermission"/>.</returns>
29+
Task<bool> UserHasCatalogueContributionPermission();
30+
2531
/// <summary>
2632
/// Check if user has given permission.
2733
/// </summary>

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/NavigationPermissionService.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@
1111
public class NavigationPermissionService : INavigationPermissionService
1212
{
1313
private readonly IResourceService resourceService;
14+
private readonly IUserGroupService userGroupService;
1415

1516
/// <summary>
1617
/// Initializes a new instance of the <see cref="NavigationPermissionService"/> class.
1718
/// </summary>
1819
/// <param name="resourceService">Resource service.</param>
19-
public NavigationPermissionService(IResourceService resourceService)
20+
/// <param name="userGroupService">UserGroup service.</param>
21+
public NavigationPermissionService(
22+
IResourceService resourceService,
23+
IUserGroupService userGroupService)
2024
{
2125
this.resourceService = resourceService;
26+
this.userGroupService = userGroupService;
2227
}
2328

2429
/// <summary>
@@ -52,7 +57,7 @@ public async Task<NavigationModel> GetNavigationModelAsync(IPrincipal user, bool
5257
}
5358
else if (user.IsInRole("BlueUser"))
5459
{
55-
return this.AuthenticatedBlueUser(controllerName);
60+
return await this.AuthenticatedBlueUser(controllerName);
5661
}
5762
else
5863
{
@@ -114,11 +119,11 @@ private NavigationModel AuthenticatedAdministrator(string controllerName)
114119
/// </summary>
115120
/// <param name="controllerName">The controller name.</param>
116121
/// <returns>The <see cref="NavigationModel"/>.</returns>
117-
private NavigationModel AuthenticatedBlueUser(string controllerName)
122+
private async Task<NavigationModel> AuthenticatedBlueUser(string controllerName)
118123
{
119124
return new NavigationModel()
120125
{
121-
ShowMyContributions = true,
126+
ShowMyContributions = await this.userGroupService.UserHasCatalogueContributionPermission(),
122127
ShowMyLearning = true,
123128
ShowMyBookmarks = true,
124129
ShowSearch = controllerName != "search" && controllerName != string.Empty,

0 commit comments

Comments
 (0)