danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Definition of views_handler_field_contextual_links.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Provides a handler that adds contextual links.
|
danielebarchiesi@0
|
10 *
|
danielebarchiesi@0
|
11 * @ingroup views_field_handlers
|
danielebarchiesi@0
|
12 */
|
danielebarchiesi@0
|
13 class views_handler_field_contextual_links extends views_handler_field {
|
danielebarchiesi@0
|
14 function option_definition() {
|
danielebarchiesi@0
|
15 $options = parent::option_definition();
|
danielebarchiesi@0
|
16
|
danielebarchiesi@0
|
17 $options['fields'] = array('default' => array());
|
danielebarchiesi@0
|
18 $options['destination'] = array('default' => TRUE, 'bool' => TRUE);
|
danielebarchiesi@0
|
19
|
danielebarchiesi@0
|
20 return $options;
|
danielebarchiesi@0
|
21 }
|
danielebarchiesi@0
|
22
|
danielebarchiesi@0
|
23 function options_form(&$form, &$form_state) {
|
danielebarchiesi@0
|
24 $all_fields = $this->view->display_handler->get_field_labels();
|
danielebarchiesi@0
|
25 // Offer to include only those fields that follow this one.
|
danielebarchiesi@0
|
26 $field_options = array_slice($all_fields, 0, array_search($this->options['id'], array_keys($all_fields)));
|
danielebarchiesi@0
|
27 $form['fields'] = array(
|
danielebarchiesi@0
|
28 '#type' => 'checkboxes',
|
danielebarchiesi@0
|
29 '#title' => t('Fields'),
|
danielebarchiesi@0
|
30 '#description' => t('Fields to be included as contextual links.'),
|
danielebarchiesi@0
|
31 '#options' => $field_options,
|
danielebarchiesi@0
|
32 '#default_value' => $this->options['fields'],
|
danielebarchiesi@0
|
33 );
|
danielebarchiesi@0
|
34 $form['destination'] = array(
|
danielebarchiesi@0
|
35 '#type' => 'checkbox',
|
danielebarchiesi@0
|
36 '#title' => t('Include destination'),
|
danielebarchiesi@0
|
37 '#description' => t('Include a "destination" parameter in the link to return the user to the original view upon completing the contextual action.'),
|
danielebarchiesi@0
|
38 '#default_value' => $this->options['destination'],
|
danielebarchiesi@0
|
39 );
|
danielebarchiesi@0
|
40 }
|
danielebarchiesi@0
|
41
|
danielebarchiesi@0
|
42 function pre_render(&$values) {
|
danielebarchiesi@0
|
43 // Add a row plugin css class for the contextual link.
|
danielebarchiesi@0
|
44 $class = 'contextual-links-region';
|
danielebarchiesi@0
|
45 if (!empty($this->view->style_plugin->options['row_class'])) {
|
danielebarchiesi@0
|
46 $this->view->style_plugin->options['row_class'] .= " $class";
|
danielebarchiesi@0
|
47 }
|
danielebarchiesi@0
|
48 else {
|
danielebarchiesi@0
|
49 $this->view->style_plugin->options['row_class'] = $class;
|
danielebarchiesi@0
|
50 }
|
danielebarchiesi@0
|
51 }
|
danielebarchiesi@0
|
52
|
danielebarchiesi@0
|
53 /**
|
danielebarchiesi@0
|
54 * Render the contextual fields.
|
danielebarchiesi@0
|
55 */
|
danielebarchiesi@0
|
56 function render($values) {
|
danielebarchiesi@0
|
57 $links = array();
|
danielebarchiesi@0
|
58 foreach ($this->options['fields'] as $field) {
|
danielebarchiesi@0
|
59 if (empty($this->view->style_plugin->rendered_fields[$this->view->row_index][$field])) {
|
danielebarchiesi@0
|
60 continue;
|
danielebarchiesi@0
|
61 }
|
danielebarchiesi@0
|
62 $title = $this->view->field[$field]->last_render_text;
|
danielebarchiesi@0
|
63 $path = '';
|
danielebarchiesi@0
|
64 if (!empty($this->view->field[$field]->options['alter']['path'])) {
|
danielebarchiesi@0
|
65 $path = $this->view->field[$field]->options['alter']['path'];
|
danielebarchiesi@0
|
66 }
|
danielebarchiesi@0
|
67 if (!empty($title) && !empty($path)) {
|
danielebarchiesi@0
|
68 // Make sure that tokens are replaced for this paths as well.
|
danielebarchiesi@0
|
69 $tokens = $this->get_render_tokens(array());
|
danielebarchiesi@0
|
70 $path = strip_tags(decode_entities(strtr($path, $tokens)));
|
danielebarchiesi@0
|
71
|
danielebarchiesi@0
|
72 $links[$field] = array(
|
danielebarchiesi@0
|
73 'href' => $path,
|
danielebarchiesi@0
|
74 'title' => $title,
|
danielebarchiesi@0
|
75 );
|
danielebarchiesi@0
|
76 if (!empty($this->options['destination'])) {
|
danielebarchiesi@0
|
77 $links[$field]['query'] = drupal_get_destination();
|
danielebarchiesi@0
|
78 }
|
danielebarchiesi@0
|
79 }
|
danielebarchiesi@0
|
80 }
|
danielebarchiesi@0
|
81
|
danielebarchiesi@0
|
82 if (!empty($links)) {
|
danielebarchiesi@0
|
83 $build = array(
|
danielebarchiesi@0
|
84 '#prefix' => '<div class="contextual-links-wrapper">',
|
danielebarchiesi@0
|
85 '#suffix' => '</div>',
|
danielebarchiesi@0
|
86 '#theme' => 'links__contextual',
|
danielebarchiesi@0
|
87 '#links' => $links,
|
danielebarchiesi@0
|
88 '#attributes' => array('class' => array('contextual-links')),
|
danielebarchiesi@0
|
89 '#attached' => array(
|
danielebarchiesi@0
|
90 'library' => array(array('contextual', 'contextual-links')),
|
danielebarchiesi@0
|
91 ),
|
danielebarchiesi@0
|
92 '#access' => user_access('access contextual links'),
|
danielebarchiesi@0
|
93 );
|
danielebarchiesi@0
|
94 return drupal_render($build);
|
danielebarchiesi@0
|
95 }
|
danielebarchiesi@0
|
96 else {
|
danielebarchiesi@0
|
97 return '';
|
danielebarchiesi@0
|
98 }
|
danielebarchiesi@0
|
99 }
|
danielebarchiesi@0
|
100
|
danielebarchiesi@0
|
101 function query() { }
|
danielebarchiesi@0
|
102 }
|