| | <?php |
| |
|
| | namespace Kanboard\Console; |
| |
|
| | use Kanboard\Core\Plugin\Base as BasePlugin; |
| | use Kanboard\Core\Plugin\Directory; |
| | use Kanboard\Core\Plugin\Installer; |
| | use LogicException; |
| | use Symfony\Component\Console\Input\InputInterface; |
| | use Symfony\Component\Console\Output\OutputInterface; |
| |
|
| | class PluginUpgradeCommand extends BaseCommand |
| | { |
| | protected function configure() |
| | { |
| | $this |
| | ->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('<error>* Plugin not available in the directory: '.$installedPlugin->getPluginName().'</error>'); |
| | } elseif ($pluginDetails['version'] > $installedPlugin->getPluginVersion()) { |
| | $output->writeln('<comment>* Updating plugin: '.$installedPlugin->getPluginName().'</comment>'); |
| | $installer->update($pluginDetails['download']); |
| | } else { |
| | $output->writeln('<info>* Plugin up to date: '.$installedPlugin->getPluginName().'</info>'); |
| | } |
| | } |
| | return 0; |
| | } |
| |
|
| | protected function getPluginDetails(array $availablePlugins, BasePlugin $installedPlugin) |
| | { |
| | foreach ($availablePlugins as $availablePluginName => $availablePlugin) { |
| | if ($availablePluginName === $installedPlugin->getPluginName()) { |
| | return $availablePlugin; |
| | } |
| | } |
| |
|
| | return null; |
| | } |
| | } |
| |
|