[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/bin/ -> indexer.php (source)

   1  #!/usr/bin/env php
   2  <?php
   3  
   4  use splitbrain\phpcli\CLI;
   5  use splitbrain\phpcli\Options;
   6  
   7  if (!defined('DOKU_INC')) define('DOKU_INC', realpath(__DIR__ . '/../') . '/');
   8  define('NOSESSION', 1);
   9  require_once (DOKU_INC . 'inc/init.php');
  10  
  11  /**
  12   * Update the Search Index from command line
  13   */
  14  class IndexerCLI extends CLI
  15  {
  16      private $quiet = false;
  17      private $clear = false;
  18  
  19      /**
  20       * Register options and arguments on the given $options object
  21       *
  22       * @param Options $options
  23       * @return void
  24       */
  25      protected function setup(Options $options)
  26      {
  27          $options->setHelp(
  28              'Updates the searchindex by indexing all new or changed pages. When the -c option is ' .
  29              'given the index is cleared first.'
  30          );
  31  
  32          $options->registerOption(
  33              'clear',
  34              'clear the index before updating',
  35              'c'
  36          );
  37          $options->registerOption(
  38              'quiet',
  39              'don\'t produce any output',
  40              'q'
  41          );
  42      }
  43  
  44      /**
  45       * Your main program
  46       *
  47       * Arguments and options have been parsed when this is run
  48       *
  49       * @param Options $options
  50       * @return void
  51       */
  52      protected function main(Options $options)
  53      {
  54          $this->clear = $options->getOpt('clear');
  55          $this->quiet = $options->getOpt('quiet');
  56  
  57          if ($this->clear) $this->clearindex();
  58  
  59          $this->update();
  60      }
  61  
  62      /**
  63       * Update the index
  64       */
  65      protected function update()
  66      {
  67          global $conf;
  68          $data = [];
  69          $this->quietecho("Searching pages... ");
  70          search($data, $conf['datadir'], 'search_allpages', ['skipacl' => true]);
  71          $this->quietecho(count($data) . " pages found.\n");
  72  
  73          foreach ($data as $val) {
  74              $this->index($val['id']);
  75          }
  76      }
  77  
  78      /**
  79       * Index the given page
  80       *
  81       * @param string $id
  82       */
  83      protected function index($id)
  84      {
  85          $this->quietecho("$id... ");
  86          idx_addPage($id, !$this->quiet, $this->clear);
  87          $this->quietecho("done.\n");
  88      }
  89  
  90      /**
  91       * Clear all index files
  92       */
  93      protected function clearindex()
  94      {
  95          $this->quietecho("Clearing index... ");
  96          idx_get_indexer()->clear();
  97          $this->quietecho("done.\n");
  98      }
  99  
 100      /**
 101       * Print message if not supressed
 102       *
 103       * @param string $msg
 104       */
 105      protected function quietecho($msg)
 106      {
 107          if (!$this->quiet) echo $msg;
 108      }
 109  }
 110  
 111  // Main
 112  $cli = new IndexerCLI();
 113  $cli->run();