diff --git a/libraries/RequestProcessors/BroodRequestProcessor.php b/libraries/default/RequestProcessors/BroodRequestProcessor.php similarity index 96% rename from libraries/RequestProcessors/BroodRequestProcessor.php rename to libraries/default/RequestProcessors/BroodRequestProcessor.php index 652c818..13a0c33 100644 --- a/libraries/RequestProcessors/BroodRequestProcessor.php +++ b/libraries/default/RequestProcessors/BroodRequestProcessor.php @@ -1,7 +1,7 @@ Inbox = TableRegistry::getTableLocator()->get('Inbox'); @@ -27,7 +28,7 @@ class GenericRequestProcessor $processingTemplatePath = $this->getProcessingTemplatePath(); $file = new File($this->processingTemplatesDirectory . DS . $processingTemplatePath); if ($file->exists()) { - $this->processingTemplate = $processingTemplatePath; + $this->processingTemplate = str_replace('.php', '', $processingTemplatePath); } $file->close(); } @@ -53,10 +54,19 @@ class GenericRequestProcessor public function getProcessingTemplate() { - if ($this->processingTemplate == '/genericTemplates/confirm') { - return '/genericTemplates/confirm'; - } - return DS . 'RequestProcessors' . DS . str_replace('.php', '', $this->processingTemplate); + return $this->processingTemplate; + } + + public function render($request=[]) + { + $processingTemplate = $this->getProcessingTemplate(); + $viewVariables = $this->getViewVariables($request); + $builder = new ViewBuilder(); + $builder->disableAutoLayout() + ->setClassName('Monad') + ->setTemplate($processingTemplate); + $view = $builder->build($viewVariables); + return $view->render(); } protected function generateRequest($requestData) @@ -96,18 +106,20 @@ class GenericRequestProcessor $this->{$action} = $reflection->newInstance(); } } - - protected function setViewVariablesConfirmModal($controller, $id, $title='', $question='', $actionName='') + + protected function getViewVariablesConfirmModal($id, $title='', $question='', $actionName='') { - $controller->set('title', !empty($title) ? $title : __('Process request {0}', $id)); - $controller->set('question', !empty($question) ? $question : __('Confirm request {0}', $id)); - $controller->set('actionName', !empty($actionName) ? $actionName : __('Confirm')); - $controller->set('path', ['controller' => 'inbox', 'action' => 'process', $id]); + return [ + 'title' => !empty($title) ? $title : __('Process request {0}', $id), + 'question' => !empty($question) ? $question : __('Confirm request {0}', $id), + 'actionName' => !empty($actionName) ? $actionName : __('Confirm'), + 'path' => ['controller' => 'inbox', 'action' => 'process', $id] + ]; } - public function setViewVariables($controller, $request) + public function getViewVariables($request) { - $this->setViewVariablesConfirmModal($controller, $request->id); + return $this->getViewVariablesConfirmModal($request->id, '', '', ''); } protected function genActionResult($data, $success, $message, $errors=[]) diff --git a/libraries/RequestProcessors/ProposalRequestProcessor.php b/libraries/default/RequestProcessors/ProposalRequestProcessor.php similarity index 93% rename from libraries/RequestProcessors/ProposalRequestProcessor.php rename to libraries/default/RequestProcessors/ProposalRequestProcessor.php index 673d78f..3421edf 100644 --- a/libraries/RequestProcessors/ProposalRequestProcessor.php +++ b/libraries/default/RequestProcessors/ProposalRequestProcessor.php @@ -1,7 +1,7 @@ description = __('~to-be-defined~'); + $this->Users = TableRegistry::getTableLocator()->get('Users'); + } + + protected function addValidatorRules($validator) + { + return $validator; + } + + public function create($requestData) { + $this->validateRequestData($requestData); + $requestData['title'] = __('~to-be-defined~'); + return parent::create($requestData); + } + + public function process($id, $requestData) + { + $proposalAccepted = false; + $saveResult = []; + if ($proposalAccepted) { + $this->discard($id, $requestData); + } + return $this->genActionResult( + $saveResult, + $proposalAccepted, + $proposalAccepted ? __('success') : __('fail'), + [] + ); + } + + public function discard($id, $requestData) + { + return parent::discard($id, $requestData); + } +} \ No newline at end of file diff --git a/libraries/RequestProcessors/UserRequestProcessor.php b/libraries/default/RequestProcessors/UserRequestProcessor.php similarity index 92% rename from libraries/RequestProcessors/UserRequestProcessor.php rename to libraries/default/RequestProcessors/UserRequestProcessor.php index 4398b32..3120bde 100644 --- a/libraries/RequestProcessors/UserRequestProcessor.php +++ b/libraries/default/RequestProcessors/UserRequestProcessor.php @@ -1,7 +1,7 @@ $this->Users->Roles->find('list', [ @@ -72,9 +73,11 @@ class RegistrationProcessor extends UserRequestProcessor implements GenericProce 'role_id' => !empty($request['data']['role_id']) ? $request['data']['role_id'] : '', 'disabled' => !empty($request['data']['disabled']) ? $request['data']['disabled'] : '', ]); - $controller->set('individualEntity', $individualEntity); - $controller->set('userEntity', $userEntity); - $controller->set(compact('dropdownData')); + return [ + 'dropdownData' => $dropdownData, + 'userEntity' => $userEntity, + 'individualEntity' => $individualEntity + ]; } public function process($id, $requestData) diff --git a/templates/RequestProcessors/User/registration.php b/libraries/default/RequestProcessors/templates/User/registration.php similarity index 100% rename from templates/RequestProcessors/User/registration.php rename to libraries/default/RequestProcessors/templates/User/registration.php diff --git a/src/Controller/InboxController.php b/src/Controller/InboxController.php index 9661e83..6c0f978 100644 --- a/src/Controller/InboxController.php +++ b/src/Controller/InboxController.php @@ -87,7 +87,8 @@ class InboxController extends AppController $processResult = $processor->process($id, $this->request->getData()); return $processor->genHTTPReply($this, $processResult); } else { - $this->requestProcessor->render($this, $processor, $request); + $renderedView = $processor->render($request); + return $this->response->withStringBody($renderedView); } } diff --git a/src/Model/Table/RequestProcessorTable.php b/src/Model/Table/RequestProcessorTable.php index 5202d94..e76fdab 100644 --- a/src/Model/Table/RequestProcessorTable.php +++ b/src/Model/Table/RequestProcessorTable.php @@ -7,7 +7,7 @@ use Cake\Filesystem\Folder; class RequestProcessorTable extends AppTable { - private $processorsDirectory = ROOT . '/libraries/RequestProcessors'; + private $processorsDirectory = ROOT . '/libraries/default/RequestProcessors'; private $requestProcessors; private $enabledProcessors = [ // to be defined in config 'Brood' => [ @@ -45,15 +45,6 @@ class RequestProcessorTable extends AppTable throw new \Exception(__('Processor not found'), 1); } - public function render($controller, $processor, $request=[]) - { - $controller->set('request', $request); - $controller->viewBuilder()->setLayout('ajax'); - $processingTemplate = $processor->getProcessingTemplate(); - $processor->setViewVariables($controller, $request); - $controller->render($processingTemplate); - } - public function listProcessors($scope=null) { if (is_null($scope)) { diff --git a/src/View/MonadView.php b/src/View/MonadView.php new file mode 100644 index 0000000..562c6bf --- /dev/null +++ b/src/View/MonadView.php @@ -0,0 +1,36 @@ +additionalTemplatePaths); + return $paths; + } +}