diff options
-rw-r--r-- | plugins/CorePluginsAdmin/Controller.php | 6 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/Marketplace.php | 59 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/stylesheets/marketplace.less | 4 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/browsePlugins.twig | 6 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/browseThemes.twig | 6 |
5 files changed, 69 insertions, 12 deletions
diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php index 05e53300ce..431fafbd90 100644 --- a/plugins/CorePluginsAdmin/Controller.php +++ b/plugins/CorePluginsAdmin/Controller.php @@ -145,8 +145,9 @@ class Controller extends \Piwik\Controller\Admin $view->plugins = $marketplace->searchPlugins($query, $sort, $themesOnly = false); $view->query = $query; - $view->nonce = Nonce::getNonce('CorePluginsAdmin.installPlugin'); $view->sort = $sort; + $view->installNonce = Nonce::getNonce('CorePluginsAdmin.installPlugin'); + $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin'); echo $view->render(); } @@ -166,8 +167,9 @@ class Controller extends \Piwik\Controller\Admin $view->plugins = $marketplace->searchPlugins($query, $sort, $themesOnly = true); $view->query = $query; - $view->nonce = Nonce::getNonce('CorePluginsAdmin.installPlugin'); $view->sort = $sort; + $view->installNonce = Nonce::getNonce('CorePluginsAdmin.installPlugin'); + $view->updateNonce = Nonce::getNonce('CorePluginsAdmin.updatePlugin'); echo $view->render(); } diff --git a/plugins/CorePluginsAdmin/Marketplace.php b/plugins/CorePluginsAdmin/Marketplace.php index bda4b4e44d..7b2f99f796 100644 --- a/plugins/CorePluginsAdmin/Marketplace.php +++ b/plugins/CorePluginsAdmin/Marketplace.php @@ -24,6 +24,8 @@ class Marketplace * @var MarketplaceApiClient */ private $client; + private static $pluginUpdates = null; + private static $themeUpdates = null; public function __construct() { @@ -33,35 +35,80 @@ class Marketplace public function searchPlugins($query, $sort, $themesOnly) { if ($themesOnly) { - $plugins = $this->client->searchForThemes('', $query, $sort); + $plugins = $this->client->searchForThemes('', $query, $sort); } else { - $plugins = $this->client->searchForPlugins('', $query, $sort); + $plugins = $this->client->searchForPlugins('', $query, $sort); } $dateFormat = Piwik_Translate('CoreHome_ShortDateFormatWithYear'); foreach ($plugins as $plugin) { - $plugin->isInstalled = PluginsManager::getInstance()->isPluginLoaded($plugin->name); - $plugin->lastUpdated = Date::factory($plugin->lastUpdated)->getLocalized($dateFormat); + $plugin->canBeUpdated = $this->hasPluginUpdate($plugin); + $plugin->isInstalled = PluginsManager::getInstance()->isPluginLoaded($plugin->name); + $plugin->lastUpdated = Date::factory($plugin->lastUpdated)->getLocalized($dateFormat); } return $plugins; } + private function hasPluginUpdate($plugin) + { + if (empty($plugin)) { + return false; + } + + $pluginsHavingUpdate = $this->getPluginsHavingUpdate($plugin->isTheme); + + foreach ($pluginsHavingUpdate as $pluginHavingUpdate) { + if ($plugin->name == $pluginHavingUpdate->name) { + return true; + } + } + + return false; + } + /** * @param bool $themesOnly * @return array */ public function getPluginsHavingUpdate($themesOnly) { - $loadedPlugins = PluginsManager::getInstance()->getLoadedPlugins(); + if ($themesOnly && !is_null(static::$themeUpdates)) { + return static::$themeUpdates; + } else if (!$themesOnly && !is_null(static::$pluginUpdates)) { + return static::$pluginUpdates; + } + + $pluginsHavingUpdate = $this->fetchPluginsHavingUpdate($themesOnly); + + if ($themesOnly) { + static::$themeUpdates = $pluginsHavingUpdate; + } else { + static::$pluginUpdates = $pluginsHavingUpdate; + } + + return $pluginsHavingUpdate; + } + + /** + * @param $themesOnly + * @return array + */ + public function fetchPluginsHavingUpdate($themesOnly) + { + $pluginManager = PluginsManager::getInstance(); + $loadedPlugins = $pluginManager->getLoadedPlugins(); try { if ($themesOnly) { $pluginsHavingUpdate = $this->client->getInfoOfThemesHavingUpdate($loadedPlugins); + return $pluginsHavingUpdate; } else { $pluginsHavingUpdate = $this->client->getInfoOfPluginsHavingUpdate($loadedPlugins); + return $pluginsHavingUpdate; } + } catch (\Exception $e) { $pluginsHavingUpdate = array(); } @@ -71,7 +118,7 @@ class Marketplace if ($loadedPlugin->getPluginName() == $updatePlugin->name) { $updatePlugin->currentVersion = $loadedPlugin->getVersion(); - $updatePlugin->isActivated = PluginsManager::getInstance()->isPluginActivated($updatePlugin->name); + $updatePlugin->isActivated = $pluginManager->isPluginActivated($updatePlugin->name); break; } diff --git a/plugins/CorePluginsAdmin/stylesheets/marketplace.less b/plugins/CorePluginsAdmin/stylesheets/marketplace.less index 5f476d326b..71d3c38847 100644 --- a/plugins/CorePluginsAdmin/stylesheets/marketplace.less +++ b/plugins/CorePluginsAdmin/stylesheets/marketplace.less @@ -52,6 +52,10 @@ .install { float: right; } + .update { + font-weight: bold; + .install + } .more { font-weight: bold; text-decoration: none; diff --git a/plugins/CorePluginsAdmin/templates/browsePlugins.twig b/plugins/CorePluginsAdmin/templates/browsePlugins.twig index f096c4fa2c..5619554e2b 100644 --- a/plugins/CorePluginsAdmin/templates/browsePlugins.twig +++ b/plugins/CorePluginsAdmin/templates/browsePlugins.twig @@ -32,10 +32,12 @@ <div class="plugin"> <div class="content"> - {% if plugin.isInstalled %} + {% if plugin.canBeUpdated %} + <a class="update" href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}">Update</a> + {% elseif plugin.isInstalled %} <span class="install">Installed</span> {% else %} - <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}" + <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}" class="install">Install</a> {% endif %} diff --git a/plugins/CorePluginsAdmin/templates/browseThemes.twig b/plugins/CorePluginsAdmin/templates/browseThemes.twig index 4b379ee3c1..9cf0953e38 100644 --- a/plugins/CorePluginsAdmin/templates/browseThemes.twig +++ b/plugins/CorePluginsAdmin/templates/browseThemes.twig @@ -31,10 +31,12 @@ <div class="plugin"> <div class="content"> - {% if plugin.isInstalled %} + {% if plugin.canBeUpdated %} + <a class="update" href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}">Update</a> + {% elseif plugin.isInstalled %} <span class="install">Installed</span> {% else %} - <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}" + <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}" class="install">Install</a> {% endif %} |