98 lines
2.5 KiB
PHP
98 lines
2.5 KiB
PHP
|
<?php
|
||
|
namespace Grav\Plugin\Console;
|
||
|
|
||
|
use Grav\Console\ConsoleCommand;
|
||
|
use Grav\Plugin\TNTSearchPlugin;
|
||
|
use Symfony\Component\Console\Input\InputOption;
|
||
|
|
||
|
/**
|
||
|
* Class IndexerCommand
|
||
|
*
|
||
|
* @package Grav\Plugin\Console
|
||
|
*/
|
||
|
class TNTSearchIndexerCommand extends ConsoleCommand
|
||
|
{
|
||
|
/** @var array */
|
||
|
protected $options = [];
|
||
|
/** @var array */
|
||
|
protected $colors = [
|
||
|
'DEBUG' => 'green',
|
||
|
'INFO' => 'cyan',
|
||
|
'NOTICE' => 'yellow',
|
||
|
'WARNING' => 'yellow',
|
||
|
'ERROR' => 'red',
|
||
|
'CRITICAL' => 'red',
|
||
|
'ALERT' => 'red',
|
||
|
'EMERGENCY' => 'magenta'
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function configure(): void
|
||
|
{
|
||
|
$this
|
||
|
->setName('index')
|
||
|
->addOption(
|
||
|
'alt',
|
||
|
null,
|
||
|
InputOption::VALUE_NONE,
|
||
|
'alternative output'
|
||
|
)
|
||
|
->addOption(
|
||
|
'language',
|
||
|
'l',
|
||
|
InputOption::VALUE_OPTIONAL,
|
||
|
'optional language to index (multi-language sites only)'
|
||
|
)
|
||
|
->setDescription('TNTSearch Indexer')
|
||
|
->setHelp('The <info>index command</info> re-indexes the search engine');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int
|
||
|
*/
|
||
|
protected function serve(): int
|
||
|
{
|
||
|
/** @var string|null $langCode */
|
||
|
$langCode = $this->input->getOption('language');
|
||
|
|
||
|
error_reporting(1);
|
||
|
$this->setLanguage($langCode);
|
||
|
$this->initializePages();
|
||
|
|
||
|
$alt_output = $this->input->getOption('alt') ? true : false;
|
||
|
|
||
|
if ($alt_output) {
|
||
|
$output = $this->doIndex($langCode);
|
||
|
$this->output->write($output);
|
||
|
$this->output->writeln('');
|
||
|
} else {
|
||
|
$this->output->writeln('');
|
||
|
$this->output->writeln('<magenta>Re-indexing</magenta>');
|
||
|
$this->output->writeln('');
|
||
|
$start = microtime(true);
|
||
|
$output = $this->doIndex($langCode);
|
||
|
$this->output->write($output);
|
||
|
$this->output->writeln('');
|
||
|
$end = number_format(microtime(true) - $start,1);
|
||
|
$this->output->writeln('');
|
||
|
$this->output->writeln('Indexed in ' . $end . 's');
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string|null $langCode
|
||
|
* @return string
|
||
|
*/
|
||
|
private function doIndex(string $langCode = null): string
|
||
|
{
|
||
|
[,,$output] = TNTSearchPlugin::indexJob($langCode);
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
}
|
||
|
|