Files
WitShop/app/Http/Controllers/Shop/NewsletterController.php
T
marcoandClaude Sonnet 4.6 092dae6085
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 8s
Add coupons, newsletter, country-based shipping, sale prices, USP bar
- Gutscheincodes: DB-Verwaltung (%, €-Rabatt, Mindestbestellwert, Ablauf),
  Eingabefeld im Checkout, Admin unter Marketing → Gutscheine
- Newsletter: Double-Opt-In per E-Mail, Formular im Footer,
  Admin-Liste mit CSV-Export
- Länderzonen-Versand: DE / DACH / EU / WORLD, Versandkosten nach
  Lieferland dynamisch berechnet, Coupon-Rabatt in Bestellung gespeichert
- Sale-Preise: sale_price auf Produkten, durchgestrichener UVP auf
  Produktkarte, Sonderangebote-Sektion auf Startseite
- USP-Leiste auf Startseite: Versand, Zahlung, Rückgabe, Service

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 11:07:14 +02:00

58 lines
2.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Shop;
use App\Http\Controllers\Controller;
use App\Models\NewsletterSubscriber;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
class NewsletterController extends Controller
{
public function subscribe(Request $request)
{
$request->validate(['newsletter_email' => 'required|email|max:255']);
$email = strtolower($request->input('newsletter_email'));
$existing = NewsletterSubscriber::where('email', $email)->first();
if ($existing && $existing->isConfirmed()) {
return back()->with('newsletter_info', 'Diese E-Mail-Adresse ist bereits angemeldet.');
}
$token = Str::random(64);
if ($existing) {
$existing->update(['token' => $token]);
} else {
NewsletterSubscriber::create(['email' => $email, 'token' => $token]);
}
$confirmUrl = route('newsletter.confirm', $token);
$shopName = \App\Models\Setting::get('shop_name', 'Shop');
Mail::raw(
"Bitte bestätigen Sie Ihre Newsletter-Anmeldung:\n\n{$confirmUrl}\n\n"
. "Falls Sie sich nicht angemeldet haben, können Sie diese E-Mail ignorieren.\n\n"
. "– {$shopName}",
fn($m) => $m->to($email)->subject("Newsletter-Anmeldung bestätigen – {$shopName}")
);
return back()->with('newsletter_success', 'Bitte prüfen Sie Ihren Posteingang und bestätigen Sie die Anmeldung.');
}
public function confirm(string $token)
{
$subscriber = NewsletterSubscriber::where('token', $token)->whereNull('confirmed_at')->first();
if (!$subscriber) {
return redirect('/')->with('error', 'Ungültiger oder bereits verwendeter Bestätigungslink.');
}
$subscriber->update(['confirmed_at' => now(), 'token' => null]);
return redirect('/')->with('success', 'Newsletter-Anmeldung erfolgreich bestätigt!');
}
}