From 63ecbe4672e19839e24e86299754ee5a1f1230b6 Mon Sep 17 00:00:00 2001 From: Auldrin-Possa Date: Tue, 1 Sep 2026 15:50:23 +0100 Subject: [PATCH 1/4] TD-6907-ManageOptionalCompetenciesPrompt max length validation added. --- .../CompetencyAssessments.cs | 8 ++++++-- .../SetOptionalCompetencyLearnerPromptViewModel.cs | 4 ++++ .../SetOptionalCompetencyLearnerPrompt.cshtml | 7 ++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs index 25888699d5..8e37943c5f 100644 --- a/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs +++ b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs @@ -775,9 +775,13 @@ public IActionResult SetOptionalCompetencyLearnerPrompt(int competencyAssessment } [HttpPost] [Route("/Self-Assessment/{competencyAssessmentId}/{vocabularyPlural}/Optional/LearnerPrompt")] - public IActionResult SetOptionalCompetencyLearnerPrompt(SetOptionalCompetencyLearnerPromptFormData model) + public IActionResult SetOptionalCompetencyLearnerPrompt(SetOptionalCompetencyLearnerPromptViewModel model) { - + if (model.ManageOptionalCompetenciesPrompt?.Length > 1000) + { + ModelState.AddModelError(nameof(model.ManageOptionalCompetenciesPrompt), "Prompt text must be 1000 characters or fewer"); + return View("SetOptionalCompetencyLearnerPrompt", model); + } competencyAssessmentService.UpdateManageOptionalCompetenciesPrompt(model.ID, model.ManageOptionalCompetenciesPrompt); return RedirectToAction("ManageOptionalCompetencies", new { competencyAssessmentId = model.ID, vocabularyPlural = model.VocabularyPlural }); } diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/SetOptionalCompetencyLearnerPromptViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/SetOptionalCompetencyLearnerPromptViewModel.cs index 7c58320f22..ac2fa489a1 100644 --- a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/SetOptionalCompetencyLearnerPromptViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/SetOptionalCompetencyLearnerPromptViewModel.cs @@ -7,6 +7,10 @@ public class SetOptionalCompetencyLearnerPromptViewModel : SetOptionalCompetencyLearnerPromptFormData { + public SetOptionalCompetencyLearnerPromptViewModel() + { + } + public SetOptionalCompetencyLearnerPromptViewModel(CompetencyAssessmentBase competencyAssessmentBase, IEnumerable competencies) { ID = competencyAssessmentBase.ID; diff --git a/DigitalLearningSolutions.Web/Views/CompetencyAssessments/SetOptionalCompetencyLearnerPrompt.cshtml b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/SetOptionalCompetencyLearnerPrompt.cshtml index 5b3329863c..33d1b16988 100644 --- a/DigitalLearningSolutions.Web/Views/CompetencyAssessments/SetOptionalCompetencyLearnerPrompt.cshtml +++ b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/SetOptionalCompetencyLearnerPrompt.cshtml @@ -3,6 +3,7 @@ @{ ViewData["Title"] = $"Set optional {Model.VocabularyPlural.ToLower()} learner prompt"; ViewData["Application"] = "Framework service"; + var errorHasOccurred = !ViewData.ModelState.IsValid && ViewData.ModelState.ContainsKey(nameof(Model.ManageOptionalCompetenciesPrompt)); } @@ -24,6 +25,10 @@ }
+ @if (errorHasOccurred) + { + + }

@Model.CompetencyAssessmentName @@ -45,12 +50,12 @@ hint-text="This text will be displayed above the optional @Model.VocabularyPlural.ToLower() list." populate-with-current-value="true" spell-check="false" /> - +