From 1ea7c796ac85f91e21210357729744049cfa4743 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Tue, 29 Aug 2023 14:57:48 +0200 Subject: [PATCH] chg: [component:CRUD] Include meta-fields in REST queries and clever pagination support for REST queries --- src/Controller/Component/CRUDComponent.php | 8 ++++++-- .../ListTopBar/group_table_action/numberOfElement.php | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Controller/Component/CRUDComponent.php b/src/Controller/Component/CRUDComponent.php index 9891b20..a1ecba1 100644 --- a/src/Controller/Component/CRUDComponent.php +++ b/src/Controller/Component/CRUDComponent.php @@ -96,17 +96,18 @@ class CRUDComponent extends Component $query->order($sort . ' ' . $direction); } } - if ($this->metaFieldsSupported() && !$this->Controller->ParamHandler->isRest()) { + if ($this->metaFieldsSupported()) { $query = $this->includeRequestedMetaFields($query); } if (!$this->Controller->ParamHandler->isRest()) { $this->setRequestedEntryAmount(); + } else if (!empty($this->request->getQuery('limit'))) { + $this->Controller->paginate['limit'] = PHP_INT_MAX; // Make sure to download the entire filtered table } $data = $this->Controller->paginate($query, $this->Controller->paginate ?? []); $totalCount = $this->Controller->getRequest()->getAttribute('paging')[$this->TableAlias]['count']; if ($this->Controller->ParamHandler->isRest()) { - $data = $this->Controller->paginate($query, $this->Controller->paginate ?? []); if (isset($options['hidden'])) { $data->each(function($value, $key) use ($options) { $hidden = is_array($options['hidden']) ? $options['hidden'] : [$options['hidden']]; @@ -795,6 +796,9 @@ class CRUDComponent extends Component $user = $this->Controller->ACL->getUser(); $tableSettings = IndexSetting::getTableSetting($user, $this->Table); if (!empty($tableSettings['number_of_element'])) { + if ($tableSettings['number_of_element'] === 'all') { + $tableSettings['number_of_element'] = 10000; // Even with all, sure not to return too much data + } $this->Controller->paginate['limit'] = intval($tableSettings['number_of_element']); } } diff --git a/templates/element/genericElements/ListTopBar/group_table_action/numberOfElement.php b/templates/element/genericElements/ListTopBar/group_table_action/numberOfElement.php index 6b69c50..e3913d1 100644 --- a/templates/element/genericElements/ListTopBar/group_table_action/numberOfElement.php +++ b/templates/element/genericElements/ListTopBar/group_table_action/numberOfElement.php @@ -10,6 +10,7 @@ $numberOfElementSelectSeed = 'seed-' . mt_rand(); +