diff options
author | Thomas Steur <thomas.steur@googlemail.com> | 2014-04-09 07:23:18 +0400 |
---|---|---|
committer | Thomas Steur <thomas.steur@googlemail.com> | 2014-04-09 07:23:18 +0400 |
commit | 918355e3705e258d2bdabf6a42b9ddc8fdfbfda4 (patch) | |
tree | 739a5e6b4344eabdc144feafaf3a11cd2529d324 /plugins | |
parent | 50da9c7852080d6d6cc056dbf7030469f7e11b3a (diff) |
refs #4967 started to work on verifying plugin version during run time and before update. Not 100% tested yet, especially not the updater yet
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/CorePluginsAdmin/CorePluginsAdmin.php | 2 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/Marketplace.php | 10 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/PluginDependency.php | 73 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/PluginInstaller.php | 1 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/macros.twig | 32 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/pluginDetails.twig | 4 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/pluginOverview.twig | 2 | ||||
-rw-r--r-- | plugins/CorePluginsAdmin/templates/themeOverview.twig | 2 | ||||
-rw-r--r-- | plugins/CoreUpdater/Controller.php | 54 | ||||
-rw-r--r-- | plugins/CoreUpdater/templates/newVersionAvailable.twig | 12 | ||||
m--------- | plugins/TreemapVisualization | 0 |
11 files changed, 105 insertions, 87 deletions
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php index 3d43c8fbd6..498729f349 100644 --- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php +++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php @@ -11,8 +11,10 @@ namespace Piwik\Plugins\CorePluginsAdmin; use Piwik\Config; use Piwik\Menu\MenuAdmin; use Piwik\Piwik; +use Piwik\Plugin; use Piwik\ScheduledTask; use Piwik\ScheduledTime; +use Piwik\Plugin\Manager as PluginManager; /** * diff --git a/plugins/CorePluginsAdmin/Marketplace.php b/plugins/CorePluginsAdmin/Marketplace.php index 191cc0cd09..e50cdbbb39 100644 --- a/plugins/CorePluginsAdmin/Marketplace.php +++ b/plugins/CorePluginsAdmin/Marketplace.php @@ -10,7 +10,7 @@ namespace Piwik\Plugins\CorePluginsAdmin; use Piwik\Date; use Piwik\Piwik; -use Piwik\Version; +use Piwik\Plugin\Dependency as PluginDependency; /** * @@ -53,6 +53,14 @@ class Marketplace return $names; } + public function getAllAvailablePluginNames() + { + return array_merge( + $this->getAvailablePluginNames(true), + $this->getAvailablePluginNames(false) + ); + } + public function searchPlugins($query, $sort, $themesOnly) { if ($themesOnly) { diff --git a/plugins/CorePluginsAdmin/PluginDependency.php b/plugins/CorePluginsAdmin/PluginDependency.php deleted file mode 100644 index 015d7ff70a..0000000000 --- a/plugins/CorePluginsAdmin/PluginDependency.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -/** - * Piwik - Open source web analytics - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - * - */ -namespace Piwik\Plugins\CorePluginsAdmin; - -use Piwik\Version; -use Piwik\Plugin\Manager as PluginManager; -/** - * - */ -class PluginDependency -{ - - public function getMissingDependencies($requires) - { - $missingRequirements = array(); - - if (empty($requires)) { - return $missingRequirements; - } - - 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)) { - $missingRequirements[] = array( - 'requirement' => $name, - 'actualVersion' => $currentVersion, - 'requiredVersion' => $comparison . $requiredVersion - ); - } - } - - return $missingRequirements; - } - - private function getCurrentVersion($name) - { - switch (strtolower($name)) { - case 'piwik': - return Version::VERSION; - case 'php': - return PHP_VERSION; - default: - try { - $pluginNames = PluginManager::getAllPluginsNames(); - - if (!in_array($name, $pluginNames) || !PluginManager::getInstance()->isPluginLoaded($name)) { - return ''; - } - - $plugin = PluginManager::getInstance()->loadPlugin(ucfirst($name)); - - if (!empty($plugin)) { - return $plugin->getVersion(); - } - } catch (\Exception $e) {} - } - - return ''; - } -} diff --git a/plugins/CorePluginsAdmin/PluginInstaller.php b/plugins/CorePluginsAdmin/PluginInstaller.php index 7aef1af227..f3a1d2f770 100644 --- a/plugins/CorePluginsAdmin/PluginInstaller.php +++ b/plugins/CorePluginsAdmin/PluginInstaller.php @@ -13,6 +13,7 @@ use Piwik\Filesystem; use Piwik\Piwik; use Piwik\SettingsPiwik; use Piwik\Unzip; +use Piwik\Plugin\Dependency as PluginDependency; /** * diff --git a/plugins/CorePluginsAdmin/templates/macros.twig b/plugins/CorePluginsAdmin/templates/macros.twig index b30faec276..6c69d32f69 100644 --- a/plugins/CorePluginsAdmin/templates/macros.twig +++ b/plugins/CorePluginsAdmin/templates/macros.twig @@ -28,7 +28,7 @@ </td> <td class="desc"> {{ plugin.description }} - {{ _self.missingRequirementsNotice(plugin) }} + {{ _self.missingRequirementsPleaseUpdateNotice(plugin) }} </td> <td class="status"> {% if plugin.isActivated %} @@ -93,7 +93,7 @@ {% endmacro %} -{% macro missingRequirementsNotice(plugin) %} +{% macro missingRequirementsPleaseUpdateNotice(plugin) %} {% if plugin.missingRequirements and 0 < plugin.missingRequirements|length %} {% for req in plugin.missingRequirements -%} <p class="missingRequirementsNotice"> @@ -107,6 +107,26 @@ {% endif %} {% endmacro %} +{% macro missingRequirementsInfo(pluginName, metadata, missingRequirements, marketplacePluginNames) %} + {% set causedBy = '' %} + {% for dependency in missingRequirements %} + {% set causedBy = causedBy ~ dependency.requirement|capitalize ~ ' ' ~ dependency.causedBy %} + {% if not loop.last %} + {% set causedBy = causedBy ~ ', ' %} + {% endif %} + {% endfor %} + + {{ 'CorePluginsAdmin_PluginRequirement'|translate(pluginName, causedBy) }} + + {% if metadata is defined + and metadata.support is defined + and metadata.support.email + and pluginName not in marketplacePluginNames %} + {{ 'CorePluginsAdmin_EmailToEnquireUpdatedVersion'|translate('<a href="mailto:' ~ metadata.support.email|e('html_attr') ~'">' ~ metadata.support.email ~ '</a>', pluginName)|raw }} + {% endif %} +{% endmacro %} + + {% macro tablePlugins(pluginsInfo, pluginNamesHavingSettings, activateNonce, deactivateNonce, uninstallNonce, isTheme, marketplacePluginNames, displayAdminLinks) %} <div id="confirmUninstallPlugin" class="ui-confirm"> @@ -208,6 +228,14 @@ {% else %} {% if plugin.activated %} <a href='index.php?module=CorePluginsAdmin&action=deactivate&pluginName={{ name }}&nonce={{ deactivateNonce }}'>{{ 'CorePluginsAdmin_Deactivate'|translate }}</a> + {% elseif plugin.missingRequirements %} + <a ng-click="{{ name }}.outdated=true" >{{ 'CorePluginsAdmin_Activate'|translate }}</a> + <span ng-init="{{ name }}.outdated" piwik-dialog="{{ name }}.outdated" class="ui-confirm"> + <h2>{{ 'CorePluginsAdmin_ActivationNotPossible'|translate(name) }}</h2> + <p style="text-align: center"> + {{ _self.missingRequirementsInfo(name, plugin.info, plugin.missingRequirements, marketplacePluginNames) }} + </p> + </span> {% else %} <a href='index.php?module=CorePluginsAdmin&action=activate&pluginName={{ name }}&nonce={{ activateNonce }}'>{{ 'CorePluginsAdmin_Activate'|translate }}</a> {% endif %} diff --git a/plugins/CorePluginsAdmin/templates/pluginDetails.twig b/plugins/CorePluginsAdmin/templates/pluginDetails.twig index c28445f4fd..2487ef41d6 100644 --- a/plugins/CorePluginsAdmin/templates/pluginDetails.twig +++ b/plugins/CorePluginsAdmin/templates/pluginDetails.twig @@ -55,7 +55,7 @@ </ul> <div id="tabs-description"> - {{ pluginsMacro.missingRequirementsNotice(plugin) }} + {{ pluginsMacro.missingRequirementsPleaseUpdateNotice(plugin) }} {{ latestVersion.readmeHtml.description|raw }} </div> @@ -66,7 +66,7 @@ {% endif %} <div id="tabs-changelog"> - {{ pluginsMacro.missingRequirementsNotice(plugin) }} + {{ pluginsMacro.missingRequirementsPleaseUpdateNotice(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 %} diff --git a/plugins/CorePluginsAdmin/templates/pluginOverview.twig b/plugins/CorePluginsAdmin/templates/pluginOverview.twig index 4606118e10..cbe4ca5a89 100644 --- a/plugins/CorePluginsAdmin/templates/pluginOverview.twig +++ b/plugins/CorePluginsAdmin/templates/pluginOverview.twig @@ -27,4 +27,4 @@ <p class="updateAvailableNotice" data-activePluginTab="changelog">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p> {% endif %} -{{ plugins.missingRequirementsNotice(plugin) }}
\ No newline at end of file +{{ plugins.missingRequirementsPleaseUpdateNotice(plugin) }}
\ No newline at end of file diff --git a/plugins/CorePluginsAdmin/templates/themeOverview.twig b/plugins/CorePluginsAdmin/templates/themeOverview.twig index 6f0e82f807..3458b309c1 100644 --- a/plugins/CorePluginsAdmin/templates/themeOverview.twig +++ b/plugins/CorePluginsAdmin/templates/themeOverview.twig @@ -24,7 +24,7 @@ <p class="updateAvailableNotice">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p> {% endif %} -{{ plugins.missingRequirementsNotice(plugin) }} +{{ plugins.missingRequirementsPleaseUpdateNotice(plugin) }} <a href="javascript:void(0);" class="more"><img title="{{ 'General_MoreDetails'|translate }}" class="preview" src="{{ plugin.screenshots|first }}?w=250&h=250"/></a> diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php index 3e8981d07a..46a1c6cc5c 100644 --- a/plugins/CoreUpdater/Controller.php +++ b/plugins/CoreUpdater/Controller.php @@ -9,27 +9,27 @@ namespace Piwik\Plugins\CoreUpdater; use Exception; -use Piwik\API\Request; use Piwik\ArchiveProcessor\Rules; use Piwik\Common; use Piwik\Config; -use Piwik\DataTable\Renderer\Console; use Piwik\DbHelper; use Piwik\Filechecks; use Piwik\Filesystem; use Piwik\Http; use Piwik\Option; use Piwik\Piwik; +use Piwik\Plugin; +use Piwik\Plugins\CorePluginsAdmin\Marketplace; use Piwik\Plugins\LanguagesManager\LanguagesManager; use Piwik\SettingsPiwik; use Piwik\SettingsServer; use Piwik\Unzip; use Piwik\UpdateCheck; use Piwik\Updater; -use Piwik\UpdaterErrorException; use Piwik\Version; use Piwik\View; use Piwik\View\OneClickDone; +use Piwik\Plugin\Manager as PluginManager; /** * @@ -44,6 +44,7 @@ class Controller extends \Piwik\Plugin\Controller private $errorMessages = array(); private $deactivatedPlugins = array(); private $pathPiwikZip = false; + private $newVersion; static protected function getLatestZipUrl($newVersion) { @@ -60,11 +61,26 @@ class Controller extends \Piwik\Plugin\Controller $newVersion = $this->checkNewVersionIsAvailableOrDie(); $view = new View('@CoreUpdater/newVersionAvailable'); + $view->piwik_version = Version::VERSION; $view->piwik_new_version = $newVersion; + + $incompatiblePlugins = $this->getIncompatiblePlugins($newVersion); + + $marketplacePlugins = array(); + try { + if (!empty($incompatiblePlugins)) { + $marketplace = new Marketplace(); + $marketplacePlugins = $marketplace->getAllAvailablePluginNames(); + } + } catch (\Exception $e) {} + + $view->marketplacePlugins = $marketplacePlugins; + $view->incompatiblePlugins = $incompatiblePlugins; $view->piwik_latest_version_url = self::getLatestZipUrl($newVersion); - $view->can_auto_update = Filechecks::canAutoUpdate(); + $view->can_auto_update = Filechecks::canAutoUpdate(); $view->makeWritableCommands = Filechecks::getAutoUpdateMakeWritableMessage(); + return $view->render(); } @@ -80,11 +96,21 @@ class Controller extends \Piwik\Plugin\Controller array('oneClick_Download', Piwik::translate('CoreUpdater_DownloadingUpdateFromX', $url)), array('oneClick_Unpack', Piwik::translate('CoreUpdater_UnpackingTheUpdate')), array('oneClick_Verify', Piwik::translate('CoreUpdater_VerifyingUnpackedFiles')), - array('oneClick_CreateConfigFileBackup', Piwik::translate('CoreUpdater_CreatingBackupOfConfigurationFile', self::CONFIG_FILE_BACKUP)), - array('oneClick_Copy', Piwik::translate('CoreUpdater_InstallingTheLatestVersion')), - array('oneClick_Finished', Piwik::translate('CoreUpdater_PiwikUpdatedSuccessfully')), + array('oneClick_CreateConfigFileBackup', Piwik::translate('CoreUpdater_CreatingBackupOfConfigurationFile', self::CONFIG_FILE_BACKUP)) ); + $incompatiblePlugins = $this->getIncompatiblePlugins($this->newVersion); + if (!empty($incompatiblePlugins)) { + $namesToDisable = array(); + foreach ($incompatiblePlugins as $incompatiblePlugin) { + $namesToDisable[] = $incompatiblePlugin->getPluginName(); + } + $steps[] = array('oneClick_DisableIncompatiblePlugins', Piwik::translate('DisablingIncompatiblePlugins', implode(', ', $namesToDisable))); + } + + $steps[] = array('oneClick_Copy', Piwik::translate('CoreUpdater_InstallingTheLatestVersion')); + $steps[] = array('oneClick_Finished', Piwik::translate('CoreUpdater_PiwikUpdatedSuccessfully')); + $errorMessage = false; $messages = array(); foreach ($steps as $step) { @@ -204,6 +230,15 @@ class Controller extends \Piwik\Plugin\Controller Filesystem::copy($configFileBefore, $configFileAfter); } + private function oneClick_DisableIncompatiblePlugins() + { + $plugins = $this->getIncompatiblePlugins($this->newVersion); + + foreach ($plugins as $plugin) { + $plugin->deactivate(); + } + } + private function oneClick_Copy() { /* @@ -390,4 +425,9 @@ class Controller extends \Piwik\Plugin\Controller $view->deactivatedPlugins = $this->deactivatedPlugins; } + private function getIncompatiblePlugins($piwikVersion) + { + return PluginManager::getInstance()->getIncompatiblePlugins($piwikVersion); + } + } diff --git a/plugins/CoreUpdater/templates/newVersionAvailable.twig b/plugins/CoreUpdater/templates/newVersionAvailable.twig index ed2c7bc862..cf87a949e6 100644 --- a/plugins/CoreUpdater/templates/newVersionAvailable.twig +++ b/plugins/CoreUpdater/templates/newVersionAvailable.twig @@ -1,4 +1,5 @@ {% extends '@CoreUpdater/layout.twig' %} +{% import '@CorePluginsAdmin/macros.twig' as pluginsMacro %} {% block content %} <br/> @@ -13,6 +14,17 @@ </p> {% endif %} +{% if incompatiblePlugins %} + <p>{{ 'CoreUpdater_IncompatbilePluginsWillBeDisabledInfo'|translate(piwik_new_version) }}</p> + + <ul style="list-style: disc;"> + {% for plugin in incompatiblePlugins %} + <li>{{ pluginsMacro.missingRequirementsInfo(plugin.getPluginName, plugin.getInformation, plugin.getMissingDependencies(piwik_new_version), marketplacePlugins) }}</li> + {% endfor %} + </ul> + <p> </p> +{% endif %} + {% if can_auto_update %} <form id="oneclickupdate" action="index.php"> <input type="hidden" name="module" value="CoreUpdater"/> diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization -Subproject 19978cb7cd926ec0fba111ce257b8f0450f34ce +Subproject 2cb15300a88f7ff2a1fc27ef633a1a1f4d5fef0 |