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.

PageLimitsMiddleware.php 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Middleware;
  3. use Psr\Http\Message\ResponseInterface;
  4. use Psr\Http\Message\ServerRequestInterface;
  5. use Psr\Http\Server\RequestHandlerInterface;
  6. use Tqdev\PhpCrudApi\Column\ReflectionService;
  7. use Tqdev\PhpCrudApi\Controller\Responder;
  8. use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
  9. use Tqdev\PhpCrudApi\Middleware\Router\Router;
  10. use Tqdev\PhpCrudApi\Record\ErrorCode;
  11. use Tqdev\PhpCrudApi\RequestUtils;
  12. class PageLimitsMiddleware extends Middleware
  13. {
  14. private $reflection;
  15. public function __construct(Router $router, Responder $responder, array $properties, ReflectionService $reflection)
  16. {
  17. parent::__construct($router, $responder, $properties);
  18. $this->reflection = $reflection;
  19. }
  20. public function process(ServerRequestInterface $request, RequestHandlerInterface $next): ResponseInterface
  21. {
  22. $operation = RequestUtils::getOperation($request);
  23. if ($operation == 'list') {
  24. $params = RequestUtils::getParams($request);
  25. $maxPage = (int) $this->getProperty('pages', '100');
  26. if (isset($params['page']) && $params['page'] && $maxPage > 0) {
  27. if (strpos($params['page'][0], ',') === false) {
  28. $page = $params['page'][0];
  29. } else {
  30. list($page, $size) = explode(',', $params['page'][0], 2);
  31. }
  32. if ($page > $maxPage) {
  33. return $this->responder->error(ErrorCode::PAGINATION_FORBIDDEN, '');
  34. }
  35. }
  36. $maxSize = (int) $this->getProperty('records', '1000');
  37. if (!isset($params['size']) || !$params['size'] && $maxSize > 0) {
  38. $params['size'] = array($maxSize);
  39. } else {
  40. $params['size'] = array(min($params['size'][0], $maxSize));
  41. }
  42. $request = RequestUtils::setParams($request, $params);
  43. }
  44. return $next->handle($request);
  45. }
  46. }