You are here

function term_reference_filter_by_views_field_widget_form_alter in Taxonomy Term Reference Filter by Views 7.2

Same name and namespace in other branches
  1. 7 term_reference_filter_by_views.module \term_reference_filter_by_views_field_widget_form_alter()

Implements hook_widget_field_form(). Alters the Taxonomy Term Reference Widgets.

File

./term_reference_filter_by_views.module, line 20

Code

function term_reference_filter_by_views_field_widget_form_alter(&$element, &$form_state, $context) {

  // Add a css class to widget form elements for all fields of type mytype.
  if ($context['field']['type'] == 'taxonomy_term_reference') {
    if (!empty($context['instance']['view']['view_name'])) {
      if (isset($element['#type']) && ($element['#type'] == 'select' || $element['#type'] == 'radios' || $element['#type'] == 'checkboxes')) {
        $allowed = _get_referencable_terms_from_view($context['field'], $context['instance'], NULL, 0, NULL, FALSE);
        if (!empty($allowed)) {
          $options = array();
          if (isset($element['#options']['_none'])) {
            $options = array(
              '_none' => $element['#options']['_none'],
            );
          }
          else {
            $options = array(
              '_none' => theme('options_none', array(
                'instance' => $context['instance'],
                'option' => $element['#properties']['empty_option'],
              )),
            );
          }
          $options += array_intersect_key($allowed, $element['#options']);
          $element['#options'] = $options;
        }
      }
      elseif (isset($element['#autocomplete_path']) || isset($element['tid']['#autocomplete_path'])) {
        if (isset($element['#field_name'])) {
          $element['#instance'] = $context['instance'];
          $element['#autocomplete_path'] = 'term_reference_filter_by_views/autocomplete/' . $element['#field_name'] . '/' . $context['instance']['entity_type'] . '/' . $context['instance']['bundle'] . '/';
          if (!empty($context['instance']['view']['size'])) {
            $element['#size'] = $context['instance']['view']['size'];
          }
        }
        elseif (isset($element['tid']['#field_name'])) {
          $element['tid']['#instance'] = $context['instance'];
          if (!empty($element['tid']['#default_value'])) {
            $view_term = _get_referencable_terms_from_view($context['field'], $context['instance'], NULL, 0, array(
              $element['tid']['#default_value'],
            ));
            $element['tid']['#default_value'] = current($view_term);
          }
          if (!empty($context['instance']['view']['size'])) {
            $element['tid']['#size'] = $context['instance']['view']['size'];
          }
          $element['tid']['#element_validate'] = array(
            '_term_reference_autocomplete_validate',
          );
          $element['tid']['#autocomplete_path'] = 'term_reference_filter_by_views/autocomplete/' . $element['tid']['#field_name'] . '/' . $context['instance']['entity_type'] . '/' . $context['instance']['bundle'] . '/';
        }
      }
      elseif (isset($element['#autocomplete_deluxe_path']) && module_exists('autocomplete_deluxe')) {
        if (!empty($element['#default_value'])) {
          foreach ($context['items'] as $item) {
            $tids[$item['tid']] = $item['tid'];
          }
          $referencable_terms = _get_referencable_terms_from_view($context['field'], $context['instance'], NULL, 0, $tids);
          $element['#default_value'] = implode(',', $referencable_terms);
        }
        if (!empty($context['instance']['view']['size'])) {
          $element['#size'] = $context['instance']['view']['size'];
        }
        $element['#instance'] = $context['instance'];
        $element['#element_validate'] = array(
          '_term_reference_autocomplete_validate',
        );
        $element['#autocomplete_deluxe_path'] = url('term_reference_filter_by_views/autocomplete/' . $element['#field_name'] . '/' . $context['instance']['entity_type'] . '/' . $context['instance']['bundle'] . '/', array(
          'absolute' => TRUE,
        ));
      }
    }

    // Be sure not to overwrite existing attributes.
  }
}