api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PaginationInfo.php 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Record;
  3. class PaginationInfo
  4. {
  5. public $DEFAULT_PAGE_SIZE = 20;
  6. public function hasPage(array $params): bool
  7. {
  8. return isset($params['page']);
  9. }
  10. public function getPageOffset(array $params): int
  11. {
  12. $offset = 0;
  13. $pageSize = $this->getPageSize($params);
  14. if (isset($params['page'])) {
  15. foreach ($params['page'] as $page) {
  16. $parts = explode(',', $page, 2);
  17. $page = intval($parts[0]) - 1;
  18. $offset = $page * $pageSize;
  19. }
  20. }
  21. return $offset;
  22. }
  23. private function getPageSize(array $params): int
  24. {
  25. $pageSize = $this->DEFAULT_PAGE_SIZE;
  26. if (isset($params['page'])) {
  27. foreach ($params['page'] as $page) {
  28. $parts = explode(',', $page, 2);
  29. if (count($parts) > 1) {
  30. $pageSize = intval($parts[1]);
  31. }
  32. }
  33. }
  34. return $pageSize;
  35. }
  36. public function getResultSize(array $params): int
  37. {
  38. $numberOfRows = -1;
  39. if (isset($params['size'])) {
  40. foreach ($params['size'] as $size) {
  41. $numberOfRows = intval($size);
  42. }
  43. }
  44. return $numberOfRows;
  45. }
  46. public function getPageLimit(array $params): int
  47. {
  48. $pageLimit = -1;
  49. if ($this->hasPage($params)) {
  50. $pageLimit = $this->getPageSize($params);
  51. }
  52. $resultSize = $this->getResultSize($params);
  53. if ($resultSize >= 0) {
  54. if ($pageLimit >= 0) {
  55. $pageLimit = min($pageLimit, $resultSize);
  56. } else {
  57. $pageLimit = $resultSize;
  58. }
  59. }
  60. return $pageLimit;
  61. }
  62. }