mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-30 21:40:43 +02:00
[ticket/12683] Add CLI command to generate the search index
PHPBB3-12683
This commit is contained in:
120
phpBB/phpbb/console/command/searchindex/create.php
Normal file
120
phpBB/phpbb/console/command/searchindex/create.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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\console\command\searchindex;
|
||||
|
||||
use phpbb\config\config;
|
||||
use phpbb\console\command\command;
|
||||
use phpbb\language\language;
|
||||
use phpbb\log\log;
|
||||
use phpbb\search\search_backend_factory;
|
||||
use phpbb\user;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
class create extends command
|
||||
{
|
||||
/** @var config */
|
||||
protected $config;
|
||||
|
||||
/** @var language */
|
||||
protected $language;
|
||||
|
||||
/** @var log */
|
||||
protected $log;
|
||||
|
||||
/** @var search_backend_factory */
|
||||
protected $search_backend_factory;
|
||||
|
||||
/**
|
||||
* Construct method
|
||||
*
|
||||
* @param config $config
|
||||
* @param language $language
|
||||
* @param log $log
|
||||
* @param search_backend_factory $search_backend_factory
|
||||
* @param user $user
|
||||
*/
|
||||
public function __construct(config $config, language $language, log $log, search_backend_factory $search_backend_factory, user $user)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->language = $language;
|
||||
$this->log = $log;
|
||||
$this->search_backend_factory = $search_backend_factory;
|
||||
|
||||
parent::__construct($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the command name and description
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('searchindex:create')
|
||||
->setDescription($this->language->lang('CLI_DESCRIPTION_SEARCHINDEX_CREATE'))
|
||||
->addArgument(
|
||||
'search-backend',
|
||||
InputArgument::REQUIRED,
|
||||
$this->user->lang('CLI_SEARCHINDEX_SEARCH_BACKEND_NAME')
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the command searchindex:create
|
||||
*
|
||||
* Create search index
|
||||
*
|
||||
* @param InputInterface $input The input stream used to get the options
|
||||
* @param OutputInterface $output The output stream, used to print messages
|
||||
*
|
||||
* @return int 0 if all is well, 1 if any errors occurred
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$search_backend = $input->getArgument('search-backend');
|
||||
$search = $this->search_backend_factory->get($search_backend);
|
||||
$name = $search->get_name();
|
||||
|
||||
try
|
||||
{
|
||||
$counter = 0;
|
||||
while (($status = $search->create_index($counter)) !== null)
|
||||
{
|
||||
$this->config->set('search_indexing_state', implode(',', $this->state), true);
|
||||
|
||||
$io->success($counter);
|
||||
$io->success(print_r($status, 1));
|
||||
}
|
||||
|
||||
$search->tidy();
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
$io->error($this->user->lang('CLI_SEARCHINDEX_CREATE_FAILURE', $name));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$this->log->add('admin', ANONYMOUS, '', 'LOG_SEARCH_INDEX_CREATED', false, array($name));
|
||||
$io->success($this->user->lang('CLI_SEARCHINDEX_CREATE_SUCCESS', $name));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
129
phpBB/phpbb/console/command/searchindex/delete.php
Normal file
129
phpBB/phpbb/console/command/searchindex/delete.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?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\console\command\searchindex;
|
||||
|
||||
use phpbb\config\config;
|
||||
use phpbb\console\command\command;
|
||||
use phpbb\language\language;
|
||||
use phpbb\log\log;
|
||||
use phpbb\search\search_backend_factory;
|
||||
use phpbb\user;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
class delete extends command
|
||||
{
|
||||
/** @var config */
|
||||
protected $config;
|
||||
|
||||
/** @var language */
|
||||
protected $language;
|
||||
|
||||
/** @var log */
|
||||
protected $log;
|
||||
|
||||
/** @var search_backend_factory */
|
||||
protected $search_backend_factory;
|
||||
|
||||
/**
|
||||
* Construct method
|
||||
*
|
||||
* @param config $config
|
||||
* @param language $language
|
||||
* @param log $log
|
||||
* @param search_backend_factory $search_backend_factory
|
||||
* @param user $user
|
||||
*/
|
||||
public function __construct(config $config, language $language, log $log, search_backend_factory $search_backend_factory, user $user)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->language = $language;
|
||||
$this->log = $log;
|
||||
$this->search_backend_factory = $search_backend_factory;
|
||||
|
||||
parent::__construct($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the command name and description
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('searchindex:delete')
|
||||
->setDescription($this->language->lang('CLI_DESCRIPTION_SEARCHINDEX_DELETE'))
|
||||
->addArgument(
|
||||
'search-backend',
|
||||
InputArgument::REQUIRED,
|
||||
$this->user->lang('CLI_SEARCHINDEX_SEARCH_BACKEND_NAME')
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the command searchindex:delete
|
||||
*
|
||||
* Delete search index
|
||||
*
|
||||
* @param InputInterface $input The input stream used to get the options
|
||||
* @param OutputInterface $output The output stream, used to print messages
|
||||
*
|
||||
* @return int 0 if all is well, 1 if any errors occurred
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$search_backend = $input->getArgument('search-backend');
|
||||
$search = $this->search_backend_factory->get($search_backend);
|
||||
$name = $search->get_name();
|
||||
|
||||
try
|
||||
{
|
||||
$this->state = explode(',', $this->config['search_indexing_state']);
|
||||
$this->max_post_id = $this->get_max_post_id();
|
||||
|
||||
$search->delete_index($this, '');
|
||||
$search->tidy();
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
$io->error($this->user->lang('CLI_SEARCHINDEX_DELETE_FAILURE', $name));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$this->log->add('admin', ANONYMOUS, '', 'LOG_SEARCH_INDEX_REMOVED', false, array($name));
|
||||
$io->success($this->user->lang('CLI_SEARCHINDEX_DELETE_SUCCESS', $name));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
function save_state($state = false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if ($state)
|
||||
{
|
||||
$this->state = $state;
|
||||
}
|
||||
|
||||
ksort($this->state);
|
||||
|
||||
$config->set('search_indexing_state', implode(',', $this->state), true);
|
||||
}
|
||||
}
|
92
phpBB/phpbb/console/command/searchindex/list_all.php
Normal file
92
phpBB/phpbb/console/command/searchindex/list_all.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?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\console\command\searchindex;
|
||||
|
||||
use phpbb\config\config;
|
||||
use phpbb\console\command\command;
|
||||
use phpbb\di\service_collection;
|
||||
use phpbb\language\language;
|
||||
use phpbb\user;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
class list_all extends command
|
||||
{
|
||||
/** @var config */
|
||||
protected $config;
|
||||
|
||||
/** @var language */
|
||||
protected $language;
|
||||
|
||||
/** @var service_collection */
|
||||
protected $search_backend_collection;
|
||||
|
||||
/**
|
||||
* Construct method
|
||||
*
|
||||
* @param config $config
|
||||
* @param language $language
|
||||
* @param service_collection $search_backend_collection
|
||||
* @param user $user
|
||||
*/
|
||||
public function __construct(config $config, language $language, service_collection $search_backend_collection, user $user)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->language = $language;
|
||||
$this->search_backend_collection = $search_backend_collection;
|
||||
|
||||
parent::__construct($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the command name and description
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('searchindex:list')
|
||||
->setDescription($this->language->lang('CLI_DESCRIPTION_SEARCHINDEX_LIST'))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the command searchindex:list
|
||||
*
|
||||
* List all search backends.
|
||||
*
|
||||
* @param InputInterface $input The input stream used to get the options
|
||||
* @param OutputInterface $output The output stream, used to print messages
|
||||
*
|
||||
* @return int 0 if all is well, 1 if any errors occurred
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$search_backends = [];
|
||||
foreach ($this->search_backend_collection as $search_backend)
|
||||
{
|
||||
$name = get_class($search_backend);
|
||||
$active = ($name == $this->config['search_type']) ? '(<comment>' . $this->language->lang('ACTIVE') . '</comment>) ' : '';
|
||||
$search_backends[] = '<info>' . $name . '</info> ' . $active . $search_backend->get_name();
|
||||
}
|
||||
|
||||
$io->listing($search_backends);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user