LLMS_AJAX_Handler::quiz_answer_question( array $request )
AJAX Quiz answer question.
Parameters Parameters
- $request
-
(array) (Required) $_POST data.
Return Return
(WP_Error|string)
Source Source
File: includes/class.llms.ajax.handler.php
* @param array $request $_POST data. * @return WP_Error|string */ public static function quiz_answer_question( $request ) { $err = new WP_Error(); $student = llms_get_student(); if ( ! $student ) { $err->add( 400, __( 'You must be logged in to take quizzes.', 'lifterlms' ) ); return $err; } $required = array( 'attempt_key', 'question_id', 'question_type' ); foreach ( $required as $key ) { if ( ! isset( $request[ $key ] ) ) { $err->add( 400, __( 'Missing required parameters. Could not proceed.', 'lifterlms' ) ); return $err; } } $attempt_key = sanitize_text_field( $request['attempt_key'] ); $question_id = absint( $request['question_id'] ); $answer = array_map( 'stripslashes_deep', isset( $request['answer'] ) ? $request['answer'] : array() ); $student_quizzes = $student->quizzes(); $attempt = $student_quizzes->get_attempt_by_key( $attempt_key ); if ( ! $attempt ) { $err->add( 500, __( 'There was an error recording your answer. Please return to the lesson and begin again.', 'lifterlms' ) ); return $err; } /** * Check limit not reached. * * First check whether the quiz is open (so to leverage the `llms_quiz_is_open` filter ), * if not, check also for remaining attempts. * * At this point the current attempt has already been counted (maybe the last allowed), * so we check that the remaining attempt is just greater than -1. */ $quiz_id = $attempt->get( 'quiz_id' ); if ( ! ( new LLMS_Quiz( $quiz_id ) )->is_open() && $student_quizzes->get_attempts_remaining_for_quiz( $quiz_id, true ) < 0 ) { $err->add( 400, __( "You've reached the maximum number of attempts for this quiz.", 'lifterlms' ) ); return $err; } // record the answer. $attempt->answer_question( $question_id, $answer ); // get the next question. $question_id = $attempt->get_next_question( $question_id ); // return html for the next question. if ( $question_id ) { $html = llms_get_template_ajax( 'content-single-question.php', array( 'attempt' => $attempt, 'question' => llms_get_post( $question_id ), ) ); return array( 'html' => $html, 'question_id' => $question_id, ); } else { return self::quiz_end( $request, $attempt );
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
6.4.0 | Make sure attempts limit was not reached. |
3.9.0 | |
3.27.0 | Introduced. |