You are here

public function shs_handler_filter_term_node_tid::value_form in Simple hierarchical select 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_term_node_tid::value_form

See also

options_form()

File

includes/handlers/shs_handler_filter_term_node_tid.inc, line 56
Definition of shs_handler_filter_term_node_tid.

Class

shs_handler_filter_term_node_tid
Filter by term id (including selection by simple hierarchical select).

Code

public function value_form(&$form, &$form_state) {
  global $language;
  parent::value_form($form, $form_state);
  $multiple = $this->options['expose']['multiple'];
  $vocabulary = taxonomy_vocabulary_machine_name_load($this->options['vocabulary']);
  if (empty($vocabulary) && $this->options['limit']) {
    $form['markup'] = array(
      '#markup' => '<div class="form-item">' . t('An invalid vocabulary is selected. Please change it in the options.') . '</div>',
    );
    return;
  }
  if ($this->options['type'] == 'shs' && $this->options['exposed']) {
    $identifier = $this->options['expose']['identifier'];

    // Get parents of selected term.
    $default_value = empty($this->value) ? 0 : $this->value;
    if (!empty($form_state['input'][$identifier])) {
      $input_value = $form_state['input'][$identifier];
      $default_value = is_array($form_state['input'][$identifier]) ? check_plain(reset($form_state['input'][$identifier])) : check_plain($form_state['input'][$identifier]);
      if ($multiple && !is_array($default_value)) {
        $default_value = array(
          $default_value,
        );
      }
    }
    $parents = array();
    if (!empty($default_value) && $default_value != 'All') {
      if (is_array($default_value) && $default_value[0] != 'All') {
        if (strpos($default_value[0], ',') !== FALSE || strpos($default_value[0], '+') !== FALSE) {
          $values = array();
          foreach ($default_value as $default) {
            $values += preg_split('/[,\\+]+/', $default, -1, PREG_SPLIT_NO_EMPTY);
          }
          $form_state['input'][$identifier] = empty($values) ? 'All' : $values;
          $default_value = $values;
        }
        $parents_multiple = array();
        foreach ($default_value as $tid) {
          $parents_multiple[] = $tid;
        }
        $parents[] = array(
          'tid' => $parents_multiple,
        );
      }
      elseif (is_string($default_value)) {
        $term_parents = taxonomy_get_parents_all($default_value);

        // Remove selected term from list.
        array_shift($term_parents);
        foreach (array_reverse($term_parents) as $term) {
          $parents[] = array(
            'tid' => $term->tid,
          );
        }

        // Add current term (name not needed).
        $parents[] = array(
          'tid' => $default_value,
        );
      }
    }

    // Add fake item for next level.
    $parents[] = array(
      'tid' => 0,
    );
    $element_settings = array(
      'create_new_terms' => FALSE,
      'create_new_levels' => FALSE,
      'required' => FALSE,
      'language' => $language,
    );
    if (module_exists('chosen') && !empty($this->options['use_chosen'])) {
      $element_settings['use_chosen'] = $this->options['use_chosen'];
    }
    if (!empty($this->options['exposed']) && !empty($this->options['expose']['required'])) {
      $element_settings['required'] = TRUE;
    }

    // Allowing other modules to add settings for shs.
    if (!empty($this->options['expose']['shs'])) {
      $element_settings = array_merge($element_settings, $this->options['expose']['shs']);
    }

    // Generate a random hash to avoid merging of settings by drupal_add_js.
    // This is necessary until http://drupal.org/node/208611 lands for D7.
    $js_hash = _shs_create_hash();

    // Create settings needed for our js magic.
    $settings_js = array(
      'shs' => array(
        $identifier . ($multiple ? '[]' : '') => array(
          $js_hash => array(
            'vid' => $vocabulary->vid,
            'settings' => $element_settings,
            'default_value' => $default_value,
            'parents' => $parents,
            'multiple' => $multiple,
            'any_label' => variable_get('views_exposed_filter_any_label', 'new_any') == 'old_any' ? t('<Any>') : t('- Any -'),
            'any_value' => 'All',
          ),
        ),
      ),
    );
    drupal_alter(array(
      'shs_js_settings',
      "shs_{$identifier}_js_settings",
    ), $settings_js, $identifier, $vocabulary->vid);

    // Add settings.
    drupal_add_js($settings_js, 'setting');

    // Add behavior.
    drupal_add_js(drupal_get_path('module', 'shs') . '/js/shs.js');

    // Rewrite default select element.
    $form['value'] += array(
      '#attributes' => array(
        'class' => array(
          'element-invisible',
          'shs-enabled',
        ),
      ),
    );
  }
  if (empty($form_state['exposed'])) {

    // Retain the helper option.
    $this->helper
      ->options_form($form, $form_state);
  }
}