Skip to content
Extraits de code Groupes Projets
Valider 4fbe9960 rédigé par mattab's avatar mattab
Parcourir les fichiers

Merge remote-tracking branch 'origin/master'

parents e3bd0c0b e35ae4f8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -14,10 +14,12 @@ use Piwik\Common; ...@@ -14,10 +14,12 @@ use Piwik\Common;
use Piwik\Config; use Piwik\Config;
use Piwik\Filechecks; use Piwik\Filechecks;
use Piwik\Filesystem; use Piwik\Filesystem;
use Piwik\Nonce;
use Piwik\Piwik; use Piwik\Piwik;
use Piwik\Plugin; use Piwik\Plugin;
use Piwik\Url; use Piwik\Url;
use Piwik\View; use Piwik\View;
use Piwik\PluginsManager;
/** /**
* *
...@@ -28,18 +30,50 @@ class Controller extends \Piwik\Controller\Admin ...@@ -28,18 +30,50 @@ class Controller extends \Piwik\Controller\Admin
private $validSortMethods = array('popular', 'newest', 'alpha'); private $validSortMethods = array('popular', 'newest', 'alpha');
private $defaultSortMethod = 'popular'; private $defaultSortMethod = 'popular';
public function activatePlugin()
{
$pluginName = Common::getRequestVar('pluginName', '', 'string');
$nonce = Common::getRequestVar('nonce', '', 'string');
if (empty($pluginName)) {
return;
}
if (!Nonce::verifyNonce('CorePluginsAdmin.activatePlugin', $nonce)) {
// todo display error
return;
}
Nonce::discardNonce('CorePluginsAdmin.activatePlugin');
PluginsManager::getInstance()->activatePlugin($pluginName);
$this->extend();
}
public function installPlugin() public function installPlugin()
{ {
$pluginName = Common::getRequestVar('pluginName', '', 'string'); $pluginName = Common::getRequestVar('pluginName', '', 'string');
$nonce = Common::getRequestVar('nonce', '', 'string');
if (empty($pluginName)) { if (empty($pluginName)) {
return; return;
} }
if (Nonce::verifyNonce('CorePluginsAdmin.installPlugin', $nonce)) {
// todo display error
return;
}
Nonce::discardNonce('CorePluginsAdmin.installPlugin');
$pluginInstaller = new PluginInstaller($pluginName); $pluginInstaller = new PluginInstaller($pluginName);
$pluginInstaller->installOrUpdatePluginFromMarketplace(); $pluginInstaller->installOrUpdatePluginFromMarketplace();
$marketplace = new MarketplaceApiClient();
// \Piwik\PluginsManager::getInstance()->activatePlugin($pluginName); $view = $this->configureView('@CorePluginsAdmin/installPlugin');
$view->plugin = $marketplace->getPluginInfo($pluginName);
$view->nonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
echo $view->render();
} }
public function browsePlugins() public function browsePlugins()
...@@ -55,6 +89,7 @@ class Controller extends \Piwik\Controller\Admin ...@@ -55,6 +89,7 @@ class Controller extends \Piwik\Controller\Admin
$view = $this->configureView('@CorePluginsAdmin/browsePlugins'); $view = $this->configureView('@CorePluginsAdmin/browsePlugins');
$view->plugins = $marketplace->searchForPlugins('', $query, $sort); $view->plugins = $marketplace->searchForPlugins('', $query, $sort);
$view->query = $query; $view->query = $query;
$view->nonce = Nonce::getNonce('CorePluginsAdmin.installPlugin');
echo $view->render(); echo $view->render();
} }
...@@ -72,6 +107,7 @@ class Controller extends \Piwik\Controller\Admin ...@@ -72,6 +107,7 @@ class Controller extends \Piwik\Controller\Admin
$view = $this->configureView('@CorePluginsAdmin/browseThemes'); $view = $this->configureView('@CorePluginsAdmin/browseThemes');
$view->plugins = $marketplace->searchForThemes('', $query, $sort); $view->plugins = $marketplace->searchForThemes('', $query, $sort);
$view->query = $query; $view->query = $query;
$view->nonce = Nonce::getNonce('CorePluginsAdmin.installPlugin');
echo $view->render(); echo $view->render();
} }
......
...@@ -17,13 +17,19 @@ use Piwik\Http; ...@@ -17,13 +17,19 @@ use Piwik\Http;
*/ */
class MarketplaceApiClient class MarketplaceApiClient
{ {
private $domain = 'http://plugins.piwik.org';
private function fetch($method, $params) /**
* @var array array(pluginName => stdClass pluginInfo)
*/
private static $pluginCache = array();
private function fetch($action, $params)
{ {
$endpoint = 'http://plugins.piwik.org/api/1.0/'; $endpoint = $this->domain . '/api/1.0/';
$query = http_build_query($params); $query = http_build_query($params);
$url = sprintf('%s%s?%s', $endpoint, $method, $query); $url = sprintf('%s%s?%s', $endpoint, $action, $query);
$result = Http::sendHttpRequest($url, 5); $result = Http::sendHttpRequest($url, 5);
$result = json_decode($result); $result = json_decode($result);
...@@ -31,15 +37,21 @@ class MarketplaceApiClient ...@@ -31,15 +37,21 @@ class MarketplaceApiClient
return $result; return $result;
} }
private function getInfo($name) public function getPluginInfo($name)
{ {
$method = sprintf('plugins/%s/info', $name); if (array_key_exists($name, static::$pluginCache)) {
return $this->fetch($method, array()); return static::$pluginCache[$name];
}
$action = sprintf('plugins/%s/info', $name);
static::$pluginCache[$name] = $this->fetch($action, array());
return static::$pluginCache[$name];
} }
public function download($pluginOrThemeName, $target) public function download($pluginOrThemeName, $target)
{ {
$plugin = $this->getInfo($pluginOrThemeName); $plugin = $this->getPluginInfo($pluginOrThemeName);
if (empty($plugin)) { if (empty($plugin)) {
// TODO throw exception notExistingPlugin // TODO throw exception notExistingPlugin
...@@ -50,7 +62,7 @@ class MarketplaceApiClient ...@@ -50,7 +62,7 @@ class MarketplaceApiClient
$downloadUrl = $latestVersion->download; $downloadUrl = $latestVersion->download;
$success = Http::fetchRemoteFile($downloadUrl, $target); $success = Http::fetchRemoteFile($this->domain . $downloadUrl, $target);
return $success; return $success;
} }
......
...@@ -83,7 +83,7 @@ class PluginInstaller ...@@ -83,7 +83,7 @@ class PluginInstaller
private function makeSurePluginJsonExists($tmpPluginFolder) private function makeSurePluginJsonExists($tmpPluginFolder)
{ {
if (!file_exists($tmpPluginFolder . 'plugin.json')) { if (!file_exists($tmpPluginFolder . '/plugin.json')) {
throw new \Exception('It is not a valid Plugin, missing plugin.json'); throw new \Exception('It is not a valid Plugin, missing plugin.json');
} }
} }
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<div class="plugin"> <div class="plugin">
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name}) }}" class="install">Install</a> <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}" class="install">Install</a>
<h3>{{ plugin.name }}</h3> <h3>{{ plugin.name }}</h3>
<p class="description">{{ plugin.description }}</p> <p class="description">{{ plugin.description }}</p>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
<div class="plugin"> <div class="plugin">
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name}) }}" class="install">Install</a> <a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}" class="install">Install</a>
<h3>{{ plugin.name }}</h3> <h3>{{ plugin.name }}</h3>
<p class="description">{{ plugin.description }}</p> <p class="description">{{ plugin.description }}</p>
......
{% extends 'admin.twig' %}
{% block content %}
<div style="max-width:980px;">
<h2>Installing plugin {{ plugin.name}}</h2>
<div>
<p>Downloading plugin from Marketplace</p>
<p>Unzipping plugin</p>
<p>Installing plugin</p>
<p>You have successfully installed the Plugin {{ plugin.name }} {{ plugin.latestVersion }}.</p>
<p><strong><a href="{{ linkTo({'action': 'activatePlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}">Activate Plugin</a></strong>
|
<a href="{{ linkTo({'action': 'extend'}) }}">Back to Extend Piwik</a></p>
</div>
</div>
{% endblock %}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter