From a761df59a7896b5a034f86393bfcc4752f2ea9e5 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Mon, 4 Sep 2023 14:50:00 +0000 Subject: [PATCH] Ocultar domingos --- action/action_auditoria.php | 23 +++--- action/rutas_salón_horario.php | 28 +++---- auditoria.php | 3 +- class/c_login.php | 138 +++++++++++++++++++++------------ js/auditoría.js | 6 +- ts/auditoría.ts | 2 + 6 files changed, 124 insertions(+), 76 deletions(-) diff --git a/action/action_auditoria.php b/action/action_auditoria.php index e1b74c5..c4f2571 100644 --- a/action/action_auditoria.php +++ b/action/action_auditoria.php @@ -17,6 +17,14 @@ $user = unserialize($_SESSION['user']); // check method try { if ($_SERVER['REQUEST_METHOD'] === 'GET') { + $baseDate = $_GET['fecha'] ?? $_GET['fecha_fin'] ?? null; + + $params = [ + ':periodo_id' => $user->periodo_id, + ':facultad_id' => $user->facultad['facultad_id'], + ':fecha_inicio' => $_GET['fecha'] ?? $_GET['fecha_inicio'] ?? date('Y-m-d'), + ':fecha_fin' => $baseDate ? date('Y-m-d H:i:s', strtotime($baseDate . ' +24 hours')) : date('Y-m-d H:i:s'), + ]; $data = $db->query( "WITH horarios AS ( SELECT *, @@ -64,17 +72,14 @@ try { LEFT JOIN USUARIO JUSTIFICADOR ON JUSTIFICADOR.usuario_id = REGISTRO.justificador_id LEFT JOIN ROL on ROL.rol_id = justificador.rol_id left join facultad on facultad.facultad_id = justificador.facultad_id - WHERE fechas.registro_fecha_ideal BETWEEN COALESCE(:fecha_inicio, LEAST(CURRENT_DATE, PERIODO_FECHA_FIN)) AND COALESCE(:fecha_fin, LEAST(CURRENT_DATE, PERIODO_FECHA_FIN)) + WHERE (fechas.registro_fecha_ideal + HORARIO_HORA) BETWEEN + GREATEST(HORARIO_FECHA_INICIO, PERIODO_FECHA_INICIO, :fecha_inicio) AND LEAST(:fecha_fin, PERIODO_FECHA_FIN, HORARIO_FECHA_FIN) ORDER BY fechas.registro_fecha_ideal DESC, horarios.horario_id, profesor_nombre", - [ - ':periodo_id' => $user->periodo_id, - ':facultad_id' => $user->facultad['facultad_id'], - ':fecha_inicio' => $_GET['fecha'] ?? $_GET['fecha_inicio'] ?? null, - ':fecha_fin' => $_GET['fecha'] ?? $_GET['fecha_fin'] ?? null, - - ] + $params ); - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + + // $user->print_to_log(json_encode($params)); + echo json_encode(array_merge($data), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); } else { http_response_code(405); echo json_encode(['error' => 'method not allowed']); diff --git a/action/rutas_salón_horario.php b/action/rutas_salón_horario.php index 96b00fb..fd56b40 100644 --- a/action/rutas_salón_horario.php +++ b/action/rutas_salón_horario.php @@ -31,20 +31,22 @@ try { $data = array_map( fn($ruta) => array_merge( [ - 'horarios' => $db - ->join('periodo', 'periodo.periodo_id = horario_view.periodo_id') - ->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (horario_view.horario_hora, horario_view.horario_hora + horario_view.duracion)') - ->join('salon_view', 'salon_view.salon_id = horario_view.salon_id') - ->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id') - ->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id') - ->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT') - ->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin') - ->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)') - ->where('bloque_horario.id', $_GET['bloque_horario_id']) - ->where('id_espacio_padre', $ruta['id_espacio_sgu']) - ->get('horario_view', null, '*, horario_view.horario_id, profesor.profesor_id'), + 'horarios' => array_merge( + $db + ->join('periodo', 'periodo.periodo_id = horario_view.periodo_id') + ->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (horario_view.horario_hora, horario_view.horario_hora + horario_view.duracion)') + ->join('salon_view', 'salon_view.salon_id = horario_view.salon_id') + ->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id') + ->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id') + ->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT') + ->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin') + ->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)') + ->where('bloque_horario.id', $_GET['bloque_horario_id']) + ->where('id_espacio_padre', $ruta['id_espacio_sgu']) + ->get('horario_view', null, '*, horario_view.horario_id, profesor.profesor_id'), + ), ], - $ruta + $ruta, ), $data ); diff --git a/auditoria.php b/auditoria.php index c36ed2a..e8a7cbe 100644 --- a/auditoria.php +++ b/auditoria.php @@ -595,7 +595,8 @@
- + diff --git a/class/c_login.php b/class/c_login.php index 14382ce..7d68e34 100644 --- a/class/c_login.php +++ b/class/c_login.php @@ -18,38 +18,8 @@ require_once($ruta ?? '') . "vendor/autoload.php"; class Login { - private function es_usuario(): bool - { - global $db; - return $db->where('usuario_clave', $this->user['clave'])->has("usuario"); - } - public function __get($property) - { - global $db; - return match ($property) { - 'acceso' => $this->access(), - 'profesor' => $db->where('profesor_clave', preg_replace('/\D/','', $this->user['clave']))->getOne("profesor")['profesor_id'] ?? null, - 'jefe_de_carrera' => $db->where('usuario_id', $this->user["id"])->has('usuario_carrera'), - 'periodo_id' => $db->where('usuario_id', $this->user["id"])->getOne('usuario')["periodo_id"], - 'admin' => $this->es_usuario() and $db->where('usuario_id', $this->user["id"])->getOne('usuario')["usuario_admin"], - 'facultad' => $this->es_usuario() - ? $db - ->where('usuario_id', $this->user["id"]) - ->join('facultad', 'facultad.facultad_id = usuario.facultad_id', 'LEFT') - ->getOne('usuario', 'facultad.facultad_nombre as facultad, facultad.facultad_id') - : array ('facultad' => null, 'facultad_id' => null), - 'rol' => $this->es_usuario() - ? $db - ->join('rol', 'rol.rol_id = usuario.rol_id') - ->where('usuario_id', $this->user["id"]) - ->getOne('usuario', 'rol.rol_titulo as rol, rol.rol_id') - : $db - ->where('rol_titulo', 'docente', 'ILIKE') - ->getOne('rol', 'rol.rol_titulo as rol, rol.rol_id'), - default => throw new Exception("Propiedad no definida"), - }; - } - public function __construct(public array $user) + public ?string $acceso; + public function __construct(public array $user, public array $facultad, public array $rol, public bool $admin, public ?int $periodo_id, public bool $supervisor, public bool $jefe_carrera, public bool $profesor) { } public function print_to_log(string $desc, array $old = null, array $new = null): void @@ -61,17 +31,40 @@ class Login $desc .= " |#| NEW:" . json_encode($new); $log->appendLog($this->user["id"], $this->user["nombre"], $desc); } - public function access(string $pagina = null): string|null + public function access(string $pagina = null): void { global $db; - if ($this->admin) - return "w"; + $user = $db + ->join('rol', 'rol.rol_id = usuario.rol_id') + ->join('facultad', 'facultad.facultad_id = usuario.facultad_id', 'LEFT') + ->where('usuario_id', $this->user["id"]) + ->getOne('usuario'); + + $this->admin = $user["usuario_admin"]; + + $this->rol = array( + 'id' => $user["rol_id"], + 'rol' => $user["rol_titulo"] + ); + + $this->facultad = array( + 'facultad_id' => $user["facultad_id"], + 'facultad' => $user["facultad_nombre"], + ); + + if ($this->admin) { + $this->acceso = "w"; + return; + } + + # print_r( $access ); $acceso = $db ->where('id', $this->user["id"]) ->where('pagina_ruta', $pagina ?? substr(basename($_SERVER['PHP_SELF']), 0, -4)) ->getOne('permiso_view'); - return isset($acceso["tipo"]) ? $acceso["tipo"] : null; + $this->acceso = isset($acceso["tipo"]) ? $acceso["tipo"] : null; + } private static function validaUsuario($user, $pass): bool { @@ -91,29 +84,72 @@ class Login } public static function validUser(string $user, string $pass): Login|array { + if (Login::validaUsuario($user, $pass) === false) { + return [ + 'error' => true, + 'msg' => 'Error al autenticar usuario' + ]; + } global $db; - if (!Login::validaUsuario($user, $pass)) - return ['error' => true, 'msg' => 'Error al autenticar usuario']; - if ($db->has("FS_VALIDACLAVEULSA('$user')")) { - $fs = $db->querySingle('SELECT * FROM FS_VALIDACLAVEULSA(?)', [$user]); - return new Login(user: ['id' => $fs["id"], 'nombre' => $fs["nombre"], 'clave' => $fs["clave"]]); - } + #die (Login::validaUsuario($user, $pass)); + $fs_validaclaveulsa = $db->querySingle( + 'SELECT * FROM FS_VALIDACLAVEULSA(?)', + [$user] + ); - $profesorClave = preg_replace('/\D/', '', $user); - if ($db->where('profesor_clave', $profesorClave)->has("profesor")) { - $profesor = $db->where('profesor_clave', $profesorClave)->getOne("profesor"); - return new Login(user: ['id' => $profesor["profesor_id"], 'nombre' => $profesor["profesor_nombre"], 'clave' => $profesor["profesor_clave"]]); - } + $user = array( + 'id' => $fs_validaclaveulsa["id"], + 'nombre' => $fs_validaclaveulsa["nombre"], + 'clave' => $db->where('usuario_id', $fs_validaclaveulsa["id"])->getOne("usuario")["usuario_clave"] + ); + $facultad = array( + 'facultad_id' => $fs_validaclaveulsa["facultad_id"], + 'facultad' => $fs_validaclaveulsa["facultad"], + ); + $rol = array( + 'id' => $fs_validaclaveulsa["rol_id"], + 'rol' => $fs_validaclaveulsa["rol"] + ); + $supervisor = $db + ->join('rol', 'rol.rol_id = usuario.rol_id') + ->where('usuario_id', $user["id"]) + ->where('rol.rol_titulo', 'Supervisor') + ->has('usuario'); + $jefe_carrera = $db->where('usuario_id', $user["id"])->has('usuario_carrera'); - return ['error' => true, 'msg' => 'Usuario no encontrado']; + $admin = $fs_validaclaveulsa["is_admin"]; + $periodo = $fs_validaclaveulsa["periodo_id"]; + + return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false); + } else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->has("profesor")) { + $profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->getOne("profesor"); + $user = array( + 'id' => $profesor["profesor_clave"], + 'nombre' => $profesor["profesor_nombre"], + ); + $facultad = array( + 'facultad_id' => null, + 'facultad' => null, + ); + $rol = array( + 'id' => null, + 'rol' => 'Docente' + ); + + // CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour + setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/"); + return new Login($user, $facultad, $rol, admin: false, periodo_id: null, supervisor: false, jefe_carrera: false, profesor: true); + } else + return [ + 'error' => true, + 'msg' => 'Usuario no encontrado' + ]; } - - public static function log_out(): void { session_start(); session_destroy(); } -} \ No newline at end of file +} diff --git a/js/auditoría.js b/js/auditoría.js index 64633a6..2399f56 100644 --- a/js/auditoría.js +++ b/js/auditoría.js @@ -51,6 +51,7 @@ const store = reactive({ maxDate: new Date(`${periodo_data.fecha_final}:00:00:00`), dateFormat: "yy-mm-dd", showAnim: "slide", + beforeShowDay: (date) => [(date.getDay() != 0), ""] }); const fecha = $("#fecha"), inicio = $("#fecha_inicio"), fin = $("#fecha_fin"); fecha.datepicker("setDate", new Date(`${periodo_data.fecha_final}:00:00:00`)); @@ -97,8 +98,8 @@ const store = reactive({ }, printEstados() { if (store.filters.estados.length > 0) - document.querySelector('#estados').innerHTML = store.filters.estados.map((estado) => ` - ${store.estados.getEstado(estado).nombre} + document.querySelector('#estados').innerHTML = store.filters.estados.map((estado) => ` + ${store.estados.getEstado(estado).nombre} `).join(''); else document.querySelector('#estados').innerHTML = `Todos los registros`; @@ -175,6 +176,7 @@ const store = reactive({ }); this.data = await res.json(); this.loading = false; + store.current.page = 1; }, invertir() { this.data = this.data.reverse(); diff --git a/ts/auditoría.ts b/ts/auditoría.ts index 8f0d54b..9381454 100644 --- a/ts/auditoría.ts +++ b/ts/auditoría.ts @@ -124,6 +124,7 @@ const store = reactive({ maxDate: new Date(`${periodo_data.fecha_final}:00:00:00`), dateFormat: "yy-mm-dd", showAnim: "slide", + beforeShowDay: (date: Date) => [(date.getDay() != 0), ""] }); const fecha = $("#fecha"), inicio = $("#fecha_inicio"), fin = $("#fecha_fin") @@ -257,6 +258,7 @@ const store = reactive({ }) this.data = await res.json() this.loading = false + store.current.page = 1 }, invertir() { this.data = this.data.reverse()