query( "SELECT DISTINCT name FROM users WHERE activo = 1 AND role IN ('socio','abogado') AND name != '' ORDER BY orden ASC, name ASC" )->fetchAll(); return array_map(fn($r) => $r['name'], $rows); } /** Todos los usuarios activos para el picker de Involucrados. */ public static function involucrablesUsers(): array { $rows = Db::pdo()->query( "SELECT id, email, name, role FROM users WHERE activo = 1 AND email NOT LIKE 'placeholder-%' ORDER BY name ASC, email ASC" )->fetchAll(); foreach ($rows as &$r) { $r['id'] = (int)$r['id']; } return $rows; } /** Todos los users (incluye inactivos y placeholders) para el Panel de Control. */ public static function allUsers(): array { $rows = Db::pdo()->query( "SELECT id, email, name, role, activo, orden, first_seen_at, last_login_at FROM users ORDER BY role DESC, name ASC, email ASC" )->fetchAll(); foreach ($rows as &$r) { $r['id'] = (int)$r['id']; $r['activo'] = (int)$r['activo']; $r['orden'] = (int)$r['orden']; } return $rows; } /** id del usuario por email; null si no existe. */ public static function userIdByEmail(string $email): ?int { $stmt = Db::pdo()->prepare('SELECT id FROM users WHERE email = :e'); $stmt->execute([':e' => $email]); $id = $stmt->fetchColumn(); return $id === false ? null : (int)$id; } }