sourceManager = $source_manager; $this->configFactory = $config_factory; } /** * Returns the migration tags that trigger source_module enforcement. * * @return string[] */ protected function getEnforcedSourceModuleTags() { if ($this->enforcedSourceModuleTags === NULL) { $this->enforcedSourceModuleTags = $this->configFactory ->get('migrate_drupal.settings') ->get('enforce_source_module_tags') ?: []; } return $this->enforcedSourceModuleTags; } /** * {@inheritdoc} */ public function processDefinition(&$definition, $plugin_id) { parent::processDefinition($definition, $plugin_id); // If the migration has no tags, we don't need to enforce the source_module // annotation property. if (empty($definition['migration_tags'])) { return; } // Check if the migration has any of the tags that trigger source_module // enforcement. $applied_tags = array_intersect($this->getEnforcedSourceModuleTags(), $definition['migration_tags']); if ($applied_tags) { // Throw an exception if the source plugin definition does not define a // source_module. $source_id = $definition['source']['plugin']; $source_definition = $this->sourceManager->getDefinition($source_id); if (empty($source_definition['source_module'])) { throw new BadPluginDefinitionException($source_id, 'source_module'); } } } }