/home/devscfvi/DevsQuantum/app/Http/Controllers/NewsletterController.php
<?php
namespace App\Http\Controllers;
use App\Models\Newsletter;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\NewslettersExport;
use Symfony\Component\HttpFoundation\StreamedResponse;
class NewsletterController extends Controller
{
// Frontend form submission
public function subscribe(Request $request)
{
$validated = $request->validate([
'email' => 'required|email|unique:newsletters,email',
]);
Newsletter::create(['email' => $validated['email']]);
return back()->with('success', 'Thank you for subscribing!');
}
// Admin - List all subscribers
public function index()
{
$subscribers = Newsletter::latest()->get();
return view('newsletters.index', compact('subscribers'));
}
public function destroy(Newsletter $newsletter)
{
$newsletter->delete();
return redirect()->route('admin.newsletters.index')->with('success', 'Subscriber deleted successfully.');
}
public function export()
{
$fileName = 'newsletter_subscribers.csv';
$headers = [
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$fileName",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
];
$subscribers = Newsletter::all(['email', 'created_at']);
$callback = function () use ($subscribers) {
$file = fopen('php://output', 'w');
fputcsv($file, ['Email', 'Subscribed At']);
foreach ($subscribers as $subscriber) {
fputcsv($file, [$subscriber->email, $subscriber->created_at]);
}
fclose($file);
};
return response()->stream($callback, 200, $headers);
}
}