From 7bbcdf206bded268b2c0dbf6f1dcb2539fa05d18 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Sat, 30 Jul 2022 10:49:47 +0200 Subject: [PATCH] Ticket system now with drafts and attachement of sent mails --- www/lib/class.erpapi.php | 11 ++ www/pages/content/ticket_edit.tpl | 4 +- www/pages/content/ticket_new_message.tpl | 18 +-- www/pages/ticket.php | 177 ++++++++++++++--------- 4 files changed, 127 insertions(+), 83 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 8b7c823c..b81f26bf 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -32485,6 +32485,7 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p htmlentities($text, ENT_NOQUOTES, 'UTF-8', false) , ENT_NOQUOTES ); + if($texthtml!=$text) { $text = $texthtml; @@ -43997,6 +43998,16 @@ function Firmendaten($field,$projekt="") return $tmp; } + function GetDateiStichwoerter($dateiid) { + $stichwoerter = $this->app->DB->SelectArr("SELECT subjekt, objekt, parameter FROM datei_stichwoerter WHERE datei=".$dateiid); + if (empty($stichwoerter)) { + return null; + } + else { + return $stichwoerter; + } + } + function GetDateiSubjektObjekt($subjekt,$objekt,$parameter) { $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); diff --git a/www/pages/content/ticket_edit.tpl b/www/pages/content/ticket_edit.tpl index 2bf7f857..c5e48818 100644 --- a/www/pages/content/ticket_edit.tpl +++ b/www/pages/content/ticket_edit.tpl @@ -10,7 +10,7 @@ -->
[MESSAGE] -
+ [FORMHANDLEREVENT]
@@ -19,7 +19,7 @@
{|[STATUSICON]Ticket #[SCHLUESSEL]|} - + diff --git a/www/pages/content/ticket_new_message.tpl b/www/pages/content/ticket_new_message.tpl index cb868614..bb70db72 100644 --- a/www/pages/content/ticket_new_message.tpl +++ b/www/pages/content/ticket_new_message.tpl @@ -34,33 +34,23 @@ - - + - - -
{|Betreff|}:[BETREFF]
{|Betreff|}:
{|Zeit|}:[ZEIT]
{|Von|}:[KUNDE] [MAILADRESSE]
{|Projekt|}:
Anhänge: - - - - - - - [ANHAENGE] -
Datei
+
+ [ANHAENGE]

diff --git a/www/pages/ticket.php b/www/pages/ticket.php index 972fda6e..aab34f9e 100644 --- a/www/pages/ticket.php +++ b/www/pages/ticket.php @@ -53,7 +53,7 @@ class Ticket { $defaultorder = 1; $defaultorderdesc = 0; - $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.png\" border=\"0\">" . "
"; $timedifference = "if ( @@ -114,6 +114,37 @@ class Ticket { return $this->app->DB->SelectArr("SELECT n.id, n.betreff, n.verfasser, n.mail, n.mail_cc, n.zeit, n.zeitausgang, n.versendet, n.text, n.verfasser_replyto, mail_replyto FROM ticket_nachricht n INNER JOIN ticket t ON t.schluessel = n.ticket WHERE (".$where.") AND t.id = ".$ticket_id." ORDER BY n.zeit DESC"); } + function add_attachments_html($ticket_id, $message_id,$templatepos,$showdelete) { + $file_attachments = $this->app->erp->GetDateiSubjektObjekt('Anhang','Ticket',$message_id); + + if (!empty($file_attachments)) { + + $this->app->Tpl->Add('NACHRICHT_ANHANG',"
"); + + foreach ($file_attachments as $file_attachment) { + + if ($showdelete) { + $deletetext = ''. + ''; + } else { + $deletetext = ""; + } + + $this->app->Tpl->Add($templatepos, + "". + htmlentities($this->app->erp->GetDateiName($file_attachment)). + " (". + $this->app->erp->GetDateiSize($file_attachment). + ")". + "". + $deletetext. + "". + "
"); + } + } + } + /** * @throws NumberGeneratorException @@ -230,12 +261,17 @@ class Ticket { function ticket_edit() { $id = $this->app->Secure->GetGET('id'); - + + if (empty($id)) { + return; + } + $this->app->Tpl->Set('ID', $id); $this->app->erp->MenuEintrag("index.php?module=ticket&action=edit&id=$id", "Details"); $this->app->erp->MenuEintrag("index.php?module=ticket&action=list", "Zurück zur Übersicht"); $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); $input = $this->GetInput(); $submit = $this->app->Secure->GetPOST('submit'); $msg = $this->app->erp->base64_url_decode($this->app->Secure->GetGET('msg')); @@ -266,7 +302,7 @@ class Ticket { // END Header // Check for draft - $drafted_messages = $this->get_messages_of_ticket($id, "zeitausgang IS NULL"); + $drafted_messages = $this->get_messages_of_ticket($id, "zeitausgang IS NULL AND versendet = '1'"); if (!empty($drafted_messages)) { @@ -274,7 +310,7 @@ class Ticket { if ($submit != '') { $this->save_draft($drafted_messages[0]['id'],$input); // Reload - $drafted_messages = $this->get_messages_of_ticket($id, "zeitausgang IS NULL"); + $drafted_messages = $this->get_messages_of_ticket($id, "zeitausgang IS NULL AND versendet = '1'"); } // Load the draft for editing @@ -290,10 +326,46 @@ class Ticket { $this->app->YUI->AutoComplete("email_cc","emailname"); $this->app->YUI->AutoComplete("email_bcc","emailname"); $this->app->YUI->CkEditor("email_text","internal", null, 'JQUERY'); + + // Delete attachment from draft + if ($cmd=='deleteattachment') { + $fileid = $this->app->Secure->GetGET('fileid'); + + // Check if this file is only attached to this draft and nowhere else + $check = $this->app->erp->GetDateiStichwoerter($fileid); + + $save_to_delete = true; + foreach ($check as $stichwort) { + if ($stichwort['subjekt'] != 'anhang' || $stichwort['objekt'] != 'Ticket' || $stichwort['parameter'] != $drafted_messages[0]['id']) { + $save_to_delete = false; + break; + } + } + if ($save_to_delete) { + $this->app->erp->DeleteDatei($fileid); + } else { + $msg .= "
Fehler beim Löschen der Datei: In Verwendung.
"; + } + } + + // Upload of attachments + if(isset($_FILES['upload']) && is_array($_FILES['upload'])) + { + foreach($_FILES['upload']['tmp_name'] as $key => $file) + { + if($file != "") + { + $fileid = $this->app->erp->CreateDatei($_FILES['upload']['name'][$key], $_FILES['upload']['name'][$key], "", "", $_FILES['upload']['tmp_name'][$key], $this->app->User->GetName()); + // stichwoerter hinzufuegen + $this->app->erp->AddDateiStichwort($fileid, "anhang", "Ticket", $drafted_messages[0]['id']); + } + } + } + + $this->add_attachments_html($id,$drafted_messages[0]['id'],'ANHAENGE',true); $this->app->Tpl->Parse('NEW_MESSAGE', "ticket_new_message.tpl"); } - - // END Draft + // END Draft // Get all messsages $messages = $this->get_messages_of_ticket($id, 1); @@ -306,11 +378,17 @@ class Ticket { $recv_messages = $this->get_messages_of_ticket($id,"n.versendet != 1"); $this->app->Tpl->Set('EMAIL_AN', $recv_messages[0]['mail']); - - if (!str_starts_with(strtoupper($recv_messages[0]['betreff']),"RE:")) { - $betreff = "RE: ".$recv_messages[0]['betreff']; - } else { - $betreff = $recv_messages[0]['betreff']; + + if (!empty($recv_messages)) { + if (!str_starts_with(strtoupper($recv_messages[0]['betreff']),"RE:")) { + $betreff = "RE: ".$recv_messages[0]['betreff']; + } + else { + $betreff = $recv_messages[0]['betreff']; + } + } + else { + $betreff = $result[0]['betreff']; } $anschreiben = $this->app->DB->Select("SELECT anschreiben FROM adresse WHERE id='".$result[0]['adresse']."' LIMIT 1"); @@ -325,43 +403,23 @@ class Ticket { $sql = "INSERT INTO `ticket_nachricht` ( `ticket`, `zeit`, `text`, `betreff`, `medium`, `versendet`, `verfasser`, `mail`,`status`, `verfasser_replyto`, `mail_replyto` - ) VALUES ('".$result[0]['schluessel']."',NOW(),'".$anschreiben."','".$betreff."','email','1','','','neu','".$senderName."','".$senderAddress."');"; + ) VALUES ('".$result[0]['schluessel']."',NOW(),'".$anschreiben."','".$betreff."','email','1','','".$recv_messages[0]['mail']."','neu','".$senderName."','".$senderAddress."');"; $this->app->DB->Insert($sql); + // Show new message dialog + header("Location: index.php?module=ticket&action=edit&id=$id"); + $this->app->ExitXentral(); } - - // Show new message dialog - $this->app->YUI->AutoComplete("email_an","emailname"); - $this->app->YUI->AutoComplete("email_cc","emailname"); - $this->app->YUI->AutoComplete("email_bcc","emailname"); - $this->app->YUI->CkEditor("email_text","internal", null, 'JQUERY'); - $this->app->Tpl->Parse('NEW_MESSAGE', "ticket_new_message.tpl"); - break; -/* + break; case 'entwurfloeschen': if (!empty($drafted_messages)) { $sql = "UPDATE ticket_nachricht SET ticket = '' WHERE id=".$drafted_messages[0]['id']; - $msg = $this->app->erp->base64_url_encode("
Das Element wurde gelöscht..
"); + $this->app->DB->Update($sql); + $msg = $this->app->erp->base64_url_encode("
Der Entwurf wurde gelöscht.
"); header("Location: index.php?module=ticket&action=edit&msg=$msg&id=$id"); + $this->app->ExitXentral(); } break; - case 'addfile': - - $msg .= $result['userfile']; - - $this->app->Tpl->Set('EMAIL_AN', $input['email_an']); - $this->app->Tpl->Set('EMAIL_TEXT', $input['email_text']); - $this->app->Tpl->Set('EMAIL_BETREFF', $input['email_betreff']); - $this->app->Tpl->Set('EMAIL_SENDER', $input['email_sender']); - - $this->app->YUI->AutoComplete("email_an","emailname"); - $this->app->YUI->AutoComplete("email_cc","emailname"); - $this->app->YUI->AutoComplete("email_bcc","emailname"); - $this->app->YUI->CkEditor("email_text","internal", null, 'JQUERY'); - $this->app->Tpl->Parse('NEW_MESSAGE', "ticket_new_message.tpl"); - - break; -*/ case 'absenden': if (empty($drafted_messages)) { @@ -372,14 +430,14 @@ class Ticket { if (!preg_match("/Ticket #[0-9]{12}/i", $drafted_messages[0]['betreff'])) { $drafted_messages[0]['betreff'].= " Ticket #".$result[0]['schluessel']; } - - echo($drafted_messages[0]['id']."
"); - echo($drafted_messages[0]['verfasser_replyto']."
"); - echo($drafted_messages[0]['mail_replyto']."
"); - echo($drafted_messages[0]['mail']."
"); - echo($drafted_messages[0]['betreff']."
"); - echo($drafted_messages[0]['text']."
"); + + // Attachments + $files = $this->app->erp->GetDateiSubjektObjektDateiname('Anhang','Ticket',$drafted_messages[0]['id'],""); + foreach ($files as $file) { + $msg .= $file."
"; + } + if ( $this->app->erp->MailSend( $drafted_messages[0]['mail_replyto'], @@ -388,7 +446,8 @@ class Ticket { $drafted_messages[0]['mail'], $drafted_messages[0]['betreff'], $drafted_messages[0]['text'], - '',0,false,'','', + $files, + 0,false,'','', true ) != 0 ) { @@ -397,7 +456,7 @@ class Ticket { $sql = "UPDATE `ticket_nachricht` SET `zeitausgang` = NOW(), `betreff` = '".$drafted_messages[0]['betreff']."' WHERE id = ".$drafted_messages[0]['id']; $this->app->DB->Insert($sql); - $msg = '
Die E-Mail wurde erfolgreich versendet an '.$input['email_an'].'. '.$this->app->erp->mail_error.'
'; + $msg .= '
Die E-Mail wurde erfolgreich versendet an '.$input['email_an'].'. '.$this->app->erp->mail_error.'
'; header("Location: index.php?module=ticket&action=edit&id=".$id."&msg=".$this->app->erp->base64_url_encode($msg)); } @@ -433,25 +492,9 @@ class Ticket { $this->app->Tpl->Set("NACHRICHT_EMAILADRESSE",$message['mail']); $this->app->Tpl->Set("NACHRICHT_TEXT",$message['text']); - $file_attachments = $this->app->erp->GetDateiSubjektObjekt('Anhang','Ticket',$message['id']); - - if (!empty($file_attachments)) { - - $this->app->Tpl->Add('NACHRICHT_ANHANG',"
"); - - foreach ($file_attachments as $file_attachment) { - $this->app->Tpl->Add('NACHRICHT_ANHANG', - "". - htmlentities($this->app->erp->GetDateiName($file_attachment)). - " (". - $this->app->erp->GetDateiSize($file_attachment). - ")". - "". - "
"); - } - } - + $this->app->Tpl->Set('NACHRICHT_ANHANG',""); + $this->add_attachments_html($id,$message['id'],'NACHRICHT_ANHANG',false); + $this->app->Tpl->Parse('MESSAGES', "ticket_nachricht.tpl"); }