diff --git a/phpBB/adm/style/acp_search_index_inprogress.html b/phpBB/adm/style/acp_search_index_inprogress.html index b8206c8d46..0f2c2e6f77 100644 --- a/phpBB/adm/style/acp_search_index_inprogress.html +++ b/phpBB/adm/style/acp_search_index_inprogress.html @@ -4,6 +4,7 @@

{L_ACP_SEARCH_INDEX}

+{# todo: check the l_continue that is send from acp_search here #}

{L_CONTINUE_EXPLAIN}

diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php index 2d73913ac1..a3a304bb62 100644 --- a/phpBB/includes/acp/acp_search.php +++ b/phpBB/includes/acp/acp_search.php @@ -14,6 +14,16 @@ /** * @ignore */ + +use phpbb\config\config; +use phpbb\di\service_collection; +use phpbb\language\language; +use phpbb\log\log; +use phpbb\request\request; +use phpbb\search\search_backend_factory; +use phpbb\template\template; +use phpbb\user; + if (!defined('IN_PHPBB')) { exit; @@ -22,19 +32,88 @@ if (!defined('IN_PHPBB')) class acp_search { public $u_action; + public $tpl_name; + public $page_title; protected const STATE_SEARCH_TYPE = 0; protected const STATE_ACTION = 1; protected const STATE_POST_COUNTER = 2; - public function main($id, $mode) + /** + * @var config + */ + protected $config; + + /** + * @var language + */ + protected $language; + + /** + * @var log + */ + protected $log; + + /** + * @var request + */ + protected $request; + + /** + * @var service_collection + */ + protected $search_backend_collection; + + /** + * @var search_backend_factory + */ + protected $search_backend_factory; + + /** + * @var template + */ + protected $template; + + /** + * @var user + */ + protected $user; + + /** + * @var string + */ + protected $phpbb_admin_path; + + /** + * @var string + */ + protected $php_ex; + + public function __construct($p_master) { - global $user; + global $config, $phpbb_container, $language, $phpbb_log, $request, $template, $user, $phpbb_admin_path, $phpEx; - $user->add_lang('acp/search'); + $this->config = $config; + $this->language = $language; + $this->log = $phpbb_log; + $this->request = $request; + $this->search_backend_collection = $phpbb_container->get('search.backend_collection'); + $this->search_backend_factory = $phpbb_container->get('search.backend_factory'); + $this->template = $template; + $this->user = $user; + $this->phpbb_admin_path = $phpbb_admin_path; + $this->php_ex = $phpEx; + } - // For some this may be of help... - @ini_set('memory_limit', '128M'); + /** + * @param string $id + * @param string $mode + * @throws Exception + * @return void + */ + public function main(string $id, string $mode): void + { + $this->language->add_lang('acp/search'); switch ($mode) { @@ -48,21 +127,15 @@ class acp_search } } - function settings($id, $mode) + public function settings(string $id, string $mode): void { - global $user, $template, $phpbb_log, $request; - global $config, $phpbb_admin_path, $phpEx; - global $phpbb_container; + $submit = $this->request->is_set_post('submit'); - $submit = $request->is_set_post('submit'); - - if ($submit && !check_link_hash($request->variable('hash', ''), 'acp_search')) + if ($submit && !check_link_hash($this->request->variable('hash', ''), 'acp_search')) { - trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); + trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING); } - $search_types = $phpbb_container->get('search.backend_collection'); - $settings = [ 'search_interval' => 'float', 'search_anonymous_interval' => 'float', @@ -74,18 +147,17 @@ class acp_search 'search_store_results' => 'integer', ]; - $search = null; $search_options = ''; - foreach ($search_types as $search) + foreach ($this->search_backend_collection as $search) { // Only show available search backends if ($search->is_available()) { $name = $search->get_name(); - $type = get_class($search); + $type = $search->get_type(); - $selected = ($config['search_type'] == $type) ? ' selected="selected"' : ''; + $selected = ($this->config['search_type'] == $type) ? ' selected="selected"' : ''; $identifier = substr($type, strrpos($type, '\\') + 1); $search_options .= ""; @@ -93,7 +165,7 @@ class acp_search if (!$submit) { - $template->assign_block_vars('backend', array( + $this->template->assign_block_vars('backend', array( 'NAME' => $name, 'SETTINGS' => $vars['tpl'], 'IDENTIFIER' => $identifier, @@ -105,14 +177,13 @@ class acp_search } } } - unset($search); - $cfg_array = (isset($_REQUEST['config'])) ? $request->variable('config', array('' => ''), true) : array(); - $updated = $request->variable('updated', false); + $cfg_array = (isset($_REQUEST['config'])) ? $this->request->variable('config', array('' => ''), true) : array(); + $updated = $this->request->variable('updated', false); - foreach ($settings as $config_name => $var_type) + foreach ($settings as $this->config_name => $var_type) { - if (!isset($cfg_array[$config_name])) + if (!isset($cfg_array[$this->config_name])) { continue; } @@ -120,23 +191,23 @@ class acp_search // e.g. integer:4:12 (min 4, max 12) $var_type = explode(':', $var_type); - $config_value = $cfg_array[$config_name]; - settype($config_value, $var_type[0]); + $this->config_value = $cfg_array[$this->config_name]; + settype($this->config_value, $var_type[0]); if (isset($var_type[1])) { - $config_value = max($var_type[1], $config_value); + $this->config_value = max($var_type[1], $this->config_value); } if (isset($var_type[2])) { - $config_value = min($var_type[2], $config_value); + $this->config_value = min($var_type[2], $this->config_value); } // only change config if anything was actually changed - if ($submit && ($config[$config_name] != $config_value)) + if ($submit && ($this->config[$this->config_name] != $this->config_value)) { - $config->set($config_name, $config_value); + $this->config->set($this->config_name, $this->config_value); $updated = true; } } @@ -146,25 +217,24 @@ class acp_search $extra_message = ''; if ($updated) { - $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_SEARCH'); + $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_CONFIG_SEARCH'); } - if (isset($cfg_array['search_type']) && ($cfg_array['search_type'] != $config['search_type'])) + if (isset($cfg_array['search_type']) && ($cfg_array['search_type'] != $this->config['search_type'])) { - $search_backend_factory = $phpbb_container->get('search.backend_factory'); - $search = $search_backend_factory->get($cfg_array['search_type']); + $search = $this->search_backend_factory->get($cfg_array['search_type']); if (confirm_box(true)) { // Initialize search backend, if $error is false means that everything is ok if (!($error = $search->init())) { - $config->set('search_type', $cfg_array['search_type']); + $this->config->set('search_type', $cfg_array['search_type']); if (!$updated) { - $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_SEARCH'); + $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_CONFIG_SEARCH'); } - $extra_message = '
' . $user->lang['SWITCHED_SEARCH_BACKEND'] . '
» ' . $user->lang['GO_TO_SEARCH_INDEX'] . ''; + $extra_message = '
' . $this->language->lang('SWITCHED_SEARCH_BACKEND') . '
php_ex, 'i=search&mode=index') . '">» ' . $this->language->lang('GO_TO_SEARCH_INDEX') . ''; } else { @@ -173,7 +243,7 @@ class acp_search } else { - confirm_box(false, $user->lang['CONFIRM_SEARCH_BACKEND'], build_hidden_fields(array( + confirm_box(false, $this->language->lang('CONFIRM_SEARCH_BACKEND'), build_hidden_fields(array( 'i' => $id, 'mode' => $mode, 'submit' => true, @@ -183,215 +253,248 @@ class acp_search } } - trigger_error($user->lang['CONFIG_UPDATED'] . $extra_message . adm_back_link($this->u_action)); + trigger_error($this->language->lang('CONFIG_UPDATED') . $extra_message . adm_back_link($this->u_action)); } unset($cfg_array); $this->tpl_name = 'acp_search_settings'; $this->page_title = 'ACP_SEARCH_SETTINGS'; - $template->assign_vars([ - 'DEFAULT_SEARCH_RETURN_CHARS' => (int) $config['default_search_return_chars'], - 'LIMIT_SEARCH_LOAD' => (float) $config['limit_search_load'], - 'MIN_SEARCH_AUTHOR_CHARS' => (int) $config['min_search_author_chars'], - 'SEARCH_INTERVAL' => (float) $config['search_interval'], - 'SEARCH_GUEST_INTERVAL' => (float) $config['search_anonymous_interval'], - 'SEARCH_STORE_RESULTS' => (int) $config['search_store_results'], - 'MAX_NUM_SEARCH_KEYWORDS' => (int) $config['max_num_search_keywords'], + $this->template->assign_vars([ + 'DEFAULT_SEARCH_RETURN_CHARS' => (int) $this->config['default_search_return_chars'], + 'LIMIT_SEARCH_LOAD' => (float) $this->config['limit_search_load'], + 'MIN_SEARCH_AUTHOR_CHARS' => (int) $this->config['min_search_author_chars'], + 'SEARCH_INTERVAL' => (float) $this->config['search_interval'], + 'SEARCH_GUEST_INTERVAL' => (float) $this->config['search_anonymous_interval'], + 'SEARCH_STORE_RESULTS' => (int) $this->config['search_store_results'], + 'MAX_NUM_SEARCH_KEYWORDS' => (int) $this->config['max_num_search_keywords'], 'S_SEARCH_TYPES' => $search_options, - 'S_YES_SEARCH' => (bool) $config['load_search'], + 'S_YES_SEARCH' => (bool) $this->config['load_search'], 'U_ACTION' => $this->u_action . '&hash=' . generate_link_hash('acp_search'), ]); } - public function index($id, $mode) + /** + * @param string $id + * @param string $mode + * @throws Exception + */ + public function index(string $id, string $mode): void { - global $user, $template, $phpbb_log, $request; - global $config, $phpbb_admin_path, $phpEx, $phpbb_container; + $action = $this->request->variable('action', ''); + $state = !empty($this->config['search_indexing_state']) ? explode(',', $this->config['search_indexing_state']) : []; - $action = $request->variable('action', ''); - $state = explode(',', $config['search_indexing_state']); - - if ($request->is_set_post('cancel')) - { - $action = ''; - $state = array(); - $this->save_state($state); - } - $submit = $request->is_set_post('submit'); - - if (!check_link_hash($request->variable('hash', ''), 'acp_search') && in_array($action, array('create', 'delete'))) - { - trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - if ($action) + if($action) { switch ($action) { case 'progress_bar': - $type = $request->variable('type', ''); - $this->display_progress_bar($type); - break; - - case 'delete': - $state[self::STATE_ACTION] = 'delete'; + $this->display_progress_bar(); break; case 'create': - $state[self::STATE_ACTION] = 'create'; + case 'delete': + $this->index_action($id, $mode, $action, $state); break; default: trigger_error('NO_ACTION', E_USER_ERROR); } - - if (empty($state[self::STATE_SEARCH_TYPE])) + } + else + { + // If clicked to no continue with the indexing progress (acp_search_index_inprogress form) + if ($this->request->is_set_post('cancel')) { - $state[self::STATE_SEARCH_TYPE] = $request->variable('search_type', ''); + $state = []; + $this->save_state($state); } - $search_backend_factory = $phpbb_container->get('search.backend_factory'); - $search = $search_backend_factory->get($state[self::STATE_SEARCH_TYPE]); - - $name = $search->get_name(); - - $action = &$state[1]; - - $this->save_state($state); - - switch ($action) + if (!empty($state)) { - case 'delete': - try - { - $state[self::STATE_POST_COUNTER] = $state[self::STATE_POST_COUNTER] ?? 0; - if ($status = $search->delete_index($state[self::STATE_POST_COUNTER])) // Status is not null, so deleting is in progress.... - { - // save the current state - $this->save_state($state); - - $u_action = append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete&hash=" . generate_link_hash('acp_search'), false); - meta_refresh(1, $u_action); - trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $status['row_count'], $status['post_counter']) . $user->lang('SEARCH_INDEX_DELETE_REDIRECT_RATE', $status['rows_per_second'])); - } - } - catch (Exception $e) - { - $state = []; - $this->save_state($state); - trigger_error($e->getMessage() . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING); - } - - $search->tidy(); - - $state = []; - $this->save_state($state); - - $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_SEARCH_INDEX_REMOVED', false, array($name)); - trigger_error($user->lang['SEARCH_INDEX_REMOVED'] . adm_back_link($this->u_action) . $this->close_popup_js()); - break; - - case 'create': - try - { - $state[self::STATE_POST_COUNTER] = $state[self::STATE_POST_COUNTER] ?? 0; - if ($status = $search->create_index($state[self::STATE_POST_COUNTER])) // Status is not null, so indexing is in progress.... - { - // save the current state - $this->save_state($state); - - $u_action = append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=create&hash=" . generate_link_hash('acp_search'), false); - meta_refresh(1, $u_action); - trigger_error($user->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $status['row_count'], $status['post_counter']) . $user->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $status['rows_per_second'])); - } - } - catch (Exception $e) - { - // Error executing create_index - $state = []; - $this->save_state($state); - trigger_error($e->getMessage() . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING); - } - - // Indexing have finished - - $search->tidy(); - - $state = []; - $this->save_state($state); - - $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_SEARCH_INDEX_CREATED', false, array($name)); - trigger_error($user->lang['SEARCH_INDEX_CREATED'] . adm_back_link($this->u_action) . $this->close_popup_js()); - break; + $this->index_inprogress($id, $mode, $state[self::STATE_ACTION]); + } + else + { + $this->index_overview($id, $mode); } - } - - $search_types = $phpbb_container->get('search.backend_collection'); - - foreach ($search_types as $search) - { - $type = get_class($search); - $name = $search->get_name(); - $data = $search->index_stats(); - - $template->assign_block_vars('backend', array( - 'L_NAME' => $name, - 'NAME' => $type, - - 'S_ACTIVE' => $type == $config['search_type'], - 'S_HIDDEN_FIELDS' => build_hidden_fields(array('search_type' => $type)), - 'S_INDEXED' => (bool) $search->index_created(), - 'S_STATS' => $data, - )); - } - - $this->tpl_name = 'acp_search_index'; - $this->page_title = 'ACP_SEARCH_INDEX'; - - $template->assign_vars(array( - 'U_ACTION' => $this->u_action . '&hash=' . generate_link_hash('acp_search'), - 'U_PROGRESS_BAR' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=progress_bar"), - 'UA_PROGRESS_BAR' => addslashes(append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=progress_bar")), - )); - - if (isset($state[self::STATE_ACTION])) - { - $this->tpl_name = 'acp_search_index'; - $this->page_title = 'ACP_SEARCH_INDEX'; - - $template->assign_vars(array( - 'S_CONTINUE_INDEXING' => $state[1], - 'U_CONTINUE_INDEXING' => $this->u_action . '&action=' . $state[self::STATE_ACTION] . '&hash=' . generate_link_hash('acp_search'), - 'L_CONTINUE' => ($state[self::STATE_ACTION] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_DELETING_INDEX'], - 'L_CONTINUE_EXPLAIN' => ($state[self::STATE_ACTION] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_DELETING_INDEX_EXPLAIN']) - ); } } - function display_progress_bar($type) + /** + * @param string $id + * @param string $mode + * + * @throws Exception + */ + private function index_overview(string $id, string $mode): void { - global $template, $user; + $this->tpl_name = 'acp_search_index'; + $this->page_title = 'ACP_SEARCH_INDEX'; - $l_type = ($type == 'create') ? 'INDEXING_IN_PROGRESS' : 'DELETING_INDEX_IN_PROGRESS'; + foreach ($this->search_backend_collection as $search) + { + $this->template->assign_block_vars('backend', array( + 'L_NAME' => $search->get_name(), + 'NAME' => $search->get_type(), - adm_page_header($user->lang[$l_type]); + 'S_ACTIVE' => $search->get_type() === $this->config['search_type'], + 'S_HIDDEN_FIELDS' => build_hidden_fields(array('search_type' => $search->get_type())), + 'S_INDEXED' => $search->index_created(), + 'S_STATS' => $search->index_stats(), + )); + } - $template->set_filenames(array( + $this->template->assign_vars(array( + 'U_ACTION' => $this->u_action . '&hash=' . generate_link_hash('acp_search'), + 'UA_PROGRESS_BAR' => addslashes($this->u_action . '&action=progress_bar'), + )); + } + + /** + * Form to continue or cancel indexing process + * + * @param string $id + * @param string $mode + * @param string $action Action in progress: 'create' or 'delete' + */ + private function index_inprogress(string $id, string $mode, string $action): void + { + $this->tpl_name = 'acp_search_inprogress'; + $this->page_title = 'ACP_SEARCH_INDEX'; + + $this->template->assign_vars(array( + 'U_CONTINUE_INDEXING' => $this->u_action . '&action=' . $action . '&hash=' . generate_link_hash('acp_search'), + 'L_CONTINUE' => ($action === 'create') ? $this->language->lang('CONTINUE_INDEXING') : $this->language->lang('CONTINUE_DELETING_INDEX'), + 'L_CONTINUE_EXPLAIN' => ($action === 'create') ? $this->language->lang('CONTINUE_INDEXING_EXPLAIN') : $this->language->lang('CONTINUE_DELETING_INDEX_EXPLAIN')) + ); + } + + private function index_action(string $id, string $mode, string $action, array $state): void + { + // For some this may be of help... + @ini_set('memory_limit', '128M'); + + if (!check_link_hash($this->request->variable('hash', ''), 'acp_search')) + { + trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING); + } + + // Entering here for the first time + if (empty($state)) + { + if ($this->request->is_set_post('search_type', '')) { + $state = [ + self::STATE_SEARCH_TYPE => $this->request->variable('search_type', ''), + self::STATE_ACTION => $action, + self::STATE_POST_COUNTER => 0 + ]; + } + else + { + trigger_error($this->language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING); + } + + $this->save_state($state); // Create new state in the database + } + + $type = $state[self::STATE_SEARCH_TYPE]; + $action = $state[self::STATE_ACTION]; + $post_counter = &$state[self::STATE_POST_COUNTER]; + + switch ($action) + { + case 'delete': + $search = $this->search_backend_factory->get($type); + + try + { + if ($status = $search->delete_index($post_counter)) // Status is not null, so deleting is in progress.... + { + $this->save_state($state); // update $post_counter in $state in the database + + $u_action = append_sid($this->phpbb_admin_path . "index." . $this->php_ex, "i=$id&mode=$mode&action=delete&hash=" . generate_link_hash('acp_search'), false); + meta_refresh(1, $u_action); + trigger_error($this->language->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $status['row_count'], $status['post_counter']) . $this->language->lang('SEARCH_INDEX_DELETE_REDIRECT_RATE', $status['rows_per_second'])); + } + } + catch (Exception $e) + { + $this->save_state([]); // Unexpected error, cancel action + trigger_error($e->getMessage() . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING); + } + + $search->tidy(); + + $this->save_state([]); // finished operation, cancel action + + $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SEARCH_INDEX_REMOVED', false, array($search->get_name())); + trigger_error($this->language->lang('SEARCH_INDEX_REMOVED') . adm_back_link($this->u_action) . $this->close_popup_js()); + break; + + case 'create': + $search = $this->search_backend_factory->get($type); + + try + { + $search = $this->search_backend_factory->get($type); + + if ($status = $search->create_index($post_counter)) // Status is not null, so indexing is in progress.... + { + $this->save_state($state); // update $post_counter in $state in the database + + $u_action = append_sid($this->phpbb_admin_path . "index." . $this->php_ex, "i=$id&mode=$mode&action=create&hash=" . generate_link_hash('acp_search'), false); + meta_refresh(1, $u_action); + trigger_error($this->language->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $status['row_count'], $status['post_counter']) . $this->language->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $status['rows_per_second'])); + } + } + catch (Exception $e) + { + // Error executing create_index + $this->save_state([]); + trigger_error($e->getMessage() . adm_back_link($this->u_action) . $this->close_popup_js(), E_USER_WARNING); + } + + $search->tidy(); + + $this->save_state([]); // finished operation, cancel action + + $this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_SEARCH_INDEX_CREATED', false, array($search->get_name())); + trigger_error($this->language->lang('SEARCH_INDEX_CREATED') . adm_back_link($this->u_action) . $this->close_popup_js()); + break; + } + } + + /** + * Popup window + */ + private function display_progress_bar(): void + { + $type = $this->request->variable('type', ''); + $l_type = ($type === 'create') ? 'INDEXING_IN_PROGRESS' : 'DELETING_INDEX_IN_PROGRESS'; + + adm_page_header($this->language->lang($l_type)); + + $this->template->set_filenames(array( 'body' => 'progress_bar.html') ); - $template->assign_vars(array( - 'L_PROGRESS' => $user->lang[$l_type], - 'L_PROGRESS_EXPLAIN' => $user->lang[$l_type . '_EXPLAIN']) - ); + $this->template->assign_vars(array( + 'L_PROGRESS' => $this->language->lang($l_type), + 'L_PROGRESS_EXPLAIN' => $this->language->lang($l_type . '_EXPLAIN'), + )); adm_page_footer(); } - function close_popup_js() + /** + * Javascript code for closing the waiting screen (is attached to the trigger_errors) + * + * @return string + */ + private function close_popup_js(): string { return "\n"; } - function save_state($state = false) + /** + * @param array $state + */ + private function save_state(array $state = []): void { - global $config; - ksort($state); - $config->set('search_indexing_state', implode(',', $state), true); + $this->config->set('search_indexing_state', implode(',', $state), true); } } diff --git a/phpBB/phpbb/search/backend/base.php b/phpBB/phpbb/search/backend/base.php index 0245c72c2a..a6bcb08850 100644 --- a/phpBB/phpbb/search/backend/base.php +++ b/phpBB/phpbb/search/backend/base.php @@ -480,4 +480,12 @@ abstract class base implements search_backend_interface return $max_post_id; } + + /** + * {@inheritdoc} + */ + public function get_type(): string + { + return static::class; + } } diff --git a/phpBB/phpbb/search/backend/fulltext_sphinx.php b/phpBB/phpbb/search/backend/fulltext_sphinx.php index cc6c0b8afe..1d7ff5f310 100644 --- a/phpBB/phpbb/search/backend/fulltext_sphinx.php +++ b/phpBB/phpbb/search/backend/fulltext_sphinx.php @@ -1022,4 +1022,12 @@ class fulltext_sphinx implements search_backend_interface return true; } + + /** + * {@inheritdoc} + */ + public function get_type(): string + { + return static::class; + } } diff --git a/phpBB/phpbb/search/backend/search_backend_interface.php b/phpBB/phpbb/search/backend/search_backend_interface.php index 1fdc138028..82ea0d03ff 100644 --- a/phpBB/phpbb/search/backend/search_backend_interface.php +++ b/phpBB/phpbb/search/backend/search_backend_interface.php @@ -193,4 +193,11 @@ interface search_backend_interface * @return array array containing template and config variables */ public function get_acp_options(): array; + + /** + * Gets backend class + * + * @return string + */ + public function get_type(): string; } diff --git a/phpBB/phpbb/storage/provider/local.php b/phpBB/phpbb/storage/provider/local.php index 8e0de2b6fd..93d3c7a6d0 100644 --- a/phpBB/phpbb/storage/provider/local.php +++ b/phpBB/phpbb/storage/provider/local.php @@ -26,7 +26,7 @@ class local implements provider_interface /** * {@inheritdoc} */ - public function get_adapter_class() + public function get_adapter_class(): string { return \phpbb\storage\adapter\local::class; } diff --git a/phpBB/phpbb/storage/provider/provider_interface.php b/phpBB/phpbb/storage/provider/provider_interface.php index 428b6eb187..484b660aa8 100644 --- a/phpBB/phpbb/storage/provider/provider_interface.php +++ b/phpBB/phpbb/storage/provider/provider_interface.php @@ -25,9 +25,9 @@ interface provider_interface /** * Gets adapter class * - * @return \phpbb\storage\adapter\adapter_interface + * @return string */ - public function get_adapter_class(); + public function get_adapter_class(): string; /** * Gets adapter options