danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 *
|
danielebarchiesi@0
|
6 * Plugin to provide an argument handler for a Taxonomy term
|
danielebarchiesi@0
|
7 */
|
danielebarchiesi@0
|
8
|
danielebarchiesi@0
|
9 /**
|
danielebarchiesi@0
|
10 * Plugins are described by creating a $plugin array which will be used
|
danielebarchiesi@0
|
11 * by the system that includes this file.
|
danielebarchiesi@0
|
12 */
|
danielebarchiesi@0
|
13 $plugin = array(
|
danielebarchiesi@0
|
14 'title' => t("Taxonomy term: ID"),
|
danielebarchiesi@0
|
15 // keyword to use for %substitution
|
danielebarchiesi@0
|
16 'keyword' => 'term',
|
danielebarchiesi@0
|
17 'description' => t('Creates a single taxonomy term from a taxonomy ID or taxonomy term name.'),
|
danielebarchiesi@0
|
18 'context' => 'ctools_term_context',
|
danielebarchiesi@0
|
19 'default' => array('input_form' => 'tid', 'breadcrumb' => TRUE, 'transform' => FALSE),
|
danielebarchiesi@0
|
20 'settings form' => 'ctools_term_settings_form',
|
danielebarchiesi@0
|
21 'placeholder form' => 'ctools_term_ctools_argument_placeholder',
|
danielebarchiesi@0
|
22 'breadcrumb' => 'ctools_term_breadcrumb',
|
danielebarchiesi@0
|
23 );
|
danielebarchiesi@0
|
24
|
danielebarchiesi@0
|
25 /**
|
danielebarchiesi@0
|
26 * Discover if this argument gives us the term we crave.
|
danielebarchiesi@0
|
27 */
|
danielebarchiesi@0
|
28 function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
|
danielebarchiesi@0
|
29 // If unset it wants a generic, unfilled context.
|
danielebarchiesi@0
|
30 if ($empty) {
|
danielebarchiesi@0
|
31 return ctools_context_create_empty('entity:taxonomy_term');
|
danielebarchiesi@0
|
32 }
|
danielebarchiesi@0
|
33
|
danielebarchiesi@0
|
34 if (is_object($arg)) {
|
danielebarchiesi@0
|
35 $term = $arg;
|
danielebarchiesi@0
|
36 }
|
danielebarchiesi@0
|
37 else {
|
danielebarchiesi@0
|
38 switch ($conf['input_form']) {
|
danielebarchiesi@0
|
39 case 'tid':
|
danielebarchiesi@0
|
40 default:
|
danielebarchiesi@0
|
41 if (!is_numeric($arg)) {
|
danielebarchiesi@0
|
42 return FALSE;
|
danielebarchiesi@0
|
43 }
|
danielebarchiesi@0
|
44 $term = taxonomy_term_load($arg);
|
danielebarchiesi@0
|
45 break;
|
danielebarchiesi@0
|
46
|
danielebarchiesi@0
|
47 case 'term':
|
danielebarchiesi@0
|
48 if (!empty($conf['transform'])) {
|
danielebarchiesi@0
|
49 $arg = strtr($arg, '-', ' ');
|
danielebarchiesi@0
|
50 }
|
danielebarchiesi@0
|
51
|
danielebarchiesi@0
|
52 $terms = taxonomy_get_term_by_name($arg);
|
danielebarchiesi@0
|
53
|
danielebarchiesi@0
|
54 $conf['vids'] = is_array($conf['vids']) ? array_filter($conf['vids']) : NULL;
|
danielebarchiesi@0
|
55 if ((count($terms) > 1) && isset($conf['vids'])) {
|
danielebarchiesi@0
|
56 foreach ($terms as $potential) {
|
danielebarchiesi@0
|
57 foreach ($conf['vids'] as $vid => $active) {
|
danielebarchiesi@0
|
58 if ($active && $potential->vid == $vid) {
|
danielebarchiesi@0
|
59 $term = $potential;
|
danielebarchiesi@0
|
60 // break out of the foreaches AND the case
|
danielebarchiesi@0
|
61 break 3;
|
danielebarchiesi@0
|
62 }
|
danielebarchiesi@0
|
63 }
|
danielebarchiesi@0
|
64 }
|
danielebarchiesi@0
|
65 }
|
danielebarchiesi@0
|
66 $term = array_shift($terms);
|
danielebarchiesi@0
|
67 break;
|
danielebarchiesi@0
|
68 }
|
danielebarchiesi@0
|
69
|
danielebarchiesi@0
|
70 if (empty($term)) {
|
danielebarchiesi@0
|
71 return NULL;
|
danielebarchiesi@0
|
72 }
|
danielebarchiesi@0
|
73 }
|
danielebarchiesi@0
|
74
|
danielebarchiesi@0
|
75 if (!empty($conf['vids']) && array_filter($conf['vids']) && empty($conf['vids'][$term->vid])) {
|
danielebarchiesi@0
|
76 return NULL;
|
danielebarchiesi@0
|
77 }
|
danielebarchiesi@0
|
78
|
danielebarchiesi@0
|
79 $context = ctools_context_create('entity:taxonomy_term', $term);
|
danielebarchiesi@0
|
80 $context->original_argument = $arg;
|
danielebarchiesi@0
|
81 return $context;
|
danielebarchiesi@0
|
82 }
|
danielebarchiesi@0
|
83
|
danielebarchiesi@0
|
84 /**
|
danielebarchiesi@0
|
85 * Settings form for the argument
|
danielebarchiesi@0
|
86 */
|
danielebarchiesi@0
|
87 function ctools_term_settings_form(&$form, &$form_state, $conf) {
|
danielebarchiesi@0
|
88 // @todo allow synonym use like Views does.
|
danielebarchiesi@0
|
89 $form['settings']['input_form'] = array(
|
danielebarchiesi@0
|
90 '#title' => t('Argument type'),
|
danielebarchiesi@0
|
91 '#type' => 'radios',
|
danielebarchiesi@0
|
92 '#options' => array('tid' => t('Term ID'), 'term' => t('Term name')),
|
danielebarchiesi@0
|
93 '#default_value' => $conf['input_form'],
|
danielebarchiesi@0
|
94 '#prefix' => '<div class="clearfix">',
|
danielebarchiesi@0
|
95 '#suffix' => '</div>',
|
danielebarchiesi@0
|
96 );
|
danielebarchiesi@0
|
97
|
danielebarchiesi@0
|
98 $vocabularies = taxonomy_get_vocabularies();
|
danielebarchiesi@0
|
99 $options = array();
|
danielebarchiesi@0
|
100 foreach ($vocabularies as $vid => $vocab) {
|
danielebarchiesi@0
|
101 $options[$vid] = $vocab->name;
|
danielebarchiesi@0
|
102 }
|
danielebarchiesi@0
|
103 $form['settings']['vids'] = array(
|
danielebarchiesi@0
|
104 '#title' => t('Limit to these vocabularies'),
|
danielebarchiesi@0
|
105 '#type' => 'checkboxes',
|
danielebarchiesi@0
|
106 '#options' => $options,
|
danielebarchiesi@0
|
107 '#default_value' => !empty($conf['vids']) ? $conf['vids'] : array(),
|
danielebarchiesi@0
|
108 '#description' => t('If no vocabularies are checked, terms from all vocabularies will be accepted.'),
|
danielebarchiesi@0
|
109 );
|
danielebarchiesi@0
|
110
|
danielebarchiesi@0
|
111 $form['settings']['breadcrumb'] = array(
|
danielebarchiesi@0
|
112 '#title' => t('Inject hierarchy into breadcrumb trail'),
|
danielebarchiesi@0
|
113 '#type' => 'checkbox',
|
danielebarchiesi@0
|
114 '#default_value' => !empty($conf['breadcrumb']),
|
danielebarchiesi@0
|
115 '#description' => t('If checked, taxonomy term parents will appear in the breadcrumb trail.'),
|
danielebarchiesi@0
|
116 );
|
danielebarchiesi@0
|
117
|
danielebarchiesi@0
|
118 $form['settings']['transform'] = array(
|
danielebarchiesi@0
|
119 '#title' => t('Transform dashes in URL to spaces in term name filter values'),
|
danielebarchiesi@0
|
120 '#type' => 'checkbox',
|
danielebarchiesi@0
|
121 '#default_value' => !empty($conf['transform']),
|
danielebarchiesi@0
|
122 );
|
danielebarchiesi@0
|
123 // return $form;
|
danielebarchiesi@0
|
124 }
|
danielebarchiesi@0
|
125
|
danielebarchiesi@0
|
126 /**
|
danielebarchiesi@0
|
127 * Form fragment to get an argument to convert a placeholder for preview.
|
danielebarchiesi@0
|
128 */
|
danielebarchiesi@0
|
129 function ctools_term_ctools_argument_placeholder($conf) {
|
danielebarchiesi@0
|
130 switch ($conf['input_form']) {
|
danielebarchiesi@0
|
131 case 'tid':
|
danielebarchiesi@0
|
132 default:
|
danielebarchiesi@0
|
133 return array(
|
danielebarchiesi@0
|
134 '#type' => 'textfield',
|
danielebarchiesi@0
|
135 '#description' => t('Enter a taxonomy term ID.'),
|
danielebarchiesi@0
|
136 );
|
danielebarchiesi@0
|
137 case 'term':
|
danielebarchiesi@0
|
138 return array(
|
danielebarchiesi@0
|
139 '#type' => 'textfield',
|
danielebarchiesi@0
|
140 '#description' => t('Enter a taxonomy term name.'),
|
danielebarchiesi@0
|
141 );
|
danielebarchiesi@0
|
142 }
|
danielebarchiesi@0
|
143 }
|
danielebarchiesi@0
|
144
|
danielebarchiesi@0
|
145 /**
|
danielebarchiesi@0
|
146 * Inject the breadcrumb trail if necessary.
|
danielebarchiesi@0
|
147 */
|
danielebarchiesi@0
|
148 function ctools_term_breadcrumb($conf, $context) {
|
danielebarchiesi@0
|
149 if (empty($conf['breadcrumb']) || empty($context->data) || empty($context->data->tid)) {
|
danielebarchiesi@0
|
150 return;
|
danielebarchiesi@0
|
151 }
|
danielebarchiesi@0
|
152
|
danielebarchiesi@0
|
153 $breadcrumb = array();
|
danielebarchiesi@0
|
154 $current = new stdClass();
|
danielebarchiesi@0
|
155 $current->tid = $context->data->tid;
|
danielebarchiesi@0
|
156 while ($parents = taxonomy_get_parents($current->tid)) {
|
danielebarchiesi@0
|
157 $current = array_shift($parents);
|
danielebarchiesi@0
|
158 $breadcrumb[] = l($current->name, 'taxonomy/term/' . $current->tid);
|
danielebarchiesi@0
|
159 }
|
danielebarchiesi@0
|
160
|
danielebarchiesi@0
|
161 $breadcrumb = array_merge(drupal_get_breadcrumb(), array_reverse($breadcrumb));
|
danielebarchiesi@0
|
162 drupal_set_breadcrumb($breadcrumb);
|
danielebarchiesi@0
|
163 }
|