LLMS_Question::grade( array[] $answer )
Attempt to grade a question
Parameters Parameters
- $answer
-
(array[]) (Required) Selected answer(s).
Return Return
(string|null) Returns null
if the question cannot be automatically graded. Returns yes
for correct answers and no
for incorrect answers.
Source Source
File: includes/models/model.llms.question.php
* @param array[] $answer Selected answer(s). * @return string|null Returns `null` if the question cannot be automatically graded. * Returns `yes` for correct answers and `no` for incorrect answers. */ public function grade( $answer ) { $question_type = $this->get( 'question_type' ); /** * Use this filter to bypass core grading for a given question type. * * If the filter returns a non-null value core grading is bypassed. * * The dynamic portion of this hook, `$question_type`, refers to the type of question being graded. * * @since 3.16.0 * * @param null|string $grade Defaults to `null` which signifies that LifterLMS should attempt to grade the answer. * Return `yes` (correct) or `no` (incorrect) to bypass core grading methods. * @param string[] $answer User-submitted answers. * @param LLMS_Question $question Question object. */ $grade = apply_filters( "llms_{$question_type}_question_pre_grade", null, $answer, $this ); if ( is_null( $grade ) && $this->get( 'points' ) >= 1 ) { $grading_type = $this->get_auto_grade_type(); if ( 'choices' === $grading_type ) { sort( $answer ); $grade = ( $answer === $this->get_correct_choice() ) ? 'yes' : 'no'; } elseif ( 'conditional' === $grading_type ) { $correct = $this->get_conditional_correct_value(); /** * Filter whether or not conditionally graded question answers are treated as a case-sensitive * * By default, case sensitivity is disabled. * * @since 3.16.15 * * @param boolean $case_sensitive Whether or not answers are treated as case-sensitive. * @param string[] $answer User-submitted answers. * @param string[] $correct Correct answers. * @param LLMS_Question $question Question object. */ if ( false === apply_filters( 'llms_quiz_grading_case_sensitive', false, $answer, $correct, $this ) ) { $answer = array_map( 'strtolower', $answer ); $correct = array_map( 'strtolower', $correct ); } $grade = ( $answer === $correct ) ? 'yes' : 'no'; } } /** * Filter the grading result of an answer for a given question type. * * The dynamic portion of this hook, `$question_type`, refers to the type of question being graded. * * @since 3.16.0 * * @param null|string $grade Defaults to `null` which signifies that LifterLMS should attempt to grade the answer. * Return `yes` (correct) or `no` (incorrect) to bypass core grading methods. * @param string[] $answer User-submitted answers. * @param LLMS_Question $question Question object.
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
4.4.0 | Combined nested if statements into a single condition. |
3.16.15 | Unknown. |
3.16.0 | Introduced. |