From 652cb26109fea358e59e5c6f67e1964f4d7393fd Mon Sep 17 00:00:00 2001 From: akdalin-hee <124877763+akdalin-hee@users.noreply.github.com> Date: Fri, 19 Jan 2024 13:45:20 +0000 Subject: [PATCH 01/15] Merge pull request #11 from TechnologyEnhancedLearning/TD-3158-mylearning-accessibility-fix Move filter-summary outside of details tag. Amend itss styling so that it still appears in its default location relative to the adjacent elements. Make selector for "nhsuk-search__submit" more generic --- .../Styles/nhsuk/common.scss | 6 +-- .../Styles/nhsuk/pages/mylearning.scss | 40 ++++++++++--------- .../Views/MyLearning/Index.cshtml | 16 ++++---- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Styles/nhsuk/common.scss b/LearningHub.Nhs.WebUI/Styles/nhsuk/common.scss index 067b105fe..72d1fe015 100644 --- a/LearningHub.Nhs.WebUI/Styles/nhsuk/common.scss +++ b/LearningHub.Nhs.WebUI/Styles/nhsuk/common.scss @@ -139,9 +139,9 @@ padding-right: px2rem(68); } -#maincontent .search-width-container { +#maincontent { - .nhsuk-search__submit__green span.nhsuk-u-visually-hidden { + button[class^='nhsuk-search__submit'] span.nhsuk-u-visually-hidden { color: #595959; background-color: #fff; } @@ -222,4 +222,4 @@ white-space: nowrap; margin-top: auto !important; margin-bottom: auto !important; -} \ No newline at end of file +} diff --git a/LearningHub.Nhs.WebUI/Styles/nhsuk/pages/mylearning.scss b/LearningHub.Nhs.WebUI/Styles/nhsuk/pages/mylearning.scss index 0d28c2393..26b854a14 100644 --- a/LearningHub.Nhs.WebUI/Styles/nhsuk/pages/mylearning.scss +++ b/LearningHub.Nhs.WebUI/Styles/nhsuk/pages/mylearning.scss @@ -2,7 +2,7 @@ .my-learning { - + .downloadbuttonaslink { background: none !important; @@ -101,6 +101,8 @@ .search-filters { + position: relative; + .nhsuk-expander { border-width: 0; @@ -126,31 +128,33 @@ border-width: 12.124px 7px 0 7px; border-top-color: inherit } + } - .filter-summary { - color: $nhsuk-black; + .filter-summary { + color: $nhsuk-black; + display: flex; + line-height: 1.8; + position: absolute; + z-index: 1; + margin-top: 67px; + width: 100%; + + .clear-filter { + justify-content: flex-end; display: flex; - line-height: 1.8; - - .clear-filter { - justify-content: flex-end; - display: flex; - flex: 1 1 auto !important; - } + flex: 1 1 auto !important; + } - @media(max-width: 48.0525em) { - display: initial; + @media(max-width: 48.0525em) { + display: initial; - .clear-filter { - display: block; - margin-top: 12px; - } + .clear-filter { + display: block; + margin-top: 12px; } } } - - .search-filter-items { background-color: $nhsuk-grey-white; } diff --git a/LearningHub.Nhs.WebUI/Views/MyLearning/Index.cshtml b/LearningHub.Nhs.WebUI/Views/MyLearning/Index.cshtml index b04dff53d..01e337190 100644 --- a/LearningHub.Nhs.WebUI/Views/MyLearning/Index.cshtml +++ b/LearningHub.Nhs.WebUI/Views/MyLearning/Index.cshtml @@ -12,7 +12,7 @@ var routeData = ViewActivityHelper.GetActivityParameters(Model); } -@section styles{ +@section styles { @@ -57,11 +57,12 @@ } -
+

Search within My learning

- + + - -

This resource will launch in a new window

