From ec7180db4fd95c6e00907f1fe3676d945eaae87b Mon Sep 17 00:00:00 2001 From: rxu Date: Fri, 2 Feb 2024 23:24:40 +0700 Subject: [PATCH] [ticket/17286] Do not update user session page if it does not exist PHPBB3-17286 --- phpBB/config/default/container/services_event.yml | 1 + phpBB/phpbb/event/kernel_exception_subscriber.php | 14 +++++++++++++- tests/event/exception_listener_test.php | 3 ++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/phpBB/config/default/container/services_event.yml b/phpBB/config/default/container/services_event.yml index 5696275e64..4ab5fdafa9 100644 --- a/phpBB/config/default/container/services_event.yml +++ b/phpBB/config/default/container/services_event.yml @@ -9,6 +9,7 @@ services: arguments: - '@template' - '@language' + - '@user' - '%debug.exceptions%' tags: - { name: kernel.event_subscriber } diff --git a/phpBB/phpbb/event/kernel_exception_subscriber.php b/phpBB/phpbb/event/kernel_exception_subscriber.php index 373e59b0c8..57e8ecb61a 100644 --- a/phpBB/phpbb/event/kernel_exception_subscriber.php +++ b/phpBB/phpbb/event/kernel_exception_subscriber.php @@ -44,6 +44,13 @@ class kernel_exception_subscriber implements EventSubscriberInterface */ protected $language; + /** + * User object + * + * @var \phpbb\user + */ + protected $user; + /** @var \phpbb\request\type_cast_helper */ protected $type_caster; @@ -52,13 +59,15 @@ class kernel_exception_subscriber implements EventSubscriberInterface * * @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, $debug = false) + 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(); } @@ -81,6 +90,9 @@ class kernel_exception_subscriber implements EventSubscriberInterface } else if (!$this->debug && $exception instanceof NotFoundHttpException) { + // Do not update user session page if it does not exist + $this->user->update_session_page = false; + $message = $this->language->lang('PAGE_NOT_FOUND'); } diff --git a/tests/event/exception_listener_test.php b/tests/event/exception_listener_test.php index 346bc5f3ec..0f664cb014 100644 --- a/tests/event/exception_listener_test.php +++ b/tests/event/exception_listener_test.php @@ -81,8 +81,9 @@ class exception_listener extends phpbb_test_case $lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); $lang = new \phpbb\language\language($lang_loader); + $user = new \phpbb\user($lang, '\phpbb\datetime'); - $exception_listener = new \phpbb\event\kernel_exception_subscriber($template, $lang); + $exception_listener = new \phpbb\event\kernel_exception_subscriber($template, $lang, $user); $event = new \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent($this->createMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, \Symfony\Component\HttpKernel\HttpKernelInterface::MASTER_REQUEST, $exception); $exception_listener->on_kernel_exception($event);