setName('plugin:upgrade') ->setDescription('Update all installed plugins') ; } protected function execute(InputInterface $input, OutputInterface $output): int { if (!Installer::isConfigured()) { throw new LogicException('Kanboard is not configured to install plugins itself'); } $installer = new Installer($this->container); $availablePlugins = Directory::getInstance($this->container)->getAvailablePlugins(); foreach ($this->pluginLoader->getPlugins() as $installedPlugin) { $pluginDetails = $this->getPluginDetails($availablePlugins, $installedPlugin); if ($pluginDetails === null) { $output->writeln('* Plugin not available in the directory: '.$installedPlugin->getPluginName().''); } elseif ($pluginDetails['version'] > $installedPlugin->getPluginVersion()) { $output->writeln('* Updating plugin: '.$installedPlugin->getPluginName().''); $installer->update($pluginDetails['download']); } else { $output->writeln('* Plugin up to date: '.$installedPlugin->getPluginName().''); } } return 0; } protected function getPluginDetails(array $availablePlugins, BasePlugin $installedPlugin) { foreach ($availablePlugins as $availablePluginName => $availablePlugin) { if ($availablePluginName === $installedPlugin->getPluginName()) { return $availablePlugin; } } return null; } }