From ef38faa949f6f92c423c3ba334bbf2ff4badcf5e Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 26 Aug 2021 22:46:48 +0200 Subject: [PATCH] disabled email sending in Order::save() --- .../attachments/new_order.pdf.php | 72 +++++++++++ .../Emailtemplates/customer/new_order.php | 22 ++++ application/Address/AddressModel.php | 24 +++- .../Emailnotification/Emailnotification.php | 117 ++++++++++++++++++ application/Order/OrderController.php | 56 ++++++++- lib/mvcfronk/mfLayout/mfLayout.php | 34 +++-- public/assets/pdf/logo.png | Bin 0 -> 33502 bytes 7 files changed, 309 insertions(+), 16 deletions(-) create mode 100644 Layout/default/Emailtemplates/attachments/new_order.pdf.php create mode 100644 Layout/default/Emailtemplates/customer/new_order.php create mode 100644 application/Emailnotification/Emailnotification.php create mode 100644 public/assets/pdf/logo.png diff --git a/Layout/default/Emailtemplates/attachments/new_order.pdf.php b/Layout/default/Emailtemplates/attachments/new_order.pdf.php new file mode 100644 index 000000000..41b1851f2 --- /dev/null +++ b/Layout/default/Emailtemplates/attachments/new_order.pdf.php @@ -0,0 +1,72 @@ +setReturnValue([ + 'filename' => "xinon_Service_PIN_".$owner->customer_number.".pdf" + ]); +?> + + + + Wichtige Kundeninformation - Service PIN + + + + + + + + + + + + + + + +
+ Kundennummer: customer_number?>
+ Vertrag erfasst am: create)?>
+ Bestelldatum: order_date)?>
+
+

+ Wichtige Kundeninformation +
+
+ company): ?> + company?> + + getFullName()): ?> + getFullName()?> + + zip?> city?> +
+


+ + Sehr geehrte Damen und Herren, +

+ wir freuen uns, dass Sie sich für ein Produkt von Xinon bzw. einem unserer Partner + entschieden haben und bestätigen hiermit den Eingang Ihrer Bestellung. +

+ Bezüglich der ggf. erforderlichen Termine für die Installation melden wir uns (bzw. + unsere Partner vom Leitungsbau) sobald die Herstellung möglich ist. +

