You are here

function commerce_backoffice_handler_filter_term_node_tid::value_form in Commerce Backoffice 7

Options form subform for setting options.

This should be overridden by all child classes and it must define $form['value'].

Overrides views_handler_filter::value_form

See also

options_form()

File

includes/views/handlers/commerce_backoffice_handler_filter_term_node_tid.inc, line 46
Definition of commerce_backoffice_handler_filter_term_node_tid.

Class

commerce_backoffice_handler_filter_term_node_tid
Filter by term id.

Code

function value_form(&$form, &$form_state) {
  $vocabularies = commerce_backoffice_get_vocabularies($this->definition['product display']);
  if (empty($vocabularies)) {
    $form['markup'] = array(
      '#markup' => '<div class="form-item">' . t('No terms found in the provided vocabularies.') . '</div>',
    );
    $form['value'] = array();
    return;
  }
  $options = array();
  foreach ($vocabularies as $vocabulary) {
    $options[$vocabulary->name] = array();
    $vocabularies_names[] = $vocabulary->name;
    if (!empty($this->options['hierarchy'])) {
      $tree = taxonomy_get_tree($vocabulary->vid);
      if ($tree) {
        foreach ($tree as $term) {
          $choice = new stdClass();
          if (!empty($this->options['per_vocabulary'])) {
            $choice->option = array(
              $term->vid . '-' . $term->tid => str_repeat('-', $term->depth) . $term->name,
            );
          }
          else {
            $choice->option = array(
              $term->tid => str_repeat('-', $term->depth) . $term->name,
            );
          }
          $options[$vocabulary->name][] = $choice;
        }
      }
    }
    else {
      $query = db_select('taxonomy_term_data', 'td');
      $query
        ->innerJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
      $query
        ->fields('td');
      $query
        ->orderby('tv.weight');
      $query
        ->orderby('tv.name');
      $query
        ->orderby('td.weight');
      $query
        ->orderby('td.name');
      $query
        ->addTag('term_access');
      $query
        ->condition('tv.machine_name', $vocabulary->machine_name);
      $result = $query
        ->execute();
      foreach ($result as $term) {
        if (!empty($this->options['per_vocabulary'])) {
          $options[$vocabulary->name][$term->vid . '-' . $term->tid] = $term->name;
        }
        else {
          $options[$vocabulary->name][$term->tid] = $term->name;
        }
      }
    }
  }
  $default_value = (array) $this->value;
  if (!empty($form_state['exposed'])) {
    $identifier = $this->options['expose']['identifier'];
    if (!empty($this->options['expose']['reduce'])) {
      $options = $this
        ->reduce_value_options($options);
      if (!empty($this->options['expose']['multiple']) && empty($this->options['expose']['required'])) {
        $default_value = array();
      }
    }
    if (empty($this->options['expose']['multiple'])) {
      if (empty($this->options['expose']['required']) && (empty($default_value) || !empty($this->options['expose']['reduce']))) {
        $default_value = 'All';
      }
      elseif (empty($default_value)) {
        $keys = array_keys($options);
        $default_value = array_shift($keys);
      }
      elseif ($default_value == array(
        '',
      )) {
        $default_value = 'All';
      }
      else {
        $copy = $default_value;
        $default_value = array_shift($copy);
      }
    }
  }
  $form['value'] = array(
    '#type' => 'select',
    '#title' => t('Select terms'),
    '#multiple' => TRUE,
    '#options' => $options,
    '#size' => min(9, count($options, COUNT_RECURSIVE)),
    '#default_value' => $default_value,
  );
  if (!empty($form_state['exposed']) && isset($identifier) && !isset($form_state['input'][$identifier])) {
    $form_state['input'][$identifier] = $default_value;
  }
}