prepare("SELECT * FROM users WHERE id = ? LIMIT 1"); $stmt->execute([$id]); return $stmt->fetch(PDO::FETCH_ASSOC) ?: null; } // Fetch a single user row by email (canonical SSO key). function db_get_user_by_email(PDO $pdo, string $email): ?array { $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ? LIMIT 1"); $stmt->execute([strtolower(trim($email))]); return $stmt->fetch(PDO::FETCH_ASSOC) ?: null; } // All backoffice users (sysadmin + admin + staff) for management lists. function db_get_all_staff(PDO $pdo): array { return $pdo->query( "SELECT * FROM users WHERE role IN ('sysadmin','admin','staff') ORDER BY FIELD(role,'sysadmin','admin','staff'), name" )->fetchAll(PDO::FETCH_ASSOC); } // Active admins (sysadmin + admin) — e.g. assignment dropdowns. function db_get_active_admins(PDO $pdo): array { return $pdo->query( "SELECT * FROM users WHERE role IN ('sysadmin','admin') AND is_active = 1 ORDER BY name" )->fetchAll(PDO::FETCH_ASSOC); } // PT-PT label for the role ladder. function role_label(string $role): string { return [ 'sysadmin' => 'Administrador de sistema', 'admin' => 'Administrador', 'staff' => 'Equipa', 'client' => 'Cliente', ][$role] ?? ucfirst($role); }