Skip to content

Commit

Permalink
refs #4183 added support for requires (PHP and Piwik officially suppo…
Browse files Browse the repository at this point in the history
…rted, Plugins partially)
  • Loading branch information
tsteur committed Jan 9, 2014
1 parent 092cbf5 commit 317b291
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 31 deletions.
2 changes: 1 addition & 1 deletion core/ScheduledTime.php
Expand Up @@ -83,7 +83,7 @@ static public function getScheduledTimeForPeriod($period)
*/
static public function getScheduledTimeForSite($idSite, $period)
{
$arbitraryDateInUTC = Date::factory('2011-01-01');
$arbitraryDateInUTC = Date::factory('2011-01-01');
$midnightInSiteTimezone = date(
'H',
Date::factory(
Expand Down
6 changes: 3 additions & 3 deletions lang/en.json
Expand Up @@ -777,8 +777,7 @@
"Changelog": "Changelog",
"Screenshots": "Screenshots",
"Support": "Support",
"PluginUpdateAvailable": "You can update this plugin from version %s to %s.",
"ThemeUpdateAvailable": "You can update this theme from version %s to %s.",
"PluginUpdateAvailable": "You are using version %s and a new version %s is available.",
"ViewRepositoryChangelog": "View the changes",
"History": "History",
"PluginVersionInfo": "%1$s from %2$s",
Expand Down Expand Up @@ -808,7 +807,8 @@
"OrByUploadingAPlugin": "or by %suploading a plugin%s",
"ByDesigningOwnTheme": "by %sdesign your own theme%s",
"OrByUploadingATheme": "or by %suploading a theme%s",
"CorePluginTooltip": "Core plugins have no version since they are distributed with Piwik."
"CorePluginTooltip": "Core plugins have no version since they are distributed with Piwik.",
"MissingRequirementsNotice": " Please update %1$s %2$s to a newer version, %1$s %3$s is required."
},
"CoreUpdater": {
"PluginDescription": "Piwik updating mechanism",
Expand Down
61 changes: 61 additions & 0 deletions plugins/CorePluginsAdmin/Marketplace.php
Expand Up @@ -12,6 +12,7 @@

use Piwik\Date;
use Piwik\Piwik;
use Piwik\Version;

/**
*
Expand Down Expand Up @@ -118,6 +119,7 @@ public function getPluginsHavingUpdate($themesOnly)

$updatePlugin['currentVersion'] = $loadedPlugin->getVersion();
$updatePlugin['isActivated'] = $pluginManager->isPluginActivated($updatePlugin['name']);
$updatePlugin = $this->addMissingRequirements($updatePlugin);
break;
}
}
Expand Down Expand Up @@ -158,7 +160,66 @@ private function enrichPluginInformation($plugin)
}
}

$plugin = $this->addMissingRequirements($plugin);

return $plugin;
}

/**
* @param $plugin
*/
private function addMissingRequirements($plugin)
{
$plugin['missingRequirements'] = array();

if (empty($plugin['versions']) || !is_array($plugin['versions'])) {
return $plugin;
}

$latestVersion = $plugin['versions'][count($plugin['versions']) - 1];

if (empty($latestVersion['requires'])) {
return $plugin;
}

$requires = $latestVersion['requires'];

foreach ($requires as $name => $requiredVersion) {
$currentVersion = $this->getCurrentVersion($name);
$comparison = '>=';

if (preg_match('{^(<>|!=|>=?|<=?|==?)\s*(.*)}', $requiredVersion, $matches)) {
$requiredVersion = $matches[2];
$comparison = $matches[1];
}

if (false === version_compare($currentVersion, $requiredVersion, $comparison)) {
$plugin['missingRequirements'][] = array(
'requirement' => (strtolower($name) === 'php') ? 'PHP' : ucfirst($name),
'actualVersion' => $currentVersion,
'requiredVersion' => $comparison . $requiredVersion
);
}
}

return $plugin;
}

private function getCurrentVersion($name)
{
switch (strtolower($name)) {
case 'piwik':
return Version::VERSION;
case 'php':
return PHP_VERSION;
default:
try {
$plugin = \Piwik\Plugin\Manager::getInstance()->loadPlugin(ucfirst($name));

if (!empty($plugin)) {
return $plugin->getVersion();
}
} catch (\Exception $e) {}
}
}
}
51 changes: 30 additions & 21 deletions plugins/CorePluginsAdmin/stylesheets/marketplace.less
Expand Up @@ -9,11 +9,18 @@
.callToAction { font-size: 1.1em;line-height: 2em; }
}

#plugins .settingsLink {
text-align: right;
width: 100%;
display: inline-block;
font-style: italic;
#plugins {

.desc .missingRequirementsNotice {
color: red;
}

.settingsLink {
text-align: right;
width: 100%;
display: inline-block;
font-style: italic;
}
}

