You are here

interface QuizAnswerInterface in Quiz 6.x

Provides an interface for quiz answers.

Each question type must store its own answer data and be able to calculate a score for that data.

Hierarchy

Expanded class hierarchy of QuizAnswerInterface

All classes that implement QuizAnswerInterface

1 file declares its use of QuizAnswerInterface
QuizResultAnswer.php in src/Entity/QuizResultAnswer.php

File

src/QuizAnswerInterface.php, line 15

Namespace

Drupal\quiz
View source
interface QuizAnswerInterface {

  /**
   * Get the question of this question answer.
   *
   * @return \Drupal\quiz\Entity\QuizQuestion
   */
  public function getQuizQuestion() : QuizQuestion;

  /**
   * Get the result of this question response.
   *
   * @return \Drupal\quiz\Entity\QuizResult
   */
  public function getQuizResult() : QuizResult;

  /**
   * Indicate whether the response has been evaluated (scored) yet.
   *
   * Questions that require human scoring (e.g. essays) may need to manually
   * toggle this.
   *
   * @return bool
   */
  public function isEvaluated() : bool;

  /**
   * Check to see if the answer is marked as correct.
   *
   * This default version returns TRUE if the score is equal to the maximum
   * possible score. Each question type can determine on its own if the question
   * response is "correct". For example a multiple choice question with 4
   * correct answers could be considered correct in different configurations.
   *
   * @return bool
   */
  public function isCorrect() : bool;

  /**
   * Get the scaled awarded points.
   *
   * @return int
   *   The user's scaled awarded points for this question.
   */
  public function getPoints() : int;

  /**
   * Get the related question relationship from this quiz result answer.
   *
   * @return \Drupal\quiz\Entity\QuizQuestionRelationship|NULL
   */
  public function getQuestionRelationship() : ?QuizQuestionRelationship;

  /**
   * Get the weighted max score of this question response. This is the score
   * that is entered on the manage questions screen. For example if a multiple
   * choice question is worth 4 points, but 8 points are entered on the manage
   * questions screen, 8 points is returned here.
   *
   * @return int
   *   The weighted max score of this question response.
   */
  public function getMaxScore() : int;

  /**
   * Creates the report form for the admin pages.
   *
   * @return array
   *   An renderable FAPI array
   */
  public function getReportForm() : array;

  /**
   * Get the response part of the report form.
   *
   * @return array
   *   Array of response data, with each item being an answer to a response. For
   *   an example, see MultichoiceResponse::getFeedbackValues(). The sub items
   *   are keyed by the feedback type. Providing a NULL option means that
   *   feedback will not be shown. See an example at
   *   LongAnswerResponse::getFeedbackValues().
   */
  public function getFeedbackValues() : array;

  /**
   * Calculate the unscaled score in points for this question response.
   *
   * @param array $values
   *   A part of form state values with the question input from the user.
   *
   * @return int|NULL
   *   The unscaled point value of the answer. If a point value is final,
   *   questions should make sure to run setEvaluated(). return NULL if the
   *   answer is not automatically scored.
   */
  public function score(array $values) : ?int;

  /**
   * Get the user's response.
   *
   * @return mixed
   *   The answer given by the user
   */
  public function getResponse();

  /**
   * Can the quiz taker view the requested review?
   *
   * @param string $option
   *   An option key.
   *
   * @return bool
   */
  public function canReview(string $option) : bool;

  /**
   * Get the weighted score ratio.
   *
   * This returns the ratio of the weighted score of this question versus the
   * question score. For example, if the question is worth 10 points in the
   * associated quiz, but it is a 3 point multichoice question, the weighted
   * ratio is 3.33.
   *
   * This is marked as final to make sure that no question overrides this and
   * causes reporting issues.
   *
   * @return float|int
   *   The weight of the question
   */
  public function getWeightedRatio();

  /**
   * Indicate whether the response has been evaluated (scored) yet.
   *
   * Questions that require human scoring (e.g. essays) may need to manually
   * toggle this.
   *
   * @return bool
   */
  public function isAnswered() : bool;

  /**
   * Indicate if the question was marked as skipped.
   *
   * @return bool
   */
  public function isSkipped() : bool;

  /**
   * Set the answer to evaluated, if the point value is final and does not
   * require instructor action.
   *
   * @param bool $evaluated
   *   If the answer is evaluated.
   *
   * @return $this
   */
  public function setEvaluated($evaluated = TRUE);

  /**
   * Get answers for a question in a result.
   *
   * This static method assists in building views for the mass export of
   * question answers.
   *
   * It is not as easy as instantiating all the question responses and returning
   * the answer. To do this in views at scale we have to gather the data
   * carefully.
   *
   * This base method provides a very poor way of gathering the data.
   *
   * @see views_handler_field_prerender_list for the expected return value.
   *
   * @see MultichoiceResponse::viewsGetAnswers() for a correct approach
   * @see TrueFalseResponse::viewsGetAnswers() for a correct approach
   */
  public static function viewsGetAnswers(array $result_answer_ids = []) : array;

}

Members

Namesort descending Modifiers Type Description Overrides
QuizAnswerInterface::canReview public function Can the quiz taker view the requested review?
QuizAnswerInterface::getFeedbackValues public function Get the response part of the report form.
QuizAnswerInterface::getMaxScore public function Get the weighted max score of this question response. This is the score that is entered on the manage questions screen. For example if a multiple choice question is worth 4 points, but 8 points are entered on the manage questions screen, 8 points is…
QuizAnswerInterface::getPoints public function Get the scaled awarded points.
QuizAnswerInterface::getQuestionRelationship public function Get the related question relationship from this quiz result answer.
QuizAnswerInterface::getQuizQuestion public function Get the question of this question answer.
QuizAnswerInterface::getQuizResult public function Get the result of this question response.
QuizAnswerInterface::getReportForm public function Creates the report form for the admin pages.
QuizAnswerInterface::getResponse public function Get the user's response. 8
QuizAnswerInterface::getWeightedRatio public function Get the weighted score ratio.
QuizAnswerInterface::isAnswered public function Indicate whether the response has been evaluated (scored) yet.
QuizAnswerInterface::isCorrect public function Check to see if the answer is marked as correct.
QuizAnswerInterface::isEvaluated public function Indicate whether the response has been evaluated (scored) yet.
QuizAnswerInterface::isSkipped public function Indicate if the question was marked as skipped.
QuizAnswerInterface::score public function Calculate the unscaled score in points for this question response. 8
QuizAnswerInterface::setEvaluated public function Set the answer to evaluated, if the point value is final and does not require instructor action.
QuizAnswerInterface::viewsGetAnswers public static function Get answers for a question in a result.