diff options
Diffstat (limited to 'plugins/CoreUpdater/Updater.php')
-rw-r--r-- | plugins/CoreUpdater/Updater.php | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/plugins/CoreUpdater/Updater.php b/plugins/CoreUpdater/Updater.php index 6912dba335..316f325690 100644 --- a/plugins/CoreUpdater/Updater.php +++ b/plugins/CoreUpdater/Updater.php @@ -10,17 +10,20 @@ namespace Piwik\Plugins\CoreUpdater; use Exception; use Piwik\ArchiveProcessor\Rules; -use Piwik\Config; +use Piwik\Container\StaticContainer; use Piwik\Filechecks; use Piwik\Filesystem; use Piwik\Http; use Piwik\Option; use Piwik\Plugin\Manager as PluginManager; use Piwik\Plugin\ReleaseChannels; +use Piwik\Plugins\CorePluginsAdmin\CorePluginsAdmin; +use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiClient; +use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiException; +use Piwik\Plugins\CorePluginsAdmin\PluginInstaller; use Piwik\SettingsServer; use Piwik\Translation\Translator; use Piwik\Unzip; -use Piwik\UpdateCheck; use Piwik\Version; class Updater @@ -112,19 +115,58 @@ class Updater $this->verifyDecompressedArchive($extractedArchiveDirectory); $messages[] = $this->translator->translate('CoreUpdater_VerifyingUnpackedFiles'); - $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion); - if (!empty($disabledPluginNames)) { - $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames)); - } + // we need to load the marketplace already here, otherwise it will use the new, updated file in Piwik 3 + $marketplace = new MarketplaceApiClient(); + require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/PluginInstaller.php'; + require_once PIWIK_DOCUMENT_ROOT . '/plugins/CorePluginsAdmin/MarketplaceApiException.php'; $this->installNewFiles($extractedArchiveDirectory); $messages[] = $this->translator->translate('CoreUpdater_InstallingTheLatestVersion'); + } catch (ArchiveDownloadException $e) { throw $e; } catch (Exception $e) { throw new UpdaterException($e, $messages); } + try { + if (CorePluginsAdmin::isMarketplaceEnabled()) { + $messages[] = $this->translator->translate('CoreUpdater_CheckingForPluginUpdates'); + + $pluginManager = PluginManager::getInstance(); + $pluginManager->loadAllPluginsAndGetTheirInfo(); + $loadedPlugins = $pluginManager->getLoadedPlugins(); + + MarketplaceApiClient::clearAllCacheEntries(); + StaticContainer::getContainer()->set('marketplacePiwikVersion', $newVersion); + + $pluginsWithUpdate = $marketplace->checkUpdates($loadedPlugins); + + foreach ($pluginsWithUpdate as $pluginWithUpdate) { + $pluginName = $pluginWithUpdate['name']; + + $messages[] = $this->translator->translate('CoreUpdater_UpdatingPluginXToVersionY', + array($pluginName, $pluginWithUpdate['version'])); + + $pluginInstaller = new PluginInstaller($pluginName); + $pluginInstaller->installOrUpdatePluginFromMarketplace(); + } + } + } catch (MarketplaceApiException $e) { + // there is a problem with the connection to the server, ignore for now + } catch (Exception $e) { + throw new UpdaterException($e, $messages); + } + + try { + $disabledPluginNames = $this->disableIncompatiblePlugins($newVersion); + if (!empty($disabledPluginNames)) { + $messages[] = $this->translator->translate('CoreUpdater_DisablingIncompatiblePlugins', implode(', ', $disabledPluginNames)); + } + } catch (Exception $e) { + throw new UpdaterException($e, $messages); + } + return $messages; } |