. */ namespace SP\Controller; use SP\Config\Config; use SP\Config\ConfigData; use SP\Core\Exceptions\ValidationException; use SP\Core\SessionFactory; use SP\Core\TaskFactory; use SP\Core\Traits\InjectableTrait; use SP\Core\Upgrade\Upgrade; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Log\Log; use SP\Util\Json; use SP\Util\Util; /** * Class MainActionController * * @package SP\Controller */ class MainActionController { use InjectableTrait; /** * @var ConfigData */ protected $ConfigData; /** * @var Config */ protected $Config; /** * MainActionController constructor. */ public function __construct() { $this->injectDependencies(); } /** * @param Config $config */ public function inject(Config $config) { $this->Config = $config; $this->ConfigData = $config->getConfigData(); } /** * Realizar acción * * @param string $version * @return bool */ public function doAction($version = '') { $version = Request::analyze('version', $version); $type = Request::analyze('type'); $taskId = Request::analyze('taskId'); if (Request::analyze('a') === 'upgrade' && Request::analyze('upgrade', 0) === 1 ) { try { $JsonResponse = new JsonResponse(); $JsonResponse->setAction(__('Actualización', false)); if (Request::analyze('h') !== $this->ConfigData->getUpgradeKey()) { throw new ValidationException(__('Código de seguridad incorrecto', false)); } elseif (Request::analyze('chkConfirm', false, false, true) === false) { throw new ValidationException(__('Es necesario confirmar la actualización', false)); } TaskFactory::createTask('upgrade', $taskId); $this->upgrade($version, $type); $JsonResponse->setDescription(__('Aplicación actualizada correctamente', false)); $JsonResponse->addMessage(__('En 5 segundos será redirigido al login', false)); $JsonResponse->setStatus(0); } catch (\Exception $e) { TaskFactory::endTask(); $JsonResponse->setDescription($e->getMessage()); } Json::returnJson($JsonResponse); } elseif ($type === 'db' || $type === 'app') { $controller = new MainController(); $controller->getUpgrade($version); } return false; } /** * Actualizar * * @param int $version * @param int $type * @throws \SP\Core\Exceptions\SPException */ private function upgrade($version, $type) { $Upgrade = new Upgrade(); $Upgrade->doUpgrade($version); TaskFactory::endTask(); $this->ConfigData->setMaintenance(false); $this->ConfigData->setUpgradeKey(''); $appVersion = Util::getVersionStringNormalized(); $this->ConfigData->setConfigVersion($appVersion); $this->Config->saveConfig(); SessionFactory::setAppUpdated(); $Log = new Log(); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__('Actualización', false)); $LogMessage->addDescription(__('Actualización de versión realizada.', false)); $LogMessage->addDetails(__('Versión', false), sprintf('%d => %d', $version, $appVersion)); $LogMessage->addDetails(__('Tipo', false), $type); $Log->writeLog(); } }