From 1a3b0681ccee5db70cc9756be9f78307a5e3d2cb Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Mon, 11 Nov 2013 00:16:15 +0000 Subject: refs #4241 let plugins add new console commands --- config/global.ini.php | 1 + console | 3 ++ core/Console.php | 76 ++++++++++++++++++------------------- plugins/CoreConsole/CoreConsole.php | 50 ++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 39 deletions(-) create mode 100644 plugins/CoreConsole/CoreConsole.php diff --git a/config/global.ini.php b/config/global.ini.php index 52f267fac7..50c8097d46 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -528,6 +528,7 @@ Plugins[] = UsersManager Plugins[] = SitesManager Plugins[] = Installation Plugins[] = CoreUpdater +Plugins[] = CoreConsole Plugins[] = ScheduledReports Plugins[] = UserCountryMap Plugins[] = Live diff --git a/console b/console index a1a51328b4..dc971e5e1a 100755 --- a/console +++ b/console @@ -8,6 +8,9 @@ require_once PIWIK_INCLUDE_PATH . '/vendor/autoload.php'; require_once PIWIK_INCLUDE_PATH . '/core/Loader.php'; require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php'; +// load all plugins +Piwik\Plugin\Manager::getInstance()->returnLoadedPluginsInfo(); + if (!Piwik\Common::isPhpCliMode()) { exit; } diff --git a/core/Console.php b/core/Console.php index 8dc924f01d..f938c8826a 100644 --- a/core/Console.php +++ b/core/Console.php @@ -10,53 +10,51 @@ */ namespace Piwik; -use Piwik\Plugins\CoreConsole\CodeCoverage; -use Piwik\Plugins\CoreConsole\GenerateApi; -use Piwik\Plugins\CoreConsole\GenerateController; -use Piwik\Plugins\CoreConsole\GeneratePlugin; -use Piwik\Plugins\CoreConsole\GenerateSettings; -use Piwik\Plugins\CoreConsole\GenerateVisualizationPlugin; -use Piwik\Plugins\CoreConsole\GitCommit; -use Piwik\Plugins\CoreConsole\GitPull; -use Piwik\Plugins\CoreConsole\GitPush; -use Piwik\Plugins\CoreConsole\RunTests; -use Piwik\Plugins\CoreConsole\Translations\CreatePull; -use Piwik\Plugins\CoreConsole\Translations\FetchFromOTrance; -use Piwik\Plugins\CoreConsole\Translations\LanguageCodes; -use Piwik\Plugins\CoreConsole\Translations\LanguageNames; -use Piwik\Plugins\CoreConsole\Translations\PluginsWithTranslations; -use Piwik\Plugins\CoreConsole\Translations\SetTranslations; -use Piwik\Plugins\CoreConsole\Translations\Update; -use Piwik\Plugins\CoreConsole\WatchLog; -use Piwik\Plugins\CoreConsole\GenerateTest; use Symfony\Component\Console\Application; class Console { public function run() { - $console = new Application(); + $console = new Application(); + $commands = $this->getAvailableCommands(); - $console->add(new RunTests()); - $console->add(new GeneratePlugin()); - $console->add(new GenerateApi()); - $console->add(new GenerateSettings()); - $console->add(new GenerateController()); - $console->add(new GenerateVisualizationPlugin()); - $console->add(new GenerateTest()); - $console->add(new WatchLog()); - $console->add(new GitPull()); - $console->add(new GitCommit()); - $console->add(new GitPush()); - $console->add(new PluginsWithTranslations()); - $console->add(new LanguageCodes()); - $console->add(new LanguageNames()); - $console->add(new FetchFromOTrance()); - $console->add(new SetTranslations()); - $console->add(new Update()); - $console->add(new CreatePull()); - $console->add(new CodeCoverage()); + foreach ($commands as $command) { + if (class_exists($command)) { + $console->add(new $command); + } else { + Log::warning(sprintf('Cannot add command %s, class does not exist.', $command)); + } + } $console->run(); } + + /** + * Returns a list of available command classnames. + * + * @return string[] + */ + private function getAvailableCommands() + { + $commands = array(); + + /** + * Triggered when gathering all available console commands. Plugins that want to expose new console commands + * should subscribe to this event and add commands to the incoming array. + * + * **Example** + * ``` + * public function addConsoleCommands(&$commands) + * { + * $commands[] = 'Piwik\Plugins\MyPlugin\Commands\MyCommand'; + * } + * ``` + * + * @param array &$commands An array containing a list of command classnames. + */ + Piwik::postEvent('Console.addCommands', array(&$commands)); + + return $commands; + } } diff --git a/plugins/CoreConsole/CoreConsole.php b/plugins/CoreConsole/CoreConsole.php new file mode 100644 index 0000000000..9d3a29f93c --- /dev/null +++ b/plugins/CoreConsole/CoreConsole.php @@ -0,0 +1,50 @@ + 'addConsoleCommands' + ); + } + + public function addConsoleCommands(&$commands) + { + $commands[] = 'Piwik\Plugins\CoreConsole\CodeCoverage'; + $commands[] = 'Piwik\Plugins\CoreConsole\GenerateApi'; + $commands[] = 'Piwik\Plugins\CoreConsole\GenerateController'; + $commands[] = 'Piwik\Plugins\CoreConsole\GeneratePlugin'; + $commands[] = 'Piwik\Plugins\CoreConsole\GenerateSettings'; + $commands[] = 'Piwik\Plugins\CoreConsole\GenerateVisualizationPlugin'; + $commands[] = 'Piwik\Plugins\CoreConsole\GitCommit'; + $commands[] = 'Piwik\Plugins\CoreConsole\GitPull'; + $commands[] = 'Piwik\Plugins\CoreConsole\GitPush'; + $commands[] = 'Piwik\Plugins\CoreConsole\RunTests'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\CreatePull'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\FetchFromOTrance'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\LanguageCodes'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\LanguageNames'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\PluginsWithTranslations'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\SetTranslations'; + $commands[] = 'Piwik\Plugins\CoreConsole\Translations\Update'; + $commands[] = 'Piwik\Plugins\CoreConsole\WatchLog'; + $commands[] = 'Piwik\Plugins\CoreConsole\GenerateTest'; + } +} \ No newline at end of file -- cgit v1.2.3