Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
CRAP | |
67.57% |
25 / 37 |
kernel_exception_subscriber | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
16.91 | |
67.57% |
25 / 37 |
__construct | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
|||
on_kernel_exception | |
0.00% |
0 / 1 |
12.99 | |
63.33% |
19 / 30 |
|||
getSubscribedEvents | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\event; | |
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
use Symfony\Component\HttpFoundation\JsonResponse; | |
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; | |
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | |
use Symfony\Component\HttpKernel\KernelEvents; | |
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; | |
use Symfony\Component\HttpFoundation\Response; | |
class kernel_exception_subscriber implements EventSubscriberInterface | |
{ | |
/** | |
* Set to true to show full exception messages | |
* | |
* @var bool | |
*/ | |
protected $debug; | |
/** | |
* Template object | |
* | |
* @var \phpbb\template\template | |
*/ | |
protected $template; | |
/** | |
* Language object | |
* | |
* @var \phpbb\language\language | |
*/ | |
protected $language; | |
/** | |
* User object | |
* | |
* @var \phpbb\user | |
*/ | |
protected $user; | |
/** @var \phpbb\request\type_cast_helper */ | |
protected $type_caster; | |
/** | |
* Construct method | |
* | |
* @param \phpbb\template\template $template Template object | |
* @param \phpbb\language\language $language Language object | |
* @param \phpbb\user $user User object | |
* @param bool $debug Set to true to show full exception messages | |
*/ | |
public function __construct(\phpbb\template\template $template, \phpbb\language\language $language, \phpbb\user $user, $debug = false) | |
{ | |
$this->debug = $debug || defined('DEBUG'); | |
$this->template = $template; | |
$this->language = $language; | |
$this->user = $user; | |
$this->type_caster = new \phpbb\request\type_cast_helper(); | |
} | |
/** | |
* This listener is run when the KernelEvents::EXCEPTION event is triggered | |
* | |
* @param GetResponseForExceptionEvent $event | |
* @return null | |
*/ | |
public function on_kernel_exception(GetResponseForExceptionEvent $event) | |
{ | |
$exception = $event->getException(); | |
$message = $exception->getMessage(); | |
$this->type_caster->set_var($message, $message, 'string', true, false); | |
if ($exception instanceof \phpbb\exception\exception_interface) | |
{ | |
$message = $this->language->lang_array($message, $exception->get_parameters()); | |
} | |
else if (!$this->debug && $exception instanceof NotFoundHttpException) | |
{ | |
$message = $this->language->lang('PAGE_NOT_FOUND'); | |
} | |
// Do not update user session page if it does not exist | |
if ($exception instanceof NotFoundHttpException) | |
{ | |
$this->user->update_session_page = false; | |
} | |
// Show <strong> text in bold | |
$message = preg_replace('#<(/?strong)>#i', '<$1>', $message); | |
if (!$event->getRequest()->isXmlHttpRequest()) | |
{ | |
page_header($this->language->lang('INFORMATION')); | |
$this->template->assign_vars(array( | |
'MESSAGE_TITLE' => $this->language->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 ($this->debug) | |
{ | |
$data['trace'] = $exception->getTrace(); | |
} | |
$response = new JsonResponse($data, 500); | |
} | |
if ($exception instanceof HttpExceptionInterface) | |
{ | |
$response->setStatusCode($exception->getStatusCode()); | |
$response->headers->add($exception->getHeaders()); | |
} | |
$event->setResponse($response); | |
} | |
static public function getSubscribedEvents() | |
{ | |
return array( | |
KernelEvents::EXCEPTION => 'on_kernel_exception', | |
); | |
} | |
} |