.admin .pluginsFilter {
Expand Down Expand Up @@ -73,6 +80,7 @@
margin-bottom: 15px;
position: relative;

.missingRequirementsNotice,
.updateAvailableNotice {
font-size: 14px;
padding: 10px;
Expand Down Expand Up @@ -224,7 +232,7 @@
text-align: left;
font-family: Arial, Helvetica, sans-serif;
line-height: 20px;

h3, h4, h5, h6 {
margin: 20px 0px 10px 0px;
color: #000000;
Expand All @@ -235,6 +243,7 @@
padding-left: 20px;
}

.content .missingRequirementsNotice,
.content .updateAvailableNotice {
font-size: 14px;
padding: 10px;
Expand All @@ -257,64 +266,64 @@
text-align: left;
line-height: 20px;
}

.header .intro {
margin-bottom: 15px;
}

.content p {
margin: 0 0 10px;
}

.description {
padding-right: 25px;
}

.ui-tabs {
padding: 0em;
}

.ui-tabs .ui-tabs-nav {
padding: 0em;
border-bottom: 1px solid #cccccc;
margin-right: 25px;
border-radius: 0px;
font-size: 15px;
}

.ui-tabs .ui-tabs-panel {
padding: 1.4em 3em 0em 0em;
}

.content a {
color: #255792;
text-decoration: none;
}

.metadata dl {
padding-right: 25px;
}

.metadata a:hover {
text-decoration: underline;
}

.ui-state-default {
border: 0px !important;
}

.ui-state-active {
padding-bottom: 0px !important;
}

.ui-state-active.ui-state-default {
border: 1px solid #cccccc !important;
}

.ui-state-default:hover {
background-color: #eeeeee !important;
}

.install {
padding: 11px 19px;
font-size: 17.5px;
Expand All @@ -340,7 +349,7 @@
margin-left: 10px;
line-height: 20px;
}

.featuredIcon {
height: 16px;
width: 16px;
Expand Down
17 changes: 16 additions & 1 deletion plugins/CorePluginsAdmin/templates/macros.twig
Expand Up @@ -28,6 +28,7 @@
</td>
<td class="desc">
{{ plugin.description }}
{{ _self.missingRequirementsNotice(plugin) }}
</td>
<td class="status">
{% if plugin.isActivated %}
Expand All @@ -37,7 +38,11 @@
{% endif %}
</td>
<td class="togl action-links">
<a href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}">Update</a>
{% if 0 == plugin.missingRequirements|length %}
<a href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}">Update</a>
{% else %}
-
{% endif %}
</td>
</tr>
{% endfor %}
Expand Down Expand Up @@ -88,6 +93,16 @@

{% endmacro %}

{% macro missingRequirementsNotice(plugin) %}
{% if plugin.missingRequirements and 0 < plugin.missingRequirements|length %}
{% for req in plugin.missingRequirements -%}
<p class="missingRequirementsNotice">
{{ 'CorePluginsAdmin_MissingRequirementsNotice'|translate(req.requirement, req.actualVersion, req.requiredVersion) }}
</p>
{%- endfor %}
{% endif %}
{% endmacro %}

{% macro tablePlugins(pluginsInfo, pluginNamesHavingSettings, activateNonce, deactivateNonce, uninstallNonce, isTheme, marketplacePluginNames, displayAdminLinks) %}

<div id="confirmUninstallPlugin" class="ui-confirm">
Expand Down
5 changes: 4 additions & 1 deletion plugins/CorePluginsAdmin/templates/pluginDetails.twig
Expand Up @@ -22,11 +22,12 @@
<div class="width:25%;float:left;">

{% if isSuperUser %}
{% if plugin.canBeUpdated %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a class="install update"
href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
Expand Down Expand Up @@ -54,6 +55,7 @@
</ul>

<div id="tabs-description">
{{ pluginsMacro.missingRequirementsNotice(plugin) }}
{{ latestVersion.readmeHtml.description|raw }}
</div>

Expand All @@ -64,6 +66,7 @@
{% endif %}

<div id="tabs-changelog">
{{ pluginsMacro.missingRequirementsNotice(plugin) }}
{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}
{% if plugin.repositoryChangelogUrl %}<a target="_blank" href="{{ plugin.repositoryChangelogUrl }}">{{ 'CorePluginsAdmin_ViewRepositoryChangelog'|translate }}</a>{% endif %}
Expand Down
8 changes: 6 additions & 2 deletions plugins/CorePluginsAdmin/templates/pluginOverview.twig
@@ -1,12 +1,13 @@
{% import '@CorePluginsAdmin/macros.twig' as plugins %}

{% if isSuperUser %}
{% if plugin.canBeUpdated %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a class="update"
href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
<span class="install">{{ 'General_Installed'|translate }}</span>
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
Expand All @@ -21,6 +22,9 @@
<br />
<a href="javascript:void(0);" title="{{ 'General_MoreDetails'|translate }}" class="more">&gt;&gt; {{ 'General_MoreLowerCase'|translate }}</a>
</p>

{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice" data-activePluginTab="changelog">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p>
{% endif %}
{% endif %}

{{ plugins.missingRequirementsNotice(plugin) }}
7 changes: 5 additions & 2 deletions plugins/CorePluginsAdmin/templates/themeOverview.twig
@@ -1,12 +1,13 @@
{% import '@CorePluginsAdmin/macros.twig' as plugins %}

{% if isSuperUser %}
{% if plugin.canBeUpdated %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
class="update"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
<span class="install">{{ 'General_Installed'|translate }}</span>
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
Expand All @@ -20,8 +21,10 @@
<p class="description">{% if plugin.featured %}{{ plugins.featuredIcon('right') }}{% endif %}{{ plugin.description }}</p>

{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice">{{ 'CorePluginsAdmin_ThemeUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p>
<p class="updateAvailableNotice">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p>
{% endif %}

{{ plugins.missingRequirementsNotice(plugin) }}

<a href="javascript:void(0);" class="more"><img title="{{ 'General_MoreDetails'|translate }}"
class="preview" src="{{ plugin.screenshots|first }}?w=250&h=250"/></a>

0 comments on commit 317b291

Please sign in to comment.