From 167d6c76ac81e752538defa59cc1e60798ef098e Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Fri, 28 Apr 2017 12:36:48 -0400 Subject: [PATCH] Basic ticket info can now be edited --- api/ApplicationContext.php | 3 ++ api/BusinessLogic/Tickets/EditTicketModel.php | 2 +- api/BusinessLogic/Tickets/TicketEditor.php | 8 ++++ .../Tickets/StaffTicketController.php | 39 +++++++++++++++++++ api/DataAccess/Tickets/TicketGateway.php | 12 +++--- 5 files changed, 57 insertions(+), 7 deletions(-) diff --git a/api/ApplicationContext.php b/api/ApplicationContext.php index d052b8e6..e8e66b2c 100644 --- a/api/ApplicationContext.php +++ b/api/ApplicationContext.php @@ -15,6 +15,7 @@ use BusinessLogic\Security\UserToTicketChecker; use BusinessLogic\Settings\ApiChecker; use BusinessLogic\Tickets\Autoassigner; use BusinessLogic\Tickets\TicketDeleter; +use BusinessLogic\Tickets\TicketEditor; use BusinessLogic\Tickets\TicketRetriever; use BusinessLogic\Tickets\TicketCreator; use BusinessLogic\Tickets\NewTicketValidator; @@ -117,5 +118,7 @@ class ApplicationContext { new TicketDeleter($this->get[TicketGateway::class], $this->get[UserToTicketChecker::class], $this->get[AttachmentHandler::class]); + $this->get[TicketEditor::class] = + new TicketEditor($this->get[TicketGateway::class], $this->get[UserToTicketChecker::class]); } } \ No newline at end of file diff --git a/api/BusinessLogic/Tickets/EditTicketModel.php b/api/BusinessLogic/Tickets/EditTicketModel.php index d36aa1b9..21e95ef1 100644 --- a/api/BusinessLogic/Tickets/EditTicketModel.php +++ b/api/BusinessLogic/Tickets/EditTicketModel.php @@ -25,6 +25,6 @@ class EditTicketModel { /* @var $html bool */ public $html; - /* @var $customFields array */ + /* @var $customFields string[] */ public $customFields; } \ No newline at end of file diff --git a/api/BusinessLogic/Tickets/TicketEditor.php b/api/BusinessLogic/Tickets/TicketEditor.php index a5e87afb..6ad52ccd 100644 --- a/api/BusinessLogic/Tickets/TicketEditor.php +++ b/api/BusinessLogic/Tickets/TicketEditor.php @@ -47,6 +47,14 @@ class TicketEditor { } $this->validate($editTicketModel, $ticket->categoryId, $heskSettings); + + $ticket->name = $editTicketModel->name; + $ticket->email = $editTicketModel->email; + $ticket->subject = $editTicketModel->subject; + $ticket->message = $editTicketModel->message; + $ticket->customFields = $editTicketModel->customFields; + + $this->ticketGateway->updateBasicTicketInfo($ticket, $heskSettings); } /** diff --git a/api/Controllers/Tickets/StaffTicketController.php b/api/Controllers/Tickets/StaffTicketController.php index 27283b54..901fc617 100644 --- a/api/Controllers/Tickets/StaffTicketController.php +++ b/api/Controllers/Tickets/StaffTicketController.php @@ -3,7 +3,11 @@ namespace Controllers\Tickets; +use BusinessLogic\Helpers; +use BusinessLogic\Tickets\EditTicketModel; use BusinessLogic\Tickets\TicketDeleter; +use BusinessLogic\Tickets\TicketEditor; +use Controllers\JsonRetriever; class StaffTicketController { function delete($id) { @@ -14,4 +18,39 @@ class StaffTicketController { $ticketDeleter->deleteTicket($id, $userContext, $hesk_settings); } + + function put($id) { + global $applicationContext, $userContext, $hesk_settings; + + /* @var $ticketEditor TicketEditor */ + $ticketEditor = $applicationContext->get[TicketEditor::class]; + + $jsonRequest = JsonRetriever::getJsonData(); + + $ticketEditor->editTicket($this->getEditTicketModel($id, $jsonRequest), $userContext, $hesk_settings); + + http_response_code(204); + return; + } + + private function getEditTicketModel($id, $jsonRequest) { + $editTicketModel = new EditTicketModel(); + $editTicketModel->id = $id; + $editTicketModel->language = Helpers::safeArrayGet($jsonRequest, 'language'); + $editTicketModel->name = Helpers::safeArrayGet($jsonRequest, 'name'); + $editTicketModel->subject = Helpers::safeArrayGet($jsonRequest, 'subject'); + $editTicketModel->message = Helpers::safeArrayGet($jsonRequest, 'message'); + $editTicketModel->html = Helpers::safeArrayGet($jsonRequest, 'html'); + $editTicketModel->email = Helpers::safeArrayGet($jsonRequest, 'email'); + + $jsonCustomFields = Helpers::safeArrayGet($jsonRequest, 'customFields'); + + if ($jsonCustomFields !== null && !empty($jsonCustomFields)) { + foreach ($jsonCustomFields as $key => $value) { + $editTicketModel->customFields[intval($key)] = $value; + } + } + + return $editTicketModel; + } } \ No newline at end of file diff --git a/api/DataAccess/Tickets/TicketGateway.php b/api/DataAccess/Tickets/TicketGateway.php index 6556cb5a..34f66e11 100644 --- a/api/DataAccess/Tickets/TicketGateway.php +++ b/api/DataAccess/Tickets/TicketGateway.php @@ -329,12 +329,12 @@ class TicketGateway extends CommonDao { } hesk_dbQuery("UPDATE `" . hesk_dbEscape($heskSettings['db_pfix']) . "tickets` - SET `subject` = {$subject}, - `message` = {$message}, - `language` = {$language}, - `name` = {$name}, - `email` = {$email}, - `html` = " . ($ticket->usesHtml ? 1 : 0) . " + SET `subject` = '{$subject}', + `message` = '{$message}', + `language` = '{$language}', + `name` = '{$name}', + `email` = '{$email}', + `html` = " . ($ticket->usesHtml ? 1 : 0) . ", {$customSql} WHERE `id` = " . intval($ticket->id));