X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FVersionCheck.php;h=380c4b61dba191d7c1b643e9ee239adcec0b6536;hb=50bfb46054c0ccd0f836a569c5417969da3c1a53;hp=4f69360970738bd46a53ed449bdf76e9ff23dedb;hpb=e32e663dddae93274cc28fd0539e48a98edbe8df;p=civicrm-core.git diff --git a/CRM/Utils/VersionCheck.php b/CRM/Utils/VersionCheck.php index 4f69360970..380c4b61db 100644 --- a/CRM/Utils/VersionCheck.php +++ b/CRM/Utils/VersionCheck.php @@ -1,9 +1,9 @@ getReleaseInfo($this->localVersion); - $localVersionDate = CRM_Utils_Array::value('date', $thisVersion, 0); - foreach ($this->versionInfo as $majorVersion) { - foreach ($majorVersion['releases'] as $release) { - if (!empty($release['security']) && $release['date'] > $localVersionDate - && version_compare($this->localVersion, $release['version']) < 0 - ) { - if (!$this->ignoreDate || $this->ignoreDate < $release['date']) { - return TRUE; - } - } - } - } - } /** * Get the latest version number if it's newer than the local one * - * @return string|null - * Returns version number of the latest release if it is greater than the local version + * @return array + * Returns version number of the latest release if it is greater than the local version, + * along with the type of upgrade (regular/security) needed and the status of the major + * version */ public function isNewerVersionAvailable() { - $newerVersion = NULL; + $return = array( + 'version' => NULL, + 'upgrade' => NULL, + 'status' => NULL, + ); + if ($this->versionInfo && $this->localVersion) { - foreach ($this->versionInfo as $majorVersionNumber => $majorVersion) { - $release = $this->checkBranchForNewVersion($majorVersion); - if ($release) { - // If we have a release with the same majorVersion as local, return it - if ($majorVersionNumber == $this->localMajorVersion) { - return $release; - } - // Search outside the local majorVersion (excluding non-stable) - elseif ($majorVersion['status'] != 'testing') { - // We found a new release but don't return yet, keep searching newer majorVersions - $newerVersion = $release; - } + if (isset($this->versionInfo[$this->localMajorVersion])) { + switch (CRM_Utils_Array::value('status', $this->versionInfo[$this->localMajorVersion])) { + case 'stable': + case 'lts': + case 'testing': + // look for latest version in this major version + $releases = $this->checkBranchForNewVersion($this->versionInfo[$this->localMajorVersion]); + if ($releases['newest']) { + $return['version'] = $releases['newest']; + + // check for intervening security releases + $return['upgrade'] = ($releases['security']) ? 'security' : 'regular'; + } + break; + + case 'eol': + default: + // look for latest version ever + foreach ($this->versionInfo as $majorVersionNumber => $majorVersion) { + if ($majorVersionNumber < $this->localMajorVersion || $majorVersion['status'] == 'testing') { + continue; + } + $releases = $this->checkBranchForNewVersion($this->versionInfo[$majorVersionNumber]); + + if ($releases['newest']) { + $return['version'] = $releases['newest']; + + // check for intervening security releases + $return['upgrade'] = ($releases['security'] || $return['upgrade'] == 'security') ? 'security' : 'regular'; + } + } + } + $return['status'] = $this->versionInfo[$this->localMajorVersion]['status']; + } + else { + // Figure if the version is really old or really new + $wayOld = TRUE; + + foreach ($this->versionInfo as $majorVersionNumber => $majorVersion) { + $wayOld = ($this->localMajorVersion < $majorVersionNumber); + } + + if ($wayOld) { + $releases = $this->checkBranchForNewVersion($majorVersion); + + $return = array( + 'version' => $releases['newest'], + 'upgrade' => 'security', + 'status' => 'eol', + ); } } } - return $newerVersion; + + return $return; } /** @@ -224,12 +250,18 @@ class CRM_Utils_VersionCheck { * @return null|string */ private function checkBranchForNewVersion($majorVersion) { - $newerVersion = NULL; + $newerVersion = array( + 'newest' => NULL, + 'security' => NULL, + ); if (!empty($majorVersion['releases'])) { foreach ($majorVersion['releases'] as $release) { if (version_compare($this->localVersion, $release['version']) < 0) { if (!$this->ignoreDate || $this->ignoreDate < $release['date']) { - $newerVersion = $release['version']; + $newerVersion['newest'] = $release['version']; + if (CRM_Utils_Array::value('security', $release)) { + $newerVersion['security'] = $release['version']; + } } } } @@ -237,46 +269,6 @@ class CRM_Utils_VersionCheck { return $newerVersion; } - /** - * Alert the site admin of new versions of CiviCRM. - * Show the message once a day - */ - public function versionAlert() { - $versionAlertSetting = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'versionAlert', NULL, 1); - $securityAlertSetting = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'securityUpdateAlert', NULL, 3); - $settingsUrl = CRM_Utils_System::url('civicrm/admin/setting/misc', 'reset=1', FALSE, NULL, FALSE, FALSE, TRUE); - if (CRM_Core_Permission::check('administer CiviCRM') && $securityAlertSetting > 1 && $this->isSecurityUpdateAvailable()) { - $session = CRM_Core_Session::singleton(); - if ($session->timer('version_alert', 24 * 60 * 60)) { - $msg = ts('This version of CiviCRM requires a security update.') . - ''; - $session->setStatus($msg, ts('Security Alert'), 'alert'); - CRM_Core_Resources::singleton() - ->addScriptFile('civicrm', 'templates/CRM/Admin/Form/Setting/versionCheckOptions.js'); - } - } - elseif (CRM_Core_Permission::check('administer CiviCRM') && $versionAlertSetting > 1) { - $newerVersion = $this->isNewerVersionAvailable(); - if ($newerVersion) { - $session = CRM_Core_Session::singleton(); - if ($session->timer('version_alert', 24 * 60 * 60)) { - $msg = ts('A newer version of CiviCRM is available: %1', array(1 => $newerVersion)) . - ''; - $session->setStatus($msg, ts('Update Available'), 'info'); - CRM_Core_Resources::singleton() - ->addScriptFile('civicrm', 'templates/CRM/Admin/Form/Setting/versionCheckOptions.js'); - } - } - } - } - /** * Collect info about the site to be sent as pingback data. */ @@ -294,10 +286,10 @@ class CRM_Utils_VersionCheck { 'uf' => $config->userFramework, 'lang' => $config->lcMessages, 'co' => $config->defaultContactCountry, - 'ufv' => $config->userFrameworkVersion, + 'ufv' => $config->userSystem->getVersion(), 'PHP' => phpversion(), 'MySQL' => CRM_CORE_DAO::singleValueQuery('SELECT VERSION()'), - 'communityMessagesUrl' => CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'communityMessagesUrl', NULL, '*default*'), + 'communityMessagesUrl' => Civi::settings()->get('communityMessagesUrl'), ); $this->getPayProcStats(); $this->getEntityStats();