mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2025-01-12 06:41:14 +01:00
Importing of tickets from email
Everything needed went into TicketImportHelper, with LegacyDB. Functions taken from TicketService, Gateway and AddressWrapper
This commit is contained in:
parent
6cbc0bd08e
commit
b2610079d6
@ -14,9 +14,12 @@ use Xentral\Components\MailClient\Client\MailClientInterface;
|
|||||||
use Xentral\Components\MailClient\Data\MailMessageInterface;
|
use Xentral\Components\MailClient\Data\MailMessageInterface;
|
||||||
use Xentral\Modules\SystemMailer\Data\EmailBackupAccount;
|
use Xentral\Modules\SystemMailer\Data\EmailBackupAccount;
|
||||||
use Xentral\Modules\Ticket\Importer\TicketFormatter;
|
use Xentral\Modules\Ticket\Importer\TicketFormatter;
|
||||||
|
use Xentral\Modules\Ticket\Exception\NumberGeneratorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility functions for tickets_google cronjob for improved testability
|
* Utility functions for tickets cronjob for improved testability
|
||||||
|
* This is used to create and update tickets from emailbackup, called by the tickets.php cronjob
|
||||||
|
* It uses the TicketService to process the tickets
|
||||||
*/
|
*/
|
||||||
class TicketImportHelper
|
class TicketImportHelper
|
||||||
{
|
{
|
||||||
@ -49,7 +52,7 @@ class TicketImportHelper
|
|||||||
/**
|
/**
|
||||||
* @param LegacyDataBase $db
|
* @param LegacyDataBase $db
|
||||||
* @param erpAPI $erpApi
|
* @param erpAPI $erpApi
|
||||||
* @param TicketModule $ticketModule
|
* @param TicketModule $ticketModule
|
||||||
* @param LegacyConfig $config
|
* @param LegacyConfig $config
|
||||||
* @param TicketFormatter $formatter
|
* @param TicketFormatter $formatter
|
||||||
* @param MailClientInterface $mailClient
|
* @param MailClientInterface $mailClient
|
||||||
@ -76,6 +79,256 @@ class TicketImportHelper
|
|||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Function from AddressWrapper...
|
||||||
|
Still using legacy db
|
||||||
|
*/
|
||||||
|
public function tryGetAddressIdByEmailAddress(string $emailAddress): ?int
|
||||||
|
{
|
||||||
|
$searchByEmail = 'SELECT a.id FROM `adresse` AS `a`
|
||||||
|
WHERE a.email LIKE \''.$emailAddress.'\' AND a.geloescht = 0
|
||||||
|
ORDER BY a.id DESC';
|
||||||
|
|
||||||
|
$id = $this->db->Select($searchByEmail);
|
||||||
|
if ($id !== null && $id > 0) {
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$searchByResponsePerson = 'SELECT ap.adresse FROM `ansprechpartner` AS `ap`
|
||||||
|
WHERE ap.email LIKE \''.$emailAddress.'\'
|
||||||
|
ORDER BY ap.id DESC';
|
||||||
|
$id = $this->db->Select($searchByResponsePerson);
|
||||||
|
if ($id !== null && $id > 0) {
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$searchByContactInfo = 'SELECT ak.adresse FROM `adresse_kontakte` AS `ak`
|
||||||
|
WHERE ak.kontakt LIKE \''.$emailAddress.'\' ORDER BY ak.id DESC';
|
||||||
|
$id = $this->db->Select($searchByContactInfo);
|
||||||
|
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Some functions taken from TicketService (sorry...) */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function markTicketMessagesCompleted(string $ticketNumber): void
|
||||||
|
{
|
||||||
|
$this->setTicketMessagesStatus($ticketNumber, 'abgeschlossen'); // TicketGateway::STATUS_COMPLETED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
* @param string $status
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function setTicketMessagesStatus(string $ticketNumber, string $status): void
|
||||||
|
{
|
||||||
|
$sql = "UPDATE `ticket_nachricht` SET `status` = '".$status."' WHERE `ticket` = '".$ticketNumber."';";
|
||||||
|
$this->db->Update($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function resetTicketStatus(string $ticketNumber): void
|
||||||
|
{
|
||||||
|
$this->ensureTicketNumberExists($ticketNumber);
|
||||||
|
$sql = "UPDATE `ticket` SET
|
||||||
|
`status` = 'neu',
|
||||||
|
`zugewiesen` = '0',
|
||||||
|
`inbearbeitung` = '0'
|
||||||
|
WHERE `schluessel` = '".$ticket_number."'";
|
||||||
|
$this->db->Update($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function updateTicketMessagesCount(string $ticketNumber): void
|
||||||
|
{
|
||||||
|
$this->ensureTicketNumberExists($ticketNumber);
|
||||||
|
$count = $this->getMessageCountByTicketNumber($ticketNumber);
|
||||||
|
$count++;
|
||||||
|
$sql = "UPDATE `ticket` SET `nachrichten_anz` = '".$count."' WHERE schluessel = '".$tickerNumber."';";
|
||||||
|
$this->db->Update($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function ensureTicketNumberExists(string $ticketNumber): void
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!$this->db->Select('SELECT id FROM ticket WHERE schluessel = '.$ticketNumber)) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
sprintf('ticket number "%s" does not exist', $ticketNumber)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws NumberGeneratorException
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function generateRandomTicketNumber(): string
|
||||||
|
{
|
||||||
|
$random = rand(300,700);
|
||||||
|
$loopCounter = 0;
|
||||||
|
while(true) {
|
||||||
|
$candidate = sprintf('%s%04d', date('Ymd'), $random++);
|
||||||
|
|
||||||
|
/* if (!$this->gateway->existsTicketNumber($candidate)) {
|
||||||
|
return $candidate;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (!$this->db->Select('SELECT id FROM ticket WHERE schluessel = '.$candidate)) {
|
||||||
|
return($candidate);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($loopCounter > 99) {
|
||||||
|
throw new NumberGeneratorException('ticket number generation failed');
|
||||||
|
}
|
||||||
|
$loopCounter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function from Gateway */
|
||||||
|
/**
|
||||||
|
* @param string $ticketNumber
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMessageCountByTicketNumber(string $ticketNumber): int
|
||||||
|
{
|
||||||
|
$sql = "SELECT COUNT(tm.id) FROM `ticket_nachricht` AS `tm` WHERE tm.ticket = '".$ticketNumber."';";
|
||||||
|
$count = $this->db->Select($sql);
|
||||||
|
if ($count === null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) $count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function createTicket(
|
||||||
|
int $projectId,
|
||||||
|
string $senderName,
|
||||||
|
string $senderAddress,
|
||||||
|
string $subject,
|
||||||
|
int $timestamp,
|
||||||
|
string $replyToName,
|
||||||
|
string $replyToAddress
|
||||||
|
): int
|
||||||
|
{
|
||||||
|
$assigneeAddressId = $this->mailAccount->getAddressId();
|
||||||
|
if ($assigneeAddressId < 1) {
|
||||||
|
$assigneeAddressId = $this->tryGetAddressIdByEmailAddress(
|
||||||
|
$this->mailAccount->getEmailAddress()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$ticketNumber = $this->generateRandomTicketNumber();
|
||||||
|
|
||||||
|
if($projectId < 1) {
|
||||||
|
$projectId = $this->mailAccount->getProjectId();
|
||||||
|
}
|
||||||
|
if ($this->mailAccount->isTicketMarkAsFinishedEnabled()) {
|
||||||
|
$status = 'abgeschlossen'; //TicketGateway::STATUS_COMPLETED;
|
||||||
|
} else {
|
||||||
|
$status = 'neu'; //TicketGateway::STATUS_NEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
$insertTicket = "INSERT INTO `ticket` (
|
||||||
|
`schluessel`, `zeit`, `projekt`, `quelle`, `status`, `kunde`,
|
||||||
|
`mailadresse`, `prio`, `betreff`,`warteschlange`,`adresse`
|
||||||
|
) VALUES (
|
||||||
|
'".$ticketNumber."',
|
||||||
|
'".date('Y-m-d H:i:s', $timestamp)."',
|
||||||
|
'".$projectId."',
|
||||||
|
'".$this->mailAccount->getEmailAddress()."',
|
||||||
|
'".$status."',
|
||||||
|
'".$senderName."',
|
||||||
|
'".$senderAddress."',
|
||||||
|
'".'3'."',
|
||||||
|
'".$subject."',
|
||||||
|
'".$this->mailAccount->getTicketQueueId()."',
|
||||||
|
'".$assigneeAddressId."');";
|
||||||
|
|
||||||
|
$this->db->Insert($insertTicket);
|
||||||
|
$ticketId = $this->db->GetInsertID();
|
||||||
|
|
||||||
|
$this->logger->debug('inserted ticket',['id' => $ticketId,'ticketnr' => $ticketNumber]);
|
||||||
|
|
||||||
|
// todo als rueckgabe ticketnachricht
|
||||||
|
return (int) $ticketNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addTicketMessage(
|
||||||
|
string $ticketNumber,
|
||||||
|
int $timestamp,
|
||||||
|
string $message,
|
||||||
|
string $subject,
|
||||||
|
string $senderName,
|
||||||
|
string $senderAddress,
|
||||||
|
string $status,
|
||||||
|
string $replyToName,
|
||||||
|
string $replyToAddress
|
||||||
|
): int
|
||||||
|
{
|
||||||
|
// $this->db->beginTransaction();
|
||||||
|
try {
|
||||||
|
$this->markTicketMessagesCompleted($ticketNumber);
|
||||||
|
$sql = "INSERT INTO `ticket_nachricht` (
|
||||||
|
`ticket`, `zeit`, `text`, `betreff`, `medium`,
|
||||||
|
`verfasser`, `mail`,`status`, `verfasser_replyto`, `mail_replyto`
|
||||||
|
) VALUES (
|
||||||
|
'".$ticketNumber."',
|
||||||
|
'".date('Y-m-d H:i:s', $timestamp)."',
|
||||||
|
'".$message."',
|
||||||
|
'".$subject."',
|
||||||
|
'".'email'."',
|
||||||
|
'".$senderName."',
|
||||||
|
'".$senderAddress."',
|
||||||
|
'".$status."',
|
||||||
|
'".$replyToName."',
|
||||||
|
'".$replyToAddress."');";
|
||||||
|
|
||||||
|
$this->logger->debug('database insert',['query' => $sql]);
|
||||||
|
$this->db->Insert($sql);
|
||||||
|
$messageId = $this->db->GetInsertID();
|
||||||
|
|
||||||
|
$this->logger->debug('inserted',['id' => $messageId]);
|
||||||
|
|
||||||
|
$this->updateTicketMessagesCount($ticketNumber);
|
||||||
|
$this->resetTicketStatus($ticketNumber);
|
||||||
|
// $this->db->commit();
|
||||||
|
|
||||||
|
return (int) $messageId;
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
// $this->db->rollBack();
|
||||||
|
|
||||||
|
$this->logger->error('Failed to insert ticket message into db', ['exception' => $e]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End TicketService */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $inboxMessageIds
|
* @param array $inboxMessageIds
|
||||||
*
|
*
|
||||||
@ -125,6 +378,7 @@ class TicketImportHelper
|
|||||||
// extract email data
|
// extract email data
|
||||||
$subject = $this->formatter->encodeToUtf8($message->getSubject());
|
$subject = $this->formatter->encodeToUtf8($message->getSubject());
|
||||||
$from = $this->formatter->encodeToUtf8($message->getSender()->getEmail());
|
$from = $this->formatter->encodeToUtf8($message->getSender()->getEmail());
|
||||||
|
$fromname = $this->formatter->encodeToUtf8($message->getSender()->getName());
|
||||||
$ccs = $message->getCcRecipients();
|
$ccs = $message->getCcRecipients();
|
||||||
$cc_recv = [];
|
$cc_recv = [];
|
||||||
foreach ($ccs as $cc) {
|
foreach ($ccs as $cc) {
|
||||||
@ -146,9 +400,6 @@ class TicketImportHelper
|
|||||||
if (strlen($action_html) < strlen($action)) {
|
if (strlen($action_html) < strlen($action)) {
|
||||||
$action_html = nl2br($action);
|
$action_html = nl2br($action);
|
||||||
}
|
}
|
||||||
$name_sender = $this->formatter->encodeToUtf8($message->getSender()->getName());
|
|
||||||
$mail_replyto = $this->formatter->encodeToUtf8($message->getReplyToAddress());
|
|
||||||
$verfasser_replyto = $this->formatter->encodeToUtf8($message->getSender()->getName());
|
|
||||||
|
|
||||||
//check if email exists in database
|
//check if email exists in database
|
||||||
$date = $message->getDate();
|
$date = $message->getDate();
|
||||||
@ -161,7 +412,13 @@ class TicketImportHelper
|
|||||||
AND `empfang`='$empfang'
|
AND `empfang`='$empfang'
|
||||||
AND `webmail`='" . $this->mailAccount->getId() . "'";
|
AND `webmail`='" . $this->mailAccount->getId() . "'";
|
||||||
|
|
||||||
|
|
||||||
|
$this->logger->debug('Importing message '.$from.' '.$fromname);
|
||||||
|
|
||||||
if ($this->db->Select($sql) == 0) {
|
if ($this->db->Select($sql) == 0) {
|
||||||
|
|
||||||
|
$this->logger->debug('Importing message',['']);
|
||||||
|
|
||||||
$attachments = $message->getAttachments();
|
$attachments = $message->getAttachments();
|
||||||
$anhang = count($attachments) > 0 ? 1 : 0;
|
$anhang = count($attachments) > 0 ? 1 : 0;
|
||||||
$mailacc = $this->mailAccount->getEmailAddress();
|
$mailacc = $this->mailAccount->getEmailAddress();
|
||||||
@ -201,291 +458,330 @@ class TicketImportHelper
|
|||||||
$this->db->InsertWithoutLog($sql);
|
$this->db->InsertWithoutLog($sql);
|
||||||
$id = $this->db->GetInsertID();
|
$id = $this->db->GetInsertID();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($DEBUG) {
|
||||||
|
echo "ticket suchen oder anlegen\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$_schluessel = null;
|
||||||
|
$schluessel = null;
|
||||||
|
$ticketexists = null;
|
||||||
|
if (preg_match("/Ticket #[0-9]{12}/i", $subject, $matches)) {
|
||||||
|
$schluessel = str_replace('Ticket #', '', $matches[0]);
|
||||||
|
$ticketexists = $this->db->Select(
|
||||||
|
"SELECT schluessel
|
||||||
|
FROM ticket
|
||||||
|
WHERE schluessel LIKE '" . $schluessel . "'
|
||||||
|
AND schluessel!='' LIMIT 1"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$ticketnachricht = null;
|
||||||
|
|
||||||
|
if (!$ticketexists) {
|
||||||
|
|
||||||
|
$this->logger->debug('New ticket',['']);
|
||||||
|
|
||||||
|
$ticketNumber = $this->createTicket(
|
||||||
|
$this->projectId,
|
||||||
|
$fromname,
|
||||||
|
$from,
|
||||||
|
$subject,
|
||||||
|
$timestamp,
|
||||||
|
$fromname,
|
||||||
|
$from
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->logger->debug('Add message to ticket',['']);
|
||||||
|
|
||||||
|
// Add message to new or existing ticket
|
||||||
|
$ticketnachricht = $this->addTicketMessage(
|
||||||
|
(string) $ticketNumber,
|
||||||
|
$timestamp,
|
||||||
|
$action_html, //?
|
||||||
|
$subject,
|
||||||
|
$fromname,
|
||||||
|
$from,
|
||||||
|
'Neu', // ?
|
||||||
|
$fromname,
|
||||||
|
$from
|
||||||
|
);
|
||||||
|
|
||||||
|
/* OLD CODE
|
||||||
|
if ($ticketexists) {
|
||||||
if ($DEBUG) {
|
if ($DEBUG) {
|
||||||
echo "ticket suchen oder anlegen\n";
|
echo "ticket nummer in betreff gefunden\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$_schluessel = null;
|
$schluessel = str_replace('Ticket #', '', $matches[0]);
|
||||||
$schluessel = null;
|
|
||||||
$ticketexits = null;
|
|
||||||
if (preg_match("/Ticket #[0-9]{12}/i", $subject, $matches)) {
|
|
||||||
$schluessel = str_replace('Ticket #', '', $matches[0]);
|
|
||||||
$ticketexits = $this->db->Select(
|
|
||||||
"SELECT schluessel
|
|
||||||
FROM ticket
|
|
||||||
WHERE schluessel LIKE '" . $schluessel . "'
|
|
||||||
AND schluessel!='' LIMIT 1"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$ticketnachricht = null;
|
|
||||||
if ($ticketexits) {
|
|
||||||
if ($DEBUG) {
|
|
||||||
echo "ticket nummer in betreff gefunden\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$schluessel = str_replace('Ticket #', '', $matches[0]);
|
if ($action_html != '') {
|
||||||
|
$sql = "INSERT INTO `ticket_nachricht`
|
||||||
if ($action_html != '') {
|
(
|
||||||
$sql = "INSERT INTO `ticket_nachricht`
|
`id`,
|
||||||
(
|
`ticket`,
|
||||||
`id`,
|
`zeit`,
|
||||||
`ticket`,
|
`text`,
|
||||||
`zeit`,
|
`betreff`,
|
||||||
`text`,
|
`medium`,
|
||||||
`betreff`,
|
`verfasser`,
|
||||||
`medium`,
|
`mail`,
|
||||||
`verfasser`,
|
`status`,
|
||||||
`mail`,
|
`verfasser_replyto`,
|
||||||
`status`,
|
`mail_replyto`
|
||||||
`verfasser_replyto`,
|
) VALUES (
|
||||||
`mail_replyto`
|
NULL,
|
||||||
) VALUES (
|
'$schluessel',
|
||||||
NULL,
|
FROM_UNIXTIME($timestamp),
|
||||||
'$schluessel',
|
'" . $this->db->real_escape_string($action_html) . "',
|
||||||
FROM_UNIXTIME($timestamp),
|
'" . $this->db->real_escape_string($subject) . "',
|
||||||
'" . $this->db->real_escape_string($action_html) . "',
|
'email',
|
||||||
'" . $this->db->real_escape_string($subject) . "',
|
'" . $this->db->real_escape_string($name_sender) . "',
|
||||||
'email',
|
'" . $this->db->real_escape_string($from) . "',
|
||||||
'" . $this->db->real_escape_string($name_sender) . "',
|
'neu',
|
||||||
'" . $this->db->real_escape_string($from) . "',
|
'" . $this->db->real_escape_string($verfasser_replyto) . "',
|
||||||
'neu',
|
'" . $this->db->real_escape_string($mail_replyto) . "'
|
||||||
'" . $this->db->real_escape_string($verfasser_replyto) . "',
|
);";
|
||||||
'" . $this->db->real_escape_string($mail_replyto) . "'
|
|
||||||
);";
|
|
||||||
} else {
|
|
||||||
$sql = "INSERT INTO `ticket_nachricht`
|
|
||||||
(
|
|
||||||
`id`,
|
|
||||||
`ticket`,
|
|
||||||
`zeit`,
|
|
||||||
`text`,
|
|
||||||
`betreff`,
|
|
||||||
`medium`,
|
|
||||||
`verfasser`,
|
|
||||||
`mail`,
|
|
||||||
`status`,
|
|
||||||
`verfasser_replyto`,
|
|
||||||
`mail_replyto`
|
|
||||||
) VALUES (
|
|
||||||
NULL,
|
|
||||||
'$schluessel',
|
|
||||||
FROM_UNIXTIME($timestamp),
|
|
||||||
'" . $this->db->real_escape_string($action) . "',
|
|
||||||
'" . $this->db->real_escape_string($subject) . "',
|
|
||||||
'email',
|
|
||||||
'" . $this->db->real_escape_string($name_sender) . "',
|
|
||||||
'" . $this->db->real_escape_string($from) . "',
|
|
||||||
'neu',
|
|
||||||
'" . $this->db->real_escape_string($verfasser_replyto) . "',
|
|
||||||
'" . $this->db->real_escape_string($mail_replyto) . "'
|
|
||||||
);";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!$DEBUG) {
|
|
||||||
$this->db->InsertWithoutLog(
|
|
||||||
"UPDATE ticket_nachricht
|
|
||||||
SET status = 'abgeschlossen'
|
|
||||||
WHERE ticket LIKE '$schluessel'"
|
|
||||||
);
|
|
||||||
$this->db->InsertWithoutLog($sql);
|
|
||||||
$ticketnachricht = $this->db->GetInsertID();
|
|
||||||
$this->db->InsertWithoutLog(
|
|
||||||
"UPDATE ticket
|
|
||||||
SET status='neu', zugewiesen = 0, inbearbeitung=0
|
|
||||||
WHERE schluessel LIKE '$schluessel'"
|
|
||||||
);
|
|
||||||
$this->db->Update(
|
|
||||||
"UPDATE `ticket` AS `t`
|
|
||||||
INNER JOIN (
|
|
||||||
SELECT COUNT(`id`) AS `co`, `ticket`
|
|
||||||
FROM `ticket_nachricht`
|
|
||||||
GROUP BY `ticket`
|
|
||||||
) AS `tn` ON t.schluessel = tn.ticket
|
|
||||||
SET t.nachrichten_anz = tn.co
|
|
||||||
WHERE t.schluessel = '$schluessel'"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (!$DEBUG) {
|
$sql = "INSERT INTO `ticket_nachricht`
|
||||||
if ($action_html != '') {
|
(
|
||||||
$ticketnachricht = $this->ticketModule->CreateTicket(
|
`id`,
|
||||||
$this->projectId,
|
`ticket`,
|
||||||
$mailacc,
|
`zeit`,
|
||||||
$name_sender,
|
`text`,
|
||||||
$from,
|
`betreff`,
|
||||||
$subject,
|
`medium`,
|
||||||
$action_html,
|
`verfasser`,
|
||||||
$timestamp,
|
`mail`,
|
||||||
"email",
|
`status`,
|
||||||
null,
|
`verfasser_replyto`,
|
||||||
$verfasser_replyto,
|
`mail_replyto`
|
||||||
$mail_replyto
|
) VALUES (
|
||||||
); // ACHTUNG immer Projekt eprooshop
|
NULL,
|
||||||
} else {
|
'$schluessel',
|
||||||
$ticketnachricht = $this->ticketModule->CreateTicket(
|
FROM_UNIXTIME($timestamp),
|
||||||
$this->projectId,
|
'" . $this->db->real_escape_string($action) . "',
|
||||||
$mailacc,
|
'" . $this->db->real_escape_string($subject) . "',
|
||||||
$name_sender,
|
'email',
|
||||||
$from,
|
'" . $this->db->real_escape_string($name_sender) . "',
|
||||||
$subject,
|
'" . $this->db->real_escape_string($from) . "',
|
||||||
$action,
|
'neu',
|
||||||
$timestamp,
|
'" . $this->db->real_escape_string($verfasser_replyto) . "',
|
||||||
"email",
|
'" . $this->db->real_escape_string($mail_replyto) . "'
|
||||||
null,
|
);";
|
||||||
$verfasser_replyto,
|
|
||||||
$mail_replyto
|
|
||||||
); // ACHTUNG immer Projekt eprooshop
|
|
||||||
}
|
|
||||||
$schluessel = $this->db->Select(
|
|
||||||
"SELECT `ticket`
|
|
||||||
FROM `ticket_nachricht`
|
|
||||||
WHERE `id`='$ticketnachricht' LIMIT 1"
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
echo "Lege neues Ticket an\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ticketnachricht > 0 && $id > 0) {
|
|
||||||
$this->db->Update(
|
if (!$DEBUG) {
|
||||||
"UPDATE `emailbackup_mails`
|
$this->db->InsertWithoutLog(
|
||||||
SET ticketnachricht='$ticketnachricht'
|
"UPDATE ticket_nachricht
|
||||||
WHERE id='$id' LIMIT 1"
|
SET status = 'abgeschlossen'
|
||||||
|
WHERE ticket LIKE '$schluessel'"
|
||||||
);
|
);
|
||||||
if (is_array($cc_recv)) {
|
$this->db->InsertWithoutLog($sql);
|
||||||
foreach ($cc_recv as $mail) {
|
$ticketnachricht = $this->db->GetInsertID();
|
||||||
if ($mail['name'] != '') {
|
$this->db->InsertWithoutLog(
|
||||||
$cc_value =
|
"UPDATE ticket
|
||||||
$this->db->real_escape_string($mail['name'])
|
SET status='neu', zugewiesen = 0, inbearbeitung=0
|
||||||
. ' <'
|
WHERE schluessel LIKE '$schluessel'"
|
||||||
. $this->db->real_escape_string($mail['email'])
|
);
|
||||||
. ">";
|
$this->db->Update(
|
||||||
} else {
|
"UPDATE `ticket` AS `t`
|
||||||
$cc_value = $this->db->real_escape_string($mail['email']);
|
INNER JOIN (
|
||||||
}
|
SELECT COUNT(`id`) AS `co`, `ticket`
|
||||||
if ($cc_value != '') {
|
FROM `ticket_nachricht`
|
||||||
$sql = "INSERT INTO ticket_header
|
GROUP BY `ticket`
|
||||||
(`id`,`ticket_nachricht`,`type`,`value`)
|
) AS `tn` ON t.schluessel = tn.ticket
|
||||||
VALUES
|
SET t.nachrichten_anz = tn.co
|
||||||
('', '$ticketnachricht', 'cc', '" . $cc_value . "')";
|
WHERE t.schluessel = '$schluessel'"
|
||||||
$this->db->InsertWithoutLog($sql);
|
);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (!$DEBUG) {
|
||||||
|
if ($action_html != '') {
|
||||||
|
$ticketnachricht = $this->ticketModule->CreateTicket(
|
||||||
|
$this->projectId,
|
||||||
|
$mailacc,
|
||||||
|
$name_sender,
|
||||||
|
$from,
|
||||||
|
$subject,
|
||||||
|
$action_html,
|
||||||
|
$timestamp,
|
||||||
|
"email",
|
||||||
|
null,
|
||||||
|
$verfasser_replyto,
|
||||||
|
$mail_replyto
|
||||||
|
); // ACHTUNG immer Projekt eprooshop
|
||||||
|
} else {
|
||||||
|
$ticketnachricht = $this->ticketModule->CreateTicket(
|
||||||
|
$this->projectId,
|
||||||
|
$mailacc,
|
||||||
|
$name_sender,
|
||||||
|
$from,
|
||||||
|
$subject,
|
||||||
|
$action,
|
||||||
|
$timestamp,
|
||||||
|
"email",
|
||||||
|
null,
|
||||||
|
$verfasser_replyto,
|
||||||
|
$mail_replyto
|
||||||
|
); // ACHTUNG immer Projekt eprooshop
|
||||||
|
}
|
||||||
|
$schluessel = $this->db->Select(
|
||||||
|
"SELECT `ticket`
|
||||||
|
FROM `ticket_nachricht`
|
||||||
|
WHERE `id`='$ticketnachricht' LIMIT 1"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
echo "Lege neues Ticket an\n";
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
if ($ticketnachricht > 0 && $id > 0) {
|
||||||
|
$this->db->Update(
|
||||||
|
"UPDATE `emailbackup_mails`
|
||||||
|
SET ticketnachricht='$ticketnachricht'
|
||||||
|
WHERE id='$id' LIMIT 1"
|
||||||
|
);
|
||||||
|
if (is_array($cc_recv)) {
|
||||||
|
foreach ($cc_recv as $mail) {
|
||||||
|
if ($mail['name'] != '') {
|
||||||
|
$cc_value =
|
||||||
|
$this->db->real_escape_string($mail['name'])
|
||||||
|
. ' <'
|
||||||
|
. $this->db->real_escape_string($mail['email'])
|
||||||
|
. ">";
|
||||||
|
} else {
|
||||||
|
$cc_value = $this->db->real_escape_string($mail['email']);
|
||||||
}
|
}
|
||||||
$cc_recv = [];
|
if ($cc_value != '') {
|
||||||
|
$sql = "INSERT INTO ticket_header
|
||||||
|
(`id`,`ticket_nachricht`,`type`,`value`)
|
||||||
|
VALUES
|
||||||
|
('', '$ticketnachricht', 'cc', '" . $cc_value . "')";
|
||||||
|
$this->db->InsertWithoutLog($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$cc_recv = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prüfen ob Ordner vorhanden ansonsten anlegen
|
||||||
|
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
|
||||||
|
if (!is_dir($ordner) && $id > 0) {
|
||||||
|
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
||||||
|
}
|
||||||
|
$raw_full_email = $message->getRawContent();
|
||||||
|
file_put_contents($ordner . '/mail.txt', $raw_full_email);
|
||||||
|
}
|
||||||
|
|
||||||
|
//speichere anhang als datei
|
||||||
|
if ($anhang == 1 && $id > 0) {
|
||||||
|
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname;
|
||||||
|
if (!is_dir($ordner)) {
|
||||||
|
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
||||||
|
$this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prüfen ob Ordner vorhanden ansonsten anlegen
|
// Prüfen ob Ordner vorhanden ansonsten anlegen
|
||||||
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
|
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
|
||||||
if (!is_dir($ordner) && $id > 0) {
|
if (!is_dir($ordner)) {
|
||||||
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
if ($DEBUG) {
|
||||||
}
|
echo "mkdir $ordner\n";
|
||||||
$raw_full_email = $message->getRawContent();
|
} else {
|
||||||
file_put_contents($ordner . '/mail.txt', $raw_full_email);
|
|
||||||
}
|
|
||||||
|
|
||||||
//speichere anhang als datei
|
|
||||||
if ($anhang == 1 && $id > 0) {
|
|
||||||
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname;
|
|
||||||
if (!is_dir($ordner)) {
|
|
||||||
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
||||||
$this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
|
$this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Prüfen ob Ordner vorhanden ansonsten anlegen
|
}
|
||||||
$ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
|
|
||||||
if (!is_dir($ordner)) {
|
foreach ($attachments as $attachment) {
|
||||||
|
if ($attachment->getFileName() !== '') {
|
||||||
if ($DEBUG) {
|
if ($DEBUG) {
|
||||||
echo "mkdir $ordner\n";
|
|
||||||
} else {
|
} else {
|
||||||
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
|
$handle = fopen($ordner . '/' . $attachment->getFileName(), 'wb');
|
||||||
$this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
|
if ($handle) {
|
||||||
|
fwrite($handle, $attachment->getContent());
|
||||||
|
fclose($handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//Schreibe Anhänge in Datei-Tabelle
|
||||||
|
$datei = $ordner . '/' . $attachment->getFileName();
|
||||||
|
$dateiname = $attachment->getFileName();
|
||||||
|
if (stripos($dateiname, '=?utf-8') !== false) {
|
||||||
|
$dateiname = $this->formatter->encodeToUtf8($dateiname);
|
||||||
|
$dateiname = htmlspecialchars_decode($dateiname);
|
||||||
|
}
|
||||||
|
if (stripos($dateiname, '=?iso-8859') !== false) {
|
||||||
|
$dateiname = $this->formatter->encodeToUtf8($dateiname);
|
||||||
|
$dateiname = htmlspecialchars_decode($dateiname);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($attachments as $attachment) {
|
if ($DEBUG) {
|
||||||
if ($attachment->getFileName() !== '') {
|
echo "CreateDatei($dateiname,{$dateiname},\"\",\"\",\"datei\",\"Support Mail\",true,"
|
||||||
if ($DEBUG) {
|
. $this->config->WFuserdata . "/dms/" . $this->config->WFdbname . ")\n";
|
||||||
} else {
|
} else {
|
||||||
$handle = fopen($ordner . '/' . $attachment->getFileName(), 'wb');
|
$tmpid = $this->erpApi->CreateDatei(
|
||||||
if ($handle) {
|
$dateiname,
|
||||||
fwrite($handle, $attachment->getContent());
|
$dateiname,
|
||||||
fclose($handle);
|
'',
|
||||||
}
|
'',
|
||||||
}
|
$datei,
|
||||||
//Schreibe Anhänge in Datei-Tabelle
|
'Support Mail',
|
||||||
$datei = $ordner . '/' . $attachment->getFileName();
|
true,
|
||||||
$dateiname = $attachment->getFileName();
|
$this->config->WFuserdata . '/dms/' . $this->config->WFdbname
|
||||||
if (stripos($dateiname, '=?utf-8') !== false) {
|
);
|
||||||
$dateiname = $this->formatter->encodeToUtf8($dateiname);
|
}
|
||||||
$dateiname = htmlspecialchars_decode($dateiname);
|
|
||||||
}
|
|
||||||
if (stripos($dateiname, '=?iso-8859') !== false) {
|
|
||||||
$dateiname = $this->formatter->encodeToUtf8($dateiname);
|
|
||||||
$dateiname = htmlspecialchars_decode($dateiname);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($DEBUG) {
|
if ($DEBUG) {
|
||||||
echo "CreateDatei($dateiname,{$dateiname},\"\",\"\",\"datei\",\"Support Mail\",true,"
|
echo "AddDateiStichwort $tmpid,'Anhang','Ticket',$ticketnachricht,true)\n";
|
||||||
. $this->config->WFuserdata . "/dms/" . $this->config->WFdbname . ")\n";
|
} else {
|
||||||
} else {
|
$this->erpApi->AddDateiStichwort(
|
||||||
$tmpid = $this->erpApi->CreateDatei(
|
$tmpid,
|
||||||
$dateiname,
|
'Anhang',
|
||||||
$dateiname,
|
'Ticket',
|
||||||
'',
|
$ticketnachricht,
|
||||||
'',
|
true
|
||||||
$datei,
|
);
|
||||||
'Support Mail',
|
|
||||||
true,
|
|
||||||
$this->config->WFuserdata . '/dms/' . $this->config->WFdbname
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($DEBUG) {
|
|
||||||
echo "AddDateiStichwort $tmpid,'Anhang','Ticket',$ticketnachricht,true)\n";
|
|
||||||
} else {
|
|
||||||
$this->erpApi->AddDateiStichwort(
|
|
||||||
$tmpid,
|
|
||||||
'Anhang',
|
|
||||||
'Ticket',
|
|
||||||
$ticketnachricht,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
$this->mailAccount->isAutoresponseEnabled()
|
||||||
|
&& $this->mailAccount->getAutoresponseText() !== ''
|
||||||
|
&& (
|
||||||
|
$this->erpApi->AutoresponderBlacklist($from) !== 1
|
||||||
|
|| $this->mailAccount->isAutoresponseLimitEnabled() === false
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
$text = $this->mailAccount->getAutoresponseText();
|
$text = $this->mailAccount->getAutoresponseText();
|
||||||
$betreff = $this->mailAccount->getAutoresponseSubject();
|
$betreff = $this->mailAccount->getAutoresponseSubject();
|
||||||
|
|
||||||
|
if (empty($text)) $text = '';
|
||||||
|
if (empty($betreff)) $betreff = '';
|
||||||
|
|
||||||
$text = str_replace('{TICKET}', $schluessel, $text);
|
$text = str_replace('{TICKET}', $schluessel, $text);
|
||||||
$text = str_replace('{BETREFF}', $subject, $text);
|
$text = str_replace('{BETREFF}', $subject, $text);
|
||||||
$betreff = str_replace('{TICKET}', $schluessel, $betreff);
|
$betreff = str_replace('{TICKET}', $schluessel, $betreff);
|
||||||
$betreff = str_replace('{BETREFF}', $subject, $betreff);
|
$betreff = str_replace('{BETREFF}', $subject, $betreff);
|
||||||
|
|
||||||
if (
|
|
||||||
$this->mailAccount->isAutoresponseEnabled()
|
if (!$this->erpApi->isHTML($text)) {
|
||||||
&& $this->mailAccount->getAutoresponseText() !== ''
|
$text = str_replace("\r\n", '<br>', $text);
|
||||||
&& (
|
|
||||||
$this->erpApi->AutoresponderBlacklist($from) !== 1
|
|
||||||
|| $this->mailAccount->isAutoresponseLimitEnabled() === false
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
if (!$this->erpApi->isHTML($text)) {
|
|
||||||
$text = str_replace("\r\n", '<br>', $text);
|
|
||||||
}
|
|
||||||
$this->erpApi->MailSend(
|
|
||||||
$this->mailAccount->getSenderEmailAddress(),
|
|
||||||
'',
|
|
||||||
$from,
|
|
||||||
$name_sender,
|
|
||||||
$betreff,
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
$this->erpApi->MailSend(
|
||||||
|
$this->mailAccount->getSenderEmailAddress(),
|
||||||
|
'',
|
||||||
|
$from,
|
||||||
|
$name_sender,
|
||||||
|
$betreff,
|
||||||
|
$text
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user