You are here

class QuizResultAnswerViewBuilder in Quiz 6.x

Same name and namespace in other branches
  1. 8.6 src/View/QuizResultAnswerViewBuilder.php \Drupal\quiz\View\QuizResultAnswerViewBuilder
  2. 8.5 src/View/QuizResultAnswerViewBuilder.php \Drupal\quiz\View\QuizResultAnswerViewBuilder

Hierarchy

Expanded class hierarchy of QuizResultAnswerViewBuilder

File

src/View/QuizResultAnswerViewBuilder.php, line 14

Namespace

Drupal\quiz\View
View source
class QuizResultAnswerViewBuilder extends EntityViewBuilder {

  /**
   * Build the response content with feedback.
   *
   * @todo d8 putting this here, but needs to be somewhere else.
   */
  public function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {

    // Add the question display if configured.
    $view_modes = \Drupal::service('entity_display.repository')
      ->getViewModes('quiz_question');
    $view_builder = Drupal::entityTypeManager()
      ->getViewBuilder('quiz_question');
    if ($entity
      ->canReview("quiz_question_view_full")) {

      // Default view mode.
      $build["quiz_question_view_full"] = $view_builder
        ->view($entity
        ->getQuizQuestion());
    }
    foreach (array_keys($view_modes) as $view_mode) {

      // Custom view modes.
      if ($entity
        ->canReview("quiz_question_view_" . $view_mode)) {
        $build["quiz_question_view_" . $view_mode] = $view_builder
          ->view($entity
          ->getQuizQuestion(), $view_mode);
      }
    }
    $rows = [];
    $labels = [
      'attempt' => t('Your answer'),
      'choice' => t('Choice'),
      'correct' => t('Correct?'),
      'score' => t('Score'),
      'answer_feedback' => t('Feedback'),
      'solution' => t('Correct answer'),
    ];
    Drupal::moduleHandler()
      ->alter('quiz_feedback_labels', $labels);
    foreach ($entity
      ->getFeedbackValues() as $idx => $row) {
      foreach ($labels as $reviewType => $label) {
        if (isset($row[$reviewType]) && $entity
          ->canReview($reviewType)) {

          // Add to table.
          if (!is_null($row[$reviewType])) {
            $rows[$idx][$reviewType]['data'] = $row[$reviewType];

            // Add to render.
            if ($display
              ->getComponent($reviewType)) {
              $build[$reviewType] = [
                '#title' => $label,
                '#type' => 'item',
                '#markup' => render($row[$reviewType]),
              ];
            }
          }
        }
      }
    }
    if ($entity
      ->isEvaluated()) {
      $score = $entity
        ->getPoints();
      if ($entity
        ->isCorrect()) {
        $class = 'q-correct';
      }
      else {
        $class = 'q-wrong';
      }
    }
    else {
      $score = t('?');
      $class = 'q-waiting';
    }
    $quiz_result = QuizResult::load($entity
      ->get('result_id')
      ->getString());
    if ($entity
      ->canReview('score') || $quiz_result
      ->access('update')) {
      $build['score']['#theme'] = 'quiz_question_score';
      $build['score']['#score'] = $score;
      $build['score']['#max_score'] = $entity
        ->getMaxScore();
      $build['score']['#class'] = $class;
    }
    if ($rows) {
      $headers = array_intersect_key($labels, $rows[0]);
      $build['table'] = [
        '#type' => 'table',
        '#header' => $headers,
        '#rows' => $rows,
      ];
    }
    if ($entity
      ->canReview('question_feedback')) {
      $account = $quiz_result
        ->get('uid')
        ->referencedEntities()[0];
      $token_data = [
        'global' => NULL,
        'quiz_question' => $entity
          ->getQuizQuestion(),
        'user' => $account,
      ];
      $feedback = Drupal::token()
        ->replace($entity
        ->getQuizQuestion()
        ->get('feedback')
        ->first()
        ->getValue()['value'], $token_data);
      $build['question_feedback']['#markup'] = check_markup($feedback, $entity
        ->getQuizQuestion()
        ->get('feedback')
        ->first()
        ->getValue()['format']);
    }

    // Question feedback is dynamic.
    $build['#cache']['max-age'] = 0;
    return $build;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
EntityHandlerBase::$moduleHandler protected property The module handler to invoke hooks on. 5
EntityHandlerBase::moduleHandler protected function Gets the module handler. 5
EntityHandlerBase::setModuleHandler public function Sets the module handler for this handler.
EntityViewBuilder::$cacheBin protected property The cache bin used to store the render cache.
EntityViewBuilder::$entityDisplayRepository protected property The entity display repository.
EntityViewBuilder::$entityRepository protected property The entity repository service.
EntityViewBuilder::$entityType protected property Information about the entity type.
EntityViewBuilder::$entityTypeId protected property The type of entities for which this view builder is instantiated.
EntityViewBuilder::$languageManager protected property The language manager.
EntityViewBuilder::$singleFieldDisplays protected property The EntityViewDisplay objects created for individual field rendering.
EntityViewBuilder::$themeRegistry protected property The theme registry.
EntityViewBuilder::addContextualLinks protected function Add contextual links.
EntityViewBuilder::build public function Builds an entity's view; augments entity defaults.
EntityViewBuilder::buildComponents public function Builds the component fields and properties of a set of entities. Overrides EntityViewBuilderInterface::buildComponents 7
EntityViewBuilder::buildMultiple public function Builds multiple entities' views; augments entity defaults.
EntityViewBuilder::createInstance public static function Instantiates a new instance of this entity handler. Overrides EntityHandlerInterface::createInstance 3
EntityViewBuilder::getBuildDefaults protected function Provides entity-specific defaults to the build process. 4
EntityViewBuilder::getCacheTags public function The cache tag associated with this entity view builder. Overrides EntityViewBuilderInterface::getCacheTags
EntityViewBuilder::getSingleFieldDisplay protected function Gets an EntityViewDisplay for rendering an individual field.
EntityViewBuilder::isViewModeCacheable protected function Determines whether the view mode is cacheable.
EntityViewBuilder::resetCache public function Resets the entity render cache. Overrides EntityViewBuilderInterface::resetCache
EntityViewBuilder::trustedCallbacks public static function Lists the trusted callbacks provided by the implementing class. Overrides TrustedCallbackInterface::trustedCallbacks 2
EntityViewBuilder::view public function Builds the render array for the provided entity. Overrides EntityViewBuilderInterface::view 4
EntityViewBuilder::viewField public function Builds a renderable array for the value of a single field in an entity. Overrides EntityViewBuilderInterface::viewField
EntityViewBuilder::viewFieldItem public function Builds a renderable array for a single field item. Overrides EntityViewBuilderInterface::viewFieldItem
EntityViewBuilder::viewMultiple public function Builds the render array for the provided entities. Overrides EntityViewBuilderInterface::viewMultiple 4
EntityViewBuilder::__construct public function Constructs a new EntityViewBuilder. 2
QuizResultAnswerViewBuilder::alterBuild public function Build the response content with feedback. Overrides EntityViewBuilder::alterBuild
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TrustedCallbackInterface::THROW_EXCEPTION constant Untrusted callbacks throw exceptions.
TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION constant Untrusted callbacks trigger silenced E_USER_DEPRECATION errors.
TrustedCallbackInterface::TRIGGER_WARNING constant Untrusted callbacks trigger E_USER_WARNING errors.