コード例 #1
0
        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
                       ));
        }
コード例 #2
0
        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";
        }
コード例 #3
0
        private void ValidateEmail(EditCourseDetailsFormData formData)
        {
            if (formData.ReceiveNotificationEmails)
            {
                return;
            }

            if (ModelState.HasError(nameof(formData.NotificationEmails)))
            {
                ModelState.ClearErrorsOnField(nameof(formData.NotificationEmails));
            }

            formData.NotificationEmails = null;
        }
コード例 #4
0
        private void ValidatePassword(EditCourseDetailsFormData formData)
        {
            if (formData.PasswordProtected)
            {
                return;
            }

            if (ModelState.HasError(nameof(formData.Password)))
            {
                ModelState.ClearErrorsOnField(nameof(formData.Password));
            }

            formData.Password = null;
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        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"
                    );
            }
        }
コード例 #8
0
        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";
        }
コード例 #9
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 }));
        }
コード例 #10
0
 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"
             );
     }
 }
コード例 #11
0
        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 }));
        }