Path: blob/master/src/view/control/AphrontCursorPagerView.php
12241 views
<?php12final class AphrontCursorPagerView extends AphrontView {34private $afterID;5private $beforeID;67private $pageSize = 100;89private $nextPageID;10private $prevPageID;11private $moreResults;1213private $uri;1415public function setPageSize($page_size) {16$this->pageSize = max(1, $page_size);17return $this;18}1920public function getPageSize() {21return $this->pageSize;22}2324public function setURI(PhutilURI $uri) {25$this->uri = $uri;26return $this;27}2829public function readFromRequest(AphrontRequest $request) {30$this->uri = $request->getRequestURI();31$this->afterID = $request->getStr('after');32$this->beforeID = $request->getStr('before');33return $this;34}3536public function setAfterID($after_id) {37$this->afterID = $after_id;38return $this;39}4041public function getAfterID() {42return $this->afterID;43}4445public function setBeforeID($before_id) {46$this->beforeID = $before_id;47return $this;48}4950public function getBeforeID() {51return $this->beforeID;52}5354public function setNextPageID($next_page_id) {55$this->nextPageID = $next_page_id;56return $this;57}5859public function getNextPageID() {60return $this->nextPageID;61}6263public function setPrevPageID($prev_page_id) {64$this->prevPageID = $prev_page_id;65return $this;66}6768public function getPrevPageID() {69return $this->prevPageID;70}7172public function sliceResults(array $results) {73if (count($results) > $this->getPageSize()) {74$offset = ($this->beforeID ? count($results) - $this->getPageSize() : 0);75$results = array_slice($results, $offset, $this->getPageSize(), true);76$this->moreResults = true;77}78return $results;79}8081public function getHasMoreResults() {82return $this->moreResults;83}8485public function willShowPagingControls() {86return $this->prevPageID ||87$this->nextPageID ||88$this->afterID ||89($this->beforeID && $this->moreResults);90}9192public function getFirstPageURI() {93if (!$this->uri) {94throw new PhutilInvalidStateException('setURI');95}9697if (!$this->afterID && !($this->beforeID && $this->moreResults)) {98return null;99}100101return id(clone $this->uri)102->removeQueryParam('after')103->removeQueryParam('before');104}105106public function getPrevPageURI() {107if (!$this->uri) {108throw new PhutilInvalidStateException('getPrevPageURI');109}110111if (!$this->prevPageID) {112return null;113}114115return id(clone $this->uri)116->removeQueryParam('after')117->replaceQueryParam('before', $this->prevPageID);118}119120public function getNextPageURI() {121if (!$this->uri) {122throw new PhutilInvalidStateException('setURI');123}124125if (!$this->nextPageID) {126return null;127}128129return id(clone $this->uri)130->replaceQueryParam('after', $this->nextPageID)131->removeQueryParam('before');132}133134public function render() {135if (!$this->uri) {136throw new PhutilInvalidStateException('setURI');137}138139$links = array();140141$first_uri = $this->getFirstPageURI();142if ($first_uri) {143$icon = id(new PHUIIconView())144->setIcon('fa-fast-backward');145$links[] = id(new PHUIButtonView())146->setTag('a')147->setHref($first_uri)148->setIcon($icon)149->addClass('mml')150->setColor(PHUIButtonView::GREY)151->setText(pht('First'));152}153154$prev_uri = $this->getPrevPageURI();155if ($prev_uri) {156$icon = id(new PHUIIconView())157->setIcon('fa-backward');158$links[] = id(new PHUIButtonView())159->setTag('a')160->setHref($prev_uri)161->setIcon($icon)162->addClass('mml')163->setColor(PHUIButtonView::GREY)164->setText(pht('Prev'));165}166167$next_uri = $this->getNextPageURI();168if ($next_uri) {169$icon = id(new PHUIIconView())170->setIcon('fa-forward');171$links[] = id(new PHUIButtonView())172->setTag('a')173->setHref($next_uri)174->setIcon($icon, false)175->addClass('mml')176->setColor(PHUIButtonView::GREY)177->setText(pht('Next'));178}179180return phutil_tag(181'div',182array(183'class' => 'phui-pager-view',184),185$links);186}187188}189190191