setName('plugin:install-or-update'); $this->setDescription('Install or update a plugin.'); $this->addOptionalArgument('plugin', 'The name of the plugin you want to install or update. Multiple plugin names can be specified separated by a space.', null, true); } protected function doExecute(): int { PiwikConfig::getInstance()->checkConfigIsWritable(); $input = $this->getInput(); $output = $this->getOutput(); $pluginManager = Manager::getInstance(); if (!Marketplace::isMarketplaceEnabled()) { $output->writeln(sprintf("Marketplace is not enabled, can't install or update plugins.")); return self::FAILURE; } $pluginNames = $input->getArgument('plugin'); foreach ($pluginNames as $pluginName) { try { $this->installPlugin($pluginName); $output->writeln(sprintf("Installed or updated plugin %s", $pluginName)); } catch (\Piwik\Plugins\CorePluginsAdmin\PluginInstallerException $e) { $output->writeln(sprintf("Unable to install or update plugin %s. %s", $pluginName, $e->getMessage())); continue; } } return self::SUCCESS; } private function installPlugin(string $pluginName): void { $pluginInstaller = StaticContainer::get(PluginInstaller::class); $pluginInstaller->installOrUpdatePluginFromMarketplace($pluginName); $pluginManager = Manager::getInstance(); $pluginManager->loadPlugin($pluginName); $pluginManager->installLoadedPlugins(); } }