-
- - } + @* Generic File *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile) + { +
+
+
+

Download:

+

+ @GetFileExtension(resourceItem.GenericFileDetails.File.FileName) + @resourceItem.GenericFileDetails.File.FileName (@resourceItem.GenericFileDetails.File.FileSizeKb KB) +

+
+
- @* Generic File *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile) - { -
- - @if (!resourceItem.GenericFileDetails.ScormAiccContent) - { -
-
-

Download:

-

- @GetFileExtension(resourceItem.GenericFileDetails.File.FileName) - @resourceItem.GenericFileDetails.File.FileName (@resourceItem.GenericFileDetails.File.FileSizeKb KB) -

-
-
- } - else - { - -
-
-

You will be able to launch SCORM/AICC elearning resources on the Learning Hub in the future.

-

In the meantime you can download this and add it to another system that supports this type of resource.

- - -
- - - Why am I unable to view e-learning resources? - - -
-

- TBC -

-
-
-
-
- } -
- } +
+ } - @* Article *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Article) + @* Article *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Article) + { +
@Html.Raw(resourceItem.ArticleDetails.Description)
+ + @if (resourceItem.ArticleDetails.Files != null && resourceItem.ArticleDetails.Files.Count > 0) + { +
+
+

Documents

+ @foreach (var file in resourceItem.ArticleDetails.Files) { -
@Html.Raw(resourceItem.ArticleDetails.Description)
- - @if (resourceItem.ArticleDetails.Files != null && resourceItem.ArticleDetails.Files.Count > 0) - { -
-
-

Documents

- @foreach (var file in resourceItem.ArticleDetails.Files) - { -

- @GetFileExtension(file.FileName) - @file.FileName (@file.FileSizeKb KB) -

- } -
-
- } +

+ @GetFileExtension(file.FileName) + @file.FileName (@file.FileSizeKb KB) +

} +
+
+ } + } - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Video || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Audio || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || - resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Assessment) - { - if (resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case) - { -
- } + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Video || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Audio || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || + resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Assessment) + { + if (resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case) + { +
+ } - @* Video/Audio/Scorm/Case/Assessment require JavaScript - use Vue.js resource app. *@ + @* Video/Audio/Scorm/Case/Assessment require JavaScript - use Vue.js resource app. *@ -
- -
+
+ +
- - } - + } + + } - @* Description / Additional Information *@ - @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Case && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Assessment && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Html) + @* Description / Additional Information *@ + @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Case && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Assessment) + { +
+ @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Article || (resourceItem.Catalogue.RestrictedAccess && !Model.HasCatalogueAccess)) { -
- @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Article || (resourceItem.Catalogue.RestrictedAccess && !Model.HasCatalogueAccess)) - { -
@Html.Raw(resourceItem.Description)
- } +
@Html.Raw(resourceItem.Description)
+ } - @if (!string.IsNullOrEmpty(resourceItem.AdditionalInformation) && Model.HasCatalogueAccess) - { -
-

Additional information

-

@resourceItem.AdditionalInformation

-
- } -
+ @if (!string.IsNullOrEmpty(resourceItem.AdditionalInformation) && Model.HasCatalogueAccess) + { +
+

Additional information

+

@resourceItem.AdditionalInformation

+
} -
+ + } + \ No newline at end of file From 11d70dec4f4b406854d6504e42a383be5793b051 Mon Sep 17 00:00:00 2001 From: Swapnamol Abraham Date: Fri, 16 Feb 2024 13:19:00 +0000 Subject: [PATCH 04/15] TD-3546: Azure Log -Threads are mixing synchronous code with asynchronous code --- .../Filters/OfflineCheckFilter.cs | 21 +++++++++++-------- .../InternalSystemService.cs | 5 +++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Filters/OfflineCheckFilter.cs b/LearningHub.Nhs.WebUI/Filters/OfflineCheckFilter.cs index ef673b8ad..ab700abaa 100644 --- a/LearningHub.Nhs.WebUI/Filters/OfflineCheckFilter.cs +++ b/LearningHub.Nhs.WebUI/Filters/OfflineCheckFilter.cs @@ -46,18 +46,21 @@ public override async Task OnActionExecutionAsync(ActionExecutingContext context var internalSystem = await this.internalSystemService.GetByIdAsync((int)InternalSystemType.LearningHub); - if (controller != "Offline" - && !(controller == "Home" && action == "Logout") - && internalSystem.IsOffline - && (!user.Identity.IsAuthenticated || !(await this.userGroupService.UserHasPermissionAsync("System_Offline_Bypass")))) + if (internalSystem != null) { - context.Result = new RedirectToRouteResult( - new RouteValueDictionary - { + if (controller != "Offline" + && !(controller == "Home" && action == "Logout") + && internalSystem.IsOffline + && (!user.Identity.IsAuthenticated || !(await this.userGroupService.UserHasPermissionAsync("System_Offline_Bypass")))) + { + context.Result = new RedirectToRouteResult( + new RouteValueDictionary + { { "Controller", "Offline" }, { "Action", "Index" }, - }); - executeNextAction = false; + }); + executeNextAction = false; + } } if (executeNextAction) diff --git a/WebAPI/LearningHub.Nhs.Services/InternalSystemService.cs b/WebAPI/LearningHub.Nhs.Services/InternalSystemService.cs index 34ad5ff4d..33fb4dcbc 100644 --- a/WebAPI/LearningHub.Nhs.Services/InternalSystemService.cs +++ b/WebAPI/LearningHub.Nhs.Services/InternalSystemService.cs @@ -72,9 +72,10 @@ public async Task> GetAllAsync() /// /// The id. /// A representing the result of the asynchronous operation. - public Task GetByIdAsync(int id) + public async Task GetByIdAsync(int id) { - return Task.FromResult(this.GetAllAsync().Result.Single(x => x.Id == id)); + var allItems = await this.GetAllAsync(); + return allItems.Single(x => x.Id == id); } /// From 17875885060bc4ea08dced58e95a5f6f6231996e Mon Sep 17 00:00:00 2001 From: Oluwatobi Awe Date: Mon, 11 Mar 2024 02:24:44 +0000 Subject: [PATCH 05/15] TD-3551 audio and video certificate visibility --- .../Scripts/vuesrc/resource/ResourceContent.vue | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/ResourceContent.vue b/LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/ResourceContent.vue index a1e80d97a..909fd8396 100644 --- a/LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/ResourceContent.vue +++ b/LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/ResourceContent.vue @@ -426,6 +426,11 @@ window.location.pathname = './Home/Error'; }); } + + if (interactionType == "ended") { + setTimeout(() => { this.checkUserCertificateAvailability() }, 10000); + await this.recordActivityComplete(); + } }, async recordMediaPlayingEvent(): Promise { let currentMediaTime = this.getMediaPlayerDisplayTime(); From 658632b8ade3027b9a7b3f20f8d0ee1a6ef95655 Mon Sep 17 00:00:00 2001 From: Anju Jose Date: Sat, 9 Mar 2024 16:58:49 +0000 Subject: [PATCH 06/15] Fixes/Html --- .../Controllers/ResourceController.cs | 48 ++++++++----------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs index 629f61c26..3fe4b802d 100644 --- a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs @@ -1,8 +1,4 @@ -// -// Copyright (c) HEE.nhs.uk. -// - -namespace LearningHub.Nhs.WebUI.Controllers +namespace LearningHub.Nhs.WebUI.Controllers { using System; using System.Linq; @@ -10,8 +6,6 @@ namespace LearningHub.Nhs.WebUI.Controllers using System.Threading.Tasks; using LearningHub.Nhs.Caching; using LearningHub.Nhs.Models.Common; - using LearningHub.Nhs.Models.Entities.Hierarchy; - using LearningHub.Nhs.Models.Entities.Resource; using LearningHub.Nhs.Models.Enums; using LearningHub.Nhs.Models.Extensions; using LearningHub.Nhs.Models.Resource; @@ -179,14 +173,14 @@ public async Task Index(int resourceReferenceId, bool? acceptSens } // For article/image resources, immediately record the resource activity for this user. - if ((resource.ResourceTypeEnum == ResourceTypeEnum.Article || resource.ResourceTypeEnum == ResourceTypeEnum.Image) && ((resource.SensitiveContent && acceptSensitiveContent.HasValue && acceptSensitiveContent.Value) || !resource.SensitiveContent) && canAccessResource) + if ((resource.ResourceTypeEnum == ResourceTypeEnum.Article || resource.ResourceTypeEnum == ResourceTypeEnum.Image) && (!resource.SensitiveContent)) { var activity = new CreateResourceActivityViewModel() { ResourceVersionId = resource.ResourceVersionId, NodePathId = resource.NodePathId, ActivityStart = DateTime.UtcNow, // TODO: What about user's timezone offset when Javascript is disabled? Needs JavaScript. - ActivityStatus = ActivityStatusEnum.Launched, + ActivityStatus = ActivityStatusEnum.Completed, }; await this.activityService.CreateResourceActivityAsync(activity); } @@ -353,15 +347,13 @@ public async Task RateResource(ResourceRatingViewModel model) /// /// Ask user to confirm that they wish to edit a published resource. /// - /// The resourceId. - /// The resourceReferenceId. - /// The resourceTitle. + /// The ResourceIndexViewModel. /// The . [Authorize] - [Route("Resource/EditConfirm/{resourceId}/{resourceReferenceId}/{resourceTitle}")] - public IActionResult EditConfirm(int resourceId, int resourceReferenceId, string resourceTitle) + [Route("Resource/EditConfirm")] + public IActionResult EditConfirm(ResourceIndexViewModel viewModel) { - return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = resourceId, ResourceReferenceId = resourceReferenceId, ResourceTitle = resourceTitle }); + return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = viewModel.ResourceItem.ResourceId, ResourceReferenceId = viewModel.ResourceReferenceId, ResourceTitle = viewModel.ResourceItem.Title }); } /// @@ -380,24 +372,20 @@ public IActionResult EditConfirm(ResourceEditConfirmViewModel viewModel) /// /// Ask user to confirm that they wish to unpublish a published resource. /// - /// The resourceVersionId. - /// The resourceReferenceId. - /// The resourceType. - /// The catalogueNodeVersionId. - /// The resourceTitle. - /// The SCORM ESR link type. + /// The ResourceIndexViewModel. /// The . [Authorize] - [Route("Resource/UnpublishConfirm/{resourceVersionId}/{resourceReferenceId}/{resourceType}/{catalogueNodeVersionId}/{resourceTitle}/{scormEsrLinkType?}")] - public IActionResult UnpublishConfirm(int resourceVersionId, int resourceReferenceId, int resourceType, int catalogueNodeVersionId, string resourceTitle, int scormEsrLinkType) + [Route("Resource/UnpublishConfirm")] + public IActionResult UnpublishConfirm(ResourceIndexViewModel viewModel) { + int scormEsrLinkType = viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile ? (int)viewModel.ExternalContentDetails.EsrLinkType : 0; return this.View("UnpublishConfirm", new ResourceUnpublishConfirmViewModel { - ResourceVersionId = resourceVersionId, - ResourceReferenceId = resourceReferenceId, - ResourceType = (ResourceTypeEnum)resourceType, - CatalogueNodeVersionId = catalogueNodeVersionId, - ResourceTitle = resourceTitle, + ResourceVersionId = viewModel.ResourceItem.ResourceVersionId, + ResourceReferenceId = viewModel.ResourceReferenceId, + ResourceType = (ResourceTypeEnum)(int)viewModel.ResourceItem.ResourceTypeEnum, + CatalogueNodeVersionId = viewModel.ResourceItem.Catalogue.CatalogueNodeVersionId, + ResourceTitle = viewModel.ResourceItem.Title, ScormEsrLinkType = (EsrLinkType)scormEsrLinkType, }); } @@ -412,11 +400,13 @@ public IActionResult UnpublishConfirm(int resourceVersionId, int resourceReferen [Route("Resource/UnpublishConfirmPost")] public async Task UnpublishConfirm(ResourceUnpublishConfirmViewModel viewModel) { + var associatedFile = await this.resourceService.GetResourceVersionExtendedAsync(viewModel.ResourceVersionId); var validationResult = await this.resourceService.UnpublishResourceVersionAsync(viewModel.ResourceVersionId); var catalogue = await this.catalogueService.GetCatalogueAsync(viewModel.CatalogueNodeVersionId); if (validationResult.IsValid) { + _ = Task.Run(async () => { await this.fileService.PurgeResourceFile(associatedFile); }); if (viewModel.CatalogueNodeVersionId == 1) { return this.Redirect("/my-contributions/unpublished"); @@ -484,7 +474,7 @@ public async Task HtmlResourceContent(int resourceReferenceId, st ResourceVersionId = resourceVersionId, NodePathId = nodePathId, ActivityStart = DateTime.UtcNow, // TODO: What about user's timezone offset when Javascript is disabled? Needs JavaScript. - ActivityStatus = ActivityStatusEnum.Launched, + ActivityStatus = ActivityStatusEnum.Completed, }; await this.activityService.CreateResourceActivityAsync(activity); } From e99161e03d49662996f558bc92f9a7fe15674f5c Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:17:03 +0000 Subject: [PATCH 07/15] Revert "Fixes/Html" This reverts commit 658632b8ade3027b9a7b3f20f8d0ee1a6ef95655. --- .../Controllers/ResourceController.cs | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs index 3fe4b802d..629f61c26 100644 --- a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs @@ -1,4 +1,8 @@ -namespace LearningHub.Nhs.WebUI.Controllers +// +// Copyright (c) HEE.nhs.uk. +// + +namespace LearningHub.Nhs.WebUI.Controllers { using System; using System.Linq; @@ -6,6 +10,8 @@ using System.Threading.Tasks; using LearningHub.Nhs.Caching; using LearningHub.Nhs.Models.Common; + using LearningHub.Nhs.Models.Entities.Hierarchy; + using LearningHub.Nhs.Models.Entities.Resource; using LearningHub.Nhs.Models.Enums; using LearningHub.Nhs.Models.Extensions; using LearningHub.Nhs.Models.Resource; @@ -173,14 +179,14 @@ public async Task Index(int resourceReferenceId, bool? acceptSens } // For article/image resources, immediately record the resource activity for this user. - if ((resource.ResourceTypeEnum == ResourceTypeEnum.Article || resource.ResourceTypeEnum == ResourceTypeEnum.Image) && (!resource.SensitiveContent)) + if ((resource.ResourceTypeEnum == ResourceTypeEnum.Article || resource.ResourceTypeEnum == ResourceTypeEnum.Image) && ((resource.SensitiveContent && acceptSensitiveContent.HasValue && acceptSensitiveContent.Value) || !resource.SensitiveContent) && canAccessResource) { var activity = new CreateResourceActivityViewModel() { ResourceVersionId = resource.ResourceVersionId, NodePathId = resource.NodePathId, ActivityStart = DateTime.UtcNow, // TODO: What about user's timezone offset when Javascript is disabled? Needs JavaScript. - ActivityStatus = ActivityStatusEnum.Completed, + ActivityStatus = ActivityStatusEnum.Launched, }; await this.activityService.CreateResourceActivityAsync(activity); } @@ -347,13 +353,15 @@ public async Task RateResource(ResourceRatingViewModel model) /// /// Ask user to confirm that they wish to edit a published resource. /// - /// The ResourceIndexViewModel. + /// The resourceId. + /// The resourceReferenceId. + /// The resourceTitle. /// The . [Authorize] - [Route("Resource/EditConfirm")] - public IActionResult EditConfirm(ResourceIndexViewModel viewModel) + [Route("Resource/EditConfirm/{resourceId}/{resourceReferenceId}/{resourceTitle}")] + public IActionResult EditConfirm(int resourceId, int resourceReferenceId, string resourceTitle) { - return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = viewModel.ResourceItem.ResourceId, ResourceReferenceId = viewModel.ResourceReferenceId, ResourceTitle = viewModel.ResourceItem.Title }); + return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = resourceId, ResourceReferenceId = resourceReferenceId, ResourceTitle = resourceTitle }); } /// @@ -372,20 +380,24 @@ public IActionResult EditConfirm(ResourceEditConfirmViewModel viewModel) /// /// Ask user to confirm that they wish to unpublish a published resource. /// - /// The ResourceIndexViewModel. + /// The resourceVersionId. + /// The resourceReferenceId. + /// The resourceType. + /// The catalogueNodeVersionId. + /// The resourceTitle. + /// The SCORM ESR link type. /// The . [Authorize] - [Route("Resource/UnpublishConfirm")] - public IActionResult UnpublishConfirm(ResourceIndexViewModel viewModel) + [Route("Resource/UnpublishConfirm/{resourceVersionId}/{resourceReferenceId}/{resourceType}/{catalogueNodeVersionId}/{resourceTitle}/{scormEsrLinkType?}")] + public IActionResult UnpublishConfirm(int resourceVersionId, int resourceReferenceId, int resourceType, int catalogueNodeVersionId, string resourceTitle, int scormEsrLinkType) { - int scormEsrLinkType = viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile ? (int)viewModel.ExternalContentDetails.EsrLinkType : 0; return this.View("UnpublishConfirm", new ResourceUnpublishConfirmViewModel { - ResourceVersionId = viewModel.ResourceItem.ResourceVersionId, - ResourceReferenceId = viewModel.ResourceReferenceId, - ResourceType = (ResourceTypeEnum)(int)viewModel.ResourceItem.ResourceTypeEnum, - CatalogueNodeVersionId = viewModel.ResourceItem.Catalogue.CatalogueNodeVersionId, - ResourceTitle = viewModel.ResourceItem.Title, + ResourceVersionId = resourceVersionId, + ResourceReferenceId = resourceReferenceId, + ResourceType = (ResourceTypeEnum)resourceType, + CatalogueNodeVersionId = catalogueNodeVersionId, + ResourceTitle = resourceTitle, ScormEsrLinkType = (EsrLinkType)scormEsrLinkType, }); } @@ -400,13 +412,11 @@ public IActionResult UnpublishConfirm(ResourceIndexViewModel viewModel) [Route("Resource/UnpublishConfirmPost")] public async Task UnpublishConfirm(ResourceUnpublishConfirmViewModel viewModel) { - var associatedFile = await this.resourceService.GetResourceVersionExtendedAsync(viewModel.ResourceVersionId); var validationResult = await this.resourceService.UnpublishResourceVersionAsync(viewModel.ResourceVersionId); var catalogue = await this.catalogueService.GetCatalogueAsync(viewModel.CatalogueNodeVersionId); if (validationResult.IsValid) { - _ = Task.Run(async () => { await this.fileService.PurgeResourceFile(associatedFile); }); if (viewModel.CatalogueNodeVersionId == 1) { return this.Redirect("/my-contributions/unpublished"); @@ -474,7 +484,7 @@ public async Task HtmlResourceContent(int resourceReferenceId, st ResourceVersionId = resourceVersionId, NodePathId = nodePathId, ActivityStart = DateTime.UtcNow, // TODO: What about user's timezone offset when Javascript is disabled? Needs JavaScript. - ActivityStatus = ActivityStatusEnum.Completed, + ActivityStatus = ActivityStatusEnum.Launched, }; await this.activityService.CreateResourceActivityAsync(activity); } From ecfb49c244552987b59a6566224f01b1c6aef7ea Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Mon, 11 Mar 2024 07:40:40 +0000 Subject: [PATCH 08/15] Merge pull request #180 from TechnologyEnhancedLearning/Develop/Fixes/TD-3675-Fix-Issues-UnknownError-ResourceDetailsPage Develop/fixes/td 3675 fix issues unknown error resource details page --- .../Controllers/ResourceController.cs | 34 +++----- .../Views/Resource/Resource.cshtml | 84 ++++++++++--------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs index 629f61c26..5e9b91134 100644 --- a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs @@ -10,8 +10,6 @@ namespace LearningHub.Nhs.WebUI.Controllers using System.Threading.Tasks; using LearningHub.Nhs.Caching; using LearningHub.Nhs.Models.Common; - using LearningHub.Nhs.Models.Entities.Hierarchy; - using LearningHub.Nhs.Models.Entities.Resource; using LearningHub.Nhs.Models.Enums; using LearningHub.Nhs.Models.Extensions; using LearningHub.Nhs.Models.Resource; @@ -353,15 +351,13 @@ public async Task RateResource(ResourceRatingViewModel model) /// /// Ask user to confirm that they wish to edit a published resource. /// - /// The resourceId. - /// The resourceReferenceId. - /// The resourceTitle. + /// The ResourceIndexViewModel. /// The . [Authorize] - [Route("Resource/EditConfirm/{resourceId}/{resourceReferenceId}/{resourceTitle}")] - public IActionResult EditConfirm(int resourceId, int resourceReferenceId, string resourceTitle) + [Route("Resource/EditConfirm")] + public IActionResult EditConfirm(ResourceIndexViewModel viewModel) { - return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = resourceId, ResourceReferenceId = resourceReferenceId, ResourceTitle = resourceTitle }); + return this.View("EditConfirm", new ResourceEditConfirmViewModel { ResourceId = viewModel.ResourceItem.ResourceId, ResourceReferenceId = viewModel.ResourceReferenceId, ResourceTitle = viewModel.ResourceItem.Title }); } /// @@ -380,24 +376,20 @@ public IActionResult EditConfirm(ResourceEditConfirmViewModel viewModel) /// /// Ask user to confirm that they wish to unpublish a published resource. /// - /// The resourceVersionId. - /// The resourceReferenceId. - /// The resourceType. - /// The catalogueNodeVersionId. - /// The resourceTitle. - /// The SCORM ESR link type. + /// The ResourceIndexViewModel. /// The . [Authorize] - [Route("Resource/UnpublishConfirm/{resourceVersionId}/{resourceReferenceId}/{resourceType}/{catalogueNodeVersionId}/{resourceTitle}/{scormEsrLinkType?}")] - public IActionResult UnpublishConfirm(int resourceVersionId, int resourceReferenceId, int resourceType, int catalogueNodeVersionId, string resourceTitle, int scormEsrLinkType) + [Route("Resource/UnpublishConfirm")] + public IActionResult UnpublishConfirm(ResourceIndexViewModel viewModel) { + int scormEsrLinkType = viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || viewModel.ResourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile ? (int)viewModel.ExternalContentDetails.EsrLinkType : 0; return this.View("UnpublishConfirm", new ResourceUnpublishConfirmViewModel { - ResourceVersionId = resourceVersionId, - ResourceReferenceId = resourceReferenceId, - ResourceType = (ResourceTypeEnum)resourceType, - CatalogueNodeVersionId = catalogueNodeVersionId, - ResourceTitle = resourceTitle, + ResourceVersionId = viewModel.ResourceItem.ResourceVersionId, + ResourceReferenceId = viewModel.ResourceReferenceId, + ResourceType = (ResourceTypeEnum)(int)viewModel.ResourceItem.ResourceTypeEnum, + CatalogueNodeVersionId = viewModel.ResourceItem.Catalogue.CatalogueNodeVersionId, + ResourceTitle = viewModel.ResourceItem.Title, ScormEsrLinkType = (EsrLinkType)scormEsrLinkType, }); } diff --git a/LearningHub.Nhs.WebUI/Views/Resource/Resource.cshtml b/LearningHub.Nhs.WebUI/Views/Resource/Resource.cshtml index d0150991a..0c89a0f24 100644 --- a/LearningHub.Nhs.WebUI/Views/Resource/Resource.cshtml +++ b/LearningHub.Nhs.WebUI/Views/Resource/Resource.cshtml @@ -79,18 +79,22 @@ && resource.ResourceVersionIdPublishing == 0 && !resource.ReadOnly) { -
- Edit resource - Unpublish +
+ + + + + + +
+ + + + + + + +
} @@ -100,8 +104,12 @@ && !resource.ReadOnly) {
- Edit resource +
+ + + + +
}
@@ -174,13 +182,13 @@ {
- @if (Model.UserHasCertificate) - { -
- - -
- } + @if (Model.UserHasCertificate) + { +
+ + +
+ }
@if (resource.Id > 0 && !resource.Catalogue.Hidden && !(resource.VersionStatusEnum == VersionStatusEnum.Unpublished && !resource.DisplayForContributor)) - { + {
@@ -215,14 +223,14 @@ {
- @if (Model.UserHasCertificate) - { - displayCertificateButton = false; -
- - -
- } + @if (Model.UserHasCertificate) + { + displayCertificateButton = false; +
+ + +
+ }
@{ @@ -240,13 +248,13 @@ {
- @if (Model.UserHasCertificate && displayCertificateButton) - { -
- - -
- } + @if (Model.UserHasCertificate && displayCertificateButton) + { +
+ + +
+ }
-@section Scripts{ +@section Scripts { @if (ViewBag.UserAuthenticated) { From b15ad07de20dadeefa749c893a9e837e0c346f24 Mon Sep 17 00:00:00 2001 From: sarathlal-sarangadharan <120369940+sarathlal-sarangadharan@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:21:27 +0000 Subject: [PATCH 09/15] Merge pull request #150 from TechnologyEnhancedLearning/Develop/Fixes/TD-3688-Missing-In-Progress-resources-in-the-My-Accessed-Learning-tray TD-3688: Fixed missing In progress resources in the My Accessed Learning tray issue --- .../Stored Procedures/Resources/GetDashboardResources.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetDashboardResources.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetDashboardResources.sql index 18d83863b..b57d97063 100644 --- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetDashboardResources.sql +++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Resources/GetDashboardResources.sql @@ -15,6 +15,7 @@ -- 15 Jun 2023 RS Re-added BadgeUrl column following design change -- 27 Sep 2023 HV Included Paging and user resource activity -- 08 Nov 2023 OA Fixed latest resource activity entry selection(with updated logic for media activities) and status check for incomplete assessment. +-- 27 Feb 2024 SS Fixed missing In progress resources in the My Accessed Learning tray issue ------------------------------------------------------------------------------- CREATE PROCEDURE [resources].[GetDashboardResources] @@ -222,8 +223,7 @@ BEGIN BEGIN INSERT INTO @MyActivity SELECT TOP (@MaxRows) ra.ResourceId, MAX(ra.Id) ResourceActivityId - FROM - (SELECT a.* FROM activity.ResourceActivity a INNER JOIN (SELECT ResourceId, MAX(Id) as id FROM activity.ResourceActivity GROUP BY ResourceId ) AS b ON a.ResourceId = b.ResourceId AND a.id = b.id order by a.Id desc OFFSET 0 ROWS) ra + FROM activity.ResourceActivity ra JOIN [resources].[Resource] r ON ra.ResourceId = r.Id JOIN [resources].[ResourceVersion] rv ON rv.Id = ra.ResourceVersionId LEFT JOIN [resources].[AssessmentResourceVersion] arv ON arv.ResourceVersionId = ra.ResourceVersionId From 23732c21bd8031fba2d16785d2b9c5de88c5e617 Mon Sep 17 00:00:00 2001 From: Swapnamol <121869435+Swapnamol@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:54:02 +0000 Subject: [PATCH 10/15] Merge pull request #146 from TechnologyEnhancedLearning/Develop/Fixes/TD-3726-Video-not-recording-progress-properly-and-returning-unknownerror Develop/fixes/td 3726 video not recording progress properly and returning unknown error --- .../LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj | 2 +- LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj | 6 +----- WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj | 2 +- .../LearningHub.Nhs.Api.Shared.csproj | 2 +- .../LearningHub.Nhs.Api.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.Repository.csproj | 2 +- .../LearningHub.Nhs.Services.Interface.csproj | 2 +- .../LearningHub.Nhs.Services.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Services.csproj | 2 +- .../LearningHub.Nhs.Migration.ConsoleApp.csproj | 2 +- .../LearningHub.Nhs.Migration.Interface.csproj | 2 +- .../LearningHub.Nhs.Migration.Models.csproj | 2 +- .../LearningHub.Nhs.Migration.Staging.Repository.csproj | 2 +- .../LearningHub.Nhs.Migration.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Migration.csproj | 2 +- 16 files changed, 16 insertions(+), 20 deletions(-) diff --git a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj index 89241ab9f..cd2e8ab82 100644 --- a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj +++ b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj @@ -89,7 +89,7 @@ - + diff --git a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj index 16161f081..f6b59d3a7 100644 --- a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj +++ b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj @@ -28,10 +28,6 @@ - - - - @@ -112,7 +108,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj index d0b8cbace..02588b3d5 100644 --- a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj +++ b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj @@ -27,7 +27,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj index 1a077edd8..2237d13b1 100644 --- a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj +++ b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj index cf477a8d2..521498f62 100644 --- a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj index 3cd8e1a81..cef7a1ea4 100644 --- a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj index e1327564c..26911bee5 100644 --- a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj +++ b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj index 5b31e41c3..1fdd7ab6f 100644 --- a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj @@ -16,7 +16,7 @@ - + all diff --git a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj index 47e0e5cc5..4ea88ba5d 100644 --- a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj index 0a200d9a9..7dfe5a51f 100644 --- a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj +++ b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj index 4548a8fa3..dee3120cc 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj @@ -24,7 +24,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj index 1bf03adeb..d8747efba 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj index b67880c09..8cca06b07 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj @@ -10,7 +10,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj index ca56473a8..80a160b33 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj index 976365de3..28eef2fea 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj index ea8b9d3eb..9f9491d3d 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 60141fc9d9e801bf834727ccbde5b100fad12052 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:40:14 +0000 Subject: [PATCH 11/15] Revert "Merge pull request #146 from TechnologyEnhancedLearning/Develop/Fixes/TD-3726-Video-not-recording-progress-properly-and-returning-unknownerror" This reverts commit 23732c21bd8031fba2d16785d2b9c5de88c5e617. --- .../LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj | 2 +- LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj | 6 +++++- WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj | 2 +- .../LearningHub.Nhs.Api.Shared.csproj | 2 +- .../LearningHub.Nhs.Api.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.Repository.csproj | 2 +- .../LearningHub.Nhs.Services.Interface.csproj | 2 +- .../LearningHub.Nhs.Services.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Services.csproj | 2 +- .../LearningHub.Nhs.Migration.ConsoleApp.csproj | 2 +- .../LearningHub.Nhs.Migration.Interface.csproj | 2 +- .../LearningHub.Nhs.Migration.Models.csproj | 2 +- .../LearningHub.Nhs.Migration.Staging.Repository.csproj | 2 +- .../LearningHub.Nhs.Migration.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Migration.csproj | 2 +- 16 files changed, 20 insertions(+), 16 deletions(-) diff --git a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj index cd2e8ab82..89241ab9f 100644 --- a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj +++ b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj @@ -89,7 +89,7 @@ - + diff --git a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj index f6b59d3a7..16161f081 100644 --- a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj +++ b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj @@ -28,6 +28,10 @@ + + + + @@ -108,7 +112,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj index 02588b3d5..d0b8cbace 100644 --- a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj +++ b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj @@ -27,7 +27,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj index 2237d13b1..1a077edd8 100644 --- a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj +++ b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj index 521498f62..cf477a8d2 100644 --- a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj index cef7a1ea4..3cd8e1a81 100644 --- a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj index 26911bee5..e1327564c 100644 --- a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj +++ b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj index 1fdd7ab6f..5b31e41c3 100644 --- a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj @@ -16,7 +16,7 @@ - + all diff --git a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj index 4ea88ba5d..47e0e5cc5 100644 --- a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj index 7dfe5a51f..0a200d9a9 100644 --- a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj +++ b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj index dee3120cc..4548a8fa3 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj @@ -24,7 +24,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj index d8747efba..1bf03adeb 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj index 8cca06b07..b67880c09 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj @@ -10,7 +10,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj index 80a160b33..ca56473a8 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj index 28eef2fea..976365de3 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj index 9f9491d3d..ea8b9d3eb 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From a54794d9885b239dcf3237eb3190dfda41fcdefb Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:47:58 +0000 Subject: [PATCH 12/15] Model-VersionUpdate --- AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj | 2 +- LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj | 2 +- WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj | 2 +- .../LearningHub.Nhs.Api.Shared.csproj | 2 +- .../LearningHub.Nhs.Api.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.Repository.csproj | 2 +- .../LearningHub.Nhs.Services.Interface.csproj | 2 +- .../LearningHub.Nhs.Services.UnitTests.csproj | 2 +- WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj | 2 +- .../LearningHub.Nhs.Migration.ConsoleApp.csproj | 2 +- .../LearningHub.Nhs.Migration.Interface.csproj | 2 +- .../LearningHub.Nhs.Migration.Models.csproj | 2 +- .../LearningHub.Nhs.Migration.Staging.Repository.csproj | 2 +- .../LearningHub.Nhs.Migration.UnitTests.csproj | 2 +- .../LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj index 89241ab9f..337bb21f5 100644 --- a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj +++ b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj @@ -89,7 +89,7 @@ - + diff --git a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj index 16161f081..c052f2516 100644 --- a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj +++ b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj @@ -112,7 +112,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj index d0b8cbace..e56e18a79 100644 --- a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj +++ b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj @@ -27,7 +27,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj index 1a077edd8..0df2956b9 100644 --- a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj +++ b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj index cf477a8d2..acf8cf30b 100644 --- a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj index 3cd8e1a81..a9edf892b 100644 --- a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj index e1327564c..b78eb079f 100644 --- a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj +++ b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj index 5b31e41c3..43fcaa997 100644 --- a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj +++ b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj @@ -16,7 +16,7 @@ - + all diff --git a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj index 47e0e5cc5..851d4a9b7 100644 --- a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj +++ b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj index 0a200d9a9..d9cfdd580 100644 --- a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj +++ b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj @@ -13,7 +13,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj index 4548a8fa3..7990f7c87 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj @@ -24,7 +24,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj index 1bf03adeb..5c0d5b6b9 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj index b67880c09..e51a95a68 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj @@ -10,7 +10,7 @@ - + all diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj index ca56473a8..21be892d0 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj index 976365de3..930bff128 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj index ea8b9d3eb..6b9db73c4 100644 --- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj +++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 08fb6fd1e03d856dfe754f5c5bff1bce7e5a45a5 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:48:42 +0000 Subject: [PATCH 13/15] Merge pull request #151 from TechnologyEnhancedLearning/Develop/Fixes/TD-3744-Jobrolewithslashincauseserrorduringregistration TD-3744-Job role with slash in causes error during registration --- .../Controllers/AccountController.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/LearningHub.Nhs.WebUI/Controllers/AccountController.cs b/LearningHub.Nhs.WebUI/Controllers/AccountController.cs index d8c324d1d..1b9bc87ae 100644 --- a/LearningHub.Nhs.WebUI/Controllers/AccountController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/AccountController.cs @@ -4,6 +4,7 @@ namespace LearningHub.Nhs.WebUI.Controllers { + using System; using System.Collections.Generic; using System.Linq; using System.Net; @@ -1236,7 +1237,17 @@ private async Task GetAccountConfirmationDetails(Ac var employer = await this.locationService.GetByIdAsync(int.TryParse(accountCreationViewModel.LocationId, out int primaryEmploymentId) ? primaryEmploymentId : 0); var region = await this.regionService.GetAllAsync(); var specialty = await this.specialtyService.GetSpecialtiesAsync(); - var role = await this.jobRoleService.GetPagedFilteredAsync(accountCreationViewModel.CurrentRoleName, accountCreationViewModel.CurrentPageIndex, UserRegistrationContentPageSize); + var role = new Tuple>(0, null); + if (!string.IsNullOrEmpty(accountCreationViewModel.CurrentRoleName) && accountCreationViewModel.CurrentRoleName.Contains('/')) + { + string jobrole = accountCreationViewModel.CurrentRoleName.Replace("/", " "); + role = await this.jobRoleService.GetPagedFilteredAsync(jobrole, accountCreationViewModel.CurrentPageIndex, UserRegistrationContentPageSize); + } + else + { + role = await this.jobRoleService.GetPagedFilteredAsync(accountCreationViewModel.CurrentRoleName, accountCreationViewModel.CurrentPageIndex, UserRegistrationContentPageSize); + } + if (role.Item1 > 0) { accountCreationViewModel.CurrentRoleName = role.Item2.FirstOrDefault(x => x.Id == int.Parse(accountCreationViewModel.CurrentRole)).NameWithStaffGroup; From 6ddefc0cdd535a9516e84e3a7ba491133286c563 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:52:36 +0000 Subject: [PATCH 14/15] UpdateinHtml-Filter --- .../Views/Resource/_ResourceItem.cshtml | 310 +++++++++--------- 1 file changed, 163 insertions(+), 147 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Views/Resource/_ResourceItem.cshtml b/LearningHub.Nhs.WebUI/Views/Resource/_ResourceItem.cshtml index a406340ab..fec0338dd 100644 --- a/LearningHub.Nhs.WebUI/Views/Resource/_ResourceItem.cshtml +++ b/LearningHub.Nhs.WebUI/Views/Resource/_ResourceItem.cshtml @@ -4,187 +4,203 @@ @using LearningHub.Nhs.WebUI.Models @using LearningHub.Nhs.WebUI.Models.Resource @{ - var resourceItem = Model.ResourceItem; - var canShowMoreDetails = User.Identity.IsAuthenticated; - if (canShowMoreDetails && resourceItem.ResourceAccessibilityEnum == ResourceAccessibilityEnum.FullAccess) - { - canShowMoreDetails = !User.IsInRole("BasicUser"); - } - - string GetFileLink(string filePath, string fileName) - { - return $"/api/resource/DownloadResource?filePath={filePath}&fileName={Uri.EscapeDataString(fileName)}"; - } - - string GetDownloadResourceLink(string filePath, string fileName) - { - return $"/api/resource/DownloadResourceAndRecordActivity?resourceVersionId={resourceItem.ResourceVersionId}&nodePathId={resourceItem.NodePathId}&filePath={filePath}&fileName={Uri.EscapeDataString(fileName)}"; - } - - string GetWeblinkNavigateLink(string url) - { - return $"/api/resource/NavigateToWeblinkAndRecordActivity?resourceVersionId={resourceItem.ResourceVersionId}&nodePathId={resourceItem.NodePathId}&url={Uri.EscapeDataString(url)}"; - } - - string GetFileExtension(string filename) - { - var extension = UtilityHelper.GetFileExtension(filename); - - if (string.IsNullOrEmpty(extension)) + var resourceItem = Model.ResourceItem; + var canShowMoreDetails = User.Identity.IsAuthenticated; + if (canShowMoreDetails && resourceItem.ResourceAccessibilityEnum == ResourceAccessibilityEnum.FullAccess) { - return "-"; + canShowMoreDetails = !User.IsInRole("BasicUser"); } - return extension.ToUpper(); - } - - string GetSensitiveContentUrl() - { - if (this.ViewContext.HttpContext.Request.QueryString.Value == "") + string GetFileLink(string filePath, string fileName) { - return "?acceptSensitiveContent=true"; + return $"/api/resource/DownloadResource?filePath={filePath}&fileName={Uri.EscapeDataString(fileName)}"; } - else + + string GetDownloadResourceLink(string filePath, string fileName) { - return this.ViewContext.HttpContext.Request.QueryString.Value + "&acceptSensitiveContent=true"; + return $"/api/resource/DownloadResourceAndRecordActivity?resourceVersionId={resourceItem.ResourceVersionId}&nodePathId={resourceItem.NodePathId}&filePath={filePath}&fileName={Uri.EscapeDataString(fileName)}"; } - } -} -
-
- - @if (canShowMoreDetails && resourceItem.SensitiveContent && Model.HasCatalogueAccess) + string GetWeblinkNavigateLink(string url) { - + return $"/api/resource/NavigateToWeblinkAndRecordActivity?resourceVersionId={resourceItem.ResourceVersionId}&nodePathId={resourceItem.NodePathId}&url={Uri.EscapeDataString(url)}"; } - - @if (Model.HasCatalogueAccess && !resourceItem.SensitiveContent) + string GetFileExtension(string filename) { -
+ var extension = UtilityHelper.GetFileExtension(filename); - @* Image *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Image) + if (string.IsNullOrEmpty(extension)) { -
-
-
- @resourceItem.Title -
- -
-
+ return "-"; } - @* Weblink *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.WebLink) - { -
-
-

Visit site:

- @{ - string displayText = resourceItem.WebLinkDetails.DisplayText; + return extension.ToUpper(); + } - if (string.IsNullOrEmpty(displayText)) - { - displayText = resourceItem.WebLinkDetails.Url; - } - } -

@displayText

-
-
+ string GetSensitiveContentUrl() + { + if (this.ViewContext.HttpContext.Request.QueryString.Value == "") + { + return "?acceptSensitiveContent=true"; } + else + { + return this.ViewContext.HttpContext.Request.QueryString.Value + "&acceptSensitiveContent=true"; + } + } +} + +
+
- @* Generic File *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile) + @if (canShowMoreDetails && resourceItem.SensitiveContent && Model.HasCatalogueAccess) { -
-
-
-

Download:

-

- @GetFileExtension(resourceItem.GenericFileDetails.File.FileName) - @resourceItem.GenericFileDetails.File.FileName (@resourceItem.GenericFileDetails.File.FileSizeKb KB) +

+

+ Sensitive content +

+

+ This resource contains sensitive content which some people may find offensive or disturbing.

-
+
- -
} - @* Article *@ - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Article) + + @if (Model.HasCatalogueAccess && !resourceItem.SensitiveContent) { -
@Html.Raw(resourceItem.ArticleDetails.Description)
- - @if (resourceItem.ArticleDetails.Files != null && resourceItem.ArticleDetails.Files.Count > 0) - { -
-
-

Documents

- @foreach (var file in resourceItem.ArticleDetails.Files) +
+ + @* Image *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Image) { -

- @GetFileExtension(file.FileName) - @file.FileName (@file.FileSizeKb KB) -

+
+
+
+ @resourceItem.Title +
+ +
+
} -
-
- } - } - @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Video || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Audio || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || - resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Assessment) - { - if (resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case) - { -
- } + @* Weblink *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.WebLink) + { +
+
+

Visit site:

+ @{ + string displayText = resourceItem.WebLinkDetails.DisplayText; + + if (string.IsNullOrEmpty(displayText)) + { + displayText = resourceItem.WebLinkDetails.Url; + } + } +

@displayText

+
+
+ } - @* Video/Audio/Scorm/Case/Assessment require JavaScript - use Vue.js resource app. *@ + @* Generic File *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.GenericFile) + { +
+
+
+

Download:

+

+ @GetFileExtension(resourceItem.GenericFileDetails.File.FileName) + @resourceItem.GenericFileDetails.File.FileName (@resourceItem.GenericFileDetails.File.FileSizeKb KB) +

+
+
+ +
+ } -
- -
+ @* Article *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Article) + { +
@Html.Raw(resourceItem.ArticleDetails.Description)
+ + @if (resourceItem.ArticleDetails.Files != null && resourceItem.ArticleDetails.Files.Count > 0) + { +
+
+

Documents

+ @foreach (var file in resourceItem.ArticleDetails.Files) + { +

+ @GetFileExtension(file.FileName) + @file.FileName (@file.FileSizeKb KB) +

+ } +
+
+ } + } + @* Html Resource *@ + @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Html) + { +
+
+ + + +

This resource will launch in a new window

+
+
+ } - - } -
- } - @* Description / Additional Information *@ - @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Case && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Assessment) - { -
- @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Article || (resourceItem.Catalogue.RestrictedAccess && !Model.HasCatalogueAccess)) - { -
@Html.Raw(resourceItem.Description)
+ @if (canShowMoreDetails && resourceItem.ResourceTypeEnum == ResourceTypeEnum.Video || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Audio || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Scorm || + resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case || resourceItem.ResourceTypeEnum == ResourceTypeEnum.Assessment) + { + if (resourceItem.ResourceTypeEnum == ResourceTypeEnum.Case) + { +
+ } + + @* Video/Audio/Scorm/Case/Assessment require JavaScript - use Vue.js resource app. *@ + +
+ +
+ + + } +
} - @if (!string.IsNullOrEmpty(resourceItem.AdditionalInformation) && Model.HasCatalogueAccess) + @* Description / Additional Information *@ + @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Case && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Assessment && resourceItem.ResourceTypeEnum != ResourceTypeEnum.Html) { -
-

Additional information

-

@resourceItem.AdditionalInformation

-
+
+ @if (resourceItem.ResourceTypeEnum != ResourceTypeEnum.Article || (resourceItem.Catalogue.RestrictedAccess && !Model.HasCatalogueAccess)) + { +
@Html.Raw(resourceItem.Description)
+ } + + @if (!string.IsNullOrEmpty(resourceItem.AdditionalInformation) && Model.HasCatalogueAccess) + { +
+

Additional information

+

@resourceItem.AdditionalInformation

+
+ } +
} -
- } -
+
\ No newline at end of file From 8f4dfa477601a49bd4d93821944fc46bb40912ad Mon Sep 17 00:00:00 2001 From: OluwatobiAwe <114475132+OluwatobiAwe@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:26:12 +0000 Subject: [PATCH 15/15] Merge pull request #195 from TechnologyEnhancedLearning/Develop/Fixes/TD-3881 TD-3881 stream audio or video file content within html resource --- .../Controllers/ResourceController.cs | 17 ++++++++++---- .../Interfaces/IFileService.cs | 8 +++++++ LearningHub.Nhs.WebUI/Services/FileService.cs | 23 +++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs index 5e9b91134..8e48edf82 100644 --- a/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs +++ b/LearningHub.Nhs.WebUI/Controllers/ResourceController.cs @@ -486,15 +486,24 @@ public async Task HtmlResourceContent(int resourceReferenceId, st contentType = "text/html"; } - var file = await this.fileService.DownloadFileAsync(contentFilePath, path); - if (file != null) + if (contentType.Contains("video") || contentType.Contains("audio")) { - return this.File(file.Content, contentType); + var stream = await this.fileService.StreamFileAsync(contentFilePath, path); + if (stream != null) + { + return this.File(stream, contentType, enableRangeProcessing: true); + } } else { - return this.Ok(this.Content("No file found")); + var file = await this.fileService.DownloadFileAsync(contentFilePath, path); + if (file != null) + { + return this.File(file.Content, contentType); + } } + + return this.Ok(this.Content("No file found")); } } } \ No newline at end of file diff --git a/LearningHub.Nhs.WebUI/Interfaces/IFileService.cs b/LearningHub.Nhs.WebUI/Interfaces/IFileService.cs index 684e391c1..7b1af9a68 100644 --- a/LearningHub.Nhs.WebUI/Interfaces/IFileService.cs +++ b/LearningHub.Nhs.WebUI/Interfaces/IFileService.cs @@ -29,6 +29,14 @@ public interface IFileService /// A representing the result of the asynchronous operation. Task DownloadFileAsync(string filePath, string fileName); + /// + /// The StreamFileAsync. + /// + /// The filePath. + /// The fileName. + /// The . + Task StreamFileAsync(string filePath, string fileName); + /// /// The ProcessFile. /// diff --git a/LearningHub.Nhs.WebUI/Services/FileService.cs b/LearningHub.Nhs.WebUI/Services/FileService.cs index c5661edf5..88d5b2579 100644 --- a/LearningHub.Nhs.WebUI/Services/FileService.cs +++ b/LearningHub.Nhs.WebUI/Services/FileService.cs @@ -98,6 +98,29 @@ public async Task DownloadFileAsync(string filePath, stri return null; } + /// + /// The StreamFileAsync. + /// + /// The filePath. + /// The fileName. + /// The . + public async Task StreamFileAsync(string filePath, string fileName) + { + var directory = this.ShareClient.GetDirectoryClient(filePath); + + if (await directory.ExistsAsync()) + { + var file = directory.GetFileClient(fileName); + + if (await file.ExistsAsync()) + { + return await file.OpenReadAsync(); + } + } + + return null; + } + /// /// The ProcessFile. ///