Skip to content

Commit 0403feb

Browse files
committed
Merge branch 'DLS-Release-v1.2.1' into DLS-Release-v1.3.0
2 parents c4b4739 + 3b4c166 commit 0403feb

File tree

9 files changed

+117
-101
lines changed

9 files changed

+117
-101
lines changed

DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,21 @@ FROM FrameworkCollaborators fc
292292
WHERE fc.FrameworkID = fw.ID
293293
AND fc.CanModify = 1 AND fc.IsDeleted = 0
294294
AND aa1.UserID = (SELECT aa2.UserID FROM AdminAccounts aa2 WHERE aa2.ID = @adminId)) > 0 THEN 2
295-
WHEN fwc.CanModify = 0 THEN 1 ELSE 0 END AS UserRole,
296-
fwr.ID AS FrameworkReviewID";
295+
WHEN (fwc.CanModify = 0) OR
296+
(SELECT COUNT(*)
297+
FROM FrameworkCollaborators fc
298+
JOIN AdminAccounts aa3 ON fc.AdminID = aa3.ID
299+
WHERE fc.FrameworkID = fw.ID
300+
AND fc.CanModify = 0 AND fc.IsDeleted = 0
301+
AND aa3.UserID = (SELECT aa4.UserID FROM AdminAccounts aa4 WHERE aa4.ID = @adminId)) > 0 THEN 1
302+
ELSE 0
303+
END AS UserRole,
304+
(SELECT fwr.ID
305+
FROM FrameworkCollaborators fc
306+
INNER JOIN AdminAccounts aa3 ON fc.AdminID = aa3.ID
307+
LEFT OUTER JOIN FrameworkReviews AS fwr ON fc.ID = fwr.FrameworkCollaboratorID AND fwr.Archived IS NULL AND fwr.ReviewComplete IS NULL
308+
WHERE fc.FrameworkID = fw.ID AND fc.IsDeleted = 0
309+
AND aa3.UserID = (SELECT aa4.UserID FROM AdminAccounts aa4 WHERE aa4.ID = @adminId)) AS FrameworkReviewID";
297310

298311
private const string BrandedFrameworkFields =
299312
@", FW.Description, FW.FrameworkConfig AS Vocabulary, (SELECT BrandName
@@ -314,8 +327,7 @@ FROM CourseTopics
314327

315328
private const string FrameworkTables =
316329
@"Frameworks AS FW INNER JOIN AdminAccounts AS aa ON aa.ID = fw.OwnerAdminID
317-
LEFT OUTER JOIN FrameworkCollaborators AS fwc ON fwc.FrameworkID = FW.ID AND fwc.AdminID = @adminId AND COALESCE(IsDeleted, 0) = 0
318-
LEFT OUTER JOIN FrameworkReviews AS fwr ON fwc.ID = fwr.FrameworkCollaboratorID AND fwr.Archived IS NULL AND fwr.ReviewComplete IS NULL";
330+
LEFT OUTER JOIN FrameworkCollaborators AS fwc ON fwc.FrameworkID = FW.ID AND fwc.AdminID = @adminId AND COALESCE(IsDeleted, 0) = 0 ";
319331

320332
private const string AssessmentQuestionFields =
321333
@"SELECT AQ.ID, AQ.Question, AQ.MinValue, AQ.MaxValue, AQ.AssessmentQuestionInputTypeID, AQI.InputTypeName, AQ.AddedByAdminId, CASE WHEN AQ.AddedByAdminId = @adminId THEN 1 ELSE 0 END AS UserIsOwner, AQ.CommentsPrompt, AQ.CommentsHint";
@@ -2119,10 +2131,13 @@ FROM FrameworkReviews AS FR INNER JOIN
21192131
{
21202132
return connection.Query<FrameworkReview>(
21212133
@"SELECT FR.ID, FR.FrameworkID, FR.FrameworkCollaboratorID, FC.UserEmail, CAST(CASE WHEN FC.AdminID IS NULL THEN 0 ELSE 1 END AS bit) AS IsRegistered, FR.ReviewRequested, FR.ReviewComplete, FR.SignedOff, FR.FrameworkCommentID, FC1.Comments AS Comment, FR.SignOffRequired
2122-
FROM FrameworkReviews AS FR INNER JOIN
2123-
FrameworkCollaborators AS FC ON FR.FrameworkCollaboratorID = FC.ID LEFT OUTER JOIN
2124-
FrameworkComments AS FC1 ON FR.FrameworkCommentID = FC1.ID
2125-
WHERE FR.ID = @reviewId AND FR.FrameworkID = @frameworkId AND FC.AdminID = @adminId AND FR.Archived IS NULL AND IsDeleted = 0",
2134+
FROM FrameworkReviews AS FR INNER JOIN
2135+
FrameworkCollaborators AS FC ON FR.FrameworkCollaboratorID = FC.ID INNER JOIN
2136+
AdminAccounts AS aa ON aa.ID = FC.AdminID LEFT OUTER JOIN
2137+
FrameworkComments AS FC1 ON FR.FrameworkCommentID = FC1.ID
2138+
WHERE FR.ID = @reviewId AND FR.FrameworkID = @frameworkId AND
2139+
aa.UserID = (SELECT aa1.UserID FROM AdminAccounts aa1 WHERE aa1.ID = @adminId) AND
2140+
FR.Archived IS NULL AND IsDeleted = 0",
21262141
new { frameworkId, adminId, reviewId }
21272142
).FirstOrDefault();
21282143
}

