diff core/modules/views/views.tokens.inc @ 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/views/views.tokens.inc	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,140 @@
+<?php
+
+/**
+ * @file
+ * Token integration for the views module.
+ */
+
+use Drupal\Core\Render\BubbleableMetadata;
+
+/**
+ * Implements hook_token_info().
+ */
+function views_token_info() {
+  $info['types']['view'] = [
+    'name' => t('View', [], ['context' => 'View entity type']),
+    'description' => t('Tokens related to views.'),
+    'needs-data' => 'view',
+  ];
+  $info['tokens']['view']['label'] = [
+    'name' => t('Label'),
+    'description' => t('The label of the view.'),
+  ];
+  $info['tokens']['view']['description'] = [
+    'name' => t('Description'),
+    'description' => t('The description of the view.'),
+  ];
+  $info['tokens']['view']['id'] = [
+    'name' => t('ID'),
+    'description' => t('The machine-readable ID of the view.'),
+  ];
+  $info['tokens']['view']['title'] = [
+    'name' => t('Title'),
+    'description' => t('The title of current display of the view.'),
+  ];
+  $info['tokens']['view']['url'] = [
+    'name' => t('URL'),
+    'description' => t('The URL of the view.'),
+    'type' => 'url',
+  ];
+  $info['tokens']['view']['base-table'] = [
+    'name' => t('Base table'),
+    'description' => t('The base table used for this view.'),
+  ];
+  $info['tokens']['view']['base-field'] = [
+    'name' => t('Base field'),
+    'description' => t('The base field used for this view.'),
+  ];
+  $info['tokens']['view']['total-rows'] = [
+    'name' => t('Total rows'),
+    'description' => t('The total amount of results returned from the view. The current display will be used.'),
+  ];
+  $info['tokens']['view']['items-per-page'] = [
+    'name' => t('Items per page'),
+    'description' => t('The number of items per page.'),
+  ];
+  $info['tokens']['view']['current-page'] = [
+    'name' => t('Current page'),
+    'description' => t('The current page of results the view is on.'),
+  ];
+  $info['tokens']['view']['page-count'] = [
+    'name' => t('Page count'),
+    'description' => t('The total page count.'),
+  ];
+
+  return $info;
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function views_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
+  $url_options = ['absolute' => TRUE];
+  if (isset($options['language'])) {
+    $url_options['language'] = $options['language'];
+  }
+  $replacements = [];
+
+  if ($type == 'view' && !empty($data['view'])) {
+    /** @var \Drupal\views\ViewExecutable $view */
+    $view = $data['view'];
+
+    $bubbleable_metadata->addCacheableDependency($view->storage);
+
+    foreach ($tokens as $name => $original) {
+      switch ($name) {
+        case 'label':
+          $replacements[$original] = $view->storage->label();
+          break;
+
+        case 'description':
+          $replacements[$original] = $view->storage->get('description');
+          break;
+
+        case 'id':
+          $replacements[$original] = $view->storage->id();
+          break;
+
+        case 'title':
+          $title = $view->getTitle();
+          $replacements[$original] = $title;
+          break;
+
+        case 'url':
+          try {
+            if ($url = $view->getUrl()) {
+              $replacements[$original] = $url->setOptions($url_options)
+                ->toString();
+            }
+          }
+          catch (\InvalidArgumentException $e) {
+            // The view has no URL so we leave the value empty.
+            $replacements[$original] = '';
+          }
+          break;
+        case 'base-table':
+          $replacements[$original] = $view->storage->get('base_table');
+          break;
+        case 'base-field':
+          $replacements[$original] = $view->storage->get('base_field');
+          break;
+        case 'total-rows':
+          $replacements[$original] = (int) $view->total_rows;
+          break;
+        case 'items-per-page':
+          $replacements[$original] = (int) $view->getItemsPerPage();
+          break;
+        case 'current-page':
+          $replacements[$original] = (int) $view->getCurrentPage() + 1;
+          break;
+        case 'page-count':
+          // If there are no items per page, set this to 1 for the division.
+          $per_page = $view->getItemsPerPage() ?: 1;
+          $replacements[$original] = max(1, (int) ceil($view->total_rows / $per_page));
+          break;
+      }
+    }
+  }
+
+  return $replacements;
+}