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}";
}
}
}
}
}