}
/**
- * {@inheritdoc}
+ * Gets the plugin discovery.
+ *
+ * This method overrides DefaultPluginManager::getDiscovery() in order to
+ * search for migration configurations in the MODULENAME/migrations and
+ * MODULENAME/migration_templates directories. Throws a deprecation notice if
+ * the MODULENAME/migration_templates directory exists.
*/
protected function getDiscovery() {
if (!isset($this->discovery)) {
$directories = array_map(function ($directory) {
+ // Check for use of the @deprecated /migration_templates directory.
+ // @todo Remove use of /migration_templates in Drupal 9.0.0.
+ if (is_dir($directory . '/migration_templates')) {
+ @trigger_error('Use of the /migration_templates directory to store migration configuration files is deprecated in Drupal 8.1.0 and will be removed before Drupal 9.0.0. See https://www.drupal.org/node/2920988.', E_USER_DEPRECATED);
+ }
+ // But still accept configurations found in /migration_templates.
return [$directory . '/migration_templates', $directory . '/migrations'];
}, $this->moduleHandler->getModuleDirectories());
// This gets rid of migrations which try to use a non-existent source
// plugin. The common case for this is if the source plugin has, or
// specifies, a non-existent provider.
- $only_with_source_discovery = new NoSourcePluginDecorator($yaml_discovery);
+ $only_with_source_discovery = new NoSourcePluginDecorator($yaml_discovery);
// This gets rid of migrations with explicit providers set if one of the
// providers do not exist before we try to use a potentially non-existing
// deriver. This is a rare case.
}
/**
- * Create migrations given a tag.
- *
- * @param string $tag
- * A migration tag we want to filter by.
- *
- * @return array|\Drupal\migrate\Plugin\MigrationInterface[]
- * An array of migration objects with the given tag.
+ * {@inheritdoc}
*/
public function createInstancesByTag($tag) {
$migrations = array_filter($this->getDefinitions(), function ($migration) use ($tag) {
return $plugin_ids;
}
-
/**
* {@inheritdoc}
*/
$migration->set('requirements', $required_dependency_graph[$migration_id]['paths']);
}
}
- array_multisort($weights, SORT_DESC, SORT_NUMERIC, $migrations);
+ // Sort weights, labels, and keys in the same order as each other.
+ array_multisort(
+ // Use the numerical weight as the primary sort.
+ $weights, SORT_DESC, SORT_NUMERIC,
+ // When migrations have the same weight, sort them alphabetically by ID.
+ array_keys($migrations), SORT_ASC, SORT_NATURAL,
+ $migrations
+ );
return $migrations;
}