$lastTimeChecked ) { // set the time checked first, so that parallel Piwik requests don't all trigger the http requests Option::set(self::LAST_TIME_CHECKED, time(), $autoLoad = 1); $latestVersion = self::getLatestAvailableVersionNumber(); $latestVersion = trim((string) $latestVersion); if (!preg_match('~^[0-9][0-9a-zA-Z_.-]*$~D', $latestVersion)) { $latestVersion = ''; } Option::set(self::LATEST_VERSION, $latestVersion); } } /** * Get the latest available version number for the currently active release channel. Eg '2.15.0-b4' or '2.15.0'. * Should return a semantic version number in format MAJOR.MINOR.PATCH (http://semver.org/). * Returns an empty string in case one cannot connect to the remote server. * @return string */ private static function getLatestAvailableVersionNumber() { $releaseChannels = StaticContainer::get('\Piwik\Plugin\ReleaseChannels'); $channel = $releaseChannels->getActiveReleaseChannel(); $url = $channel->getUrlToCheckForLatestAvailableVersion(); try { $latestVersion = Http::sendHttpRequest($url, self::SOCKET_TIMEOUT); } catch (\Exception $e) { // e.g., disable_functions = fsockopen; allow_url_open = Off $latestVersion = ''; } return $latestVersion; } /** * Returns the latest available version number. Does not perform a check whether a later version is available. * * @return false|string */ public static function getLatestVersion() { return Option::get(self::LATEST_VERSION); } /** * Returns version number of a newer Piwik release. * * @return string|bool false if current version is the latest available, * or the latest version number if a newest release is available */ public static function isNewestVersionAvailable() { $latestVersion = self::getLatestVersion(); if (!empty($latestVersion) && version_compare(Version::VERSION, $latestVersion) == -1 ) { return $latestVersion; } return false; } }