appendLog($this->user["id"], $this->user["nombre"], $desc); } public function access(string $pagina = null): void { global $db; if ($this->admin) { $this->acceso = "w"; return; } # print_r( $access ); $this->acceso = $db->query( 'SELECT tipo FROM PERMISO_VIEW WHERE ID = :usr AND PAGINA_RUTA ILIKE :ruta', array( ':usr' => $this->user["id"], ':ruta' => $pagina ?? substr(basename($_SERVER['PHP_SELF']), 0, -4) ) )["tipo"] ?? 'n'; } public function __toString(): string { return "Usuario: {$this->user["nombre"]} ({$this->user["id"]}), Es admin: {$this->admin}, supervisor: {$this->supervisor}, jefe carrera: {$this->jefe_carrera}, profesor: {$this->profesor}"; } private static function validaUsuario($user, $pass): bool { file_put_contents('php://stderr', $user); if ($user == 'ad017045' and $pass == "admin") return true; $client = new nusoap_client('http://200.13.89.2/validacion.php?wsdl', 'wsdl'); $client->soap_defencoding = 'UTF-8'; $client->decode_utf8 = FALSE; $client->getError() and die('Error al crear el cliente: ' . $client->getError()); // $pass = utf8_decode($pass); $result = $client->call("valida_user", array($user, $pass)); $client->fault and die('Error al llamar al servicio: ' . $client->getError()); return $result; } 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 ($db->has("FS_VALIDACLAVEULSA('$user')")) { #die (Login::validaUsuario($user, $pass)); $fs_validaclaveulsa = $db->querySingle( 'SELECT * FROM FS_VALIDACLAVEULSA(?)', [$user] ); $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'); $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: 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(); } }