<?php
/**
* @file tools/rebuildSearchIndex.php
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class rebuildSearchIndex
*
* @ingroup tools
*
* @brief CLI tool to rebuild the article keyword search database.
*/
require dirname(__FILE__) . '/bootstrap.php';
use APP\core\Application;
use APP\journal\JournalDAO;
use PKP\cliTool\CommandLineTool;
use PKP\config\Config;
use PKP\db\DAORegistry;
use PKP\plugins\Hook;
class rebuildSearchIndex extends CommandLineTool
{
/**
* Print command usage information.
*/
public function usage(): void
{
echo "Script to rebuild article search index\n"
. "Usage: {$this->scriptName} [options] [journal_path]\n\n"
. "options: The standard index implementation does\n"
. " not support any options. For other\n"
. " implementations please see the corresponding\n"
. " plugin documentation (e.g. 'plugins/generic/\n"
. " lucene/README').\n";
}
/**
* Rebuild the search index for all articles in all journals.
*/
public function execute(): void
{
// Check whether we have (optional) switches.
$switches = [];
while (count($this->argv) && substr($this->argv[0], 0, 1) === '-') {
$switches[] = array_shift($this->argv);
}
// If we have another argument that this must be a journal path.
$journal = null;
if (count($this->argv)) {
$journalPath = array_shift($this->argv);
/** @var JournalDAO */
$journalDao = DAORegistry::getDAO('JournalDAO');
$journal = $journalDao->getByPath($journalPath);
if (!$journal) {
exit(__('search.cli.rebuildIndex.unknownJournal', ['journalPath' => $journalPath]) . "\n");
}
}
// Register a router hook so that we can construct
// useful URLs to journal content.
Hook::add('Request::getBaseUrl', [$this, 'callbackBaseUrl']);
// Let the search implementation re-build the index.
$articleSearchIndex = Application::getSubmissionSearchIndex();
$articleSearchIndex->rebuildIndex(true, $journal, $switches);
}
/**
* Callback to patch the base URL which will be required
* when constructing galley/supp file download URLs.
*
* @see \APP\core\Request::getBaseUrl()
*/
public function callbackBaseUrl(string $hookName, array $params): bool
{
$baseUrl = & $params[0];
$baseUrl = Config::getVar('general', 'base_url');
return Hook::ABORT;
}
}
$tool = new rebuildSearchIndex($argv ?? []);
$tool->execute();
|