. */ namespace SP\Services\Upgrade; use SP\Config\Config; use SP\Util\Util; use SP\Util\Version; /** * Class UpgradeUtil * * @package SP\Services\Upgrade */ final class UpgradeUtil { /** * Normalizar un número de versión * * @param $version * * @return string */ public static function fixVersionNumber($version) { if (strpos($version, '.') === false) { if (strlen($version) === 10) { return substr($version, 0, 2) . '0.' . substr($version, 2); } return substr($version, 0, 3) . '.' . substr($version, 3); } return $version; } /** * Comrpueba y actualiza la versión de la BBDD. * * @return void * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public function checkDbVersion() { $appVersion = Version::getVersionStringNormalized(); $databaseVersion = UserUpgrade::fixVersionNumber(ConfigDB::getValue('version')); if (Version::checkVersion($databaseVersion, $appVersion) && Request::analyze('nodbupgrade', 0) === 0 && Version::checkVersion($databaseVersion, self::$dbUpgrade) && !$this->configData->isMaintenance() ) { $this->setUpgradeKey('db'); // FIXME: send link for upgrading throw new \RuntimeException('Needs upgrade'); } } /** * Establecer la key de actualización * * @param Config $config * * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function setUpgradeKey(Config $config) { $configData = $config->getConfigData(); $upgradeKey = $configData->getUpgradeKey(); if (empty($upgradeKey)) { $configData->setUpgradeKey(Util::generateRandomBytes(32)); } $configData->setMaintenance(true); $config->saveConfig($configData, false); // Init::initError( // __('La aplicación necesita actualizarse'), // sprintf(__('Si es un administrador pulse en el enlace: %s'), '' . __('Actualizar') . '')); } /** * Comrpueba y actualiza la versión de la aplicación. * * @return void * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public function checkAppVersion() { $appVersion = UserUpgrade::fixVersionNumber($this->configData->getConfigVersion()); if (Version::checkVersion($appVersion, self::$appUpgrade) && !$this->configData->isMaintenance()) { $this->setUpgradeKey('app'); // FIXME: send link for upgrading throw new \RuntimeException('Needs upgrade'); } } }