Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2013-09-20 01:27:58 +0400
committerThomas Steur <thomas.steur@gmail.com>2013-09-20 01:27:58 +0400
commit529e962387352fc60681e79f93f93fb1d78e1e06 (patch)
tree13a7177cc4640457c81501e32e3496736a3ec617 /plugins/CorePluginsAdmin
parentbae55edaabac744a8627f6a116aa0e5bbc4a8d71 (diff)
provide possibility to update directly from the marketplace
Diffstat (limited to 'plugins/CorePluginsAdmin')
-rw-r--r--plugins/CorePluginsAdmin/Controller.php6
-rw-r--r--plugins/CorePluginsAdmin/Marketplace.php59
-rw-r--r--plugins/CorePluginsAdmin/stylesheets/marketplace.less4
-rw-r--r--plugins/CorePluginsAdmin/templates/browsePlugins.twig6
-rw-r--r--plugins/CorePluginsAdmin/templates/browseThemes.twig6
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 %}