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