You are here

function entity_translation_field_widget_taxonomy_autocomplete_form_alter in Entity Translation 7

Implements hook_field_widget_WIDGET_TYPE_form_alter().

File

./entity_translation.taxonomy.inc, line 198
The taxonomy specific translation functions and hook implementations.

Code

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

  // The autocomplete widget is also displayed in the field configuration form,
  // in which case we do not need to perform any alteration. To preserve BC, by
  // default we enable our taxonomy autocomplete override only on new sites.
  if (!isset($element['#entity']) || !variable_get('entity_translation_taxonomy_autocomplete', FALSE)) {
    return;
  }

  // We will need to translate term names, if Title is enabled and configured
  // for this vocabulary.
  $entity_type = 'taxonomy_term';
  $field = field_widget_field($element, $form_state);
  $bundle = !empty($field['settings']['allowed_values'][0]['vocabulary']) ? $field['settings']['allowed_values'][0]['vocabulary'] : NULL;
  if ($bundle && entity_translation_enabled($entity_type, $bundle)) {
    $parent_handler = entity_translation_get_handler($element['#entity_type'], $element['#entity']);
    $langcode = $parent_handler
      ->getActiveLanguage();
    $terms = array_values(_entity_translation_taxonomy_autocomplete_widget_get_terms($element));

    // If we are using the regular autocomplete behavior also in translation
    // forms, we need to set our custom callback.
    if (!_entity_translation_taxonomy_autocomplete_translation_enabled($element, $form_state)) {
      $element['#autocomplete_path'] = 'entity_translation/' . $entity_type . '/autocomplete/' . $langcode . '/' . $element['#field_name'];
      $translations = $parent_handler
        ->getTranslations();
      if (isset($translations->original) && $translations->original != $langcode) {
        $labels = array();
        foreach ($terms as $delta => $term) {
          $labels[] = _entity_translation_taxonomy_label($term, $langcode);
        }
        $element['#default_value'] = implode(', ', $labels);
      }
    }
    else {
      $element['#type'] = 'fieldset';
      $element['#description'] = t('Enter one translation for each term');
      $element['#access'] = (bool) $terms;
      foreach ($terms as $delta => $term) {
        $element[$delta] = array(
          '#type' => 'textfield',
          '#default_value' => _entity_translation_taxonomy_label($term, $langcode),
          '#required' => TRUE,
          '#tid' => $term->tid,
        );
      }
      $element['#process'][] = 'entity_translation_taxonomy_autocomplete_process';
    }

    // The native term save logic is performed at widget validation level, so we
    // just replace the validation handler to provide our logic instead.
    $element['#element_validate'] = array_values(array_diff($element['#element_validate'], array(
      'taxonomy_autocomplete_validate',
    )));
    $element['#element_validate'][] = 'entity_translation_taxonomy_autocomplete_validate';
  }
}