misuzu/src/Pagination.php

47 lines
1.3 KiB
PHP
Raw Normal View History

2019-01-03 01:33:02 +01:00
<?php
define('MSZ_PAGINATION_PAGE_START', 1);
define('MSZ_PAGINATION_OFFSET_INVALID', -1);
2019-06-10 19:04:53 +02:00
function pagination_create(int $count, int $range): array {
2019-01-03 01:33:02 +01:00
$pages = ceil($count / $range);
return compact('count', 'range', 'pages');
}
2019-06-10 19:04:53 +02:00
function pagination_is_valid_array(array $pagination): bool {
2019-01-03 01:33:02 +01:00
return !empty($pagination['count']) && !empty($pagination['range']);
}
2019-06-10 19:04:53 +02:00
function pagination_is_valid_offset(int $offset): bool {
2019-01-03 01:33:02 +01:00
return $offset !== MSZ_PAGINATION_OFFSET_INVALID;
}
// Adds 'page' and 'offset' to the pagination array transparently!!!
2019-06-10 19:04:53 +02:00
function pagination_offset(array &$pagination, ?int $page): int {
if(!pagination_is_valid_array($pagination)) {
2019-01-03 01:33:02 +01:00
return MSZ_PAGINATION_OFFSET_INVALID;
}
$page = $page ?? MSZ_PAGINATION_PAGE_START;
2019-06-10 19:04:53 +02:00
if($page < MSZ_PAGINATION_PAGE_START) {
2019-01-03 01:33:02 +01:00
return MSZ_PAGINATION_OFFSET_INVALID;
}
$offset = $pagination['range'] * ($page - 1);
2019-06-10 19:04:53 +02:00
if($offset > $pagination['count']) {
2019-01-03 01:33:02 +01:00
return MSZ_PAGINATION_OFFSET_INVALID;
}
$pagination['page'] = $page;
return $pagination['offset'] = $offset;
}
2019-06-10 19:04:53 +02:00
function pagination_param(string $name = 'p', int $default = 1, ?array $source = null): int {
if(!isset(($source ?? $_GET)[$name]) || !is_string(($source ?? $_GET)[$name])) {
2019-03-18 23:02:30 +01:00
return $default;
}
2019-01-03 01:33:02 +01:00
return (int)(($source ?? $_GET)[$name] ?? $default);
}