From bd5b3e1322ff03f6cd097f90d64ff3e078c32dc9 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Mon, 1 Jan 2018 21:39:01 -0500 Subject: [PATCH] Working on moving the update ticket due date endpoint --- api/BusinessLogic/Tickets/AuditTrailEvent.php | 9 +++ api/BusinessLogic/Tickets/TicketEditor.php | 59 +++++++++++++++++-- api/DataAccess/Tickets/TicketGateway.php | 14 +++++ 3 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 api/BusinessLogic/Tickets/AuditTrailEvent.php diff --git a/api/BusinessLogic/Tickets/AuditTrailEvent.php b/api/BusinessLogic/Tickets/AuditTrailEvent.php new file mode 100644 index 00000000..d3063e73 --- /dev/null +++ b/api/BusinessLogic/Tickets/AuditTrailEvent.php @@ -0,0 +1,9 @@ +ticketGateway = $ticketGateway; $this->userToTicketChecker = $userToTicketChecker; + $this->auditTrailGateway = $auditTrailGateway; } @@ -141,19 +148,61 @@ class TicketEditor extends \BaseClass { * @param $dueDate string * @param $userContext UserContext * @param $heskSettings array - * @throws ApiFriendlyException If ticket does not exist or if the user cannot edit the ticket + * @return Ticket The updated ticket */ function updateDueDate($id, $dueDate, $userContext, $heskSettings) { $ticket = $this->ticketGateway->getTicketById($id, $heskSettings); + $this->validateDueDate($ticket, $dueDate, $userContext, $heskSettings); + + $this->ticketGateway->updateTicketDueDate($ticket->id, $dueDate, $heskSettings); + + $event = AuditTrailEvent::DUE_DATE_REMOVED; + $replacementValues = array(0 => $userContext->name . ' (' . $userContext->username . ')'); + if ($dueDate !== null) { + $event = AuditTrailEvent::DUE_DATE_CHANGED; + $replacementValues = array( + 0 => $userContext->name . ' (' . $userContext->username . ')', + 1 => date('Y-m-d H:i:s', strtotime($dueDate)) + ); + } + + $this->auditTrailGateway->insertAuditTrailRecord($ticket->id, + AuditTrailEntityType::TICKET, + $event, + DateTimeHelpers::heskDate($heskSettings), + $replacementValues, + $heskSettings); + + $ticket->dueDate = $dueDate; + + return $ticket; + } + + /** + * @param $ticket Ticket + * @param $dueDate string + * @param $userContext UserContext + * @param $heskSettings array + * @throws ValidationException When validation fails + */ + private function validateDueDate($ticket, $dueDate, $userContext, $heskSettings) { + $validationModel = new ValidationModel(); + if ($ticket === null) { - throw new ApiFriendlyException("Please enter a valid ticket ID.", "Ticket Not Found!", 400); + $validationModel->errorKeys[] = 'TICKET_MUST_EXIST_FOR_ID'; } if (!$this->userToTicketChecker->isTicketAccessibleToUser($userContext, $ticket, $heskSettings, array(UserPrivilege::CAN_EDIT_TICKETS))) { - throw new ApiFriendlyException("User " . $userContext->id . " does not have permission to edit ticket " . $id, "Access Denied", 403); + $validationModel->errorKeys[] = 'TICKET_MUST_BE_ACCESSIBLE_TO_USER'; } - // TODO Do it + if ($dueDate === false) { + $validationModel->errorKeys[] = 'DUE_DATE_MUST_BE_IN_VALID_FORMAT'; + } + + if (count($validationModel->errorKeys) > 0) { + throw new ValidationException($validationModel); + } } } \ No newline at end of file diff --git a/api/DataAccess/Tickets/TicketGateway.php b/api/DataAccess/Tickets/TicketGateway.php index 4c72a9f2..2ea5a84d 100644 --- a/api/DataAccess/Tickets/TicketGateway.php +++ b/api/DataAccess/Tickets/TicketGateway.php @@ -440,4 +440,18 @@ class TicketGateway extends CommonDao { $this->close(); } + + function updateTicketDueDate($id, $dueDate, $heskSettings) { + $this->init(); + + $sqlDueDate = 'NULL'; + if ($dueDate != NULL) { + $sqlDueDate = "'" . date('Y-m-d H:i:s', strtotime($dueDate)) . "'"; + } + + hesk_dbQuery("UPDATE `" . hesk_dbEscape($heskSettings['db_pfix']) . "tickets` SET `due_date` = {$sqlDueDate} + WHERE `id` = " . intval($id)); + + $this->close(); + } } \ No newline at end of file