From 4f5dfa57aebdc23a8922fc3ff099ed42db3ac9d5 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Tue, 10 Jun 2025 10:54:59 +0200 Subject: [PATCH] added new custom preorder notification --- Layout/default/Preordercampaign/Form.php | 37 ++++++++ .../PreordercampaignController.php | 11 ++- .../preorder/custom_notifications/init.php | 83 ++++++++++++++++++ .../send-preorder-custom-300-notification.php | 74 ++-------------- .../send-preorder-custom-new-noticiation.php | 84 +++++++++++++++++++ 5 files changed, 218 insertions(+), 71 deletions(-) create mode 100644 scripts/preorder/custom_notifications/init.php rename scripts/preorder/{ => custom_notifications}/send-preorder-custom-300-notification.php (51%) create mode 100644 scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php index c141cf45b..f993dc2d6 100644 --- a/Layout/default/Preordercampaign/Form.php +++ b/Layout/default/Preordercampaign/Form.php @@ -502,6 +502,43 @@ + + +
"> + + +
+
+
+
+
+ Neu Custom +
+ +
+
+
+
+
+ @ +
+ +
+ +
+
+
+
+
+
+ + diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 70a3bdbc1..d81672df0 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -517,7 +517,6 @@ class PreordercampaignController extends mfBaseController { if($statusmailtemplate) { $statusmailtemplate->update($mt_data); } else { - $statusmailtemplate = PreordercampaignStatusnotificationMailtemplate::create($mt_data); } } @@ -528,12 +527,12 @@ class PreordercampaignController extends mfBaseController { } foreach($mailtemplates_delete as $mt_code) { - $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "status_code" => $mt_code]); - if($status_mt) { - $status_mt->delete(); - } - } + $status_mt = null; + if(preg_match("/^\d+$/", $mt_code)) $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "status_code" => $mt_code]); + else $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "logical_config" => json_encode(["type" => $mt_code])]); + if($status_mt) $status_mt->delete(); + } $this->layout()->setFlash("Vorbestellkampagne erfolgreich gespeichert.", "success"); diff --git a/scripts/preorder/custom_notifications/init.php b/scripts/preorder/custom_notifications/init.php new file mode 100644 index 000000000..ff5583228 --- /dev/null +++ b/scripts/preorder/custom_notifications/init.php @@ -0,0 +1,83 @@ +id); +define("INTERNAL_USER_USERNAME", $me->username); +define("MFBASE_BYPASS_LOGIN", true); + +$db = FronkDB::singleton(); +$db = $db->link; + +function logMessage($message): void { + echo "[" . date("Y-m-d H:i:s") . "] " . $message . "\n"; +} + +function sendPreorderEmail($mailtemplate, $preordercampaign, $preorder, $email_type = "300-custom") { + $data = ["preorder" => $preorder->getPropertiesAsArray()]; + + foreach(["adb_hausnummer", "adb_wohneinheit"] as $prop) { + $obj = $preorder->getProperty($prop); + if($obj) { + $obj_data = (array) $obj->data; + unset($obj->data, $obj->_old_data, $obj->db, $obj->log); + $data[$prop] = array_merge((array) $obj, $obj_data); + } else { + $data[$prop] = null; + } + } + + $replacers = []; + foreach($data as $values) { + foreach($values as $key => $value) { + if($key[0] !== "\0") $replacers[$key] = $value; + } + } + + $subject = $mailtemplate->getVariableReplacedSubject($replacers); + $body = ""; + $body .= $mailtemplate->renderBody($replacers); + $body .= "\n"; + + $body_type = $mailtemplate->body_html ? "html" : "text"; + + $email = new Emailnotification(); + $email->setSubject($subject); + if($body_type == "html") { + $email->setHtmlBody($body); + } else { + $email->setBody($body); + } + $email->setFrom($preordercampaign->from_email, $preordercampaign->from_email_name); + $email->setTo($preorder->email); + $email->setHeader("X-".ucfirst(MFAPPNAME)."-pid", $preorder->id); + $email->setHeader("X-".ucfirst(MFAPPNAME)."-ps", '300-custom'); + // add attachments + try { + foreach ($mailtemplate->files as $file) { + if (!$file->filename || !$file->file_id || !$file->file->store_filename) continue; + logMessage("Adding attachment: " . $file->filename); + $email->addAttachment($file->file->getFullPath(), null, $file->filename, $file->file->mimetype ?: null); + } + $email->send(); + logMessage("Email sent successfully for Preorder ID: $preorder->id, Campaign: $preordercampaign->name, Type: $email_type"); + $psn_log = PreorderStatusnotificationLog::create([ + "preorder_id" => $preorder->id, + "email_type" => $email_type, + "email" => $preorder->email, + ]); + $psn_log->save(); + } catch (Exception $e) { + logMessage("Error sending email for Preorder ID $preorder->id: " . $e->getMessage()); + } + +} \ No newline at end of file diff --git a/scripts/preorder/send-preorder-custom-300-notification.php b/scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php similarity index 51% rename from scripts/preorder/send-preorder-custom-300-notification.php rename to scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php index c0b191ea2..c2074a683 100644 --- a/scripts/preorder/send-preorder-custom-300-notification.php +++ b/scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php @@ -1,22 +1,7 @@ id); -define("INTERNAL_USER_USERNAME", $me->username); -define("MFBASE_BYPASS_LOGIN", true); +global $db; +require_once 'init.php'; $sql = "WITH first_status_300_plus AS ( SELECT @@ -54,11 +39,8 @@ WHERE p.type = 'order' AND psnl.id IS NULL -- No existing '300-custom' notification ORDER BY fs.first_status_300_timestamp ASC;"; -$db = FronkDB::singleton(); -$db = $db->link; - $res = $db->query($sql); -// exit if no results + if ($res->num_rows == 0) { logMessage("No preorders found for custom 300 notification."); exit; @@ -68,12 +50,7 @@ while($row = $res->fetch_assoc()) { logMessage("Processing Preorder ID: " . $row['id']); $preorder_id = $row['id']; $campaign_name = $row['campaign_name']; - $current_status_code = $row['current_status_code']; - $current_status_name = $row['current_status_name']; - $first_reached_300 = $row['first_reached_300_plus']; - $days_since_first_300 = $row['days_since_first_300']; $mailtemplate_id = $row['mailtemplate_id']; - $logical_config = json_decode($row['logical_config'], true); $preorder = new Preorder($preorder_id); if (!$preorder || !$preorder->id) { @@ -95,44 +72,11 @@ while($row = $res->fetch_assoc()) { logMessage("Preparing to send email for Preorder ID: $preorder_id, Campaign: $campaign_name"); + sendPreorderEmail( + $mailtemplate, + $preordercampaign, + $preorder, + "300-custom" + ); - $subject = $mailtemplate->subject; - $body = ""; - $body .= $mailtemplate->renderBody(); - $body .= "\n"; - - $body_type = $mailtemplate->body_html ? "html" : "text"; - - $email = new Emailnotification(); - $email->setSubject($subject); - if($body_type == "html") { - $email->setHtmlBody($body); - } else { - $email->setBody($body); - } - $email->setFrom($preordercampaign->from_email, $preordercampaign->from_email_name); - $email->setTo($preorder->email); - $email->setHeader("X-".ucfirst(MFAPPNAME)."-pid", $preorder->id); - $email->setHeader("X-".ucfirst(MFAPPNAME)."-ps", '300-custom'); - // add attachments - try { - foreach ($mailtemplate->files as $file) { - if (!$file->filename || !$file->file_id || !$file->file->store_filename) continue; - logMessage("Adding attachment: " . $file->filename); - $email->addAttachment($file->file->getFullPath(), null, $file->filename, $file->file->mimetype ?: null); - } - $email->send(); - logMessage("Email sent successfully for Preorder ID: $preorder_id"); - $psn_log = PreorderStatusnotificationLog::create([ - "preorder_id" => $preorder_id, - "email_type" => "300-custom", - "email" => $preorder->email, - ]); - $psn_log->save(); - // Log the notification - $log = new PreorderStatusnotificationLog(); - - } catch (Exception $e) { - logMessage("Error sending email for Preorder ID $preorder_id: " . $e->getMessage()); - } } \ No newline at end of file diff --git a/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php b/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php new file mode 100644 index 000000000..6c8097d78 --- /dev/null +++ b/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php @@ -0,0 +1,84 @@ +query($sql); + +if ($res->num_rows == 0) { + logMessage("No preorders found for custom 300-new-order notification."); + exit; +} + +logMessage("Found " . $res->num_rows . " preorders for 300-custom-new-order notification."); + +while($row = $res->fetch_assoc()) { + logMessage("Processing Preorder ID: " . $row['id']); + $preorder_id = $row['id']; + $campaign_name = $row['campaign_name']; + $mailtemplate_id = $row['mailtemplate_id']; + $wohneinheit_status_code = $row['wohneinheit_status_code']; + $wohneinheit_status_name = $row['wohneinheit_status_name']; + + logMessage("Wohneinheit Status: {$wohneinheit_status_code} ({$wohneinheit_status_name})"); + + $preorder = new Preorder($preorder_id); + if (!$preorder || !$preorder->id) { + logMessage("Preorder with ID $preorder_id not found. Skipping."); + continue; + } + + $preordercampaign = new Preordercampaign($preorder->preordercampaign_id); + if (!$preordercampaign || !$preordercampaign->id) { + logMessage("Preordercampaign with ID {$preorder->preordercampaign_id} not found. Skipping."); + continue; + } + + $mailtemplate = new Mailtemplate($mailtemplate_id); + if(!$mailtemplate || !$mailtemplate->id) { + logMessage("Mailtemplate with ID $mailtemplate_id not found. Skipping."); + continue; + } + + logMessage("Preparing to send email for Preorder ID: $preorder_id, Campaign: $campaign_name"); + + sendPreorderEmail( + $mailtemplate, + $preordercampaign, + $preorder, + "300-custom-new-order" + ); +} + +logMessage("Completed processing 300-custom-new-order notifications."); + +?> \ No newline at end of file