annotate sites/all/modules/ctools/plugins/arguments/term.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
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 }