-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.tokens.inc
140 lines (126 loc) · 4.34 KB
/
views.tokens.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
/**
* @file
* Token integration for the views module.
*/
/**
* Implements hook_token_info().
*/
function views_token_info() {
$info['types']['view'] = array(
'name' => t('View'),
'description' => t('Tokens related to views.'),
'needs-data' => 'view',
);
$info['tokens']['view']['label'] = array(
'name' => t('Label'),
'description' => t('The label of the view.'),
);
$info['tokens']['view']['description'] = array(
'name' => t('Description'),
'description' => t('The description of the view.'),
);
$info['tokens']['view']['id'] = array(
'name' => t('ID'),
'description' => t('The machine-readable ID of the view.'),
);
$info['tokens']['view']['title'] = array(
'name' => t('Title'),
'description' => t('The title of current display of the view.'),
);
$info['tokens']['view']['url'] = array(
'name' => t('URL'),
'description' => t('The URL of the view.'),
'type' => 'url',
);
$info['tokens']['view']['base-table'] = array(
'name' => t('Base table'),
'description' => t('The base table used for this view.'),
);
$info['tokens']['view']['base-field'] = array(
'name' => t('Base field'),
'description' => t('The base field used for this view.'),
);
$info['tokens']['view']['total-rows'] = array(
'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'] = array(
'name' => t('Items per page'),
'description' => t('The number of items per page.'),
);
$info['tokens']['view']['current-page'] = array(
'name' => t('Current page'),
'description' => t('The current page of results the view is on.'),
);
$info['tokens']['view']['page-count'] = array(
'name' => t('Page count'),
'description' => t('The total page count.'),
);
return $info;
}
/**
* Implements hook_tokens().
*/
function views_tokens($type, $tokens, array $data = array(), array $options = array()) {
$token_service = Drupal::token();
$url_options = array('absolute' => TRUE);
if (isset($options['language'])) {
$url_options['language'] = $options['language'];
}
$sanitize = !empty($options['sanitize']);
$langcode = isset($options['language']) ? $options['language']->id : NULL;
$replacements = array();
if ($type == 'view' && !empty($data['view'])) {
$view = $data['view'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'label':
$replacements[$original] = $sanitize ? check_plain($view->storage->label()) : $view->storage->label();
break;
case 'description':
$replacements[$original] = $sanitize ? check_plain($view->storage->get('description')) : $view->storage->get('description');
break;
case 'id':
$replacements[$original] = $view->storage->id();
break;
case 'title':
$title = $view->getTitle();
$replacements[$original] = $sanitize ? check_plain($title) : $title;
break;
case 'url':
if ($path = $view->getUrl()) {
$replacements[$original] = url($path, $url_options);
}
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] = count($view->result);
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] = (int) ceil(count($view->result) / $per_page);
break;
}
}
// [view:url:*] nested tokens. This only works if Token module is installed.
if ($url_tokens = $token_service->findWithPrefix($tokens, 'url')) {
if ($path = $view->getUrl()) {
$replacements += $token_service->generate('url', $url_tokens, array('path' => $path), $options);
}
}
}
return $replacements;
}