diff --git a/api/BusinessLogic/DateTimeHelpers.php b/api/BusinessLogic/DateTimeHelpers.php new file mode 100644 index 00000000..6cea5cb2 --- /dev/null +++ b/api/BusinessLogic/DateTimeHelpers.php @@ -0,0 +1,19 @@ +email), $msg); + $msg = str_replace('%%EMAIL%%', implode(';', $ticket->email), $msg); $msg = str_replace('%%CREATED%%', $ticket->dateCreated, $msg); $msg = str_replace('%%UPDATED%%', $ticket->lastChanged, $msg); $msg = str_replace('%%ID%%', $ticket->id, $msg); diff --git a/api/BusinessLogic/Tickets/Ticket.php b/api/BusinessLogic/Tickets/Ticket.php index 415620f8..5e0c44ff 100644 --- a/api/BusinessLogic/Tickets/Ticket.php +++ b/api/BusinessLogic/Tickets/Ticket.php @@ -164,7 +164,7 @@ class Ticket extends \BaseClass { public $name; /** - * @var array|null + * @var string[]|null */ public $email; diff --git a/api/BusinessLogic/Tickets/TicketCreator.php b/api/BusinessLogic/Tickets/TicketCreator.php index 5956de9b..ee1affcf 100644 --- a/api/BusinessLogic/Tickets/TicketCreator.php +++ b/api/BusinessLogic/Tickets/TicketCreator.php @@ -2,11 +2,13 @@ namespace BusinessLogic\Tickets; +use BusinessLogic\DateTimeHelpers; use BusinessLogic\Emails\Addressees; use BusinessLogic\Emails\EmailSenderHelper; use BusinessLogic\Emails\EmailTemplateRetriever; use BusinessLogic\Exceptions\ValidationException; use BusinessLogic\Statuses\DefaultStatusForAction; +use DataAccess\AuditTrail\AuditTrailGateway; use DataAccess\Security\UserGateway; use DataAccess\Settings\ModsForHeskSettingsGateway; use DataAccess\Statuses\StatusGateway; @@ -56,6 +58,9 @@ class TicketCreator extends \BaseClass { /* @var $modsForHeskSettingsGateway ModsForHeskSettingsGateway */ private $modsForHeskSettingsGateway; + /* @var $auditTrailGateway AuditTrailGateway */ + private $auditTrailGateway; + function __construct(NewTicketValidator $newTicketValidator, TrackingIdGenerator $trackingIdGenerator, Autoassigner $autoassigner, @@ -64,7 +69,8 @@ class TicketCreator extends \BaseClass { VerifiedEmailChecker $verifiedEmailChecker, EmailSenderHelper $emailSenderHelper, UserGateway $userGateway, - ModsForHeskSettingsGateway $modsForHeskSettingsGateway) { + ModsForHeskSettingsGateway $modsForHeskSettingsGateway, + AuditTrailGateway $auditTrailGateway) { $this->newTicketValidator = $newTicketValidator; $this->trackingIdGenerator = $trackingIdGenerator; $this->autoassigner = $autoassigner; @@ -74,6 +80,7 @@ class TicketCreator extends \BaseClass { $this->emailSenderHelper = $emailSenderHelper; $this->userGateway = $userGateway; $this->modsForHeskSettingsGateway = $modsForHeskSettingsGateway; + $this->auditTrailGateway = $auditTrailGateway; } /** @@ -113,7 +120,7 @@ class TicketCreator extends \BaseClass { // Transform one-to-one properties $ticket->name = $ticketRequest->name; - $ticket->email = $ticketRequest->email; + $ticket->email = $this->getAddressees($ticketRequest->email); $ticket->priorityId = $ticketRequest->priority; $ticket->categoryId = $ticketRequest->category; $ticket->subject = $ticketRequest->subject; @@ -147,6 +154,9 @@ class TicketCreator extends \BaseClass { $ticket->timeWorked = '00:00:00'; $ticket->lastReplier = 0; + $this->auditTrailGateway->insertAuditTrailRecord($ticket->id, AuditTrailEntityType::TICKET, + 'audit_created', DateTimeHelpers::heskDate($heskSettings), array(), $heskSettings); + $addressees = new Addressees(); $addressees->to = $this->getAddressees($ticket->email); diff --git a/api/DataAccess/AuditTrail/AuditTrailGateway.php b/api/DataAccess/AuditTrail/AuditTrailGateway.php new file mode 100644 index 00000000..0c174706 --- /dev/null +++ b/api/DataAccess/AuditTrail/AuditTrailGateway.php @@ -0,0 +1,28 @@ +init(); + + hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . "audit_trail` (`entity_id`, `entity_type`, + `language_key`, `date`) VALUES (" . intval($entityId) . ", '" . hesk_dbEscape($entityType) . "', + '" . hesk_dbEscape($languageKey) . "', '" . hesk_dbEscape($date) . "')"); + + $auditId = hesk_dbInsertID(); + + foreach ($replacementValues as $replacementIndex => $replacementValue) { + hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . "audit_trail_to_replacement_values` + (`audit_trail_id`, `replacement_index`, `replacement_value`) VALUES (" . intval($auditId) . ", + " . intval($replacementIndex) . ", '" . hesk_dbEscape($replacementValue) . "')"); + } + + $this->close(); + + return $auditId; + } +} \ No newline at end of file diff --git a/api/DataAccess/Tickets/TicketGateway.php b/api/DataAccess/Tickets/TicketGateway.php index 72f471a3..5d8437bb 100644 --- a/api/DataAccess/Tickets/TicketGateway.php +++ b/api/DataAccess/Tickets/TicketGateway.php @@ -207,6 +207,8 @@ class TicketGateway extends CommonDao { $ipAddress = $ticket->ipAddress !== null && $ticket->ipAddress !== '' ? $ticket->ipAddress : ''; + $emailAddresses = implode(';', $ticket->email); + $tableName = $isEmailVerified ? 'tickets' : 'stage_tickets'; $sql = "INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . $tableName ."` @@ -242,7 +244,7 @@ class TicketGateway extends CommonDao { ( '" . hesk_dbEscape($ticket->trackingId) . "', '" . hesk_dbEscape($ticket->name) . "', - '" . hesk_dbEscape($ticket->email) . "', + '" . hesk_dbEscape($emailAddresses) . "', '" . intval($ticket->categoryId) . "', '" . intval($ticket->priorityId) . "', '" . hesk_dbEscape($ticket->subject) . "',