You are here

function metatag_migration_plugins_alter in Metatag 8

Implements hook_migration_plugins_alter().

File

./metatag.module, line 852
Contains metatag.module.

Code

function metatag_migration_plugins_alter(array &$definitions) {

  // This is used for guided migrations from Drupal 7 using either core's
  // Migrate Drupal UI or the Migrate Upgrade contributed module. It will
  // automatically create a field named "field_metatag" with the per-entity
  // meta tag overrides for each entity.
  //
  // @todo Consider loading the relevant variables to determine which entities
  //   should be given the Metatag field.
  // @todo Document how to change the field name.
  //
  // @see metatag_migrate_prepare_row()
  // @see Drupal\metatag\Plugin\migrate\process\d7\MetatagD7
  foreach ($definitions as &$definition) {

    // Only certain migrate plugins are supported.
    if (_metatag_is_migration_plugin_supported($definition)) {

      // There are different field and process plugins for D6 and D7 too.
      if (in_array('Drupal 6', $definition['migration_tags'], TRUE)) {
        $definition['process']['field_metatag'] = [
          'plugin' => 'd6_nodewords_entities',
          'source' => 'pseudo_metatag_entities',
        ];
        $definition['migration_dependencies']['optional'][] = 'd6_nodewords_field';
        $definition['migration_dependencies']['optional'][] = 'd6_nodewords_field_instance';
      }
      if (in_array('Drupal 7', $definition['migration_tags'], TRUE)) {
        $definition['process']['field_metatag'] = [
          'plugin' => 'd7_metatag_entities',
          'source' => 'pseudo_metatag_entities',
        ];
        $destination_plugin_parts = explode(':', $definition['destination']['plugin']);
        $entity_destination_plugins = [
          'entity',
          'entity_complete',
        ];
        $entity_type_id = in_array($destination_plugin_parts[0], $entity_destination_plugins, TRUE) ? $destination_plugin_parts[1] : NULL;
        $bundle_id = $definition['destination']['default_bundle'] ?? NULL;

        // When there are no bundle derivatives, make e.g. the d7_node_complete
        // migration depend on:
        // - d7_metatag_field:node
        // - d7_metatag_field_instance:node
        // - d7_field_instance_widget:node
        // but if there is a bundle derivative such as d7_node_complete:article,
        // then instead make it depend on:
        // - d7_metatag_field:node
        // - d7_metatag_field_instance:node:article
        // - d7_field_instance_widget:node:article
        // Either way, this matches the dependencies used by for example
        // d7_node_complete, which has dependencies on d7_field_instance and
        // d7_comment_field_instance to ensure correct migration order.
        if ($bundle_id && isset($definitions["d7_metatag_field_instance:{$entity_type_id}:{$bundle_id}"])) {
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field:{$entity_type_id}";
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:{$entity_type_id}:{$bundle_id}";
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:{$entity_type_id}:{$bundle_id}";
        }
        elseif (isset($definitions["d7_metatag_field_instance:{$entity_type_id}"])) {
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field:{$entity_type_id}";
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:{$entity_type_id}";
          $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:{$entity_type_id}";
        }
      }
    }
  }
}