diff --git a/src/Controller/Component/CRUDComponent.php b/src/Controller/Component/CRUDComponent.php index 8578dfe..863f650 100644 --- a/src/Controller/Component/CRUDComponent.php +++ b/src/Controller/Component/CRUDComponent.php @@ -42,7 +42,14 @@ class CRUDComponent extends Component } else { $this->Controller->loadComponent('Paginator'); $data = $this->Controller->Paginator->paginate($query); + if (!empty($options['context'])) { + $this->setCurrentContext($options, $params); + } $this->Controller->set('data', $data); + if (!empty($options['context'])) { + $contexts = array_merge(['_all'], $this->getAllContexts($options['context'])); + $this->Controller->set('contexts', $contexts); + } } } @@ -349,6 +356,16 @@ class CRUDComponent extends Component return $query; } + protected function setCurrentContext($options, $params) + { + foreach ($params as $filter => $filterValue) { + if ($options['context'] == $filter) { + $this->Controller->set('currentContext', $filterValue); + break; + } + } + } + public function toggle(int $id, string $fieldName = 'enabled', array $params = []): void { if (empty($id)) { @@ -425,4 +442,9 @@ class CRUDComponent extends Component } } } + + private function getAllContexts($context) + { + return $this->Table->find()->distinct([$context])->all()->extract($context)->toList(); + } } diff --git a/src/Controller/MetaTemplatesController.php b/src/Controller/MetaTemplatesController.php index a1abd66..c6d4e64 100644 --- a/src/Controller/MetaTemplatesController.php +++ b/src/Controller/MetaTemplatesController.php @@ -35,6 +35,7 @@ class MetaTemplatesController extends AppController $this->CRUD->index([ 'filters' => ['name', 'uuid', 'scope'], 'quickFilters' => ['name', 'uuid', 'scope'], + 'context' => 'scope', 'contain' => ['MetaTemplateFields'] ]); if ($this->ParamHandler->isRest()) { diff --git a/templates/MetaTemplates/index.php b/templates/MetaTemplates/index.php index 86f8603..68c2ad4 100644 --- a/templates/MetaTemplates/index.php +++ b/templates/MetaTemplates/index.php @@ -3,8 +3,10 @@ echo $this->element('genericElements/IndexTable/index_table', [ 'data' => [ 'data' => $data, 'top_bar' => [ - 'pull' => 'right', 'children' => [ + [ + 'type' => 'context_filters', + ], [ 'type' => 'search', 'button' => __('Filter'), diff --git a/templates/element/genericElements/ListTopBar/element_simple.php b/templates/element/genericElements/ListTopBar/element_simple.php index afa5dae..bde2892 100644 --- a/templates/element/genericElements/ListTopBar/element_simple.php +++ b/templates/element/genericElements/ListTopBar/element_simple.php @@ -1,32 +1,42 @@ %s%s%s', + '', empty($data['class']) ? '' : h($data['class']), - empty($data['active']) ? 'btn-inverse' : 'btn-primary', // Change the default class for highlighted/active toggles here + $onClickActive ? 'btn-primary' : (empty($data['active']) ? 'btn-light' : 'btn-secondary'), // Change the default class for highlighted/active toggles here empty($data['id']) ? '' : 'id="' . h($data['id']) . '"', empty($data['url']) ? '#' : h($data['url']), // prevent default is passed if the url is not set empty($onClick) ? '' : $onClick, // pass $data['onClick'] for the function name to call and $data['onClickParams'] for the parameter list diff --git a/templates/element/genericElements/ListTopBar/group_context_filters.php b/templates/element/genericElements/ListTopBar/group_context_filters.php new file mode 100644 index 0000000..43a29cb --- /dev/null +++ b/templates/element/genericElements/ListTopBar/group_context_filters.php @@ -0,0 +1,28 @@ + $this->request->getParam('controller'), + 'action' => 'index', + ]; + if ($context != '_all') { + $urlParams['?'] = ['scope' => $context]; + } + $contextArray[] = [ + 'active' => $context === $currentContext, + 'url' => $this->Url->build($urlParams), + 'text' => Cake\Utility\Inflector::humanize($context), + ]; + } + + $dataGroup = [ + 'type' => 'simple', + 'children' => $contextArray, + ]; + if (isset($data['requirement'])) { + $dataGroup['requirement'] = $data['requirement']; + } + echo $this->element('/genericElements/ListTopBar/group_simple', [ + 'data' => $dataGroup + ]); \ No newline at end of file