From 79f4bc3c6b7eae3ee5c6d2c42cf4312d3f69f182 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Fri, 8 Oct 2021 16:49:12 +0200 Subject: [PATCH] chg: [userSettings] Added endpoints to better interact with user settings --- src/Controller/UserSettingsController.php | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/Controller/UserSettingsController.php b/src/Controller/UserSettingsController.php index 3853633..4da2ed4 100644 --- a/src/Controller/UserSettingsController.php +++ b/src/Controller/UserSettingsController.php @@ -37,6 +37,17 @@ class UserSettingsController extends AppController } } + public function view($id) + { + $this->CRUD->view($id, [ + 'contain' => ['Users'] + ]); + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; + } + } + public function add($user_id = false) { $this->CRUD->add([ @@ -90,4 +101,39 @@ class UserSettingsController extends AppController } } + public function getSettingByName($settingsName) + { + $setting = $this->UserSettings->getSettingByName($this->ACL->getUser(), $settingsName); + if (is_null($setting)) { + throw new NotFoundException(__('Invalid {0} for user {1}.', __('User setting'), $this->ACL->getUser()->username)); + } + $this->CRUD->view($setting->id, [ + 'contain' => ['Users'] + ]); + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; + } + $this->render('view'); + } + + public function setSetting($settingsName) + { + if (!$this->request->is('get')) { + $setting = $this->UserSettings->getSettingByName($this->ACL->getUser(), $settingsName); + if (is_null($setting)) { // setting not found, create it + $result = $this->UserSettings->createSetting($this->ACL->getUser(), $settingsName, $this->request->getData()['value']); + } else { + $result = $this->UserSettings->editSetting($this->ACL->getUser(), $settingsName, $this->request->getData()['value']); + } + $success = !empty($result); + $message = $success ? __('Setting saved') : __('Could not save setting'); + $this->CRUD->setResponseForController('setSetting', $success, $message, $result); + $responsePayload = $this->CRUD->getResponsePayload(); + if (!empty($responsePayload)) { + return $responsePayload; + } + } + $this->set('settingName', $settingsName); + } } \ No newline at end of file