/cli/finder_indexer.php
https://github.com/gnomeontherun/joomla-cms · PHP · 196 lines · 75 code · 39 blank · 82 comment · 4 complexity · 7e18206acb125c7fc54072826ff2b4e3 MD5 · raw file
- <?php
- /**
- * @package Joomla.Cli
- *
- * @copyright Copyright (C) 2005 - 2012 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()
- {
- // initialize the time value
- $this->_time = microtime(true);
- // import library dependencies
- 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();