diff --git a/DigitalLearningSolutions.Data/Enums/MultiPageFormDataFeature.cs b/DigitalLearningSolutions.Data/Enums/MultiPageFormDataFeature.cs index 59548d2e03..d8d1468ff3 100644 --- a/DigitalLearningSolutions.Data/Enums/MultiPageFormDataFeature.cs +++ b/DigitalLearningSolutions.Data/Enums/MultiPageFormDataFeature.cs @@ -35,6 +35,60 @@ public class MultiPageFormDataFeature : Enumeration "EditAdminFieldDataGuid" ); + public static readonly MultiPageFormDataFeature AddNewFramework = new MultiPageFormDataFeature( + 5, + nameof(AddNewFramework), + "AddNewFrameworkDataGuid" + ); + + public static readonly MultiPageFormDataFeature EditAssessmentQuestion = new MultiPageFormDataFeature( + 6, + nameof(EditAssessmentQuestion), + "EditAssessmentQuestionDataGuid" + ); + + public static readonly MultiPageFormDataFeature EditSignpostingParameter = new MultiPageFormDataFeature( + 7, + nameof(EditSignpostingParameter), + "EditSignpostingParameterDataGuid" + ); + + public static readonly MultiPageFormDataFeature AddCompetencyLearningResourceSummary = new MultiPageFormDataFeature( + 8, + nameof(AddCompetencyLearningResourceSummary), + "AddCompetencyLearningResourceSummaryDataGuid" + ); + + public static readonly MultiPageFormDataFeature EditCompetencyLearningResources = new MultiPageFormDataFeature( + 9, + nameof(EditCompetencyLearningResources), + "EditCompetencyLearningResourcesDataGuid" + ); + + public static readonly MultiPageFormDataFeature SearchInSelfAssessmentOverviewGroups = new MultiPageFormDataFeature( + 10, + nameof(SearchInSelfAssessmentOverviewGroups), + "SearchInSelfAssessmentOverviewGroupsDataGuid" + ); + + public static readonly MultiPageFormDataFeature AddSelfAssessmentRequestVerification = new MultiPageFormDataFeature( + 11, + nameof(AddSelfAssessmentRequestVerification), + "AddSelfAssessmentRequestVerificationDataGuid" + ); + + public static readonly MultiPageFormDataFeature AddNewSupervisor = new MultiPageFormDataFeature( + 12, + nameof(AddNewSupervisor), + "AddNewSupervisorDataGuid" + ); + + public static readonly MultiPageFormDataFeature EnrolDelegateOnProfileAssessment = new MultiPageFormDataFeature( + 13, + nameof(EnrolDelegateOnProfileAssessment), + "EnrolDelegateOnProfileAssessmentDataGuid" + ); + public readonly string TempDataKey; private MultiPageFormDataFeature(int id, string name, string tempDataKey) : base(id, name) diff --git a/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionAddSupervisor.cs b/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionAddSupervisor.cs index 36bbfdea9f..e9121758b1 100644 --- a/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionAddSupervisor.cs +++ b/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionAddSupervisor.cs @@ -1,17 +1,11 @@ -namespace DigitalLearningSolutions.Data.Models.SessionData.SelfAssessments -{ - using System; - public class SessionAddSupervisor - { - public SessionAddSupervisor() - { - Id = new Guid(); - } - public Guid Id { get; set; } - public int SelfAssessmentID { get; set; } - public string SelfAssessmentName { get; set; } - public int SupervisorAdminId { get; set; } - public string? SupervisorEmail { get; set; } - public int? SelfAssessmentSupervisorRoleId { get; set; } - } -} +namespace DigitalLearningSolutions.Data.Models.SessionData.SelfAssessments +{ + public class SessionAddSupervisor + { + public int SelfAssessmentID { get; set; } + public string SelfAssessmentName { get; set; } + public int SupervisorAdminId { get; set; } + public string? SupervisorEmail { get; set; } + public int? SelfAssessmentSupervisorRoleId { get; set; } + } +} diff --git a/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionRequestVerification.cs b/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionRequestVerification.cs index 2cd228f569..d6b382e0bc 100644 --- a/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionRequestVerification.cs +++ b/DigitalLearningSolutions.Data/Models/SessionData/SelfAssessments/SessionRequestVerification.cs @@ -1,20 +1,15 @@ -namespace DigitalLearningSolutions.Data.Models.SessionData.SelfAssessments -{ - using System; - using System.Collections.Generic; - - public class SessionRequestVerification - { - public SessionRequestVerification() - { - Id = new Guid(); - } - public Guid Id { get; set; } - public int SelfAssessmentID { get; set; } - public string SelfAssessmentName { get; set; } - public string Vocabulary { get; set; } - public int CandidateAssessmentSupervisorId { get; set; } - public List? ResultIds { get; set; } - public bool SupervisorSelfAssessmentReview { get; set; } - } -} +namespace DigitalLearningSolutions.Data.Models.SessionData.SelfAssessments +{ + using System; + using System.Collections.Generic; + + public class SessionRequestVerification + { + public int SelfAssessmentID { get; set; } + public string SelfAssessmentName { get; set; } + public string Vocabulary { get; set; } + public int CandidateAssessmentSupervisorId { get; set; } + public List? ResultIds { get; set; } + public bool SupervisorSelfAssessmentReview { get; set; } + } +} diff --git a/DigitalLearningSolutions.Data/Services/MultiPageFormService.cs b/DigitalLearningSolutions.Data/Services/MultiPageFormService.cs index 5419332267..24cce13ea6 100644 --- a/DigitalLearningSolutions.Data/Services/MultiPageFormService.cs +++ b/DigitalLearningSolutions.Data/Services/MultiPageFormService.cs @@ -73,6 +73,7 @@ public T GetMultiPageFormData(MultiPageFormDataFeature feature, ITempDataDict throw new MultiPageFormDataException("Attempted to get data with no Guid identifier"); } + var settings = new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }; var tempDataGuid = (Guid)tempData.Peek(feature.TempDataKey); var existingMultiPageFormData = multiPageFormDataService.GetMultiPageFormDataByGuidAndFeature(tempDataGuid, feature.Name); @@ -83,7 +84,7 @@ public T GetMultiPageFormData(MultiPageFormDataFeature feature, ITempDataDict } tempData[feature.TempDataKey] = tempDataGuid; - return JsonConvert.DeserializeObject(existingMultiPageFormData.Json); + return JsonConvert.DeserializeObject(existingMultiPageFormData.Json, settings); } public void ClearMultiPageFormData(MultiPageFormDataFeature feature, ITempDataDictionary tempData) diff --git a/DigitalLearningSolutions.Web.Tests/Controllers/Frameworks/FrameworkControllerTests.cs b/DigitalLearningSolutions.Web.Tests/Controllers/Frameworks/FrameworkControllerTests.cs index 14a188464b..5d782b6071 100644 --- a/DigitalLearningSolutions.Web.Tests/Controllers/Frameworks/FrameworkControllerTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Controllers/Frameworks/FrameworkControllerTests.cs @@ -26,6 +26,7 @@ public partial class FrameworkControllerTests private IImportCompetenciesFromFileService importCompetenciesFromFileService = null!; private ILearningHubApiClient learningHubApiClient = null!; private ISearchSortFilterPaginateService searchSortFilterPaginateService = null!; + private IMultiPageFormService multiPageFormService = null!; [SetUp] public void SetUp() @@ -39,6 +40,7 @@ public void SetUp() competencyLearningResourcesDataService = A.Fake(); learningHubApiClient = A.Fake(); searchSortFilterPaginateService = A.Fake(); + multiPageFormService = A.Fake(); A.CallTo(() => config["CurrentSystemBaseUrl"]).Returns(BaseUrl); @@ -61,7 +63,8 @@ public void SetUp() importCompetenciesFromFileService, competencyLearningResourcesDataService, learningHubApiClient, - searchSortFilterPaginateService + searchSortFilterPaginateService, + multiPageFormService ) { ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = user } }, diff --git a/DigitalLearningSolutions.Web.Tests/Controllers/LearningPortal/LearningPortalControllerTests.cs b/DigitalLearningSolutions.Web.Tests/Controllers/LearningPortal/LearningPortalControllerTests.cs index 6ac44ed830..98da3d3204 100644 --- a/DigitalLearningSolutions.Web.Tests/Controllers/LearningPortal/LearningPortalControllerTests.cs +++ b/DigitalLearningSolutions.Web.Tests/Controllers/LearningPortal/LearningPortalControllerTests.cs @@ -33,6 +33,7 @@ public partial class LearningPortalControllerTests private IFrameworkService frameworkService = null!; private ICandidateAssessmentDownloadFileService candidateAssessmentDownloadFileService = null!; private ISearchSortFilterPaginateService searchSortFilterPaginateService = null!; + private IMultiPageFormService multiPageFormService = null!; [SetUp] public void SetUp() @@ -75,7 +76,8 @@ public void SetUp() config, actionPlanService, candidateAssessmentDownloadFileService, - searchSortFilterPaginateService + searchSortFilterPaginateService, + multiPageFormService ); controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = user } }; controller = controller.WithMockTempData(); diff --git a/DigitalLearningSolutions.Web/Controllers/FrameworksController/AssessmentQuestions.cs b/DigitalLearningSolutions.Web/Controllers/FrameworksController/AssessmentQuestions.cs index 88c476a168..7a7b6c0194 100644 --- a/DigitalLearningSolutions.Web/Controllers/FrameworksController/AssessmentQuestions.cs +++ b/DigitalLearningSolutions.Web/Controllers/FrameworksController/AssessmentQuestions.cs @@ -7,10 +7,9 @@ using System.Linq; using DigitalLearningSolutions.Web.Extensions; using DigitalLearningSolutions.Data.Models.SessionData.Frameworks; - using Microsoft.AspNetCore.Http; - using System; - using System.Collections.Generic; - + using System.Collections.Generic; + using DigitalLearningSolutions.Data.Enums; + public partial class FrameworksController { [Route("/Framework/{frameworkId}/DefaultQuestions")] @@ -120,40 +119,6 @@ public IActionResult StartAssessmentQuestionSession(int frameworkId, int assessm if (userRole < 2) return StatusCode(403); TempData.Clear(); var sessionAssessmentQuestion = new SessionAssessmentQuestion(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - sessionAssessmentQuestion.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out string idString)) - { - sessionAssessmentQuestion.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - - sessionAssessmentQuestion.Id = id; - } - } var assessmentQuestionDetail = new AssessmentQuestionDetail() { AddedByAdminId = adminId, @@ -168,8 +133,12 @@ public IActionResult StartAssessmentQuestionSession(int frameworkId, int assessm levelDescriptors = frameworkService.GetLevelDescriptorsForAssessmentQuestionId(assessmentQuestionId, adminId, assessmentQuestionDetail.MinValue, assessmentQuestionDetail.MaxValue, assessmentQuestionDetail.MinValue == 0).ToList(); } sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; - sessionAssessmentQuestion.LevelDescriptors = levelDescriptors; - TempData.Set(sessionAssessmentQuestion); + sessionAssessmentQuestion.LevelDescriptors = levelDescriptors; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); return RedirectToAction("EditAssessmentQuestion", "Frameworks", new { frameworkId, assessmentQuestionId, frameworkCompetencyId }); } @@ -183,13 +152,20 @@ public IActionResult EditAssessmentQuestion(int frameworkId, int assessmentQuest { return StatusCode(403); } - SessionAssessmentQuestion sessionAssessmentQuestion = TempData.Peek(); + SessionAssessmentQuestion sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion == null) { return StatusCode(404); } - var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); string name = null; if (frameworkCompetencyId > 0) { @@ -287,12 +263,19 @@ public IActionResult EditAssessmentQuestion(AssessmentQuestionDetail assessmentQ if (assessmentQuestionDetail.AssessmentQuestionInputTypeID == 3) { assessmentQuestionDetail.MinValue = 0; - assessmentQuestionDetail.MaxValue = 1; - var sessionAssessmentQuestion = TempData.Peek(); + assessmentQuestionDetail.MaxValue = 1; + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion != null) { - sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); } else { @@ -304,11 +287,18 @@ public IActionResult EditAssessmentQuestion(AssessmentQuestionDetail assessmentQ } else { - SessionAssessmentQuestion sessionAssessmentQuestion = TempData.Peek(); + SessionAssessmentQuestion sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion != null) { - sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); } else { @@ -325,12 +315,19 @@ public IActionResult EditAssessmentQuestionScoring(int frameworkId, int assessme if (userRole < 2) { return StatusCode(403); - } - var sessionAssessmentQuestion = TempData.Peek(); + } + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion != null) { - var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); var detailFramework = frameworkService.GetDetailFrameworkByFrameworkId(frameworkId, GetAdminId()); if (detailFramework != null) { @@ -365,12 +362,19 @@ public IActionResult EditAssessmentQuestionScoring(AssessmentQuestionDetail asse if (userRole < 2) { return StatusCode(403); - } - var sessionAssessmentQuestion = TempData.Peek(); + } + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion != null) { - sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); } if (assessmentQuestionDetail.AssessmentQuestionInputTypeID == 1) @@ -390,14 +394,21 @@ public IActionResult EditAssessmentQuestionOptions(int frameworkId, int assessme if (userRole < 2) { return StatusCode(403); - } - var sessionAssessmentQuestion = TempData.Peek(); + } + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion == null) { return StatusCode(404); } - var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); var detailFramework = frameworkService.GetDetailFrameworkByFrameworkId(frameworkId, GetAdminId()); if (detailFramework == null) { @@ -420,11 +431,18 @@ public IActionResult EditAssessmentQuestionOptions(AssessmentQuestionDetail asse { return RedirectToAction("EditAssessmentQuestionOptions", "Frameworks", new { frameworkId, assessmentQuestionId, frameworkCompetencyId }); } - SessionAssessmentQuestion sessionAssessmentQuestion = TempData.Peek(); + SessionAssessmentQuestion sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion != null) - { - sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + { + sessionAssessmentQuestion.AssessmentQuestionDetail = assessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); } else { @@ -439,11 +457,18 @@ public IActionResult AssessmentQuestionLevelDescriptor(int frameworkId, int leve if (userRole < 2) { return StatusCode(403); - } - var sessionAssessmentQuestion = TempData.Peek(); + } + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion == null) return StatusCode(404); - var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; - TempData.Set(sessionAssessmentQuestion); + var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (level < assessmentQuestionDetail.MinValue) { return RedirectToAction("EditAssessmentQuestionScoring", "Frameworks", new { frameworkId, assessmentQuestionId, frameworkCompetencyId }); @@ -472,8 +497,11 @@ public IActionResult AssessmentQuestionLevelDescriptor(int frameworkId, int leve [HttpPost] [Route("/Frameworks/{frameworkId}/Competency/{frameworkCompetencyId}/Question/{assessmentQuestionId}/LevelDescriptor/{level}")] public IActionResult AssessmentQuestionLevelDescriptor(LevelDescriptor levelDescriptor, int frameworkId, int level, int assessmentQuestionId = 0, int frameworkCompetencyId = 0) - { - var sessionAssessmentQuestion = TempData.Peek(); + { + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (!ModelState.IsValid) { ModelState.Remove(nameof(LevelDescriptor.LevelLabel)); @@ -495,8 +523,12 @@ public IActionResult AssessmentQuestionLevelDescriptor(LevelDescriptor levelDesc { sessionAssessmentQuestion.LevelDescriptors.Remove(existingDescriptor); } - sessionAssessmentQuestion.LevelDescriptors.Add(levelDescriptor); - TempData.Set(sessionAssessmentQuestion); + sessionAssessmentQuestion.LevelDescriptors.Add(levelDescriptor); + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; if (level >= assessmentQuestionDetail.MaxValue) @@ -521,12 +553,19 @@ public IActionResult AssessmentQuestionConfirm(int frameworkId, int assessmentQu if (userRole < 2) { return StatusCode(403); - } - var sessionAssessmentQuestion = TempData.Peek(); + } + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion == null) return StatusCode(404); var assessmentQuestionDetail = sessionAssessmentQuestion.AssessmentQuestionDetail; - var levelDescriptors = sessionAssessmentQuestion.LevelDescriptors; - TempData.Set(sessionAssessmentQuestion); + var levelDescriptors = sessionAssessmentQuestion.LevelDescriptors; + multiPageFormService.SetMultiPageFormData( + sessionAssessmentQuestion, + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); var assessmentQuestion = new Data.Models.SelfAssessments.AssessmentQuestion() { Id = assessmentQuestionDetail.ID, @@ -556,8 +595,11 @@ public IActionResult AssessmentQuestionConfirm(int frameworkId, int assessmentQu } public IActionResult SubmitAssessmentQuestion(int frameworkId, bool addToExisting, int frameworkCompetencyId = 0) { - var adminId = GetAdminId(); - var sessionAssessmentQuestion = TempData.Peek(); + var adminId = GetAdminId(); + var sessionAssessmentQuestion = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditAssessmentQuestion, + TempData + ); if (sessionAssessmentQuestion == null) return StatusCode(404); var assessmentQuestion = sessionAssessmentQuestion.AssessmentQuestionDetail; var newId = assessmentQuestion.ID; diff --git a/DigitalLearningSolutions.Web/Controllers/FrameworksController/Frameworks.cs b/DigitalLearningSolutions.Web/Controllers/FrameworksController/Frameworks.cs index ffc4476e13..3ec30c5425 100644 --- a/DigitalLearningSolutions.Web/Controllers/FrameworksController/Frameworks.cs +++ b/DigitalLearningSolutions.Web/Controllers/FrameworksController/Frameworks.cs @@ -5,10 +5,7 @@ using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Logging; using System.Linq; -using DigitalLearningSolutions.Web.Extensions; using DigitalLearningSolutions.Data.Models.SessionData.Frameworks; -using Microsoft.AspNetCore.Http; -using System; using System.Collections.Generic; namespace DigitalLearningSolutions.Web.Controllers.FrameworksController @@ -119,38 +116,6 @@ public IActionResult StartNewFrameworkSession() { var adminId = GetAdminId(); TempData.Clear(); - var sessionNewFramework = new SessionNewFramework(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - sessionNewFramework.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out string idString)) - { - sessionNewFramework.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - sessionNewFramework.Id = id; - } - } var detailFramework = new DetailFramework() { BrandID = 6, @@ -161,8 +126,12 @@ public IActionResult StartNewFrameworkSession() PublishStatusID = 1, UserRole = 3, }; - sessionNewFramework.DetailFramework = detailFramework; - TempData.Set(sessionNewFramework); + var sessionNewFramework = new SessionNewFramework() { DetailFramework = detailFramework }; + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); return RedirectToAction("CreateNewFramework", "Frameworks", new { actionname = "New" }); } @@ -185,11 +154,22 @@ public IActionResult CreateNewFramework(string actionname, int frameworkId = 0) } else { - var sessionNewFramework = TempData.Peek(); - TempData.Set(sessionNewFramework); - if (sessionNewFramework == null) return StatusCode(404); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + multiPageFormService.SetMultiPageFormData(sessionNewFramework, MultiPageFormDataFeature.AddNewFramework, TempData); detailFramework = sessionNewFramework.DetailFramework; - TempData.Set(sessionNewFramework); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); } return View("Developer/Name", detailFramework); } @@ -207,10 +187,23 @@ public IActionResult CreateNewFramework(DetailFramework detailFramework, string } if (actionname == "New") { - SessionNewFramework sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); - sessionNewFramework.DetailFramework = detailFramework; - TempData.Set(sessionNewFramework); + if(TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + else + { + SessionNewFramework sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + sessionNewFramework.DetailFramework = detailFramework; + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + } return RedirectToAction("SetNewFrameworkName", new { frameworkname = detailFramework.FrameworkName, actionname }); } var adminId = GetAdminId(); @@ -225,8 +218,15 @@ public IActionResult SetNewFrameworkName(string frameworkname, string actionname { if (actionname == "New") { - var sessionNewFramework = TempData.Peek(); - TempData.Set(sessionNewFramework); + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); } var adminId = GetAdminId(); var sameItems = frameworkService.GetFrameworkByFrameworkName(frameworkname, adminId); @@ -261,8 +261,15 @@ public IActionResult SaveNewFramework(string frameworkname, string actionname) { return StatusCode(500); } - var sessionNewFramework = TempData.Peek(); - TempData.Set(sessionNewFramework); + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); return RedirectToAction("FrameworkDescription", "Frameworks", new { actionname }); } @@ -276,10 +283,23 @@ public IActionResult FrameworkDescription(string actionname, int frameworkId = 0 DetailFramework? framework; if (actionname == "New") { - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); - framework = sessionNewFramework.DetailFramework; - TempData.Set(sessionNewFramework); + if(TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + else + { + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + framework = sessionNewFramework.DetailFramework; + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + } } else { @@ -301,10 +321,23 @@ public IActionResult FrameworkDescription(DetailFramework detailFramework, strin { if (actionname == "New") { - SessionNewFramework sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); - sessionNewFramework.DetailFramework = detailFramework; - TempData.Set(sessionNewFramework); + if(TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + else + { + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + sessionNewFramework.DetailFramework = detailFramework; + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + } return RedirectToAction("FrameworkType", "Frameworks", new { actionname }); } frameworkService.UpdateFrameworkDescription(frameworkId, GetAdminId(), detailFramework.Description); @@ -322,10 +355,23 @@ public IActionResult FrameworkType(string actionname, int frameworkId = 0) DetailFramework? framework; if (actionname == "New") { - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); - framework = sessionNewFramework.DetailFramework; - TempData.Set(sessionNewFramework); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + else + { + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + framework = sessionNewFramework.DetailFramework; + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + } } else { @@ -347,10 +393,20 @@ public IActionResult FrameworkType(DetailFramework detailFramework, string actio { if (actionname == "New") { - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); sessionNewFramework.DetailFramework = detailFramework; - TempData.Set(sessionNewFramework); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); return RedirectToAction("SetNewFrameworkBrand", "Frameworks", new { actionname }); } frameworkService.UpdateFrameworkConfig(frameworkId, GetAdminId(), detailFramework.FrameworkConfig); @@ -367,10 +423,20 @@ public IActionResult SetNewFrameworkBrand(string actionname, int frameworkId = 0 DetailFramework? framework; if (actionname == "New") { - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); framework = sessionNewFramework.DetailFramework; - TempData.Set(sessionNewFramework); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); } else { @@ -419,8 +485,14 @@ public IActionResult SetNewFrameworkBrand(DetailFramework? detailFramework, stri logger.LogWarning($"Failed to update branding for frameworkID: {frameworkId} adminId: {adminId}, centreId: {centreId}"); return StatusCode(500); } - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null | detailFramework == null) return StatusCode(404); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null | detailFramework == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); sessionNewFramework.DetailFramework.BrandID = detailFramework.BrandID; sessionNewFramework.DetailFramework.Brand = detailFramework.Brand; sessionNewFramework.DetailFramework.CategoryID = detailFramework.CategoryID; @@ -436,7 +508,11 @@ public IActionResult SetNewFrameworkBrand(DetailFramework? detailFramework, stri if (sessionNewFramework.DetailFramework.Topic == null && sessionNewFramework.DetailFramework.TopicID > 0) sessionNewFramework.DetailFramework.Topic = commonService.GetCategoryNameById(sessionNewFramework.DetailFramework.TopicID); - TempData.Set(sessionNewFramework); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); return RedirectToAction("FrameworkSummary", "Frameworks"); } @@ -479,10 +555,20 @@ public IActionResult SetNewFrameworkBrand(DetailFramework? detailFramework, stri [SetSelectedTab(nameof(NavMenuTab.Frameworks))] public IActionResult FrameworkSummary() { - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { return RedirectToAction("Index"); - TempData.Set(sessionNewFramework); + } + + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionNewFramework, + MultiPageFormDataFeature.AddNewFramework, + TempData + ); return View("Developer/Summary", sessionNewFramework.DetailFramework); } @@ -642,8 +728,15 @@ public IActionResult ViewFramework(string tabname, int frameworkId, int? framewo public IActionResult InsertFramework() { var adminId = GetAdminId(); - var sessionNewFramework = TempData.Peek(); - if (sessionNewFramework == null) return StatusCode(404); + if (TempData[MultiPageFormDataFeature.AddNewFramework.TempDataKey] == null) + { + return StatusCode((int)HttpStatusCode.NotFound); + } + + var sessionNewFramework = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewFramework, + TempData + ); var detailFramework = sessionNewFramework.DetailFramework; detailFramework = InsertBrandingCategoryTopicIfRequired(detailFramework); if (detailFramework == null || adminId < 1) diff --git a/DigitalLearningSolutions.Web/Controllers/FrameworksController/FrameworksController.cs b/DigitalLearningSolutions.Web/Controllers/FrameworksController/FrameworksController.cs index 4e94c80d10..0836afe96b 100644 --- a/DigitalLearningSolutions.Web/Controllers/FrameworksController/FrameworksController.cs +++ b/DigitalLearningSolutions.Web/Controllers/FrameworksController/FrameworksController.cs @@ -24,6 +24,7 @@ public partial class FrameworksController : Controller private readonly ICompetencyLearningResourcesDataService competencyLearningResourcesDataService; private readonly ILearningHubApiClient learningHubApiClient; private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService; + private readonly IMultiPageFormService multiPageFormService; public FrameworksController( IFrameworkService frameworkService, @@ -33,7 +34,8 @@ public FrameworksController( IImportCompetenciesFromFileService importCompetenciesFromFileService, ICompetencyLearningResourcesDataService competencyLearningResourcesDataService, ILearningHubApiClient learningHubApiClient, - ISearchSortFilterPaginateService searchSortFilterPaginateService + ISearchSortFilterPaginateService searchSortFilterPaginateService, + IMultiPageFormService multiPageFormService ) { this.frameworkService = frameworkService; @@ -44,6 +46,7 @@ ISearchSortFilterPaginateService searchSortFilterPaginateService this.competencyLearningResourcesDataService = competencyLearningResourcesDataService; this.learningHubApiClient = learningHubApiClient; this.searchSortFilterPaginateService = searchSortFilterPaginateService; + this.multiPageFormService = multiPageFormService; } private int? GetCentreId() diff --git a/DigitalLearningSolutions.Web/Controllers/FrameworksController/Signposting.cs b/DigitalLearningSolutions.Web/Controllers/FrameworksController/Signposting.cs index bb9e05942a..fdefceac2a 100644 --- a/DigitalLearningSolutions.Web/Controllers/FrameworksController/Signposting.cs +++ b/DigitalLearningSolutions.Web/Controllers/FrameworksController/Signposting.cs @@ -5,25 +5,28 @@ using System.Linq; using System.Threading.Tasks; using Newtonsoft.Json; -using DigitalLearningSolutions.Web.Extensions; using DigitalLearningSolutions.Data.Models.Frameworks; using DigitalLearningSolutions.Web.Models.Enums; using DigitalLearningSolutions.Web.Models; using DigitalLearningSolutions.Web.Helpers; using DigitalLearningSolutions.Data.Models.External.LearningHubApiClient; +using DigitalLearningSolutions.Data.Enums; namespace DigitalLearningSolutions.Web.Controllers.FrameworksController { public partial class FrameworksController { private static List Catalogues { get; set; } - private const string SignpostingFilter = "SignpostingCatalogueIdFilter"; [Route("/Frameworks/{frameworkId}/Competency/{frameworkCompetencyId}/CompetencyGroup/{frameworkCompetencyGroupId}/Signposting")] public IActionResult EditCompetencyLearningResources(int frameworkId, int frameworkCompetencyGroupId, int frameworkCompetencyId) { - var model = GetSignpostingResourceParameters(frameworkId, frameworkCompetencyId); - TempData["CompetencyResourceLinks"] = JsonConvert.SerializeObject(model.CompetencyResourceLinks.ToDictionary(r => r.CompetencyLearningResourceId.Value, r => r.Name)); + var model = GetSignpostingResourceParameters(frameworkId, frameworkCompetencyId); + multiPageFormService.SetMultiPageFormData( + model, + MultiPageFormDataFeature.EditCompetencyLearningResources, + TempData + ); return View("Developer/EditCompetencyLearningResources", model); } @@ -73,18 +76,26 @@ public async Task SearchLearningResourcesAsync(int frameworkId, i } [Route("/Frameworks/{frameworkId}/Competency/{frameworkCompetencyId}/CompetencyGroup/{frameworkCompetencyGroupId}/Signposting/AddResource/Summary")] - public IActionResult AddCompetencyLearningResourceSummary(int frameframeworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) - { - var model = TempData["CompetencyResourceSummaryViewModel"] == null ? - new CompetencyResourceSummaryViewModel(frameframeworkId, frameworkCompetencyId, frameworkCompetencyGroupId) - : JsonConvert.DeserializeObject((string)TempData["CompetencyResourceSummaryViewModel"]); - return View("Developer/AddCompetencyLearningResourceSummary", model); + public IActionResult AddCompetencyLearningResourceSummary(int frameworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) + { + var feature = MultiPageFormDataFeature.AddCompetencyLearningResourceSummary; + if(TempData[feature.TempDataKey] == null) + { + return RedirectToAction("SearchLearningResources", "Frameworks", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); + } + + var session = multiPageFormService.GetMultiPageFormData(feature, TempData); + return View("Developer/AddCompetencyLearningResourceSummary", session); } [HttpPost] public IActionResult AddCompetencyLearningResourceSummary(CompetencyResourceSummaryViewModel model) - { - TempData["CompetencyResourceSummaryViewModel"] = JsonConvert.SerializeObject(model); + { + multiPageFormService.SetMultiPageFormData( + model, + MultiPageFormDataFeature.AddCompetencyLearningResourceSummary, + TempData + ); return RedirectToAction("AddCompetencyLearningResourceSummary", "Frameworks", new { model.FrameworkId , model.FrameworkCompetencyId, model.FrameworkCompetencyGroupId}); } @@ -98,13 +109,16 @@ public IActionResult ConfirmAddCompetencyLearningResourceSummary(CompetencyResou } private string ResourceNameFromCompetencyResourceLinks(int competencyLearningResourceId) - { - string resourceName = null; - if (TempData.Keys.Contains("CompetencyResourceLinks")) - { - var links = JsonConvert.DeserializeObject>(TempData["CompetencyResourceLinks"].ToString()); - resourceName = links.Keys.Contains(competencyLearningResourceId) ? links[competencyLearningResourceId] : null; - } + { + string resourceName = null; + if(TempData[MultiPageFormDataFeature.EditCompetencyLearningResources.TempDataKey] != null) + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditCompetencyLearningResources, + TempData + ); + resourceName = session.CompetencyResourceLinks.FirstOrDefault(r => r.CompetencyLearningResourceId == competencyLearningResourceId)?.Name; + }; return resourceName; } @@ -124,17 +138,18 @@ public IActionResult StartSignpostingParametersSession(int frameworkId, int fram : parameter.CompareToRoleRequirements ? CompareAssessmentQuestionType.CompareToRole : CompareAssessmentQuestionType.DontCompare; var session = new SessionCompetencyLearningResourceSignpostingParameter( - CookieName, Request.Cookies, Response.Cookies, frameworkCompetency: frameworkCompetency, resourceName: resourceNameFromCompetencyResourceLinks ?? frameworkService.GetLearningResourceReferenceByCompetencyLearningResouceId(parameter.CompetencyLearningResourceId).OriginalResourceName, questions: frameworkService.GetCompetencyAssessmentQuestionsByFrameworkCompetencyId(frameworkCompetencyId, adminId).ToList(), selectedQuestion: parameter.AssessmentQuestion, selectedCompareQuestionType: questionType, - parameter); - TempData.Remove("CompetencyResourceSummaryViewModel"); - TempData.Remove("CompetencyResourceLinks"); - TempData.Clear(); - TempData.Set(session); + parameter); + TempData.Clear(); + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); if(session.Questions.Count() == 0) return RedirectToAction("SignpostingSetStatus", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); @@ -150,8 +165,11 @@ public IActionResult CompareSelfAssessmentResult(int frameworkId, int frameworkC [HttpPost] public IActionResult CompareSelfAssessmentResultNext(CompareAssessmentQuestionType compareQuestionType, int? compareToQuestionId, int frameworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); var parameter = session.AssessmentQuestionParameter; session.SelectedCompareQuestionType = compareQuestionType; session.CompareQuestionConfirmed = true; @@ -172,8 +190,12 @@ public IActionResult CompareSelfAssessmentResultNext(CompareAssessmentQuestionTy parameter.RelevanceAssessmentQuestionId = parameter.RelevanceAssessmentQuestion?.ID; parameter.CompareToRoleRequirements = false; break; - } - TempData.Set(session); + } + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return RedirectToAction("SignpostingSetStatus", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); } @@ -184,8 +206,11 @@ public IActionResult SignpostingSetStatus(int frameworkId, int frameworkCompeten } private IActionResult ViewFromSession(string view, int frameworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); var model = new CompetencyLearningResourceSignpostingParametersViewModel(frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId) { FrameworkCompetency = session.FrameworkCompetency?.Name, @@ -216,17 +241,27 @@ private IActionResult ViewFromSession(string view, int frameworkId, int framewor [HttpPost] public IActionResult SignpostingSetStatusNext(CompetencyLearningResourceSignpostingParametersViewModel model) - { - var session = TempData.Peek(); - session.AssessmentQuestionParameter.Essential = model.AssessmentQuestionParameter.Essential; - TempData.Set(session); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); + session.AssessmentQuestionParameter.Essential = model.AssessmentQuestionParameter.Essential; + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return RedirectToAction("AddSignpostingParametersSummary", new { model.FrameworkId, model.FrameworkCompetencyId, model.FrameworkCompetencyGroupId }); } [Route("/Frameworks/{frameworkId}/Competency/{frameworkCompetencyId}/CompetencyGroup/{frameworkCompetencyGroupId}/SignpostingParameters/Summary")] public IActionResult AddSignpostingParametersSummary(int frameworkId, int frameworkCompetencyId, int? frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); if (!session.CompareQuestionConfirmed) { session.AssessmentQuestionParameter.RelevanceAssessmentQuestion = null; @@ -236,15 +271,22 @@ public IActionResult AddSignpostingParametersSummary(int frameworkId, int framew { session.AssessmentQuestionParameter.MinResultMatch = session.AssessmentQuestionParameter.AssessmentQuestion?.MinValue ?? 0; session.AssessmentQuestionParameter.MaxResultMatch = session.AssessmentQuestionParameter.AssessmentQuestion?.MaxValue ?? 0; - } - TempData.Set(session); + } + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return ViewFromSession("Developer/AddSignpostingParametersSummary", frameworkId, frameworkCompetencyId, frameworkCompetencyId); } [HttpPost] public IActionResult AddSignpostingParametersSummaryConfirm(int frameworkId, int frameworkCompetencyId, int? frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); frameworkService.EditCompetencyResourceAssessmentQuestionParameter(session.AssessmentQuestionParameter); TempData.Clear(); return RedirectToAction("EditCompetencyLearningResources", "Frameworks", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); @@ -258,8 +300,11 @@ public IActionResult EditSignpostingParameters(int frameworkId, int frameworkCom if (userRole < 2) { return StatusCode(403); - } - var session = TempData.Peek(); + } + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); var model = new CompetencyLearningResourceSignpostingParametersViewModel(frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId) { FrameworkCompetency = session.FrameworkCompetency.Name, @@ -267,18 +312,29 @@ public IActionResult EditSignpostingParameters(int frameworkId, int frameworkCom Questions = session.Questions, SelectedQuestion = session.SelectedQuestion, AssessmentQuestionParameter = session.AssessmentQuestionParameter - }; - TempData.Set(session); + }; + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return View("Developer/EditSignpostingParameters", model); } [Route("/Frameworks/{frameworkId}/Competency/{frameworkCompetencyId}/CompetencyGroup/{frameworkCompetencyGroupId}/SignpostingParameters/Skip")] public IActionResult EditSignpostingParametersSkip(int frameworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); session.TriggerValuesConfirmed = false; - session.CompareQuestionConfirmed = false; - TempData.Set(session); + session.CompareQuestionConfirmed = false; + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return RedirectToAction("SignpostingSetStatus", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); } @@ -286,8 +342,11 @@ public IActionResult EditSignpostingParametersSkip(int frameworkId, int framewor public IActionResult EditSignpostingParametersNext(CompetencyLearningResourceSignpostingParametersViewModel model) { if (model.SelectedQuestion?.ID != null) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); session.CompareQuestionConfirmed = false; session.SelectedQuestion = session.Questions.FirstOrDefault(q => q.ID == model.SelectedQuestion.ID); session.AssessmentQuestionParameter.AssessmentQuestion = session.SelectedQuestion; @@ -297,8 +356,12 @@ public IActionResult EditSignpostingParametersNext(CompetencyLearningResourceSig session.SelectedQuestion.MinValue, session.SelectedQuestion.MaxValue, session.SelectedQuestion.MinValue == 0).ToList(); - session.SelectedQuestionRoleRequirements = frameworkService.GetCompetencyAssessmentQuestionRoleRequirementsCount(session.SelectedQuestion.ID, session.FrameworkCompetency.CompetencyID); - TempData.Set(session); + session.SelectedQuestionRoleRequirements = frameworkService.GetCompetencyAssessmentQuestionRoleRequirementsCount(session.SelectedQuestion.ID, session.FrameworkCompetency.CompetencyID); + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return RedirectToAction("SignpostingParametersSetTriggerValues", new { model.FrameworkId, model.FrameworkCompetencyId, model.FrameworkCompetencyGroupId }); } else @@ -321,18 +384,29 @@ public IActionResult SignpostingParametersSetTriggerValues(int frameworkId, int [HttpPost] public IActionResult SignpostingParametersSetTriggerValuesNext(CompetencyResourceAssessmentQuestionParameter assessmentParameter, int[] selectedLevelValues, int frameworkId, int frameworkCompetencyId, int frameworkCompetencyGroupId) - { - var session = TempData.Peek(); + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); var updateSelectedValuesFromSlider = session.SelectedQuestion.AssessmentQuestionInputTypeID == 2; bool skipCompare = session.Questions.Count() < 2 && session.SelectedQuestionRoleRequirements == 0; session.AssessmentQuestionParameter.MinResultMatch = updateSelectedValuesFromSlider ? assessmentParameter.MinResultMatch : selectedLevelValues.DefaultIfEmpty(0).Min(); session.AssessmentQuestionParameter.MaxResultMatch = updateSelectedValuesFromSlider ? assessmentParameter.MaxResultMatch : selectedLevelValues.DefaultIfEmpty(0).Max(); - session.TriggerValuesConfirmed = true; - TempData.Set(session); + session.TriggerValuesConfirmed = true; + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); if (skipCompare) { - session.CompareQuestionConfirmed = false; - TempData.Set(session); + session.CompareQuestionConfirmed = false; + multiPageFormService.SetMultiPageFormData( + session, + MultiPageFormDataFeature.EditSignpostingParameter, + TempData + ); return RedirectToAction("SignpostingSetStatus", new { frameworkId, frameworkCompetencyId, frameworkCompetencyGroupId }); } else diff --git a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/LearningPortalController.cs b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/LearningPortalController.cs index b51a94ec45..446cc9f896 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/LearningPortalController.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/LearningPortalController.cs @@ -26,6 +26,7 @@ public partial class LearningPortalController : Controller private readonly IFrameworkService frameworkService; private readonly ICandidateAssessmentDownloadFileService candidateAssessmentDownloadFileService; private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService; + private readonly IMultiPageFormService multiPageFormService; public LearningPortalController( ICentresDataService centresDataService, @@ -39,7 +40,8 @@ public LearningPortalController( IConfiguration config, IActionPlanService actionPlanService, ICandidateAssessmentDownloadFileService candidateAssessmentDownloadFileService, - ISearchSortFilterPaginateService searchSortFilterPaginateService + ISearchSortFilterPaginateService searchSortFilterPaginateService, + IMultiPageFormService multiPageFormService ) { this.centresDataService = centresDataService; @@ -54,6 +56,7 @@ ISearchSortFilterPaginateService searchSortFilterPaginateService this.actionPlanService = actionPlanService; this.candidateAssessmentDownloadFileService = candidateAssessmentDownloadFileService; this.searchSortFilterPaginateService = searchSortFilterPaginateService; + this.multiPageFormService = multiPageFormService; } [SetDlsSubApplication(nameof(DlsSubApplication.LearningPortal))] diff --git a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs index 7c315210df..94b005f1e6 100644 --- a/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs +++ b/DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; + using System.Net; using DigitalLearningSolutions.Data.Enums; using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate; using DigitalLearningSolutions.Data.Models.SelfAssessments; @@ -14,7 +15,6 @@ using DigitalLearningSolutions.Web.ViewModels.Common.SearchablePage; using DigitalLearningSolutions.Web.ViewModels.LearningPortal.Current; using DigitalLearningSolutions.Web.ViewModels.LearningPortal.SelfAssessments; - using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; @@ -242,15 +242,35 @@ public IActionResult SupervisorComments(int selfAssessmentId, int competencyNumb public IActionResult SearchInSelfAssessmentOverviewGroups(SearchSelfAssessmentOvervieviewViewModel model) { TempData.Clear(); - TempData.Set>(model.AppliedFilters); + multiPageFormService.SetMultiPageFormData( + model, + MultiPageFormDataFeature.SearchInSelfAssessmentOverviewGroups, + TempData + ); return RedirectToAction("FilteredSelfAssessmentGroups", model); } [Route("LearningPortal/SelfAssessment/{selfAssessmentId}/{vocabulary}/{competencyGroupId}/Filtered")] [Route("LearningPortal/SelfAssessment/{selfAssessmentId}/{vocabulary}/Filtered")] - public IActionResult FilteredSelfAssessmentGroups(SearchSelfAssessmentOvervieviewViewModel model) + public IActionResult FilteredSelfAssessmentGroups(SearchSelfAssessmentOvervieviewViewModel model, bool clearFilters = false) { - model.AppliedFilters = TempData.Get>(); + if (clearFilters) + { + model.AppliedFilters.Clear(); + multiPageFormService.SetMultiPageFormData( + model, + MultiPageFormDataFeature.SearchInSelfAssessmentOverviewGroups, + TempData + ); + } + else + { + var session = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.SearchInSelfAssessmentOverviewGroups, + TempData + ); + model.AppliedFilters = session.AppliedFilters; + } return SelfAssessmentOverview(model.SelfAssessmentId, model.Vocabulary, model.CompetencyGroupId, model); } @@ -258,7 +278,6 @@ public IActionResult AddSelfAssessmentOverviewFilter(SearchSelfAssessmentOvervie { if (!model.AppliedFilters.Any(f => f.FilterValue == model.SelectedFilter.ToString())) { - string description; string tagClass = string.Empty; if (model.SelectedFilter < 0) @@ -274,7 +293,11 @@ public IActionResult AddSelfAssessmentOverviewFilter(SearchSelfAssessmentOvervie model.AppliedFilters.Add(new AppliedFilterViewModel(description, null, model.SelectedFilter.ToString(), tagClass)); } TempData.Clear(); - TempData.Set>(model.AppliedFilters); + multiPageFormService.SetMultiPageFormData( + model, + MultiPageFormDataFeature.SearchInSelfAssessmentOverviewGroups, + TempData + ); return RedirectToAction("FilteredSelfAssessmentGroups", new { model.SelfAssessmentId, model.Vocabulary, model.CompetencyGroupId, model.SearchText }); } @@ -461,46 +484,6 @@ public IActionResult QuickAddSupervisor(int selfAssessmentId, int supervisorDele public IActionResult StartAddNewSupervisor(int selfAssessmentId) { TempData.Clear(); - var sessionAddSupervisor = new SessionAddSupervisor(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30), - } - ); - - sessionAddSupervisor.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out var idString)) - { - sessionAddSupervisor.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30), - } - ); - - sessionAddSupervisor.Id = id; - } - } - - sessionAddSupervisor.SelfAssessmentID = selfAssessmentId; var selfAssessment = selfAssessmentService.GetSelfAssessmentForCandidateById( User.GetCandidateIdKnownNotNull(), selfAssessmentId @@ -510,21 +493,37 @@ public IActionResult StartAddNewSupervisor(int selfAssessmentId) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - sessionAddSupervisor.SelfAssessmentName = selfAssessment.Name; - TempData.Set(sessionAddSupervisor); + var sessionAddSupervisor = new SessionAddSupervisor() + { + SelfAssessmentID = selfAssessmentId, + SelfAssessmentName = selfAssessment.Name + }; + + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); return RedirectToAction("AddNewSupervisor", new { selfAssessmentId }); } [Route("/LearningPortal/SelfAssessment/{selfAssessmentId:int}/Supervisors/Add")] public IActionResult AddNewSupervisor(int selfAssessmentId) { - var sessionAddSupervisor = TempData.Peek(); - if (sessionAddSupervisor == null) + if(TempData[MultiPageFormDataFeature.AddNewSupervisor] == null) { - return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); + return RedirectToAction("StatusCode", "LearningSolutions", new { code = (int)HttpStatusCode.Forbidden }); } + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); var supervisors = selfAssessmentService.GetValidSupervisorsForActivity( User.GetCentreId(), selfAssessmentId, @@ -544,7 +543,10 @@ public IActionResult AddNewSupervisor(int selfAssessmentId) [Route("/LearningPortal/SelfAssessment/{selfAssessmentId:int}/Supervisors/Add")] public IActionResult SetSupervisorName(AddSupervisorViewModel model) { - var sessionAddSupervisor = TempData.Peek(); + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); if (!ModelState.IsValid) { var supervisors = selfAssessmentService.GetValidSupervisorsForActivity( @@ -566,7 +568,11 @@ public IActionResult SetSupervisorName(AddSupervisorViewModel model) .ToArray(); if (roles.Count() > 1) { - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); return RedirectToAction("SetSupervisorRole", new { model.SelfAssessmentID }); } @@ -576,7 +582,11 @@ public IActionResult SetSupervisorName(AddSupervisorViewModel model) } sessionAddSupervisor.SelfAssessmentSupervisorRoleId = roles.First().ID; - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); return RedirectToAction("AddSupervisorSummary", new { model.SelfAssessmentID }); } @@ -591,13 +601,20 @@ public IActionResult SetSupervisorRole(int selfAssessmentId, int? supervisorDele var supervisorAdminId = 0; if (supervisorDelegateId == null) { - var sessionAddSupervisor = TempData.Peek(); + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); if (sessionAddSupervisor == null) { return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); supervisorAdminId = sessionAddSupervisor.SupervisorAdminId; selfAssessmentName = sessionAddSupervisor.SelfAssessmentName; selfAssessmentSupervisorRoleId = sessionAddSupervisor.SelfAssessmentSupervisorRoleId; @@ -654,14 +671,21 @@ public IActionResult SetSupervisorRole(SetSupervisorRoleViewModel model) if (model.SupervisorDelegateId == null) { - var sessionAddSupervisor = TempData.Peek(); + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); if (sessionAddSupervisor == null) { return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } sessionAddSupervisor.SelfAssessmentSupervisorRoleId = model.SelfAssessmentSupervisorRoleId; - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); return RedirectToAction("AddSupervisorSummary", new { model.SelfAssessmentID }); } @@ -677,13 +701,20 @@ public IActionResult SetSupervisorRole(SetSupervisorRoleViewModel model) [Route("/LearningPortal/SelfAssessment/{selfAssessmentId:int}/Supervisors/Add/Summary")] public IActionResult AddSupervisorSummary(int selfAssessmentId) { - var sessionAddSupervisor = TempData.Peek(); + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); if (sessionAddSupervisor == null) { return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); var roles = supervisorService.GetDelegateNominatableSupervisorRolesForSelfAssessment(selfAssessmentId); var supervisor = selfAssessmentService.GetSupervisorByAdminId(sessionAddSupervisor.SupervisorAdminId); var summaryModel = new AddSupervisorSummaryViewModel @@ -705,13 +736,20 @@ public IActionResult AddSupervisorSummary(int selfAssessmentId) [Route("/LearningPortal/SelfAssessment/{selfAssessmentId:int}/Supervisors/Add/Summary")] public IActionResult SubmitSummary() { - var sessionAddSupervisor = TempData.Peek(); + var sessionAddSupervisor = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); if (sessionAddSupervisor == null) { return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionAddSupervisor); + multiPageFormService.SetMultiPageFormData( + sessionAddSupervisor, + MultiPageFormDataFeature.AddNewSupervisor, + TempData + ); var candidateId = User.GetCandidateIdKnownNotNull(); var supervisorDelegateId = supervisorService.AddSuperviseDelegate( sessionAddSupervisor.SupervisorAdminId, @@ -753,45 +791,6 @@ public IActionResult SendSupervisorReminder(int selfAssessmentId, int supervisor public IActionResult StartRequestVerification(int selfAssessmentId) { TempData.Clear(); - var sessionRequestVerification = new SessionRequestVerification(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30), - } - ); - - sessionRequestVerification.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out var idString)) - { - sessionRequestVerification.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30), - } - ); - - sessionRequestVerification.Id = id; - } - } - var selfAssessment = selfAssessmentService.GetSelfAssessmentForCandidateById( User.GetCandidateIdKnownNotNull(), selfAssessmentId @@ -801,11 +800,18 @@ public IActionResult StartRequestVerification(int selfAssessmentId) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - sessionRequestVerification.SelfAssessmentID = selfAssessmentId; - sessionRequestVerification.Vocabulary = selfAssessment.Vocabulary ?? throw new InvalidOperationException(); - sessionRequestVerification.SelfAssessmentName = selfAssessment.Name; - sessionRequestVerification.SupervisorSelfAssessmentReview = selfAssessment.SupervisorSelfAssessmentReview; - TempData.Set(sessionRequestVerification); + var sessionRequestVerification = new SessionRequestVerification() + { + SelfAssessmentID = selfAssessmentId, + Vocabulary = selfAssessment.Vocabulary ?? throw new InvalidOperationException(), + SelfAssessmentName = selfAssessment.Name, + SupervisorSelfAssessmentReview = selfAssessment.SupervisorSelfAssessmentReview + }; + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); return RedirectToAction("VerificationPickSupervisor", new { selfAssessmentId }); } @@ -818,7 +824,11 @@ public IActionResult VerificationPickSupervisor(int selfAssessmentId) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); var candidateId = User.GetCandidateIdKnownNotNull(); var selfAssessment = selfAssessmentService.GetSelfAssessmentForCandidateById(candidateId, selfAssessmentId); var supervisors = selfAssessmentService @@ -843,7 +853,11 @@ public IActionResult VerificationPickSupervisor(VerificationPickSupervisorViewMo return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); var candidateId = User.GetCandidateIdKnownNotNull(); if (!ModelState.IsValid) { @@ -861,7 +875,11 @@ public IActionResult VerificationPickSupervisor(VerificationPickSupervisorViewMo } sessionRequestVerification.CandidateAssessmentSupervisorId = model.CandidateAssessmentSupervisorId; - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); return RedirectToAction("VerificationPickResults", new { sessionRequestVerification.SelfAssessmentID }); } @@ -874,7 +892,11 @@ public IActionResult VerificationPickResults(int selfAssessmentId) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); var competencies = PopulateCompetencyLevelDescriptors( selfAssessmentService.GetCandidateAssessmentResultsToVerifyById( selfAssessmentId, @@ -918,7 +940,11 @@ public IActionResult VerificationPickResults(VerificationPickResultsViewModel mo } sessionRequestVerification.ResultIds = model.ResultIds; - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); return RedirectToAction("VerificationSummary", new { sessionRequestVerification.SelfAssessmentID }); } @@ -931,7 +957,11 @@ public IActionResult VerificationSummary(int selfAssessmentId) return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); var supervisor = selfAssessmentService.GetSelfAssessmentSupervisorByCandidateAssessmentSupervisorId( sessionRequestVerification.CandidateAssessmentSupervisorId @@ -969,7 +999,11 @@ public IActionResult SubmitVerification() return RedirectToAction("StatusCode", "LearningSolutions", new { code = 403 }); } - TempData.Set(sessionRequestVerification); + multiPageFormService.SetMultiPageFormData( + sessionRequestVerification, + MultiPageFormDataFeature.AddSelfAssessmentRequestVerification, + TempData + ); if (sessionRequestVerification.ResultIds == null) { return RedirectToAction( diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index 50863c868c..38863b9455 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -6,18 +6,16 @@ using Microsoft.AspNetCore.Mvc; using System.Linq; using DigitalLearningSolutions.Web.Extensions; - using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using DigitalLearningSolutions.Data.Helpers; using DigitalLearningSolutions.Data.Models.SearchSortFilterPaginate; using DigitalLearningSolutions.Data.Models.SessionData.Supervisor; using DigitalLearningSolutions.Data.Models.SelfAssessments; + using DigitalLearningSolutions.Data.Enums; public partial class SupervisorController { - private const string CookieName = "DLSSupervisorService"; - public IActionResult Index() { var adminId = GetAdminID(); @@ -463,46 +461,13 @@ List resultChecked public IActionResult StartEnrolDelegateOnProfileAssessment(int supervisorDelegateId) { TempData.Clear(); - var sessionEnrolOnRoleProfile = new SessionEnrolOnRoleProfile(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - } - ); - - sessionEnrolOnRoleProfile.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out string idString)) - { - sessionEnrolOnRoleProfile.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - } - ); - - sessionEnrolOnRoleProfile.Id = id; - } - } - TempData.Set(sessionEnrolOnRoleProfile); + var sessionEnrolOnRoleProfile = new SessionEnrolOnRoleProfile(); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); return RedirectToAction( "EnrolDelegateOnProfileAssessment", "Supervisor", @@ -513,10 +478,17 @@ public IActionResult StartEnrolDelegateOnProfileAssessment(int supervisorDelegat [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/Profile")] public IActionResult EnrolDelegateOnProfileAssessment(int supervisorDelegateId) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); - TempData.Set(sessionEnrolOnRoleProfile); - var supervisorDelegate = - supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + + var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); var roleProfiles = supervisorService.GetAvailableRoleProfilesForDelegate( (int)supervisorDelegate.CandidateID, GetCentreId() @@ -534,14 +506,20 @@ public IActionResult EnrolDelegateOnProfileAssessment(int supervisorDelegateId) [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/Profile")] public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAssessmentID) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); if (selfAssessmentID < 1) { ModelState.AddModelError("selfAssessmentId", "You must select a self assessment"); - TempData.Set(sessionEnrolOnRoleProfile); - var supervisorDelegate = - supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); var roleProfiles = supervisorService.GetAvailableRoleProfilesForDelegate( (int)supervisorDelegate.CandidateID, GetCentreId() @@ -556,7 +534,11 @@ public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAsses } sessionEnrolOnRoleProfile.SelfAssessmentID = selfAssessmentID; - TempData.Set(sessionEnrolOnRoleProfile); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); return RedirectToAction( "EnrolDelegateCompleteBy", "Supervisor", @@ -567,8 +549,15 @@ public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAsses [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/CompleteBy")] public IActionResult EnrolDelegateCompleteBy(int supervisorDelegateId, int? day, int? month, int? year) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); - TempData.Set(sessionEnrolOnRoleProfile); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); @@ -590,7 +579,10 @@ public IActionResult EnrolDelegateCompleteBy(int supervisorDelegateId, int? day, [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/CompleteBy")] public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int day, int month, int year) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); if (day != 0 | month != 0 | year != 0) { var validationResult = OldDateValidator.ValidateDate(day, month, year); @@ -602,7 +594,11 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da { var completeByDate = new DateTime(year, month, day); sessionEnrolOnRoleProfile.CompleteByDate = completeByDate; - TempData.Set(sessionEnrolOnRoleProfile); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); } } @@ -619,7 +615,11 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da else if (supervisorRoles.Count() == 1) { sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId = supervisorRoles.First().ID; - TempData.Set(sessionEnrolOnRoleProfile); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); } return RedirectToAction( @@ -632,13 +632,18 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/SupervisorRole")] public IActionResult EnrolDelegateSupervisorRole(int supervisorDelegateId) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); - TempData.Set(sessionEnrolOnRoleProfile); - var supervisorDelegate = - supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); - var supervisorRoles = - supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value); + var supervisorRoles = supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value); var model = new EnrolDelegateSupervisorRoleViewModel() { SupervisorDelegateDetail = supervisorDelegate, @@ -657,7 +662,10 @@ public IActionResult EnrolDelegateSetSupervisorRole( int selfAssessmentSupervisorRoleId ) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); if (!ModelState.IsValid) { ModelState.ClearErrorsForAllFieldsExcept("SelfAssessmentSupervisorRoleId"); @@ -673,7 +681,11 @@ int selfAssessmentSupervisorRoleId } sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId = selfAssessmentSupervisorRoleId; - TempData.Set(sessionEnrolOnRoleProfile); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); return RedirectToAction( "EnrolDelegateSummary", "Supervisor", @@ -684,8 +696,15 @@ int selfAssessmentSupervisorRoleId [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/Summary")] public IActionResult EnrolDelegateSummary(int supervisorDelegateId) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); - TempData.Set(sessionEnrolOnRoleProfile); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); + multiPageFormService.SetMultiPageFormData( + sessionEnrolOnRoleProfile, + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); @@ -710,7 +729,10 @@ public IActionResult EnrolDelegateSummary(int supervisorDelegateId) public IActionResult EnrolDelegateConfirm(int delegateId, int supervisorDelegateId) { - SessionEnrolOnRoleProfile sessionEnrolOnRoleProfile = TempData.Peek(); + var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, + TempData + ); var selfAssessmentId = sessionEnrolOnRoleProfile.SelfAssessmentID; var completeByDate = sessionEnrolOnRoleProfile.CompleteByDate; var selfAssessmentSupervisorRoleId = sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId; diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs index 7c78d9c5f2..55f3999414 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs @@ -23,6 +23,7 @@ public partial class SupervisorController : Controller private readonly ILogger logger; private readonly IConfiguration config; private readonly ISearchSortFilterPaginateService searchSortFilterPaginateService; + private readonly IMultiPageFormService multiPageFormService; public SupervisorController( ISupervisorService supervisorService, @@ -35,7 +36,8 @@ public SupervisorController( IUserDataService userDataService, ILogger logger, IConfiguration config, - ISearchSortFilterPaginateService searchSortFilterPaginateService + ISearchSortFilterPaginateService searchSortFilterPaginateService, + IMultiPageFormService multiPageFormService ) { this.supervisorService = supervisorService; @@ -49,7 +51,8 @@ ISearchSortFilterPaginateService searchSortFilterPaginateService this.logger = logger; this.config = config; this.searchSortFilterPaginateService = searchSortFilterPaginateService; - } + this.multiPageFormService = multiPageFormService; + } private int GetCentreId() { diff --git a/DigitalLearningSolutions.Web/Models/SessionCompetencyLearningResourceSignpostingParameter.cs b/DigitalLearningSolutions.Web/Models/SessionCompetencyLearningResourceSignpostingParameter.cs index 82857f0aa4..f1f6d069ee 100644 --- a/DigitalLearningSolutions.Web/Models/SessionCompetencyLearningResourceSignpostingParameter.cs +++ b/DigitalLearningSolutions.Web/Models/SessionCompetencyLearningResourceSignpostingParameter.cs @@ -25,9 +25,8 @@ public class SessionCompetencyLearningResourceSignpostingParameter public SessionCompetencyLearningResourceSignpostingParameter() { } - public SessionCompetencyLearningResourceSignpostingParameter(string cookieName, IRequestCookieCollection requestCookies, IResponseCookies responseCookies, FrameworkCompetency frameworkCompetency, string resourceName, List questions, AssessmentQuestion selectedQuestion, CompareAssessmentQuestionType selectedCompareQuestionType, CompetencyResourceAssessmentQuestionParameter assessmentQuestionParameter) + public SessionCompetencyLearningResourceSignpostingParameter(FrameworkCompetency frameworkCompetency, string resourceName, List questions, AssessmentQuestion selectedQuestion, CompareAssessmentQuestionType selectedCompareQuestionType, CompetencyResourceAssessmentQuestionParameter assessmentQuestionParameter) { - var options = new CookieOptions { Expires = DateTimeOffset.UtcNow.AddDays(30) }; FrameworkCompetency = frameworkCompetency; ResourceName = resourceName; Questions = questions; @@ -36,17 +35,6 @@ public SessionCompetencyLearningResourceSignpostingParameter(string cookieName, SelectedCompareQuestionType = selectedCompareQuestionType; TriggerValuesConfirmed = false; CompareQuestionConfirmed = false; - - if (requestCookies.ContainsKey(cookieName) && requestCookies.TryGetValue(cookieName, out string id)) - { - this.Id = Guid.Parse(id); - } - else - { - var guid = Guid.NewGuid(); - responseCookies.Append(cookieName, guid.ToString(), options); - this.Id = guid; - } } } }