/**
  * Rebuilds an index.
  *
  * @param array $arguments
  * @param array $options
  */
 public function execute($arguments = array(), $options = array())
 {
     $index = $arguments['index'];
     $this->checkIndexExists($index);
     $prefix = $this->formatter->format($arguments['index'], array('fg' => 'green', 'bold' => true)) . ' >> ';
     $index = new $index();
     $index->setLogger(new xfLoggerTask($this->dispatcher, $this->formatter));
     $parser = new xfParserLucene();
     $criteria = $parser->parse($arguments['query']);
     $this->log($prefix . 'Query ' . $this->formatter->format($criteria->toString(), array('fg' => 'blue', 'bold' => true)));
     $results = $index->find($criteria);
     $pager = new xfPager($results);
     $pager->setPerPage($options['limit']);
     $pager->setPage($options['page']);
     if ($pager->getNbResults() == 0) {
         $this->log($prefix . $this->formatter->format('No', array('fg' => 'red', 'bold' => true)) . ' results found.');
         return;
     } elseif ($pager->getNbResults() == 1) {
         $this->log($prefix . $this->formatter->format('1', array('fg' => 'blue', 'bold' => true)) . ' result found:');
     } else {
         $this->log($prefix . $this->formatter->format($pager->getNbResults(), array('fg' => 'blue', 'bold' => true)) . ' results found:');
     }
     if ($pager->getStartPosition() > 1) {
         $msg = $pager->getStartPosition() - 1 . ' skipped';
         $this->log('');
         $this->log($this->formatter->format($msg, array('fg' => 'yellow')));
     }
     $count = $pager->getStartPosition();
     foreach ($pager->getResults() as $result) {
         $this->processHit($result, $count, $options['verbose']);
         $count++;
     }
     if (0 < ($diff = $pager->getNbResults() - $pager->getEndPosition())) {
         $msg = $diff . ' remaining';
         $this->log('');
         $this->log($this->formatter->format($msg, array('fg' => 'yellow')));
     }
 }
Пример #2
0
$pager->setPage(100);
$t->ok($pager->haveToPaginate(), '->haveToPaginate() returns true if at last but not first');
$pager->setPerPage(10000000);
$t->ok(!$pager->haveToPaginate(), '->haveToPaginate() returns false if at first and at at last');
$t->diag('->getNextPage(), ->getPreviousPage()');
$pager->setPerPage(10);
$pager->setPage(1);
$t->is($pager->getNextPage(), 2, '->getNextPage() is the next page');
$t->is($pager->getPreviousPage(), 1, '->getPreviousPage() returns the first page if at first page already');
$pager->setPage(100);
$t->is($pager->getNextPage(), 100, '->getNextPage() returns the last page if at last page already');
$t->is($pager->getPreviousPage(), 99, '->getPreviusPage() is the previous page');
$t->diag('->getStartPosition(), ->getEndPosition()');
$pager->setPage(1);
$t->is($pager->getStartPosition(), 1, '->getStartPosition() returns the start position when at start');
$t->is($pager->getEndPosition(), 10, '->getEndPosition() returns the end position when at astart');
$pager->setPage(2);
$t->is($pager->getStartPosition(), 11, '->getStartPosition() returns the start position when in middle');
$t->is($pager->getEndPosition(), 20, '->getEndPosition() returns the end position when in middle');
$pager->setPerPage(99);
$pager->setPage(11);
$t->is($pager->getStartPosition(), 991, '->getStartPosition() returns the start position when at end');
$t->is($pager->getEndPosition(), 1000, '->getEndPosition() returns the end position when at end');
$t->diag('->getLinks()');
$pager->setPerPage(10);
$pager->setPage(50);
$t->is($pager->getLinks(10), range(45, 55), '->getLinks() returns array of numbers with current page at center');
$pager->setPage(1);
$t->is($pager->getLinks(10), range(1, 6), '->getLinks() returns array of numbers with current page first if at first page');
$pager->setPage(100);
$t->is($pager->getLinks(10), range(95, 100), '->getLinks() returns array of numbers with current page last if at last page');