From 39ae1ddf54813cca2a6133509f797357ddbc5093 Mon Sep 17 00:00:00 2001 From: dante di domenico Date: Tue, 12 Aug 2025 08:42:25 +0200 Subject: [PATCH 1/2] feat: sortBy in admin pages --- .../Admin/AdministrationBaseController.php | 21 +++++++++++++++++++ .../Admin/ApplicationsController.php | 5 +++++ .../Admin/AuthProvidersController.php | 5 +++++ src/Controller/Admin/ConfigController.php | 5 +++++ src/Controller/Admin/EndpointsController.php | 5 +++++ .../Admin/ExternalAuthController.php | 5 +++++ src/Controller/Admin/RolesController.php | 5 +++++ 7 files changed, 51 insertions(+) diff --git a/src/Controller/Admin/AdministrationBaseController.php b/src/Controller/Admin/AdministrationBaseController.php index 270630207..dc0d591da 100644 --- a/src/Controller/Admin/AdministrationBaseController.php +++ b/src/Controller/Admin/AdministrationBaseController.php @@ -81,6 +81,13 @@ abstract class AdministrationBaseController extends AppController */ protected $meta = ['created', 'modified']; + /** + * Sort field + * + * @var string + */ + protected $sortBy = null; + /** * @inheritDoc */ @@ -234,6 +241,20 @@ protected function loadData(): array $total += $count; $page++; } + if ($this->sortBy != null && !empty($resultResponse['data'])) { + $attributesKeys = array_keys($resultResponse['data'][0]['attributes'] ?? []); + $metaKeys = array_keys($resultResponse['data'][0]['meta'] ?? []); + if (!in_array($this->sortBy, $attributesKeys) && !in_array($this->sortBy, $metaKeys)) { + return $resultResponse; + } + $key = in_array($this->sortBy, $attributesKeys) ? 'attributes' : 'meta'; + usort($resultResponse['data'], function ($a, $b) use ($key) { + return strcmp( + (string)Hash::get($a, sprintf('%s.%s', $key, $this->sortBy)), + (string)Hash::get($b, sprintf('%s.%s', $key, $this->sortBy)) + ); + }); + } return $resultResponse; } diff --git a/src/Controller/Admin/ApplicationsController.php b/src/Controller/Admin/ApplicationsController.php index 119b454f2..3c8016d4e 100644 --- a/src/Controller/Admin/ApplicationsController.php +++ b/src/Controller/Admin/ApplicationsController.php @@ -42,4 +42,9 @@ class ApplicationsController extends AdministrationBaseController * @inheritDoc */ protected $propertiesSecrets = ['api_key', 'client_secret']; + + /** + * @inheritDoc + */ + protected $sortBy = 'name'; } diff --git a/src/Controller/Admin/AuthProvidersController.php b/src/Controller/Admin/AuthProvidersController.php index 2a198c098..3b4426a21 100644 --- a/src/Controller/Admin/AuthProvidersController.php +++ b/src/Controller/Admin/AuthProvidersController.php @@ -51,4 +51,9 @@ class AuthProvidersController extends AdministrationBaseController * @inheritDoc */ protected $meta = []; + + /** + * @inheritDoc + */ + protected $sortBy = 'name'; } diff --git a/src/Controller/Admin/ConfigController.php b/src/Controller/Admin/ConfigController.php index 833f77de5..a51396b50 100644 --- a/src/Controller/Admin/ConfigController.php +++ b/src/Controller/Admin/ConfigController.php @@ -45,6 +45,11 @@ class ConfigController extends AdministrationBaseController 'application_id' => 'applications', ]; + /** + * @inheritDoc + */ + protected $sortBy = 'name'; + /** * @inheritDoc */ diff --git a/src/Controller/Admin/EndpointsController.php b/src/Controller/Admin/EndpointsController.php index 4dafad115..d7247d036 100644 --- a/src/Controller/Admin/EndpointsController.php +++ b/src/Controller/Admin/EndpointsController.php @@ -38,4 +38,9 @@ class EndpointsController extends AdministrationBaseController 'name' => 'string', 'description' => 'text', ]; + + /** + * @inheritDoc + */ + protected $sortBy = 'name'; } diff --git a/src/Controller/Admin/ExternalAuthController.php b/src/Controller/Admin/ExternalAuthController.php index 7d15d02ea..40031927c 100644 --- a/src/Controller/Admin/ExternalAuthController.php +++ b/src/Controller/Admin/ExternalAuthController.php @@ -49,6 +49,11 @@ class ExternalAuthController extends AdministrationBaseController 'params', ]; + /** + * @inheritDoc + */ + protected $sortBy = 'auth_provider_id'; + /** * Index method * diff --git a/src/Controller/Admin/RolesController.php b/src/Controller/Admin/RolesController.php index 7b705575f..525fa9cc1 100644 --- a/src/Controller/Admin/RolesController.php +++ b/src/Controller/Admin/RolesController.php @@ -47,6 +47,11 @@ class RolesController extends AdministrationBaseController 'description' => 'text', ]; + /** + * @inheritDoc + */ + protected $sortBy = 'name'; + /** * @inheritDoc */ From 2d6907322046babee96ab52a58ca5433dfa19584 Mon Sep 17 00:00:00 2001 From: dante di domenico Date: Tue, 12 Aug 2025 08:59:28 +0200 Subject: [PATCH 2/2] chore fix: refactor --- .../Admin/AdministrationBaseController.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Controller/Admin/AdministrationBaseController.php b/src/Controller/Admin/AdministrationBaseController.php index dc0d591da..fb835c4e6 100644 --- a/src/Controller/Admin/AdministrationBaseController.php +++ b/src/Controller/Admin/AdministrationBaseController.php @@ -244,16 +244,15 @@ protected function loadData(): array if ($this->sortBy != null && !empty($resultResponse['data'])) { $attributesKeys = array_keys($resultResponse['data'][0]['attributes'] ?? []); $metaKeys = array_keys($resultResponse['data'][0]['meta'] ?? []); - if (!in_array($this->sortBy, $attributesKeys) && !in_array($this->sortBy, $metaKeys)) { - return $resultResponse; + if (in_array($this->sortBy, $attributesKeys) || in_array($this->sortBy, $metaKeys)) { + $key = in_array($this->sortBy, $attributesKeys) ? 'attributes' : 'meta'; + usort($resultResponse['data'], function ($a, $b) use ($key) { + return strcmp( + (string)Hash::get($a, sprintf('%s.%s', $key, $this->sortBy)), + (string)Hash::get($b, sprintf('%s.%s', $key, $this->sortBy)) + ); + }); } - $key = in_array($this->sortBy, $attributesKeys) ? 'attributes' : 'meta'; - usort($resultResponse['data'], function ($a, $b) use ($key) { - return strcmp( - (string)Hash::get($a, sprintf('%s.%s', $key, $this->sortBy)), - (string)Hash::get($b, sprintf('%s.%s', $key, $this->sortBy)) - ); - }); } return $resultResponse;