| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | <?php/** * @file * Plugin to provide access control based upon specific terms. *//** * 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"),  'description' => t('Control access by a specific term.'),  'callback' => 'ctools_term_ctools_access_check',  'default' => array('vids' => array()),  'settings form' => 'ctools_term_ctools_access_settings',  'settings form validation' => 'ctools_term_ctools_access_settings_validate',  'settings form submit' => 'ctools_term_ctools_access_settings_submit',  'summary' => 'ctools_term_ctools_access_summary',  'required context' => new ctools_context_required(t('Term'), array('taxonomy_term', 'terms')),);/** * Settings form for the 'by term' access plugin */function ctools_term_ctools_access_settings($form, &$form_state, $conf) {  // If no configuration was saved before, set some defaults.  if (empty($conf)) {    $conf = array(      'vid' => 0,    );  }  if (!isset($conf['vid'])) {    $conf['vid'] = 0;  }  $form['settings']['vid'] = array(    '#title' => t('Vocabulary'),    '#type' => 'select',    '#options' => array(),    '#description' => t('Select the vocabulary for this form.'),    '#id' => 'ctools-select-vid',    '#default_value' => $conf['vid'],    '#required' => TRUE,  );  ctools_include('dependent');  $options = array();  // A note: Dependency works strangely on these forms as they have never been  // updated to a more modern system so they are not individual forms of their  // own like the content types.  $form['settings']['#tree'] = TRUE;  // Loop over each of the configured vocabularies.  foreach (taxonomy_get_vocabularies() as $vid => $vocabulary) {    $options[$vid] = $vocabulary->name;    $form['settings'][$vocabulary->vid] = array(      '#title' => t('Terms'),      '#description' => t('Select a term or terms from @vocabulary.', array('@vocabulary' => $vocabulary->name)), //. $description,      '#dependency' => array('ctools-select-vid' => array($vocabulary->vid)),      '#default_value' => !empty($conf[$vid]) ? $conf[$vid] : '',      '#multiple' => TRUE,    );    $terms = array();    foreach (taxonomy_get_tree($vocabulary->vid) as $tid => $term) {      $terms[$term->tid] = str_repeat('-', $term->depth) . ($term->depth ? ' ' : '') . $term->name;    }    $form['settings'][$vocabulary->vid]['#type'] = 'select';    $form['settings'][$vocabulary->vid]['#options'] = $terms;    unset($terms);  }  $form['settings']['vid']['#options'] = $options;  return $form;}/** * Check for access. */function ctools_term_ctools_access_check($conf, $context) {  // As far as I know there should always be a context at this point, but this  // is safe.  if (empty($context) || empty($context->data) || empty($context->data->vid) || empty($context->data->tid)) {    return FALSE;  }  // Get the $vid.  if (!isset($conf['vid'])) {    return FALSE;  }  $vid = $conf['vid'];  // Get the terms.  if (!isset($conf[$vid])) {    return FALSE;  }  $return = FALSE;  $terms = array_filter($conf[$vid]);  // For multi-term if any terms coincide, let's call that good enough:  if (isset($context->tids)) {    return (bool) array_intersect($terms, $context->tids);  }  else {    return in_array($context->data->tid, $terms);  }}/** * Provide a summary description based upon the checked terms. */function ctools_term_ctools_access_summary($conf, $context) {  $vid = $conf['vid'];  $terms = array();  foreach ($conf[$vid] as $tid) {    $term = taxonomy_term_load($tid);    $terms[] = $term->name;  }  return format_plural(count($terms),    '@term can be the term "@terms"',    '@term can be one of these terms: @terms',    array('@terms' => implode(', ', $terms),      '@term' => $context->identifier));}
 |