195 lines
4.6 KiB
PHP
195 lines
4.6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @package Joomla.Cli
|
||
|
*
|
||
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Finder CLI Bootstrap
|
||
|
*
|
||
|
* Run the framework bootstrap with a couple of mods based on the script's needs
|
||
|
*/
|
||
|
|
||
|
// We are a valid entry point.
|
||
|
const _JEXEC = 1;
|
||
|
|
||
|
// Load system defines
|
||
|
if (file_exists(dirname(__DIR__) . '/defines.php'))
|
||
|
{
|
||
|
require_once dirname(__DIR__) . '/defines.php';
|
||
|
}
|
||
|
|
||
|
if (!defined('_JDEFINES'))
|
||
|
{
|
||
|
define('JPATH_BASE', dirname(__DIR__));
|
||
|
require_once JPATH_BASE . '/includes/defines.php';
|
||
|
}
|
||
|
|
||
|
// Get the framework.
|
||
|
require_once JPATH_LIBRARIES . '/import.legacy.php';
|
||
|
|
||
|
// Bootstrap the CMS libraries.
|
||
|
require_once JPATH_LIBRARIES . '/cms.php';
|
||
|
|
||
|
// Import the configuration.
|
||
|
require_once JPATH_CONFIGURATION . '/configuration.php';
|
||
|
|
||
|
// System configuration.
|
||
|
$config = new JConfig;
|
||
|
|
||
|
// Configure error reporting to maximum for CLI output.
|
||
|
error_reporting(E_ALL);
|
||
|
ini_set('display_errors', 1);
|
||
|
|
||
|
// Load Library language
|
||
|
$lang = JFactory::getLanguage();
|
||
|
|
||
|
// Try the finder_cli file in the current language (without allowing the loading of the file in the default language)
|
||
|
$lang->load('finder_cli', JPATH_SITE, null, false, false)
|
||
|
// Fallback to the finder_cli file in the default language
|
||
|
|| $lang->load('finder_cli', JPATH_SITE, null, true);
|
||
|
|
||
|
/**
|
||
|
* A command line cron job to run the Finder indexer.
|
||
|
*
|
||
|
* @package Joomla.CLI
|
||
|
* @subpackage com_finder
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
class FinderCli extends JApplicationCli
|
||
|
{
|
||
|
/**
|
||
|
* Start time for the index process
|
||
|
*
|
||
|
* @var string
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
private $_time = null;
|
||
|
|
||
|
/**
|
||
|
* Start time for each batch
|
||
|
*
|
||
|
* @var string
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
private $_qtime = null;
|
||
|
|
||
|
/**
|
||
|
* Entry point for Finder CLI script
|
||
|
*
|
||
|
* @return void
|
||
|
*
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
public function doExecute()
|
||
|
{
|
||
|
// Print a blank line.
|
||
|
$this->out(JText::_('FINDER_CLI'));
|
||
|
$this->out('============================');
|
||
|
$this->out();
|
||
|
|
||
|
$this->_index();
|
||
|
|
||
|
// Print a blank line at the end.
|
||
|
$this->out();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Run the indexer
|
||
|
*
|
||
|
* @return void
|
||
|
*
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
private function _index()
|
||
|
{
|
||
|
$this->_time = microtime(true);
|
||
|
|
||
|
require_once JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/indexer.php';
|
||
|
|
||
|
// Fool the system into thinking we are running as JSite with Finder as the active component
|
||
|
JFactory::getApplication('site');
|
||
|
$_SERVER['HTTP_HOST'] = 'domain.com';
|
||
|
define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR . '/components/com_finder');
|
||
|
|
||
|
// Disable caching.
|
||
|
$config = JFactory::getConfig();
|
||
|
$config->set('caching', 0);
|
||
|
$config->set('cache_handler', 'file');
|
||
|
|
||
|
// Reset the indexer state.
|
||
|
FinderIndexer::resetState();
|
||
|
|
||
|
// Import the finder plugins.
|
||
|
JPluginHelper::importPlugin('finder');
|
||
|
|
||
|
// Starting Indexer.
|
||
|
$this->out(JText::_('FINDER_CLI_STARTING_INDEXER'), true);
|
||
|
|
||
|
// Trigger the onStartIndex event.
|
||
|
JEventDispatcher::getInstance()->trigger('onStartIndex');
|
||
|
|
||
|
// Remove the script time limit.
|
||
|
@set_time_limit(0);
|
||
|
|
||
|
// Get the indexer state.
|
||
|
$state = FinderIndexer::getState();
|
||
|
|
||
|
// Setting up plugins.
|
||
|
$this->out(JText::_('FINDER_CLI_SETTING_UP_PLUGINS'), true);
|
||
|
|
||
|
// Trigger the onBeforeIndex event.
|
||
|
JEventDispatcher::getInstance()->trigger('onBeforeIndex');
|
||
|
|
||
|
// Startup reporting.
|
||
|
$this->out(JText::sprintf('FINDER_CLI_SETUP_ITEMS', $state->totalItems, round(microtime(true) - $this->_time, 3)), true);
|
||
|
|
||
|
// Get the number of batches.
|
||
|
$t = (int) $state->totalItems;
|
||
|
$c = (int) ceil($t / $state->batchSize);
|
||
|
$c = $c === 0 ? 1 : $c;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
// Process the batches.
|
||
|
for ($i = 0; $i < $c; $i++)
|
||
|
{
|
||
|
// Set the batch start time.
|
||
|
$this->_qtime = microtime(true);
|
||
|
|
||
|
// Reset the batch offset.
|
||
|
$state->batchOffset = 0;
|
||
|
|
||
|
// Trigger the onBuildIndex event.
|
||
|
JEventDispatcher::getInstance()->trigger('onBuildIndex');
|
||
|
|
||
|
// Batch reporting.
|
||
|
$this->out(JText::sprintf('FINDER_CLI_BATCH_COMPLETE', ($i + 1), round(microtime(true) - $this->_qtime, 3)), true);
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e)
|
||
|
{
|
||
|
// Display the error
|
||
|
$this->out($e->getMessage(), true);
|
||
|
|
||
|
// Reset the indexer state.
|
||
|
FinderIndexer::resetState();
|
||
|
|
||
|
// Close the app
|
||
|
$this->close($e->getCode());
|
||
|
}
|
||
|
|
||
|
// Total reporting.
|
||
|
$this->out(JText::sprintf('FINDER_CLI_PROCESS_COMPLETE', round(microtime(true) - $this->_time, 3)), true);
|
||
|
|
||
|
// Reset the indexer state.
|
||
|
FinderIndexer::resetState();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Instantiate the application object, passing the class name to JCli::getInstance
|
||
|
// and use chaining to execute the application.
|
||
|
JApplicationCli::getInstance('FinderCli')->execute();
|