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
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 | * @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. |