|
@@ -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();
|
|
|
}
|
|
|
-}
|
|
|
+}
|