+ + + + +
Ihr persönlicher Service-PIN lautet: spin?>
+ + + Gemäß der EU Datenschutzverordung sind wir dazu verpflichtet, vor der Beauskunftung + von persönlichen Daten eine Kundenidentifizierung vorzunehmen. Daher werden wir und + unsere Partner Sie bei zukünftigen Kontaktaufnahmen (z.B. vergessenen Passwörtern, + Rechnungsauskünfte, etc) nach Ihrem persönlichen Service-PIN fragen. + + Sollten Sie noch Fragen haben erreichen Sie uns per Mail (office@xinon.at) oder + telefonisch unter der Rufnummer 03115 40800. + + Mit besten Grüßen, + + Ihr XINON Team + + \ No newline at end of file diff --git a/Layout/default/Emailtemplates/customer/new_order.php b/Layout/default/Emailtemplates/customer/new_order.php new file mode 100644 index 000000000..9e90df0fe --- /dev/null +++ b/Layout/default/Emailtemplates/customer/new_order.php @@ -0,0 +1,22 @@ +setReturnValue([ + 'subject' => "Ihre Bestellung wurde erfasst", + 'from_email' => "vertrieb@xinon.at", + 'from_email_name' => "XINON Kundenservice" + ]); +?> + +Sehr geehrte Damen und Herren, + +im Anhang finden Sie weitere Informationen zur Ihrer Breitbandbestellung, sowie Ihren persönlichen Service-PIN. + +Mit besten Grüßen, + +Ihr XINON Team +-- +XINON GmbH + +p: +43 3115 40 800 +f: +43 3115 40 800 10 +a: Fladnitz im Raabtal 150, 8322 Studenzen, AUSTRIA +w: www.xinon.at  e: office@xinon.at diff --git a/application/Address/AddressModel.php b/application/Address/AddressModel.php index bb668d0a6..bdd2227a4 100644 --- a/application/Address/AddressModel.php +++ b/application/Address/AddressModel.php @@ -80,13 +80,17 @@ class AddressModel { public static function getLastCustomerNumber() { $db = FronkDB::singleton(); - $res = $db->select("Addres","customer_number", "customer_number > 0 ORDER BY customer_number DESC LIMIT 1"); + $res = $db->select("Address","customer_number", "customer_number > 0 ORDER BY customer_number DESC LIMIT 1"); if(!$db->num_rows($res)) { return false; } - $data = $db->num_rows($res); - return $data->customer_number; + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->customer_number; + } + + return false; } public static function byNetwork($network_id, $addresstype) { @@ -153,6 +157,20 @@ class AddressModel { private function getSqlFilter($filter) { $where = "1=1 "; + + if(array_key_exists("customer_number", $filter)) { + $cn = $filter["customer_number"]; + if(is_numeric($cn)) { + $where .= " AND customer_number=$cn"; + } + } + + if(array_key_exists("spin", $filter)) { + $spin = FronkDB::singleton()->escape($filter["spin"]); + if($spin) { + $where .= " AND spin='$spin'"; + } + } /* * Address Type */ diff --git a/application/Emailnotification/Emailnotification.php b/application/Emailnotification/Emailnotification.php new file mode 100644 index 000000000..d1455fcd8 --- /dev/null +++ b/application/Emailnotification/Emailnotification.php @@ -0,0 +1,117 @@ +headers = [ + 'X-Mailer' => 'XINON Mailer', + ]; + + $this->email_from = TT_OUTGOING_EMAIL; + $this->from_name = TT_OUTGOING_EMAIL_NAME; + } + + public function addAttachment($file = null, $content = null, $name = false, $c_type = "application/octet-stream", $disposition = "attachment", $encoding = "base64" , $charset = "utf-8") { + $attachment = [ + "file" => $file, + "content" => $content, + "name" => $name, + "c_type" => $c_type, + "disposition" => $disposition, + "encoding" => $encoding, + "charset" => $charset + ]; + + $attachment["isfile"] = false; + if($filename) { + $attachment['isfile'] = true; + } + + $this->attachments[] = $attachment; + } + + public function setHeader($name, $value) { + $this->headers[$name] = $value; + } + + public function setSubject($subject) { + $this->subject = $subject; + } + + public function setBody($body) { + $this->body = $body; + } + + public function setFrom($email, $name = false) { + $this->email_from = $email; + $this->from_name = $name; + } + + public function setTo($email) { + $this->email_to = $email; + $this->to_name = $name; + } + + public function send() { + if(!$this->email_to) { + return false; + } + if(!$this->body) { + return false; + } + if(!is_array($this->headers) || !count($this->headers)) { + return false; + } + if(!$this->subject) { + return false; + } + + if(!$this->headers['Subject']) { + $this->setHeader("Subject", $this->subject); + } + + if(!$this->headers['From'] && $this->from_name) { + $this->headers['From'] = '"'.$this->from_name.'" <'.$this->email_from.'>'; + } + + + //var_dump($this);exit; + + $mimeparams['text_encoding']="8bit"; + $mimeparams['text_charset']="utf-8"; + $mimeparams['html_charset']="utf-8"; + $mimeparams['head_charset']="utf-8"; + + $mime = new Mail_mime(); + $mime->setTXTBody($this->body); + + var_dump($att);exit; + + if(count($this->attachments)) { + foreach($this->attachments as $att) { + if($att['isfile']) { + $mime->addAttachment($att["file"], $att["c_type"], $att["name"], true, $att['encoding'], $att['disposition'], $att['charset']); + } else { + $mime->addAttachment($att["content"], $att["c_type"], $att["name"], false, $att['encoding'], $att['disposition'], $att['charset']); + } + } + } + + $body = $mime->get($mimeparams); + $headers = $mime->headers($this->headers); + + $mail =& Mail::factory('mail', ["-f ".$this->email_from]); + $mail->send($this->email_to, $headers, $body); + } + +} \ No newline at end of file diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index 1b2b79bb4..ec52b2566 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -360,26 +360,70 @@ class OrderController extends mfBaseController { } // if product is not external and customer is new, create customer_number and service pin - if(!$prod->external ) { if(!$owner->customer_number) { $last_num = AddressModel::getLastCustomerNumber(); - + $this->log->debug("last_num: $last_num"); if($last_num) { $new_num = $last_num + 1; } else { $new_num = TT_FIRST_CUSTNUM; } - $owner->customer_number = $new_num; - $owner->save(); + if(!AddressModel::search(['customer_number' => $new_num])) { + $owner->customer_number = $new_num; + $owner->save(); + } } if(!$owner->spin) { $spin = $owner->generateServicePin(); - if($spin) { + if($spin && !AddressModel::search(['spin' => $spin])) { $owner->spin = $spin; - $owner->save(); + if($owner->save()) { + /* + // render service pin PDF + $pdf = new Layout(); + $pdf->setTemplate("Emailtemplates/attachments/new_order.pdf"); + $pdf->set("owner", $owner); + + $pdfpath = $pdf->renderPDF(); + $tvalue = $pdf->getReturnedValue(); + $pdfname = $tvalue['filename']; + + //var_dump($pdfpath);exit; + + // send email to customer + + // TODO template rendern auslagern nach Emailtempate klasse + $tpl = new Layout(); + $tpl->setTemplate("Emailtemplates/customer/new_order"); + $tpl->set("owner", $owner); + $body = $tpl->render(); + + $values = $tpl->getReturnedValue(); + + $subject = $values['subject']; + $from = $values['from_email']; + $from_name = $values['from_email_name']; + $to = $owner->email; + + if(!$subject || !$from || !$from_name || !$to) { + $this->log->warn("Service PIN Email not sent. (subject: '$subject', from: '$from', from_email: '$from_email', to: '$to')"); + } else { + $email = new Emailnotification(); + $email->setSubject($subject); + $email->setBody($body); + $email->setFrom($from, $from_name); + $email->setTo($to); + $email->setHeader("X-xinon-oid", $order->id); + $email->setHeader("X-xinon-pid", $product->id); + $email->addAttachment($pdfpath, null, $pdfname, "application/pdf"); + $email->send(); + } + */ + } + } } } diff --git a/lib/mvcfronk/mfLayout/mfLayout.php b/lib/mvcfronk/mfLayout/mfLayout.php index 0bd461baa..5984c9ee4 100644 --- a/lib/mvcfronk/mfLayout/mfLayout.php +++ b/lib/mvcfronk/mfLayout/mfLayout.php @@ -6,6 +6,7 @@ class mfLayout { private $template="cli"; private $package="default"; private $inline; + private $returnValue; protected static $instance; @@ -45,6 +46,14 @@ class mfLayout { $this->template=$template; } + private function setReturnValue($value) { + $this->returnValue = $value; + } + + public function getReturnedValue() { + return $this->returnValue; + } + public function render() { $this->defaultLayoutvariables(); @@ -63,7 +72,7 @@ class mfLayout { echo $this->render(); } - public function displayPDF($filename=false,$extraPdfArgs=false) { + public function renderPDF($filename=false,$extraPdfArgs=false) { $html = $this->render(); if(!$filename) @@ -84,16 +93,27 @@ class mfLayout { $file = PDFOUTPUTPATH."/$filename"; - header('Content-Type: application/octet-stream'); + return $file; + } + + public function displayPDF($filename=false,$extraPdfArgs=false) { + $filepath = $this->renderPDF($filename, $extraPdfArgs); + + if(!$filename && strpos($filepath, "/") !== false) { + $path_parts = explode("/", $filepath); + $filename = end($path_parts); + } + + header('Content-Type: application/octet-stream'); header('Content-disposition: attachment; filename='.$filename); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - header('Content-Type: '.mime_content_type($file)); - header("Content-Length: ".filesize($file)); - - readfile($file); + header('Content-Type: '.mime_content_type($filename)); + header("Content-Length: ".filesize($filename)); + + readfile($file); exit; - } + } public function setFlash($msg, $type="info") { // info, warning, error diff --git a/public/assets/pdf/logo.png b/public/assets/pdf/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5e5cd51b419f46af8cf4c76f7b7a2748ee8511 GIT binary patch literal 33502 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