You are here

class QuizResultAnswerController in Quiz 7.5

Same name and namespace in other branches
  1. 7.6 includes/QuizResultAnswerController.class.inc \QuizResultAnswerController

Controller for a single quiz question response.

Hierarchy

Expanded class hierarchy of QuizResultAnswerController

1 string reference to 'QuizResultAnswerController'
quiz_entity_info in ./quiz.module
Implements hook_entity_info().

File

includes/QuizResultAnswerController.class.inc, line 6

View source
class QuizResultAnswerController extends EntityAPIController {

  /**
   * Build the response content with feedback.
   */
  public function buildContent($entity, $view_mode = 'full', $langcode = NULL, $content = array()) {
    $out = parent::buildContent($entity, $view_mode, $langcode, $content);
    $node = node_load($entity->question_nid, $entity->question_vid);
    $entity_info = entity_get_info('node');

    // @kludge
    // We check for an instance first. This is probably not the best way to do
    // this but we need to sometimes show feedback for an answer not stored.
    // For example when taking quizzes with "repeat until correct".
    if (!isset($entity->instance)) {
      $instance = _quiz_question_response_get_instance($entity->result_id, $node);
    }
    else {
      $instance = $entity->instance;
    }
    foreach ($entity_info['view modes'] as $view_mode => $info) {
      if ($instance
        ->canReview("quiz_question_view_" . $view_mode)) {
        $build = node_view($node, $view_mode);
        unset($build['#theme']);
        unset($build['answers']);
        unset($build['links']);
        $out["quiz_question_view_" . $view_mode] = $build;
      }
    }
    $rows = array();
    $labels = array(
      'attempt' => t('Your answer'),
      'choice' => t('Choice'),
      'correct' => t('Correct?'),
      'score' => t('Score'),
      'answer_feedback' => t('Feedback'),
      'solution' => t('Correct answer'),
    );
    drupal_alter('quiz_feedback_labels', $labels);
    foreach ($instance
      ->getFeedbackValues() as $idx => $row) {
      foreach ($labels as $reviewType => $label) {
        if (isset($row[$reviewType]) && $instance
          ->canReview($reviewType)) {
          $rows[$idx][$reviewType] = $row[$reviewType];
          if (!empty($row[$reviewType])) {
            $out[$reviewType] = array(
              '#title' => $label,
              '#type' => 'item',
              '#markup' => $row[$reviewType],
            );
          }
        }
      }
    }
    if ($instance
      ->isEvaluated()) {
      $score = $instance
        ->getScore();
      if ($instance
        ->isCorrect()) {
        $class = 'q-correct';
      }
      else {
        $class = 'q-wrong';
      }
    }
    else {
      $score = t('?');
      $class = 'q-waiting';
    }
    $quiz_result = quiz_result_load($entity->result_id);
    if ($instance
      ->canReview('score') || quiz_access_to_score($quiz_result)) {
      $out['score']['#title'] = '';
      $out['score']['#markup'] = theme('quiz_question_score', array(
        'score' => $score,
        'max_score' => $instance
          ->getMaxScore(),
        'class' => $class,
      ));
    }
    if ($rows) {
      $headers = array_intersect_key($labels, $rows[0]);
      $type = $instance
        ->getQuizQuestion()->node->type;
      $out['table']['#markup'] = theme('quiz_question_feedback__' . $type, array(
        'labels' => $headers,
        'data' => $rows,
      ));
    }
    if ($instance
      ->canReview('question_feedback')) {
      if ($properties = entity_load('quiz_question', FALSE, array(
        'nid' => $instance->quizQuestion->node->nid,
        'vid' => $instance->quizQuestion->node->vid,
      ))) {
        $quiz_question = reset($properties);
        $account = user_load($quiz_result->uid);
        $token_types = array(
          'global' => NULL,
          'node' => $instance->quizQuestion->node,
          'user' => $account,
        );
        $quiz_question->feedback = token_replace($quiz_question->feedback, $token_types);
        $out['question_feedback']['#markup'] = check_markup($quiz_question->feedback, $quiz_question->feedback_format);
      }
    }
    if ($instance
      ->canReview('score')) {
      $out['max_score'] = array(
        '#type' => 'value',
        '#value' => $instance
          ->getMaxScore(),
      );
    }
    return $out;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DrupalDefaultEntityController::$cache protected property Whether this entity type should use the static cache.
DrupalDefaultEntityController::$entityCache protected property Static cache of entities, keyed by entity ID.
DrupalDefaultEntityController::$entityInfo protected property Array of information about the entity.
DrupalDefaultEntityController::$entityType protected property Entity type for this controller instance.
DrupalDefaultEntityController::$hookLoadArguments protected property Additional arguments to pass to hook_TYPE_load().
DrupalDefaultEntityController::$idKey protected property Name of the entity's ID field in the entity database table.
DrupalDefaultEntityController::$revisionKey protected property Name of entity's revision database table field, if it supports revisions.
DrupalDefaultEntityController::$revisionTable protected property The table that stores revisions, if the entity supports revisions.
DrupalDefaultEntityController::attachLoad protected function Attaches data to entities upon loading. 4
DrupalDefaultEntityController::cacheGet protected function Gets entities from the static cache. 1
DrupalDefaultEntityController::cacheSet protected function Stores entities in the static entity cache.
DrupalDefaultEntityController::cleanIds protected function Ensures integer entity IDs are valid.
DrupalDefaultEntityController::filterId protected function Callback for array_filter that removes non-integer IDs.
EntityAPIController::$bundleKey protected property
EntityAPIController::$cacheComplete protected property
EntityAPIController::$defaultRevisionKey protected property
EntityAPIController::buildQuery protected function Overrides DrupalDefaultEntityController::buildQuery(). Overrides DrupalDefaultEntityController::buildQuery 1
EntityAPIController::create public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::create
EntityAPIController::delete public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::delete 1
EntityAPIController::deleteRevision public function Implements EntityAPIControllerRevisionableInterface::deleteRevision(). Overrides EntityAPIControllerRevisionableInterface::deleteRevision
EntityAPIController::export public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::export 1
EntityAPIController::import public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::import
EntityAPIController::invoke public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::invoke 1
EntityAPIController::load public function Overridden. Overrides DrupalDefaultEntityController::load 1
EntityAPIController::query public function Builds and executes the query for loading.
EntityAPIController::renderEntityProperty protected function Renders a single entity property.
EntityAPIController::resetCache public function Overrides DrupalDefaultEntityController::resetCache(). Overrides DrupalDefaultEntityController::resetCache 1
EntityAPIController::save public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::save 1
EntityAPIController::saveRevision protected function Saves an entity revision.
EntityAPIController::view public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::view 1
EntityAPIController::__construct public function Overridden. Overrides DrupalDefaultEntityController::__construct 1
QuizResultAnswerController::buildContent public function Build the response content with feedback. Overrides EntityAPIController::buildContent