diff --git a/framework/core/src/Console/ConsoleServiceProvider.php b/framework/core/src/Console/ConsoleServiceProvider.php index 8252f78a0..d026b71fc 100644 --- a/framework/core/src/Console/ConsoleServiceProvider.php +++ b/framework/core/src/Console/ConsoleServiceProvider.php @@ -12,6 +12,7 @@ namespace Flarum\Console; use Flarum\Console\Cache\Factory; use Flarum\Database\Console\MigrateCommand; use Flarum\Database\Console\ResetCommand; +use Flarum\Extension\Console\ToggleExtensionCommand; use Flarum\Foundation\AbstractServiceProvider; use Flarum\Foundation\Console\AssetsPublishCommand; use Flarum\Foundation\Console\CacheClearCommand; @@ -63,7 +64,8 @@ class ConsoleServiceProvider extends AbstractServiceProvider MigrateCommand::class, ResetCommand::class, ScheduleListCommand::class, - ScheduleRunCommand::class + ScheduleRunCommand::class, + ToggleExtensionCommand::class // Used internally to create DB dumps before major releases. // \Flarum\Database\Console\GenerateDumpCommand::class ]; diff --git a/framework/core/src/Extension/Console/ToggleExtensionCommand.php b/framework/core/src/Extension/Console/ToggleExtensionCommand.php new file mode 100644 index 000000000..ff272d362 --- /dev/null +++ b/framework/core/src/Extension/Console/ToggleExtensionCommand.php @@ -0,0 +1,78 @@ +extensionManager = $extensionManager; + + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setName('extension:enable') + ->setAliases(['extension:disable']) + ->setDescription('Enable or disable an extension.') + ->addArgument('extension-id', null, 'The ID of the extension to enable or disable.'); + } + + /** + * {@inheritdoc} + */ + protected function fire() + { + $name = $this->input->getArgument('extension-id'); + $enabling = $this->input->getFirstArgument() === 'extension:enable'; + + if ($this->extensionManager->getExtension($name) === null) { + $this->error("There are no extensions by the ID of '$name'."); + + return; + } + + switch ($enabling) { + case true: + if ($this->extensionManager->isEnabled($name)) { + $this->info("The '$name' extension is already enabled."); + + return; + } else { + $this->info("Enabling '$name' extension..."); + $this->extensionManager->enable($name); + } + break; + case false: + if (! $this->extensionManager->isEnabled($name)) { + $this->info("The '$name' extension is already disabled."); + + return; + } else { + $this->info("Disabling '$name' extension..."); + $this->extensionManager->disable($name); + } + break; + } + } +}