. */ namespace SP\Mvc\Controller; use SP\Core\Context\ContextInterface; use SP\Core\Exceptions\SPException; use SP\Http\Json; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Http\Uri; use SP\Util\Util; /** * Trait ControllerTrait * * @package SP\Mvc\Controller */ trait ControllerTrait { /** * @return string */ protected function getControllerName() { $class = static::class; return substr($class, strrpos($class, '\\') + 1, -strlen('Controller')) ?: ''; } /** * Comprobar si la sesión está activa * * @param ContextInterface $context * @param Request $request * @param \Closure $onRedirect */ protected function checkLoggedInSession(ContextInterface $context, Request $request, \Closure $onRedirect) { if (!$context->isLoggedIn()) { if ($request->isJson()) { $jsonResponse = new JsonResponse(__u('La sesión no se ha iniciado o ha caducado')); $jsonResponse->setStatus(10); Json::fromDic()->returnJson($jsonResponse); } elseif ($request->isAjax()) { Util::logout(); } else { try { $route = $request->analyzeString('r'); $hash = $request->analyzeString('h'); $uri = new Uri('index.php'); $uri->addParam('_r', 'login'); if ($route && $hash) { $key = $context->getConfig()->getPasswordSalt(); $request->verifySignature($key); $uri->addParam('from', $route); $onRedirect->call($this, $uri->getUriSigned($key)); } else { $onRedirect->call($this, $uri->getUri()); } } catch (SPException $e) { processException($e); } } } } /** * @param ContextInterface $context * @param Request $request */ protected function checkSecurityToken(ContextInterface $context, Request $request) { $sk = $request->analyzeString('sk'); $sessionKey = $context->getSecurityKey(); if (!$sk || (null !== $sessionKey && $sessionKey !== $sk)) { $this->invalidAction(); } } /** * Acción no disponible */ protected function invalidAction() { Json::fromDic()->returnJson(new JsonResponse(__u('Acción Inválida'))); } }