public function redirect($url, $statusCode = 302)
 {
     $context = Context::getInstance();
     header(HTTPToolkit::statusCodeHeader($statusCode));
     header(HTTPToolkit::locationHeader($url));
     throw new InterruptedActionException('Interrupted action after a redirection', $context->getModuleName(), $context->getActionName());
 }
예제 #2
0
 public function send()
 {
     $params = [];
     if ($this->exception instanceof \tao_models_classes_AccessDeniedException) {
         $params = ['redirect' => $this->exception->getDeniedRequest()->getRequestURI(), 'msg' => $this->exception->getUserMessage()];
     }
     /* @var $urlRouteService \oat\tao\model\mvc\DefaultUrlService */
     $urlRouteService = $this->getServiceLocator()->get('tao/urlroute');
     header(\HTTPToolkit::locationHeader($urlRouteService->getLoginUrl($params)));
     return;
 }
 /**
  * Catch any errors
  * If the request is an ajax request, return to the client a formated object.
  *
  * @param Exception $exception
  */
 private function catchError(Exception $exception)
 {
     try {
         // Rethrow for a direct clean catch...
         throw $exception;
     } catch (ActionEnforcingException $ae) {
         common_Logger::w("Called module " . $ae->getModuleName() . ', action ' . $ae->getActionName() . ' not found.', array('TAO', 'BOOT'));
         $message = "Called module: " . $ae->getModuleName() . "\n";
         $message .= "Called action: " . $ae->getActionName() . "\n";
         $this->dispatchError($ae, 404, $message);
     } catch (tao_models_classes_AccessDeniedException $ue) {
         common_Logger::i('Access denied', array('TAO', 'BOOT'));
         if (!tao_helpers_Request::isAjax() && common_session_SessionManager::isAnonymous() && tao_models_classes_accessControl_AclProxy::hasAccess('login', 'Main', 'tao')) {
             header(HTTPToolkit::statusCodeHeader(302));
             header(HTTPToolkit::locationHeader(_url('login', 'Main', 'tao', array('redirect' => $ue->getDeniedRequest()->getRequestURI(), 'msg' => $ue->getUserMessage()))));
         } else {
             $this->dispatchError($ue, 403);
         }
     } catch (tao_models_classes_UserException $ue) {
         $this->dispatchError($ue, 403);
     } catch (tao_models_classes_FileNotFoundException $e) {
         $this->dispatchError($e, 404);
     } catch (common_exception_UserReadableException $e) {
         $this->dispatchError($e, 500, $e->getUserMessage());
     } catch (ResolverException $e) {
         common_Logger::singleton()->handleException($e);
         if (!tao_helpers_Request::isAjax() && tao_models_classes_accessControl_AclProxy::hasAccess('login', 'Main', 'tao')) {
             header(HTTPToolkit::statusCodeHeader(302));
             header(HTTPToolkit::locationHeader(_url('login', 'Main', 'tao')));
         } else {
             $this->dispatchError($e, 403);
         }
     } catch (Exception $e) {
         // Last resort.
         $msg = "System Error: uncaught exception (";
         $msg .= get_class($e) . ") in (" . $e->getFile() . ")";
         $msg .= " at line " . $e->getLine() . ": " . $e->getMessage();
         $previous = $e->getPrevious();
         while ($previous !== null) {
             $msg .= "\n\ncaused by:\n\n";
             $msg .= "(" . get_class($previous) . ") in (" . $previous->getFile() . ")";
             $msg .= " at line " . $previous->getLine() . ": " . $previous->getMessage();
             $previous = $previous->getPrevious();
         }
         common_Logger::e($msg);
         $message = $e->getMessage();
         $trace = $e->getTraceAsString();
         $this->dispatchError($e, 500, $message, $trace);
     }
 }