diff --git a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php index 2acd41b..66f94b0 100644 --- a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php +++ b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php @@ -284,7 +284,10 @@ protected function findDefinitions() { if (is_object($plugin_definition) && !($plugin_definition = (array) $plugin_definition)) { continue; } - if (isset($plugin_definition['provider']) && !in_array($plugin_definition['provider'], array('core', 'component')) && !$this->providerExists($plugin_definition['provider'])) { + $non_existing_provider = function ($provider) { + return !in_array($provider, ['core', 'component']) && !$this->providerExists($provider); + }; + if (isset($plugin_definition['provider']) && array_filter((array) $plugin_definition['provider'], $non_existing_provider)) { unset($definitions[$plugin_id]); } } diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php index f0e6493..a1f8e98 100644 --- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php +++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php @@ -68,7 +68,8 @@ protected function getDiscovery() { }, $this->moduleHandler->getModuleDirectories()); $yaml_discovery = new YamlDirectoryDiscovery($directories, 'migrate'); - $this->discovery = new ContainerDerivativeDiscoveryDecorator($yaml_discovery); + $provider_discovery = new ProviderDiscovery($yaml_discovery); + $this->discovery = new ContainerDerivativeDiscoveryDecorator($provider_discovery); } return $this->discovery; } diff --git a/core/modules/migrate/src/Plugin/ProviderDiscovery.php b/core/modules/migrate/src/Plugin/ProviderDiscovery.php new file mode 100644 index 0000000..50887c0 --- /dev/null +++ b/core/modules/migrate/src/Plugin/ProviderDiscovery.php @@ -0,0 +1,41 @@ +decorated = $decorated; + } + + /** + * {@inheritdoc} + */ + public function getDefinition($plugin_id, $exception_on_invalid = TRUE) { + $plugin_definition = $this->decorated->getDefinition($plugin_id, FALSE); + $plugin_definition += ['provider' => []]; + $plugin_definition['provider'] = (array) $plugin_definition['provider']; + $source_plugin_definition = \Drupal::service('plugin.manager.migrate.source')->getDefinition($plugin_definition['source']['plugin']); + if (isset($source_plugin_definition['provider'])) { + $plugin_definition['provider'] = array_merge($plugin_definition['provider'], $source_plugin_definition['provider']); + } + return $plugin_definition; + } + +} diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php index c70fd27..67a8b54 100644 --- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php +++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php @@ -9,7 +9,8 @@ * Drupal 6 node source from database. * * @MigrateSource( - * id = "d6_node" + * id = "d6_node", + * provider = {"migrate_drupal", "node"} * ) */ class Node extends DrupalSqlBase {