validated('search'); $subscribers = $page->subscribers() ->search(is_string($search) ? $search : null) ->orderByDesc('created_at') ->paginate(25) ->withQueryString(); $page->loadMissing('mailwizzConfig'); $unsyncedMailwizzCount = $page->mailwizzConfig !== null ? (int) $page->subscribers()->where('synced_to_mailwizz', false)->count() : 0; return view('admin.subscribers.index', compact('page', 'subscribers', 'unsyncedMailwizzCount')); } public function destroy(DestroySubscriberRequest $request, PreregistrationPage $page, Subscriber $subscriber): RedirectResponse { $subscriber->delete(); return redirect() ->route('admin.pages.subscribers.index', $page) ->with('status', __('Subscriber removed.')); } public function queueMailwizzSync( QueueMailwizzSyncRequest $request, PreregistrationPage $page, DispatchUnsyncedMailwizzSyncJobsService $dispatcher ): RedirectResponse { $page->loadMissing('mailwizzConfig'); if ($page->mailwizzConfig === null) { return redirect() ->route('admin.pages.subscribers.index', $page) ->with('error', __('This page has no Mailwizz integration.')); } $count = $dispatcher->dispatch($page->id); if ($count === 0) { return redirect() ->route('admin.pages.subscribers.index', $page) ->with('status', __('There are no unsynced subscribers to queue for this page.')); } return redirect() ->route('admin.pages.subscribers.index', $page) ->with('status', trans_choice( 'Queued Mailwizz sync for :count subscriber.|Queued Mailwizz sync for :count subscribers.', $count, ['count' => $count] )); } 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->isPhoneFieldEnabledForSubscribers(); 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, ['Coupon Code', '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->phoneDisplay() ?? ''; } $row[] = $sub->coupon_code ?? ''; $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', ]); } }