You are here

function metatag_field_attach_form in Metatag 7

Implements hook_field_attach_form().

File

./metatag.module, line 2100
Primary hook implementations for Metatag.

Code

function metatag_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {

  // Entity_Translation will trigger this hook again, skip it.
  if (!empty($form_state['entity_translation']['is_translation'])) {
    return;
  }
  list($entity_id, $revision_id, $bundle) = entity_extract_ids($entity_type, $entity);
  if (!metatag_entity_supports_metatags($entity_type, $bundle)) {
    return;
  }
  $instance = metatag_get_entity_metatags_instance($entity, $entity_type, $bundle);

  // Grab the meta tags for display in the form if there are any.
  if (!empty($entity->metatags)) {

    // Identify the language to use with this entity.
    $entity_language = metatag_entity_get_language($entity_type, $entity);

    // If this is a new translation using Entity Translation, load the meta
    // tags from the entity's original language.
    if (module_exists('entity_translation') && empty($form['#entity_translation_source_form']) && ($handler = entity_translation_entity_form_get_handler($form, $form_state)) && isset($entity->metatags[$handler
      ->getSourceLanguage()])) {
      $metatags = $entity->metatags[$handler
        ->getSourceLanguage()];
    }
    elseif (isset($entity->metatags[$langcode])) {

      // Set the tags to the translation set matching that of the form.
      $metatags = $entity->metatags[$langcode];
    }
    elseif (isset($entity->metatags[$entity_language])) {
      $metatags = $entity->metatags[$entity_language];
    }
    else {
      $metatags = $entity->metatags;
    }
  }
  else {
    $metatags = array();
  }

  // Certain circumstances can result in $metatags not being an array.
  if (!is_array($metatags)) {
    $metatags = array();
  }
  $options['token types'] = array(
    token_get_entity_mapping('entity', $entity_type),
  );
  $options['context'] = $entity_type;

  // @todo Remove metatag_form_alter() when https://www.drupal.org/node/1284642 is fixed in core.
  // metatag_metatags_form($form, $instance, $metatags, $options);
  $form['#metatags'] = array(
    'instance' => $instance,
    'metatags' => $metatags,
    'options' => $options,
  );
}