Ejemplo n.º 1
0
        public void Inlet(User user, UserStateResult stateResult, UserFormSubmission formSubmission)
        {
            // If there is no submit button the user is not meant to answer prompts or hurry through.
            if (!AwaitingInput(user))
            {
                return;
            }

            // Set user to answering prompts state if they arent being hurried and their current prompt has a submit button.
            if (user.StatesTellingMeToHurry.Count == 0)
            {
                user.Status = UserStatus.AnsweringPrompts;
            }
            else
            {
                // TODO: May need to pass in prompt rather than getting from user.UserState but should be okay for now.
                HandleUserTimeout(user, UserFormSubmission.WithNulls(user.UserState?.UserRequestingCurrentPrompt(user)));
            }
        }
Ejemplo n.º 2
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);
        }