From 8ba05940e9ee76e95ce808d8da163c2af29e4e93 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Tue, 24 May 2016 21:39:36 -0400 Subject: Filter non compatible plugins --- app/Console/PluginUpgradeCommand.php | 3 +- app/Controller/PluginController.php | 3 +- app/Core/Plugin/Directory.php | 56 ++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/Core/Plugin/Directory.php (limited to 'app') diff --git a/app/Console/PluginUpgradeCommand.php b/app/Console/PluginUpgradeCommand.php index 6ec5836d..839124b1 100644 --- a/app/Console/PluginUpgradeCommand.php +++ b/app/Console/PluginUpgradeCommand.php @@ -3,6 +3,7 @@ namespace Kanboard\Console; use Kanboard\Core\Plugin\Base as BasePlugin; +use Kanboard\Core\Plugin\Directory; use Kanboard\Core\Plugin\Installer; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -24,7 +25,7 @@ class PluginUpgradeCommand extends BaseCommand } $installer = new Installer($this->container); - $availablePlugins = $this->httpClient->getJson(PLUGIN_API_URL); + $availablePlugins = Directory::getInstance($this->container)->getAvailablePlugins(); foreach ($this->pluginLoader->getPlugins() as $installedPlugin) { $pluginDetails = $this->getPluginDetails($availablePlugins, $installedPlugin); diff --git a/app/Controller/PluginController.php b/app/Controller/PluginController.php index b6f9a33b..7b9d64d9 100644 --- a/app/Controller/PluginController.php +++ b/app/Controller/PluginController.php @@ -2,6 +2,7 @@ namespace Kanboard\Controller; +use Kanboard\Core\Plugin\Directory; use Kanboard\Core\Plugin\Installer; use Kanboard\Core\Plugin\PluginInstallerException; @@ -40,7 +41,7 @@ class PluginController extends BaseController $this->response->html($this->helper->layout->plugin('plugin/directory', array( 'installed_plugins' => $installedPlugins, - 'available_plugins' => $this->httpClient->getJson(PLUGIN_API_URL), + 'available_plugins' => Directory::getInstance($this->container)->getAvailablePlugins(), 'title' => t('Plugin Directory'), 'is_configured' => Installer::isConfigured(), ))); diff --git a/app/Core/Plugin/Directory.php b/app/Core/Plugin/Directory.php new file mode 100644 index 00000000..21f11ca9 --- /dev/null +++ b/app/Core/Plugin/Directory.php @@ -0,0 +1,56 @@ +httpClient->getJson($url); + $plugins = array_filter($plugins, array($this, 'isCompatible')); + $plugins = array_filter($plugins, array($this, 'isInstallable')); + return $plugins; + } + + /** + * Filter plugins + * + * @param array $plugin + * @param string $appVersion + * @return bool + */ + public function isCompatible(array $plugin, $appVersion = APP_VERSION) + { + if (strpos($appVersion, 'master') !== false) { + return true; + } + + return $plugin['compatible_version'] === $appVersion; + } + + /** + * Filter plugins + * + * @param array $plugin + * @return bool + */ + public function isInstallable(array $plugin) + { + return $plugin['remote_install']; + } +} -- cgit v1.2.3