Can now get ticket by ID

remotes/upstream/api-rewrite
Mike Koch 7 years ago
parent 54cb77b136
commit 215bcca079

@ -188,7 +188,6 @@ class AttachmentHandler {
if (count($errorKeys) > 0) { if (count($errorKeys) > 0) {
$validationModel = new ValidationModel(); $validationModel = new ValidationModel();
$validationModel->errorKeys = $errorKeys; $validationModel->errorKeys = $errorKeys;
$validationModel->valid = false;
throw new ValidationException($validationModel); throw new ValidationException($validationModel);
} }
} }

@ -12,7 +12,7 @@ class ValidationException extends ApiFriendlyException {
* @throws Exception If the validationModel's errorKeys is empty * @throws Exception If the validationModel's errorKeys is empty
*/ */
function __construct($validationModel) { function __construct($validationModel) {
if (count($validationModel->errorKeys) === 0 || $validationModel->valid) { if (count($validationModel->errorKeys) === 0) {
throw new Exception('Tried to throw a ValidationException, but the validation model was valid or had 0 error keys!'); throw new Exception('Tried to throw a ValidationException, but the validation model was valid or had 0 error keys!');
} }

@ -11,7 +11,8 @@ class Ticket {
$ticket->name = $row['name']; $ticket->name = $row['name'];
if ($row['email'] !== null) { if ($row['email'] !== null) {
$emails = str_replace(';', ',', $row['email']); $emails = str_replace(';', ',', $row['email']);
$ticket->email = explode(',', strtolower($emails)); $emails = explode(',', strtolower($emails));
$ticket->email = array_filter($emails);
} }
$ticket->categoryId = intval($row['category']); $ticket->categoryId = intval($row['category']);
$ticket->priorityId = intval($row['priority']); $ticket->priorityId = intval($row['priority']);

@ -86,7 +86,6 @@ class TicketCreator {
if (count($validationModel->errorKeys) > 0) { if (count($validationModel->errorKeys) > 0) {
// Validation failed // Validation failed
$validationModel->valid = false;
throw new ValidationException($validationModel); throw new ValidationException($validationModel);
} }

@ -3,6 +3,7 @@
namespace BusinessLogic\Tickets; namespace BusinessLogic\Tickets;
use BusinessLogic\Exceptions\ApiFriendlyException;
use BusinessLogic\Exceptions\ValidationException; use BusinessLogic\Exceptions\ValidationException;
use BusinessLogic\ValidationModel; use BusinessLogic\ValidationModel;
use DataAccess\Tickets\TicketGateway; use DataAccess\Tickets\TicketGateway;
@ -25,9 +26,17 @@ class TicketRetriever {
$this->validate($trackingId, $emailAddress, $heskSettings); $this->validate($trackingId, $emailAddress, $heskSettings);
$ticket = $this->ticketGateway->getTicketByTrackingId($trackingId, $heskSettings); $ticket = $this->ticketGateway->getTicketByTrackingId($trackingId, $heskSettings);
if ($ticket === null) {
$ticket = $this->ticketGateway->getTicketByMergedTrackingId($trackingId, $heskSettings);
if ($ticket === null) {
return null;
}
}
if ($heskSettings['email_view_ticket'] && !in_array($emailAddress, $ticket->email)) { if ($heskSettings['email_view_ticket'] && !in_array($emailAddress, $ticket->email)) {
throw new \Exception("Email '{$emailAddress}' entered in for ticket '{$trackingId}' does not match!"); throw new ApiFriendlyException("Email '{$emailAddress}' entered in for ticket '{$trackingId}' does not match!",
"Email Does Not Match", 400);
} }
return $ticket; return $ticket;

@ -8,13 +8,7 @@ class ValidationModel {
*/ */
public $errorKeys; public $errorKeys;
/**
* @var bool
*/
public $valid;
function __construct() { function __construct() {
$this->errorKeys = []; $this->errorKeys = [];
$this->valid = true;
} }
} }

@ -6,18 +6,22 @@ use BusinessLogic\Helpers;
use BusinessLogic\Tickets\CreateTicketByCustomerModel; use BusinessLogic\Tickets\CreateTicketByCustomerModel;
use BusinessLogic\Tickets\TicketCreator; use BusinessLogic\Tickets\TicketCreator;
use BusinessLogic\Tickets\TicketRetriever; use BusinessLogic\Tickets\TicketRetriever;
use BusinessLogic\ValidationModel;
use Controllers\JsonRetriever; use Controllers\JsonRetriever;
class CustomerTicketController { class CustomerTicketController {
/*function get($id) { function get() {
global $applicationContext, $hesk_settings, $userContext; global $applicationContext, $hesk_settings;
$trackingId = isset($_GET['trackingId']) ? $_GET['trackingId'] : null;
$emailAddress = isset($_GET['email']) ? $_GET['email'] : null;
/* @var $ticketRetriever TicketRetriever */ /* @var $ticketRetriever TicketRetriever */
/*$ticketRetriever = $applicationContext->get[TicketRetriever::class]; $ticketRetriever = $applicationContext->get[TicketRetriever::class];
output($ticketRetriever->getTicketById($id, $hesk_settings, $userContext)); output($ticketRetriever->getTicketByTrackingIdAndEmail($trackingId, $emailAddress, $hesk_settings));
}*/ }
function post() { function post() {
global $applicationContext, $hesk_settings, $userContext; global $applicationContext, $hesk_settings, $userContext;
@ -29,17 +33,9 @@ class CustomerTicketController {
$ticket = $ticketCreator->createTicketByCustomer($this->buildTicketRequestFromJson($jsonRequest), $hesk_settings, $userContext); $ticket = $ticketCreator->createTicketByCustomer($this->buildTicketRequestFromJson($jsonRequest), $hesk_settings, $userContext);
//if ticket is a stageTicket, email user
//else if assigned to owner, email new owner
//else email all staff
return output($ticket, 201); return output($ticket, 201);
} }
function delete($id) {
global $applicationContext, $hesk_settings, $userContext;
}
/** /**
* @param $json array * @param $json array
* @return CreateTicketByCustomerModel * @return CreateTicketByCustomerModel

@ -90,6 +90,26 @@ class TicketGateway extends CommonDao {
return $ticket; return $ticket;
} }
/**
* @param $trackingId string
* @param $heskSettings array
* @return Ticket|null
*/
function getTicketByMergedTrackingId($trackingId, $heskSettings) {
$this->init();
$rs = hesk_dbQuery("SELECT `trackid` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "tickets` WHERE `merged` LIKE '%#" . hesk_dbEscape($trackingId) . "#%'");
if (hesk_dbNumRows($rs) === 0) {
return null;
}
$row = hesk_dbFetchAssoc($rs);
$actualTrackingId = $row['trackid'];
$this->close();
return $this->getTicketByTrackingId($actualTrackingId, $heskSettings);
}
/** /**
* @param $ticket Ticket * @param $ticket Ticket
* @param $isEmailVerified * @param $isEmailVerified

@ -147,6 +147,7 @@ class NewTicketValidatorTest extends TestCase {
function testItSupportsMultipleEmails() { function testItSupportsMultipleEmails() {
//-- Arrange //-- Arrange
$this->ticketRequest->email = 'something@email.com;another@valid.email'; $this->ticketRequest->email = 'something@email.com;another@valid.email';
$this->ticketRequest->language = 'English';
$this->heskSettings['multi_eml'] = true; $this->heskSettings['multi_eml'] = true;
//-- Act //-- Act
@ -155,7 +156,7 @@ class NewTicketValidatorTest extends TestCase {
$this->userContext); $this->userContext);
//-- Assert //-- Assert
$this->assertThat($validationModel->valid, $this->isTrue()); self::assertThat(count($validationModel->errorKeys), self::equalTo(0));
} }
function testItAddsTheProperValidationErrorWhenCategoryIsNotANumber() { function testItAddsTheProperValidationErrorWhenCategoryIsNotANumber() {

@ -36,6 +36,20 @@ class TicketRetrieverTest extends TestCase {
self::assertThat($actual, self::equalTo($ticket)); self::assertThat($actual, self::equalTo($ticket));
} }
function testItGetsTheParentTicketIfTheUserEntersInAMergedTicketId() {
//-- Arrange
$ticket = new Ticket();
$trackingId = '12345';
$this->ticketGateway->method('getTicketByTrackingId')->willReturn(null);
$this->ticketGateway->method('getTicketByMergedTrackingId')->with($trackingId, $this->heskSettings)->willReturn($ticket);
//-- Act
$actual = $this->ticketRetriever->getTicketByTrackingIdAndEmail($trackingId, null, $this->heskSettings);
//-- Assert
self::assertThat($actual, self::equalTo($ticket));
}
function testItChecksTheTicketsEmailIfThePageRequiresIt() { function testItChecksTheTicketsEmailIfThePageRequiresIt() {
//-- Arrange //-- Arrange
$ticket = new Ticket(); $ticket = new Ticket();

Loading…
Cancel
Save