/** * 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'))); } }
$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');