vendor/knplabs/knp-paginator-bundle/src/Pagination/SlidingPagination.php line 7

Open in your IDE?
  1. <?php
  2. namespace Knp\Bundle\PaginatorBundle\Pagination;
  3. use Knp\Component\Pager\Pagination\AbstractPagination;
  4. final class SlidingPagination extends AbstractPagination implements SlidingPaginationInterface
  5. {
  6.     /** @var string|null */
  7.     private $route;
  8.     /** @var array<string, mixed> */
  9.     private $params;
  10.     /** @var int */
  11.     private $pageRange 5;
  12.     /** @var int|null */
  13.     private $pageLimit null;
  14.     /** @var string|null */
  15.     private $template;
  16.     /** @var string|null */
  17.     private $sortableTemplate;
  18.     /** @var string|null */
  19.     private $filtrationTemplate;
  20.     /**
  21.      * @param array<string, mixed> $params
  22.      */
  23.     public function __construct(array $params)
  24.     {
  25.         $this->params $params;
  26.     }
  27.     public function setUsedRoute(?string $route): void
  28.     {
  29.         $this->route $route;
  30.     }
  31.     public function getRoute(): ?string
  32.     {
  33.         return $this->route;
  34.     }
  35.     public function setSortableTemplate(string $template): void
  36.     {
  37.         $this->sortableTemplate $template;
  38.     }
  39.     public function getSortableTemplate(): ?string
  40.     {
  41.         return $this->sortableTemplate;
  42.     }
  43.     public function setFiltrationTemplate(string $template): void
  44.     {
  45.         $this->filtrationTemplate $template;
  46.     }
  47.     public function getFiltrationTemplate(): ?string
  48.     {
  49.         return $this->filtrationTemplate;
  50.     }
  51.     /**
  52.      * @param mixed $value
  53.      */
  54.     public function setParam(string $name$value): void
  55.     {
  56.         $this->params[$name] = $value;
  57.     }
  58.     public function getParams(): array
  59.     {
  60.         return $this->params;
  61.     }
  62.     public function setTemplate(string $template): void
  63.     {
  64.         $this->template $template;
  65.     }
  66.     public function getTemplate(): ?string
  67.     {
  68.         return $this->template;
  69.     }
  70.     public function setPageRange(int $range): void
  71.     {
  72.         $this->pageRange = \abs($range);
  73.     }
  74.     public function setPageLimit(?int $limit): void
  75.     {
  76.         $this->pageLimit $limit;
  77.     }
  78.     /**
  79.      * Get url query with all parameters.
  80.      *
  81.      * @param array<string, mixed> $additionalQueryParams
  82.      *
  83.      * @return array<string, mixed> - list of query parameters
  84.      */
  85.     public function getQuery(array $additionalQueryParams = []): array
  86.     {
  87.         return \array_merge($this->params$additionalQueryParams);
  88.     }
  89.     /**
  90.      * @param string[]|string|null $key
  91.      * @param array<string, mixed> $params
  92.      */
  93.     public function isSorted($key null, array $params = []): bool
  94.     {
  95.         $params = \array_merge($this->params$params);
  96.         if (null === $key) {
  97.             return isset($params[$this->getPaginatorOption('sortFieldParameterName')]);
  98.         }
  99.         if (\is_array($key)) {
  100.             $key = \implode('+'$key);
  101.         }
  102.         return isset($params[$this->getPaginatorOption('sortFieldParameterName')]) && $params[$this->getPaginatorOption('sortFieldParameterName')] === $key;
  103.     }
  104.     public function getPage(): ?int
  105.     {
  106.         return $this->params[$this->getPaginatorOption('pageParameterName')] ?? null;
  107.     }
  108.     public function getSort(): ?string
  109.     {
  110.         return $this->params[$this->getPaginatorOption('sortFieldParameterName')] ?? null;
  111.     }
  112.     public function getDirection(): ?string
  113.     {
  114.         return $this->params[$this->getPaginatorOption('sortDirectionParameterName')] ?? null;
  115.     }
  116.     public function getPaginationData(): array
  117.     {
  118.         $pageCount $this->getPageCount();
  119.         $current $this->currentPageNumber;
  120.         if ($pageCount $current) {
  121.             $this->currentPageNumber $current $pageCount;
  122.         }
  123.         if ($this->pageRange $pageCount) {
  124.             $this->pageRange $pageCount;
  125.         }
  126.         $delta = \ceil($this->pageRange 2);
  127.         if ($current $delta $pageCount $this->pageRange) {
  128.             $pages = \range($pageCount $this->pageRange 1$pageCount);
  129.         } else {
  130.             if ($current $delta 0) {
  131.                 $delta $current;
  132.             }
  133.             $offset $current $delta;
  134.             $pages = \range($offset 1$offset $this->pageRange);
  135.         }
  136.         $proximity = \floor($this->pageRange 2);
  137.         $startPage $current $proximity;
  138.         $endPage $current $proximity;
  139.         if ($startPage 1) {
  140.             $endPage = \min($endPage + ($startPage), $pageCount);
  141.             $startPage 1;
  142.         }
  143.         if ($endPage $pageCount) {
  144.             $startPage = \max($startPage - ($endPage $pageCount), 1);
  145.             $endPage $pageCount;
  146.         }
  147.         $viewData = [
  148.             'last' => $pageCount,
  149.             'current' => $current,
  150.             'numItemsPerPage' => $this->numItemsPerPage,
  151.             'first' => 1,
  152.             'pageCount' => $pageCount,
  153.             'totalCount' => $this->totalCount,
  154.             'pageRange' => $this->pageRange,
  155.             'startPage' => $startPage,
  156.             'endPage' => $endPage,
  157.         ];
  158.         if ($current 1) {
  159.             $viewData['previous'] = $current 1;
  160.         }
  161.         if ($current $pageCount) {
  162.             $viewData['next'] = $current 1;
  163.         }
  164.         $viewData['pagesInRange'] = $pages;
  165.         $viewData['firstPageInRange'] = \min($pages);
  166.         $viewData['lastPageInRange'] = \max($pages);
  167.         if (null !== $this->getItems()) {
  168.             $viewData['currentItemCount'] = $this->count();
  169.             $viewData['firstItemNumber'] = 0;
  170.             $viewData['lastItemNumber'] = 0;
  171.             if ($viewData['totalCount'] > 0) {
  172.                 $viewData['firstItemNumber'] = (($current 1) * $this->numItemsPerPage) + 1;
  173.                 $viewData['lastItemNumber'] = $viewData['firstItemNumber'] + $viewData['currentItemCount'] - 1;
  174.             }
  175.         }
  176.         return $viewData;
  177.     }
  178.     public function getPageCount(): int
  179.     {
  180.         $count = (int) \ceil($this->totalCount $this->numItemsPerPage);
  181.         if (null !== $this->pageLimit) {
  182.             return \min($count$this->pageLimit);
  183.         }
  184.         return $count;
  185.     }
  186.     public function getPaginatorOptions(): ?array
  187.     {
  188.         return $this->paginatorOptions;
  189.     }
  190.     public function getCustomParameters(): ?array
  191.     {
  192.         return $this->customParameters;
  193.     }
  194. }