From 25929d82f429154df7fd8089203d8c68b874feb0 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 12 Mar 2017 01:06:50 -0500 Subject: [PATCH] Fixed some email issues --- .../Emails/EmailTemplateParser.php | 6 ++- api/BusinessLogic/Tickets/Autoassigner.php | 2 +- api/BusinessLogic/Tickets/TicketCreator.php | 30 ++++++++++-- api/DataAccess/Security/UserGateway.php | 46 +++++++++---------- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/api/BusinessLogic/Emails/EmailTemplateParser.php b/api/BusinessLogic/Emails/EmailTemplateParser.php index 8a1601ab..1bcd84a6 100644 --- a/api/BusinessLogic/Emails/EmailTemplateParser.php +++ b/api/BusinessLogic/Emails/EmailTemplateParser.php @@ -51,6 +51,8 @@ class EmailTemplateParser { * @throws InvalidEmailTemplateException */ function getFormattedEmailForLanguage($templateId, $languageCode, $ticket, $heskSettings, $modsForHeskSettings) { + global $hesklang; + $emailTemplate = $this->emailTemplateRetriever->getTemplate($templateId); if ($emailTemplate === null) { @@ -59,7 +61,7 @@ class EmailTemplateParser { $template = self::getFromFileSystem($emailTemplate->fileName, $languageCode, false); $htmlTemplate = self::getFromFileSystem($emailTemplate->fileName, $languageCode, true); - $subject = $emailTemplate->languageKey; + $subject = $hesklang[$emailTemplate->languageKey]; $subject = $this->parseSubject($subject, $ticket, $languageCode, $heskSettings); $message = $this->parseMessage($template, $ticket, $languageCode, $emailTemplate->forStaff, $heskSettings, $modsForHeskSettings, false); @@ -175,7 +177,7 @@ class EmailTemplateParser { $defaultStatus = $this->statusGateway->getStatusForDefaultAction(DefaultStatusForAction::NEW_TICKET, $heskSettings); $statusName = hesk_msgToPlain($defaultStatus->localizedNames[$language]->text); $category = hesk_msgToPlain($this->categoryGateway->getAllCategories($heskSettings)[$ticket->categoryId]->name); - $owner = hesk_msgToPlain($this->userGateway->getNameForId($ticket->ownerId, $heskSettings)); + $owner = hesk_msgToPlain($this->userGateway->getUserById($ticket->ownerId, $heskSettings)->name); switch ($ticket->priorityId) { case Priority::CRITICAL: diff --git a/api/BusinessLogic/Tickets/Autoassigner.php b/api/BusinessLogic/Tickets/Autoassigner.php index 4ff6fabd..e7d24207 100644 --- a/api/BusinessLogic/Tickets/Autoassigner.php +++ b/api/BusinessLogic/Tickets/Autoassigner.php @@ -29,7 +29,7 @@ class Autoassigner { return null; } - $potentialUsers = $this->userGateway->getUsersByNumberOfOpenTickets($heskSettings); + $potentialUsers = $this->userGateway->getUsersByNumberOfOpenTicketsForAutoassign($heskSettings); foreach ($potentialUsers as $potentialUser) { if ($potentialUser->admin || diff --git a/api/BusinessLogic/Tickets/TicketCreator.php b/api/BusinessLogic/Tickets/TicketCreator.php index 822ee513..7e160936 100644 --- a/api/BusinessLogic/Tickets/TicketCreator.php +++ b/api/BusinessLogic/Tickets/TicketCreator.php @@ -149,13 +149,22 @@ class TicketCreator { } if ($ticket->ownerId !== null) { - $ownerEmail = $this->userGateway->getEmailForId($ticket->ownerId, $heskSettings); + $owner = $this->userGateway->getUserById($ticket->ownerId, $heskSettings); - $addressees = new Addressees(); - $addressees->to = array($ownerEmail); - $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::TICKET_ASSIGNED_TO_YOU, $ticketRequest->language, $addressees, $ticket, $heskSettings, $modsForHeskSettings); + if ($owner->notificationSettings->newAssignedToMe) { + $addressees = new Addressees(); + $addressees->to = array($owner->email); + $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::TICKET_ASSIGNED_TO_YOU, $ticketRequest->language, $addressees, $ticket, $heskSettings, $modsForHeskSettings); + } } else { - // TODO email all users who should be notified + // TODO Test + $usersToBeNotified = $this->userGateway->getUsersForNewTicketNotification($heskSettings); + + foreach ($usersToBeNotified as $user) { + if ($user->admin || in_array($ticket->categoryId, $user->categories)) { + $this->sendEmailToStaff($user, $ticket, $heskSettings, $modsForHeskSettings); + } + } } return $ticket; @@ -170,4 +179,15 @@ class TicketCreator { return explode(',', $emails); } + + private function sendEmailToStaff($user, $ticket, $heskSettings, $modsForHeskSettings) { + $addressees = new Addressees(); + $addressees->to = array($user->email); + $language = $user->language !== null && trim($user->language) !== '' + ? $user->language + : $heskSettings['language']; + + $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_TICKET_STAFF, $language, + $addressees, $ticket, $heskSettings, $modsForHeskSettings); + } } \ No newline at end of file diff --git a/api/DataAccess/Security/UserGateway.php b/api/DataAccess/Security/UserGateway.php index d9a24f54..7f15a870 100644 --- a/api/DataAccess/Security/UserGateway.php +++ b/api/DataAccess/Security/UserGateway.php @@ -32,46 +32,27 @@ class UserGateway extends CommonDao { return $row; } - - // TODO Replace this with a basic User retrieval - function getNameForId($id, $heskSettings) { - $this->init(); - - $rs = hesk_dbQuery("SELECT `name` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "users` WHERE `id` = " . intval($id)); - - if (hesk_dbNumRows($rs) === 0) { - return null; - } - - $row = hesk_dbFetchAssoc($rs); - - return $row['name']; - } - // TODO Replace this with a basic User retriever - function getEmailForId($id, $heskSettings) { + function getUserById($id, $heskSettings) { $this->init(); - $rs = hesk_dbQuery("SELECT `email` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "users` WHERE `id` = " . intval($id)); + $rs = hesk_dbQuery("SELECT * FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "users` WHERE `id` = " . intval($id)); if (hesk_dbNumRows($rs) === 0) { return null; } - $row = hesk_dbFetchAssoc($rs); - - return $row['email']; + return UserContext::fromDataRow(hesk_dbFetchAssoc($rs)); } /** * @param $heskSettings array * @return UserContext[] */ - function getUsersByNumberOfOpenTickets($heskSettings) { + function getUsersByNumberOfOpenTicketsForAutoassign($heskSettings) { $this->init(); - $rs = hesk_dbQuery("SELECT `t1`.`id`,`t1`.`user`,`t1`.`name`, `t1`.`email`, `t1`.`language`, `t1`.`isadmin`, - `t1`.`categories`, `t1`.`notify_assigned`, `t1`.`heskprivileges`, + $rs = hesk_dbQuery("SELECT `t1`.*, (SELECT COUNT(*) FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "tickets` WHERE `owner`=`t1`.`id` AND `status` IN ( @@ -93,4 +74,21 @@ class UserGateway extends CommonDao { return $users; } + + /** + * @param $heskSettings array + * @return UserContext[] + */ + function getUsersForNewTicketNotification($heskSettings) { + $this->init(); + + $rs = hesk_dbQuery("SELECT * FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "users` WHERE `notify_new_unassigned` = '1' AND `active` = '1'"); + + $users = array(); + while ($row = hesk_dbFetchAssoc($rs)) { + $users[] = UserContext::fromDataRow($row); + } + + return $users; + } } \ No newline at end of file