|
|
@@ -155,17 +155,37 @@ class Controller extends BaseController
|
|
|
$this->data['sortBy'] = $model::DEFAULT_SORT_BY ?? 'created_at';
|
|
|
}
|
|
|
|
|
|
- if(!empty($request->per_page)) {
|
|
|
- $this->data['per_page'] = $request->per_page;
|
|
|
+ $allowedPerPage = [50, 100, 200, 500, 2000];
|
|
|
+ $requestedPerPage = (int)$request->input('per_page', 0);
|
|
|
+ $sessionPerPage = (int)session('per_page', 0);
|
|
|
+ $defaultPerPage = (int)config('pagination.per_page');
|
|
|
+
|
|
|
+ if(in_array($requestedPerPage, $allowedPerPage, true)) {
|
|
|
+ $this->data['per_page'] = $requestedPerPage;
|
|
|
+ } elseif(in_array($sessionPerPage, $allowedPerPage, true)) {
|
|
|
+ $this->data['per_page'] = $sessionPerPage;
|
|
|
+ } elseif(in_array($defaultPerPage, $allowedPerPage, true)) {
|
|
|
+ $this->data['per_page'] = $defaultPerPage;
|
|
|
} else {
|
|
|
- $this->data['per_page'] = config('pagination.per_page');
|
|
|
+ $this->data['per_page'] = 50;
|
|
|
}
|
|
|
- session(['per_page' => $request->per_page]);
|
|
|
+ session(['per_page' => $this->data['per_page']]);
|
|
|
|
|
|
// set order
|
|
|
$this->data['orderBy'] = (empty($request->order)) ? 'asc' : 'desc';
|
|
|
}
|
|
|
|
|
|
+ protected function applyStableSorting(Builder $query, string $fallbackSortBy = 'id'): void
|
|
|
+ {
|
|
|
+ $sortBy = $this->data['sortBy'] ?? 'created_at';
|
|
|
+ $orderBy = $this->data['orderBy'] ?? 'asc';
|
|
|
+
|
|
|
+ $query->orderBy($sortBy, $orderBy);
|
|
|
+ if($sortBy !== $fallbackSortBy) {
|
|
|
+ $query->orderBy($fallbackSortBy, $orderBy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param Builder $query
|
|
|
* @param Request $request
|