From 6bef518ffa95f9d950ee3dbc27fb723c0346acc6 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 11 Nov 2017 22:16:25 -0500 Subject: [PATCH] Add more endpoints for service messages --- .../ServiceMessages/ServiceMessageHandler.php | 35 +++++++++++- .../ServiceMessagesController.php | 34 +++++++++++- .../ServiceMessagesGateway.php | 54 ++++++++++++++++++- api/index.php | 2 +- 4 files changed, 119 insertions(+), 6 deletions(-) diff --git a/api/BusinessLogic/ServiceMessages/ServiceMessageHandler.php b/api/BusinessLogic/ServiceMessages/ServiceMessageHandler.php index 88bcd978..d70f142f 100644 --- a/api/BusinessLogic/ServiceMessages/ServiceMessageHandler.php +++ b/api/BusinessLogic/ServiceMessages/ServiceMessageHandler.php @@ -42,13 +42,44 @@ class ServiceMessageHandler extends \BaseClass { return $this->serviceMessageGateway->createServiceMessage($serviceMessage, $heskSettings); } + function getServiceMessages($heskSettings) { + return $this->serviceMessageGateway->getServiceMessages($heskSettings); + } + + function editServiceMessage($serviceMessage, $heskSettings) { + $this->validate($serviceMessage, false); + + if ($serviceMessage->icon === null) { + switch ($serviceMessage->style) { + case ServiceMessageStyle::NONE: + $serviceMessage->icon = ''; + break; + case ServiceMessageStyle::INFO: + $serviceMessage->icon = 'fa fa-comment'; + break; + case ServiceMessageStyle::NOTICE: + $serviceMessage->icon = 'fa fa-exclamation-triangle'; + break; + case ServiceMessageStyle::ERROR: + $serviceMessage->icon = 'fa fa-times-circle'; + break; + case ServiceMessageStyle::SUCCESS: + $serviceMessage->icon = 'fa fa-check-circle'; + break; + } + } + + return $this->serviceMessageGateway->updateServiceMessage($serviceMessage, $heskSettings); + } + /** * @param $serviceMessage ServiceMessage + * @param bool $isNew * @throws ValidationException */ - private function validate($serviceMessage) { + private function validate($serviceMessage, $isNew = true) { $validationModel = new ValidationModel(); - if ($serviceMessage->createdBy < 1) { + if ($isNew && $serviceMessage->createdBy < 1) { $validationModel->errorKeys[] = 'MISSING_CREATOR'; } if ($serviceMessage->message === null || trim($serviceMessage->message) === '') { diff --git a/api/Controllers/ServiceMessages/ServiceMessagesController.php b/api/Controllers/ServiceMessages/ServiceMessagesController.php index d6960764..f17d6e14 100644 --- a/api/Controllers/ServiceMessages/ServiceMessagesController.php +++ b/api/Controllers/ServiceMessages/ServiceMessagesController.php @@ -8,6 +8,15 @@ use BusinessLogic\ServiceMessages\ServiceMessageHandler; use Controllers\JsonRetriever; class ServiceMessagesController extends \BaseClass { + function get() { + global $applicationContext, $hesk_settings; + + /* @var $handler ServiceMessageHandler */ + $handler = $applicationContext->get(ServiceMessageHandler::clazz()); + + return output($handler->getServiceMessages($hesk_settings)); + } + function post() { global $applicationContext, $userContext, $hesk_settings; @@ -20,14 +29,35 @@ class ServiceMessagesController extends \BaseClass { return output($element, 201); } + function put() { + global $applicationContext, $hesk_settings; + + /* @var $handler ServiceMessageHandler */ + $handler = $applicationContext->get(ServiceMessageHandler::clazz()); + + $data = JsonRetriever::getJsonData(); + $element = $handler->editServiceMessage($this->buildElementModel($data, null, false), $hesk_settings); + + return output($element); + } + /** * @param $data array * @param $userContext UserContext * @return ServiceMessage */ - private function buildElementModel($data, $userContext) { + private function buildElementModel($data, $userContext, $creating = true) { $serviceMessage = new ServiceMessage(); - $serviceMessage->createdBy = $userContext->id; + + if (!$creating) { + $serviceMessage->id = $data['id']; + $serviceMessage->order = $data['order']; + } + + if ($creating) { + $serviceMessage->createdBy = $userContext->id; + } + $serviceMessage->title = $data['title']; $serviceMessage->icon = $data['icon']; $serviceMessage->message = $data['message']; diff --git a/api/DataAccess/ServiceMessages/ServiceMessagesGateway.php b/api/DataAccess/ServiceMessages/ServiceMessagesGateway.php index 82d9e6b8..9dfb1796 100644 --- a/api/DataAccess/ServiceMessages/ServiceMessagesGateway.php +++ b/api/DataAccess/ServiceMessages/ServiceMessagesGateway.php @@ -42,7 +42,59 @@ class ServiceMessagesGateway extends CommonDao { WHERE `id` = " . intval($serviceMessage->id)); $row = hesk_dbFetchAssoc($rs); $serviceMessage->dateCreated = $row['dt']; - $serviceMessage->order = $row['order']; + $serviceMessage->order = intval($row['order']); + + $this->close(); + + return $serviceMessage; + } + + function getServiceMessages($heskSettings) { + $this->init(); + + $serviceMessages = array(); + + $rs = hesk_dbQuery("SELECT * FROM `". hesk_dbEscape($heskSettings['db_pfix']) . "service_messages` ORDER BY `id`"); + while ($row = hesk_dbFetchAssoc($rs)) { + $serviceMessage = new ServiceMessage(); + $serviceMessage->id = $row['id']; + $serviceMessage->published = intval($row['type']) !== 1; + $serviceMessage->createdBy = intval($row['author']); + $serviceMessage->order = intval($row['order']); + $serviceMessage->dateCreated = $row['dt']; + $serviceMessage->title = $row['title']; + $serviceMessage->message = $row['message']; + $serviceMessage->style = ServiceMessageStyle::getStyleById($row['style']); + $serviceMessage->icon = $row['icon']; + $serviceMessages[] = $serviceMessage; + } + + $this->close(); + + return $serviceMessages; + } + + function updateServiceMessage($serviceMessage, $heskSettings) { + $this->init(); + + $style = ServiceMessageStyle::getIdForStyle($serviceMessage->style); + $type = $serviceMessage->published ? 0 : 1; + + hesk_dbQuery("UPDATE `" . hesk_dbEscape($heskSettings['db_pfix']) . "service_messages` + SET `title` = '" . hesk_dbEscape($serviceMessage->title) . "', + `message` = '" . hesk_dbEscape($serviceMessage->message) . "', + `style` = '" . intval($style) . "', + `type` = " . intval($type) . ", + `icon` = '" . hesk_dbEscape($serviceMessage->icon) . "' + WHERE `id` = " . intval($serviceMessage->id)); + + $otherFieldsRs = hesk_dbQuery("SELECT `dt`, `author`, `order` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "service_messages` + WHERE `id` = " . intval($serviceMessage->id)); + $otherFields = hesk_dbFetchAssoc($otherFieldsRs); + + $serviceMessage->order = intval($otherFields['order']); + $serviceMessage->createdBy = intval($otherFields['author']); + $serviceMessage->dateCreated = $otherFields['dt']; $this->close(); diff --git a/api/index.php b/api/index.php index 6700fa56..afa70f70 100644 --- a/api/index.php +++ b/api/index.php @@ -203,7 +203,7 @@ Link::all(array( // Settings '/v1/settings' => action(\Controllers\Settings\SettingsController::clazz(), RequestMethod::all()), // Service Messages - '/v1/service-messages' => action(\Controllers\ServiceMessages\ServiceMessagesController::clazz(), array(RequestMethod::POST)), + '/v1/service-messages' => action(\Controllers\ServiceMessages\ServiceMessagesController::clazz(), array(RequestMethod::GET, RequestMethod::POST, RequestMethod::PUT)), /* Internal use only routes */ // Resend email response