[ticket/12683] Improve exception handling

PHPBB3-12683
This commit is contained in:
Ruben Calvo 2022-12-10 00:23:44 +01:00
parent 1c191868de
commit 8cea785f36
No known key found for this signature in database
11 changed files with 54 additions and 17 deletions

View file

@ -259,7 +259,6 @@ services:
console.command.searchindex.create: console.command.searchindex.create:
class: phpbb\console\command\searchindex\create class: phpbb\console\command\searchindex\create
arguments: arguments:
- '@config'
- '@language' - '@language'
- '@log' - '@log'
- '@post.helper' - '@post.helper'
@ -272,7 +271,6 @@ services:
console.command.searchindex.delete: console.command.searchindex.delete:
class: phpbb\console\command\searchindex\delete class: phpbb\console\command\searchindex\delete
arguments: arguments:
- '@config'
- '@language' - '@language'
- '@log' - '@log'
- '@post.helper' - '@post.helper'

View file

@ -91,6 +91,8 @@ $lang = array_merge($lang, array(
'GENERAL_SEARCH_SETTINGS' => 'General search settings', 'GENERAL_SEARCH_SETTINGS' => 'General search settings',
'GO_TO_SEARCH_INDEX' => 'Go to search index page', 'GO_TO_SEARCH_INDEX' => 'Go to search index page',
'INVALID_ACTION' => 'Invalid action',
'INDEX_STATS' => 'Index statistics', 'INDEX_STATS' => 'Index statistics',
'INDEXING_IN_PROGRESS' => 'Indexing in progress', 'INDEXING_IN_PROGRESS' => 'Indexing in progress',
'INDEXING_IN_PROGRESS_EXPLAIN' => 'The search backend is currently indexing all posts on the board. This can take from a few minutes to a few hours depending on your boards size.', 'INDEXING_IN_PROGRESS_EXPLAIN' => 'The search backend is currently indexing all posts on the board. This can take from a few minutes to a few hours depending on your boards size.',

View file

@ -215,6 +215,9 @@ $lang = array_merge($lang, array(
2 => 'Downloaded %d times', 2 => 'Downloaded %d times',
), ),
'DI_SERVICE_NOT_FOUND' => 'No service found for class "%s" in collection.',
'DI_MULTIPLE_SERVICE_DEFINITIONS' => 'More than one service definitions found for class "%s" in collection.',
'EDIT_POST' => 'Edit post', 'EDIT_POST' => 'Edit post',
'ELLIPSIS' => '…', 'ELLIPSIS' => '…',
'EMAIL' => 'Email', // Short form for EMAIL_ADDRESS 'EMAIL' => 'Email', // Short form for EMAIL_ADDRESS
@ -715,6 +718,7 @@ $lang = array_merge($lang, array(
'SEARCH_UNANSWERED' => 'Unanswered topics', 'SEARCH_UNANSWERED' => 'Unanswered topics',
'SEARCH_UNREAD' => 'Unread posts', 'SEARCH_UNREAD' => 'Unread posts',
'SEARCH_USER_POSTS' => 'Search users posts', 'SEARCH_USER_POSTS' => 'Search users posts',
'SEARCH_BACKEND_NOT_FOUND' => 'No search backend could be found.',
'SECONDS' => 'Seconds', 'SECONDS' => 'Seconds',
'SEE_ALL' => 'See All', 'SEE_ALL' => 'See All',
'SELECT' => 'Select', 'SELECT' => 'Select',

View file

@ -82,7 +82,7 @@ class list_all extends command
foreach ($this->search_backend_collection as $search_backend) foreach ($this->search_backend_collection as $search_backend)
{ {
$name = $search_backend->get_type(); $name = $search_backend->get_type();
$active = ($name === $this->config['search_type']) ? '(<comment>' . $this->language->lang('$') . '</comment>) ' : ''; $active = ($name === $this->config['search_type']) ? '(<comment>' . $this->language->lang('ACTIVE') . '</comment>) ' : '';
$search_backends[] = '<info>' . $name . '</info> ' . $active . $search_backend->get_name(); $search_backends[] = '<info>' . $name . '</info> ' . $active . $search_backend->get_name();
if ($name === $this->config['search_type'] && !$search_backend->index_created()) if ($name === $this->config['search_type'] && !$search_backend->index_created())

View file

@ -15,6 +15,7 @@ namespace phpbb\cron\task\core;
use phpbb\config\config; use phpbb\config\config;
use phpbb\cron\task\base; use phpbb\cron\task\base;
use phpbb\di\exception\di_exception;
use phpbb\search\backend\search_backend_interface; use phpbb\search\backend\search_backend_interface;
use phpbb\search\search_backend_factory; use phpbb\search\search_backend_factory;
@ -88,7 +89,7 @@ class tidy_search extends base
$this->active_search = $this->search_backend_factory->get_active(); $this->active_search = $this->search_backend_factory->get_active();
} }
} }
catch (\RuntimeException $e) catch (di_exception $e)
{ {
return false; return false;
} }

View file

@ -0,0 +1,21 @@
<?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\di\exception;
use phpbb\exception\runtime_exception;
class di_exception extends runtime_exception
{
}

View file

@ -0,0 +1,8 @@
<?php
namespace phpbb\di\exception;
class multiple_service_definitions_exception extends di_exception
{
}

View file

@ -0,0 +1,8 @@
<?php
namespace phpbb\di\exception;
class service_not_found_exception extends di_exception
{
}

View file

@ -13,6 +13,8 @@
namespace phpbb\di; namespace phpbb\di;
use phpbb\di\exception\multiple_service_definitions_exception;
use phpbb\di\exception\service_not_found_exception;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
/** /**
@ -105,7 +107,7 @@ class service_collection extends \ArrayObject
{ {
if ($service_id !== null) if ($service_id !== null)
{ {
throw new \RuntimeException('More than one service definitions found for class "'.$class.'" in collection.'); throw new multiple_service_definitions_exception('DI_MULTIPLE_SERVICE_DEFINITIONS', [$class]);
} }
$service_id = $id; $service_id = $id;
@ -114,7 +116,7 @@ class service_collection extends \ArrayObject
if ($service_id === null) if ($service_id === null)
{ {
throw new \RuntimeException('No service found for class "'.$class.'" in collection.'); throw new service_not_found_exception('DI_SERVICE_NOT_FOUND', [$class]);
} }
return $this->offsetGet($service_id); return $this->offsetGet($service_id);

View file

@ -14,10 +14,10 @@
namespace phpbb\search; namespace phpbb\search;
use phpbb\config\config; use phpbb\config\config;
use phpbb\di\exception\service_not_found_exception;
use phpbb\di\service_collection; use phpbb\di\service_collection;
use phpbb\search\backend\search_backend_interface; use phpbb\search\backend\search_backend_interface;
use phpbb\search\exception\no_search_backend_found_exception; use phpbb\search\exception\no_search_backend_found_exception;
use RuntimeException;
class search_backend_factory class search_backend_factory
{ {
@ -58,16 +58,9 @@ class search_backend_factory
{ {
$search = $this->search_backends->get_by_class($class); $search = $this->search_backends->get_by_class($class);
} }
catch (RuntimeException $e) catch (service_not_found_exception $e)
{ {
if (strpos($e->getMessage(), 'No service found') === 0) throw new no_search_backend_found_exception('SEARCH_BACKEND_NOT_FOUND', [], $e);
{
throw new no_search_backend_found_exception();
}
else
{
throw $e;
}
} }
return $search; return $search;

View file

@ -113,7 +113,7 @@ class state_helper
// Make sure the action is correct (just in case) // Make sure the action is correct (just in case)
if (!in_array($action, ['create', 'delete'])) if (!in_array($action, ['create', 'delete']))
{ {
throw new search_exception('Invalid action'); throw new search_exception('INVALID_ACTION');
} }
$state = [ $state = [