diff --git a/classes/Components/Logger/Handler/DatabaseLogHandler.php b/classes/Components/Logger/Handler/DatabaseLogHandler.php
index 1b74c1e4..692f9e29 100644
--- a/classes/Components/Logger/Handler/DatabaseLogHandler.php
+++ b/classes/Components/Logger/Handler/DatabaseLogHandler.php
@@ -66,7 +66,7 @@ final class DatabaseLogHandler extends AbstractLogHandler
$sql = 'INSERT INTO `log`
(`log_time`, `level`, `message`, `class`, `method`, `line`, `origin_type`, `origin_detail`, `dump`)
VALUES
- (NOW(), :level, :message, :class, :method, :line, :origin_type, :origin_detail, :dump)';
+ (NOW(3), :level, :message, :class, :method, :line, :origin_type, :origin_detail, :dump)';
$this->db->perform($sql, $values);
}
}
diff --git a/classes/Modules/Ticket/Task/TicketImportHelper.php b/classes/Modules/Ticket/Task/TicketImportHelper.php
index e0ce9408..44f9c115 100644
--- a/classes/Modules/Ticket/Task/TicketImportHelper.php
+++ b/classes/Modules/Ticket/Task/TicketImportHelper.php
@@ -493,12 +493,17 @@ class TicketImportHelper
$this->logger->debug('Start import', ['message' => $message->getSubject()]);
- $this->importMessage($message);
- $insertedMailsCount++;
- if ($this->mailAccount->isDeleteAfterImportEnabled()) {
- $this->mailClient->deleteMessage((int)$messageNumber);
+ $result = $this->importMessage($message);
+
+ if ($result === true) {
+ $insertedMailsCount++;
+ if ($this->mailAccount->isDeleteAfterImportEnabled()) {
+ $this->mailClient->deleteMessage((int)$messageNumber);
+ } else {
+ $this->mailClient->setFlags((int)$messageNumber, ['\\Seen']);
+ }
} else {
- $this->mailClient->setFlags((int)$messageNumber, ['\\Seen']);
+ $this->logger->error('Error during email import', ['']);
}
} catch (Throwable $e) {
$this->logger->error('Error during email import', ['exception' => $e]);
@@ -517,12 +522,10 @@ class TicketImportHelper
/**
* @param MailMessageInterface $message
*
- * @return void
+ * @return true on success
*/
- public function importMessage(MailMessageInterface $message): void
+ public function importMessage(MailMessageInterface $message): bool
{
- $DEBUG = 0;
-
// extract email data
$subject = $this->formatter->encodeToUtf8($message->getSubject());
$from = $this->formatter->encodeToUtf8($message->getSender()->getEmail());
@@ -549,7 +552,7 @@ class TicketImportHelper
$action_html = nl2br($action);
}
- //check if email exists in database
+ // Import database emailbackup
$date = $message->getDate();
if (is_null($date)) { // This should not be happening -> Todo check getDate function
$this->logger->debug('Null date',['subject' => $message->getSubject()]);
@@ -563,21 +566,21 @@ class TicketImportHelper
FROM `emailbackup_mails`
WHERE `checksum`='$frommd5'
AND `empfang`='$empfang'
+ AND `ticketnachricht` != 0
AND `webmail`='" . $this->mailAccount->getId() . "'";
-
$this->logger->debug('Importing message '.$from.' '.$fromname);
- if ($this->db->Select($sql) == 0) {
+ $result = $this->db->Select($sql);
+ $emailbackup_mails_id = null;
+
+ if ($result == 0) {
$this->logger->debug('Importing message',['']);
$attachments = $message->getAttachments();
$anhang = count($attachments) > 0 ? 1 : 0;
$mailacc = $this->mailAccount->getEmailAddress();
- if (empty($mailacc) && count($message->getRecipients()) > 0) {
- $mailacc = array_values($message->getRecipients())[0]->getEmail();
- }
$mailaccid = $this->mailAccount->getId();
if (!$this->erpApi->isMailAdr($from)) {
@@ -604,23 +607,24 @@ class TicketImportHelper
'$empfang','$anhang','$frommd5'
)";
- $id = null;
- if ($DEBUG) {
- echo $sql;
- } else {
- $this->db->InsertWithoutLog($sql);
- $id = $this->db->GetInsertID();
- }
- }
-
- if ($DEBUG) {
- echo "ticket suchen oder anlegen\n";
- }
+ $this->db->InsertWithoutLog($sql);
+ $emailbackup_mails_id = $this->db->GetInsertID();
+ } else {
+ $this->logger->debug('Message already imported.',['']);
+ return(true);
+ }
+ $this->logger->debug('Message emailbackup_mails imported.',['id' => $emailbackup_mails_id]);
+ // END database import emailbackup
+
+ // Find ticket and add or create new ticket
$ticketNumber = null;
$ticketexists = null;
if (preg_match("/Ticket #[0-9]{12}/i", $subject, $matches)) {
$ticketNumber = str_replace('Ticket #', '', $matches[0]);
+
+ $this->logger->debug('Check for number',['ticketnummer' => $ticketNumber]);
+
$ticketexists = $this->db->Select(
"SELECT schluessel
FROM ticket
@@ -648,7 +652,7 @@ class TicketImportHelper
$this->logger->debug('Add message to existing ticket',['ticketnummer' => $ticketNumber]);
}
- // Add message to new or existing ticket
+ // Database import ticket: Add message to new or existing ticket
$ticketnachricht = $this->addTicketMessage(
(string) $ticketNumber,
$timestamp,
@@ -661,11 +665,11 @@ class TicketImportHelper
$from
);
- if ($ticketnachricht > 0 && $id > 0) {
+ if ($ticketnachricht > 0 && $emailbackup_mails_id > 0) {
$this->db->Update(
"UPDATE `emailbackup_mails`
SET ticketnachricht='$ticketnachricht'
- WHERE id='$id' LIMIT 1"
+ WHERE id='$emailbackup_mails_id' LIMIT 1"
);
@@ -711,56 +715,58 @@ class TicketImportHelper
}
}
}
+ } else {
+ $this->logger->error("Message not imported!", ['Time' => $timestamp, 'Subject' => $subject, 'From' => $from]);
+ $this->db->Delete("DELETE FROM emailbackup_mails WHERE id = ".$emailbackup_mails_id);
+ return(false);
}
-
- // Prüfen ob Ordner vorhanden ansonsten anlegen
- $ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
- if (!is_dir($ordner) && $id > 0) {
+ // END database import ticket
+
+ // File management folder with raw text
+ $ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$emailbackup_mails_id";
+ if (!is_dir($ordner) && $emailbackup_mails_id > 0) {
if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
+ $this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
+ $this->db->Delete("DELETE FROM emailbackup_mails WHERE id = ".$emailbackup_mails_id);
+ return(false);
}
$raw_full_email = $message->getRawContent();
file_put_contents($ordner . '/mail.txt', $raw_full_email);
}
- //speichere anhang als datei
- if ($anhang == 1 && $id > 0) {
+ // File management attachments
+ if ($anhang == 1 && $emailbackup_mails_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]);
+ $this->db->Delete("DELETE FROM emailbackup_mails WHERE id = ".$emailbackup_mails_id);
+ return(false);
}
}
// Prüfen ob Ordner vorhanden ansonsten anlegen
- $ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$id";
+ $ordner = $this->config->WFuserdata . '/emailbackup/' . $this->config->WFdbname . "/$emailbackup_mails_id";
if (!is_dir($ordner)) {
- if ($DEBUG) {
- echo "mkdir $ordner\n";
- } else {
- if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
- $this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
- }
+ if (!mkdir($ordner, 0777, true) && !is_dir($ordner)) {
+ $this->logger->error("Folder \"{folder}\" was not created", ['folder' => $ordner]);
+ $this->db->Delete("DELETE FROM emailbackup_mails WHERE id = ".$emailbackup_mails_id);
+ return(false);
}
}
- $this->logger->debug('Add attachments',['ticketnummer' => $ticketNumber, 'nachricht' => $ticketnachricht, 'count' => count($attachments)]);
-
+ $this->logger->debug('Add '.count($attachments).' attachments',['']);
foreach ($attachments as $attachment) {
if ($attachment->getFileName() !== '') {
- if ($DEBUG) {
- } else {
- $handle = fopen($ordner . '/' . $attachment->getFileName(), 'wb');
- if ($handle) {
- fwrite($handle, $attachment->getContent());
- fclose($handle);
- }
+ $handle = fopen($ordner . '/' . $attachment->getFileName(), 'wb');
+ if ($handle) {
+ fwrite($handle, $attachment->getContent());
+ fclose($handle);
}
//Schreibe Anhänge in Datei-Tabelle
$datei = $ordner . '/' . $attachment->getFileName();
$dateiname = $attachment->getFileName();
- $this->logger->debug("Attachment", ['filename' => $dateiname]);
-
if (stripos(strtoupper($dateiname), '=?UTF-8') !== false) {
$dateiname = $this->formatter->encodeToUtf8($dateiname);
$dateiname = htmlspecialchars_decode($dateiname);
@@ -774,42 +780,31 @@ class TicketImportHelper
$dateiname = htmlspecialchars_decode($dateiname);
}
- $this->logger->debug("Attachment cleaned", ['filename' => $dateiname]);
+ $tmpid = $this->erpApi->CreateDatei(
+ $dateiname,
+ $dateiname,
+ '',
+ '',
+ $datei,
+ 'Support Mail',
+ true,
+ $this->config->WFuserdata . '/dms/' . $this->config->WFdbname
+ );
- if ($DEBUG) {
- echo "CreateDatei($dateiname,{$dateiname},\"\",\"\",\"datei\",\"Support Mail\",true,"
- . $this->config->WFuserdata . "/dms/" . $this->config->WFdbname . ")\n";
- } else {
- $tmpid = $this->erpApi->CreateDatei(
- $dateiname,
- $dateiname,
- '',
- '',
- $datei,
- 'Support Mail',
- true,
- $this->config->WFuserdata . '/dms/' . $this->config->WFdbname
- );
- }
+ $this->logger->debug('Add attachment',['filename' => $dateiname, 'ticketnummer' => $ticketNumber,'id' => $tmpid, 'nachricht' => $ticketnachricht]);
- if ($DEBUG) {
- echo "AddDateiStichwort $tmpid,'Anhang','Ticket',$ticketnachricht,true)\n";
- } else {
-
- $this->logger->debug('Add attachment',['ticketnummer' => $ticketNumber,'id' => $tmpid, 'nachricht' => $ticketnachricht]);
-
- $this->erpApi->AddDateiStichwort(
- $tmpid,
- 'Anhang',
- 'Ticket',
- $ticketnachricht,
- true
- );
- }
+ $this->erpApi->AddDateiStichwort(
+ $tmpid,
+ 'Anhang',
+ 'Ticket',
+ $ticketnachricht,
+ true
+ );
}
}
- }
+ } // END File management
+ // Autoresponder
if (
$this->mailAccount->isAutoresponseEnabled()
&& $this->mailAccount->getAutoresponseText() !== ''
@@ -843,5 +838,7 @@ class TicketImportHelper
$text
);
}
+
+ return(true);
}
}
diff --git a/database/struktur.sql b/database/struktur.sql
index a2a03291..84b51edb 100755
--- a/database/struktur.sql
+++ b/database/struktur.sql
@@ -16728,7 +16728,9 @@ INSERT INTO `firmendaten_werte` (`id`, `name`, `typ`, `typ1`, `typ2`, `wert`, `d
(385, 'cleaner_shopimport', 'tinyint', '1', '', '1', '1', 0, 0),
(386, 'cleaner_shopimport_tage', 'int', '11', '', '90', '90', 0, 0),
(387, 'cleaner_adapterbox', 'tinyint', '1', '', '1', '1', 0, 0),
-(388, 'cleaner_adapterbox_tage', 'int', '11', '', '90', '90', 0, 0);
+(388, 'cleaner_adapterbox_tage', 'int', '11', '', '90', '90', 0, 0),
+(389, 'bcc3', 'varchar', '128', '', '', '', 0, 0)
+;
INSERT INTO `geschaeftsbrief_vorlagen` (`id`, `sprache`, `betreff`, `text`, `subjekt`, `projekt`, `firma`) VALUES
(1, 'deutsch', 'Bestellung {BELEGNR} von {FIRMA}', '{ANSCHREIBEN},
anbei übersenden wir Ihnen unsere Bestellung zu. Bitte senden Sie uns als Bestätigung für den Empfang eine Auftragsbestätigung zu.', 'Bestellung', 1, 1),
diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json
index db865632..06b21e37 100644
--- a/upgrade/data/db_schema.json
+++ b/upgrade/data/db_schema.json
@@ -56922,7 +56922,7 @@
},
{
"Field": "log_time",
- "Type": "datetime",
+ "Type": "datetime(3)",
"Collation": null,
"Null": "YES",
"Key": "",
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index cfdd9220..a1dbc7bb 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -27328,7 +27328,7 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
$bcc3 = $this->Firmendaten('bcc3');
if($bcc3!="")
{
- $bccRecipients[] = new EmailRecipient($bcc3[0], $bcc3[1]);
+ $bccRecipients[] = new EmailRecipient($bcc3, $bcc3);
}
// This will build the mail with phpmailer 6 and send it out
diff --git a/www/pages/ajax.php b/www/pages/ajax.php
index e17fd730..b5276378 100644
--- a/www/pages/ajax.php
+++ b/www/pages/ajax.php
@@ -1289,7 +1289,7 @@ class Ajax {
}
break;
case 'warteschlangename':
- $arr = $this->app->DB->SelectArr("SELECT CONCAT(label, ' ', warteschlange) as result from warteschlangen");
+ $arr = $this->app->DB->SelectArr("SELECT CONCAT(label, ' ', warteschlange) as result from warteschlangen WHERE label LIKE '%$term%' OR warteschlange LIKE '%$term%' ORDER BY label");
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++) {
$newarr[] = "{$arr[$i]['result']}";
diff --git a/www/pages/content/ticket_edit.tpl b/www/pages/content/ticket_edit.tpl
index 67118ba5..a6d057ce 100644
--- a/www/pages/content/ticket_edit.tpl
+++ b/www/pages/content/ticket_edit.tpl
@@ -21,7 +21,7 @@