- Migración 012: ALTER TABLE users DROP COLUMN orden - Lookups: abogadoNames y allUsers ordenan por name ASC - API admin: create/update_user dejan de leer/escribir orden - UI admin: removida la columna "Orden" de la tabla y el input "Orden" del modal de usuario
66 lines
2.2 KiB
PHP
66 lines
2.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/Db.php';
|
|
|
|
/**
|
|
* Lookups — vistas de solo lectura sobre la tabla users para poblar
|
|
* dropdowns y resolver visibilidad.
|
|
*/
|
|
final class Lookups {
|
|
/**
|
|
* Nombres completos para el dropdown "Abogado Solicitante".
|
|
* Solo socios y abogados; admins quedan ocultos (el programador no debe
|
|
* aparecer en listas de abogados del firme).
|
|
*/
|
|
public static function abogadoNames(): array {
|
|
$rows = Db::pdo()->query(
|
|
"SELECT DISTINCT name FROM users
|
|
WHERE activo = 1
|
|
AND role IN ('socio','abogado')
|
|
AND name != ''
|
|
ORDER BY name ASC"
|
|
)->fetchAll();
|
|
return array_map(fn($r) => $r['name'], $rows);
|
|
}
|
|
|
|
/** Usuarios activos para el picker de Involucrados (sin admins ni placeholders). */
|
|
public static function involucrablesUsers(): array {
|
|
$rows = Db::pdo()->query(
|
|
"SELECT id, email, name, role
|
|
FROM users
|
|
WHERE activo = 1
|
|
AND role != 'admin'
|
|
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 para el Panel de Control.
|
|
* Si $includeAdmins es false, oculta el rol admin (uso para socios).
|
|
*/
|
|
public static function allUsers(bool $includeAdmins = true): array {
|
|
$sql = "SELECT id, email, name, role, activo, first_seen_at, last_login_at
|
|
FROM users";
|
|
if (!$includeAdmins) $sql .= " WHERE role != 'admin'";
|
|
$sql .= " ORDER BY name ASC, email ASC";
|
|
$rows = Db::pdo()->query($sql)->fetchAll();
|
|
foreach ($rows as &$r) {
|
|
$r['id'] = (int)$r['id'];
|
|
$r['activo'] = (int)$r['activo'];
|
|
}
|
|
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;
|
|
}
|
|
}
|