From 7836449148b09dd8d50116ef22b3beb0a9bb9bb8 Mon Sep 17 00:00:00 2001
From: Thomas Steur <tsteur@users.noreply.github.com>
Date: Wed, 24 May 2017 19:34:49 +1200
Subject: [PATCH] add possibility to specify multiple plugins (#11733)

---
 CHANGELOG.md                                  |  3 +++
 .../Commands/ActivatePlugin.php               | 26 ++++++++++---------
 .../Commands/DeactivatePlugin.php             | 18 +++++++------
 3 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ce5435b66..d2ee7803cc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,9 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
 * The events `ScheduledTasks.shouldExecuteTask`, `ScheduledTasks.execute`, `ScheduledTasks.execute.end` have been added to customize the behaviour of scheduled tasks.
 * A new event `CustomPiwikJs.shouldAddTrackerFile` has been added to let plugins customize which tracker files should be included in piwik.js JavaScript tracker
 
+### New commands
+* The commands `plugin:activate` and `plugin:deactivate` can now activate and deactivate multiple plugins at once
+
 ## Piwik 3.0.4
 
 ### New APIs
diff --git a/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php b/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
index eae153481f..a62f707c1d 100644
--- a/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
+++ b/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
@@ -23,27 +23,29 @@ class ActivatePlugin extends ConsoleCommand
     {
         $this->setName('plugin:activate');
         $this->setDescription('Activate a plugin.');
-        $this->addArgument('plugin', InputArgument::REQUIRED, 'The plugin name.');
+        $this->addArgument('plugin', InputArgument::IS_ARRAY, 'The plugin name you want to activate. Multiple plugin names can be specified separated by a space.');
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $pluginManager = Manager::getInstance();
 
-        $plugin = $input->getArgument('plugin');
+        $plugins = $input->getArgument('plugin');
 
-        if ($pluginManager->isPluginActivated($plugin)) {
-            $output->writeln('<comment>The plugin is already activated.</comment>');
-            return;
-        }
+        foreach ($plugins as $plugin) {
+            if ($pluginManager->isPluginActivated($plugin)) {
+                $output->writeln(sprintf('<comment>The plugin %s is already activated.</comment>', $plugin));
+                continue;
+            }
 
-        if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
-            $output->writeln("<error>$dependencies</error>");
-            return;
-        }
+            if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
+                $output->writeln("<error>$dependencies</error>");
+                continue;
+            }
 
-        $pluginManager->activatePlugin($plugin);
+            $pluginManager->activatePlugin($plugin);
 
-        $output->writeln("Activated plugin <info>$plugin</info>");
+            $output->writeln("Activated plugin <info>$plugin</info>");
+        }
     }
 }
diff --git a/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php b/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
index 33f5671e48..451529368b 100644
--- a/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
+++ b/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
@@ -23,22 +23,24 @@ class DeactivatePlugin extends ConsoleCommand
     {
         $this->setName('plugin:deactivate');
         $this->setDescription('Deactivate a plugin.');
-        $this->addArgument('plugin', InputArgument::REQUIRED, 'The plugin name.');
+        $this->addArgument('plugin', InputArgument::IS_ARRAY, 'The plugin name you want to activate. Multiple plugin names can be specified separated by a space.');
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $pluginManager = Manager::getInstance();
 
-        $plugin = $input->getArgument('plugin');
+        $plugins = $input->getArgument('plugin');
 
-        if (!$pluginManager->isPluginActivated($plugin)) {
-            $output->writeln('<comment>The plugin is already deactivated.</comment>');
-            return;
-        }
+        foreach ($plugins as $plugin) {
+            if (!$pluginManager->isPluginActivated($plugin)) {
+                $output->writeln(sprintf('<comment>The plugin %s is already deactivated.</comment>', $plugin));
+                continue;
+            }
 
-        $pluginManager->deactivatePlugin($plugin);
+            $pluginManager->deactivatePlugin($plugin);
 
-        $output->writeln("Deactivated plugin <info>$plugin</info>");
+            $output->writeln("Deactivated plugin <info>$plugin</info>");
+        }
     }
 }
-- 
GitLab