From 0dd1e7023b0cabb5bc6950042a5fda7598bd24b2 Mon Sep 17 00:00:00 2001 From: Ioannis Igoumenos Date: Thu, 4 Apr 2024 17:14:51 +0300 Subject: [PATCH] Upsert and delete on ActAsPerson Model --- Controller/ActAsPeopleController.php | 32 +++++++++-------------- Controller/GrouperGroupsController.php | 1 + View/Elements/ActAsPeopleAutocomplete.ctp | 22 ++++++++++------ View/Elements/ActionItem.ctp | 4 +-- View/GrouperGroups/index.ctp | 9 ++++--- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/Controller/ActAsPeopleController.php b/Controller/ActAsPeopleController.php index 5a07210..b4ddd18 100644 --- a/Controller/ActAsPeopleController.php +++ b/Controller/ActAsPeopleController.php @@ -54,9 +54,8 @@ public function beforeFilter() $this->RequestHandler->addInputType('json', ['json_decode', true]); $this->Security->unlockedActions = [ - 'add', - 'edit', - 'delete' + 'delete', + 'upsert', ]; // Get the config @@ -69,12 +68,12 @@ public function beforeFilter() } /** - * Add an ActAs user + * Update or Insert an ActAs user * * @since COmanage Registry v4.4.0 */ - public function add(): void + public function upsert(): void { $this->request->allowMethod('ajax'); $this->layout = 'ajax'; @@ -91,6 +90,9 @@ public function add(): void $args = []; $args['conditions']['ActAsPerson.co_person_id'] = $data['co_person_id']; + if(!empty($this->request->named['actrecordId'])) { + $args['conditions']['ActAsPerson.id'] = $this->request->named['actrecordId']; + } $args['conditions']['ActAsPerson.act_as_co_person_id'] = $data['act_as_co_person_id']; $args['contain'] = false; if(!empty($this->ActAsPerson->find('first', $args))) { @@ -101,9 +103,13 @@ public function add(): void return; } + // We will update + if(!empty($this->request->named['actrecordId'])) { + $this->ActAsPerson->id = $this->request->named['actrecordId']; + } try { - $ret = $this->ActAsPerson->saveAll($data); + $ret = $this->ActAsPerson->save($data); } catch(Exception $e) { $err = filter_var($e->getMessage(),FILTER_SANITIZE_SPECIAL_CHARS); @@ -174,14 +180,6 @@ public function delete():void throw new BadRequestException('Named Parameter missing'); } - $redirect = [ - 'plugin' => 'grouper_lite_widget', - 'controller' => 'grouper_groups', - 'action' => $this->request->named['redirect_act'] ?? 'groupmember', - 'co' => $this->request->named['co'], - 'glid' => $this->request->named['glid'] - ]; - try { $conditions = [ 'ActAsPerson.co_person_id' => $this->request->named['copersonid'], @@ -267,12 +265,8 @@ public function isAuthorized(): array|bool // Construct the permission set for this user, which will also be passed to the view. $p = []; - $p['add'] = $isActAsEligibilityGroupmember; $p['delete'] = $isActAsEligibilityGroupmember; - $p['edit'] = $isActAsEligibilityGroupmember; - $p['index'] = $isActAsEligibilityGroupmember; - $p['view'] = $isActAsEligibilityGroupmember; - $p['patch'] = $isActAsEligibilityGroupmember; + $p['upsert'] = $isActAsEligibilityGroupmember; $this->set('permissions', $p); diff --git a/Controller/GrouperGroupsController.php b/Controller/GrouperGroupsController.php index 6d75472..829e0f0 100644 --- a/Controller/GrouperGroupsController.php +++ b/Controller/GrouperGroupsController.php @@ -169,6 +169,7 @@ public function beforeRender() { PeoplePickerModeEnum::All, [$act_as_record['ActAsPerson']['act_as_co_person_id']]); $this->set('vv_act_as_people', $act_as_person); + $this->set('vv_act_as_record_id', $act_as_record['ActAsPerson']['id']); } } diff --git a/View/Elements/ActAsPeopleAutocomplete.ctp b/View/Elements/ActAsPeopleAutocomplete.ctp index 6929cee..ed71650 100644 --- a/View/Elements/ActAsPeopleAutocomplete.ctp +++ b/View/Elements/ActAsPeopleAutocomplete.ctp @@ -21,9 +21,12 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; url: "", grouperUrl: "", view: "action ?>", - hasActAs: , - actAsPerson: , - permissions: , + other: { + hasActAs: , + actAsRecordId: , + actAsPerson: , + permissions: , + }, txt: { adhocHeading: "", wgHeading: "", @@ -88,7 +91,7 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; leave: "webroot ?>grouper_lite_widget/grouper_groups/leaveGroup/co:/glid:", remove: "webroot ?>grouper_lite_widget/grouper_groups/removeSubscriber/co:/glid:", add: "webroot ?>grouper_lite_widget/grouper_groups/addSubscriber/co:/glid:", - addActAs: "webroot ?>grouper_lite_widget/act_as_people/add/co:/glid:", + addActAs: "webroot ?>grouper_lite_widget/act_as_people/upsert/co:/glid:", group: "webroot ?>grouper_lite_widget/grouper_groups/groupSubscribers/co:/glid:", memberships: "webroot ?>grouper_lite_widget/grouper_groups/groupmemberapi/co:/glid:", managing: "webroot ?>grouper_lite_widget/grouper_groups/usermanagerapi/co:/glid:", @@ -109,7 +112,7 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; Autocomplete, Loader }, - inject: ['txt', 'api'], + inject: ['txt', 'api', 'other'], methods: { async addUser(user) { const { identifier: ident, label, value: id } = user; @@ -123,7 +126,10 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; formData.append("fullname", label); // Request URL - const urlString = window.location.protocol + "//" + window.location.host + this.api.addActAs; + let urlString = window.location.protocol + "//" + window.location.host + this.api.addActAs; + if(!!this.other.hasActAs) { + urlString += `/actrecordId:${this.other.actAsRecordId}` + } const url = new URL(urlString); // AJAX Request @@ -140,9 +146,9 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; const resp = await (fetch(request).catch(error => generateFlash('Network Error', 'error'))); if (!resp.ok) { - generateFlash('Enabling ActAs User failed', 'error'); - let errorResponse = await resp.json(); + generateFlash(`Enabling ActAs ${label} failed`, 'error'); this.loading = false + let errorResponse = await resp.json(); generateFlash(`${errorResponse.message}`, 'error'); return } diff --git a/View/Elements/ActionItem.ctp b/View/Elements/ActionItem.ctp index 6ab0182..73d45f9 100644 --- a/View/Elements/ActionItem.ctp +++ b/View/Elements/ActionItem.ctp @@ -81,7 +81,7 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; leave: "webroot ?>grouper_lite_widget/grouper_groups/leaveGroup/co:/glid:", remove: "webroot ?>grouper_lite_widget/grouper_groups/removeSubscriber/co:/glid:", add: "webroot ?>grouper_lite_widget/grouper_groups/addSubscriber/co:/glid:", - addActAs: "webroot ?>grouper_lite_widget/act_as_people/add/co:/glid:", + addActAs: "webroot ?>grouper_lite_widget/act_as_people/upsert/co:/glid:", deleteActAs: "webroot ?>grouper_lite_widget/act_as_people/delete/co:/glid:", group: "webroot ?>grouper_lite_widget/grouper_groups/groupSubscribers/co:/glid:", memberships: "webroot ?>grouper_lite_widget/grouper_groups/groupmemberapi/co:/glid:", @@ -138,8 +138,8 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; if (!resp.ok) { generateFlash(`Disable ActAs ${this.person.label} failed`, 'error'); - let errorResponse = await resp.json(); this.loading = false + let errorResponse = await resp.json(); return } this.response = await resp.json(); diff --git a/View/GrouperGroups/index.ctp b/View/GrouperGroups/index.ctp index a16062d..6733cdd 100644 --- a/View/GrouperGroups/index.ctp +++ b/View/GrouperGroups/index.ctp @@ -71,9 +71,12 @@ $suffix = Configure::read('debug') > 0 ? '?time=' . time() : ''; url: "", grouperUrl: "", view: "action ?>", - hasActAs: , - actAsPerson: , - permissions: , + other: { + hasActAs: , + actAsRecordId: , + actAsPerson: , + permissions: , + }, txt: { adhocHeading: "", wgHeading: "",