PagerManager.php in Drupal 9
File
core/lib/Drupal/Core/Pager/PagerManager.php
View source
<?php
namespace Drupal\Core\Pager;
use Drupal\Core\Database\Query\PagerSelectExtender;
use Drupal\Core\DependencyInjection\DependencySerializationTrait;
class PagerManager implements PagerManagerInterface {
use DependencySerializationTrait;
protected $pagerParams;
protected $pagers;
protected $maxPagerElementId = -1;
public function __construct(PagerParametersInterface $pager_params) {
$this->pagerParams = $pager_params;
}
public function createPager($total, $limit, $element = 0) {
$currentPage = $this->pagerParams
->findPage($element);
$pager = new Pager($total, $limit, $currentPage);
$this
->setPager($pager, $element);
return $pager;
}
public function getPager($element = 0) {
return isset($this->pagers[$element]) ? $this->pagers[$element] : NULL;
}
public function findPage(int $pager_id = 0) : int {
return $this->pagerParams
->findPage($pager_id);
}
public function getUpdatedParameters(array $query, $element, $index) {
$element_pages = [];
$max = $this
->getMaxPagerElementId();
for ($i = 0; $i <= $max; $i++) {
$currentPage = ($pager = $this
->getPager($i)) ? $pager
->getCurrentPage() : NULL;
$element_pages[] = $i == $element ? $index : $currentPage;
}
$query['page'] = implode(',', $element_pages);
if ($current_query = $this->pagerParams
->getQueryParameters()) {
$query = array_merge($current_query, $query);
}
return $query;
}
public function getMaxPagerElementId() {
return $this->maxPagerElementId;
}
public function reservePagerElementId(int $element) : void {
$this->maxPagerElementId = max($element, $this->maxPagerElementId);
PagerSelectExtender::$maxElement = $this
->getMaxPagerElementId();
}
protected function setPager(Pager $pager, $element = 0) {
$this->maxPagerElementId = max($element, $this->maxPagerElementId);
$this->pagers[$element] = $pager;
}
}