From 7e75a0c26b023416007604fa1d05ff4ca0fb9a7c Mon Sep 17 00:00:00 2001 From: Megachriz Date: Thu, 14 Mar 2019 19:40:48 +0100 Subject: [PATCH 1/4] by MegaChriz: trying to fix drupal core requirement. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 2bceb05..ec651d8 100755 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ } ], "require": { - "drupal/core": "8.7.x-dev", + "drupal/core": "^8.7.x-dev", "drupal/migrate_plus": "~4.0", "drupal/migrate_tools": "^4.0" }, From 73932744c951cbee4b1eecc2af2925d070d46f86 Mon Sep 17 00:00:00 2001 From: Martin Keereman Date: Wed, 10 Apr 2019 15:56:48 -0700 Subject: [PATCH 2/4] Fix composer dependencies --- composer.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/composer.json b/composer.json index a16d025..2ec2d74 100755 --- a/composer.json +++ b/composer.json @@ -23,9 +23,6 @@ "drupal/coder": "8.2.12", "bex/behat-screenshot": "^1.2", "phpmd/phpmd": "^2.6", - "phpmetrics/phpmetrics": "^2.4", - "phpunit/phpunit": "^6.5", - "squizlabs/php_codesniffer": "^2.8.1", - "symfony/phpunit-bridge": "^3.4.3" + "phpmetrics/phpmetrics": "^2.4" } } From 6333d03c665aaa5b2bf58b6916d1f5a8bbcbf6cf Mon Sep 17 00:00:00 2001 From: Martin Keereman Date: Wed, 10 Apr 2019 16:09:36 -0700 Subject: [PATCH 3/4] Fix composer dependencies --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index 2ec2d74..505c54a 100755 --- a/composer.json +++ b/composer.json @@ -20,7 +20,6 @@ "require-dev": { "composer/installers": "^1.2", "cweagans/composer-patches": "^1.6", - "drupal/coder": "8.2.12", "bex/behat-screenshot": "^1.2", "phpmd/phpmd": "^2.6", "phpmetrics/phpmetrics": "^2.4" From 2fdedac9ea65481a9c03a8a38567d5f0362052dd Mon Sep 17 00:00:00 2001 From: Megachriz Date: Thu, 11 Jul 2019 17:58:57 +0200 Subject: [PATCH 4/4] Initial version of connecting Tamper with Migrate process plugins. --- .../migrate_tamper/migrate_tamper.info.yml | 9 ++ .../Adapter/TamperableMigrateRowAdapter.php | 51 +++++++ .../Derivative/TamperProcessPluginDeriver.php | 56 ++++++++ .../src/Plugin/migrate/process/Tamper.php | 136 ++++++++++++++++++ 4 files changed, 252 insertions(+) create mode 100644 modules/migrate_tamper/migrate_tamper.info.yml create mode 100644 modules/migrate_tamper/src/Adapter/TamperableMigrateRowAdapter.php create mode 100644 modules/migrate_tamper/src/Plugin/Derivative/TamperProcessPluginDeriver.php create mode 100644 modules/migrate_tamper/src/Plugin/migrate/process/Tamper.php diff --git a/modules/migrate_tamper/migrate_tamper.info.yml b/modules/migrate_tamper/migrate_tamper.info.yml new file mode 100644 index 0000000..6ef069e --- /dev/null +++ b/modules/migrate_tamper/migrate_tamper.info.yml @@ -0,0 +1,9 @@ +name: Migrate Tamper +description: Provides Tamper plugins as Migrate process plugins. +package: 'Migration' +type: module +core: 8.x + +dependencies: + - drupal:migrate + - tamper:tamper diff --git a/modules/migrate_tamper/src/Adapter/TamperableMigrateRowAdapter.php b/modules/migrate_tamper/src/Adapter/TamperableMigrateRowAdapter.php new file mode 100644 index 0000000..15acc54 --- /dev/null +++ b/modules/migrate_tamper/src/Adapter/TamperableMigrateRowAdapter.php @@ -0,0 +1,51 @@ +row = $row; + } + + /** + * {@inheritdoc} + */ + public function getSource() { + return $this->row->getSource(); + } + + /** + * {@inheritdoc} + */ + public function setSourceProperty($property, $data) { + $this->row->setSourceProperty($property, $data); + } + + /** + * {@inheritdoc} + */ + public function getSourceProperty($property) { + $this->row->getSourceProperty($property); + } + +} diff --git a/modules/migrate_tamper/src/Plugin/Derivative/TamperProcessPluginDeriver.php b/modules/migrate_tamper/src/Plugin/Derivative/TamperProcessPluginDeriver.php new file mode 100644 index 0000000..da84663 --- /dev/null +++ b/modules/migrate_tamper/src/Plugin/Derivative/TamperProcessPluginDeriver.php @@ -0,0 +1,56 @@ +tamperManager = $tamper_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, $base_plugin_id) { + return new static( + $container->get('plugin.manager.tamper') + ); + } + + /** + * {@inheritdoc} + */ + public function getDerivativeDefinitions($base_plugin_definition) { + foreach ($this->tamperManager->getDefinitions() as $tamper_id => $tamper_definition) { + $this->derivatives[$tamper_id] = $base_plugin_definition + $tamper_definition; + $this->derivatives[$tamper_id]['handle_multiples'] = $tamper_definition['handle_multiples']; + $this->derivatives[$tamper_id]['provider'] = $tamper_definition['provider']; + $this->derivatives[$tamper_id]['tamper_plugin_id'] = $tamper_id; + } + return $this->derivatives; + } + +} diff --git a/modules/migrate_tamper/src/Plugin/migrate/process/Tamper.php b/modules/migrate_tamper/src/Plugin/migrate/process/Tamper.php new file mode 100644 index 0000000..815cd3a --- /dev/null +++ b/modules/migrate_tamper/src/Plugin/migrate/process/Tamper.php @@ -0,0 +1,136 @@ +tamperManager = $tamper_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('plugin.manager.tamper') + ); + } + + /** + * {@inheritdoc} + */ + public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { + // Instantiate tamper plugin. + $tamper = $this->createTamperInstance($migrate_executable); + + // Create tamperable item. + $tamperable_item = new TamperableMigrateRowAdapter($row); + + // And apply tamper! + try { + $value = $tamper->tamper($value, $tamperable_item); + $this->multiple = $tamper->multiple(); + return $value; + } + catch (SkipTamperDataException $e) { + throw new MigrateSkipProcessException(); + } + catch (SkipTamperItemException $e) { + throw new MigrateSkipRowException(); + } + } + + /** + * {@inheritdoc} + */ + public function multiple() { + return $this->multiple; + } + + /** + * Creates a tamper instance. + * + * @param \Drupal\migrate\MigrateExecutableInterface + * The migrate executable. + * + * @return \Drupal\tamper\TamperInterface + * A tamper instance. + */ + protected function createTamperInstance(MigrateExecutableInterface $migrate_executable) { + return $this->tamperManager->createInstance($this->pluginDefinition['tamper_plugin_id'], $this->configuration + [ + 'source_definition' => $this->getSourceDefinitionFromMigrateExecutable($migrate_executable), + ]); + } + + /** + * Creates a source definition based on the migrate executable. + * + * @param \Drupal\migrate\MigrateExecutableInterface + * The migrate executable. + * + * @return \Drupal\tamper\SourceDefinition + * A source definition. + */ + protected function getSourceDefinitionFromMigrateExecutable(MigrateExecutableInterface $migrate_executable) { + // We need to use reflection since getSource() is protected. + $class = new ReflectionClass(get_class($migrate_executable)); + $method = $class->getMethod('getSource'); + $method->setAccessible(TRUE); + + return new SourceDefinition($method->invoke($migrate_executable)->fields()); + } + +}