DigitalLearningSolutions.Web/Controllers/FrameworksController/Frameworks.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,9 @@ public IActionResult EditFrameworkFlag(CustomFlagViewModel model, int frameworkI
583583
if (ModelState.IsValid)
584584
{
585585
var flags = frameworkService.GetCustomFlagsByFrameworkId(frameworkId, null)
586-
.Where(fn => fn.FlagName.ToLower() == model.FlagName.ToLower()).ToList();
586+
.Where(fn => fn.FlagName?.Trim().ToLower() == model.FlagName?.Trim().ToLower()).ToList();
587587

588-
bool nameExists = flags.Any(x => x.FlagName.ToLower() == model.FlagName.ToLower());
588+
bool nameExists = flags.Any(x => x.FlagName?.Trim().ToLower() == model.FlagName?.Trim().ToLower());
589589
bool idExists = flags.Any(x => x.FlagId == flagId);
590590

591591
if (actionName == "Edit")
@@ -596,7 +596,7 @@ public IActionResult EditFrameworkFlag(CustomFlagViewModel model, int frameworkI
596596
return View("Developer/EditCustomFlag", model);
597597
}
598598
else
599-
frameworkService.UpdateFrameworkCustomFlag(frameworkId, model.Id, model.FlagName, model.FlagGroup, model.FlagTagClass);
599+
frameworkService.UpdateFrameworkCustomFlag(frameworkId, model.Id, model.FlagName?.Trim(), model.FlagGroup?.Trim(), model.FlagTagClass);
600600
}
601601
else
602602
{
@@ -606,7 +606,7 @@ public IActionResult EditFrameworkFlag(CustomFlagViewModel model, int frameworkI
606606
return View("Developer/EditCustomFlag", model);
607607
}
608608
else
609-
frameworkService.AddCustomFlagToFramework(frameworkId, model.FlagName, model.FlagGroup, model.FlagTagClass);
609+
frameworkService.AddCustomFlagToFramework(frameworkId, model.FlagName?.Trim(), model.FlagGroup?.Trim(), model.FlagTagClass);
610610
}
611611

612612
return RedirectToAction("EditFrameworkFlags", "Frameworks", new { frameworkId });

DigitalLearningSolutions.Web/Controllers/LoginController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ public async Task<IActionResult> Index(LoginViewModel model, string timeZone = "
8383
var loginResult = loginService.AttemptLogin(model.Username!.Trim(), model.Password!);
8484

8585
if (loginResult.LoginAttemptResult == LoginAttemptResult.LogIntoSingleCentre ||
86-
loginResult.LoginAttemptResult == LoginAttemptResult.ChooseACentre)
86+
loginResult.LoginAttemptResult == LoginAttemptResult.ChooseACentre ||
87+
loginResult.LoginAttemptResult == LoginAttemptResult.UnverifiedEmail)
8788
{
8889
loginService.UpdateLastAccessedForUsersTable(loginResult.UserEntity.UserAccount.Id);
8990
}

DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ CompetencyTableRow competencyRow
261261
{
262262
foreach (var frameworkFlag in frameworkFlags)
263263
{
264-
if (frameworkFlag.FlagName == flag)
264+
if (frameworkFlag.FlagName?.Trim().ToLower() == flag?.Trim().ToLower())
265265
{
266266
flagId = frameworkFlag.FlagId;
267267
break;
@@ -270,7 +270,7 @@ CompetencyTableRow competencyRow
270270
}
271271
if (flagId == 0)
272272
{
273-
flagId = frameworkService.AddCustomFlagToFramework(frameworkId, flag, "Flag", "nhsuk-tag--white");
273+
flagId = frameworkService.AddCustomFlagToFramework(frameworkId, flag?.Trim(), "Flag", "nhsuk-tag--white");
274274
}
275275
flagIds.Add(flagId);
276276
}

DigitalLearningSolutions.Web/Views/Frameworks/Developer/_Comments.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ else
3131
Add a comment
3232
</label>
3333
<span nhs-validation-for="Comment"></span>
34-
<textarea class="nhsuk-textarea" id="new-comment" name="Comment" rows="3"></textarea>
34+
<textarea class="nhsuk-textarea" id="new-comment" name="Comment" autocomplete="off" rows="3"></textarea>
3535
</nhs-form-group>
3636
<button class="nhsuk-button" type="submit">
3737
Post

DigitalLearningSolutions.Web/Views/Frameworks/Developer/_MyFrameworks.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ else
7373
@if (framework.UserRole > 1)
7474
{
7575
<a asp-action="ViewFramework" asp-route-frameworkId="@framework.ID" asp-route-tabname="Structure">
76-
View/Edit
76+
@(framework.FrameworkReviewID == null ? "View/Edit" : "Review/Edit")
7777
<span class="visually-hidden">@framework.FrameworkName</span>
7878
</a>
7979
}

DigitalLearningSolutions.Web/Views/Frameworks/Shared/_BrandedFrameworkTable.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
@if (framework.UserRole > 1)
6868
{
6969
<a asp-action="ViewFramework" asp-route-frameworkId="@framework.ID" asp-route-tabname="Structure">
70-
View/Edit
70+
@(framework.FrameworkReviewID == null ? "View/Edit" : "Review/Edit")
7171
<span class="visually-hidden">@framework.FrameworkName</span>
7272
</a>
7373
}
Lines changed: 82 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,92 @@
11
@using DigitalLearningSolutions.Data.Models.Frameworks;
22
@model CommentReplies;
33
<div class="@(Model.UserIsCommenter ? "nhsuk-card comment comment-mine nhsuk-u-margin-bottom-2" : "nhsuk-card comment comment-other nhsuk-u-margin-bottom-3")">
4-
<div class="nhsuk-card__content nhsuk-u-padding-4">
5-
<div class="nhsuk-grid-row">
6-
<div class="nhsuk-grid-column-full">
4+
<div class="nhsuk-card__content nhsuk-u-padding-4">
75
<div class="nhsuk-grid-row">
8-
<div class="nhsuk-grid-column-full">
9-
<h3 class="nhsuk-card__heading nhsuk-heading-xs heading-xxs" id="@Model.ID-header">
10-
@Model.Commenter <span class="heading-light">@Model.AddedDate.ToString("dddd dd MMMM yyyy h:mm tt")</span>
11-
</h3>
12-
<p class="nhsuk-body-s">
13-
@Html.Raw(Model.Comments)
14-
</p>
15-
</div>
16-
</div>
17-
<div class="grid-column-ninety">
18-
@if (Model.Replies.Any())
19-
{
20-
if (@ViewContext.RouteData.Values["commentId"] == null)
21-
{
22-
<details class="nhsuk-details">
23-
<summary class="nhsuk-details__summary">
24-
<span class="nhsuk-details__summary-text">
25-
@Model.Replies.Count() @(Model.Replies.Count() > 1 ? "Replies" : "Reply")
26-
</span>
27-
</summary>
28-
<div class="nhsuk-details__text">
29-
@foreach (var item in Model.Replies.Select((value, i) => new { i, value }))
30-
{
31-
<partial name="_ReplyCard.cshtml" model="item.value" view-data="@(new ViewDataDictionary(ViewData) { { "isLast", (item.i == Model.Replies.Count-1 ? true :false)} })" />
32-
}
6+
<div class="nhsuk-grid-column-full">
7+
<div class="nhsuk-grid-row">
8+
<div class="nhsuk-grid-column-full">
9+
<h3 class="nhsuk-card__heading nhsuk-heading-xs heading-xxs" id="@Model.ID-header">
10+
@Model.Commenter <span class="heading-light">@Model.AddedDate.ToString("dddd dd MMMM yyyy h:mm tt")</span>
11+
</h3>
12+
<p class="nhsuk-body-s">
13+
@Html.Raw(Model.Comments)
14+
</p>
15+
</div>
3316
</div>
34-
</details>
35-
}
36-
else
37-
{
38-
@foreach (var item in Model.Replies.Select((value, i) => new { i, value }))
39-
{
40-
<partial name="_ReplyCard.cshtml" model="item.value" view-data="@(new ViewDataDictionary(ViewData) { { "isLast", (item.i == Model.Replies.Count-1 ? true :false)} })" />
41-
}
42-
}
43-
}
44-
</div>
45-
<div class="nhsuk-grid-column-full">
46-
@if (@ViewContext.RouteData.Values["commentId"] == null)
47-
{
17+
<div class="grid-column-ninety">
18+
@if (Model.Replies.Any())
19+
{
20+
if (@ViewContext.RouteData.Values["commentId"] == null)
21+
{
22+
<details class="nhsuk-details">
23+
<summary class="nhsuk-details__summary">
24+
<span class="nhsuk-details__summary-text">
25+
@Model.Replies.Count() @(Model.Replies.Count() > 1 ? "Replies" : "Reply")
26+
</span>
27+
</summary>
28+
<div class="nhsuk-details__text">
29+
@foreach (var item in Model.Replies.Select((value, i) => new { i, value }))
30+
{
31+
<partial name="_ReplyCard.cshtml" model="item.value" view-data="@(new ViewDataDictionary(ViewData) { { "isLast", (item.i == Model.Replies.Count - 1 ? true : false) } })" />
32+
}
33+
</div>
34+
</details>
35+
}
36+
else
37+
{
38+
@foreach (var item in Model.Replies.Select((value, i) => new { i, value }))
39+
{
40+
<partial name="_ReplyCard.cshtml" model="item.value" view-data="@(new ViewDataDictionary(ViewData) { { "isLast", (item.i == Model.Replies.Count - 1 ? true : false) } })" />
41+
}
42+
}
43+
}
44+
</div>
45+
<div class="nhsuk-grid-column-full">
46+
@if (@ViewContext.RouteData.Values["commentId"] == null)
47+
{
4848

49-
<a class="nhsuk-button button-small nhsuk-button--secondary nhsuk-u-margin-bottom-0 nhsuk-u-margin-top-0"
50-
role="button"
51-
aria-describedby="@Model.ID-header"
52-
asp-action="ViewThread"
53-
asp-controller="Frameworks"
54-
asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]"
55-
asp-route-commentId="@Model.ID">
56-
Reply
57-
</a>
58-
@if (!Model.Replies.Any() && Model.UserIsCommenter)
59-
{
60-
<a class="nhsuk-button button-small delete-button nhsuk-u-margin-bottom-0 nhsuk-u-margin-top-0"
61-
role="button"
62-
aria-describedby="@Model.ID-header"
63-
asp-action="ArchiveComment"
64-
asp-controller="Frameworks"
65-
asp-route-commentId="@Model.ID"
66-
asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]">
67-
Delete
68-
</a>
69-
}
70-
}
71-
else
72-
{
73-
<hr />
74-
<form method="post">
75-
<div class="nhsuk-form-group">
76-
<label class="nhsuk-label" for="new-comment">
77-
Post a reply
78-
</label>
79-
<input type="hidden" value="@Model.Comments" name="parentComment" />
80-
<textarea class="nhsuk-textarea" id="new-comment" name="Comment" rows="3"></textarea>
81-
</div>
82-
<button class="nhsuk-button" type="submit">
83-
Post
84-
</button>
85-
</form>
86-
}
49+
<a class="nhsuk-button button-small nhsuk-button--secondary nhsuk-u-margin-bottom-0 nhsuk-u-margin-top-0"
50+
role="button"
51+
aria-describedby="@Model.ID-header"
52+
asp-action="ViewThread"
53+
asp-controller="Frameworks"
54+
asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]"
55+
asp-route-commentId="@Model.ID">
56+
Reply
57+
</a>
58+
@if (!Model.Replies.Any() && Model.UserIsCommenter)
59+
{
60+
<a class="nhsuk-button button-small delete-button nhsuk-u-margin-bottom-0 nhsuk-u-margin-top-0"
61+
role="button"
62+
aria-describedby="@Model.ID-header"
63+
asp-action="ArchiveComment"
64+
asp-controller="Frameworks"
65+
asp-route-commentId="@Model.ID"
66+
asp-route-frameworkId="@ViewContext.RouteData.Values["frameworkId"]">
67+
Delete
68+
</a>
69+
}
70+
}
71+
else
72+
{
73+
<hr />
74+
<form method="post">
75+
<div class="nhsuk-form-group">
76+
<label class="nhsuk-label" for="new-comment">
77+
Post a reply
78+
</label>
79+
<input type="hidden" value="@Model.Comments" name="parentComment" />
80+
<textarea class="nhsuk-textarea" id="new-comment" name="Comment" autocomplete="off" rows="3"></textarea>
81+
</div>
82+
<button class="nhsuk-button" type="submit">
83+
Post
84+
</button>
85+
</form>
86+
}
8787

88+
</div>
89+
</div>
8890
</div>
89-
</div>
9091
</div>
91-
</div>
9292
</div>

DigitalLearningSolutions.Web/Views/SuperAdmin/Users/_SearchableUserCard.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
</div>
8989
<div class="nhsuk-summary-list__row details-list-with-button__row">
9090
<dt class="nhsuk-summary-list__key">
91-
Last Accessed
91+
Last accessed date
9292
</dt>
9393
<partial name="_SummaryFieldValue" model="@Model.LastAccessed" />
9494
</div>

0 commit comments

Comments
 (0)