diff core/modules/tour/src/TourViewBuilder.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/tour/src/TourViewBuilder.php	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,75 @@
+<?php
+
+namespace Drupal\tour;
+
+use Drupal\Core\Entity\EntityViewBuilder;
+use Drupal\Component\Utility\Html;
+
+/**
+ * Provides a Tour view builder.
+ */
+class TourViewBuilder extends EntityViewBuilder {
+
+  /**
+   * {@inheritdoc}
+   */
+  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;
+  }
+
+}