| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | <?php/** * @file * * Plugin to provide an argument handler for a Taxonomy term *//** * Plugins are described by creating a $plugin array which will be used * by the system that includes this file. */$plugin = array(  'title' => t("Taxonomy term: ID"),  // keyword to use for %substitution  'keyword' => 'term',  'description' => t('Creates a single taxonomy term from a taxonomy ID or taxonomy term name.'),  'context' => 'ctools_term_context',  'default' => array('input_form' => 'tid', 'breadcrumb' => TRUE, 'transform' => FALSE),  'settings form' => 'ctools_term_settings_form',  'placeholder form' => 'ctools_term_ctools_argument_placeholder',  'breadcrumb' => 'ctools_term_breadcrumb',);/** * Discover if this argument gives us the term we crave. */function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {  // If unset it wants a generic, unfilled context.  if ($empty) {    return ctools_context_create_empty('entity:taxonomy_term');  }  if (is_object($arg)) {    $term = $arg;  }  else {    switch ($conf['input_form']) {      case 'tid':      default:        if (!is_numeric($arg)) {          return FALSE;        }        $term = taxonomy_term_load($arg);        break;      case 'term':        if (!empty($conf['transform'])) {          $arg = strtr($arg, '-', ' ');        }        $terms = taxonomy_get_term_by_name($arg);        $conf['vids'] = is_array($conf['vids']) ? array_filter($conf['vids']) : NULL;        if ((count($terms) > 1) && isset($conf['vids'])) {          foreach ($terms as $potential) {            foreach ($conf['vids'] as $vid => $active) {              if ($active && $potential->vid == $vid) {                $term = $potential;                // break out of the foreaches AND the case                break 3;              }            }          }        }        $term = array_shift($terms);        break;    }    if (empty($term)) {      return NULL;    }  }  if (!empty($conf['vids']) && array_filter($conf['vids']) && empty($conf['vids'][$term->vid])) {    return NULL;  }  $context = ctools_context_create('entity:taxonomy_term', $term);  $context->original_argument = $arg;  return $context;}/** * Settings form for the argument */function ctools_term_settings_form(&$form, &$form_state, $conf) {  // @todo allow synonym use like Views does.  $form['settings']['input_form'] = array(    '#title' => t('Argument type'),    '#type' => 'radios',    '#options' => array('tid' => t('Term ID'), 'term' => t('Term name')),    '#default_value' => $conf['input_form'],    '#prefix' => '<div class="clearfix">',    '#suffix' => '</div>',  );  $vocabularies = taxonomy_get_vocabularies();  $options = array();  foreach ($vocabularies as $vid => $vocab) {    $options[$vid] = $vocab->name;  }  $form['settings']['vids'] = array(    '#title' => t('Limit to these vocabularies'),    '#type' => 'checkboxes',    '#options' => $options,    '#default_value' => !empty($conf['vids']) ? $conf['vids'] : array(),    '#description' => t('If no vocabularies are checked, terms from all vocabularies will be accepted.'),  );  $form['settings']['breadcrumb'] = array(    '#title' => t('Inject hierarchy into breadcrumb trail'),    '#type' => 'checkbox',    '#default_value' => !empty($conf['breadcrumb']),    '#description' => t('If checked, taxonomy term parents will appear in the breadcrumb trail.'),  );  $form['settings']['transform'] = array(    '#title' => t('Transform dashes in URL to spaces in term name filter values'),    '#type' => 'checkbox',    '#default_value' => !empty($conf['transform']),  );//  return $form;}/** * Form fragment to get an argument to convert a placeholder for preview. */function ctools_term_ctools_argument_placeholder($conf) {  switch ($conf['input_form']) {    case 'tid':    default:      return array(        '#type' => 'textfield',        '#description' => t('Enter a taxonomy term ID.'),      );    case 'term':      return array(        '#type' => 'textfield',        '#description' => t('Enter a taxonomy term name.'),      );  }}/** * Inject the breadcrumb trail if necessary. */function ctools_term_breadcrumb($conf, $context) {  if (empty($conf['breadcrumb']) || empty($context->data) || empty($context->data->tid)) {    return;  }  $breadcrumb = array();  $current = new stdClass();  $current->tid = $context->data->tid;  while ($parents = taxonomy_get_parents($current->tid)) {    $current = array_shift($parents);    $breadcrumb[] = l($current->name, 'taxonomy/term/' . $current->tid);  }  $breadcrumb = array_merge(drupal_get_breadcrumb(), array_reverse($breadcrumb));  drupal_set_breadcrumb($breadcrumb);}
 |