diff --git a/src/Controller/Component/CRUDComponent.php b/src/Controller/Component/CRUDComponent.php index 0ed15e0..81fd6d8 100644 --- a/src/Controller/Component/CRUDComponent.php +++ b/src/Controller/Component/CRUDComponent.php @@ -48,6 +48,23 @@ class CRUDComponent extends Component $this->Controller->set('data', $data); } } + + /** + * getResponsePayload Returns the adaquate response payload based on the request context + * + * @return false or Array + */ + public function getResponsePayload() + { + if ($this->Controller->ParamHandler->isRest()) { + return $this->Controller->restResponsePayload; + } else if ($this->Controller->ParamHandler->isAjax() && $this->request->is(['post', 'put'])) { + if (empty($this->Controller->isFailResponse) || empty($this->Controller->ajax_with_html_on_failure)) { + return $this->Controller->ajaxResponsePayload; + } + } + return false; + } private function getMetaTemplates() { @@ -301,8 +318,9 @@ class CRUDComponent extends Component if ($this->Table->delete($data)) { $message = __('{0} deleted.', $this->ObjectAlias); if ($this->Controller->ParamHandler->isRest()) { - $data = $this->Table->get($id); - $this->Controller->restResponsePayload = $this->RestResponse->saveSuccessResponse($this->TableAlias, 'delete', $id, 'json', $message); + $this->Controller->restResponsePayload = $this->RestResponse->viewData($data, 'json'); + } else if ($this->Controller->ParamHandler->isAjax()) { + $this->Controller->ajaxResponsePayload = $this->Controller->RestResponse->ajaxSuccessResponse($this->ObjectAlias, 'delete', $data, $message); } else { $this->Controller->Flash->success($message); $this->Controller->redirect($this->Controller->referer()); @@ -493,8 +511,17 @@ class CRUDComponent extends Component } } - private function getFilteringContextFromField($context) + private function getFilteringContextFromField($field) { - return $this->Table->find()->distinct([$context])->all()->extract($context)->toList(); + $exploded = explode('.', $field); + if (count($exploded) > 1) { + $model = $exploded[0]; + $subField = $exploded[1]; + return $this->Table->{$model}->find() + ->distinct([$subField]) + ->extract($subField)->toList(); + } else { + return $this->Table->find()->distinct([$field])->all()->extract($field)->toList(); + } } } diff --git a/src/Controller/IndividualsController.php b/src/Controller/IndividualsController.php index 7e6fe17..e0c7737 100644 --- a/src/Controller/IndividualsController.php +++ b/src/Controller/IndividualsController.php @@ -15,8 +15,14 @@ class IndividualsController extends AppController public function index() { $this->CRUD->index([ - 'filters' => ['uuid', 'email', 'first_name', 'last_name', 'position', 'Organisations.id'], + 'filters' => ['uuid', 'email', 'first_name', 'last_name', 'position', 'Organisations.id', 'Alignments.type'], 'quickFilters' => ['uuid', 'email', 'first_name', 'last_name', 'position'], + 'contextFilters' => [ + 'allow_all' => true, + 'fields' => [ + 'Alignments.type' + ] + ], 'contain' => ['Alignments' => 'Organisations'] ]); if ($this->ParamHandler->isRest()) { @@ -29,8 +35,9 @@ class IndividualsController extends AppController public function add() { $this->CRUD->add(); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $this->set('metaGroup', 'ContactDB'); } @@ -38,8 +45,9 @@ class IndividualsController extends AppController public function view($id) { $this->CRUD->view($id, ['contain' => ['Alignments' => 'Organisations']]); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $this->set('metaGroup', 'ContactDB'); } @@ -47,10 +55,9 @@ class IndividualsController extends AppController public function edit($id) { $this->CRUD->edit($id); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; - } else if($this->ParamHandler->isAjax() && $this->request->is(['post', 'put'])) { - return $this->ajaxResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $this->set('metaGroup', 'ContactDB'); $this->render('add'); @@ -59,8 +66,9 @@ class IndividualsController extends AppController public function delete($id) { $this->CRUD->delete($id); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $this->set('metaGroup', 'ContactDB'); } diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index 7d39103..db11453 100644 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -23,12 +23,9 @@ class UsersController extends AppController public function add() { $this->CRUD->add(); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; - } else if ($this->ParamHandler->isAjax() && $this->request->is(['post', 'put'])) { - if (empty($this->isFailResponse) || empty($this->ajax_with_html_on_failure)) { - return $this->ajaxResponsePayload; - } + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $dropdownData = [ 'role' => $this->Users->Roles->find('list', [ @@ -78,8 +75,9 @@ class UsersController extends AppController $params['fields'][] = 'role_id'; } $this->CRUD->edit($id, $params); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $dropdownData = [ 'role' => $this->Users->Roles->find('list', [ @@ -94,11 +92,21 @@ class UsersController extends AppController $this->render('add'); } + public function toggle($id, $fieldName = 'disabled') + { + $this->CRUD->toggle($id, $fieldName); + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; + } + } + public function delete($id) { $this->CRUD->delete($id); - if ($this->ParamHandler->isRest()) { - return $this->restResponsePayload; + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; } $this->set('metaGroup', $this->isAdmin ? 'Administration' : 'Cerebrate'); } diff --git a/templates/Individuals/index.php b/templates/Individuals/index.php index d5b72d8..7ff2e4c 100644 --- a/templates/Individuals/index.php +++ b/templates/Individuals/index.php @@ -15,6 +15,10 @@ echo $this->element('genericElements/IndexTable/index_table', [ ] ] ], + [ + 'type' => 'context_filters', + 'context_filters' => $filteringContexts + ], [ 'type' => 'search', 'button' => __('Filter'), @@ -68,12 +72,12 @@ echo $this->element('genericElements/IndexTable/index_table', [ 'icon' => 'eye' ], [ - 'onclick' => 'populateAndLoadModal(\'/individuals/edit/[onclick_params_data_path]\');', + 'onclick' => 'openModalFromURL(\'/individuals/edit/[onclick_params_data_path]\');', 'onclick_params_data_path' => 'id', 'icon' => 'edit' ], [ - 'onclick' => 'populateAndLoadModal(\'/individuals/delete/[onclick_params_data_path]\');', + 'onclick' => 'openModalFromURL(\'/individuals/delete/[onclick_params_data_path]\');', 'onclick_params_data_path' => 'id', 'icon' => 'trash' ] diff --git a/templates/Users/index.php b/templates/Users/index.php index e73e860..7d7ef0d 100644 --- a/templates/Users/index.php +++ b/templates/Users/index.php @@ -3,7 +3,6 @@ echo $this->element('genericElements/IndexTable/index_table', [ 'data' => [ 'data' => $data, 'top_bar' => [ - 'pull' => 'right', 'children' => [ [ 'type' => 'simple', @@ -31,6 +30,22 @@ echo $this->element('genericElements/IndexTable/index_table', [ 'sort' => 'id', 'data_path' => 'id', ], + [ + 'name' => __('Disabled'), + 'sort' => 'disabled', + 'data_path' => 'disabled', + 'element' => 'toggle', + 'url' => '/users/toggle/{{0}}', + 'url_params_vars' => ['id'], + 'toggle_data' => [ + 'editRequirement' => [ + 'function' => function($row, $options) { + return true; + }, + ], + 'skip_full_reload' => true + ] + ], [ 'name' => __('Username'), 'sort' => 'username', @@ -71,12 +86,12 @@ echo $this->element('genericElements/IndexTable/index_table', [ 'icon' => 'eye' ], [ - 'onclick' => 'populateAndLoadModal(\'/users/edit/[onclick_params_data_path]\');', + 'onclick' => 'openModalFromURL(\'/users/edit/[onclick_params_data_path]\');', 'onclick_params_data_path' => 'id', 'icon' => 'edit' ], [ - 'onclick' => 'populateAndLoadModal(\'/users/delete/[onclick_params_data_path]\');', + 'onclick' => 'openModalFromURL(\'/users/delete/[onclick_params_data_path]\');', 'onclick_params_data_path' => 'id', 'icon' => 'trash' ] diff --git a/templates/element/genericElements/IndexTable/Fields/toggle.php b/templates/element/genericElements/IndexTable/Fields/toggle.php index 39ecb67..b0fd866 100644 --- a/templates/element/genericElements/IndexTable/Fields/toggle.php +++ b/templates/element/genericElements/IndexTable/Fields/toggle.php @@ -75,9 +75,6 @@ ...correctOptions, APIConfirm: (tmpApi) => { return submitForm(tmpApi, url) - .catch(e => { - // Provide feedback inside modal? - }) }, } UI.modal(modalOptions) diff --git a/templates/element/genericElements/ListTopBar/group_search.php b/templates/element/genericElements/ListTopBar/group_search.php index cf74859..6732656 100644 --- a/templates/element/genericElements/ListTopBar/group_search.php +++ b/templates/element/genericElements/ListTopBar/group_search.php @@ -32,7 +32,7 @@ empty($data['value']) ? '' : h($data['value']) ); echo sprintf( - '