コード例 #1
0
        public static bool Validate_Drawing(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForDrawing = prompt.Drawing != null;
            bool providedDrawing    = !string.IsNullOrWhiteSpace(subForm.Drawing);

            return(promptedForDrawing == providedDrawing);
        }
コード例 #2
0
        public static bool Validate_ColorPicker(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForColorPicker = prompt.ColorPicker;
            bool providedColorPicker    = !string.IsNullOrWhiteSpace(subForm.Color);

            return(promptedForColorPicker == providedColorPicker);
        }
コード例 #3
0
        public static bool Validate_ShortAnswer(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForShortAnswer = prompt.ShortAnswer;
            bool providedShortAnswer    = !string.IsNullOrWhiteSpace(subForm.ShortAnswer);

            return(promptedForShortAnswer == providedShortAnswer);
        }
コード例 #4
0
        public static bool Validate_Dropdown(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForDropdown = prompt.Dropdown != null;
            bool providedDropdown    = subForm.DropdownChoice.HasValue;
            bool validSubmission     = !providedDropdown || (subForm.DropdownChoice.Value >= 0 && subForm.DropdownChoice.Value < prompt.Dropdown.Length);

            return((promptedForDropdown == providedDropdown) && validSubmission);
        }
コード例 #5
0
        public static bool Validate_Selector(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForSelector = prompt.Selector != null;
            bool providedSelector    = subForm.Selector.HasValue;
            bool submissionValid     = !providedSelector || (subForm.Selector.Value >= 0 && subForm.Selector.Value < (prompt.Selector?.ImageList?.Length ?? 0));

            return((promptedForSelector == providedSelector) && submissionValid);
        }
コード例 #6
0
        public static bool Validate_Answers(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForAnswers = prompt.Answers != null;
            bool providedAnswers    = subForm.RadioAnswer.HasValue;
            bool submissionValid    = !providedAnswers || (subForm.RadioAnswer.Value >= 0 && subForm.RadioAnswer.Value < prompt.Answers.Length);

            return((promptedForAnswers == providedAnswers) && submissionValid);
        }
コード例 #7
0
        public static bool Validate_Slider(SubPrompt prompt, UserSubForm subForm)
        {
            bool promptedForSlider = prompt.Slider != null;
            bool providedSlider    = subForm.Slider != null;

            if (!promptedForSlider || !providedSlider)
            {
                return(promptedForSlider == providedSlider);
            }

            bool validSubmission = true;

            // Range sliders should have a list of length 2 (min, max). Nonrange sliders should only have one value.
            validSubmission &= (subForm.Slider.Count == (prompt.Slider.Range ? 2 : 1));
            validSubmission &= subForm.Slider.All(val => (val >= prompt.Slider.Min) && (val <= prompt.Slider.Max));
            validSubmission &= subForm.Slider.Count == 1 || (subForm.Slider[0] <= subForm.Slider[1]);

            return(validSubmission);
        }
コード例 #8
0
 public abstract T AnswerExtractor(UserSubForm subForm);
コード例 #9
0
        public static CleanUserFormInputResult CleanUserFormInput(UserPrompt userPrompt, ref UserFormSubmission userInput, out string error)
        {
            // No data submitted / requested
            if (userInput == null || userPrompt == null)
            {
                error     = "Try again or try refreshing the page.";
                userInput = UserFormSubmission.WithNulls(userPrompt);
                return(CleanUserFormInputResult.Invalid);
            }

            // Old data submitted.
            if (userInput.Id != userPrompt.Id)
            {
                error     = "Outdated form submitted, try again or try refreshing the page.";
                userInput = UserFormSubmission.WithNulls(userPrompt);
                return(CleanUserFormInputResult.Invalid);
            }

            // No prompts requested.
            if (userPrompt?.SubPrompts == null || userPrompt.SubPrompts.Length == 0)
            {
                userInput = UserFormSubmission.WithNulls(userPrompt);
                error     = "";
                return(CleanUserFormInputResult.Valid);
            }

            if (userInput?.SubForms == null || (userPrompt.SubPrompts.Length != userInput.SubForms.Count))
            {
                error     = "Error in submission, try again or try refreshing the page.";
                userInput = UserFormSubmission.WithNulls(userPrompt);
                return(CleanUserFormInputResult.Invalid);
            }

            int i = 0;
            CleanUserFormInputResult result = CleanUserFormInputResult.Valid;

            error = string.Empty;
            foreach (SubPrompt prompt in userPrompt?.SubPrompts ?? new SubPrompt[0])
            {
                UserSubForm subForm = userInput.SubForms[i];
                if (!(PromptInputValidation.Validate_Drawing(prompt, subForm) &&
                      PromptInputValidation.Validate_ShortAnswer(prompt, subForm) &&
                      PromptInputValidation.Validate_ColorPicker(prompt, subForm) &&
                      PromptInputValidation.Validate_Answers(prompt, subForm) &&
                      PromptInputValidation.Validate_Selector(prompt, subForm) &&
                      PromptInputValidation.Validate_Dropdown(prompt, subForm) &&
                      PromptInputValidation.Validate_Slider(prompt, subForm)))
                {
                    error  = "Not all form fields have been filled out";
                    result = CleanUserFormInputResult.Cleaned;

                    // Invalid fields get set to null (used in autosubmit partial submission flows).
                    userInput.SubForms[i] = new UserSubForm()
                    {
                        Id = prompt.Id
                    };
                }

                i++;
            }

            return(result);
        }