46 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Utils\Paginator;
class Paginator
{
/**
* Determinate which pages are visible in the paginator
* @param int $page
* @param int $totalPages
* @param int $maxVisiblePages
* @return PaginatorResult
*/
public function getVisiblePages(int $page, int $totalPages, int $maxVisiblePages): PaginatorResult
{
$half = floor($maxVisiblePages / 2);
if ($page <= $half) {
$start = 1;
$end = min($totalPages, $maxVisiblePages);
} elseif ($page > $totalPages - $half) {
$start = max(1, $totalPages - $maxVisiblePages + 1);
$end = $totalPages;
} else {
$start = $page - $half;
$end = min($totalPages, $page + $half);
}
/**
* @var array<int> $range
*/
$range = range($start, $end);
return new PaginatorResult(
$page,
$start == 1,
$end == $totalPages,
$totalPages,
$totalPages,
$range
);
}
}