5 * Contains \Drupal\Console\Command\Migrate\RollBackCommand
8 namespace Drupal\Console\Command\Migrate;
10 use Symfony\Component\Console\Input\InputArgument;
11 use Symfony\Component\Console\Input\InputOption;
12 use Symfony\Component\Console\Input\InputInterface;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Console\Command\Shared\MigrationTrait;
15 use Drupal\Console\Annotations\DrupalCommand;
16 use Drupal\Console\Core\Command\Command;
17 use Drupal\migrate_plus\Entity\MigrationGroup;
18 use Drupal\migrate\Plugin\MigrationInterface;
19 use Drupal\migrate\MigrateExecutable;
20 use Drupal\Console\Utils\MigrateExecuteMessageCapture;
21 use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
25 * extension = "migrate",
26 * extensionType = "module"
29 class RollBackCommand extends Command
34 * @var MigrationPluginManagerInterface $pluginManagerMigration
36 protected $pluginManagerMigration;
39 * RollBackCommand constructor.
41 * @param MigrationPluginManagerInterface $pluginManagerMigration
43 public function __construct(
44 MigrationPluginManagerInterface $pluginManagerMigration
46 $this->pluginManagerMigration = $pluginManagerMigration;
47 parent::__construct();
50 protected function configure()
53 ->setName('migrate:rollback')
54 ->setDescription($this->trans('commands.migrate.rollback.description'))
55 ->addArgument('migration-ids', InputArgument::IS_ARRAY, $this->trans('commands.migrate.rollback.arguments.id'))
59 InputOption::VALUE_OPTIONAL,
60 $this->trans('commands.migrate.setup.options.source-base-path')
61 )->setAliases(['mir']);
65 protected function execute(InputInterface $input, OutputInterface $output)
67 $sourceBasepath = $input->getOption('source-base_path');
68 $configuration['source']['constants']['source_base_path'] = rtrim($sourceBasepath, '/') . '/';
69 // --migration-id prefix
70 $migration_id = $input->getArgument('migration-ids');
71 $migrations_list = array_keys($this->getMigrations($version_tag));
72 // If migrations weren't provided finish execution
73 if (empty($migration_id)) {
78 if (!in_array('all', $migration_id)) {
79 $migration_ids = $migration_id;
81 $migration_ids = $migrations_list;
84 foreach ($migration_ids as $migration) {
85 if (!in_array($migration, $migrations_list)) {
86 $this->getIo()->warning(
88 $this->trans('commands.migrate.rollback.messages.not-available'),
94 $migration_service = $this->pluginManagerMigration->createInstance($migration, $configuration);
95 if ($migration_service) {
96 $messages = new MigrateExecuteMessageCapture();
97 $executable = new MigrateExecutable($migration_service, $messages);
99 $migration_status = $executable->rollback();
100 switch ($migration_status) {
101 case MigrationInterface::RESULT_COMPLETED:
102 $this->getIo()->info(
104 $this->trans('commands.migrate.rollback.messages.processing'),
109 case MigrationInterface::RESULT_INCOMPLETE:
110 $this->getIo()->info(
112 $this->trans('commands.migrate.execute.messages.importing-incomplete'),
117 case MigrationInterface::RESULT_STOPPED:
118 $this->getIo()->error(
120 $this->trans('commands.migrate.execute.messages.import-stopped'),
135 protected function interact(InputInterface $input, OutputInterface $output)
138 $migrations_list = $this->getMigrations($version_tag);
140 // --migration-id prefix
141 $migration_id = $input->getArgument('migration-ids');
144 if (!$migration_id) {
145 $migrations_ids = [];
148 $migration_id = $this->getIo()->choiceNoList(
149 $this->trans('commands.migrate.execute.questions.id'),
150 array_keys($migrations_list),
154 if (empty($migration_id) || $migration_id == 'all') {
155 // Only add all if it's the first option
156 if (empty($migrations_ids) && $migration_id == 'all') {
157 $migrations_ids[] = $migration_id;
161 $migrations_ids[] = $migration_id;
165 $input->setArgument('migration-ids', $migrations_ids);
168 // --source-base_path
169 $sourceBasepath = $input->getOption('source-base_path');
170 if (!$sourceBasepath) {
171 $sourceBasepath = $this->getIo()->ask(
172 $this->trans('commands.migrate.setup.questions.source-base-path'),
175 $input->setOption('source-base_path', $sourceBasepath);