prepare($regSql); $regStmt->execute($regParams); $registered = array_map(fn(array $row) => [ 'id' => (int) $row['id'], 'name' => $row['name'], 'email' => $row['email'], 'organizationName' => $row['organization_name'], 'ticketCount' => (int) $row['ticket_count'], 'isGuest' => false, ], $regStmt->fetchAll()); $guestSql = "SELECT requester_email AS email, MAX(requester_name) AS name, COUNT(*) AS ticket_count FROM tickets WHERE user_id IS NULL"; $guestParams = []; if ($search !== '') { $guestSql .= ' AND (requester_name LIKE ? OR requester_email LIKE ?)'; $guestParams = [$like, $like]; } $guestSql .= ' GROUP BY requester_email ORDER BY requester_email LIMIT 100'; $guestStmt = $pdo->prepare($guestSql); $guestStmt->execute($guestParams); $guests = array_map(fn(array $row) => [ 'id' => null, 'name' => $row['name'], 'email' => $row['email'], 'organizationName' => null, 'ticketCount' => (int) $row['ticket_count'], 'isGuest' => true, ], $guestStmt->fetchAll()); $customers = array_merge($registered, $guests); usort($customers, fn($a, $b) => strcasecmp($a['name'] ?? '', $b['name'] ?? '')); $customers = array_slice($customers, 0, 100); api_json(['items' => $customers]);