From 04b82d356e88b0f0a8693947c6d76da0b1c7c308 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Fri, 25 Feb 2022 15:36:55 +0100 Subject: [PATCH] chg: [indexTable:filtering] Initial work on supporting custom operators --- src/Controller/Component/CRUDComponent.php | 6 ++++ src/Model/Behavior/MetaFieldsBehavior.php | 5 +++ .../IndexTable/metafield_filtering.php | 32 +++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/Controller/Component/CRUDComponent.php b/src/Controller/Component/CRUDComponent.php index add9d9d..4b364a9 100644 --- a/src/Controller/Component/CRUDComponent.php +++ b/src/Controller/Component/CRUDComponent.php @@ -178,6 +178,12 @@ class CRUDComponent extends Component $this->Controller->set('metaFieldsEnabled', false); } $filters = !empty($this->Controller->filterFields) ? $this->Controller->filterFields : []; + $typeHandlers = $this->Table->getBehavior('MetaFields')->getTypeHandlers(); + $typeHandlersOperators = []; + foreach ($typeHandlers as $type => $handler) { + $typeHandlersOperators[$type] = $handler::OPERATORS; + } + $this->Controller->set('typeHandlersOperators', $typeHandlersOperators); $this->Controller->set('filters', $filters); $this->Controller->viewBuilder()->setLayout('ajax'); $this->Controller->render('/genericTemplates/filters'); diff --git a/src/Model/Behavior/MetaFieldsBehavior.php b/src/Model/Behavior/MetaFieldsBehavior.php index 7fb62aa..923e224 100644 --- a/src/Model/Behavior/MetaFieldsBehavior.php +++ b/src/Model/Behavior/MetaFieldsBehavior.php @@ -69,6 +69,11 @@ class MetaFieldsBehavior extends Behavior } } + public function getTypeHandlers(): array + { + return $this->typeHandlers; + } + public function getScope() { if (is_null($this->aliasScope)) { diff --git a/templates/element/genericElements/IndexTable/metafield_filtering.php b/templates/element/genericElements/IndexTable/metafield_filtering.php index 0bd85f8..ea3bc2b 100644 --- a/templates/element/genericElements/IndexTable/metafield_filtering.php +++ b/templates/element/genericElements/IndexTable/metafield_filtering.php @@ -2,7 +2,12 @@ $filteringItems = []; foreach ($metaTemplates as $template_id => $metaTemplate) { foreach ($metaTemplate['meta_template_fields'] as $metaTemplateField) { - $filteringItems[h($metaTemplate->name)][] = ['id' => $metaTemplateField->id, 'name' => h($metaTemplateField->field), 'template_id' => $template_id]; + $filteringItems[h($metaTemplate->name)][] = [ + 'id' => h($metaTemplateField->id), + 'name' => h($metaTemplateField->field), + 'template_id' => h($template_id), + 'type' => h($metaTemplateField->type), + ]; } } @@ -35,6 +40,7 @@ $filteringForm = $this->Bootstrap->table(