false, 'message' => 'Ungültige Anfrage']); return; } $email = $_POST['email'] ?? ''; $firstName = $_POST['first_name'] ?? ''; $lastName = $_POST['last_name'] ?? ''; $customerId = $_SESSION['customer_id'] ?? null; // Validierung if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Ungültige E-Mail-Adresse']); return; } $connectionParams = [ 'dbname' => getenv('DB_DATABASE') ?: 'freeshop', 'user' => getenv('DB_USERNAME') ?: 'freeshop_user', 'password' => getenv('DB_PASSWORD') ?: 'freeshop_password', 'host' => getenv('DB_HOST') ?: 'db', 'driver' => 'pdo_mysql', 'port' => getenv('DB_PORT') ?: 3306, 'charset' => 'utf8mb4', ]; try { $conn = DriverManager::getConnection($connectionParams); // Prüfen ob bereits abonniert $stmt = $conn->prepare('SELECT id FROM ws_newsletter WHERE email = ? AND active = 1'); $stmt->execute([$email]); $existing = $stmt->fetchAssociative(); if ($existing) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'E-Mail-Adresse ist bereits abonniert']); return; } // Newsletter-Abonnement erstellen $stmt = $conn->prepare(' INSERT INTO ws_newsletter (email, first_name, last_name, customer_id, active, created_at) VALUES (?, ?, ?, ?, 1, NOW()) '); $stmt->execute([$email, $firstName, $lastName, $customerId]); // Willkommens-E-Mail senden $this->sendWelcomeNewsletterEmail($email, $firstName); header('Content-Type: application/json'); echo json_encode([ 'success' => true, 'message' => 'Newsletter-Abonnement erfolgreich!' ]); } catch (Exception $e) { header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Fehler: ' . $e->getMessage()]); } } public function unsubscribe() { $token = $_GET['token'] ?? ''; if (empty($token)) { $this->render('front/newsletter/error.html.twig', [ 'title' => 'Webshop - Newsletter Fehler', 'message' => 'Ungültiger Abmelde-Link' ]); return; } $connectionParams = [ 'dbname' => getenv('DB_DATABASE') ?: 'freeshop', 'user' => getenv('DB_USERNAME') ?: 'freeshop_user', 'password' => getenv('DB_PASSWORD') ?: 'freeshop_password', 'host' => getenv('DB_HOST') ?: 'db', 'driver' => 'pdo_mysql', 'port' => getenv('DB_PORT') ?: 3306, 'charset' => 'utf8mb4', ]; try { $conn = DriverManager::getConnection($connectionParams); // Newsletter-Abonnement deaktivieren $stmt = $conn->prepare(' UPDATE ws_newsletter SET active = 0, unsubscribed_at = NOW() WHERE unsubscribe_token = ? '); $stmt->execute([$token]); if ($stmt->rowCount() > 0) { $this->render('front/newsletter/unsubscribed.html.twig', [ 'title' => 'Webshop - Newsletter abgemeldet', 'message' => 'Sie wurden erfolgreich vom Newsletter abgemeldet.' ]); } else { $this->render('front/newsletter/error.html.twig', [ 'title' => 'Webshop - Newsletter Fehler', 'message' => 'Ungültiger Abmelde-Link' ]); } } catch (Exception $e) { $this->render('front/newsletter/error.html.twig', [ 'title' => 'Webshop - Newsletter Fehler', 'message' => 'Fehler: ' . $e->getMessage() ]); } } public function preferences() { if (!isset($_SESSION['customer_id'])) { header('Location: /login?redirect=' . urlencode('/newsletter/preferences')); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $this->updatePreferences(); } else { $this->loadPreferences(); } } private function loadPreferences() { $connectionParams = [ 'dbname' => getenv('DB_DATABASE') ?: 'freeshop', 'user' => getenv('DB_USERNAME') ?: 'freeshop_user', 'password' => getenv('DB_PASSWORD') ?: 'freeshop_password', 'host' => getenv('DB_HOST') ?: 'db', 'driver' => 'pdo_mysql', 'port' => getenv('DB_PORT') ?: 3306, 'charset' => 'utf8mb4', ]; try { $conn = DriverManager::getConnection($connectionParams); $stmt = $conn->prepare(' SELECT * FROM ws_newsletter WHERE customer_id = ? AND active = 1 '); $stmt->execute([$_SESSION['customer_id']]); $newsletter = $stmt->fetchAssociative(); $this->render('front/newsletter/preferences.html.twig', [ 'title' => 'Webshop - Newsletter-Einstellungen', 'newsletter' => $newsletter ]); } catch (Exception $e) { $this->render('front/newsletter/preferences.html.twig', [ 'title' => 'Webshop - Newsletter-Einstellungen', 'error' => 'Fehler beim Laden der Einstellungen: ' . $e->getMessage() ]); } } private function updatePreferences() { $active = isset($_POST['active']) ? 1 : 0; $categories = $_POST['categories'] ?? []; $connectionParams = [ 'dbname' => getenv('DB_DATABASE') ?: 'freeshop', 'user' => getenv('DB_USERNAME') ?: 'freeshop_user', 'password' => getenv('DB_PASSWORD') ?: 'freeshop_password', 'host' => getenv('DB_HOST') ?: 'db', 'driver' => 'pdo_mysql', 'port' => getenv('DB_PORT') ?: 3306, 'charset' => 'utf8mb4', ]; try { $conn = DriverManager::getConnection($connectionParams); if ($active) { // Newsletter aktivieren/aktualisieren $stmt = $conn->prepare(' INSERT INTO ws_newsletter (customer_id, email, first_name, last_name, preferences, active, created_at) VALUES (?, ?, ?, ?, ?, 1, NOW()) ON DUPLICATE KEY UPDATE preferences = VALUES(preferences), active = 1, updated_at = NOW() '); $preferences = json_encode($categories); $stmt->execute([ $_SESSION['customer_id'], $_SESSION['customer_email'], explode(' ', $_SESSION['customer_name'])[0], explode(' ', $_SESSION['customer_name'])[1] ?? '', $preferences ]); } else { // Newsletter deaktivieren $stmt = $conn->prepare(' UPDATE ws_newsletter SET active = 0, unsubscribed_at = NOW() WHERE customer_id = ? '); $stmt->execute([$_SESSION['customer_id']]); } $this->render('front/newsletter/preferences.html.twig', [ 'title' => 'Webshop - Newsletter-Einstellungen', 'success' => 'Einstellungen erfolgreich gespeichert', 'newsletter' => ['active' => $active, 'preferences' => json_encode($categories)] ]); } catch (Exception $e) { $this->render('front/newsletter/preferences.html.twig', [ 'title' => 'Webshop - Newsletter-Einstellungen', 'error' => 'Fehler beim Speichern: ' . $e->getMessage() ]); } } public function preview($id) { if (!isset($_SESSION['admin_id'])) { header('Location: /admin/login'); exit; } $connectionParams = [ 'dbname' => getenv('DB_DATABASE') ?: 'freeshop', 'user' => getenv('DB_USERNAME') ?: 'freeshop_user', 'password' => getenv('DB_PASSWORD') ?: 'freeshop_password', 'host' => getenv('DB_HOST') ?: 'db', 'driver' => 'pdo_mysql', 'port' => getenv('DB_PORT') ?: 3306, 'charset' => 'utf8mb4', ]; try { $conn = DriverManager::getConnection($connectionParams); $stmt = $conn->prepare('SELECT * FROM ws_newsletter_template WHERE id = ?'); $stmt->execute([$id]); $template = $stmt->fetchAssociative(); if (!$template) { $this->render('front/newsletter/error.html.twig', [ 'title' => 'Webshop - Newsletter Fehler', 'message' => 'Template nicht gefunden' ]); return; } // Template mit Testdaten rendern $content = $this->renderNewsletterTemplate($template, [ 'first_name' => 'Test', 'last_name' => 'Kunde', 'unsubscribe_url' => '#' ]); $this->render('front/newsletter/preview.html.twig', [ 'title' => 'Webshop - Newsletter Vorschau', 'template' => $template, 'content' => $content ]); } catch (Exception $e) { $this->render('front/newsletter/error.html.twig', [ 'title' => 'Webshop - Newsletter Fehler', 'message' => 'Fehler: ' . $e->getMessage() ]); } } private function sendWelcomeNewsletterEmail($email, $firstName) { $subject = 'Willkommen zum Newsletter!'; $message = "
Vielen Dank für Ihre Anmeldung zum Webshop Newsletter!
Sie erhalten ab sofort regelmäßig Informationen über:
Falls Sie den Newsletter nicht mehr erhalten möchten, können Sie sich jederzeit hier abmelden.
Mit freundlichen Grüßen
Ihr Webshop-Team