@@ -1805,6 +1805,7 @@ private function getOptions(): array
1805
1805
$ options = array (
1806
1806
\PDO ::ATTR_ERRMODE => \PDO ::ERRMODE_EXCEPTION ,
1807
1807
\PDO ::ATTR_DEFAULT_FETCH_MODE => \PDO ::FETCH_ASSOC ,
1808
+ \PDO ::ATTR_STRINGIFY_FETCHES => false ,
1808
1809
);
1809
1810
switch ($ this ->driver ) {
1810
1811
case 'mysql ' :return $ options + [
@@ -3476,47 +3477,29 @@ public function __construct(Router $router, Responder $responder, array $propert
3476
3477
$ this ->utils = new RequestUtils ($ reflection );
3477
3478
}
3478
3479
3479
- private function getMissingOrderParam (ReflectedTable $ table ): String
3480
- {
3481
- $ pk = $ table ->getPk ();
3482
- if (!$ pk ) {
3483
- $ columnNames = $ table ->getColumnNames ();
3484
- if (!$ columnNames ) {
3485
- return '' ;
3486
- }
3487
- return $ columnNames [0 ];
3488
- }
3489
- return $ pk ->getName ();
3490
- }
3491
-
3492
3480
public function handle (Request $ request ): Response
3493
3481
{
3494
3482
$ operation = $ this ->utils ->getOperation ($ request );
3495
3483
if ($ operation == 'list ' ) {
3496
- $ tableName = $ request ->getPathSegment (2 );
3497
- $ table = $ this ->reflection ->getTable ($ tableName );
3498
- if ($ table ) {
3499
- $ params = $ request ->getParams ();
3500
- if (!isset ($ params ['order ' ]) || !$ params ['order ' ]) {
3501
- $ params ['order ' ] = array ($ this ->getMissingOrderParam ($ table ));
3502
- }
3503
- $ maxPage = (int ) $ this ->getProperty ('pages ' , '100 ' );
3504
- if (isset ($ params ['page ' ]) && $ params ['page ' ]) {
3505
- if (strpos ($ params ['page ' ][0 ], ', ' ) === false ) {
3506
- $ params ['page ' ] = array (min ($ params ['page ' ][0 ], $ maxPage ));
3507
- } else {
3508
- list ($ page , $ size ) = explode (', ' , $ params ['page ' ][0 ], 2 );
3509
- $ params ['page ' ] = array (min ($ page , $ maxPage ) . ', ' . $ size );
3510
- }
3511
- }
3512
- $ maxSize = (int ) $ this ->getProperty ('records ' , '1000 ' );
3513
- if (!isset ($ params ['size ' ]) || !$ params ['size ' ]) {
3514
- $ params ['size ' ] = array ($ maxSize );
3484
+ $ params = $ request ->getParams ();
3485
+ $ maxPage = (int ) $ this ->getProperty ('pages ' , '100 ' );
3486
+ if (isset ($ params ['page ' ]) && $ params ['page ' ] && $ maxPage > 0 ) {
3487
+ if (strpos ($ params ['page ' ][0 ], ', ' ) === false ) {
3488
+ $ page = $ params ['page ' ][0 ];
3515
3489
} else {
3516
- $ params ['size ' ] = array (min ($ params ['size ' ][0 ], $ maxSize ));
3490
+ list ($ page , $ size ) = explode (', ' , $ params ['page ' ][0 ], 2 );
3491
+ }
3492
+ if ($ page > $ maxPage ) {
3493
+ return $ this ->responder ->error (ErrorCode::PAGINATION_FORBIDDEN , '' );
3517
3494
}
3518
- $ request ->setParams ($ params );
3519
3495
}
3496
+ $ maxSize = (int ) $ this ->getProperty ('records ' , '1000 ' );
3497
+ if (!isset ($ params ['size ' ]) || !$ params ['size ' ] && $ maxSize > 0 ) {
3498
+ $ params ['size ' ] = array ($ maxSize );
3499
+ } else {
3500
+ $ params ['size ' ] = array (min ($ params ['size ' ][0 ], $ maxSize ));
3501
+ }
3502
+ $ request ->setParams ($ params );
3520
3503
}
3521
3504
return $ this ->next ->handle ($ request );
3522
3505
}
@@ -4341,7 +4324,7 @@ class ErrorCode
4341
4324
const TEMPORARY_OR_PERMANENTLY_BLOCKED = 1016 ;
4342
4325
const BAD_OR_MISSING_XSRF_TOKEN = 1017 ;
4343
4326
const ONLY_AJAX_REQUESTS_ALLOWED = 1018 ;
4344
- const FILE_UPLOAD_FAILED = 1019 ;
4327
+ const PAGINATION_FORBIDDEN = 1019 ;
4345
4328
4346
4329
private $ values = [
4347
4330
9999 => ["%s " , Response::INTERNAL_SERVER_ERROR ],
@@ -4364,7 +4347,7 @@ class ErrorCode
4364
4347
1016 => ["Temporary or permanently blocked " , Response::FORBIDDEN ],
4365
4348
1017 => ["Bad or missing XSRF token " , Response::FORBIDDEN ],
4366
4349
1018 => ["Only AJAX requests allowed for '%s' " , Response::FORBIDDEN ],
4367
- 1019 => ["File upload failed for '%s' " , Response::UNPROCESSABLE_ENTITY ],
4350
+ 1019 => ["Pagination forbidden " , Response::FORBIDDEN ],
4368
4351
];
4369
4352
4370
4353
public function __construct (int $ code )
0 commit comments