diff --git a/modules/contrib/metatag/metatag.module b/modules/contrib/metatag/metatag.module index da1d1bf..3bf94cb 100644 --- a/modules/contrib/metatag/metatag.module +++ b/modules/contrib/metatag/metatag.module @@ -5,12 +5,19 @@ * Contains metatag.module. */ +use Drupal\Component\Plugin\Factory\DefaultFactory; +use Drupal\Core\Database\Query\SelectInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; +use Drupal\migrate\Plugin\migrate\destination\EntityContentBase; +use Drupal\migrate\Plugin\migrate\source\SqlBase; +use Drupal\migrate\Plugin\MigrateSourceInterface; +use Drupal\migrate\Plugin\MigrationInterface; +use Drupal\migrate\Row; /** * Implements hook_help(). @@ -308,3 +315,81 @@ function metatag_get_default_tags() { return $metatags->get('tags'); } + +/** + * Implement hook_migrate_prepare_row(). + * + * @param Row $row + * @param MigrateSourceInterface $source + * @param MigrationInterface $migration + */ +function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { + // @todo Write a more general version rather than hard-coded. + $source_can_have_metatags = in_array($source->getPluginId(), [ + 'd7_node', + 'd7_node_revision', + 'taxonomy_term', + 'd7_user' + ]); + if ($source_can_have_metatags && $migration->getDestinationPlugin() instanceof EntityContentBase) { + $entity_type = NULL; + $entity_id = NULL; + $revision_id = NULL; + + // @todo Write a more general version rather than switch statement. + switch ($source->getPluginId()) { + case 'd7_node': + case 'd7_node_revision': + $entity_type = 'node'; + $entity_id = $row->getSourceProperty('nid'); + $revision_id = $row->getSourceProperty('vid'); + break; + + case 'taxonomy_term': + $entity_type = 'taxonomy_term'; + $entity_id = $row->getSourceProperty('tid'); + break; + + case 'd7_user': + $entity_type = 'user'; + $entity_id = $row->getSourceProperty('uid'); + break; + } + + /** @var SqlBase $source */ + /** @var SelectInterface $query */ + $query = $source->getDatabase()->select('metatag', 'm') + ->fields('m', ['data']) + ->condition('entity_type', $entity_type) + ->condition('entity_id', $entity_id); + if (!is_null($revision_id)) { + $query->condition('revision_id', $revision_id); + } + $metatag_value = []; + foreach ($query->execute() as $metatag_row) { + $metatag_value[]['value'] = $metatag_row->data; + } + $row->setSourceProperty('field_metatag', $metatag_value); + } +} + +/** + * Implements hook_migration_plugins_alter(). + * + * @param array $migrations + */ +function metatag_migration_plugins_alter(array &$migrations) { + foreach ($migrations as &$migration) { + if (isset($migration['destination']['plugin'])) { + $plugin_definition = \Drupal::service('plugin.manager.migrate.destination') + ->getDefinition($migration['destination']['plugin']); + $destination_plugin = DefaultFactory::getPluginClass($migration['destination']['plugin'], $plugin_definition); + $entity_content_base = 'Drupal\migrate\Plugin\migrate\destination\EntityContentBase'; + + if (is_subclass_of($destination_plugin, $entity_content_base) || $destination_plugin == $entity_content_base) { + $migration['process']['field_metatag'] = 'field_metatag'; + $migration['migration_dependencies']['required'][] = 'd7_metatag_field_instance'; + } + } + } +} diff --git a/modules/contrib/metatag/metatag_migrate/metatag_migrate.info.yml b/modules/contrib/metatag/metatag_migrate/metatag_migrate.info.yml deleted file mode 100644 index 22d1edf..0000000 --- a/modules/contrib/metatag/metatag_migrate/metatag_migrate.info.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: 'Metatag Migrate' -type: module -description: Provides support for migrating meta tags. -core: 8.x -package: Migrate -dependencies: - - metatag - - migrate diff --git a/modules/contrib/metatag/metatag_migrate/metatag_migrate.module b/modules/contrib/metatag/metatag_migrate/metatag_migrate.module deleted file mode 100644 index f13bb0a..0000000 --- a/modules/contrib/metatag/metatag_migrate/metatag_migrate.module +++ /dev/null @@ -1,90 +0,0 @@ -getPluginId(), [ - 'd7_node', - 'd7_node_revision', - 'taxonomy_term', - 'd7_user' - ]); - if ($source_can_have_metatags && $migration->getDestinationPlugin() instanceof EntityContentBase) { - $entity_type = NULL; - $entity_id = NULL; - $revision_id = NULL; - - // @todo Write a more general version rather than switch statement. - switch ($source->getPluginId()) { - case 'd7_node': - case 'd7_node_revision': - $entity_type = 'node'; - $entity_id = $row->getSourceProperty('nid'); - $revision_id = $row->getSourceProperty('vid'); - break; - - case 'taxonomy_term': - $entity_type = 'taxonomy_term'; - $entity_id = $row->getSourceProperty('tid'); - break; - - case 'd7_user': - $entity_type = 'user'; - $entity_id = $row->getSourceProperty('uid'); - break; - } - - /** @var SqlBase $source */ - /** @var SelectInterface $query */ - $query = $source->getDatabase()->select('metatag', 'm') - ->fields('m', ['data']) - ->condition('entity_type', $entity_type) - ->condition('entity_id', $entity_id); - if (!is_null($revision_id)) { - $query->condition('revision_id', $revision_id); - } - $metatag_value = []; - foreach ($query->execute() as $metatag_row) { - $metatag_value[]['value'] = $metatag_row->data; - } - $row->setSourceProperty('field_metatag', $metatag_value); - } -} - -/** - * Implements hook_migration_plugins_alter(). - */ -function metatag_migrate_migration_plugins_alter(array &$migrations) { - foreach ($migrations as &$migration) { - if (isset($migration['destination']['plugin'])) { - $plugin_definition = \Drupal::service('plugin.manager.migrate.destination')->getDefinition($migration['destination']['plugin']); - $destination_plugin = DefaultFactory::getPluginClass($migration['destination']['plugin'], $plugin_definition); - $entity_content_base = 'Drupal\migrate\Plugin\migrate\destination\EntityContentBase'; - - if (is_subclass_of($destination_plugin, $entity_content_base) || $destination_plugin == $entity_content_base) { - $migration['process']['field_metatag'] = 'field_metatag'; - $migration['migration_dependencies']['required'][] = 'd7_metatag_field_instance'; - } - } - } -} diff --git a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field.yml b/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field.yml deleted file mode 100644 index 0b6f0cd..0000000 --- a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field.yml +++ /dev/null @@ -1,20 +0,0 @@ -id: d7_metatag_field -label: Metatag field -migration_tags: - - Drupal 7 -source: - plugin: d7_metatag_field - ignore_map: true - constants: - status: true - langcode: und - field_name: field_metatag - type: metatag -process: - entity_type: entity_type - status: 'constants/status' - langcode: 'constants/langcode' - field_name: 'constants/field_name' - type: 'constants/type' -destination: - plugin: entity:field_storage_config diff --git a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance.yml b/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance.yml deleted file mode 100644 index 371a60e..0000000 --- a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance.yml +++ /dev/null @@ -1,22 +0,0 @@ -id: d7_metatag_field_instance -label: Metatag field instance -migration_tags: - - Drupal 7 -source: - plugin: d7_metatag_field_instance - ignore_map: true - constants: - field_name: field_metatag - label: Metatags -process: - entity_type: entity_type - field_name: 'constants/field_name' - bundle: bundle - label: 'constants/label' -destination: - plugin: entity:field_config -migration_dependencies: - required: - - d7_metatag_field - - d7_node_type - - d7_taxonomy_vocabulary diff --git a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml b/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml deleted file mode 100644 index fae4027..0000000 --- a/modules/contrib/metatag/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml +++ /dev/null @@ -1,20 +0,0 @@ -id: d7_metatag_field_instance_widget_settings -label: Metatag field instance widget settings -migration_tags: - - Drupal 7 -source: - plugin: d7_metatag_field_instance - ignore_map: true - constants: - form_mode: default - field_name: field_metatag -process: - bundle: bundle - form_mode: 'constants/form_mode' - field_name: 'constants/field_name' - entity_type: entity_type -destination: - plugin: component_entity_form_display -migration_dependencies: - required: - - d7_metatag_field_instance diff --git a/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagField.php b/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagField.php deleted file mode 100644 index 4709be1..0000000 --- a/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagField.php +++ /dev/null @@ -1,46 +0,0 @@ -select('metatag', 'm') - ->fields('m', ['entity_type']) - ->groupBy('entity_type'); - } - - /** - * {@inheritdoc} - */ - public function fields() { - $fields = array('entity_type' => $this->t('Entity type')); - return $fields; - } - - /** - * {@inheritdoc} - */ - public function getIds() { - $ids['entity_type']['type'] = 'string'; - return $ids; - } - -} diff --git a/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagFieldInstance.php b/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagFieldInstance.php deleted file mode 100644 index 5962bbe..0000000 --- a/modules/contrib/metatag/metatag_migrate/src/Plugin/migrate/source/d7/MetatagFieldInstance.php +++ /dev/null @@ -1,69 +0,0 @@ -select('metatag', 'm') - ->fields('m', ['entity_type']) - ->groupBy('entity_type'); - } - - /** - * {@inheritdoc} - */ - public function fields() { - return array( - 'entity_type' => $this->t('Entity type'), - 'bundle' => $this->t('Bundle'), - ); - } - - /** - * Returns each entity_type/bundle pair. - */ - public function initializeIterator() { - $bundles = []; - foreach (parent::initializeIterator() as $instance) { - $bundle_info = \Drupal::getContainer() - ->get('entity_type.bundle.info') - ->getBundleInfo($instance['entity_type']); - foreach (array_keys($bundle_info) as $bundle) { - $bundles[] = [ - 'entity_type' => $instance['entity_type'], - 'bundle' => $bundle - ]; - } - } - return new \ArrayIterator($bundles); - } - - /** - * {@inheritdoc} - */ - public function getIds() { - $ids['entity_type']['type'] = 'string'; - $ids['bundle']['type'] = 'string'; - return $ids; - } - -} diff --git a/modules/contrib/metatag/migration_templates/d7_metatag_field.yml b/modules/contrib/metatag/migration_templates/d7_metatag_field.yml new file mode 100644 index 0000000..0b6f0cd --- /dev/null +++ b/modules/contrib/metatag/migration_templates/d7_metatag_field.yml @@ -0,0 +1,20 @@ +id: d7_metatag_field +label: Metatag field +migration_tags: + - Drupal 7 +source: + plugin: d7_metatag_field + ignore_map: true + constants: + status: true + langcode: und + field_name: field_metatag + type: metatag +process: + entity_type: entity_type + status: 'constants/status' + langcode: 'constants/langcode' + field_name: 'constants/field_name' + type: 'constants/type' +destination: + plugin: entity:field_storage_config diff --git a/modules/contrib/metatag/migration_templates/d7_metatag_field_instance.yml b/modules/contrib/metatag/migration_templates/d7_metatag_field_instance.yml new file mode 100644 index 0000000..371a60e --- /dev/null +++ b/modules/contrib/metatag/migration_templates/d7_metatag_field_instance.yml @@ -0,0 +1,22 @@ +id: d7_metatag_field_instance +label: Metatag field instance +migration_tags: + - Drupal 7 +source: + plugin: d7_metatag_field_instance + ignore_map: true + constants: + field_name: field_metatag + label: Metatags +process: + entity_type: entity_type + field_name: 'constants/field_name' + bundle: bundle + label: 'constants/label' +destination: + plugin: entity:field_config +migration_dependencies: + required: + - d7_metatag_field + - d7_node_type + - d7_taxonomy_vocabulary diff --git a/modules/contrib/metatag/migration_templates/d7_metatag_field_instance_widget_settings.yml b/modules/contrib/metatag/migration_templates/d7_metatag_field_instance_widget_settings.yml new file mode 100644 index 0000000..fae4027 --- /dev/null +++ b/modules/contrib/metatag/migration_templates/d7_metatag_field_instance_widget_settings.yml @@ -0,0 +1,20 @@ +id: d7_metatag_field_instance_widget_settings +label: Metatag field instance widget settings +migration_tags: + - Drupal 7 +source: + plugin: d7_metatag_field_instance + ignore_map: true + constants: + form_mode: default + field_name: field_metatag +process: + bundle: bundle + form_mode: 'constants/form_mode' + field_name: 'constants/field_name' + entity_type: entity_type +destination: + plugin: component_entity_form_display +migration_dependencies: + required: + - d7_metatag_field_instance diff --git a/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagField.php b/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagField.php new file mode 100644 index 0000000..48fb524 --- /dev/null +++ b/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagField.php @@ -0,0 +1,46 @@ +select('metatag', 'm') + ->fields('m', ['entity_type']) + ->groupBy('entity_type'); + } + + /** + * {@inheritdoc} + */ + public function fields() { + $fields = array('entity_type' => $this->t('Entity type')); + return $fields; + } + + /** + * {@inheritdoc} + */ + public function getIds() { + $ids['entity_type']['type'] = 'string'; + return $ids; + } + +} diff --git a/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagFieldInstance.php b/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagFieldInstance.php new file mode 100644 index 0000000..b41305a --- /dev/null +++ b/modules/contrib/metatag/src/Plugin/migrate/source/d7/MetatagFieldInstance.php @@ -0,0 +1,69 @@ +select('metatag', 'm') + ->fields('m', ['entity_type']) + ->groupBy('entity_type'); + } + + /** + * {@inheritdoc} + */ + public function fields() { + return array( + 'entity_type' => $this->t('Entity type'), + 'bundle' => $this->t('Bundle'), + ); + } + + /** + * Returns each entity_type/bundle pair. + */ + public function initializeIterator() { + $bundles = []; + foreach (parent::initializeIterator() as $instance) { + $bundle_info = \Drupal::getContainer() + ->get('entity_type.bundle.info') + ->getBundleInfo($instance['entity_type']); + foreach (array_keys($bundle_info) as $bundle) { + $bundles[] = [ + 'entity_type' => $instance['entity_type'], + 'bundle' => $bundle + ]; + } + } + return new \ArrayIterator($bundles); + } + + /** + * {@inheritdoc} + */ + public function getIds() { + $ids['entity_type']['type'] = 'string'; + $ids['bundle']['type'] = 'string'; + return $ids; + } + +} diff --git a/modules/contrib/metatag/tests/src/Kernel/Migrate/MigrateMetatagTest.php b/modules/contrib/metatag/tests/src/Kernel/Migrate/MigrateMetatagTest.php index e69651b..b7ba330 100644 --- a/modules/contrib/metatag/tests/src/Kernel/Migrate/MigrateMetatagTest.php +++ b/modules/contrib/metatag/tests/src/Kernel/Migrate/MigrateMetatagTest.php @@ -19,7 +19,6 @@ class MigrateMetatagTest extends MigrateDrupal7TestBase { static $modules = [ 'metatag', - 'metatag_migrate', 'comment', 'datetime', 'filter',