You are here

class QuizViewBuilder in Quiz 8.6

Same name and namespace in other branches
  1. 8.5 src/View/QuizViewBuilder.php \Drupal\quiz\View\QuizViewBuilder
  2. 6.x src/View/QuizViewBuilder.php \Drupal\quiz\View\QuizViewBuilder

Hierarchy

Expanded class hierarchy of QuizViewBuilder

File

src/View/QuizViewBuilder.php, line 11

Namespace

Drupal\quiz\View
View source
class QuizViewBuilder extends EntityViewBuilder {
  public function alterBuild(array &$build, Drupal\Core\Entity\EntityInterface $entity, Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) {

    /* @var $entity Quiz */
    $stats = array(
      array(
        array(
          'header' => TRUE,
          'width' => '25%',
          'data' => t('Questions'),
        ),
        $entity
          ->getNumberOfQuestions(),
      ),
    );
    if ($entity
      ->get('show_attempt_stats')
      ->getString()) {
      $takes = $entity
        ->get('takes')
        ->getString() == 0 ? t('Unlimited') : $entity
        ->get('takes')
        ->getString();
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Attempts allowed'),
        ),
        $takes,
      );
    }
    if ($entity
      ->get('quiz_date')
      ->isEmpty()) {
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Available'),
        ),
        t('Always'),
      );
    }
    else {
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Opens'),
        ),
        $entity
          ->get('quiz_date')->value,
      );
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Closes'),
        ),
        $entity
          ->get('quiz_date')->end_value,
      );
    }
    if (!$entity
      ->get('pass_rate')
      ->isEmpty()) {
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Pass rate'),
        ),
        $entity
          ->get('pass_rate')
          ->getString() . ' %',
      );
    }
    if (!$entity
      ->get('time_limit')
      ->isEmpty()) {
      $stats[] = array(
        array(
          'header' => TRUE,
          'data' => t('Time limit'),
        ),
        _quiz_format_duration($entity
          ->get('time_limit')
          ->getString()),
      );
    }
    $stats[] = array(
      array(
        'header' => TRUE,
        'data' => t('Backwards navigation'),
      ),
      $entity
        ->get('backwards_navigation') ? t('Allowed') : t('Forbidden'),
    );
    if ($display
      ->getComponent('stats')) {
      $build['stats'] = array(
        '#id' => 'quiz-view-table',
        '#theme' => 'table',
        '#rows' => $stats,
        '#weight' => -1,
      );
    }
    $available = $entity
      ->access('take', NULL, TRUE);

    // Check the permission before displaying start button.
    if ($available
      ->isAllowed()) {
      if (is_a($available, \Drupal\Core\Access\AccessResultReasonInterface::class)) {

        // There's a friendly success message available. Only display if we are
        // viewing the quiz.
        // @todo does not work because we cannot pass allowed reason, only
        // forbidden reason. The message is displayed in quiz_quiz_access().
        if (\Drupal::routeMatch() == 'entity.quiz.canonical') {
          Drupal::messenger()
            ->addMessage($available
            ->getReason());
        }
      }

      // Add a link to the take tab.
      $link = Drupal\Core\Link::createFromRoute(t('Start @quiz', array(
        '@quiz' => _quiz_get_quiz_name(),
      )), 'entity.quiz.take', [
        'quiz' => $entity
          ->id(),
      ], [
        'attributes' => [
          'class' => array(
            'quiz-start-link',
          ),
        ],
      ]);
      $build['take'] = array(
        '#cache' => [
          'max-age' => 0,
        ],
        '#markup' => $link
          ->toString(),
        '#weight' => 2,
      );
    }
    else {
      $build['take'] = array(
        '#cache' => [
          'max-age' => 0,
        ],
        '#markup' => '<div class="quiz-not-available">' . $available
          ->getReason() . '</div>',
        '#weight' => 2,
      );
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
DeprecatedServicePropertyTrait::__get public function Allows to access deprecated/removed properties.
EntityHandlerBase::$moduleHandler protected property The module handler to invoke hooks on. 2
EntityHandlerBase::moduleHandler protected function Gets the module handler. 2
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::$deprecatedProperties protected property
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 6
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 2
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
QuizViewBuilder::alterBuild public function Specific per-entity building. Overrides EntityViewBuilder::alterBuild
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
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.