Bernd Wurst commited on 2026-09-30 08:18:05
Zeige 5 geänderte Dateien mit 257 Einfügungen und 3 Löschungen.
| ... | ... |
@@ -4,7 +4,7 @@ |
| 4 | 4 |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", |
| 5 | 5 |
"This file is @generated automatically" |
| 6 | 6 |
], |
| 7 |
- "content-hash": "243e0997880280ef81c610a684d958d0", |
|
| 7 |
+ "content-hash": "145c14df556e32657309089217a52294", |
|
| 8 | 8 |
"packages": [ |
| 9 | 9 |
{
|
| 10 | 10 |
"name": "giggsey/libphonenumber-for-php", |
| ... | ... |
@@ -472,6 +472,88 @@ |
| 472 | 472 |
], |
| 473 | 473 |
"time": "2026-07-16T22:23:49+00:00" |
| 474 | 474 |
}, |
| 475 |
+ {
|
|
| 476 |
+ "name": "phpmailer/phpmailer", |
|
| 477 |
+ "version": "v7.1.1", |
|
| 478 |
+ "source": {
|
|
| 479 |
+ "type": "git", |
|
| 480 |
+ "url": "https://github.com/PHPMailer/PHPMailer.git", |
|
| 481 |
+ "reference": "1bc1716a507a65e039d4ac9d9adebbbd0d346e15" |
|
| 482 |
+ }, |
|
| 483 |
+ "dist": {
|
|
| 484 |
+ "type": "zip", |
|
| 485 |
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/1bc1716a507a65e039d4ac9d9adebbbd0d346e15", |
|
| 486 |
+ "reference": "1bc1716a507a65e039d4ac9d9adebbbd0d346e15", |
|
| 487 |
+ "shasum": "" |
|
| 488 |
+ }, |
|
| 489 |
+ "require": {
|
|
| 490 |
+ "ext-ctype": "*", |
|
| 491 |
+ "ext-filter": "*", |
|
| 492 |
+ "ext-hash": "*", |
|
| 493 |
+ "php": ">=5.5.0" |
|
| 494 |
+ }, |
|
| 495 |
+ "require-dev": {
|
|
| 496 |
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0", |
|
| 497 |
+ "doctrine/annotations": "^1.2.6 || ^1.13.3", |
|
| 498 |
+ "php-parallel-lint/php-console-highlighter": "^1.0.0", |
|
| 499 |
+ "php-parallel-lint/php-parallel-lint": "^1.3.2", |
|
| 500 |
+ "phpcompatibility/php-compatibility": "^10.0.0@dev", |
|
| 501 |
+ "squizlabs/php_codesniffer": "^3.13.5", |
|
| 502 |
+ "yoast/phpunit-polyfills": "^1.0.4" |
|
| 503 |
+ }, |
|
| 504 |
+ "suggest": {
|
|
| 505 |
+ "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", |
|
| 506 |
+ "directorytree/imapengine": "For uploading sent messages via IMAP, see gmail example", |
|
| 507 |
+ "ext-imap": "Needed to support advanced email address parsing according to RFC822", |
|
| 508 |
+ "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", |
|
| 509 |
+ "ext-openssl": "Needed for secure SMTP sending and DKIM signing", |
|
| 510 |
+ "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", |
|
| 511 |
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", |
|
| 512 |
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication", |
|
| 513 |
+ "psr/log": "For optional PSR-3 debug logging", |
|
| 514 |
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", |
|
| 515 |
+ "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" |
|
| 516 |
+ }, |
|
| 517 |
+ "type": "library", |
|
| 518 |
+ "autoload": {
|
|
| 519 |
+ "psr-4": {
|
|
| 520 |
+ "PHPMailer\\PHPMailer\\": "src/" |
|
| 521 |
+ } |
|
| 522 |
+ }, |
|
| 523 |
+ "notification-url": "https://packagist.org/downloads/", |
|
| 524 |
+ "license": [ |
|
| 525 |
+ "LGPL-2.1-only" |
|
| 526 |
+ ], |
|
| 527 |
+ "authors": [ |
|
| 528 |
+ {
|
|
| 529 |
+ "name": "Marcus Bointon", |
|
| 530 |
+ "email": "phpmailer@synchromedia.co.uk" |
|
| 531 |
+ }, |
|
| 532 |
+ {
|
|
| 533 |
+ "name": "Jim Jagielski", |
|
| 534 |
+ "email": "jimjag@gmail.com" |
|
| 535 |
+ }, |
|
| 536 |
+ {
|
|
| 537 |
+ "name": "Andy Prevost", |
|
| 538 |
+ "email": "codeworxtech@users.sourceforge.net" |
|
| 539 |
+ }, |
|
| 540 |
+ {
|
|
| 541 |
+ "name": "Brent R. Matzelle" |
|
| 542 |
+ } |
|
| 543 |
+ ], |
|
| 544 |
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", |
|
| 545 |
+ "support": {
|
|
| 546 |
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues", |
|
| 547 |
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v7.1.1" |
|
| 548 |
+ }, |
|
| 549 |
+ "funding": [ |
|
| 550 |
+ {
|
|
| 551 |
+ "url": "https://github.com/Synchro", |
|
| 552 |
+ "type": "github" |
|
| 553 |
+ } |
|
| 554 |
+ ], |
|
| 555 |
+ "time": "2026-05-18T08:06:14+00:00" |
|
| 556 |
+ }, |
|
| 475 | 557 |
{
|
| 476 | 558 |
"name": "psr/http-client", |
| 477 | 559 |
"version": "1.0.3", |
| ... | ... |
@@ -0,0 +1,37 @@ |
| 1 |
+<?php |
|
| 2 |
+require_once(__DIR__.'/../vendor/autoload.php'); |
|
| 3 |
+require_once("config.php");
|
|
| 4 |
+ |
|
| 5 |
+use PHPMailer\PHPMailer\PHPMailer; |
|
| 6 |
+use PHPMailer\PHPMailer\Exception; |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+function sendMail($subject, $message, $to, $name) {
|
|
| 10 |
+ global $config; |
|
| 11 |
+ $mail = new PHPMailer(true); |
|
| 12 |
+ try {
|
|
| 13 |
+ $mail->isSMTP(); |
|
| 14 |
+ $mail->Host = $config['smtp_server']; |
|
| 15 |
+ $mail->SMTPAuth = true; |
|
| 16 |
+ $mail->Username = $config['smtp_username']; |
|
| 17 |
+ $mail->Password = $config['smtp_password']; |
|
| 18 |
+ $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; |
|
| 19 |
+ $mail->Port = 587; |
|
| 20 |
+ $mail->CharSet = 'UTF-8'; |
|
| 21 |
+ |
|
| 22 |
+ $mail->setFrom('info@mosterei-wurst.de', 'Mosterei Wurst');
|
|
| 23 |
+ $mail->addAddress($to, $name); |
|
| 24 |
+ |
|
| 25 |
+ $mail->Subject = $subject; |
|
| 26 |
+ $mail->Body = $message; |
|
| 27 |
+ |
|
| 28 |
+ $mail->send(); |
|
| 29 |
+ |
|
| 30 |
+ // Flag setzen, damit kein erneuter Versand bei Reloads stattfindet |
|
| 31 |
+ $_SESSION['mail_sent'] = true; |
|
| 32 |
+ return true; |
|
| 33 |
+ } catch (Exception $e) {
|
|
| 34 |
+ error_log("E-Mail konnte nicht gesendet werden. PHPMailer Fehler: {$mail->ErrorInfo}");
|
|
| 35 |
+ return false; |
|
| 36 |
+ } |
|
| 37 |
+} |
| ... | ... |
@@ -38,6 +38,9 @@ foreach ($phonenumbers as $phone) {
|
| 38 | 38 |
<div class="col-sm-6"><a href="#" class="btn btn-lg btn-light w-100" id="btn-sms">SMS an<br> '.$phone.'</a></div>'; |
| 39 | 39 |
} |
| 40 | 40 |
foreach ($emailaddrs as $email) {
|
| 41 |
+ if (!isset($_SESSION['email']) || !$_SESSION['email']) {
|
|
| 42 |
+ $_SESSION['email'] = $email; |
|
| 43 |
+ } |
|
| 41 | 44 |
$content .= ' |
| 42 | 45 |
</div> |
| 43 | 46 |
<div class="row"> |
| ... | ... |
@@ -2,6 +2,7 @@ |
| 2 | 2 |
require_once "lib/api.php"; |
| 3 | 3 |
require_once "lib/auftrag.php"; |
| 4 | 4 |
require_once "lib/helper.php"; |
| 5 |
+require_once "lib/mailer.php"; |
|
| 5 | 6 |
if (!file_exists("../data/".date("Y"))) {
|
| 6 | 7 |
mkdir("../data/".date("Y"));
|
| 7 | 8 |
} |
| ... | ... |
@@ -179,6 +180,11 @@ if (isset($_REQUEST['form'])) {
|
| 179 | 180 |
|
| 180 | 181 |
$_SESSION['lname'] = htmlspecialchars($lname); |
| 181 | 182 |
$_SESSION['fname'] = htmlspecialchars($fname); |
| 183 |
+ if ($_SESSION['fname'] != '') {
|
|
| 184 |
+ $_SESSION['name'] = $_SESSION['lname'].', '.$_SESSION['fname']; |
|
| 185 |
+ } else {
|
|
| 186 |
+ $_SESSION['name'] = $_SESSION['lname']; |
|
| 187 |
+ } |
|
| 182 | 188 |
$_SESSION['phone'] = htmlspecialchars($number); |
| 183 | 189 |
if (isset($_REQUEST['save']) && $_REQUEST['save'] == 'yes' && $_SESSION['mode'] != 'local') {
|
| 184 | 190 |
setcookie('LNAME', $lname, time() + 24*3600*500, "");
|
| ... | ... |
@@ -325,7 +331,7 @@ if (isset($_SESSION['neue'])) {
|
| 325 | 331 |
// customer |
| 326 | 332 |
if (isset($_SESSION['kundennr'])) {
|
| 327 | 333 |
$auftrag['customer'] = $_SESSION['kundennr']; |
| 328 |
- $auftrag['name'] = $_SESSION['name']; |
|
| 334 |
+ $auftrag['name'] = $_SESSION['name'] ?? $_SESSION['lname']; |
|
| 329 | 335 |
$auftrag['phone'] = $_SESSION['phone']; |
| 330 | 336 |
$auftrag['email'] = isset($_SESSION['email']) ? $_SESSION['email'] : null; |
| 331 | 337 |
$auftrag['notificationPreference'] = $_SESSION['notificationPreference']; |
| ... | ... |
@@ -445,6 +451,131 @@ if (isset($_SESSION['neue'])) {
|
| 445 | 451 |
// Session-Daten mit dran hängen |
| 446 | 452 |
$auftrag['session'] = $_SESSION; |
| 447 | 453 |
@file_put_contents($filename, json_encode($auftrag)); |
| 454 |
+ |
|
| 455 |
+ |
|
| 456 |
+ // ========================================================================= |
|
| 457 |
+ // E-Mail-Benachrichtigung an den Kunden (Einmaliger Versand bei Fertigstellung) |
|
| 458 |
+ // ========================================================================= |
|
| 459 |
+ |
|
| 460 |
+ // Bedingungen: |
|
| 461 |
+ // 1. Auftrag ist als abgeschlossen markiert ($_SESSION['complete'] == true) |
|
| 462 |
+ // 2. Der Text 'Auftrag unvollständig erfasst' ist NICHT mehr in den Notizen |
|
| 463 |
+ // 3. E-Mail-Adresse des Kunden ist vorhanden |
|
| 464 |
+ // 4. E-Mail wurde für diese Session/diesen Auftrag noch NICHT versendet |
|
| 465 |
+ if ( |
|
| 466 |
+ !empty($_SESSION['complete']) && |
|
| 467 |
+ !empty($_SESSION['email']) && |
|
| 468 |
+ empty($_SESSION['mail_sent']) |
|
| 469 |
+ ) {
|
|
| 470 |
+ $to = $_SESSION['email']; |
|
| 471 |
+ $orderId = $_SESSION['orderid'] ?? 'N/A'; |
|
| 472 |
+ $subject = "Bestätigung: Ihr Auftrag bei der Mosterei wurde erfasst"; |
|
| 473 |
+ |
|
| 474 |
+ // Stamm- und Auftragsdaten aus der Session aufbereiten |
|
| 475 |
+ $fname = $_SESSION['fname'] ?? ''; |
|
| 476 |
+ $lname = $_SESSION['lname'] ?? ''; |
|
| 477 |
+ $name = $_SESSION['name'] ?? trim("$fname $lname");
|
|
| 478 |
+ |
|
| 479 |
+ // Benachrichtigungswunsch parsen ("method:data")
|
|
| 480 |
+ $notificationText = "Keine Angabe"; |
|
| 481 |
+ if (!empty($_SESSION['notificationPreference'])) {
|
|
| 482 |
+ $parts = explode(':', $_SESSION['notificationPreference'], 2);
|
|
| 483 |
+ $method = strtolower($parts[0] ?? ''); |
|
| 484 |
+ $target = $parts[1] ?? ''; |
|
| 485 |
+ |
|
| 486 |
+ switch ($method) {
|
|
| 487 |
+ case 'whatsapp': |
|
| 488 |
+ $notificationText = "WhatsApp ($target)"; |
|
| 489 |
+ break; |
|
| 490 |
+ case 'sms': |
|
| 491 |
+ $notificationText = "SMS ($target)"; |
|
| 492 |
+ break; |
|
| 493 |
+ case 'email': |
|
| 494 |
+ $notificationText = "E-Mail ($target)"; |
|
| 495 |
+ break; |
|
| 496 |
+ default: |
|
| 497 |
+ $notificationText = !empty($target) ? ucfirst($method) . " ($target)" : ucfirst($method); |
|
| 498 |
+ break; |
|
| 499 |
+ } |
|
| 500 |
+ } |
|
| 501 |
+ |
|
| 502 |
+ // 1. Container-Liste aufbereiten |
|
| 503 |
+ $containerText = ""; |
|
| 504 |
+ if (!empty($_SESSION['containers']) && is_array($_SESSION['containers'])) {
|
|
| 505 |
+ foreach ($_SESSION['containers'] as $cont) {
|
|
| 506 |
+ $type = ($cont['type'] == 'box') ? 'Box' : 'Anhänger'; |
|
| 507 |
+ $label = !empty($cont['label']) ? " " . $cont['label'] . "" : " (mit Name beschriftet)"; |
|
| 508 |
+ $containerText .= " - " . $type . $label . "\n"; |
|
| 509 |
+ } |
|
| 510 |
+ } else {
|
|
| 511 |
+ $containerText = " - Keine Container angegeben\n"; |
|
| 512 |
+ } |
|
| 513 |
+ |
|
| 514 |
+ // 2. Abfüllung (Logik analog zu summary.php) |
|
| 515 |
+ $groessenLabels = ['3er' => '3-Liter-Kartons', '5er' => '5-Liter-Kartons', '10er' => '10-Liter-Kartons']; |
|
| 516 |
+ $mitgebrachte = []; |
|
| 517 |
+ foreach (['3er', '5er', '10er'] as $g) {
|
|
| 518 |
+ if (!empty($_SESSION['gebrauchte_' . $g])) {
|
|
| 519 |
+ $mitgebrachte[] = $groessenLabels[$g]; |
|
| 520 |
+ } |
|
| 521 |
+ } |
|
| 522 |
+ |
|
| 523 |
+ $abfuellungText = ""; |
|
| 524 |
+ if (($_SESSION['neue'] ?? '') == 'sonstiges') {
|
|
| 525 |
+ $abfuellungText = "Sonstiger Wunsch: " . ($_SESSION['sonstiges'] ?? 'Keine Details angegeben'); |
|
| 526 |
+ } else {
|
|
| 527 |
+ $neuerKarton = $groessenLabels[$_SESSION['neue'] ?? ''] ?? ''; |
|
| 528 |
+ if (!empty($mitgebrachte)) {
|
|
| 529 |
+ $gebText = (count($mitgebrachte) === 1) |
|
| 530 |
+ ? 'Ihre gebrauchten ' . $mitgebrachte |
|
| 531 |
+ : 'Ihre gebrauchten Kartons (' . implode(' und ', $mitgebrachte) . ')';
|
|
| 532 |
+ $abfuellungText = $neuerKarton |
|
| 533 |
+ ? "Befüllung zuerst in $gebText, verbleibender Rest in neue $neuerKarton." |
|
| 534 |
+ : "Alles in $gebText."; |
|
| 535 |
+ } elseif ($neuerKarton) {
|
|
| 536 |
+ $abfuellungText = "Befüllung in neue $neuerKarton."; |
|
| 537 |
+ } else {
|
|
| 538 |
+ $abfuellungText = "Keine spezielle Abfüllung ausgewählt."; |
|
| 539 |
+ } |
|
| 540 |
+ } |
|
| 541 |
+ |
|
| 542 |
+ // 3. Frischsaft |
|
| 543 |
+ $frischsaftText = (($_SESSION['frischsaft'] ?? 0) > 0) |
|
| 544 |
+ ? $_SESSION['frischsaft'] . " Liter (unpasteurisiert in bereitgestelltes Gefäß)" |
|
| 545 |
+ : "Kein Frischsaft gewünscht"; |
|
| 546 |
+ |
|
| 547 |
+ // 4. Anmerkungen |
|
| 548 |
+ $anmerkungen = !empty($_SESSION['anmerkungen']) ? $_SESSION['anmerkungen'] : 'Keine'; |
|
| 549 |
+ |
|
| 550 |
+ // E-Mail-Text zusammenbauen |
|
| 551 |
+ $message = "Hallo " . ($fname ?: $name) . ",\n\n"; |
|
| 552 |
+ $message .= "vielen Dank für Ihren Auftrag! Wir haben Ihre Angaben erfolgreich aufgenommen.\n\n"; |
|
| 553 |
+ $message .= "--- AUFTRAGSDATEN ---\n"; |
|
| 554 |
+ //$message .= "Auftrags-ID: " . $orderId . "\n"; |
|
| 555 |
+ $message .= "Name: " . $name . "\n"; |
|
| 556 |
+ $message .= "Telefon: " . ($_SESSION['phone'] ?? 'k. A.') . "\n"; |
|
| 557 |
+ $message .= "Benachrichtigung: " . $notificationText . "\n\n"; |
|
| 558 |
+ $message .= "Anlieferung / Container:\n" . $containerText . "\n"; |
|
| 559 |
+ $message .= "Abfüllung:\n " . $abfuellungText . "\n\n"; |
|
| 560 |
+ $message .= "Frischsaft:\n " . $frischsaftText . "\n\n"; |
|
| 561 |
+ $message .= "Ihre Anmerkungen:\n " . $anmerkungen . "\n"; |
|
| 562 |
+ $message .= "----------------------\n\n"; |
|
| 563 |
+ $message .= "Wir werden Ihren Auftrag innerhalb von 3 Tagen verarbeiten und Ihnen eine Nachricht senden.\n"; |
|
| 564 |
+ $message .= "Bitte stellen Sie eine zeitnahe Abholung nach unserer Fertigmeldung sicher.\n\n"; |
|
| 565 |
+ $message .= "Viele Grüße,\nIhr Team von der Mosterei Wurst\n\n"; |
|
| 566 |
+ $message .= "-- \n"; |
|
| 567 |
+ $message .= "Diese Nachricht wurde automatisch versendet. Sollten Sie Änderungen an Ihrem Auftrag wünschen,\nantworten Sie gerne auf diese Nachricht oder rufen Sie uns an: 07192-936434\n\n"; |
|
| 568 |
+ $message .= "Impressum: https://mosterei-wurst.de/impressum/"; |
|
| 569 |
+ |
|
| 570 |
+ // E-Mail senden und Flag in Session speichern, um Mehrfachversand zu verhindern |
|
| 571 |
+ if (sendMail($subject, $message, $to, $name)) {
|
|
| 572 |
+ $_SESSION['mail_sent'] = true; |
|
| 573 |
+ } else {
|
|
| 574 |
+ die(); |
|
| 575 |
+ } |
|
| 576 |
+ |
|
| 577 |
+ } |
|
| 578 |
+ |
|
| 448 | 579 |
/* |
| 449 | 580 |
if ($ret['status'] == 'error') {
|
| 450 | 581 |
echo 'Es gibt ein Problem beim Speichern des Auftrags. Bitte verwenden Sie diesmal einen Papier-Auftrag.'; |
| 451 | 582 |