46 lines
1.1 KiB
PHP
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
|
|
);
|
|
}
|
|
}
|