You are here

public function TourViewBuilder::viewMultiple in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/tour/src/TourViewBuilder.php \Drupal\tour\TourViewBuilder::viewMultiple()

Builds the render array for the provided entities.

Parameters

array $entities: An array of entities implementing EntityInterface to view.

string $view_mode: (optional) The view mode that should be used to render the entity.

string $langcode: (optional) For which language the entity should be rendered, defaults to the current content language.

Return value

A render array for the entities, indexed by the same keys as the entities array passed in $entities.

Throws

\InvalidArgumentException Can be thrown when the set of parameters is inconsistent, like when trying to view Comments and passing a Node which is not the one the comments belongs to, or not passing one, and having the comments node not be available for loading.

Overrides EntityViewBuilder::viewMultiple

File

core/modules/tour/src/TourViewBuilder.php, line 16

Class

TourViewBuilder
Provides a Tour view builder.

Namespace

Drupal\tour

Code

public function viewMultiple(array $entities = [], $view_mode = 'full', $langcode = NULL) {

  /** @var \Drupal\tour\TourInterface[] $entities */
  $build = [];
  foreach ($entities as $entity_id => $entity) {
    $tips = $entity
      ->getTips();
    $count = count($tips);
    $list_items = [];
    foreach ($tips as $index => $tip) {
      if ($output = $tip
        ->getOutput()) {
        $attributes = [
          'class' => [
            'tip-module-' . Html::cleanCssIdentifier($entity
              ->getModule()),
            'tip-type-' . Html::cleanCssIdentifier($tip
              ->getPluginId()),
            'tip-' . Html::cleanCssIdentifier($tip
              ->id()),
          ],
        ];
        $list_items[] = [
          'output' => $output,
          'counter' => [
            '#type' => 'container',
            '#attributes' => [
              'class' => [
                'tour-progress',
              ],
            ],
            '#children' => t('@tour_item of @total', [
              '@tour_item' => $index + 1,
              '@total' => $count,
            ]),
          ],
          '#wrapper_attributes' => $tip
            ->getAttributes() + $attributes,
        ];
      }
    }

    // If there is at least one tour item, build the tour.
    if ($list_items) {
      end($list_items);
      $key = key($list_items);
      $list_items[$key]['#wrapper_attributes']['data-text'] = t('End tour');
      $build[$entity_id] = [
        '#theme' => 'item_list',
        '#items' => $list_items,
        '#list_type' => 'ol',
        '#attributes' => [
          'id' => 'tour',
          'class' => [
            'hidden',
          ],
        ],
        '#cache' => [
          'tags' => $entity
            ->getCacheTags(),
        ],
      ];
    }
  }

  // If at least one tour was built, attach the tour library.
  if ($build) {
    $build['#attached']['library'][] = 'tour/tour';
  }
  return $build;
}