Loading core/modules/migrate/src/Entity/Migration.php +31 −11 Changes for core/modules/migrate/src/Entity/Migration.php: 31 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,9 @@ namespace Drupal\migrate\Entity; use Drupal\Component\Utility\String; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrateIdMapInterface; use Drupal\migrate\Plugin\RequirementsInterface; Loading Loading @@ -195,6 +197,13 @@ class Migration extends ConfigEntityBase implements MigrationInterface, Requirem */ public $migration_dependencies = array(); /** * The entity manager. * * @var \Drupal\Core\Entity\EntityManagerInterface */ protected $entityManager; /** * {@inheritdoc} */ Loading Loading @@ -315,28 +324,39 @@ public function saveHighWater($high_water) { public function checkRequirements() { // Check whether the current migration source and destination plugin // requirements are met or not. try { if ($this->getSourcePlugin() instanceof RequirementsInterface && !$this->getSourcePlugin()->checkRequirements()) { return FALSE; if ($this->getSourcePlugin() instanceof RequirementsInterface) { $this->getSourcePlugin()->checkRequirements(); } if ($this->getDestinationPlugin() instanceof RequirementsInterface && !$this->getDestinationPlugin()->checkRequirements()) { return FALSE; if ($this->getDestinationPlugin() instanceof RequirementsInterface) { $this->getDestinationPlugin()->checkRequirements(); } /** @var \Drupal\migrate\Entity\MigrationInterface[] $required_migrations */ $required_migrations = \Drupal::entityManager()->getStorage('migration')->loadMultiple($this->requirements); $required_migrations = $this->getEntityManager()->getStorage('migration')->loadMultiple($this->requirements); $missing_migrations = array_diff($this->requirements, array_keys($required_migrations)); // Check if the dependencies are in good shape. foreach ($required_migrations as $required_migration) { foreach ($required_migrations as $migration_id => $required_migration) { if (!$required_migration->isComplete()) { return FALSE; $missing_migrations[] = $migration_id; } } if ($missing_migrations) { throw new RequirementsException(String::format('Missing migrations @requirements.', ['@requirements' => implode(', ', $missing_migrations)]), ['requirements' => $missing_migrations]); } catch (\Exception $e) { return FALSE; } return TRUE; /** * Get the entity manager. * * @return \Drupal\Core\Entity\EntityManagerInterface * The entity manager. */ protected function getEntityManager() { if (!isset($this->entityManager)) { $this->entityManager = \Drupal::entityManager(); } return $this->entityManager; } /** Loading core/modules/migrate/src/Exception/RequirementsException.php 0 → 100644 +70 −0 Changes for core/modules/migrate/src/Exception/RequirementsException.php: 70 added lines, 0 removed lines. Original line number Diff line number Diff line <?php /** * @file * Contains \Drupal\migrate\Exception\RequirementsException. */ namespace Drupal\migrate\Exception; use Exception; /** * Defines an * * @see \Drupal\migrate\Plugin\RequirementsInterface */ class RequirementsException extends \RuntimeException { /** * The missing requirements. * * @var array */ protected $requirements; /** * Constructs a new RequirementsException instance. * * @param string $message * (optional) The Exception message to throw. * @param array $requirements * (optional) The missing requirements. * @param int $code * (optional) The Exception code. * @param \Exception $previous * (optional) The previous exception used for the exception chaining. */ public function __construct($message = "", array $requirements = [], $code = 0, Exception $previous = NULL) { parent::__construct($message, $code, $previous); $this->requirements = $requirements; } /** * Get an array of requirements. * * @return array * The requirements. */ public function getRequirements() { return $this->requirements; } /** * Get the requirements as a string. * * @return string * A formatted requirements string. */ public function getRequirementsString() { $output = ''; foreach ($this->requirements as $requirement_type => $requirements) { foreach ($requirements as $value) { $output .= "$requirement_type: $value. "; } } return trim($output); } } core/modules/migrate/src/MigrateExecutable.php +11 −2 Changes for core/modules/migrate/src/MigrateExecutable.php: 11 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ use Drupal\Core\Utility\Error; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\Plugin\MigrateIdMapInterface; /** Loading Loading @@ -233,11 +234,19 @@ public function getSource() { */ public function import() { // Knock off migration if the requirements haven't been met. if (!$this->migration->checkRequirements()) { try { $this->migration->checkRequirements(); } catch (RequirementsException $e) { $this->message->display( $this->t('Migration @id did not meet the requirements', array('@id' => $this->migration->id())), 'error'); $this->t('Migration @id did not meet the requirements. @message @requirements', array( '@id' => $this->migration->id(), '@message' => $e->getMessage(), '@requirements' => $e->getRequirementsString(), )), 'error'); return MigrationInterface::RESULT_FAILED; } $return = MigrationInterface::RESULT_COMPLETED; $source = $this->getSource(); $id_map = $this->migration->getIdMap(); Loading core/modules/migrate/src/Plugin/RequirementsInterface.php +2 −2 Changes for core/modules/migrate/src/Plugin/RequirementsInterface.php: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -15,8 +15,8 @@ interface RequirementsInterface { /** * Checks if requirements for this plugin are OK. * * @return bool * TRUE if it is possible to use the plugin, FALSE if not. * @throws \Drupal\migrate\Exception\RequirementsException * Thrown when requirements are not met. */ public function checkRequirements(); Loading core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php +4 −1 Changes for core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php: 4 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ use Drupal\Core\Plugin\PluginBase; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\Plugin\MigrateDestinationInterface; use Drupal\migrate\Plugin\RequirementsInterface; Loading Loading @@ -53,7 +54,9 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition * {@inheritdoc} */ public function checkRequirements() { return $this->pluginDefinition['requirements_met']; if (empty($this->pluginDefinition['requirements_met'])) { throw new RequirementsException(); } } /** Loading Loading
core/modules/migrate/src/Entity/Migration.php +31 −11 Changes for core/modules/migrate/src/Entity/Migration.php: 31 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,9 @@ namespace Drupal\migrate\Entity; use Drupal\Component\Utility\String; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\MigrateIdMapInterface; use Drupal\migrate\Plugin\RequirementsInterface; Loading Loading @@ -195,6 +197,13 @@ class Migration extends ConfigEntityBase implements MigrationInterface, Requirem */ public $migration_dependencies = array(); /** * The entity manager. * * @var \Drupal\Core\Entity\EntityManagerInterface */ protected $entityManager; /** * {@inheritdoc} */ Loading Loading @@ -315,28 +324,39 @@ public function saveHighWater($high_water) { public function checkRequirements() { // Check whether the current migration source and destination plugin // requirements are met or not. try { if ($this->getSourcePlugin() instanceof RequirementsInterface && !$this->getSourcePlugin()->checkRequirements()) { return FALSE; if ($this->getSourcePlugin() instanceof RequirementsInterface) { $this->getSourcePlugin()->checkRequirements(); } if ($this->getDestinationPlugin() instanceof RequirementsInterface && !$this->getDestinationPlugin()->checkRequirements()) { return FALSE; if ($this->getDestinationPlugin() instanceof RequirementsInterface) { $this->getDestinationPlugin()->checkRequirements(); } /** @var \Drupal\migrate\Entity\MigrationInterface[] $required_migrations */ $required_migrations = \Drupal::entityManager()->getStorage('migration')->loadMultiple($this->requirements); $required_migrations = $this->getEntityManager()->getStorage('migration')->loadMultiple($this->requirements); $missing_migrations = array_diff($this->requirements, array_keys($required_migrations)); // Check if the dependencies are in good shape. foreach ($required_migrations as $required_migration) { foreach ($required_migrations as $migration_id => $required_migration) { if (!$required_migration->isComplete()) { return FALSE; $missing_migrations[] = $migration_id; } } if ($missing_migrations) { throw new RequirementsException(String::format('Missing migrations @requirements.', ['@requirements' => implode(', ', $missing_migrations)]), ['requirements' => $missing_migrations]); } catch (\Exception $e) { return FALSE; } return TRUE; /** * Get the entity manager. * * @return \Drupal\Core\Entity\EntityManagerInterface * The entity manager. */ protected function getEntityManager() { if (!isset($this->entityManager)) { $this->entityManager = \Drupal::entityManager(); } return $this->entityManager; } /** Loading
core/modules/migrate/src/Exception/RequirementsException.php 0 → 100644 +70 −0 Changes for core/modules/migrate/src/Exception/RequirementsException.php: 70 added lines, 0 removed lines. Original line number Diff line number Diff line <?php /** * @file * Contains \Drupal\migrate\Exception\RequirementsException. */ namespace Drupal\migrate\Exception; use Exception; /** * Defines an * * @see \Drupal\migrate\Plugin\RequirementsInterface */ class RequirementsException extends \RuntimeException { /** * The missing requirements. * * @var array */ protected $requirements; /** * Constructs a new RequirementsException instance. * * @param string $message * (optional) The Exception message to throw. * @param array $requirements * (optional) The missing requirements. * @param int $code * (optional) The Exception code. * @param \Exception $previous * (optional) The previous exception used for the exception chaining. */ public function __construct($message = "", array $requirements = [], $code = 0, Exception $previous = NULL) { parent::__construct($message, $code, $previous); $this->requirements = $requirements; } /** * Get an array of requirements. * * @return array * The requirements. */ public function getRequirements() { return $this->requirements; } /** * Get the requirements as a string. * * @return string * A formatted requirements string. */ public function getRequirementsString() { $output = ''; foreach ($this->requirements as $requirement_type => $requirements) { foreach ($requirements as $value) { $output .= "$requirement_type: $value. "; } } return trim($output); } }
core/modules/migrate/src/MigrateExecutable.php +11 −2 Changes for core/modules/migrate/src/MigrateExecutable.php: 11 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ use Drupal\Core\Utility\Error; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\Plugin\MigrateIdMapInterface; /** Loading Loading @@ -233,11 +234,19 @@ public function getSource() { */ public function import() { // Knock off migration if the requirements haven't been met. if (!$this->migration->checkRequirements()) { try { $this->migration->checkRequirements(); } catch (RequirementsException $e) { $this->message->display( $this->t('Migration @id did not meet the requirements', array('@id' => $this->migration->id())), 'error'); $this->t('Migration @id did not meet the requirements. @message @requirements', array( '@id' => $this->migration->id(), '@message' => $e->getMessage(), '@requirements' => $e->getRequirementsString(), )), 'error'); return MigrationInterface::RESULT_FAILED; } $return = MigrationInterface::RESULT_COMPLETED; $source = $this->getSource(); $id_map = $this->migration->getIdMap(); Loading
core/modules/migrate/src/Plugin/RequirementsInterface.php +2 −2 Changes for core/modules/migrate/src/Plugin/RequirementsInterface.php: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -15,8 +15,8 @@ interface RequirementsInterface { /** * Checks if requirements for this plugin are OK. * * @return bool * TRUE if it is possible to use the plugin, FALSE if not. * @throws \Drupal\migrate\Exception\RequirementsException * Thrown when requirements are not met. */ public function checkRequirements(); Loading
core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php +4 −1 Changes for core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php: 4 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ use Drupal\Core\Plugin\PluginBase; use Drupal\migrate\Entity\MigrationInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\Plugin\MigrateDestinationInterface; use Drupal\migrate\Plugin\RequirementsInterface; Loading Loading @@ -53,7 +54,9 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition * {@inheritdoc} */ public function checkRequirements() { return $this->pluginDefinition['requirements_met']; if (empty($this->pluginDefinition['requirements_met'])) { throw new RequirementsException(); } } /** Loading