diff --git a/framework/core/src/Console/Server.php b/framework/core/src/Console/Server.php index bd1a7d1d6..c5a8d6b4d 100644 --- a/framework/core/src/Console/Server.php +++ b/framework/core/src/Console/Server.php @@ -14,6 +14,7 @@ namespace Flarum\Console; use Flarum\Console\Event\Configuring; use Flarum\Database\Console\GenerateMigrationCommand; use Flarum\Database\Console\MigrateCommand; +use Flarum\Database\Console\ResetCommand; use Flarum\Foundation\Application; use Flarum\Foundation\Console\CacheClearCommand; use Flarum\Foundation\Console\InfoCommand; @@ -58,6 +59,7 @@ class Server $commands = [ InstallCommand::class, MigrateCommand::class, + ResetCommand::class, GenerateMigrationCommand::class, ]; diff --git a/framework/core/src/Database/Console/ResetCommand.php b/framework/core/src/Database/Console/ResetCommand.php new file mode 100644 index 000000000..63eb3481c --- /dev/null +++ b/framework/core/src/Database/Console/ResetCommand.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Database\Console; + +use Flarum\Console\AbstractCommand; +use Flarum\Extension\ExtensionManager; +use Symfony\Component\Console\Input\InputOption; + +class ResetCommand extends AbstractCommand +{ + /** + * @var ExtensionManager + */ + protected $manager; + + /** + * @param ExtensionManager $manager + */ + public function __construct(ExtensionManager $manager) + { + $this->manager = $manager; + + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setName('migrate:reset') + ->setDescription('Run all migrations down for an extension') + ->addOption( + 'extension', + null, + InputOption::VALUE_REQUIRED, + 'The extension to reset migrations for.' + ); + } + + /** + * {@inheritdoc} + */ + protected function fire() + { + $extensionName = $this->input->getOption('extension'); + + if (! $extensionName) { + $this->info('No extension specified. Please check command syntax.'); + + return; + } + + $extension = $this->manager->getExtension($extensionName); + + if (! $extension) { + $this->info('Could not find extension '.$extensionName); + + return; + } + + $this->info('Rolling back extension: '.$extensionName); + + $notes = $this->manager->migrateDown($extension); + + foreach ($notes as $note) { + $this->info($note); + } + + $this->info('DONE.'); + } +} diff --git a/framework/core/src/Extension/ExtensionManager.php b/framework/core/src/Extension/ExtensionManager.php index 6d0f0b789..dc773b364 100644 --- a/framework/core/src/Extension/ExtensionManager.php +++ b/framework/core/src/Extension/ExtensionManager.php @@ -247,10 +247,11 @@ class ExtensionManager * Runs the database migrations to reset the database to its old state. * * @param Extension $extension + * @return array Notes from the migrator. */ public function migrateDown(Extension $extension) { - $this->migrate($extension, false); + return $this->migrate($extension, false); } /**