label('Download User Report') ->icon('heroicon-o-user') ->action(function (User $record) { $userData = [ 'Name' => $record->name, 'Email' => $record->email, 'Stripe ID' => $record->stripe_id ?? 'N/A', 'Payment Method Type' => $record->pm_type ?? 'N/A', 'Card Last 4' => $record->pm_last_four ?? 'N/A', 'Trial Ends At' => $record->trial_ends_at ? $record->trial_ends_at->toDateTimeString() : 'N/A', 'User Level' => match ($record->level) { 0 => 'Normal User', 1 => 'Banned', 9 => 'Super Admin', default => 'Unknown', }, 'Email Verified At' => $record->email_verified_at ? $record->email_verified_at->toDateTimeString() : 'Not Verified', ]; $csv = fopen('php://temp', 'r+'); // User Details Header fputcsv($csv, ['User Details']); fputcsv($csv, array_keys($userData)); fputcsv($csv, array_values($userData)); fputcsv($csv, []); // Usage Logs Header fputcsv($csv, ['Usage Logs']); fputcsv($csv, ['IP Address', 'Emails Created Count', 'Emails Received Count', 'Emails Created History', 'Emails Received History', 'Created At']); foreach ($record->usageLogs as $log) { fputcsv($csv, [ $log->ip_address, $log->emails_created_count, $log->emails_received_count, is_array($log->emails_created_history) ? implode('; ', $log->emails_created_history) : 'None', is_array($log->emails_received_history) ? implode('; ', $log->emails_received_history) : 'None', $log->created_at->toDateTimeString(), ]); } fputcsv($csv, []); // General Logs Header fputcsv($csv, ['General Logs']); fputcsv($csv, ['IP Address', 'Email', 'Created At']); foreach ($record->logs as $log) { fputcsv($csv, [ $log->ip, $log->email, $log->created_at->toDateTimeString(), ]); } rewind($csv); $csvContent = stream_get_contents($csv); fclose($csv); return Response::streamDownload( function () use ($csvContent) { echo $csvContent; }, "user_{$record->id}_report_".now()->format('Ymd_His').'.csv', ['Content-Type' => 'text/csv'] ); }) ->color('primary'), ]; } }