validated('search'); $subscribers = $page->subscribers() ->search(is_string($search) ? $search : null) ->orderByDesc('created_at') ->paginate(25) ->withQueryString(); return view('admin.subscribers.index', compact('page', 'subscribers')); } public function export(IndexSubscriberRequest $request, PreregistrationPage $page): StreamedResponse { $search = $request->validated('search'); $subscribers = $page->subscribers() ->search(is_string($search) ? $search : null) ->orderBy('created_at') ->get(); $phoneEnabled = $page->phone_enabled; return response()->streamDownload(function () use ($subscribers, $phoneEnabled): void { $handle = fopen('php://output', 'w'); $headers = ['First Name', 'Last Name', 'Email']; if ($phoneEnabled) { $headers[] = 'Phone'; } $headers = array_merge($headers, ['Registered At', 'Synced to Mailwizz', 'Synced At']); fputcsv($handle, $headers); foreach ($subscribers as $sub) { $row = [$sub->first_name, $sub->last_name, $sub->email]; if ($phoneEnabled) { $row[] = $sub->phone ?? ''; } $row[] = $sub->created_at?->toDateTimeString() ?? ''; $row[] = $sub->synced_to_mailwizz ? 'Yes' : 'No'; $row[] = $sub->synced_at?->toDateTimeString() ?? ''; fputcsv($handle, $row); } fclose($handle); }, 'subscribers-'.$page->slug.'.csv', [ 'Content-Type' => 'text/csv; charset=UTF-8', ]); } }