diff --git a/metatag_migrate/metatag_migrate.module b/metatag_migrate/metatag_migrate.module index 61d0131..f13bb0a 100644 --- a/metatag_migrate/metatag_migrate.module +++ b/metatag_migrate/metatag_migrate.module @@ -5,6 +5,7 @@ * Contains metatag_migrate.module. */ +use Drupal\Component\Plugin\Factory\DefaultFactory; use Drupal\Core\Database\Query\SelectInterface; use Drupal\migrate\Plugin\migrate\destination\EntityContentBase; use Drupal\migrate\Plugin\migrate\source\SqlBase; @@ -69,3 +70,21 @@ function metatag_migrate_migrate_prepare_row(Row $row, MigrateSourceInterface $s $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/metatag_migrate/metatag_migrate.services.yml b/metatag_migrate/metatag_migrate.services.yml deleted file mode 100644 index 255c87e..0000000 --- a/metatag_migrate/metatag_migrate.services.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - metatag_migrate.migration_subscriber: - class: Drupal\metatag_migrate\EventSubscriber\MigrationSubscriber - tags: - - { name: event_subscriber } diff --git a/metatag_migrate/migration_templates/d7_metatag_field.yml b/metatag_migrate/migration_templates/d7_metatag_field.yml index db2d65a..0b6f0cd 100644 --- a/metatag_migrate/migration_templates/d7_metatag_field.yml +++ b/metatag_migrate/migration_templates/d7_metatag_field.yml @@ -4,6 +4,7 @@ migration_tags: - Drupal 7 source: plugin: d7_metatag_field + ignore_map: true constants: status: true langcode: und diff --git a/metatag_migrate/migration_templates/d7_metatag_field_instance.yml b/metatag_migrate/migration_templates/d7_metatag_field_instance.yml index 40ffd17..371a60e 100644 --- a/metatag_migrate/migration_templates/d7_metatag_field_instance.yml +++ b/metatag_migrate/migration_templates/d7_metatag_field_instance.yml @@ -4,6 +4,7 @@ migration_tags: - Drupal 7 source: plugin: d7_metatag_field_instance + ignore_map: true constants: field_name: field_metatag label: Metatags @@ -18,3 +19,4 @@ migration_dependencies: required: - d7_metatag_field - d7_node_type + - d7_taxonomy_vocabulary diff --git a/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml b/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml index e8d78b7..fae4027 100644 --- a/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml +++ b/metatag_migrate/migration_templates/d7_metatag_field_instance_widget_settings.yml @@ -4,15 +4,15 @@ migration_tags: - Drupal 7 source: plugin: d7_metatag_field_instance + ignore_map: true constants: form_mode: default field_name: field_metatag - entity_type: node process: bundle: bundle form_mode: 'constants/form_mode' field_name: 'constants/field_name' - entity_type: 'constants/entity_type' + entity_type: entity_type destination: plugin: component_entity_form_display migration_dependencies: diff --git a/metatag_migrate/src/EventSubscriber/MigrationSubscriber.php b/metatag_migrate/src/EventSubscriber/MigrationSubscriber.php deleted file mode 100644 index 2833489..0000000 --- a/metatag_migrate/src/EventSubscriber/MigrationSubscriber.php +++ /dev/null @@ -1,49 +0,0 @@ -getMigration(); - if ($migration->getDestinationPlugin() instanceof EntityContentBase) { - $process = $migration->getProcess(); - $process['field_metatag'] = 'field_metatag'; - $migration->setProcess($process); - - $migration_dependencies = $migration->getMigrationDependencies(); - $migration_dependencies['required'][] = 'd7_metatag_field_instance'; - $migration->set('migration_dependencies', $migration_dependencies); - } - } - -} diff --git a/tests/fixtures/drupal7.php b/tests/fixtures/drupal7.php new file mode 100644 index 0000000..90ec8e9 --- /dev/null +++ b/tests/fixtures/drupal7.php @@ -0,0 +1,170 @@ +schema()->createTable('metatag', array( + 'fields' => array( + 'entity_type' => array( + 'type' => 'varchar', + 'not null' => TRUE, + 'length' => '32', + 'default' => '', + ), + 'entity_id' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'revision_id' => array( + 'type' => 'int', + 'not null' => TRUE, + 'size' => 'normal', + 'default' => '0', + 'unsigned' => TRUE, + ), + 'language' => array( + 'type' => 'varchar', + 'not null' => TRUE, + 'length' => '32', + 'default' => '', + ), + 'data' => array( + 'type' => 'blob', + 'not null' => TRUE, + 'size' => 'big', + ), + ), + 'primary key' => array( + 'entity_type', + 'entity_id', + 'revision_id', + 'language', + ), + 'indexes' => array( + 'type_revision' => array( + 'entity_type', + 'revision_id', + ), + ), + 'mysql_character_set' => 'utf8', +)); + +$connection->insert('metatag') +->fields(array( + 'entity_type', + 'entity_id', + 'revision_id', + 'language', + 'data', +)) +->values(array( + 'entity_type' => 'node', + 'entity_id' => '3', + 'revision_id' => '3', + 'language' => 'und', + 'data' => 'a:1:{s:8:"keywords";a:1:{s:5:"value";s:15:"keynoderevision";}}', +)) +->values(array( + 'entity_type' => 'node', + 'entity_id' => '3', + 'revision_id' => '4', + 'language' => 'und', + 'data' => 'a:1:{s:8:"keywords";a:1:{s:5:"value";s:7:"keynode";}}', +)) +->values(array( + 'entity_type' => 'user', + 'entity_id' => '2', + 'revision_id' => '0', + 'language' => 'und', + 'data' => 'a:1:{s:8:"keywords";a:1:{s:5:"value";s:7:"keyuser";}}', +)) +->values(array( + 'entity_type' => 'taxonomy_term', + 'entity_id' => '2', + 'revision_id' => '0', + 'language' => 'und', + 'data' => 'a:1:{s:8:"keywords";a:1:{s:5:"value";s:12:"keytaxonomy2";}}', +)) +->execute(); + +$connection->insert('node') +->fields(array( + 'nid', + 'vid', + 'type', + 'language', + 'title', + 'uid', + 'status', + 'created', + 'changed', + 'comment', + 'promote', + 'sticky', + 'tnid', + 'translate', +)) +->values(array( + 'nid' => '3', + 'vid' => '4', + 'type' => 'test_content_type', + 'language' => 'en', + 'title' => 'An Edited Node', + 'uid' => '2', + 'status' => '1', + 'created' => '1421727515', + 'changed' => '1441032132', + 'comment' => '2', + 'promote' => '1', + 'sticky' => '0', + 'tnid' => '0', + 'translate' => '0', +)) +->execute(); + +$connection->insert('node_revision') +->fields(array( + 'nid', + 'vid', + 'uid', + 'title', + 'log', + 'timestamp', + 'status', + 'comment', + 'promote', + 'sticky', +)) +->values(array( + 'nid' => '3', + 'vid' => '3', + 'uid' => '1', + 'title' => 'A Node', + 'log' => '', + 'timestamp' => '1441032131', + 'status' => '1', + 'comment' => '2', + 'promote' => '1', + 'sticky' => '0', +)) +->values(array( + 'nid' => '3', + 'vid' => '4', + 'uid' => '1', + 'title' => 'An Edited Node', + 'log' => '', + 'timestamp' => '1441032132', + 'status' => '1', + 'comment' => '2', + 'promote' => '1', + 'sticky' => '0', +)) +->execute(); diff --git a/tests/src/Kernel/Migrate/MigrateMetatagTest.php b/tests/src/Kernel/Migrate/MigrateMetatagTest.php new file mode 100644 index 0000000..e69651b --- /dev/null +++ b/tests/src/Kernel/Migrate/MigrateMetatagTest.php @@ -0,0 +1,94 @@ +loadFixture(__DIR__ . '/../../../../tests/fixtures/drupal7.php'); + + $this->installEntitySchema('node'); + $this->installEntitySchema('comment'); + $this->installEntitySchema('taxonomy_term'); + $this->installEntitySchema('file'); + $this->installConfig(static::$modules); + $this->installSchema('node', ['node_access']); + $this->installSchema('system', ['sequences']); + + $this->executeMigrations([ + 'd7_metatag_field', + 'd7_node_type', + 'd7_taxonomy_vocabulary', + 'd7_metatag_field_instance', + 'd7_metatag_field_instance_widget_settings', + 'd7_user_role', + 'd7_user', + 'd7_comment_type', + 'd7_field', + 'd7_field_instance', + 'd7_node:test_content_type', + 'd7_node:article', + 'd7_node_revision:test_content_type', + 'd7_taxonomy_term', + ]); + } + + /** + * Test metatag migration from Drupal 7 to 8. + */ + public function testMetatag() { + /** @var Node $node */ + $node = Node::load(3); + $this->assertTrue($node instanceof NodeInterface); + $this->assertTrue($node->hasField('field_metatag')); + $this->assertSame('a:1:{s:8:"keywords";a:1:{s:5:"value";s:7:"keynode";}}', $node->field_metatag->value); + + $node = node_revision_load(3); + $this->assertTrue($node instanceof NodeInterface); + $this->assertTrue($node->hasField('field_metatag')); + $this->assertSame('a:1:{s:8:"keywords";a:1:{s:5:"value";s:15:"keynoderevision";}}', $node->field_metatag->value); + + /** @var User $user */ + $user = User::load(2); + $this->assertTrue($user instanceof UserInterface); + $this->assertTrue($user->hasField('field_metatag')); + $this->assertSame('a:1:{s:8:"keywords";a:1:{s:5:"value";s:7:"keyuser";}}', $user->field_metatag->value); + + /** @var Term $term */ + $term = Term::load(2); + $this->assertTrue($term instanceof TermInterface); + $this->assertTrue($term->hasField('field_metatag')); + $this->assertSame('a:1:{s:8:"keywords";a:1:{s:5:"value";s:12:"keytaxonomy2";}}', $term->field_metatag->value); + } +}