From f78f05c269da2534f063bbe280c0147b8b83730d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Almeida=20Santos?= <79864209+jsantos42@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:31:39 +0200 Subject: [PATCH] fix: install the remaining files of the plugin --- .../Commands/InstallPlugin.php | 61 ++++++++++++++----- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/plugins/CorePluginsAdmin/Commands/InstallPlugin.php b/plugins/CorePluginsAdmin/Commands/InstallPlugin.php index cf0e306ad20..ba499718cd0 100644 --- a/plugins/CorePluginsAdmin/Commands/InstallPlugin.php +++ b/plugins/CorePluginsAdmin/Commands/InstallPlugin.php @@ -9,18 +9,19 @@ namespace Piwik\Plugins\CorePluginsAdmin\Commands; +use Piwik\Container\StaticContainer; use Piwik\Plugin\ConsoleCommand; use Piwik\Plugin\Manager; -use Piwik\Plugins\Marketplace\Plugins; +use Piwik\Plugins\CorePluginsAdmin\PluginInstaller; use Piwik\Plugins\Marketplace\Marketplace; -use Piwik\Container\StaticContainer; +use Piwik\Plugins\Marketplace\Plugins; /** * plugin:install console command. */ class InstallPlugin extends ConsoleCommand { - protected function configure() + protected function configure(): void { $this->setName('plugin:install'); $this->setDescription('Install a plugin.'); @@ -46,29 +47,40 @@ protected function doExecute(): int $output->writeln(sprintf("Marketplace is not enabled, can't install plugins.")); return self::FAILURE; } + try { - $this->fetchPluginJson($pluginName, $output); + $this->fetchPluginJson($pluginName); } catch (\Piwik\Plugins\Marketplace\Api\Exception $e) { - $output->writeln(sprintf("Requested plugin does not exist.")); + $output->writeln(sprintf("%s", $e->getMessage())); + continue; + // Catch the unnamed core/Http.php(751) exception if no connection: + // curl_exec: Could not resolve host: plugins.matomo.org. Hostname requested was: plugins.matomo.org + } catch (\Exception $e) { + $output->writeln(sprintf("%s", $e->getMessage())); continue; } - } - - $plugin = $pluginManager->loadPlugin($pluginName); - if ($plugin->hasMissingDependencies()) { - $output->writeln(sprintf('The plugin %s is not compatible with the current Matomo version.', $pluginName)); + if ($this->hasMissingDependencies($pluginName, $pluginManager)) { + $output->writeln(sprintf('The plugin %s is not compatible with the current Matomo version.', $pluginName)); + continue; + } + } + try { + $this->installPlugin($pluginName); + $output->writeln(sprintf("Installed plugin %s", $pluginName)); + } catch (\Piwik\Plugins\CorePluginsAdmin\PluginInstallerException $e) { + $output->writeln(sprintf("%s", $e->getMessage())); continue; } - - $pluginManager->installLoadedPlugins(); - $output->writeln("Installed plugin $pluginName"); } return self::SUCCESS; } - private function fetchPluginJson($pluginName, $output): void + /** + * @param string $pluginName + */ + private function fetchPluginJson($pluginName): void { $marketplacePlugins = StaticContainer::get(Plugins::class); $pluginInfo = $marketplacePlugins->getPluginInfo($pluginName); @@ -82,4 +94,25 @@ private function fetchPluginJson($pluginName, $output): void file_put_contents($pluginJsonPath, $pluginJson); } + + /** + * @param string $pluginName + * @param Piwik\Plugin\Manager $pluginManager + */ + private function hasMissingDependencies($pluginName, $pluginManager): bool + { + $plugin = $pluginManager->loadPlugin($pluginName); + + return $plugin->hasMissingDependencies(); + } + + /** + * @param string $pluginName + */ + private function installPlugin($pluginName): void + { + $marketplaceClient = StaticContainer::getContainer()->make('Piwik\Plugins\Marketplace\Api\Client'); + $pluginInstaller = new PluginInstaller($marketplaceClient); + $pluginInstaller->installOrUpdatePluginFromMarketplace($pluginName); + } }