diff options
author | Nils Adermann <naderman@naderman.de> | 2015-01-22 16:17:26 +0100 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2015-01-22 16:17:26 +0100 |
commit | f9f43141a91ce07916cc327b7fd94afba7bfb7bf (patch) | |
tree | d1d0e67188b8c02f8beb7bb86e0537ccc578d102 /phpBB/phpbb/event/kernel_exception_subscriber.php | |
parent | 3bbddbb963a80722738c6c6bacc4abcb301e70eb (diff) | |
parent | 40ab75478ed7427985e4d147eb6573ce8bb351fc (diff) | |
download | forums-f9f43141a91ce07916cc327b7fd94afba7bfb7bf.tar forums-f9f43141a91ce07916cc327b7fd94afba7bfb7bf.tar.gz forums-f9f43141a91ce07916cc327b7fd94afba7bfb7bf.tar.bz2 forums-f9f43141a91ce07916cc327b7fd94afba7bfb7bf.tar.xz forums-f9f43141a91ce07916cc327b7fd94afba7bfb7bf.zip |
Merge branch 'develop-ascraeus' into develop
* develop-ascraeus:
[ticket/13361] Rename exception to runtime_exception
[ticket/13361] Fix the JsonResponse in the exception listener
[ticket/13361] Add tests
[ticket/13361] Support ajax request (send a json response)
[ticket/13361] Improve the exception listener
Diffstat (limited to 'phpBB/phpbb/event/kernel_exception_subscriber.php')
-rw-r--r-- | phpBB/phpbb/event/kernel_exception_subscriber.php | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/phpBB/phpbb/event/kernel_exception_subscriber.php b/phpBB/phpbb/event/kernel_exception_subscriber.php index 44e87507f9..eb7831ad34 100644 --- a/phpBB/phpbb/event/kernel_exception_subscriber.php +++ b/phpBB/phpbb/event/kernel_exception_subscriber.php @@ -14,9 +14,10 @@ namespace phpbb\event; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; -use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpFoundation\Response; class kernel_exception_subscriber implements EventSubscriberInterface @@ -53,23 +54,55 @@ class kernel_exception_subscriber implements EventSubscriberInterface */ public function on_kernel_exception(GetResponseForExceptionEvent $event) { - page_header($this->user->lang('INFORMATION')); - $exception = $event->getException(); - $this->template->assign_vars(array( - 'MESSAGE_TITLE' => $this->user->lang('INFORMATION'), - 'MESSAGE_TEXT' => $exception->getMessage(), - )); + $message = $exception->getMessage(); + + if ($exception instanceof \phpbb\exception\exception_interface) + { + $message = call_user_func_array(array($this->user, 'lang'), array_merge(array($message), $exception->get_parameters())); + } + + if (!$event->getRequest()->isXmlHttpRequest()) + { + page_header($this->user->lang('INFORMATION')); + + $this->template->assign_vars(array( + 'MESSAGE_TITLE' => $this->user->lang('INFORMATION'), + 'MESSAGE_TEXT' => $message, + )); + + $this->template->set_filenames(array( + 'body' => 'message_body.html', + )); + + page_footer(true, false, false); + + $response = new Response($this->template->assign_display('body'), 500); + } + else + { + $data = array(); + + if (!empty($message)) + { + $data['message'] = $message; + } + + if (defined('DEBUG')) + { + $data['trace'] = $exception->getTrace(); + } - $this->template->set_filenames(array( - 'body' => 'message_body.html', - )); + $response = new JsonResponse($data, 500); + } - page_footer(true, false, false); + if ($exception instanceof HttpExceptionInterface) + { + $response->setStatusCode($exception->getStatusCode()); + $response->headers->add($exception->getHeaders()); + } - $status_code = $exception instanceof HttpException ? $exception->getStatusCode() : 500; - $response = new Response($this->template->assign_display('body'), $status_code); $event->setResponse($response); } |