Mercurial > hg > cmmr2012-drupal-site
comparison core/modules/views_ui/views_ui.theme.inc @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * @file | |
5 * Preprocessors and theme functions for the Views UI. | |
6 */ | |
7 | |
8 use Drupal\Component\Utility\SafeMarkup; | |
9 use Drupal\Core\Form\FormState; | |
10 use Drupal\Core\Render\Element; | |
11 use Drupal\Core\Render\Element\Checkboxes; | |
12 use Drupal\Core\Render\Element\Radios; | |
13 use Drupal\Core\Url; | |
14 use Drupal\Core\Template\Attribute; | |
15 | |
16 /** | |
17 * Prepares variables for Views UI display tab setting templates. | |
18 * | |
19 * Default template: views-ui-display-tab-setting.html.twig. | |
20 * | |
21 * @param array $variables | |
22 * An associative array containing: | |
23 * - link: The setting's primary link. | |
24 * - settings_links: An array of links for this setting. | |
25 * - defaulted: A boolean indicating the setting is in its default state. | |
26 * - overridden: A boolean indicating the setting has been overridden from | |
27 * the default. | |
28 * - description: The setting's description. | |
29 * - description_separator: A boolean indicating a separator colon should be | |
30 * appended to the setting's description. | |
31 */ | |
32 function template_preprocess_views_ui_display_tab_setting(&$variables) { | |
33 // Put the primary link to the left side. | |
34 array_unshift($variables['settings_links'], $variables['link']); | |
35 | |
36 if (!empty($variables['overridden'])) { | |
37 $variables['attributes']['title'][] = t('Overridden'); | |
38 } | |
39 | |
40 // Append a colon to the description, if requested. | |
41 if ($variables['description'] && $variables['description_separator']) { | |
42 $variables['description'] .= t(':'); | |
43 } | |
44 } | |
45 | |
46 /** | |
47 * Prepares variables for Views UI view listing templates. | |
48 * | |
49 * Default template: views-ui-view-listing-table.html.twig. | |
50 * | |
51 * @param array $variables | |
52 * An associative array containing: | |
53 * - headers: An associative array containing the headers for the view | |
54 * listing table. | |
55 * - rows: An associative array containing the rows data for the view | |
56 * listing table. | |
57 */ | |
58 function template_preprocess_views_ui_views_listing_table(&$variables) { | |
59 // Convert the attributes to valid attribute objects. | |
60 foreach ($variables['headers'] as $key => $header) { | |
61 $variables['headers'][$key]['attributes'] = new Attribute($header['#attributes']); | |
62 } | |
63 | |
64 if (!empty($variables['rows'])) { | |
65 foreach ($variables['rows'] as $key => $row) { | |
66 $variables['rows'][$key]['attributes'] = new Attribute($row['#attributes']); | |
67 } | |
68 } | |
69 } | |
70 | |
71 /** | |
72 * Prepares variables for Views UI display tab bucket templates. | |
73 * | |
74 * Default template: views-ui-display-tab-bucket.html.twig. | |
75 * | |
76 * @param array $variables | |
77 * An associative array containing: | |
78 * - element: An associative array containing the properties of the element. | |
79 * Properties used: #name, #overridden, #children, #title, #actions. | |
80 */ | |
81 function template_preprocess_views_ui_display_tab_bucket(&$variables) { | |
82 $element = $variables['element']; | |
83 | |
84 if (!empty($element['#overridden'])) { | |
85 $variables['attributes']['title'][] = t('Overridden'); | |
86 } | |
87 | |
88 $variables['name'] = isset($element['#name']) ? $element['#name'] : NULL; | |
89 $variables['overridden'] = isset($element['#overridden']) ? $element['#overridden'] : NULL; | |
90 $variables['content'] = $element['#children']; | |
91 $variables['title'] = $element['#title']; | |
92 $variables['actions'] = !empty($element['#actions']) ? $element['#actions'] : []; | |
93 } | |
94 | |
95 /** | |
96 * Prepares variables for Views UI build group filter form templates. | |
97 * | |
98 * Default template: views-ui-build-group-filter-form.html.twig. | |
99 * | |
100 * @param array $variables | |
101 * An associative array containing: | |
102 * - form: A render element representing the form. | |
103 */ | |
104 function template_preprocess_views_ui_build_group_filter_form(&$variables) { | |
105 $form = $variables['form']; | |
106 | |
107 // Prepare table of options. | |
108 $header = [ | |
109 t('Default'), | |
110 t('Weight'), | |
111 t('Label'), | |
112 t('Operator'), | |
113 t('Value'), | |
114 t('Operations'), | |
115 ]; | |
116 | |
117 // Prepare default selectors. | |
118 $form_state = new FormState(); | |
119 $form['default_group'] = Radios::processRadios($form['default_group'], $form_state, $form); | |
120 $form['default_group_multiple'] = Checkboxes::processCheckboxes($form['default_group_multiple'], $form_state, $form); | |
121 $form['default_group']['All']['#title'] = ''; | |
122 | |
123 $rows[] = [ | |
124 ['data' => $form['default_group']['All']], | |
125 '', | |
126 [ | |
127 'data' => \Drupal::config('views.settings')->get('ui.exposed_filter_any_label') == 'old_any' ? t('<Any>') : t('- Any -'), | |
128 'colspan' => 4, | |
129 'class' => ['class' => 'any-default-radios-row'], | |
130 ], | |
131 ]; | |
132 // Remove the 'All' default_group form element because it's added to the | |
133 // table row. | |
134 unset($variables['form']['default_group']['All']); | |
135 | |
136 foreach (Element::children($form['group_items']) as $group_id) { | |
137 $form['group_items'][$group_id]['value']['#title'] = ''; | |
138 $default = [ | |
139 $form['default_group'][$group_id], | |
140 $form['default_group_multiple'][$group_id], | |
141 ]; | |
142 // Remove these fields from the form since they are moved into the table. | |
143 unset($variables['form']['default_group'][$group_id]); | |
144 unset($variables['form']['default_group_multiple'][$group_id]); | |
145 | |
146 $link = [ | |
147 '#type' => 'link', | |
148 '#url' => Url::fromRoute('<none>', [], [ | |
149 'attributes' => [ | |
150 'id' => 'views-remove-link-' . $group_id, | |
151 'class' => [ | |
152 'views-hidden', | |
153 'views-button-remove', | |
154 'views-groups-remove-link', | |
155 'views-remove-link', | |
156 ], | |
157 'alt' => t('Remove this item'), | |
158 'title' => t('Remove this item'), | |
159 ], | |
160 ]), | |
161 '#title' => SafeMarkup::format('<span>@text</span>', ['@text' => t('Remove')]), | |
162 ]; | |
163 $remove = [$form['group_items'][$group_id]['remove'], $link]; | |
164 $data = [ | |
165 'default' => ['data' => $default], | |
166 'weight' => ['data' => $form['group_items'][$group_id]['weight']], | |
167 'title' => ['data' => $form['group_items'][$group_id]['title']], | |
168 'operator' => ['data' => $form['group_items'][$group_id]['operator']], | |
169 'value' => ['data' => $form['group_items'][$group_id]['value']], | |
170 'remove' => ['data' => $remove], | |
171 ]; | |
172 $rows[] = ['data' => $data, 'id' => 'views-row-' . $group_id, 'class' => ['draggable']]; | |
173 } | |
174 $variables['table'] = [ | |
175 '#type' => 'table', | |
176 '#header' => $header, | |
177 '#rows' => $rows, | |
178 '#attributes' => [ | |
179 'class' => ['views-filter-groups'], | |
180 'id' => 'views-filter-groups', | |
181 ], | |
182 '#tabledrag' => [ | |
183 [ | |
184 'action' => 'order', | |
185 'relationship' => 'sibling', | |
186 'group' => 'weight', | |
187 ] | |
188 ], | |
189 ]; | |
190 | |
191 // Hide fields used in table. | |
192 unset($variables['form']['group_items']); | |
193 } | |
194 | |
195 /** | |
196 * Prepares variables for Views UI rearrange filter form templates. | |
197 * | |
198 * Default template: views-ui-rearrange-filter-form.html.twig. | |
199 * | |
200 * @param array $variables | |
201 * An associative array containing: | |
202 * - form: A render element representing the form. | |
203 */ | |
204 function template_preprocess_views_ui_rearrange_filter_form(&$variables) { | |
205 $form = &$variables['form']; | |
206 $rows = $ungroupable_rows = []; | |
207 // Enable grouping only if > 1 group. | |
208 $variables['grouping'] = count(array_keys($form['#group_options'])) > 1; | |
209 | |
210 foreach ($form['#group_renders'] as $group_id => $contents) { | |
211 // Header row for the group. | |
212 if ($group_id !== 'ungroupable') { | |
213 // Set up tabledrag so that it changes the group dropdown when rows are | |
214 // dragged between groups. | |
215 $options = [ | |
216 'table_id' => 'views-rearrange-filters', | |
217 'action' => 'match', | |
218 'relationship' => 'sibling', | |
219 'group' => 'views-group-select', | |
220 'subgroup' => 'views-group-select-' . $group_id, | |
221 ]; | |
222 drupal_attach_tabledrag($form['override'], $options); | |
223 | |
224 // Title row, spanning all columns. | |
225 $row = []; | |
226 // Add a cell to the first row, containing the group operator. | |
227 $row[] = [ | |
228 'class' => ['group', 'group-operator', 'container-inline'], | |
229 'data' => $form['filter_groups']['groups'][$group_id], | |
230 'rowspan' => max([2, count($contents) + 1]), | |
231 ]; | |
232 // Title. | |
233 $row[] = [ | |
234 'class' => ['group', 'group-title'], | |
235 'data' => [ | |
236 '#prefix' => '<span>', | |
237 '#markup' => $form['#group_options'][$group_id], | |
238 '#suffix' => '</span>', | |
239 ], | |
240 'colspan' => 4, | |
241 ]; | |
242 $rows[] = [ | |
243 'class' => ['views-group-title'], | |
244 'data' => $row, | |
245 'id' => 'views-group-title-' . $group_id, | |
246 ]; | |
247 | |
248 // Row which will only appear if the group has nothing in it. | |
249 $row = []; | |
250 $class = 'group-' . (count($contents) ? 'populated' : 'empty'); | |
251 $instructions = '<span>' . t('No filters have been added.') . '</span> <span class="js-only">' . t('Drag to add filters.') . '</span>'; | |
252 // When JavaScript is enabled, the button for removing the group (if it's | |
253 // present) should be hidden, since it will be replaced by a link on the | |
254 // client side. | |
255 if (!empty($form['remove_groups'][$group_id]['#type']) && $form['remove_groups'][$group_id]['#type'] == 'submit') { | |
256 $form['remove_groups'][$group_id]['#attributes']['class'][] = 'js-hide'; | |
257 } | |
258 $row[] = [ | |
259 'colspan' => 5, | |
260 'data' => [ | |
261 ['#markup' => $instructions], | |
262 $form['remove_groups'][$group_id], | |
263 ], | |
264 ]; | |
265 $rows[] = [ | |
266 'class' => [ | |
267 'group-message', | |
268 'group-' . $group_id . '-message', | |
269 $class, | |
270 ], | |
271 'data' => $row, | |
272 'id' => 'views-group-' . $group_id, | |
273 ]; | |
274 } | |
275 | |
276 foreach ($contents as $id) { | |
277 if (isset($form['filters'][$id]['name'])) { | |
278 $row = []; | |
279 $row[]['data'] = $form['filters'][$id]['name']; | |
280 $form['filters'][$id]['weight']['#attributes']['class'] = ['weight']; | |
281 $row[]['data'] = $form['filters'][$id]['weight']; | |
282 $form['filters'][$id]['group']['#attributes']['class'] = ['views-group-select views-group-select-' . $group_id]; | |
283 $row[]['data'] = $form['filters'][$id]['group']; | |
284 $form['filters'][$id]['removed']['#attributes']['class'][] = 'js-hide'; | |
285 | |
286 $remove_link = [ | |
287 '#type' => 'link', | |
288 '#url' => Url::fromRoute('<none>'), | |
289 '#title' => SafeMarkup::format('<span>@text</span>', ['@text' => t('Remove')]), | |
290 '#weight' => '1', | |
291 '#options' => [ | |
292 'attributes' => [ | |
293 'id' => 'views-remove-link-' . $id, | |
294 'class' => [ | |
295 'views-hidden', | |
296 'views-button-remove', | |
297 'views-groups-remove-link', | |
298 'views-remove-link', | |
299 ], | |
300 'alt' => t('Remove this item'), | |
301 'title' => t('Remove this item'), | |
302 ], | |
303 ], | |
304 ]; | |
305 $row[]['data'] = [ | |
306 $form['filters'][$id]['removed'], | |
307 $remove_link, | |
308 ]; | |
309 | |
310 $row = [ | |
311 'data' => $row, | |
312 'class' => ['draggable'], | |
313 'id' => 'views-row-' . $id, | |
314 ]; | |
315 | |
316 if ($group_id !== 'ungroupable') { | |
317 $rows[] = $row; | |
318 } | |
319 else { | |
320 $ungroupable_rows[] = $row; | |
321 } | |
322 } | |
323 } | |
324 } | |
325 | |
326 if (!$variables['grouping']) { | |
327 $form['filter_groups']['groups'][0]['#title'] = t('Operator'); | |
328 } | |
329 | |
330 if (!empty($ungroupable_rows)) { | |
331 $header = [ | |
332 t('Ungroupable filters'), | |
333 t('Weight'), | |
334 [ | |
335 'data' => t('Group'), | |
336 'class' => ['views-hide-label'], | |
337 ], | |
338 [ | |
339 'data' => t('Remove'), | |
340 'class' => ['views-hide-label'], | |
341 ], | |
342 ]; | |
343 $variables['ungroupable_table'] = [ | |
344 '#type' => 'table', | |
345 '#header' => $header, | |
346 '#rows' => $ungroupable_rows, | |
347 '#attributes' => [ | |
348 'id' => 'views-rearrange-filters-ungroupable', | |
349 'class' => ['arrange'], | |
350 ], | |
351 '#tabledrag' => [ | |
352 [ | |
353 'action' => 'order', | |
354 'relationship' => 'sibling', | |
355 'group' => 'weight', | |
356 ] | |
357 ], | |
358 ]; | |
359 } | |
360 | |
361 if (empty($rows)) { | |
362 $rows[] = [['data' => t('No fields available.'), 'colspan' => '2']]; | |
363 } | |
364 | |
365 // Set up tabledrag so that the weights are changed when rows are dragged. | |
366 $variables['table'] = [ | |
367 '#type' => 'table', | |
368 '#rows' => $rows, | |
369 '#attributes' => [ | |
370 'id' => 'views-rearrange-filters', | |
371 'class' => ['arrange'], | |
372 ], | |
373 '#tabledrag' => [ | |
374 [ | |
375 'action' => 'order', | |
376 'relationship' => 'sibling', | |
377 'group' => 'weight', | |
378 ], | |
379 ], | |
380 ]; | |
381 | |
382 // When JavaScript is enabled, the button for adding a new group should be | |
383 // hidden, since it will be replaced by a link on the client side. | |
384 $form['actions']['add_group']['#attributes']['class'][] = 'js-hide'; | |
385 | |
386 } | |
387 | |
388 /** | |
389 * Prepares variables for style plugin table templates. | |
390 * | |
391 * Default template: views-ui-style-plugin-table.html.twig. | |
392 * | |
393 * @param array $variables | |
394 * An associative array containing: | |
395 * - form: A render element representing the form. | |
396 */ | |
397 function template_preprocess_views_ui_style_plugin_table(&$variables) { | |
398 $form = $variables['form']; | |
399 | |
400 $header = [ | |
401 t('Field'), | |
402 t('Column'), | |
403 t('Align'), | |
404 t('Separator'), | |
405 [ | |
406 'data' => t('Sortable'), | |
407 'align' => 'center', | |
408 ], | |
409 [ | |
410 'data' => t('Default order'), | |
411 'align' => 'center', | |
412 ], | |
413 [ | |
414 'data' => t('Default sort'), | |
415 'align' => 'center', | |
416 ], | |
417 [ | |
418 'data' => t('Hide empty column'), | |
419 'align' => 'center', | |
420 ], | |
421 [ | |
422 'data' => t('Responsive'), | |
423 'align' => 'center', | |
424 ], | |
425 ]; | |
426 $rows = []; | |
427 foreach (Element::children($form['columns']) as $id) { | |
428 $row = []; | |
429 $row[]['data'] = $form['info'][$id]['name']; | |
430 $row[]['data'] = $form['columns'][$id]; | |
431 $row[]['data'] = $form['info'][$id]['align']; | |
432 $row[]['data'] = $form['info'][$id]['separator']; | |
433 | |
434 if (!empty($form['info'][$id]['sortable'])) { | |
435 $row[] = [ | |
436 'data' => $form['info'][$id]['sortable'], | |
437 'align' => 'center', | |
438 ]; | |
439 $row[] = [ | |
440 'data' => $form['info'][$id]['default_sort_order'], | |
441 'align' => 'center', | |
442 ]; | |
443 $row[] = [ | |
444 'data' => $form['default'][$id], | |
445 'align' => 'center', | |
446 ]; | |
447 } | |
448 else { | |
449 $row[] = ''; | |
450 $row[] = ''; | |
451 $row[] = ''; | |
452 } | |
453 $row[] = [ | |
454 'data' => $form['info'][$id]['empty_column'], | |
455 'align' => 'center', | |
456 ]; | |
457 $row[] = [ | |
458 'data' => $form['info'][$id]['responsive'], | |
459 'align' => 'center', | |
460 ]; | |
461 $rows[] = $row; | |
462 } | |
463 | |
464 // Add the special 'None' row. | |
465 $rows[] = [['data' => t('None'), 'colspan' => 6], ['align' => 'center', 'data' => $form['default'][-1]], ['colspan' => 2]]; | |
466 | |
467 // Unset elements from the form array that are used to build the table so that | |
468 // they are not rendered twice. | |
469 unset($form['default']); | |
470 unset($form['info']); | |
471 unset($form['columns']); | |
472 | |
473 $variables['table'] = [ | |
474 '#type' => 'table', | |
475 '#theme' => 'table__views_ui_style_plugin_table', | |
476 '#header' => $header, | |
477 '#rows' => $rows, | |
478 ]; | |
479 $variables['form'] = $form; | |
480 } | |
481 | |
482 /** | |
483 * Prepares variables for views UI view preview section templates. | |
484 * | |
485 * Default template: views-ui-view-preview-section.html.twig. | |
486 * | |
487 * @param array $variables | |
488 * An associative array containing: | |
489 * - view: The view object. | |
490 * - section: The section name of a View (e.g. title, rows or pager). | |
491 */ | |
492 function template_preprocess_views_ui_view_preview_section(&$variables) { | |
493 switch ($variables['section']) { | |
494 case 'title': | |
495 $variables['title'] = t('Title'); | |
496 $links = views_ui_view_preview_section_display_category_links($variables['view'], 'title', $variables['title']); | |
497 break; | |
498 case 'header': | |
499 $variables['title'] = t('Header'); | |
500 $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); | |
501 break; | |
502 case 'empty': | |
503 $variables['title'] = t('No results behavior'); | |
504 $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); | |
505 break; | |
506 case 'exposed': | |
507 // @todo Sorts can be exposed too, so we may need a better title. | |
508 $variables['title'] = t('Exposed Filters'); | |
509 $links = views_ui_view_preview_section_display_category_links($variables['view'], 'exposed_form_options', $variables['title']); | |
510 break; | |
511 case 'rows': | |
512 // @todo The title needs to depend on what is being viewed. | |
513 $variables['title'] = t('Content'); | |
514 $links = views_ui_view_preview_section_rows_links($variables['view']); | |
515 break; | |
516 case 'pager': | |
517 $variables['title'] = t('Pager'); | |
518 $links = views_ui_view_preview_section_display_category_links($variables['view'], 'pager_options', $variables['title']); | |
519 break; | |
520 case 'more': | |
521 $variables['title'] = t('More'); | |
522 $links = views_ui_view_preview_section_display_category_links($variables['view'], 'use_more', $variables['title']); | |
523 break; | |
524 case 'footer': | |
525 $variables['title'] = t('Footer'); | |
526 $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); | |
527 break; | |
528 case 'attachment_before': | |
529 // @todo: Add links to the attachment configuration page. | |
530 $variables['title'] = t('Attachment before'); | |
531 break; | |
532 case 'attachment_after': | |
533 // @todo: Add links to the attachment configuration page. | |
534 $variables['title'] = t('Attachment after'); | |
535 break; | |
536 } | |
537 | |
538 if (isset($links)) { | |
539 $build = [ | |
540 '#theme' => 'links__contextual', | |
541 '#links' => $links, | |
542 '#attributes' => ['class' => ['contextual-links']], | |
543 '#attached' => [ | |
544 'library' => ['contextual/drupal.contextual-links'], | |
545 ], | |
546 ]; | |
547 $variables['links'] = $build; | |
548 } | |
549 } |