private static EditCourseDetailsViewModel GetEditCourseDetailsViewModel( int customisationId = 1, int applicationId = 1, string customisationName = "Name", bool passwordProtected = true, string password = "******", bool receiveNotificationEmails = true, string notificationEmails = "*****@*****.**", bool postLearningAssessment = true, bool isAssessed = false, bool diagAssess = true, string?tutCompletionThreshold = "90", string?diagCompletionThreshold = "75" ) { var formData = new EditCourseDetailsFormData { ApplicationId = applicationId, CustomisationName = customisationName, PasswordProtected = passwordProtected, Password = password, ReceiveNotificationEmails = receiveNotificationEmails, NotificationEmails = notificationEmails, PostLearningAssessment = postLearningAssessment, IsAssessed = isAssessed, DiagAssess = diagAssess, TutCompletionThreshold = tutCompletionThreshold, DiagCompletionThreshold = diagCompletionThreshold, }; return(new EditCourseDetailsViewModel( formData, customisationId )); }
public static void ResetValueAndClearErrorsOnOtherCompletionCriteriaIfUnselected( EditCourseDetailsFormData formData, ModelStateDictionary modelState ) { if (!formData.IsAssessed) { formData.TutCompletionThreshold ??= "0"; formData.DiagCompletionThreshold ??= "0"; return; } if (modelState.HasError(nameof(formData.TutCompletionThreshold))) { modelState.ClearErrorsOnField(nameof(formData.TutCompletionThreshold)); } if (modelState.HasError(nameof(formData.DiagCompletionThreshold))) { modelState.ClearErrorsOnField(nameof(formData.DiagCompletionThreshold)); } formData.TutCompletionThreshold = "0"; formData.DiagCompletionThreshold = "0"; }
private void ValidateEmail(EditCourseDetailsFormData formData) { if (formData.ReceiveNotificationEmails) { return; } if (ModelState.HasError(nameof(formData.NotificationEmails))) { ModelState.ClearErrorsOnField(nameof(formData.NotificationEmails)); } formData.NotificationEmails = null; }
private void ValidatePassword(EditCourseDetailsFormData formData) { if (formData.PasswordProtected) { return; } if (ModelState.HasError(nameof(formData.Password))) { ModelState.ClearErrorsOnField(nameof(formData.Password)); } formData.Password = null; }
public static void ResetValueAndClearErrorsOnEmailIfUnselected( EditCourseDetailsFormData formData, ModelStateDictionary modelState ) { if (formData.ReceiveNotificationEmails) { return; } if (modelState.HasError(nameof(formData.NotificationEmails))) { modelState.ClearErrorsOnField(nameof(formData.NotificationEmails)); } formData.NotificationEmails = null; }
public static void ResetValueAndClearErrorsOnPasswordIfUnselected( EditCourseDetailsFormData formData, ModelStateDictionary modelState ) { if (formData.PasswordProtected) { return; } if (modelState.HasError(nameof(formData.Password))) { modelState.ClearErrorsOnField(nameof(formData.Password)); } formData.Password = null; }
public static void ValidateCustomisationName( EditCourseDetailsFormData formData, ModelStateDictionary modelState, ICourseService courseService, int centreId, int customisationId = 0 ) { formData.TrimCustomisationNameOrConvertToEmptyStringIfNull(); var courseExistsAtCentre = courseService.DoesCourseNameExistAtCentre( formData.CustomisationName !, centreId, formData.ApplicationId, customisationId ); if (string.IsNullOrEmpty(formData.CustomisationName) && courseExistsAtCentre) { modelState.AddModelError( nameof(formData.CustomisationName), "A course with no add-on already exists" ); } else if (string.IsNullOrEmpty(formData.CustomisationName)) { modelState.ClearErrorsOnField(nameof(formData.CustomisationName)); } else if (formData.CustomisationName.Length > 250) { modelState.AddModelError( nameof(formData.CustomisationName), "Course name must be 250 characters or fewer, including any additions" ); } else if (courseExistsAtCentre) { modelState.AddModelError( nameof(formData.CustomisationName), "Course name must be unique, including any additions" ); } }
private void ValidateCompletionCriteria(EditCourseDetailsFormData formData) { if (!formData.IsAssessed) { return; } if (ModelState.HasError(nameof(formData.TutCompletionThreshold))) { ModelState.ClearErrorsOnField(nameof(formData.TutCompletionThreshold)); } if (ModelState.HasError(nameof(formData.DiagCompletionThreshold))) { ModelState.ClearErrorsOnField(nameof(formData.DiagCompletionThreshold)); } formData.TutCompletionThreshold = "0"; formData.DiagCompletionThreshold = "0"; }
public IActionResult SaveCourseDetails( int customisationId, EditCourseDetailsFormData formData ) { var centreId = User.GetCentreId(); CourseDetailsValidator.ValidateCustomisationName( formData, ModelState, courseService, centreId, customisationId ); CourseDetailsValidator.ResetValueAndClearErrorsOnPasswordIfUnselected(formData, ModelState); CourseDetailsValidator.ResetValueAndClearErrorsOnEmailIfUnselected(formData, ModelState); CourseDetailsValidator.ResetValueAndClearErrorsOnOtherCompletionCriteriaIfUnselected(formData, ModelState); if (!ModelState.IsValid) { var model = new EditCourseDetailsViewModel(formData, customisationId); return(View("EditCourseDetails", model)); } var tutCompletionThreshold = formData.TutCompletionThreshold == null ? 0 : int.Parse(formData.TutCompletionThreshold); var diagCompletionThreshold = formData.DiagCompletionThreshold == null ? 0 : int.Parse(formData.DiagCompletionThreshold); courseService.UpdateCourseDetails( customisationId, formData.CustomisationName !, formData.Password !, formData.NotificationEmails !, formData.IsAssessed, tutCompletionThreshold, diagCompletionThreshold ); return(RedirectToAction("Index", new { customisationId })); }
private void ValidateCustomisationName( int customisationId, string customisationName, int centreId, EditCourseDetailsFormData formData ) { if (customisationName == string.Empty && courseService.DoesCourseNameExistAtCentre( customisationId, customisationName, centreId, formData.ApplicationId )) { ModelState.AddModelError( nameof(EditCourseDetailsViewModel.CustomisationName), "A course with no add on already exists" ); } else if (customisationName.Length > 250) { ModelState.AddModelError( nameof(EditCourseDetailsViewModel.CustomisationName), "Course name must be 250 characters or fewer, including any additions" ); } else if (courseService.DoesCourseNameExistAtCentre( customisationId, customisationName, centreId, formData.ApplicationId )) { ModelState.AddModelError( nameof(EditCourseDetailsViewModel.CustomisationName), "Course name must be unique, including any additions" ); } }
public IActionResult SaveCourseDetails( int customisationId, EditCourseDetailsFormData formData ) { var centreId = User.GetCentreId(); var customisationName = formData.CustomisationName == null || string.IsNullOrWhiteSpace(formData.CustomisationName) ? string.Empty : formData.CustomisationName; ValidateCustomisationName(customisationId, customisationName, centreId, formData); ValidatePassword(formData); ValidateEmail(formData); ValidateCompletionCriteria(formData); if (!ModelState.IsValid) { var model = new EditCourseDetailsViewModel(formData, customisationId); return(View("EditCourseDetails", model)); } var tutCompletionThreshold = formData.TutCompletionThreshold == null ? 0 : int.Parse(formData.TutCompletionThreshold); var diagCompletionThreshold = formData.DiagCompletionThreshold == null ? 0 : int.Parse(formData.DiagCompletionThreshold); courseService.UpdateCourseDetails( customisationId, customisationName, formData.Password !, formData.NotificationEmails !, formData.IsAssessed, tutCompletionThreshold, diagCompletionThreshold ); return(RedirectToAction("Index", new { customisationId })); }