. */ namespace SP\Services\Upgrade; use SP\Config\ConfigData; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Services\Service; use SP\Util\Version; /** * Class UpgradeAppService * * @package SP\Services\Upgrade */ final class UpgradeAppService extends Service implements UpgradeInterface { const UPGRADES = ['300.18010101', '300.18072901', '300.18072902']; /** * @param $version * * @return bool */ public static function needsUpgrade($version) { return Version::checkVersion($version, self::UPGRADES); } /** * @param $version * @param ConfigData $configData * * @throws UpgradeException */ public function upgrade($version, ConfigData $configData) { $this->eventDispatcher->notifyEvent('upgrade.app.start', new Event($this, EventMessage::factory() ->addDescription(__u('Actualizar Aplicación'))) ); foreach (self::UPGRADES as $appVersion) { if (Version::checkVersion($version, $appVersion)) { if ($this->applyUpgrade($appVersion) === false) { throw new UpgradeException( __u('Error al aplicar la actualización de la aplicación'), UpgradeException::CRITICAL, __u('Compruebe el registro de eventos para más detalles') ); } logger('APP Upgrade: ' . $appVersion); $configData->setConfigVersion($appVersion); $this->config->saveConfig($configData, false); } } $this->eventDispatcher->notifyEvent('upgrade.app.end', new Event($this, EventMessage::factory() ->addDescription(__u('Actualizar Aplicación'))) ); } /** * Actualizaciones de la aplicación * * @param $version * * @return bool */ private function applyUpgrade($version) { try { switch ($version) { case '300.18010101': $this->dic->get(UpgradeCustomFieldDefinition::class) ->upgrade_300_18010101(); $this->dic->get(UpgradePublicLink::class) ->upgrade_300_18010101(); return true; case '300.18072901': $this->dic->get(UpgradeCustomFieldDefinition::class) ->upgrade_300_18072901(); $this->dic->get(UpgradeAuthToken::class) ->upgrade_300_18072901(); return true; case '300.18072902': $this->dic->get(UpgradeCustomFieldData::class) ->upgrade_300_18072902(); return true; } } catch (\Exception $e) { processException($e); } return false; } }