Skip to content

Commit 80a841b

Browse files
committed
RC changes - WebAPI
1 parent 46da918 commit 80a841b

File tree

75 files changed

+1482
-233
lines changed

Some content is hidden

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

75 files changed

+1482
-233
lines changed

LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/ResourceContent.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@
169169
170170
// call complete activity if resource type is media or scorm.
171171
if (this.userAuthenticated && (this.resourceItem.resourceTypeEnum === ResourceType.VIDEO || this.resourceItem.resourceTypeEnum === ResourceType.AUDIO) && this.hasResourceAccess()) {
172-
var isIE11 = (!!window.MSInputMethodContext && !!((<any>document).documentMode));
172+
//var isIE11 = (!!window.MSInputMethodContext && !!((<any>document).documentMode));
173+
var isIE11 = (!!((window as any).MSInputMethodContext) && !!((document as any).documentMode));
173174
var self = this;
174175
175176
if (isIE11) {

LearningHub.Nhs.WebUI/Scripts/vuesrc/resource/blocks/ImageCarouselViewer.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import ImagePublishedView from "../../contribute-resource/components/published-view/ImagePublishedView.vue";
3939
import { Carousel3d, Slide } from 'vue-carousel-3d';
4040
import ImageCarouselImageView from "./ImageCarouselImageView.vue";
41+
let counterInterval: undefined | ReturnType<typeof setTimeout>;
4142
4243
export default Vue.extend({
4344
components: {
@@ -49,7 +50,7 @@
4950
},
5051
data() {
5152
return {
52-
counterInterval: 0,
53+
counterInterval,
5354
}
5455
},
5556
created() {

WebAPI/LearningHub.Nhs.API/Controllers/CatalogueController.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,14 @@ public async Task<IActionResult> InviteUser(RestrictedCatalogueInviteUserViewMod
290290
/// </summary>
291291
/// <param name="reference">The reference.</param>
292292
/// <param name="vm">The view model.</param>
293+
/// <param name="accessType">The accessType.</param>
293294
/// <returns>The ActionResult.</returns>
294295
[HttpPost]
295-
[Route("RequestAccess/{reference}")]
296+
[Route("RequestAccess/{reference}/{accessType}")]
296297
[Authorize]
297-
public async Task<IActionResult> RequestAccess(string reference, CatalogueAccessRequestViewModel vm)
298+
public async Task<IActionResult> RequestAccess(string reference, CatalogueAccessRequestViewModel vm, string accessType)
298299
{
299-
return this.Ok(await this.catalogueService.RequestAccessAsync(this.CurrentUserId, reference, vm));
300+
return this.Ok(await this.catalogueService.RequestAccessAsync(this.CurrentUserId, reference, vm, accessType));
300301
}
301302

302303
/// <summary>
@@ -360,7 +361,7 @@ public async Task<IActionResult> RejectAccessRequest(int accessRequestId, Catalo
360361
[Authorize]
361362
public async Task<IActionResult> AcceptAccessRequest(int accessRequestId)
362363
{
363-
return this.Ok(await this.catalogueService.AcceptAccessAsync(this.CurrentUserId, accessRequestId));
364+
return this.Ok(await this.catalogueService.AcceptAccessAsync(this.CurrentUserId, accessRequestId));
364365
}
365366

366367
/// <summary>

WebAPI/LearningHub.Nhs.API/Controllers/ScormContentServerController.cs renamed to WebAPI/LearningHub.Nhs.API/Controllers/ContentServerController.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// <copyright file="ScormContentServerController.cs" company="HEE.nhs.uk">
1+
// <copyright file="ContentServerController.cs" company="HEE.nhs.uk">
22
// Copyright (c) HEE.nhs.uk.
33
// </copyright>
44

@@ -20,23 +20,23 @@ namespace LearningHub.Nhs.Api.Controllers
2020
[Authorize(Policy = "AuthorizeOrCallFromLH")]
2121
[Route("api/[controller]")]
2222
[ApiController]
23-
public class ScormContentServerController : ApiControllerBase
23+
public class ContentServerController : ApiControllerBase
2424
{
2525
/// <summary>
2626
/// The scorm content server service.
2727
/// </summary>
2828
private IScormContentServerService scormContentServerService;
2929

3030
/// <summary>
31-
/// Initializes a new instance of the <see cref="ScormContentServerController"/> class.
31+
/// Initializes a new instance of the <see cref="ContentServerController"/> class.
3232
/// </summary>
3333
/// <param name="userService">The UserService<see cref="IUserService"/>.</param>
3434
/// <param name="scormContentServerService">The scormContentServerService<see cref="IScormContentServerService"/>.</param>
3535
/// <param name="logger">The logger.</param>
36-
public ScormContentServerController(
36+
public ContentServerController(
3737
IUserService userService,
3838
IScormContentServerService scormContentServerService,
39-
ILogger<ScormContentServerController> logger)
39+
ILogger<ContentServerController> logger)
4040
: base(userService, logger)
4141
{
4242
this.scormContentServerService = scormContentServerService;
@@ -48,40 +48,40 @@ public ScormContentServerController(
4848
/// <param name="externalUrl">The externalUrl<see cref="string"/>.</param>
4949
/// <returns>The <see cref="IActionResult"/>.</returns>
5050
[HttpPost]
51-
[Route("GetScormContentDetailsByExternalUrl")]
52-
public IActionResult GetScormContentDetailsByExternalUrl([FromBody] string externalUrl)
51+
[Route("GetContentDetailsByExternalUrl")]
52+
public IActionResult GetContentDetailsByExternalUrl([FromBody] string externalUrl)
5353
{
5454
string decodedUrl = HttpUtility.UrlDecode(externalUrl);
5555

56-
var details = this.scormContentServerService.GetScormContentDetailsByExternalUrl(decodedUrl);
56+
var details = this.scormContentServerService.GetContentDetailsByExternalUrl(decodedUrl);
5757

5858
return this.Ok(details);
5959
}
6060

6161
/// <summary>
62-
/// The GetScormContentDetailsByExternalIdentifier.
62+
/// The GetContentDetailsByExternalIdentifier.
6363
/// </summary>
6464
/// <param name="externalReference">The externalIdentifier<see cref="Guid"/>.</param>
6565
/// <returns>The <see cref="IActionResult"/>.</returns>
6666
[HttpGet]
67-
[Route("GetScormContentDetailsByExternalReference/{externalReference}")]
68-
public IActionResult GetScormContentDetailsByExternalReference(string externalReference)
67+
[Route("GetContentDetailsByExternalReference/{externalReference}")]
68+
public IActionResult GetContentDetailsByExternalReference(string externalReference)
6969
{
70-
var details = this.scormContentServerService.GetScormContentDetailsByExternalReference(externalReference);
70+
var details = this.scormContentServerService.GetContentDetailsByExternalReference(externalReference);
7171

7272
return this.Ok(details);
7373
}
7474

7575
/// <summary>
76-
/// The LogScormResourceReferenceEventAsync.
76+
/// The LogResourceReferenceEventAsync.
7777
/// </summary>
78-
/// <param name="scormResourceReferenceEventViewModel">The ScormResourceReferenceEventViewModel<see cref="ScormResourceReferenceEventViewModel"/>.</param>
78+
/// <param name="resourceReferenceEventViewModel">The ResourceReferenceEventViewModel<see cref="ResourceReferenceEventViewModel"/>.</param>
7979
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
8080
[HttpPost]
81-
[Route("LogScormResourceReferenceEvent")]
82-
public async Task<IActionResult> LogScormResourceReferenceEventAsync([FromBody] ScormResourceReferenceEventViewModel scormResourceReferenceEventViewModel)
81+
[Route("LogResourceReferenceEvent")]
82+
public async Task<IActionResult> LogResourceReferenceEventAsync([FromBody] ResourceReferenceEventViewModel resourceReferenceEventViewModel)
8383
{
84-
await this.scormContentServerService.LogScormResourceReferenceEventAsync(scormResourceReferenceEventViewModel);
84+
await this.scormContentServerService.LogResourceReferenceEventAsync(resourceReferenceEventViewModel);
8585
return this.Ok();
8686
}
8787
}

WebAPI/LearningHub.Nhs.API/Controllers/ResourceController.cs

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,17 @@ public async Task<ActionResult> GetGenericFileDetailsAsync(int resourceVersionId
458458
return this.Ok(await this.resourceService.GetGenericFileDetailsByIdAsync(resourceVersionId));
459459
}
460460

461+
/// <summary>
462+
/// Get specific Html resource details by ResourceVersionId.
463+
/// </summary>
464+
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
465+
/// <returns>The <see cref="Task{ActionResult}"/>.</returns>
466+
[HttpGet("GetHtmlDetails/{resourceVersionId}")]
467+
public async Task<ActionResult> GetHtmlDetailsAsync(int resourceVersionId)
468+
{
469+
return this.Ok(await this.resourceService.GetHtmlDetailsByIdAsync(resourceVersionId));
470+
}
471+
461472
/// <summary>
462473
/// Get specific GetScormFileDetails by ResourceVersionId.
463474
/// </summary>
@@ -470,14 +481,14 @@ public async Task<ActionResult> GetScormDetailsAsync(int resourceVersionId)
470481
}
471482

472483
/// <summary>
473-
/// The GetScormContentDetailsById.
484+
/// The GetExternalContentDetailsById.
474485
/// </summary>
475486
/// <param name="resourceVersionId">The resourceVersionId<see cref="int"/>.</param>
476487
/// <returns>The <see cref="Task{ActionResult}"/>.</returns>
477-
[HttpGet("GetScormContentDetailsById/{resourceVersionId}")]
488+
[HttpGet("GetExternalContentDetailsById/{resourceVersionId}")]
478489
public ActionResult GetScormContentDetailsById(int resourceVersionId)
479490
{
480-
return this.Ok(this.resourceService.GetScormContentDetails(resourceVersionId, this.CurrentUserId));
491+
return this.Ok(this.resourceService.GetExternalContentDetails(resourceVersionId, this.CurrentUserId));
481492
}
482493

483494
/// <summary>
@@ -543,6 +554,27 @@ public async Task<IActionResult> UpdateScormDetailAsync(ScormUpdateRequestViewMo
543554
}
544555
}
545556

557+
/// <summary>
558+
/// Update HTML Detail.
559+
/// </summary>
560+
/// <param name="htmlResourceViewModel">Html resource update view model.</param>
561+
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
562+
[HttpPost]
563+
[Route("UpdateHtmlDetail")]
564+
public async Task<IActionResult> UpdateHtmlDetailAsync(HtmlResourceUpdateRequestViewModel htmlResourceViewModel)
565+
{
566+
var vr = await this.resourceService.UpdateHtmlDetailAsync(htmlResourceViewModel, this.CurrentUserId);
567+
568+
if (vr.IsValid)
569+
{
570+
return this.Ok(new ApiResponse(true, vr));
571+
}
572+
else
573+
{
574+
return this.BadRequest(new ApiResponse(false, vr));
575+
}
576+
}
577+
546578
/// <summary>
547579
/// Get specific ImageDetails by ResourceVersionId.
548580
/// </summary>
@@ -954,6 +986,20 @@ public async Task<IActionResult> UpdateScormPublishDetailsAsync(ScormPublishUpda
954986
return this.Ok(new ApiResponse(true, vr));
955987
}
956988

989+
/// <summary>
990+
/// The html resource publish update async.
991+
/// </summary>
992+
/// <param name="viewModel">The HtmlResourcePublishUpdateViewModel<see cref="HtmlResourcePublishUpdateViewModel"/>.</param>
993+
/// <returns>The <see cref="Task{IActionResult}"/>.</returns>
994+
[HttpPost]
995+
[Route("UpdateHtmlResourcePublishDetails")]
996+
public async Task<IActionResult> UpdateHtmlResourcePublishDetailsAsync(HtmlResourcePublishUpdateViewModel viewModel)
997+
{
998+
var vr = await this.resourceService.UpdateHtmlResourcePublishDetailsAsync(viewModel);
999+
1000+
return this.Ok(new ApiResponse(true, vr));
1001+
}
1002+
9571003
/// <summary>
9581004
/// The create scorm manifest async.
9591005
/// </summary>

WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
2828
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
2929
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
30-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.22" />
30+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.25" />
3131
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
3232
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
3333
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />

WebAPI/LearningHub.Nhs.API/Startup/ServiceMappings.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public static void AddLearningHubMappings(this IServiceCollection services, ICon
8181
services.AddSingleton<IEntityTypeMap, FileTypeMap>();
8282
services.AddSingleton<IEntityTypeMap, FileChunkDetailMap>();
8383
services.AddSingleton<IEntityTypeMap, GenericFileResourceVersionMap>();
84+
services.AddSingleton<IEntityTypeMap, HtmlResourceVersionMap>();
8485
services.AddSingleton<IEntityTypeMap, ImageResourceVersionMap>();
8586
services.AddSingleton<IEntityTypeMap, VideoResourceVersionMap>();
8687
services.AddSingleton<IEntityTypeMap, AudioResourceVersionMap>();
@@ -109,7 +110,7 @@ public static void AddLearningHubMappings(this IServiceCollection services, ICon
109110
services.AddSingleton<IEntityTypeMap, ResourceReferenceMap>();
110111
services.AddSingleton<IEntityTypeMap, ResourceVersionAuthorMap>();
111112
services.AddSingleton<IEntityTypeMap, ResourceVersionEventMap>();
112-
services.AddScoped<IScormResourceReferenceEventRepository, ScormResourceReferenceEventRepository>();
113+
services.AddScoped<IResourceReferenceEventRepository, ResourceReferenceEventRepository>();
113114
services.AddSingleton<IEntityTypeMap, ResourceVersionRatingMap>();
114115
services.AddSingleton<IEntityTypeMap, ResourceVersionRatingSummaryMap>();
115116
services.AddSingleton<IEntityTypeMap, ResourceVersionFlagMap>();
@@ -145,7 +146,7 @@ public static void AddLearningHubMappings(this IServiceCollection services, ICon
145146
services.AddSingleton<IEntityTypeMap, ImageAnnotationMarkMap>();
146147
services.AddSingleton<IEntityTypeMap, WholeSlideImageFileMap>();
147148
services.AddSingleton<IEntityTypeMap, UrlRewritingMap>();
148-
services.AddSingleton<IEntityTypeMap, ScormResourceReferenceEventMap>();
149+
services.AddSingleton<IEntityTypeMap, ResourceReferenceEventMap>();
149150
services.AddSingleton<IEntityTypeMap, ResourceSyncMap>();
150151
services.AddSingleton<IEntityTypeMap, EmailTemplateMap>();
151152
services.AddSingleton<IEntityTypeMap, EmailTemplateLayoutMap>();
@@ -316,6 +317,7 @@ public static void AddLearningHubMappings(this IServiceCollection services, ICon
316317
services.AddScoped<IFileChunkDetailRepository, FileChunkDetailRepository>();
317318
services.AddScoped<IFileTypeRepository, FileTypeRepository>();
318319
services.AddScoped<IGenericFileResourceVersionRepository, GenericFileResourceVersionRepository>();
320+
services.AddScoped<IHtmlResourceVersionRepository, HtmlResourceVersionRepository>();
319321
services.AddScoped<IPartialFileRepository, PartialFileRepository>();
320322
services.AddScoped<IWholeSlideImageFileRepository, WholeSlideImageFileRepository>();
321323
services.AddScoped<IBlockCollectionRepository, BlockCollectionRepository>();

WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
1111
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
12-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.22" />
12+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.25" />
1313
<PackageReference Update="StyleCop.Analyzers" Version="1.1.118">
1414
<PrivateAssets>all</PrivateAssets>
1515
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
1212
<PackageReference Include="FluentAssertions" Version="6.2.0" />
1313
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
14-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.22" />
14+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.25" />
1515
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
1616
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
1717
<PackageReference Include="Moq" Version="4.16.1" />
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
-----------------------------------------------------------------------------------
2+
-- Author Dave Brown
3+
-- Created 11 Oct 2023
4+
-- Purpose Indicates whether a User has edit permissions on a resource version
5+
--
6+
-- Modification History
7+
--
8+
-----------------------------------------------------------------------------------
9+
CREATE FUNCTION [resources].[UserCanEditResource]
10+
(
11+
@ResourceVersionId INT,
12+
@UserId INT
13+
)
14+
RETURNS BIT
15+
AS
16+
BEGIN
17+
18+
DECLARE @IsEditor BIT
19+
SET @IsEditor = 0
20+
21+
SELECT @IsEditor = CASE WHEN nr.NodeId IS NULL THEN CAST (0 AS BIT) ELSE CAST(1 AS BIT) END
22+
FROM resources.Resource r
23+
INNER JOIN hierarchy.NodeResource nr ON nr.ResourceId = r.Id AND nr.VersionStatusId = 2 -- Published
24+
INNER JOIN hub.Scope s ON nr.NodeId = s.CatalogueNodeId
25+
INNER JOIN hub.RoleUserGroup rug ON rug.ScopeId = s.Id AND rug.RoleId = 1 -- Editor
26+
INNER JOIN hub.userUserGroup uug ON uug.UserGroupId = rug.UserGroupId AND uug.UserId = @userId
27+
WHERE r.CurrentResourceVersionId = @ResourceVersionId
28+
AND nr.Deleted = 0
29+
AND s.Deleted = 0
30+
AND rug.Deleted = 0
31+
AND uug.Deleted = 0
32+
33+
IF @IsEditor = 0
34+
BEGIN
35+
36+
SELECT @IsEditor = CASE WHEN nr.NodeId IS NULL THEN CAST (0 AS BIT) ELSE CAST(1 AS BIT) END
37+
FROM resources.Resource r
38+
INNER JOIN hierarchy.NodeResource nr ON nr.ResourceId = r.Id AND nr.VersionStatusId = 2 -- Published
39+
INNER JOIN hierarchy.NodeLink NL on NL.ChildNodeId = nr.NodeId
40+
INNER JOIN hub.Scope s ON NL.ParentNodeId = s.CatalogueNodeId
41+
INNER JOIN hub.RoleUserGroup rug ON rug.ScopeId = s.Id AND rug.RoleId = 1 -- Editor
42+
INNER JOIN hub.userUserGroup uug ON uug.UserGroupId = rug.UserGroupId AND uug.UserId = @userId
43+
WHERE r.CurrentResourceVersionId = @resourceVersionId
44+
AND nr.Deleted = 0
45+
AND s.Deleted = 0
46+
AND rug.Deleted = 0
47+
AND uug.Deleted = 0
48+
49+
END
50+
51+
RETURN @IsEditor
52+
53+
END
54+
GO

0 commit comments

Comments
 (0)