Del servidor bueno
Some checks are pending
Deploy Pruebas / deploy (push) Waiting to run

This commit is contained in:
Your Name
2024-10-11 16:44:27 -06:00
parent 32cbebfca8
commit 960592e68b
33 changed files with 2993 additions and 2536 deletions

View File

@@ -1,52 +1,52 @@
<? <?
#input $_GET['id_espacio_sgu'] #input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ] #output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8'); header('Content-Type: application/json charset=utf-8');
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
$ruta = "../"; $ruta = "../";
require_once $ruta . "class/c_login.php"; require_once $ruta . "class/c_login.php";
if (!isset($_SESSION['user'])) { if (!isset($_SESSION['user'])) {
http_response_code(401); http_response_code(401);
die(json_encode(['error' => 'unauthorized'])); die(json_encode(['error' => 'unauthorized']));
} }
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
// check method // check method
try { try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$data = $db->query( $data = $db->query(
'SELECT * FROM AVISO', 'SELECT * FROM AVISO',
[ [
':facultad_id' => $user->facultad['facultad_id'], ':facultad_id' => $user->facultad['facultad_id'],
':fecha_inicio' => $_GET['fecha'] ?? $_GET['fecha_inicio'] ?? null, ':fecha_inicio' => $_GET['fecha'] ?? $_GET['fecha_inicio'] ?? null,
':fecha_fin' => $_GET['fecha'] ?? $_GET['fecha_fin'] ?? null, ':fecha_fin' => $_GET['fecha'] ?? $_GET['fecha_fin'] ?? null,
] ]
); );
$last_query = [ $last_query = [
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
]; ];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else { } else {
http_response_code(405); http_response_code(405);
echo json_encode(['error' => 'method not allowed']); echo json_encode(['error' => 'method not allowed']);
exit; exit;
} }
} catch (PDOException $th) { } catch (PDOException $th) {
http_response_code(500); http_response_code(500);
echo json_encode([ echo json_encode([
'error' => $th->getMessage(), 'error' => $th->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR); ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR);
exit; exit;
} catch (Exception $th) { } catch (Exception $th) {
http_response_code(500); http_response_code(500);
echo json_encode([ echo json_encode([
'error' => $th->getMessage(), 'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit; exit;
} }

View File

@@ -1,19 +1,30 @@
<?php <?php
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión'])); die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php"; require_once "../include/bd_pdo.php";
$sql = "SELECT fi_carrera(:nombre, :idfacultad, :idnivel, true, :estado)";
$params = [':nombre' => mb_strtoupper($_POST['nombre']), ':idfacultad' => $_POST['facultad'], ':idnivel' => $_POST['nivel'], ':estado' => $_POST['estado']];
print_r($_POST); $nombre_carrera = mb_strtoupper($_POST['carreraCrear']);
echo json_encode(query($sql, $params, true)); $facultad_id = $_POST['facultadCrear'];
$user->print_to_log("Crea carrera", new: $params); $nivel_id = $_POST['nivelCrear'];
$clave_carrera = $_POST['nombreCarreraCrear'];
$sql = "INSERT INTO public.carrera(carrera_nombre, facultad_id, nivel_id, clave_carrera, carrera_activa, carrera_comun)
VALUES (:nombre_carrera, :facultad_id, :nivel_id, :clave_carrera, true, false)";
$params = [
':nombre_carrera' => $nombre_carrera,
':facultad_id' => $facultad_id,
':nivel_id' => $nivel_id,
':clave_carrera' => $clave_carrera
];
$resultado = query($sql, $params, true);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']); header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
exit(); exit();

View File

@@ -2,15 +2,22 @@
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión'])); die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$ruta = "../"; $ruta = "../include/bd_pdo.php";
require_once "../include/bd_pdo.php";
global $pdo; global $pdo;
$sql = "SELECT * FROM fs_carreras(:idfacultad, :idcarrera, null)";
$params = [':idfacultad' => $_POST['idfacultad'], ':idcarrera' => $_POST['idcarrera']];
$user->print_to_log("Crea carrera", old: $params); $idmateria = $_POST['idmateria'];
echo json_encode(query($sql, $params, true));
$sql = "SELECT ca.clave_carrera,ca.carrera_id, ca.carrera_nombre, f.facultad_id, n.nivel_id, n.nivel_nombre
FROM carrera ca
JOIN facultad f ON f.facultad_id = ca.facultad_id
JOIN nivel n ON n.nivel_id = ca.nivel_id
WHERE ca.carrera_id = :idmateria";
$params = [':idmateria' => $idmateria];
$result = query($sql, $params, true);
echo json_encode($result);

View File

@@ -1,19 +1,31 @@
<?php <?php
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión'])); die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php"; require_once "../include/bd_pdo.php";
$old = query("SELECT * FROM FS_CARRERA WHERE ID = :id", [':id' => $_POST['id']]);
$sql = "SELECT fu_updatecarrera(:idcarrera, :nombre, :activa, :idnivel)"; $nombre_carrera = mb_strtoupper($_POST['carreraEditar']);
print_r($_POST); $facultad_id = $_POST['facultadEditar'];
$params = [':idcarrera' => $_POST['id'], ':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado'], ':idnivel' => $_POST['nivel']]; $nivel_id = $_POST['nivelEditar'];
$clave_carrera = $_POST['nombreCarreraEditar'];
$carrera_id = $_POST['id'];
$sql = "UPDATE public.carrera SET carrera_nombre=:nombre_carrera, facultad_id = :facultad_id, nivel_id = :nivel_id, clave_carrera = :clave_carrera WHERE carrera_id = :id";
$params = [
':nombre_carrera' => $nombre_carrera,
':facultad_id' => $facultad_id,
':nivel_id' => $nivel_id,
':clave_carrera' => $clave_carrera,
':id' => $carrera_id
];
query($sql, $params, true); query($sql, $params, true);
$user->print_to_log("Actualiza carrera.", old: $old, new: $params);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']); header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
exit(); exit();

View File

@@ -17,7 +17,7 @@ SELECT json_agg(json_build_object(
'id', id, 'id', id,
'hora_inicio', hora_inicio, 'hora_inicio', hora_inicio,
'hora_fin', hora_fin, 'hora_fin', hora_fin,
'selected', current_time between hora_inicio and hora_fin 'selected', false --current_time between hora_inicio and hora_fin
)) AS bloque_horario )) AS bloque_horario
FROM bloques FROM bloques
", ",

View File

@@ -36,7 +36,7 @@ if (is_array($user)) {
} else { } else {
$_SESSION['user'] = serialize($user); $_SESSION['user'] = serialize($user);
header("Location: " . ($_SESSION['ruta'] ?? "../main.php")); header("Location: " . (isset($_SESSION['ruta']) ? $_SESSION['ruta'] : "../main.php"));
} }
exit; exit;

View File

@@ -1,15 +1,15 @@
<?php <?php
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
$ruta = "../"; $ruta = "../";
require_once "../include/bd_pdo.php"; require_once "../include/bd_pdo.php";
global $db; global $db;
try { try {
$db->querySingle("UPDATE usuario SET estado_baja = TRUE WHERE usuario_id = ?", [$_GET['id']]); $db->querySingle("UPDATE usuario SET estado_baja = TRUE WHERE usuario_id = ?", [$_GET['id']]);
header("Location: ../usuarios.php", true, 307); header("Location: ../usuarios.php", true, 307);
} catch (PDOException $e) { } catch (PDOException $e) {
header("Location: ../usuarios.php?error=2"); header("Location: ../usuarios.php?error=2");
exit; exit;
} }

View File

@@ -1,33 +1,33 @@
<?php <?php
/* /*
* Borra reposición * Borra reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
if(!isset($_POST["id"])){ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información necesaria."; $return["error"] = "Error! No se recibió la información necesaria.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$creador = $user->user["id"]; $creador = $user->user["id"];
try{ try{
$db->query('SELECT * from fd_asignacion_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]); $db->query('SELECT * from fd_asignacion_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]);
$return["ok"] = "La solicitud se borró correctamente"; $return["ok"] = "La solicitud se borró correctamente";
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al borrar la solicitud de salón."; $return["error"] = "Ocurrió un error al borrar la solicitud de salón.";
} }
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,186 +1,186 @@
<?php <?php
/* /*
* Inserta reposición * Inserta reposición
*/ */
$pag = "../asignacion_crear.php"; $pag = "../asignacion_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
require_once "../class/mailer.php"; require_once "../class/mailer.php";
define("COORDINADOR", 9); define("COORDINADOR", 9);
define("ENVIO_CORREOS", true); define("ENVIO_CORREOS", true);
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//$user->access(); //$user->access();
$duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion $duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion
$fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto $fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto
$hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto $alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad $aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad
if(isset($_POST["salon"]) && $_POST["salon"] != "") if(isset($_POST["salon"]) && $_POST["salon"] != "")
$salon = filter_input(INPUT_POST, "salon", FILTER_SANITIZE_NUMBER_INT);//limpia texto $salon = filter_input(INPUT_POST, "salon", FILTER_SANITIZE_NUMBER_INT);//limpia texto
if(empty($_POST["prof"])) if(empty($_POST["prof"]))
$prof = $user["id"]; $prof = $user["id"];
else else
$prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto $prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto
//if(isset($_POST["salon"]) && $_POST["salon"] != "") //if(isset($_POST["salon"]) && $_POST["salon"] != "")
//$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto //$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
$comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto $comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto
$aula_rs = $db->querySingle("select tipoaula_nombre, tipoaula_supervisor from tipoaula where tipoaula_id = :id", [":id"=>$aula]); $aula_rs = $db->querySingle("select tipoaula_nombre, tipoaula_supervisor from tipoaula where tipoaula_id = :id", [":id"=>$aula]);
$duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]); $duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]);
$duracion_tiempo = $duracion_rs["duracion_interval"]; $duracion_tiempo = $duracion_rs["duracion_interval"];
//-- Obtiene datos de horario regular de clase //-- Obtiene datos de horario regular de clase
$hora = $hora_ini.":".$min_ini.":00"; $hora = $hora_ini.":".$min_ini.":00";
$fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora;
$fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo;
$dia_new = date('w', strtotime($fecha_new)); $dia_new = date('w', strtotime($fecha_new));
//Datos de dependencia de usuario //Datos de dependencia de usuario
$fac_rs = $db->querySingle("SELECT facultad_nombre, clave_dependencia from facultad where facultad_id = :id_fac",[':id_fac' => $user->facultad["facultad_id"]] ); $fac_rs = $db->querySingle("SELECT facultad_nombre, clave_dependencia from facultad where facultad_id = :id_fac",[':id_fac' => $user->facultad["facultad_id"]] );
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
if(!empty($salon)){ if(!empty($salon)){
$salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon', $salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon',
[':id_salon' => $salon] [':id_salon' => $salon]
); );
if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){ if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
}else{ }else{
$salon_json = json_decode($salon_rs["salon_array"], true); $salon_json = json_decode($salon_rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){ if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]); unset($salon_json[0]);
} }
$salon_desc = join(" / ",$salon_json); $salon_desc = join(" / ",$salon_json);
} }
} }
//Obtiene correos //Obtiene correos
$correos_rs = $db->query('SELECT coor.usuario_correo as coordinador_correo $correos_rs = $db->query('SELECT coor.usuario_correo as coordinador_correo
from reposicion_solicitud rs from reposicion_solicitud rs
inner join profesor p on rs.profesor_id =p.profesor_id inner join profesor p on rs.profesor_id =p.profesor_id
inner join usuario u on u.usuario_id = rs.usuario_id inner join usuario u on u.usuario_id = rs.usuario_id
inner join horario_view hv on hv.horario_id = rs.horario_id inner join horario_view hv on hv.horario_id = rs.horario_id
inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord
where hv.facultad_id = :id_fac', where hv.facultad_id = :id_fac',
[':rol_coord' => COORDINADOR, ':id_fac' => $user->facultad["facultad_id"]] [':rol_coord' => COORDINADOR, ':id_fac' => $user->facultad["facultad_id"]]
); );
$coord_correos=[]; $coord_correos=[];
foreach($correos_rs as $correo){ foreach($correos_rs as $correo){
if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){ if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){
if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){ if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){
array_push($coord_correos, $correo["coordinador_correo"]); array_push($coord_correos, $correo["coordinador_correo"]);
} }
} }
} }
$correosSup_rs = $db->querySingle("SELECT DISTINCT sup.usuario_correo as coordinador_correo $correosSup_rs = $db->querySingle("SELECT DISTINCT sup.usuario_correo as coordinador_correo
FROM horario_supervisor hs FROM horario_supervisor hs
inner join usuario sup on sup.usuario_id =hs.usuario_id inner join usuario sup on sup.usuario_id =hs.usuario_id
where :id_fac = ANY(hs.facultad_id_array) where :id_fac = ANY(hs.facultad_id_array)
and sup.usuario_correo is not null and sup.usuario_correo != ''", and sup.usuario_correo is not null and sup.usuario_correo != ''",
[':id_fac' => $user->facultad["facultad_id"]] ); [':id_fac' => $user->facultad["facultad_id"]] );
// Valida que grupo no tenga clases // Valida que grupo no tenga clases
/*$result = validaConflictoHoras($pdo, $gpo, $dia_new, $hora, $materia, "-", $fecha_new, $fecha_fin_new, $duracion); /*$result = validaConflictoHoras($pdo, $gpo, $dia_new, $hora, $materia, "-", $fecha_new, $fecha_fin_new, $duracion);
if($result != ""){//error if($result != ""){//error
//echo $result; //echo $result;
header("Location:".$pag."?error=7"); header("Location:".$pag."?error=7");
exit(); exit();
} }
*/ */
//Valida que profesor no este en 2 reposiciones al mismo tiempo en la fecha nueva //Valida que profesor no este en 2 reposiciones al mismo tiempo en la fecha nueva
$traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)', $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)',
[':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo] [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo]
)["traslape_profesor_reposicion"]; )["traslape_profesor_reposicion"];
if($traslape){ if($traslape){
//print_r($_POST); //print_r($_POST);
//echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)"; //echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)";
header("Location:".$pag."?error=9"); header("Location:".$pag."?error=9");
exit(); exit();
} }
try{ try{
$edo = 1; $edo = 1;
if(!$user->jefe_carrera) if(!$user->jefe_carrera)
$edo = 2; $edo = 2;
//echo "SELECT * from fi_asignacion_solicitud( $fecha_new, $hora, $prof, $edo, $comentario, $alumnos, $aula, $duracion_tiempo, ".$user->user["id"].")"; exit(); //echo "SELECT * from fi_asignacion_solicitud( $fecha_new, $hora, $prof, $edo, $comentario, $alumnos, $aula, $duracion_tiempo, ".$user->user["id"].")"; exit();
$db->query('SELECT * from fi_asignacion_solicitud(:f_nueva, :hora_nueva, :prof, :edo, :desc, :alumnos, :aula, :duracion, :usr)', $db->query('SELECT * from fi_asignacion_solicitud(:f_nueva, :hora_nueva, :prof, :edo, :desc, :alumnos, :aula, :duracion, :usr)',
[':f_nueva' => $fecha_new, ':hora_nueva' => $hora, [':f_nueva' => $fecha_new, ':hora_nueva' => $hora,
':prof' => $prof, ':edo'=>$edo, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"] ':prof' => $prof, ':edo'=>$edo, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"]
] ]
); );
}catch(Exception $e){ }catch(Exception $e){
echo $e->getMessage(); echo $e->getMessage();
//header("Location: ".$pag."?error=1"); //header("Location: ".$pag."?error=1");
exit(); exit();
} }
$asunto = ""; $asunto = "";
$texto = ""; $texto = "";
$to = ""; $to = "";
switch($edo){ switch($edo){
case 1://Correo a coordinador case 1://Correo a coordinador
if( count($coord_correos) > 0 ){ if( count($coord_correos) > 0 ){
$to = join(",", $coord_correos); $to = join(",", $coord_correos);
} }
$asunto = "Solicitud de salon nueva"; $asunto = "Solicitud de salon nueva";
$texto = "<p>Se creó una solicitud de asignación de salón nueva.</p>"; $texto = "<p>Se creó una solicitud de asignación de salón nueva.</p>";
$texto .= "<p><b>Se solicita un espacio de tipo ".mb_strtoupper($aula_rs["tipoaula_nombre"])."</b> para el día <b>".$fecha." a las ".$hora." hrs. </b>"; $texto .= "<p><b>Se solicita un espacio de tipo ".mb_strtoupper($aula_rs["tipoaula_nombre"])."</b> para el día <b>".$fecha." a las ".$hora." hrs. </b>";
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>";
break; break;
case 2://Correo a supervisor case 2://Correo a supervisor
$asunto = "Solicitud de salon nueva - ".$fac_rs["clave_dependencia"]." ".$fac_rs["facultad_nombre"]; $asunto = "Solicitud de salon nueva - ".$fac_rs["clave_dependencia"]." ".$fac_rs["facultad_nombre"];
//crear plantilla //crear plantilla
$texto = "<p>Se creó una solicitud de asignación de salón nueva para: <b>".$fac_rs["clave_dependencia"]." ".$fac_rs["facultad_nombre"]."</b>.</p>"; $texto = "<p>Se creó una solicitud de asignación de salón nueva para: <b>".$fac_rs["clave_dependencia"]." ".$fac_rs["facultad_nombre"]."</b>.</p>";
$texto .= "<p>Para el día <b>".$fecha." a las ".$hora." hrs. </b>"; $texto .= "<p>Para el día <b>".$fecha." a las ".$hora." hrs. </b>";
if(!$aula_rs["tipoaula_supervisor"]){ if(!$aula_rs["tipoaula_supervisor"]){
$texto .= " en el salón: <b>".$salon_desc."</b></p>"; $texto .= " en el salón: <b>".$salon_desc."</b></p>";
}else{ }else{
$texto .= " en un salón de tipo: <b>".mb_strtoupper($aula_rs["tipoaula_nombre"])."</b></p>"; $texto .= " en un salón de tipo: <b>".mb_strtoupper($aula_rs["tipoaula_nombre"])."</b></p>";
} }
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>";
$to = join(",", $correosSup_rs); $to = join(",", $correosSup_rs);
break; break;
} }
/* /*
$log = new LogActividad(); $log = new LogActividad();
$desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]"; $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]";
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/
if($to!= "" && ENVIO_CORREOS){ if($to!= "" && ENVIO_CORREOS){
//crear plantilla //crear plantilla
$texto = '<body > $texto = '<body >
<img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px"> <img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px">
'.$texto.' '.$texto.'
</body>'; </body>';
require_once('../include/phpmailer/PHPMailerAutoload.php'); require_once('../include/phpmailer/PHPMailerAutoload.php');
if($_ENV['DB_NAME'] == "paad_pruebas"){ if($_ENV['DB_NAME'] == "paad_pruebas"){
$asunto = "PRUEBAS-".$asunto; $asunto = "PRUEBAS-".$asunto;
Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true); Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true);
}else{ }else{
Mailer::enviarCorreo($to, $asunto, $texto, true); Mailer::enviarCorreo($to, $asunto, $texto, true);
} }
} }
header("Location: ".$pag."?ok=0"); header("Location: ".$pag."?ok=0");
?> ?>

View File

@@ -1,81 +1,81 @@
<?php <?php
/* /*
* Obtiene datos de reposición * Obtiene datos de reposición
*/ */
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
/*if(!$objSesion->tieneAcceso()){ /*if(!$objSesion->tieneAcceso()){
$return["error"] = "Error! No tienes permisos para realizar esta acción."; $return["error"] = "Error! No tienes permisos para realizar esta acción.";
}else*/ if(!isset($_POST["id"])){ }else*/ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información de la reposición."; $return["error"] = "Error! No se recibió la información de la reposición.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
try{ try{
if($user->rol["rol_id"] == 7){//es supervisor if($user->rol["rol_id"] == 7){//es supervisor
$rs = $db->querySingle('SELECT * from fs_asignacion_solicitud(:id, NULL, NULL, :sup, NULL)', $rs = $db->querySingle('SELECT * from fs_asignacion_solicitud(:id, NULL, NULL, :sup, NULL)',
[':id' => $id, ':sup'=>$user->user["id"]] [':id' => $id, ':sup'=>$user->user["id"]]
); );
}else{//coordinador }else{//coordinador
$rs = $db->querySingle('SELECT * from fs_asignacion_solicitud(:id, NULL, NULL, NULL, null)', $rs = $db->querySingle('SELECT * from fs_asignacion_solicitud(:id, NULL, NULL, NULL, null)',
[':id' => $id] [':id' => $id]
); );
} }
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al leer los datos de la reposición."; $return["error"] = "Ocurrió un error al leer los datos de la reposición.";
echo json_encode($return); echo json_encode($return);
exit(); exit();
} }
$return["fecha_nueva"] = date('d/m/Y', strtotime($rs["fecha_nueva"])); $return["fecha_nueva"] = date('d/m/Y', strtotime($rs["fecha_nueva"]));
$hora_nueva = explode(":",$rs["hora_nueva"]); $hora_nueva = explode(":",$rs["hora_nueva"]);
$return["hora_ini"] = $hora_nueva[0]; $return["hora_ini"] = $hora_nueva[0];
$return["min_ini"] = $hora_nueva[1]; $return["min_ini"] = $hora_nueva[1];
$hora_nueva_fin = explode(":",$rs["hora_nueva_fin"]); $hora_nueva_fin = explode(":",$rs["hora_nueva_fin"]);
$return["hora_fin"] = $hora_nueva_fin[0]; $return["hora_fin"] = $hora_nueva_fin[0];
$return["min_fin"] = $hora_nueva_fin[1]; $return["min_fin"] = $hora_nueva_fin[1];
$return["duracion"] = $rs["duracion_total"]; $return["duracion"] = $rs["duracion_total"];
// $return["carrera"] = $rs["PlanEstudio_desc"]; // $return["carrera"] = $rs["PlanEstudio_desc"];
// $return["materia"] = $rs["materia_id"]; // $return["materia"] = $rs["materia_id"];
// $return["materia_desc"] = $rs["materia_nombre"]; // $return["materia_desc"] = $rs["materia_nombre"];
$return["salon"] = $rs["salon_id"]; $return["salon"] = $rs["salon_id"];
if($rs["salon_id"]==""){ if($rs["salon_id"]==""){
$return["salon_desc"] = "Pendiente"; $return["salon_desc"] = "Pendiente";
}else{ }else{
$salon_json = json_decode($rs["salon_array"], true); $salon_json = json_decode($rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){ if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]); unset($salon_json[0]);
} }
$return["salon_desc"] = join(" / ",$salon_json); $return["salon_desc"] = join(" / ",$salon_json);
} }
//$return["salon_desc"] = $rs["salon"]=="" ? "-Pendiente-": $rs["salon"]; //$return["salon_desc"] = $rs["salon"]=="" ? "-Pendiente-": $rs["salon"];
$return["profesor"] = $rs["profesor_id"]; $return["profesor"] = $rs["profesor_id"];
$return["profesor_nombre"] = $rs["profesor_nombre"]; $return["profesor_nombre"] = $rs["profesor_nombre"];
$return["comentario"] = $rs["descripcion"]; $return["comentario"] = $rs["descripcion"];
$return["alumnos"] = $rs["alumnos"]; $return["alumnos"] = $rs["alumnos"];
$return["aula"] = $rs["tipoaula_id"]; $return["aula"] = $rs["tipoaula_id"];
$return["aula_desc"] = $rs["tipoaula_nombre"]; $return["aula_desc"] = $rs["tipoaula_nombre"];
$return["aula_supervisor"] = $rs["tipoaula_supervisor"]; $return["aula_supervisor"] = $rs["tipoaula_supervisor"];
$return["dia"] = date('w', strtotime($rs["fecha_nueva"])); $return["dia"] = date('w', strtotime($rs["fecha_nueva"]));
$return["motivo_cancelacion"] = $rs["motivo_cancelacion"]; $return["motivo_cancelacion"] = $rs["motivo_cancelacion"];
$return["estado"] = $rs["estado_reposicion_id"]; $return["estado"] = $rs["estado_reposicion_id"];
$return["facultad"] = $rs["facultad_nombre"]; $return["facultad"] = $rs["facultad_nombre"];
$return["supervisor_nombre"] = $rs["supervisor_nombre"]; $return["supervisor_nombre"] = $rs["supervisor_nombre"];
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,135 +1,135 @@
<?php <?php
/* /*
* Actualiza reposición * Actualiza reposición
*/ */
$pag = "../asignacion_crear.php"; $pag = "../asignacion_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
define("COORDINADOR", 9); define("COORDINADOR", 9);
define("ENVIO_CORREOS", true); define("ENVIO_CORREOS", true);
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
/*if(!isset($_POST["id"]) || !isset($_POST["fecha_falta"]) || !isset($_POST["fecha_inicial"]) || !isset($_POST["hora_ini"]) || !isset($_POST["min_ini"]) || !isset($_POST["materia"]) || !isset($_POST["grupo"])){ /*if(!isset($_POST["id"]) || !isset($_POST["fecha_falta"]) || !isset($_POST["fecha_inicial"]) || !isset($_POST["hora_ini"]) || !isset($_POST["min_ini"]) || !isset($_POST["materia"]) || !isset($_POST["grupo"])){
header("Location: ".$pag."?error=0"); header("Location: ".$pag."?error=0");
exit(); exit();
}*/ }*/
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion $duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion
$fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto $fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto
$hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto $alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad $aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad
if(empty($_POST["prof"])) if(empty($_POST["prof"]))
$prof = $user["id"]; $prof = $user["id"];
else else
$prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto $prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto
//if(isset($_POST["salon"]) && $_POST["salon"] != "") //if(isset($_POST["salon"]) && $_POST["salon"] != "")
//$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto //$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
$comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto $comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto
$duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]); $duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]);
$duracion_tiempo = $duracion_rs["duracion_interval"]; $duracion_tiempo = $duracion_rs["duracion_interval"];
$hora = $hora_ini.":".$min_ini.":00"; $hora = $hora_ini.":".$min_ini.":00";
$fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora;
$fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo;
$dia_new = date('w', strtotime($fecha_new)); $dia_new = date('w', strtotime($fecha_new));
//echo $fecha_new."<br>"; //echo $fecha_new."<br>";
//echo $fecha_fin_new."<br>"; //echo $fecha_fin_new."<br>";
$fac_rs = $db->querySingle("SELECT facultad_nombre, clave_dependencia from facultad where facultad_id = :id_fac",[':id_fac' => $user->facultad["facultad_id"]] ); $fac_rs = $db->querySingle("SELECT facultad_nombre, clave_dependencia from facultad where facultad_id = :id_fac",[':id_fac' => $user->facultad["facultad_id"]] );
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
if(!empty($salon)){ if(!empty($salon)){
$salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon', $salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon',
[':id_salon' => $salon] [':id_salon' => $salon]
); );
if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){ if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
}else{ }else{
$salon_json = json_decode($salon_rs["salon_array"], true); $salon_json = json_decode($salon_rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){ if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]); unset($salon_json[0]);
} }
$salon_desc = join(" / ",$salon_json); $salon_desc = join(" / ",$salon_json);
} }
} }
//Obtiene correos //Obtiene correos
$correos_rs = $db->query('SELECT coor.usuario_correo as coordinador_correo $correos_rs = $db->query('SELECT coor.usuario_correo as coordinador_correo
from reposicion_solicitud rs from reposicion_solicitud rs
inner join profesor p on rs.profesor_id =p.profesor_id inner join profesor p on rs.profesor_id =p.profesor_id
inner join usuario u on u.usuario_id = rs.usuario_id inner join usuario u on u.usuario_id = rs.usuario_id
inner join horario_view hv on hv.horario_id = rs.horario_id inner join horario_view hv on hv.horario_id = rs.horario_id
inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord
where hv.facultad_id = :id_fac', where hv.facultad_id = :id_fac',
[':rol_coord' => COORDINADOR, ':id_fac' => $user->facultad["facultad_id"]] [':rol_coord' => COORDINADOR, ':id_fac' => $user->facultad["facultad_id"]]
); );
$coord_correos=[]; $coord_correos=[];
foreach($correos_rs as $correo){ foreach($correos_rs as $correo){
if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){ if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){
if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){ if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){
array_push($coord_correos, $correo["coordinador_correo"]); array_push($coord_correos, $correo["coordinador_correo"]);
} }
} }
} }
$correosSup_rs = $db->querySingle("SELECT DISTINCT sup.usuario_correo as coordinador_correo $correosSup_rs = $db->querySingle("SELECT DISTINCT sup.usuario_correo as coordinador_correo
FROM horario_supervisor hs FROM horario_supervisor hs
inner join usuario sup on sup.usuario_id =hs.usuario_id inner join usuario sup on sup.usuario_id =hs.usuario_id
where :id_fac = ANY(hs.facultad_id_array) where :id_fac = ANY(hs.facultad_id_array)
and sup.usuario_correo is not null and sup.usuario_correo != ''", and sup.usuario_correo is not null and sup.usuario_correo != ''",
[':id_fac' => $user->facultad["facultad_id"]] ); [':id_fac' => $user->facultad["facultad_id"]] );
//Valida que profesor no este en 2 reposiciones al mismo tiempo //Valida que profesor no este en 2 reposiciones al mismo tiempo
$traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur, :id)', $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur, :id)',
[':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo, ':id'=>$id] [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo, ':id'=>$id]
)["traslape_profesor_reposicion"]; )["traslape_profesor_reposicion"];
echo "SELECT * from traslape_profesor_reposicion($prof, '".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."', $hora, $duracion_tiempo, $id)"; echo "SELECT * from traslape_profesor_reposicion($prof, '".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."', $hora, $duracion_tiempo, $id)";
if($traslape){ if($traslape){
//header("Location:".$pag."?error=9"); //header("Location:".$pag."?error=9");
echo "traslape"; echo "traslape";
exit(); exit();
} }
/* /*
$log = new LogActividad(); $log = new LogActividad();
$desc_log = "Actualiza reposición ID[".$id."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."]"; $desc_log = "Actualiza reposición ID[".$id."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."]";
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/
try{ try{
$db->query('SELECT * from fu_asignacion_solicitud(:id, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)', $db->query('SELECT * from fu_asignacion_solicitud(:id, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)',
[':id'=> $id, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, [':id'=> $id, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora,
':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo
] ]
); );
}catch(Exception $e){ }catch(Exception $e){
//header("Location: ".$pag."?error=2"); //header("Location: ".$pag."?error=2");
print_r($e->getMessage()); print_r($e->getMessage());
echo "SELECT * from fu_asignacion_solicitud(:id, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)'"; echo "SELECT * from fu_asignacion_solicitud(:id, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)'";
print_r( print_r(
[':id'=> $id, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, [':id'=> $id, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora,
':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo
]); ]);
exit(); exit();
} }
header("Location: ".$pag); header("Location: ".$pag);
exit(); exit();
?> ?>

View File

@@ -1,26 +1,26 @@
<?php <?php
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
if(empty($_POST["id"]) || empty($_POST["hor"])){ if(empty($_POST["id"]) || empty($_POST["hor"])){
$return["error"] = "Error! No se recibió la información del usuario."; $return["error"] = "Error! No se recibió la información del usuario.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$hor = filter_input(INPUT_POST, "hor", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hor = filter_input(INPUT_POST, "hor", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$rs = $db->query('SELECT * from fs_asistenciaprofesor_horario(:id, :hor)', [':id' => $id, ':hor' => $hor]); $rs = $db->query('SELECT * from fs_asistenciaprofesor_horario(:id, :hor)', [':id' => $id, ':hor' => $hor]);
$asistArr = array(); $asistArr = array();
foreach($rs as $row){ foreach($rs as $row){
$asistArr[] = $row["registro_fecha_ideal"]; $asistArr[] = $row["registro_fecha_ideal"];
} }
$return["asistenciaArr"] = $asistArr; $return["asistenciaArr"] = $asistArr;
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,293 +1,293 @@
<? <?
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(array('error' => 'No se ha iniciado sesión')); echo json_encode(array('error' => 'No se ha iniciado sesión'));
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
$facultad_id = $user->facultad['facultad_id']; $facultad_id = $user->facultad['facultad_id'];
$avisos = $db->query( $avisos = $db->query(
"SELECT * FROM aviso "SELECT * FROM aviso
WHERE WHERE
(CURRENT_DATE BETWEEN aviso_fecha_inicial AND aviso_fecha_final) AND (CURRENT_DATE BETWEEN aviso_fecha_inicial AND aviso_fecha_final) AND
(facultad_id = :facultad_id OR :facultad_id IS NULL) AND (facultad_id = :facultad_id OR :facultad_id IS NULL) AND
aviso_estado aviso_estado
ORDER BY aviso_id DESC", ORDER BY aviso_id DESC",
array('facultad_id' => $facultad_id) array('facultad_id' => $facultad_id)
); );
/* /*
if (empty($avisos)) { if (empty($avisos)) {
header('HTTP/1.1 404 Not Found'); header('HTTP/1.1 404 Not Found');
echo json_encode(array('error' => 'No hay avisos disponibles')); echo json_encode(array('error' => 'No hay avisos disponibles'));
exit(); exit();
} }
*/ */
$avisos = array_map(fn($aviso) => array( $avisos = array_map(fn($aviso) => array(
...$aviso, ...$aviso,
'carreras' => $db->query( 'carreras' => $db->query(
"SELECT carrera_id, carrera_nombre FROM aviso_carrera "SELECT carrera_id, carrera_nombre FROM aviso_carrera
JOIN carrera USING (carrera_id) JOIN carrera USING (carrera_id)
WHERE aviso_id = :aviso_id", WHERE aviso_id = :aviso_id",
array('aviso_id' => $aviso['aviso_id']) array('aviso_id' => $aviso['aviso_id'])
), ),
'profesores' => $db->query( 'profesores' => $db->query(
"SELECT profesor_id, profesor_clave, profesor_nombre FROM aviso_profesor "SELECT profesor_id, profesor_clave, profesor_nombre FROM aviso_profesor
JOIN profesor USING (profesor_id) JOIN profesor USING (profesor_id)
WHERE aviso_id = :aviso_id", WHERE aviso_id = :aviso_id",
array('aviso_id' => $aviso['aviso_id']) array('aviso_id' => $aviso['aviso_id'])
), ),
), $avisos); ), $avisos);
echo json_encode($avisos); echo json_encode($avisos);
break; break;
case 'POST': case 'POST':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
if (empty($raw_input)) { if (empty($raw_input)) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'No se recibieron parámetros')); echo json_encode(array('error' => 'No se recibieron parámetros'));
exit(); exit();
} }
$input_data = json_decode($raw_input); $input_data = json_decode($raw_input);
if (json_last_error() !== JSON_ERROR_NONE) { if (json_last_error() !== JSON_ERROR_NONE) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'Invalid JSON format')); echo json_encode(array('error' => 'Invalid JSON format'));
exit(); exit();
} }
$schema = <<<JSON $schema = <<<JSON
{ {
"\$schema": "http://json-schema.org/draft-07/schema#", "\$schema": "http://json-schema.org/draft-07/schema#",
"type": "object", "type": "object",
"required": ["aviso_fecha_inicial", "aviso_fecha_final", "aviso_titulo", "aviso_texto"], "required": ["aviso_fecha_inicial", "aviso_fecha_final", "aviso_titulo", "aviso_texto"],
"properties": { "properties": {
"aviso_fecha_inicial": { "aviso_fecha_inicial": {
"type": "string", "type": "string",
"format": "date" "format": "date"
}, },
"aviso_fecha_final": { "aviso_fecha_final": {
"type": "string", "type": "string",
"format": "date" "format": "date"
}, },
"aviso_texto": { "aviso_texto": {
"type": "string" "type": "string"
}, },
"aviso_titulo": { "aviso_titulo": {
"type": "string" "type": "string"
}, },
"carreras": { "carreras": {
"type": "array", "type": "array",
"items": { "items": {
"type": "integer", "type": "integer",
"minimum": 1 "minimum": 1
}, },
"minItems": 0, "minItems": 0,
"uniqueItems": true "uniqueItems": true
}, },
"profesores": { "profesores": {
"type": "array", "type": "array",
"items": { "items": {
"type": "integer", "type": "integer",
"minimum": 1 "minimum": 1
}, },
"minItems": 0, "minItems": 0,
"uniqueItems": true "uniqueItems": true
} }
}, },
"anyOf": [ "anyOf": [
{"required": ["carreras"]}, {"required": ["carreras"]},
{"required": ["profesores"]} {"required": ["profesores"]}
] ]
} }
JSON; JSON;
// VALIDATE JSON SCHEMA // VALIDATE JSON SCHEMA
$validate = new JsonSchema\Validator(); $validate = new JsonSchema\Validator();
$validate->validate($input_data, json_decode($schema)); $validate->validate($input_data, json_decode($schema));
if (!$validate->isValid()) { if (!$validate->isValid()) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode( echo json_encode(
array( array(
'error' => 'El formato de la solicitud es incorrecto', 'error' => 'El formato de la solicitud es incorrecto',
'success' => false, 'success' => false,
'errors' => $validate->getErrors() 'errors' => $validate->getErrors()
) )
); );
exit(); exit();
} }
$aviso_id = $db->insert( $aviso_id = $db->insert(
'aviso', 'aviso',
array( array(
'aviso_fecha_inicial' => $input_data->aviso_fecha_inicial, 'aviso_fecha_inicial' => $input_data->aviso_fecha_inicial,
'aviso_fecha_final' => $input_data->aviso_fecha_final, 'aviso_fecha_final' => $input_data->aviso_fecha_final,
'aviso_texto' => $input_data->aviso_texto, 'aviso_texto' => $input_data->aviso_texto,
'facultad_id' => $user->facultad['facultad_id'], 'facultad_id' => $user->facultad['facultad_id'],
), ),
'aviso_id' 'aviso_id'
); );
if (isset($input_data->carreras)) { if (isset($input_data->carreras)) {
array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $aviso_id, 'carrera_id' => $carrera_id))); array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $aviso_id, 'carrera_id' => $carrera_id)));
} }
if (isset($input_data->profesores)) { if (isset($input_data->profesores)) {
array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $aviso_id, 'profesor_id' => $profesor_id))); array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $aviso_id, 'profesor_id' => $profesor_id)));
} }
echo json_encode( echo json_encode(
array( array(
'aviso_id' => $aviso_id, 'aviso_id' => $aviso_id,
'msg' => 'Aviso creado exitosamente', 'msg' => 'Aviso creado exitosamente',
'success' => true 'success' => true
) )
); );
break; break;
case 'PUT': case 'PUT':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
if (empty($raw_input)) { if (empty($raw_input)) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'No se recibieron parámetros')); echo json_encode(array('error' => 'No se recibieron parámetros'));
exit(); exit();
} }
$input_data = json_decode($raw_input); $input_data = json_decode($raw_input);
if (json_last_error() !== JSON_ERROR_NONE) { if (json_last_error() !== JSON_ERROR_NONE) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'Invalid JSON format')); echo json_encode(array('error' => 'Invalid JSON format'));
exit(); exit();
} }
$schema = <<<JSON $schema = <<<JSON
{ {
"\$schema": "http://json-schema.org/draft-07/schema#", "\$schema": "http://json-schema.org/draft-07/schema#",
"type": "object", "type": "object",
"required": ["aviso_id", "aviso_fecha_final"], "required": ["aviso_id", "aviso_fecha_final"],
"properties": { "properties": {
"aviso_id": { "aviso_id": {
"type": "integer", "type": "integer",
"minimum": 1 "minimum": 1
}, },
"aviso_fecha_final": { "aviso_fecha_final": {
"type": "string", "type": "string",
"format": "date" "format": "date"
} }
} }
} }
JSON; JSON;
// VALIDATE JSON SCHEMA // VALIDATE JSON SCHEMA
$validate = new JsonSchema\Validator(); $validate = new JsonSchema\Validator();
$validate->validate($input_data, json_decode($schema)); $validate->validate($input_data, json_decode($schema));
if (!$validate->isValid()) { if (!$validate->isValid()) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode( echo json_encode(
array( array(
'error' => 'El formato de la solicitud es incorrecto', 'error' => 'El formato de la solicitud es incorrecto',
'errors' => $validate->getErrors(), 'errors' => $validate->getErrors(),
'success' => false, 'success' => false,
) )
); );
exit(); exit();
} }
$db->where('aviso_id', $input_data->aviso_id) $db->where('aviso_id', $input_data->aviso_id)
->update( ->update(
'aviso', 'aviso',
array( array(
'aviso_fecha_final' => $input_data->aviso_fecha_final, 'aviso_fecha_final' => $input_data->aviso_fecha_final,
), ),
); );
if (isset($input_data->carreras)) { if (isset($input_data->carreras)) {
$db->where('aviso_id', $input_data->aviso_id)->delete('aviso_carrera'); $db->where('aviso_id', $input_data->aviso_id)->delete('aviso_carrera');
array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $input_data->aviso_id, 'carrera_id' => $carrera_id))); array_walk($input_data->carreras, fn($carrera_id) => $db->insert('aviso_carrera', array('aviso_id' => $input_data->aviso_id, 'carrera_id' => $carrera_id)));
} }
if (isset($input_data->profesores)) { if (isset($input_data->profesores)) {
$db->where('aviso_id', $input_data->aviso_id)->delete('aviso_profesor'); $db->where('aviso_id', $input_data->aviso_id)->delete('aviso_profesor');
array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $input_data->aviso_id, 'profesor_id' => $profesor_id))); array_walk($input_data->profesores, fn($profesor_id) => $db->insert('aviso_profesor', array('aviso_id' => $input_data->aviso_id, 'profesor_id' => $profesor_id)));
} }
echo json_encode( echo json_encode(
array( array(
'msg' => 'Aviso actualizado exitosamente', 'msg' => 'Aviso actualizado exitosamente',
'success' => true 'success' => true
) )
); );
break; break;
case 'DELETE': case 'DELETE':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
if (empty($raw_input)) { if (empty($raw_input)) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'No se recibieron parámetros')); echo json_encode(array('error' => 'No se recibieron parámetros'));
exit(); exit();
} }
$input_data = json_decode($raw_input); $input_data = json_decode($raw_input);
if (json_last_error() !== JSON_ERROR_NONE) { if (json_last_error() !== JSON_ERROR_NONE) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(array('error' => 'Invalid JSON format')); echo json_encode(array('error' => 'Invalid JSON format'));
exit(); exit();
} }
$schema = <<<JSON $schema = <<<JSON
{ {
"\$schema": "http://json-schema.org/draft-07/schema#", "\$schema": "http://json-schema.org/draft-07/schema#",
"type": "object", "type": "object",
"required": ["aviso_id"], "required": ["aviso_id"],
"properties": { "properties": {
"aviso_id": { "aviso_id": {
"type": "integer", "type": "integer",
"minimum": 1 "minimum": 1
} }
} }
} }
JSON; JSON;
// VALIDATE JSON SCHEMA // VALIDATE JSON SCHEMA
$validate = new JsonSchema\Validator(); $validate = new JsonSchema\Validator();
$validate->validate($input_data, json_decode($schema)); $validate->validate($input_data, json_decode($schema));
if (!$validate->isValid()) { if (!$validate->isValid()) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode( echo json_encode(
array( array(
'error' => 'El formato de la solicitud es incorrecto', 'error' => 'El formato de la solicitud es incorrecto',
'errors' => $validate->getErrors(), 'errors' => $validate->getErrors(),
'success' => false, 'success' => false,
) )
); );
exit(); exit();
} }
$result = $db->where('aviso_id', $input_data->aviso_id)->update('aviso', array('aviso_estado' => false)); $result = $db->where('aviso_id', $input_data->aviso_id)->update('aviso', array('aviso_estado' => false));
echo json_encode( echo json_encode(
array( array(
'msg' => 'Aviso eliminado exitosamente', 'msg' => 'Aviso eliminado exitosamente',
'success' => true, 'success' => true,
'result' => $result 'result' => $result
) )
); );
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode( echo json_encode(
array( array(
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
) )
); );
} }

View File

@@ -1,66 +1,66 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
// Fetch all puestos // Fetch all puestos
$facultad_id = $user->facultad['facultad_id']; $facultad_id = $user->facultad['facultad_id'];
$periodo_nivel_id = $db->where('periodo_id', $user->periodo_id)->getOne('periodo', 'nivel_id')['nivel_id']; $periodo_nivel_id = $db->where('periodo_id', $user->periodo_id)->getOne('periodo', 'nivel_id')['nivel_id'];
$carreras = $db->query(<<<SQL $carreras = $db->query(<<<SQL
SELECT carrera_id, carrera_nombre, clave_carrera, SELECT carrera_id, carrera_nombre, clave_carrera,
facultad_id, facultad_nombre, facultad_id, facultad_nombre,
nivel_id, nivel_nombre nivel_id, nivel_nombre
FROM carrera FROM carrera
join nivel using (nivel_id) join nivel using (nivel_id)
join facultad using (facultad_id) join facultad using (facultad_id)
WHERE facultad_id = :facultad_id OR :facultad_id IS NULL AND WHERE facultad_id = :facultad_id OR :facultad_id IS NULL AND
nivel.nivel_id = :periodo_nivel_id nivel.nivel_id = :periodo_nivel_id
ORDER BY facultad_nombre, carrera_nombre ORDER BY facultad_nombre, carrera_nombre
SQL, [ SQL, [
'facultad_id' => $facultad_id, 'facultad_id' => $facultad_id,
'periodo_nivel_id' => $periodo_nivel_id 'periodo_nivel_id' => $periodo_nivel_id
]); ]);
echo json_encode($carreras); echo json_encode($carreras);
break; break;
case 'PUT': case 'PUT':
// Update carrera {nivel_id} // Update carrera {nivel_id}
$raw = file_get_contents('php://input'); $raw = file_get_contents('php://input');
$data = json_decode($raw, true); $data = json_decode($raw, true);
if (!isset($data['carrera_id'], $data['nivel_id'])) { if (!isset($data['carrera_id'], $data['nivel_id'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta el id de la carrera o el nivel']); echo json_encode(['error' => 'Falta el id de la carrera o el nivel']);
exit(); exit();
} }
$carrera_id = $data['carrera_id']; $carrera_id = $data['carrera_id'];
$nivel_id = $data['nivel_id']; $nivel_id = $data['nivel_id'];
$db->where('carrera_id', $carrera_id)->update('carrera', ['nivel_id' => $nivel_id]); $db->where('carrera_id', $carrera_id)->update('carrera', ['nivel_id' => $nivel_id]);
$carrera_nombre = $db->where('carrera_id', $carrera_id)->getOne('carrera', 'carrera_nombre')['carrera_nombre']; $carrera_nombre = $db->where('carrera_id', $carrera_id)->getOne('carrera', 'carrera_nombre')['carrera_nombre'];
$nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre']; $nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre'];
echo json_encode(['success' => "$carrera_nombre actualizada a $nivel_nombre"]); echo json_encode(['success' => "$carrera_nombre actualizada a $nivel_nombre"]);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,20 +1,20 @@
<?php <?php
require_once '../class/mailer.php'; require_once '../class/mailer.php';
require_once('../include/phpmailer/PHPMailerAutoload.php'); require_once('../include/phpmailer/PHPMailerAutoload.php');
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
if(!isset($_GET["correo"])){ if(!isset($_GET["correo"])){
echo "Debes especificar la dirección a la que se enviará el correo <strong>?correo=</strong>"; echo "Debes especificar la dirección a la que se enviará el correo <strong>?correo=</strong>";
exit(); exit();
} }
$to = $_GET["correo"]; $to = $_GET["correo"];
$texto = "<h1>Esto es una prueba automatizada</h1><p>El correo se envió atutomáticamente, no debes hacer nada más.</p>"; $texto = "<h1>Esto es una prueba automatizada</h1><p>El correo se envió atutomáticamente, no debes hacer nada más.</p>";
$asunto="Prueba"; $asunto="Prueba";
Mailer::enviarCorreo($to, $asunto, $texto, true); Mailer::enviarCorreo($to, $asunto, $texto, true);
echo "Enviado!".date("H:i:s"); echo "Enviado!".date("H:i:s");
?> ?>

View File

@@ -1,46 +1,46 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
$profesor_id = $db $profesor_id = $db
->where('profesor_clave', $_GET['profesor']) ->where('profesor_clave', $_GET['profesor'])
->getOne('profesor', 'profesor_id'); ->getOne('profesor', 'profesor_id');
// Fetch all puestos // Fetch all puestos
$horarios = $db->query(<<<SQL $horarios = $db->query(<<<SQL
SELECT * FROM horario SELECT * FROM horario
NATURAL JOIN horario_profesor NATURAL JOIN horario_profesor
NATURAL JOIN facultad NATURAL JOIN facultad
NATURAL LEFT JOIN materia NATURAL LEFT JOIN materia
NATURAL LEFT JOIN carrera NATURAL LEFT JOIN carrera
WHERE periodo_id = ? AND profesor_id = ? WHERE periodo_id = ? AND profesor_id = ?
SQL, SQL,
[$user->periodo_id, $profesor_id['profesor_id']] [$user->periodo_id, $profesor_id['profesor_id']]
); );
echo json_encode($horarios); echo json_encode($horarios);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,76 +1,76 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'POST': case 'POST':
// check parameters // check parameters
$raw = file_get_contents('php://input'); $raw = file_get_contents('php://input');
$post_data = json_decode($raw, true); $post_data = json_decode($raw, true);
$data = $db->querySingle( $data = $db->querySingle(
'WITH HORARIOS AS ( 'WITH HORARIOS AS (
SELECT * SELECT *
FROM horario FROM horario
JOIN horario_profesor USING (horario_id) JOIN horario_profesor USING (horario_id)
WHERE horario.periodo_id = :periodo_id WHERE horario.periodo_id = :periodo_id
) )
INSERT INTO registro (profesor_id, horario_id, registro_fecha_ideal, registro_justificada, justificador_id, registro_fecha_justificacion, justificacion) INSERT INTO registro (profesor_id, horario_id, registro_fecha_ideal, registro_justificada, justificador_id, registro_fecha_justificacion, justificacion)
VALUES (:profesor_id, :horario_id, :registro_fecha_ideal, :registro_justificada, :justificador_id, NOW(), :justificacion) VALUES (:profesor_id, :horario_id, :registro_fecha_ideal, :registro_justificada, :justificador_id, NOW(), :justificacion)
ON CONFLICT (profesor_id, horario_id, registro_fecha_ideal) ON CONFLICT (profesor_id, horario_id, registro_fecha_ideal)
DO UPDATE SET registro_justificada = :registro_justificada, justificador_id = :justificador_id, registro_fecha_justificacion = NOW(), justificacion = :justificacion DO UPDATE SET registro_justificada = :registro_justificada, justificador_id = :justificador_id, registro_fecha_justificacion = NOW(), justificacion = :justificacion
RETURNING *', RETURNING *',
array( array(
'periodo_id' => $user->periodo_id, 'periodo_id' => $user->periodo_id,
'profesor_id' => $post_data['profesor_id'], 'profesor_id' => $post_data['profesor_id'],
'horario_id' => $post_data['horario_id'], 'horario_id' => $post_data['horario_id'],
'registro_fecha_ideal' => $post_data['registro_fecha_ideal'], 'registro_fecha_ideal' => $post_data['registro_fecha_ideal'],
'registro_justificada' => $post_data['registro_justificada'], 'registro_justificada' => $post_data['registro_justificada'],
'justificador_id' => $user->user['id'], 'justificador_id' => $user->user['id'],
'justificacion' => empty($post_data['justificacion']) ? null : $post_data['justificacion'], 'justificacion' => empty($post_data['justificacion']) ? null : $post_data['justificacion'],
) )
); );
$data_justificador = $db->querySingle( $data_justificador = $db->querySingle(
"SELECT justificador.usuario_nombre as justificador_nombre, "SELECT justificador.usuario_nombre as justificador_nombre,
justificador.usuario_clave as justificador_clave, justificador.usuario_clave as justificador_clave,
facultad.facultad_nombre as justificador_facultad, rol.rol_titulo as justificador_rol facultad.facultad_nombre as justificador_facultad, rol.rol_titulo as justificador_rol
FROM USUARIO JUSTIFICADOR FROM USUARIO JUSTIFICADOR
JOIN ROL on ROL.rol_id = justificador.rol_id JOIN ROL on ROL.rol_id = justificador.rol_id
LEFT JOIN facultad on facultad.facultad_id = justificador.facultad_id LEFT JOIN facultad on facultad.facultad_id = justificador.facultad_id
where justificador.usuario_id = :justificador_id", where justificador.usuario_id = :justificador_id",
array( array(
'justificador_id' => $user->user['id'], 'justificador_id' => $user->user['id'],
) )
); );
// exit('exit'); // exit('exit');
echo json_encode(array_merge($data, $data_justificador), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); echo json_encode(array_merge($data, $data_justificador), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} catch (Exception $e) { } catch (Exception $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,31 +1,31 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
// Fetch all puestos // Fetch all puestos
$nivel = $db->get('nivel'); $nivel = $db->get('nivel');
echo json_encode($nivel); echo json_encode($nivel);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,44 +1,44 @@
<? <?
#input $_GET['id_espacio_sgu'] #input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ] #output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8'); header('Content-Type: application/json charset=utf-8');
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
$ruta = "../"; $ruta = "../";
require_once $ruta . "class/c_login.php"; require_once $ruta . "class/c_login.php";
if (!isset($_SESSION['user'])) { if (!isset($_SESSION['user'])) {
http_response_code(401); http_response_code(401);
die(json_encode(['error' => 'unauthorized'])); die(json_encode(['error' => 'unauthorized']));
} }
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
// check method // check method
if ($_SERVER['REQUEST_METHOD'] !== 'GET') { if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
http_response_code(405); http_response_code(405);
die(json_encode(['error' => 'method not allowed'])); die(json_encode(['error' => 'method not allowed']));
} }
const JSON_OPTIONS = JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR; const JSON_OPTIONS = JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR;
try { try {
$data = $db->querySingle("SELECT *, LEAST(periodo_fecha_fin, CURRENT_DATE) as fecha_final FROM periodo WHERE periodo_id = ?", array($user->periodo_id)); $data = $db->querySingle("SELECT *, LEAST(periodo_fecha_fin, CURRENT_DATE) as fecha_final FROM periodo WHERE periodo_id = ?", array($user->periodo_id));
$last_query = [ $last_query = [
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
]; ];
echo json_encode($data, JSON_OPTIONS); echo json_encode($data, JSON_OPTIONS);
} catch (PDOException $th) { } catch (PDOException $th) {
http_response_code(500); http_response_code(500);
echo json_encode([ echo json_encode([
'error' => $th->getMessage(), 'error' => $th->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
], JSON_OPTIONS); ], JSON_OPTIONS);
exit; exit;
} catch (Exception $th) { } catch (Exception $th) {
http_response_code(500); http_response_code(500);
echo json_encode([ echo json_encode([
'error' => $th->getMessage(), 'error' => $th->getMessage(),
], JSON_OPTIONS); ], JSON_OPTIONS);
exit; exit;
} }

View File

@@ -1,204 +1,204 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
// Fetch all puestos // Fetch all puestos
$periodo_id = $user->periodo_id; $periodo_id = $user->periodo_id;
if (is_null($user->facultad['facultad_id'])) { if (is_null($user->facultad['facultad_id'])) {
$periodos = $db $periodos = $db
//->where('CURRENT_DATE BETWEEN periodo_fecha_inicio AND periodo_fecha_fin') //->where('CURRENT_DATE BETWEEN periodo_fecha_inicio AND periodo_fecha_fin')
->join('nivel', 'nivel.nivel_id = periodo.nivel_id') ->join('nivel', 'nivel.nivel_id = periodo.nivel_id')
->orderBy('periodo_id') ->orderBy('periodo_id')
->get('periodo', null, 'periodo.*, nivel_nombre as nivel'); ->get('periodo', null, 'periodo.*, nivel_nombre as nivel');
} else { } else {
$periodos = $db->query( $periodos = $db->query(
"SELECT DISTINCT periodo.*, nivel_nombre as nivel FROM periodo "SELECT DISTINCT periodo.*, nivel_nombre as nivel FROM periodo
JOIN horario_view USING (periodo_id) JOIN horario_view USING (periodo_id)
JOIN nivel ON nivel.nivel_id = periodo.nivel_id JOIN nivel ON nivel.nivel_id = periodo.nivel_id
WHERE /*CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin WHERE /*CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin
AND */facultad_id = :facultad_id AND */facultad_id = :facultad_id
ORDER BY periodo_id ORDER BY periodo_id
", ",
['facultad_id' => $user->facultad['facultad_id']] ['facultad_id' => $user->facultad['facultad_id']]
); );
} }
echo json_encode($periodos); echo json_encode($periodos);
break; break;
case 'PUT': case 'PUT':
// Update nivel_id of a periodo // Update nivel_id of a periodo
$raw = file_get_contents('php://input'); $raw = file_get_contents('php://input');
$data = json_decode($raw, true); $data = json_decode($raw, true);
if (!isset($data['action'])) { if (!isset($data['action'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta la acción a realizar']); echo json_encode(['error' => 'Falta la acción a realizar']);
exit(); exit();
} }
switch ($data['action']) { switch ($data['action']) {
case 'changeNivel': case 'changeNivel':
if (!isset($data['periodo_id'], $data['nivel_id'])) { if (!isset($data['periodo_id'], $data['nivel_id'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta el id del periodo o el nivel']); echo json_encode(['error' => 'Falta el id del periodo o el nivel']);
exit(); exit();
} }
$periodo_id = $data['periodo_id']; $periodo_id = $data['periodo_id'];
$nivel_id = $data['nivel_id']; $nivel_id = $data['nivel_id'];
$db->where('periodo_id', $periodo_id)->update('periodo', ['nivel_id' => $nivel_id]); $db->where('periodo_id', $periodo_id)->update('periodo', ['nivel_id' => $nivel_id]);
$periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
$nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre']; $nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre'];
echo json_encode([ echo json_encode([
'success' => 'success' =>
"El nivel del periodo $periodo_nombre ha sido cambiado a $nivel_nombre" "El nivel del periodo $periodo_nombre ha sido cambiado a $nivel_nombre"
]); ]);
break; break;
case 'changeFechaInicio': case 'changeFechaInicio':
if (!isset($data['periodo_id'], $data['periodo_fecha_inicio'])) { if (!isset($data['periodo_id'], $data['periodo_fecha_inicio'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta el id del periodo o la fecha de inicio']); echo json_encode(['error' => 'Falta el id del periodo o la fecha de inicio']);
exit(); exit();
} }
$periodo_id = $data['periodo_id']; $periodo_id = $data['periodo_id'];
$periodo_fecha_inicio = $data['periodo_fecha_inicio']; $periodo_fecha_inicio = $data['periodo_fecha_inicio'];
$db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_inicio' => $periodo_fecha_inicio]); $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_inicio' => $periodo_fecha_inicio]);
$periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
echo json_encode([ echo json_encode([
'success' => 'success' =>
"La fecha de inicio del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_inicio" "La fecha de inicio del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_inicio"
]); ]);
break; break;
case 'changeFechaFin': case 'changeFechaFin':
if (!isset($data['periodo_id'], $data['periodo_fecha_fin'])) { if (!isset($data['periodo_id'], $data['periodo_fecha_fin'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta el id del periodo o la fecha de fin']); echo json_encode(['error' => 'Falta el id del periodo o la fecha de fin']);
exit(); exit();
} }
$periodo_id = $data['periodo_id']; $periodo_id = $data['periodo_id'];
$periodo_fecha_fin = $data['periodo_fecha_fin']; $periodo_fecha_fin = $data['periodo_fecha_fin'];
$db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_fin' => $periodo_fecha_fin]); $db->where('periodo_id', $periodo_id)->update('periodo', ['periodo_fecha_fin' => $periodo_fecha_fin]);
$periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
echo json_encode([ echo json_encode([
'success' => 'success' =>
"La fecha de fin del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_fin" "La fecha de fin del periodo $periodo_nombre ha sido cambiada a $periodo_fecha_fin"
]); ]);
break; break;
case 'updatePeriodo': case 'updatePeriodo':
if (!isset($data['periodo_id'], $data['periodo_nombre'], $data['id_periodo_sgu'], $data['periodo_clave'])) { if (!isset($data['periodo_id'], $data['periodo_nombre'], $data['id_periodo_sgu'], $data['periodo_clave'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Faltan datos para actualizar el periodo']); echo json_encode(['error' => 'Faltan datos para actualizar el periodo']);
exit(); exit();
} }
$periodo_id = $data['periodo_id']; $periodo_id = $data['periodo_id'];
$db->where('periodo_id', $periodo_id)->update('periodo', array_filter($data, fn($key) => in_array($key, [ $db->where('periodo_id', $periodo_id)->update('periodo', array_filter($data, fn($key) => in_array($key, [
'periodo_nombre', 'periodo_nombre',
'id_periodo_sgu', 'id_periodo_sgu',
'periodo_clave', 'periodo_clave',
]), ARRAY_FILTER_USE_KEY)); ]), ARRAY_FILTER_USE_KEY));
$periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
echo json_encode([ echo json_encode([
'success' => 'success' =>
"El periodo $periodo_nombre ha sido actualizado" "El periodo $periodo_nombre ha sido actualizado"
]); ]);
break; break;
default: default:
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Acción no válida']); echo json_encode(['error' => 'Acción no válida']);
exit(); exit();
} }
break; break;
case 'POST': case 'POST':
$raw = file_get_contents('php://input'); $raw = file_get_contents('php://input');
$data = json_decode($raw, true); $data = json_decode($raw, true);
if (!isset($data['periodo_nombre'], $data['nivel_id'], $data['periodo_fecha_inicio'], $data['periodo_fecha_fin'])) { if (!isset($data['periodo_nombre'], $data['nivel_id'], $data['periodo_fecha_inicio'], $data['periodo_fecha_fin'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Faltan datos para crear el periodo']); echo json_encode(['error' => 'Faltan datos para crear el periodo']);
exit(); exit();
} }
$newPeriodo = $db->insert( $newPeriodo = $db->insert(
'periodo', 'periodo',
array_filter($data, fn($key) => in_array($key, [ array_filter($data, fn($key) => in_array($key, [
'periodo_nombre', 'periodo_nombre',
'nivel_id', 'nivel_id',
'periodo_fecha_inicio', 'periodo_fecha_inicio',
'periodo_fecha_fin', 'periodo_fecha_fin',
'periodo_clave', 'periodo_clave',
'id_periodo_sgu', 'id_periodo_sgu',
]), ARRAY_FILTER_USE_KEY) ]), ARRAY_FILTER_USE_KEY)
); );
echo json_encode([ echo json_encode([
'success' => true, 'success' => true,
'message' => 'El periodo ha sido creado', 'message' => 'El periodo ha sido creado',
'periodo' => $newPeriodo 'periodo' => $newPeriodo
]); ]);
break; break;
case 'DELETE': case 'DELETE':
// Delete a periodo // Delete a periodo
$raw = file_get_contents('php://input'); $raw = file_get_contents('php://input');
$data = json_decode($raw, true); $data = json_decode($raw, true);
if (!isset($data['periodo_id'])) { if (!isset($data['periodo_id'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Falta el id del periodo']); echo json_encode(['error' => 'Falta el id del periodo']);
exit(); exit();
} }
$periodo_id = $data['periodo_id']; $periodo_id = $data['periodo_id'];
$periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre']; $periodo_nombre = $db->where('periodo_id', $periodo_id)->getOne('periodo', 'periodo_nombre')['periodo_nombre'];
$db->where('periodo_id', $periodo_id)->delete('periodo'); $db->where('periodo_id', $periodo_id)->delete('periodo');
echo json_encode([ echo json_encode([
'success' => true, 'success' => true,
'message' => "El periodo $periodo_nombre ha sido eliminado" 'message' => "El periodo $periodo_nombre ha sido eliminado"
]); ]);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} catch (Exception $e) { } catch (Exception $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,135 +1,135 @@
<? <?
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
$facultad = $_GET['facultad'] ?? $user->facultad['facultad_id'] ?? null; $facultad = $_GET['facultad'] ?? $user->facultad['facultad_id'] ?? null;
$porcentaje = $_GET['porcentaje'] ?? null; $porcentaje = $_GET['porcentaje'] ?? null;
$faltas = $_GET['faltas'] ?? null; $faltas = $_GET['faltas'] ?? null;
if (!isset($facultad) || !is_numeric($facultad)) { if (!isset($facultad) || !is_numeric($facultad)) {
$error = 'No se ha seleccionado una facultad'; $error = 'No se ha seleccionado una facultad';
} else if ((!isset($faltas) || !is_numeric($faltas)) && (!isset($porcentaje) || !is_numeric($porcentaje))) { } else if ((!isset($faltas) || !is_numeric($faltas)) && (!isset($porcentaje) || !is_numeric($porcentaje))) {
$error = 'Debe especificar las faltas o el porcentaje'; $error = 'Debe especificar las faltas o el porcentaje';
} else if (isset($faltas) && (!is_numeric($faltas) || $faltas <= 0)) { } else if (isset($faltas) && (!is_numeric($faltas) || $faltas <= 0)) {
$error = 'Las faltas deben ser un número mayor a 0'; $error = 'Las faltas deben ser un número mayor a 0';
} else if (isset($porcentaje) && (!is_numeric($porcentaje) || $porcentaje <= 0)) { } else if (isset($porcentaje) && (!is_numeric($porcentaje) || $porcentaje <= 0)) {
$error = 'El porcentaje debe ser un número mayor a 0'; $error = 'El porcentaje debe ser un número mayor a 0';
} else if (isset($faltas) && isset($porcentaje)) { } else if (isset($faltas) && isset($porcentaje)) {
$error = 'No se puede especificar las faltas y el porcentaje al mismo tiempo'; $error = 'No se puede especificar las faltas y el porcentaje al mismo tiempo';
} else if (!isset($facultad) || !is_numeric($facultad)) { } else if (!isset($facultad) || !is_numeric($facultad)) {
$error = 'Debe especificar una facultad'; $error = 'Debe especificar una facultad';
} }
if (isset($error)) { if (isset($error)) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => $error]); echo json_encode(['error' => $error]);
exit(); exit();
} }
// Initialize the data array // Initialize the data array
$data = array(); $data = array();
// Check if 'profesor' or 'supervisor' is set and prepare the specific part of the SQL query accordingly. // Check if 'profesor' or 'supervisor' is set and prepare the specific part of the SQL query accordingly.
if (isset($_GET['profesor']) || isset($_GET['supervisor'])) { if (isset($_GET['profesor']) || isset($_GET['supervisor'])) {
$condition = isset($_GET['profesor']) $condition = isset($_GET['profesor'])
? "r.registro_fecha IS NULL AND NOT COALESCE(r.registro_justificada, FALSE)" ? "r.registro_fecha IS NULL AND NOT COALESCE(r.registro_justificada, FALSE)"
: "estado_supervisor_id = 2"; : "estado_supervisor_id = 2";
$filter = isset($faltas) $filter = isset($faltas)
? "afcp.faltas >= :faltas" ? "afcp.faltas >= :faltas"
: "afcp.porcentaje >= :porcentaje"; : "afcp.porcentaje >= :porcentaje";
// Prepare the SQL query with placeholders for parameters // Prepare the SQL query with placeholders for parameters
$data = array_column($db->query( $data = array_column($db->query(
"WITH fechas AS ( "WITH fechas AS (
SELECT SELECT
h.horario_id, h.horario_id,
fechas_clase(h.horario_id, true) AS registro_fecha_ideal, fechas_clase(h.horario_id, true) AS registro_fecha_ideal,
hp.profesor_id hp.profesor_id
FROM horario h FROM horario h
JOIN horario_profesor hp USING (horario_id) JOIN horario_profesor hp USING (horario_id)
WHERE (h.PERIODO_ID, h.FACULTAD_ID) = (:periodo_id, :facultad_id) AND hp.profesor_id <> 0 WHERE (h.PERIODO_ID, h.FACULTAD_ID) = (:periodo_id, :facultad_id) AND hp.profesor_id <> 0
), ),
asistencia_faltas AS ( asistencia_faltas AS (
SELECT SELECT
f.profesor_id, f.profesor_id,
COUNT(1) AS total, COUNT(1) AS total,
COUNT(1) FILTER (WHERE $condition AND f.registro_fecha_ideal <= current_date) AS faltas COUNT(1) FILTER (WHERE $condition AND f.registro_fecha_ideal <= current_date) AS faltas
FROM fechas f FROM fechas f
LEFT JOIN registro r USING (registro_fecha_ideal, horario_id, profesor_id) LEFT JOIN registro r USING (registro_fecha_ideal, horario_id, profesor_id)
GROUP BY f.profesor_id GROUP BY f.profesor_id
), ),
asistencia_faltas_con_porcentaje AS ( asistencia_faltas_con_porcentaje AS (
SELECT SELECT
af.profesor_id, af.profesor_id,
af.faltas, af.faltas,
af.total, af.total,
CASE CASE
WHEN af.total > 0 THEN ROUND((af.faltas::NUMERIC / af.total) * 100, 2) WHEN af.total > 0 THEN ROUND((af.faltas::NUMERIC / af.total) * 100, 2)
ELSE NULL ELSE NULL
END AS porcentaje END AS porcentaje
FROM asistencia_faltas af FROM asistencia_faltas af
WHERE af.faltas > 0 WHERE af.faltas > 0
) )
SELECT SELECT
json_build_object( json_build_object(
'profesor', json_build_object( 'profesor', json_build_object(
'profesor_nombre', p.profesor_nombre, 'profesor_nombre', p.profesor_nombre,
'profesor_clave', p.profesor_clave, 'profesor_clave', p.profesor_clave,
'profesor_correo', p.profesor_correo 'profesor_correo', p.profesor_correo
), ),
'profesor_id', afcp.profesor_id, 'profesor_id', afcp.profesor_id,
'faltas', afcp.faltas, 'faltas', afcp.faltas,
'total', afcp.total, 'total', afcp.total,
'porcentaje', afcp.porcentaje 'porcentaje', afcp.porcentaje
) AS result_json ) AS result_json
FROM asistencia_faltas_con_porcentaje afcp FROM asistencia_faltas_con_porcentaje afcp
JOIN profesor p USING (profesor_id) JOIN profesor p USING (profesor_id)
WHERE $filter WHERE $filter
ORDER BY afcp.porcentaje DESC; ORDER BY afcp.porcentaje DESC;
", ",
[ [
'periodo_id' => $user->periodo_id, 'periodo_id' => $user->periodo_id,
'facultad_id' => $facultad, 'facultad_id' => $facultad,
] + (isset($faltas) ] + (isset($faltas)
? ['faltas' => $faltas] ? ['faltas' => $faltas]
: ['porcentaje' => $porcentaje]) : ['porcentaje' => $porcentaje])
), 'result_json'); ), 'result_json');
} else { } else {
// Send a 400 Bad Request header and an error message in JSON format // Send a 400 Bad Request header and an error message in JSON format
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Especifique si las faltas son de profesor o supervisor']); echo json_encode(['error' => 'Especifique si las faltas son de profesor o supervisor']);
exit(); exit();
} }
if (empty($data)) { if (empty($data)) {
header('HTTP/1.1 404 Not Found'); header('HTTP/1.1 404 Not Found');
echo json_encode(['error' => 'No se encontraron faltas']); echo json_encode(['error' => 'No se encontraron faltas']);
} else { } else {
echo json_encode( echo json_encode(
array_map(fn($item) => json_decode($item), $data) array_map(fn($item) => json_decode($item), $data)
); );
} }
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
]); ]);
} }

View File

@@ -1,113 +1,113 @@
<?php <?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php"; require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json'); header('Content-Type: application/json');
if (!Login::is_logged()) { if (!Login::is_logged()) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
echo json_encode(['error' => 'No se ha iniciado sesión']); echo json_encode(['error' => 'No se ha iniciado sesión']);
exit(); exit();
} }
$user = Login::get_user(); $user = Login::get_user();
try { try {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
case 'GET': case 'GET':
// Fetch all puestos // Fetch all puestos
$facultad_id = $user->facultad['facultad_id'] ?? -1; $facultad_id = $user->facultad['facultad_id'] ?? -1;
$puestos = array_map( $puestos = array_map(
fn($p) => array( fn($p) => array(
...$p, ...$p,
'materias' => $db->where('puesto_id', $p['puesto_id']) 'materias' => $db->where('puesto_id', $p['puesto_id'])
->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT') ->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT')
->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]), ->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]),
'encargado' => $db->where('puesto_id', $p['puesto_id']) 'encargado' => $db->where('puesto_id', $p['puesto_id'])
->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT') ->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT')
->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']), ->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']),
), ),
$db->orderBy('puesto.nombre', 'desc') $db->orderBy('puesto.nombre', 'desc')
->where('facultad_id', $facultad_id) ->where('facultad_id', $facultad_id)
->get(tableName: 'puesto', columns: 'puesto_id, nombre'), ->get(tableName: 'puesto', columns: 'puesto_id, nombre'),
); );
echo json_encode($puestos); echo json_encode($puestos);
break; break;
case 'POST': case 'POST':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
$input_data = json_decode($raw_input, true); $input_data = json_decode($raw_input, true);
if (!$input_data || !isset($input_data['puesto_nombre'])) { if (!$input_data || !isset($input_data['puesto_nombre'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Datos inválidos']); echo json_encode(['error' => 'Datos inválidos']);
exit(); exit();
} }
$puesto = $db->insert('puesto', [ $puesto = $db->insert('puesto', [
'nombre' => $input_data['puesto_nombre'], 'nombre' => $input_data['puesto_nombre'],
'facultad_id' => $user->facultad['facultad_id'], 'facultad_id' => $user->facultad['facultad_id'],
], ['puesto_id', 'nombre', 'facultad_id']); ], ['puesto_id', 'nombre', 'facultad_id']);
echo json_encode( echo json_encode(
array( array(
...$puesto, ...$puesto,
'materias' => [], 'materias' => [],
'encargado' => null, 'encargado' => null,
), ),
); );
break; break;
case 'PUT': case 'PUT':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
$input_data = json_decode($raw_input, true); $input_data = json_decode($raw_input, true);
if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) { if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Datos inválidos']); echo json_encode(['error' => 'Datos inválidos']);
exit(); exit();
} }
$db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia'); $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia');
$db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario'); $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario');
foreach ($input_data['materias'] as $materia_id) { foreach ($input_data['materias'] as $materia_id) {
$db->insert('puesto_materia', [ $db->insert('puesto_materia', [
'puesto_id' => $input_data['puesto_id'], 'puesto_id' => $input_data['puesto_id'],
'materia_id' => $materia_id, 'materia_id' => $materia_id,
]); ]);
} }
if (isset($input_data['usuario_id'])) if (isset($input_data['usuario_id']))
$db->insert('puesto_usuario', [ $db->insert('puesto_usuario', [
'puesto_id' => $input_data['puesto_id'], 'puesto_id' => $input_data['puesto_id'],
'usuario_id' => $input_data['usuario_id'], 'usuario_id' => $input_data['usuario_id'],
]); ]);
echo json_encode(['msg' => 'Puesto actualizado exitosamente']); echo json_encode(['msg' => 'Puesto actualizado exitosamente']);
break; break;
case 'DELETE': case 'DELETE':
$raw_input = file_get_contents('php://input'); $raw_input = file_get_contents('php://input');
$input_data = json_decode($raw_input, true); $input_data = json_decode($raw_input, true);
if (!$input_data || !isset($input_data['puesto_id'])) { if (!$input_data || !isset($input_data['puesto_id'])) {
header('HTTP/1.1 400 Bad Request'); header('HTTP/1.1 400 Bad Request');
echo json_encode(['error' => 'Datos inválidos']); echo json_encode(['error' => 'Datos inválidos']);
exit(); exit();
} }
$db->where('puesto_id', $input_data['puesto_id'])->delete('puesto'); $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto');
echo json_encode(['msg' => 'Puesto eliminado exitosamente']); echo json_encode(['msg' => 'Puesto eliminado exitosamente']);
break; break;
default: default:
header('HTTP/1.1 405 Method Not Allowed'); header('HTTP/1.1 405 Method Not Allowed');
echo json_encode(['error' => 'Método no permitido']); echo json_encode(['error' => 'Método no permitido']);
break; break;
} }
} catch (PDOException $e) { } catch (PDOException $e) {
echo json_encode([ echo json_encode([
'error' => $e->getMessage(), 'error' => $e->getMessage(),
'query' => $db->getLastQuery(), 'query' => $db->getLastQuery(),
'exception' => $e->getTraceAsString() 'exception' => $e->getTraceAsString()
]); ]);
} }

View File

@@ -1,288 +1,288 @@
<?php <?php
/* /*
Cambia de estado la reposición Cambia de estado la reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
require_once "../class/mailer.php"; require_once "../class/mailer.php";
define("COORDINADOR", 9); define("COORDINADOR", 9);
define("SUPERVISOR", 7); define("SUPERVISOR", 7);
define("ENVIO_CORREOS", true); define("ENVIO_CORREOS", true);
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$pag = "../reposiciones_autorizar.php"; $pag = "../reposiciones_autorizar.php";
if(!isset($_POST["id"]) || !isset($_POST["edo"]) ){ if(!isset($_POST["id"]) || !isset($_POST["edo"]) ){
header("Location: ".$pag."?error=0"); header("Location: ".$pag."?error=0");
exit(); exit();
} }
$id_repo = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id_repo = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$edo = filter_input(INPUT_POST, "edo", FILTER_SANITIZE_NUMBER_INT);//limpia texto $edo = filter_input(INPUT_POST, "edo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//limpia texto $tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
if(isset($_POST["salon"]) && $_POST["salon"] != "") if(isset($_POST["salon"]) && $_POST["salon"] != "")
$salon = filter_input(INPUT_POST, "salon", FILTER_SANITIZE_NUMBER_INT);//limpia texto $salon = filter_input(INPUT_POST, "salon", FILTER_SANITIZE_NUMBER_INT);//limpia texto
//-------------- //--------------
//Obtiene datos de salón asignado //Obtiene datos de salón asignado
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
if(!empty($salon)){ if(!empty($salon)){
$salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon', $salon_rs = $db->querySingle('SELECT s.salon_id, s.salon_array FROM salon_view s where s.salon_id = :id_salon',
[':id_salon' => $salon] [':id_salon' => $salon]
); );
if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){ if($salon_rs["salon_id"] == "" || $salon_rs["salon_id"] == NULL){
$salon_desc = "Pendiente"; $salon_desc = "Pendiente";
}else{ }else{
$salon_json = json_decode($salon_rs["salon_array"], true); $salon_json = json_decode($salon_rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){ if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]); unset($salon_json[0]);
} }
$salon_desc = join(" / ",$salon_json); $salon_desc = join(" / ",$salon_json);
} }
} }
if($tipo ==1 || $tipo == 2){ if($tipo ==1 || $tipo == 2){
//-------------- //--------------
//Obtiene datos reposición //Obtiene datos reposición
$reposicion_rs = $db->querySingle('SELECT h.materia, r.fecha_nueva, r.hora_nueva, r.fecha_clase, r.descripcion, h.horario_hora, h.facultad_id, h.facultad, f.clave_dependencia, r.motivo_cancelacion, ta.tipoaula_supervisor , ta.tipoaula_nombre $reposicion_rs = $db->querySingle('SELECT h.materia, r.fecha_nueva, r.hora_nueva, r.fecha_clase, r.descripcion, h.horario_hora, h.facultad_id, h.facultad, f.clave_dependencia, r.motivo_cancelacion, ta.tipoaula_supervisor , ta.tipoaula_nombre
from reposicion_solicitud r from reposicion_solicitud r
inner join horario_view h on h.horario_id = r.horario_id inner join horario_view h on h.horario_id = r.horario_id
inner join facultad f on f.facultad_id = h.facultad_id inner join facultad f on f.facultad_id = h.facultad_id
inner join tipoaula ta on ta.tipoaula_id = r.tipoaula_id inner join tipoaula ta on ta.tipoaula_id = r.tipoaula_id
where r.reposicion_solicitud_id = :id_repo', where r.reposicion_solicitud_id = :id_repo',
[':id_repo' => $id_repo] [':id_repo' => $id_repo]
); );
//Obtiene correos //Obtiene correos
$correos_rs = $db->query('SELECT p.profesor_nombre, p.profesor_correo, u.usuario_nombre as jefe_nombre, u.usuario_correo as jefe_correo, $correos_rs = $db->query('SELECT p.profesor_nombre, p.profesor_correo, u.usuario_nombre as jefe_nombre, u.usuario_correo as jefe_correo,
coor.usuario_nombre as coordinador_nombre, coor.usuario_correo as coordinador_correo coor.usuario_nombre as coordinador_nombre, coor.usuario_correo as coordinador_correo
from reposicion_solicitud rs from reposicion_solicitud rs
inner join profesor p on rs.profesor_id =p.profesor_id inner join profesor p on rs.profesor_id =p.profesor_id
inner join usuario u on u.usuario_id = rs.usuario_id inner join usuario u on u.usuario_id = rs.usuario_id
inner join horario_view hv on hv.horario_id = rs.horario_id inner join horario_view hv on hv.horario_id = rs.horario_id
inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord inner join usuario coor on hv.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord
where rs.reposicion_solicitud_id = :id_repo', where rs.reposicion_solicitud_id = :id_repo',
[':rol_coord' => COORDINADOR, ':id_repo' => $id_repo] [':rol_coord' => COORDINADOR, ':id_repo' => $id_repo]
); );
//print_r($correos_rs); exit(); //print_r($correos_rs); exit();
}else{ }else{
//Obtiene datos asignación //Obtiene datos asignación
$reposicion_rs = $db->querySingle('SELECT r.fecha_nueva, r.hora_nueva, r.descripcion, f.facultad_id, f.facultad_nombre as facultad, f.clave_dependencia, r.motivo_cancelacion, ta.tipoaula_supervisor , ta.tipoaula_nombre, p.profesor_nombre $reposicion_rs = $db->querySingle('SELECT r.fecha_nueva, r.hora_nueva, r.descripcion, f.facultad_id, f.facultad_nombre as facultad, f.clave_dependencia, r.motivo_cancelacion, ta.tipoaula_supervisor , ta.tipoaula_nombre, p.profesor_nombre
from asignacion_solicitud r from asignacion_solicitud r
inner join usuario u on u.usuario_id = r.usuario_id inner join usuario u on u.usuario_id = r.usuario_id
inner join facultad f on f.facultad_id = u.facultad_id inner join facultad f on f.facultad_id = u.facultad_id
inner join tipoaula ta on ta.tipoaula_id = r.tipoaula_id inner join tipoaula ta on ta.tipoaula_id = r.tipoaula_id
inner join profesor p on p.profesor_id = r.profesor_id inner join profesor p on p.profesor_id = r.profesor_id
where r.asignacion_solicitud_id = :id_repo', where r.asignacion_solicitud_id = :id_repo',
[':id_repo' => $id_repo] [':id_repo' => $id_repo]
); );
//Obtiene correos //Obtiene correos
$correos_rs = $db->query('SELECT p.profesor_nombre, p.profesor_correo, NULL as jefe_nombre, NULL as jefe_correo, $correos_rs = $db->query('SELECT p.profesor_nombre, p.profesor_correo, NULL as jefe_nombre, NULL as jefe_correo,
coor.usuario_nombre as coordinador_nombre, coor.usuario_correo as coordinador_correo coor.usuario_nombre as coordinador_nombre, coor.usuario_correo as coordinador_correo
from asignacion_solicitud rs from asignacion_solicitud rs
inner join profesor p on rs.profesor_id =p.profesor_id inner join profesor p on rs.profesor_id =p.profesor_id
inner join usuario u on u.usuario_id = rs.usuario_id inner join usuario u on u.usuario_id = rs.usuario_id
inner join usuario coor on u.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord inner join usuario coor on u.facultad_id = coor.facultad_id and coor.rol_id = :rol_coord
where rs.asignacion_solicitud_id = :id_repo', where rs.asignacion_solicitud_id = :id_repo',
[':rol_coord' => COORDINADOR, ':id_repo' => $id_repo] [':rol_coord' => COORDINADOR, ':id_repo' => $id_repo]
); );
} }
$prof_correos=array(); $prof_correos=array();
$jefe_correos=[]; $jefe_correos=[];
$coord_correos=[]; $coord_correos=[];
foreach($correos_rs as $correo){ foreach($correos_rs as $correo){
if( count($prof_correos)==0 && $correo["profesor_correo"]!=""){ if( count($prof_correos)==0 && $correo["profesor_correo"]!=""){
if( !isset($prof_correos["correo"]) || !in_array($correo["profesor_correo"], $prof_correos["correo"]) ){ if( !isset($prof_correos["correo"]) || !in_array($correo["profesor_correo"], $prof_correos["correo"]) ){
array_push($prof_correos, $correo["profesor_correo"]); array_push($prof_correos, $correo["profesor_correo"]);
} }
} }
if( count($jefe_correos)==0 && $correo["jefe_correo"]!=""){ if( count($jefe_correos)==0 && $correo["jefe_correo"]!=""){
if(!isset($jefe_correos["correo"]) || !in_array($correo["jefe_correo"], $jefe_correos["correo"])){ if(!isset($jefe_correos["correo"]) || !in_array($correo["jefe_correo"], $jefe_correos["correo"])){
array_push($jefe_correos, $correo["jefe_correo"]); array_push($jefe_correos, $correo["jefe_correo"]);
} }
} }
if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){ if( count($coord_correos)==0 && $correo["coordinador_correo"]!=""){
if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){ if(!isset($coord_correos["correo"]) || !in_array($correo["coordinador_correo"], $coord_correos["correo"])){
array_push($coord_correos, $correo["coordinador_correo"]); array_push($coord_correos, $correo["coordinador_correo"]);
} }
} }
} }
$correosSup_rs = $db->query("SELECT DISTINCT sup.usuario_correo as supervisor_correo $correosSup_rs = $db->query("SELECT DISTINCT sup.usuario_correo as supervisor_correo
FROM horario_supervisor hs FROM horario_supervisor hs
inner join usuario sup on sup.usuario_id =hs.usuario_id inner join usuario sup on sup.usuario_id =hs.usuario_id
where :facultad = ANY(hs.facultad_id_array)", where :facultad = ANY(hs.facultad_id_array)",
[':facultad'=>$reposicion_rs["facultad_id"]] ); [':facultad'=>$reposicion_rs["facultad_id"]] );
$sup_correos=[]; $sup_correos=[];
foreach($correosSup_rs as $correo){ foreach($correosSup_rs as $correo){
array_push($sup_correos, $correo["supervisor_correo"]); array_push($sup_correos, $correo["supervisor_correo"]);
} }
if($tipo ==1 || $tipo == 2){ if($tipo ==1 || $tipo == 2){
if($edo == 4){//cancelación if($edo == 4){//cancelación
$motivo = ""; $motivo = "";
if(isset($_POST["motivo"]) && $_POST["motivo"] != "") if(isset($_POST["motivo"]) && $_POST["motivo"] != "")
$motivo = trim($_POST["motivo"]); $motivo = trim($_POST["motivo"]);
$db->querySingle('SELECT fu_reposicion_cancela(:id, :motivo)', $db->querySingle('SELECT fu_reposicion_cancela(:id, :motivo)',
[':id' => $id_repo, ':motivo' => $motivo] [':id' => $id_repo, ':motivo' => $motivo]
); );
}else{ }else{
if(!empty($salon)){ if(!empty($salon)){
$db->querySingle('SELECT fu_reposicion_solicitud(:id, NULL, NULL, NULL, :sal, :edo, NULL, NULL, NULL, NULL)', $db->querySingle('SELECT fu_reposicion_solicitud(:id, NULL, NULL, NULL, :sal, :edo, NULL, NULL, NULL, NULL)',
[':id' => $id_repo, ':sal' => $salon, ':edo' => $edo] [':id' => $id_repo, ':sal' => $salon, ':edo' => $edo]
); );
}else{ }else{
$db->querySingle('SELECT fu_reposicion_solicitud(:id, NULL, NULL, NULL, NULL, :edo, NULL, NULL, NULL, NULL)', $db->querySingle('SELECT fu_reposicion_solicitud(:id, NULL, NULL, NULL, NULL, :edo, NULL, NULL, NULL, NULL)',
[':id' => $id_repo, ':edo' => $edo] [':id' => $id_repo, ':edo' => $edo]
); );
} }
} }
$fecha_clase = date('d/m/Y', strtotime($reposicion_rs["fecha_clase"])); $fecha_clase = date('d/m/Y', strtotime($reposicion_rs["fecha_clase"]));
$fecha_nueva = date('d/m/Y', strtotime($reposicion_rs["fecha_nueva"])); $fecha_nueva = date('d/m/Y', strtotime($reposicion_rs["fecha_nueva"]));
$hora_tmp = explode(":",$reposicion_rs["horario_hora"]); $hora_tmp = explode(":",$reposicion_rs["horario_hora"]);
$hora_clase = $hora_tmp[0].":".$hora_tmp[1]; $hora_clase = $hora_tmp[0].":".$hora_tmp[1];
$hora_tmp = explode(":",$reposicion_rs["hora_nueva"]); $hora_tmp = explode(":",$reposicion_rs["hora_nueva"]);
$hora_nueva = $hora_tmp[0].":".$hora_tmp[1]; $hora_nueva = $hora_tmp[0].":".$hora_tmp[1];
$asunto = ""; $asunto = "";
$texto = ""; $texto = "";
$to = ""; $to = "";
switch($edo){ switch($edo){
case 2://Correo a supervisor case 2://Correo a supervisor
$asunto = "Reposición nueva - ".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]; $asunto = "Reposición nueva - ".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"];
//crear plantilla //crear plantilla
$texto = "<p>Se creó una reposición nueva para: <b>".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]."</b>.</p>"; $texto = "<p>Se creó una reposición nueva para: <b>".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]."</b>.</p>";
$texto .= "<p><b>".mb_strtoupper($reposicion_rs["materia"])."</b> del día <b>".$fecha_clase." a las ".$hora_clase." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora_nueva." hrs.</b>"; $texto .= "<p><b>".mb_strtoupper($reposicion_rs["materia"])."</b> del día <b>".$fecha_clase." a las ".$hora_clase." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora_nueva." hrs.</b>";
if(!$reposicion_rs["tipoaula_supervisor"]){ if(!$reposicion_rs["tipoaula_supervisor"]){
$texto .= " en el salón: <b>".$salon_desc."</b></p>"; $texto .= " en el salón: <b>".$salon_desc."</b></p>";
}else{ }else{
$texto .= " en un salón de tipo: <b>".$reposicion_rs["tipoaula_nombre"]."</b></p>"; $texto .= " en un salón de tipo: <b>".$reposicion_rs["tipoaula_nombre"]."</b></p>";
} }
$texto .= "<p style='font-style:italic; padding-left:25px'>".$reposicion_rs["descripcion"]."</p>"; $texto .= "<p style='font-style:italic; padding-left:25px'>".$reposicion_rs["descripcion"]."</p>";
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>";
$to = join(",", $sup_correos); $to = join(",", $sup_correos);
$ok = 0; $ok = 0;
break; break;
case 3://Correo a coordinador, profesor y jefe case 3://Correo a coordinador, profesor y jefe
$asunto = "Reposición autorizada - ".$reposicion_rs["materia"]; $asunto = "Reposición autorizada - ".$reposicion_rs["materia"];
$texto = "<p>La resposición de la clase de <b>".$reposicion_rs["materia"]."</b> del día <b>".$fecha_clase." a las ".$hora_clase." hrs. </b> está autorizada para realizarse el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs. en: $salon_desc</b></p>"; $texto = "<p>La resposición de la clase de <b>".$reposicion_rs["materia"]."</b> del día <b>".$fecha_clase." a las ".$hora_clase." hrs. </b> está autorizada para realizarse el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs. en: $salon_desc</b></p>";
$to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos); $to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos);
$ok = 0; $ok = 0;
$db->querySingle('SELECT fu_reposicion_solicitud_supervisor(:id, :sup)', $db->querySingle('SELECT fu_reposicion_solicitud_supervisor(:id, :sup)',
[':id' => $id_repo, ':sup'=>$user->user["id"]] [':id' => $id_repo, ':sup'=>$user->user["id"]]
); );
break; break;
case 4://Correo a coordinador, profesor y jefe case 4://Correo a coordinador, profesor y jefe
$asunto = "Reposición declinada - ".$reposicion_rs["materia"]; $asunto = "Reposición declinada - ".$reposicion_rs["materia"];
$texto = "<p>La resposición de la clase de <b>".$reposicion_rs["materia"]." planeada para el día ".$fecha_nueva." a las ".$hora_nueva." hrs.</b> ha sido declinada por el siguiente motivo:</p>"; $texto = "<p>La resposición de la clase de <b>".$reposicion_rs["materia"]." planeada para el día ".$fecha_nueva." a las ".$hora_nueva." hrs.</b> ha sido declinada por el siguiente motivo:</p>";
$texto .= "<p style='font-style:italic; padding-left:25px'>".$motivo."</p>"; $texto .= "<p style='font-style:italic; padding-left:25px'>".$motivo."</p>";
$to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos); $to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos);
$ok = 1; $ok = 1;
$db->querySingle('SELECT fu_reposicion_solicitud_supervisor(:id, :sup)', $db->querySingle('SELECT fu_reposicion_solicitud_supervisor(:id, :sup)',
[':id' => $id_repo, ':sup'=>$user->user["id"]] [':id' => $id_repo, ':sup'=>$user->user["id"]]
); );
break; break;
} }
}else{ }else{
if($edo == 4){//cancelación if($edo == 4){//cancelación
$motivo = ""; $motivo = "";
if(isset($_POST["motivo"]) && $_POST["motivo"] != "") if(isset($_POST["motivo"]) && $_POST["motivo"] != "")
$motivo = trim($_POST["motivo"]); $motivo = trim($_POST["motivo"]);
$db->querySingle('SELECT fu_asignacion_cancela(:id, :motivo)', $db->querySingle('SELECT fu_asignacion_cancela(:id, :motivo)',
[':id' => $id_repo, ':motivo' => $motivo] [':id' => $id_repo, ':motivo' => $motivo]
); );
}else{ }else{
if(!empty($salon)){ if(!empty($salon)){
$db->querySingle('SELECT fu_asignacion_solicitud(:id, NULL, NULL, :sal, :edo, NULL, NULL, NULL, NULL, NULL)', $db->querySingle('SELECT fu_asignacion_solicitud(:id, NULL, NULL, :sal, :edo, NULL, NULL, NULL, NULL, NULL)',
[':id' => $id_repo, ':sal' => $salon, ':edo' => $edo] [':id' => $id_repo, ':sal' => $salon, ':edo' => $edo]
); );
}else{ }else{
$db->querySingle('SELECT fu_asignacion_solicitud(:id, NULL, NULL, NULL, :edo, NULL, NULL, NULL, NULL, NULL)', $db->querySingle('SELECT fu_asignacion_solicitud(:id, NULL, NULL, NULL, :edo, NULL, NULL, NULL, NULL, NULL)',
[':id' => $id_repo, ':edo' => $edo] [':id' => $id_repo, ':edo' => $edo]
); );
} }
} }
$fecha_nueva = date('d/m/Y', strtotime($reposicion_rs["fecha_nueva"])); $fecha_nueva = date('d/m/Y', strtotime($reposicion_rs["fecha_nueva"]));
$hora_tmp = explode(":",$reposicion_rs["hora_nueva"]); $hora_tmp = explode(":",$reposicion_rs["hora_nueva"]);
$hora_nueva = $hora_tmp[0].":".$hora_tmp[1]; $hora_nueva = $hora_tmp[0].":".$hora_tmp[1];
$asunto = ""; $asunto = "";
$texto = ""; $texto = "";
$to = ""; $to = "";
switch($edo){ switch($edo){
case 2://Correo a supervisor case 2://Correo a supervisor
$asunto = "Asignación nueva - ".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]; $asunto = "Asignación nueva - ".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"];
//crear plantilla //crear plantilla
$texto = "<p>Se creó una solicitud de asignación nueva para: <b>".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]."</b>.</p>"; $texto = "<p>Se creó una solicitud de asignación nueva para: <b>".$reposicion_rs["clave_dependencia"]." ".$reposicion_rs["facultad"]."</b>.</p>";
$texto .= "<p>Se solicita el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs.</b> para el profesor: <b>".$reposicion_rs["profesor_nombre"]."</b>."; $texto .= "<p>Se solicita el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs.</b> para el profesor: <b>".$reposicion_rs["profesor_nombre"]."</b>.";
if(!$reposicion_rs["tipoaula_supervisor"]){ if(!$reposicion_rs["tipoaula_supervisor"]){
$texto .= " en el salón: <b>".$salon_desc."</b></p>"; $texto .= " en el salón: <b>".$salon_desc."</b></p>";
}else{ }else{
$texto .= " en un salón de tipo: <b>".$reposicion_rs["tipoaula_nombre"]."</b></p>"; $texto .= " en un salón de tipo: <b>".$reposicion_rs["tipoaula_nombre"]."</b></p>";
} }
$texto .= "<p style='font-style:italic; padding-left:25px'>".$reposicion_rs["descripcion"]."</p>"; $texto .= "<p style='font-style:italic; padding-left:25px'>".$reposicion_rs["descripcion"]."</p>";
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>";
$to = join(",", $sup_correos); $to = join(",", $sup_correos);
$ok = 0; $ok = 0;
break; break;
case 3://Correo a coordinador, profesor y jefe case 3://Correo a coordinador, profesor y jefe
$asunto = "Asignación autorizada - ".$reposicion_rs["profesor_nombre"]; $asunto = "Asignación autorizada - ".$reposicion_rs["profesor_nombre"];
$texto = "<p>La asignación de espacio para el profesor <b>".$reposicion_rs["profesor_nombre"]."</b> está autorizada para realizarse el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs. en: $salon_desc</b></p>"; $texto = "<p>La asignación de espacio para el profesor <b>".$reposicion_rs["profesor_nombre"]."</b> está autorizada para realizarse el día <b>".$fecha_nueva." a las ".$hora_nueva." hrs. en: $salon_desc</b></p>";
$to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos); $to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos);
$ok = 0; $ok = 0;
$db->querySingle('SELECT fu_asignacion_solicitud_supervisor(:id, :sup)', $db->querySingle('SELECT fu_asignacion_solicitud_supervisor(:id, :sup)',
[':id' => $id_repo, ':sup'=>$user->user["id"]] [':id' => $id_repo, ':sup'=>$user->user["id"]]
); );
break; break;
case 4://Correo a coordinador, profesor y jefe case 4://Correo a coordinador, profesor y jefe
$asunto = "Asignación declinada - ".$reposicion_rs["profesor_nombre"]; $asunto = "Asignación declinada - ".$reposicion_rs["profesor_nombre"];
$texto = "<p>La asignación de espacio para el profesor <b>".$reposicion_rs["profesor_nombre"]."</b> planeada para el día ".$fecha_nueva." a las ".$hora_nueva." hrs.</b> ha sido declinada por el siguiente motivo:</p>"; $texto = "<p>La asignación de espacio para el profesor <b>".$reposicion_rs["profesor_nombre"]."</b> planeada para el día ".$fecha_nueva." a las ".$hora_nueva." hrs.</b> ha sido declinada por el siguiente motivo:</p>";
$texto .= "<p style='font-style:italic; padding-left:25px'>".$motivo."</p>"; $texto .= "<p style='font-style:italic; padding-left:25px'>".$motivo."</p>";
$to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos); $to = join(",", $coord_correos).",".join(",", $prof_correos).",".join(",", $jefe_correos);
$ok = 1; $ok = 1;
$db->querySingle('SELECT fu_asignacion_solicitud_supervisor(:id, :sup)', $db->querySingle('SELECT fu_asignacion_solicitud_supervisor(:id, :sup)',
[':id' => $id_repo, ':sup'=>$user->user["id"]] [':id' => $id_repo, ':sup'=>$user->user["id"]]
); );
break; break;
} }
} }
if($to!= "" && ENVIO_CORREOS){ if($to!= "" && ENVIO_CORREOS){
$texto = '<body > $texto = '<body >
<img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px"> <img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px">
'.$texto.' '.$texto.'
</body>'; </body>';
require_once('../include/phpmailer/PHPMailerAutoload.php'); require_once('../include/phpmailer/PHPMailerAutoload.php');
if($_ENV['DB_NAME'] == "paad_pruebas"){ if($_ENV['DB_NAME'] == "paad_pruebas"){
$asunto = "PRUEBAS-".$asunto; $asunto = "PRUEBAS-".$asunto;
Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true); Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true);
}else{ }else{
Mailer::enviarCorreo($to, $asunto, $texto, true); Mailer::enviarCorreo($to, $asunto, $texto, true);
} }
} }
/* /*
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log); $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
*/ */
header("Location: ".$pag."?ok=".$ok); header("Location: ".$pag."?ok=".$ok);
exit(); exit();
?> ?>

View File

@@ -1,33 +1,33 @@
<?php <?php
/* /*
* Borra reposición * Borra reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
if(!isset($_POST["id"])){ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información necesaria."; $return["error"] = "Error! No se recibió la información necesaria.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$creador = $user->user["id"]; $creador = $user->user["id"];
try{ try{
$db->query('SELECT * from fd_reposicion_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]); $db->query('SELECT * from fd_reposicion_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]);
$return["ok"] = "La reposición se borró correctamente"; $return["ok"] = "La reposición se borró correctamente";
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al borrar la reposición."; $return["error"] = "Ocurrió un error al borrar la reposición.";
} }
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,208 +1,208 @@
<?php <?php
/* /*
* Inserta reposición * Inserta reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
require_once "../class/mailer.php"; require_once "../class/mailer.php";
define("COORDINADOR", 9); define("COORDINADOR", 9);
define("ENVIO_CORREOS", true); define("ENVIO_CORREOS", true);
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//$user->access(); //$user->access();
$duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion $duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion
$bloque = filter_input(INPUT_POST, "bloque", FILTER_SANITIZE_NUMBER_INT);// $bloque = filter_input(INPUT_POST, "bloque", FILTER_SANITIZE_NUMBER_INT);//
$ciclo = filter_input(INPUT_POST, "ciclo", FILTER_SANITIZE_NUMBER_INT);// $ciclo = filter_input(INPUT_POST, "ciclo", FILTER_SANITIZE_NUMBER_INT);//
$fecha_falta = trim(htmlspecialchars($_POST["fecha_falta"], ENT_QUOTES, "UTF-8"));//Reposicion $fecha_falta = trim(htmlspecialchars($_POST["fecha_falta"], ENT_QUOTES, "UTF-8"));//Reposicion
$fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//Reposicion $fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//Reposicion
$fecha_cambio = trim(htmlspecialchars($_POST["fecha_cambio"], ENT_QUOTES, "UTF-8"));//Cambio salón $fecha_cambio = trim(htmlspecialchars($_POST["fecha_cambio"], ENT_QUOTES, "UTF-8"));//Cambio salón
$hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto hora reposicion $hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto hora reposicion
$min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$hor = filter_input(INPUT_POST, "horario", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hor = filter_input(INPUT_POST, "horario", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto $alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//1 Repo , 0 Cambio $tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//1 Repo , 0 Cambio
$aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad $aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad
$salon = NULL; $salon = NULL;
if(!$user->jefe_carrera){//coordinador if(!$user->jefe_carrera){//coordinador
if(isset($_POST["salon"]) && $_POST["salon"] != "") if(isset($_POST["salon"]) && $_POST["salon"] != "")
$salon = filter_input(INPUT_POST, "dlSalon", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad $salon = filter_input(INPUT_POST, "dlSalon", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad
} }
if(empty($_POST["prof"])) if(empty($_POST["prof"]))
$prof = $user->user["id"]; $prof = $user->user["id"];
else else
$prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto $prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto $comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto
$duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]); $duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]);
$duracion_tiempo = $duracion_rs["duracion_interval"]; $duracion_tiempo = $duracion_rs["duracion_interval"];
//-- Obtiene datos de horario regular de clase //-- Obtiene datos de horario regular de clase
$horario_rs = $db->querySingle('SELECT * from horario_view where horario_id = :hor', $horario_rs = $db->querySingle('SELECT * from horario_view where horario_id = :hor',
[':hor' => $hor] [':hor' => $hor]
); );
$materia = $horario_rs["materia_id"]; $materia = $horario_rs["materia_id"];
$dia = $horario_rs["horario_dia"]; $dia = $horario_rs["horario_dia"];
$hora = $hora_ini.":".$min_ini.":00"; $hora = $hora_ini.":".$min_ini.":00";
if($tipo == 1){//Reposición if($tipo == 1){//Reposición
$fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora;
$fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo;
$dia_new = date('w', strtotime($fecha_new)); $dia_new = date('w', strtotime($fecha_new));
$fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d'); $fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d');
$dia_falta = date('w', strtotime($fecha_falta)); $dia_falta = date('w', strtotime($fecha_falta));
}else{ }else{
$fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d'); $fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d');
$dia_falta = date('w', strtotime($fecha_cambio)); $dia_falta = date('w', strtotime($fecha_cambio));
} }
//Valida que tenga clase en la fecha de falta //Valida que tenga clase en la fecha de falta
if(intval($dia) != intval($dia_falta)){ if(intval($dia) != intval($dia_falta)){
header("Location:".$pag."?error=11"); header("Location:".$pag."?error=11");
/*print_r($_POST); /*print_r($_POST);
echo 'SELECT * from horario_view where horario_id = '.$hor; echo 'SELECT * from horario_view where horario_id = '.$hor;
echo intval($dia)." != ".intval($dia_falta);*/ echo intval($dia)." != ".intval($dia_falta);*/
exit(); exit();
} }
//Obtiene materia //Obtiene materia
$materia_rs = $db->querySingle('SELECT materia_nombre from materia where materia_id = :mat',[':mat' => $materia]); $materia_rs = $db->querySingle('SELECT materia_nombre from materia where materia_id = :mat',[':mat' => $materia]);
//Obtiene correo //Obtiene correo
$correos_rs = $db->querySingle('SELECT coor.usuario_correo, coor.usuario_nombre from usuario coor where rol_id = :rol_coord and facultad_id = ( $correos_rs = $db->querySingle('SELECT coor.usuario_correo, coor.usuario_nombre from usuario coor where rol_id = :rol_coord and facultad_id = (
select coalesce(facultad_id,0) from usuario u where u.usuario_id = :id_usr) and coor.usuario_correo != \'\'',[':rol_coord' => COORDINADOR, ':id_usr' => $user->user["id"]] select coalesce(facultad_id,0) from usuario u where u.usuario_id = :id_usr) and coor.usuario_correo != \'\'',[':rol_coord' => COORDINADOR, ':id_usr' => $user->user["id"]]
); );
if( count($correos_rs) > 0 ){ if( count($correos_rs) > 0 ){
$to = $correos_rs["usuario_correo"]; $to = $correos_rs["usuario_correo"];
} }
if($tipo == 1){//Reposición if($tipo == 1){//Reposición
// Valida que grupo no tenga clases // Valida que grupo no tenga clases
/*$result = validaConflictoHoras($pdo, $gpo, $dia_new, $hora, $materia, "-", $fecha_new, $fecha_fin_new, $duracion); /*$result = validaConflictoHoras($pdo, $gpo, $dia_new, $hora, $materia, "-", $fecha_new, $fecha_fin_new, $duracion);
if($result != ""){//error if($result != ""){//error
//echo $result; //echo $result;
header("Location:".$pag."?error=7"); header("Location:".$pag."?error=7");
exit(); exit();
} }
*/ */
//Valida que profesor no este en 2 reposiciones al mismo tiempo en la fecha nueva //Valida que profesor no este en 2 reposiciones al mismo tiempo en la fecha nueva
$traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)', $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)',
[':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo] [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo]
)["traslape_profesor_reposicion"]; )["traslape_profesor_reposicion"];
if($traslape){ if($traslape){
//print_r($_POST); //print_r($_POST);
//echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)"; //echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)";
header("Location:".$pag."?error=9"); header("Location:".$pag."?error=9");
exit(); exit();
} }
try{ try{
if($user->jefe_carrera){//jefe if($user->jefe_carrera){//jefe
$db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo)', $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo)',
[':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $hor, [':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $hor,
':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"],
':bloque' => $bloque, ':ciclo' => $ciclo ':bloque' => $bloque, ':ciclo' => $ciclo
] ]
); );
}else{//coordinador }else{//coordinador
echo 'SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, '.$salon.')'; echo 'SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, '.$salon.')';
$db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, :salon)', $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, :salon)',
[':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $hor, [':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $hor,
':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"],
':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon ':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon
] ]
); );
} }
}catch(Exception $e){ }catch(Exception $e){
echo "ERROR Reposición<br>".$e->getMessage(); echo "ERROR Reposición<br>".$e->getMessage();
//header("Location: ".$pag."?error=1"); //header("Location: ".$pag."?error=1");
exit(); exit();
} }
$fecha_clase = date('d/m/Y', strtotime($fecha_falta)); $fecha_clase = date('d/m/Y', strtotime($fecha_falta));
$fecha_nueva = date('d/m/Y', strtotime($fecha_new)); $fecha_nueva = date('d/m/Y', strtotime($fecha_new));
$texto = "<p>Se creó una reposición nueva.</p>"; $texto = "<p>Se creó una reposición nueva.</p>";
$texto .= "<p><b>".mb_strtoupper($materia_rs["materia_nombre"])."</b> del día <b>".$fecha_clase." a las ".$horario_rs["horario_hora"]." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora." hrs.</b>"; $texto .= "<p><b>".mb_strtoupper($materia_rs["materia_nombre"])."</b> del día <b>".$fecha_clase." a las ".$horario_rs["horario_hora"]." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora." hrs.</b>";
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarla.</p>";
/* /*
$log = new LogActividad(); $log = new LogActividad();
$desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]"; $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]";
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/
}else{//Cambio salón / hora }else{//Cambio salón / hora
try{ try{
if($user->jefe_carrera){//jefe if($user->jefe_carrera){//jefe
$db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo)', $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo)',
[':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $hor, [':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $hor,
':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"],
':bloque' => $bloque, ':ciclo' => $ciclo ':bloque' => $bloque, ':ciclo' => $ciclo
] ]
); );
}else{//coordinador }else{//coordinador
$db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo, :salon)', $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo, :salon)',
[':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $hor, [':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $hor,
':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"],
':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon ':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon
] ]
); );
} }
}catch(Exception $e){ }catch(Exception $e){
echo "ERROR Cambio<br>".$e->getMessage(); echo "ERROR Cambio<br>".$e->getMessage();
//header("Location: ".$pag."?error=1"); //header("Location: ".$pag."?error=1");
exit(); exit();
} }
$texto = "<p>Se creó un cambio de salón nuevo.</p>"; $texto = "<p>Se creó un cambio de salón nuevo.</p>";
$texto .= "<p><b>".mb_strtoupper($materia_rs["materia_nombre"])."</b> del día <b>".$fecha_falta." a las ".$hora." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora." hrs.</b>"; $texto .= "<p><b>".mb_strtoupper($materia_rs["materia_nombre"])."</b> del día <b>".$fecha_falta." a las ".$hora." hrs. </b> se propone reponer el <b>".$fecha_nueva." a las ".$hora." hrs.</b>";
$texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarlo.</p>"; $texto .= "<p>Ingresa al <a href='https://paad.lci.ulsa.mx'>sistema PAAD</a> para autorizarlo.</p>";
/* /*
$log = new LogActividad(); $log = new LogActividad();
$desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_cambio.">".$fecha_cambio_nueva."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]"; $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_cambio.">".$fecha_cambio_nueva."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."] Alumnos[".$alumnos."]";
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log); $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
*/ */
} }
if($to!= "" && ENVIO_CORREOS){ if($to!= "" && ENVIO_CORREOS){
$asunto = "Reposición nueva - solicitud"; $asunto = "Reposición nueva - solicitud";
//crear plantilla //crear plantilla
$texto = '<body > $texto = '<body >
<img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px"> <img src="https://paad.lci.ulsa.mx/imagenes/logo_lasalle.png" alt="La Salle" style="margin-bottom:60px">
'.$texto.' '.$texto.'
</body>'; </body>';
require_once('../include/phpmailer/PHPMailerAutoload.php'); require_once('../include/phpmailer/PHPMailerAutoload.php');
if($_ENV['DB_NAME'] == "paad_pruebas"){ if($_ENV['DB_NAME'] == "paad_pruebas"){
$asunto = "PRUEBAS-".$asunto; $asunto = "PRUEBAS-".$asunto;
Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true); Mailer::enviarCorreo("alejandro.lara@lasalle.mx", $asunto, $texto, true);
}else{ }else{
Mailer::enviarCorreo($to, $asunto, $texto, true); Mailer::enviarCorreo($to, $asunto, $texto, true);
} }
} }
header("Location: ".$pag."?ok=0"); header("Location: ".$pag."?ok=0");
exit(); exit();
?> ?>

View File

@@ -1,49 +1,49 @@
<?php <?php
/* /*
* Obtiene datos de reposición * Obtiene datos de reposición
*/ */
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
/*if(!$objSesion->tieneAcceso()){ /*if(!$objSesion->tieneAcceso()){
$return["error"] = "Error! No tienes permisos para realizar esta acción."; $return["error"] = "Error! No tienes permisos para realizar esta acción.";
}else*/ if(!isset($_POST["id"])){ }else*/ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información del profesor."; $return["error"] = "Error! No se recibió la información del profesor.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
try{ try{
if($user->jefe_carrera){ if($user->jefe_carrera){
$rs = $db->query('SELECT * FROM fs_materiasprofesor(:id, :jefe)', [':id' => $id, ':jefe'=>$user->user["id"]] ); $rs = $db->query('SELECT * FROM fs_materiasprofesor(:id, :jefe)', [':id' => $id, ':jefe'=>$user->user["id"]] );
}else{ }else{
$rs = $db->query('SELECT * FROM fs_materiasprofesor(:id, NULL)', [':id' => $id] ); $rs = $db->query('SELECT * FROM fs_materiasprofesor(:id, NULL)', [':id' => $id] );
} }
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al leer los datos de las materias."; $return["error"] = "Ocurrió un error al leer los datos de las materias.";
echo json_encode($return); echo json_encode($return);
} }
$mat_arr = array(); $mat_arr = array();
foreach($rs as $m){ foreach($rs as $m){
$mat_arr[] = array("horario_id"=>$m["horario_id"], "horario_dia"=>$m["horario_dia"], $mat_arr[] = array("horario_id"=>$m["horario_id"], "horario_dia"=>$m["horario_dia"],
"horario_hora"=>substr($m["horario_hora"], 0, 2), "horario_min"=>substr($m["horario_hora"], 3, 2), "horario_hora"=>substr($m["horario_hora"], 0, 2), "horario_min"=>substr($m["horario_hora"], 3, 2),
"materia_nombre"=>$m["materia_nombre"].' - '.$m["horario_dia_nombre"]." ".substr($m["horario_hora"], 0, -3), "materia_nombre"=>$m["materia_nombre"].' - '.$m["horario_dia_nombre"]." ".substr($m["horario_hora"], 0, -3),
"grupo"=>$m["horario_grupo"], "duracion" => $m["duracion"] "grupo"=>$m["horario_grupo"], "duracion" => $m["duracion"]
); );
} }
$return["materias"] = $mat_arr; $return["materias"] = $mat_arr;
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -0,0 +1,88 @@
<?php
/*
* Obtiene datos de reposición
*/
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
/*if(!$objSesion->tieneAcceso()){
$return["error"] = "Error! No tienes permisos para realizar esta acción.";
}else*/ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información de la reposición.";
}else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
try{
if($user->rol["rol_id"] == 7){//es supervisor
$rs = $db->querySingle('SELECT * from fs_reposicion_solicitud(:id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, :sup)',
[':id' => $id, ':sup'=>$user->user["id"]]
);
}else{//coordinador
$rs = $db->querySingle('SELECT * from fs_reposicion_solicitud(:id, :fac, NULL, NULL, NULL, NULL, NULL, NULL, null)',
[':id' => $id, ":fac"=>$user->facultad["facultad_id"] ]
);
}
}catch(Exception $e){
$return["error"] = "Ocurrió un error al leer los datos de la reposición.";
echo json_encode($return);
exit();
}
$return["fecha_clase"] = date('d/m/Y', strtotime($rs["fecha_clase"]));
$return["fecha_nueva"] = date('d/m/Y', strtotime($rs["fecha_nueva"]));
$hora_nueva = explode(":",$rs["hora_nueva"]);
$return["hora_ini"] = $hora_nueva[0];
$return["min_ini"] = $hora_nueva[1];
$hora_nueva_fin = explode(":",$rs["hora_nueva_fin"]);
$return["hora_fin"] = $hora_nueva_fin[0];
$return["min_fin"] = $hora_nueva_fin[1];
$return["duracion"] = $rs["duracion_interval"];
// $return["carrera"] = $rs["PlanEstudio_desc"];
$return["horario"] = $rs["horario_id"];
$return["materia"] = $rs["materia_id"];
$return["materia_desc"] = $rs["materia_nombre"];
$return["salon"] = $rs["salon_id"];
if($rs["salon_id"]==""){
$return["salon_desc"] = "Pendiente";
}else{
$salon_json = json_decode($rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]);
}
$return["salon_desc"] = join(" / ",$salon_json);
}
//$return["salon_desc"] = $rs["salon"]=="" ? "-Pendiente-": $rs["salon"];
$return["ciclo"] = $rs["ciclo"];
$return["bloque"] = $rs["bloque"];
$return["profesor"] = $rs["profesor_id"];
$return["profesor_nombre"] = $rs["profesor_nombre"];
$return["comentario"] = $rs["descripcion"];
$return["alumnos"] = $rs["alumnos"];
$return["tipo"] = $rs["es_reposicion"];
$return["aula"] = $rs["tipoaula_id"];
$return["aula_desc"] = $rs["tipoaula_nombre"];
$return["aula_supervisor"] = $rs["tipoaula_supervisor"];
$return["dia"] = date('w', strtotime($rs["fecha_clase"]));
$return["motivo_cancelacion"] = $rs["motivo_cancelacion"];
$return["estado"] = $rs["estado_reposicion_id"];
$return["facultad"] = $rs["facultad_nombre"];
$return["carrera"] = $rs["carrera_nombre"];
$return["grupo"] = $rs["horario_grupo"];
$return["supervisor_nombre"] = $rs["supervisor_nombre"];
}
echo json_encode($return);
?>

View File

@@ -1,125 +1,125 @@
<?php <?php
/* /*
* Actualizar reposiciones * Actualiza reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
/*if(!isset($_POST["id"]) || !isset($_POST["fecha_falta"]) || !isset($_POST["fecha_inicial"]) || !isset($_POST["hora_ini"]) || !isset($_POST["min_ini"]) || !isset($_POST["materia"]) || !isset($_POST["grupo"])){ /*if(!isset($_POST["id"]) || !isset($_POST["fecha_falta"]) || !isset($_POST["fecha_inicial"]) || !isset($_POST["hora_ini"]) || !isset($_POST["min_ini"]) || !isset($_POST["materia"]) || !isset($_POST["grupo"])){
header("Location: ".$pag."?error=0"); header("Location: ".$pag."?error=0");
exit(); exit();
}*/ }*/
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion $duracion_id = filter_input(INPUT_POST, "duracion", FILTER_SANITIZE_NUMBER_INT);//Id reposicion
$bloque = filter_input(INPUT_POST, "bloque", FILTER_SANITIZE_NUMBER_INT);// $bloque = filter_input(INPUT_POST, "bloque", FILTER_SANITIZE_NUMBER_INT);//
$ciclo = filter_input(INPUT_POST, "ciclo", FILTER_SANITIZE_NUMBER_INT);// $ciclo = filter_input(INPUT_POST, "ciclo", FILTER_SANITIZE_NUMBER_INT);//
$fecha_falta = trim(htmlspecialchars($_POST["fecha_falta"], ENT_QUOTES, "UTF-8"));//limpia texto $fecha_falta = trim(htmlspecialchars($_POST["fecha_falta"], ENT_QUOTES, "UTF-8"));//limpia texto
$fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto $fecha = trim(htmlspecialchars($_POST["fecha_inicial"], ENT_QUOTES, "UTF-8"));//limpia texto
$fecha_cambio = trim(htmlspecialchars($_POST["fecha_cambio"], ENT_QUOTES, "UTF-8"));//limpia texto $fecha_cambio = trim(htmlspecialchars($_POST["fecha_cambio"], ENT_QUOTES, "UTF-8"));//limpia texto
$hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hora_ini = filter_input(INPUT_POST, "hora_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto $min_ini = filter_input(INPUT_POST, "min_ini", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$hor = filter_input(INPUT_POST, "horario", FILTER_SANITIZE_NUMBER_INT);//limpia texto $hor = filter_input(INPUT_POST, "horario", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto $alumnos = filter_input(INPUT_POST, "alumnos", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//1 Repo , 0 Cambio $tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//1 Repo , 0 Cambio
$aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad $aula = filter_input(INPUT_POST, "aula", FILTER_SANITIZE_NUMBER_INT);//1 regular , 2 sala computo, 3 otro facultad
if(empty($_POST["prof"])) if(empty($_POST["prof"]))
$prof = $user["id"]; $prof = $user["id"];
else else
$prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto $prof = filter_input(INPUT_POST, "prof", FILTER_SANITIZE_NUMBER_INT);//limpia texto
//if(isset($_POST["salon"]) && $_POST["salon"] != "") //if(isset($_POST["salon"]) && $_POST["salon"] != "")
//$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto //$salon = trim(filter_input(INPUT_POST, "salon", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
$comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto $comentario = trim(htmlspecialchars($_POST["comentario"], ENT_QUOTES, "UTF-8"));//limpia texto
$duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]); $duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id", [":id"=>$duracion_id]);
$duracion_tiempo = $duracion_rs["duracion_interval"]; $duracion_tiempo = $duracion_rs["duracion_interval"];
$horario_rs = $db->querySingle('SELECT * from horario_view where horario_id = :hor', $horario_rs = $db->querySingle('SELECT * from horario_view where horario_id = :hor',
[':hor' => $hor] [':hor' => $hor]
); );
$materia = $horario_rs["materia_id"]; $materia = $horario_rs["materia_id"];
$dia = $horario_rs["horario_dia"]; $dia = $horario_rs["horario_dia"];
$hora = $hora_ini.":".$min_ini.":00"; $hora = $hora_ini.":".$min_ini.":00";
$fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora;
$fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo;
$dia_new = date('w', strtotime($fecha_new)); $dia_new = date('w', strtotime($fecha_new));
//echo $fecha_new."<br>"; //echo $fecha_new."<br>";
//echo $fecha_fin_new."<br>"; //echo $fecha_fin_new."<br>";
if($tipo == 1){//Reposición if($tipo == 1){//Reposición
$fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d'); $fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d');
$dia_falta = date('w', strtotime($fecha_falta)); $dia_falta = date('w', strtotime($fecha_falta));
}else{ }else{
$fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d'); $fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d');
$dia_falta = date('w', strtotime($fecha_cambio)); $dia_falta = date('w', strtotime($fecha_cambio));
} }
//Valida que tenga clase en la fecha de falta //Valida que tenga clase en la fecha de falta
if(intval($dia) != intval($dia_falta)){ if(intval($dia) != intval($dia_falta)){
//header("Location:".$pag."?error=11"); //header("Location:".$pag."?error=11");
echo intval($dia)." != ".intval($dia_falta); echo intval($dia)." != ".intval($dia_falta);
exit(); exit();
} }
if($tipo == 1){//Reposición if($tipo == 1){//Reposición
// Valida que grupo no tenga clases // Valida que grupo no tenga clases
/*$result = validaConflictoHoras($pdo, $gpo, $dia, $hora, $materia, "-", $fecha_ini, $fecha_fin, $duracion); /*$result = validaConflictoHoras($pdo, $gpo, $dia, $hora, $materia, "-", $fecha_ini, $fecha_fin, $duracion);
if($result != ""){//error if($result != ""){//error
//echo $result; //echo $result;
header("Location:".$pag."?error=7"); header("Location:".$pag."?error=7");
exit(); exit();
} }
//Valida que profesor no este en 2 reposiciones al mismo tiempo //Valida que profesor no este en 2 reposiciones al mismo tiempo
*/ */
$traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur, :id)', $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur, :id)',
[':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo, ':id'=>$id] [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo, ':id'=>$id]
)["traslape_profesor_reposicion"]; )["traslape_profesor_reposicion"];
echo "SELECT * from traslape_profesor_reposicion($prof, '".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."', $hora, $duracion_tiempo, $id)"; echo "SELECT * from traslape_profesor_reposicion($prof, '".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."', $hora, $duracion_tiempo, $id)";
if($traslape){ if($traslape){
//header("Location:".$pag."?error=9"); //header("Location:".$pag."?error=9");
echo "traslape"; echo "traslape";
exit(); exit();
} }
/* /*
$log = new LogActividad(); $log = new LogActividad();
$desc_log = "Actualiza reposición ID[".$id."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."]"; $desc_log = "Actualiza reposición ID[".$id."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$hor."]";
$log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/
} }
try{ try{
$db->query('SELECT * from fu_reposicion_solicitud(:id, :f_falta, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)', $db->query('SELECT * from fu_reposicion_solicitud(:id, :f_falta, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)',
[':id'=> $id, ':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, [':id'=> $id, ':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora,
':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo
] ]
); );
}catch(Exception $e){ }catch(Exception $e){
//header("Location: ".$pag."?error=2"); //header("Location: ".$pag."?error=2");
print_r($e->getMessage()); print_r($e->getMessage());
echo "SELECT * from fu_reposicion_solicitud(:id, :f_falta, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)'"; echo "SELECT * from fu_reposicion_solicitud(:id, :f_falta, :f_nueva, :hora_nueva, NULL, NULL, :desc, :alumnos, :aula, :duracion, NULL)'";
print_r( print_r(
[':id'=> $id, ':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, [':id'=> $id, ':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora,
':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo
]); ]);
exit(); exit();
} }
header("Location: ".$pag); header("Location: ".$pag);
exit(); exit();
?> ?>

View File

@@ -1,33 +1,33 @@
<?php <?php
/* /*
* Borra reposición * Borra reposición
*/ */
$pag = "../reposiciones_crear.php"; $pag = "../reposiciones_crear.php";
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
if(!isset($_POST["id"])){ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información necesaria."; $return["error"] = "Error! No se recibió la información necesaria.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
$creador = $user->user["id"]; $creador = $user->user["id"];
try{ try{
$db->query('SELECT * from fd_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]); $db->query('SELECT * from fd_solicitud(:id, :creador)', [":id"=> $id, ":creador"=>$creador]);
$return["ok"] = "La solicitud se borró correctamente"; $return["ok"] = "La solicitud se borró correctamente";
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al borrar la solicitud."; $return["error"] = "Ocurrió un error al borrar la solicitud.";
} }
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,101 +1,101 @@
<?php <?php
/* /*
* Obtiene datos de reposición * Obtiene datos de reposición
*/ */
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die('No se ha iniciado sesión'); die('No se ha iniciado sesión');
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
//--- Objeto para validar usuario. El id de usuario lo lee desde sesión //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
/*if(!$objSesion->tieneAcceso()){ /*if(!$objSesion->tieneAcceso()){
$return["error"] = "Error! No tienes permisos para realizar esta acción."; $return["error"] = "Error! No tienes permisos para realizar esta acción.";
}else*/ if(!isset($_POST["id"])){ }else*/ if(!isset($_POST["id"])){
$return["error"] = "Error! No se recibió la información de la reposición."; $return["error"] = "Error! No se recibió la información de la reposición.";
}else{ }else{
$id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
try{ try{
if($user->rol["rol_id"] == 7){//es supervisor if($user->rol["rol_id"] == 7){//es supervisor
$rs = $db->querySingle('SELECT * from fs_solicitud(:id, NULL, NULL, NULL, NULL, NULL, NULL, :sup)', $rs = $db->querySingle('SELECT * from fs_solicitud(:id, NULL, NULL, NULL, NULL, NULL, NULL, :sup)',
[':id' => $id, ':sup'=>$user->user["id"]] [':id' => $id, ':sup'=>$user->user["id"]]
); );
}else{//coordinador }else{//coordinador
$rs = $db->querySingle('SELECT * from fs_solicitud(:id, :fac, NULL, NULL, NULL, NULL, NULL, null)', $rs = $db->querySingle('SELECT * from fs_solicitud(:id, :fac, NULL, NULL, NULL, NULL, NULL, null)',
[':id' => $id, ":fac"=>$user->facultad["facultad_id"] ] [':id' => $id, ":fac"=>$user->facultad["facultad_id"] ]
); );
} }
}catch(Exception $e){ }catch(Exception $e){
$return["error"] = "Ocurrió un error al leer los datos de la reposición."; $return["error"] = "Ocurrió un error al leer los datos de la reposición.";
echo json_encode($return); echo json_encode($return);
exit(); exit();
} }
$dias = array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'); $dias = array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');
if($rs["solicitudtipo_id"]!=3){ if($rs["solicitudtipo_id"]!=3){
$hora_nueva = explode(":",$rs["horario_hora"]); $hora_nueva = explode(":",$rs["horario_hora"]);
} }
if($rs["solicitudtipo_id"]!=4){ if($rs["solicitudtipo_id"]!=4){
$return["fecha_clase"] = isset($rs["fecha_clase"]) ? date('d/m/Y', strtotime($rs["fecha_clase"])):''; $return["fecha_clase"] = isset($rs["fecha_clase"]) ? date('d/m/Y', strtotime($rs["fecha_clase"])):'';
}else{ }else{
$return["fecha_clase"] = $dias[$rs["horario_dia"]]; $return["fecha_clase"] = $dias[$rs["horario_dia"]];
} }
$return["hora_clase_ini"] = $rs["horario_hora"]; $return["hora_clase_ini"] = $rs["horario_hora"];
$return["hora_clase_fin"] = $rs["horario_hora_fin"]; $return["hora_clase_fin"] = $rs["horario_hora_fin"];
$return["fecha_nueva"] = isset($rs["fecha_nueva"]) ? date('d/m/Y', strtotime($rs["fecha_nueva"])):''; $return["fecha_nueva"] = isset($rs["fecha_nueva"]) ? date('d/m/Y', strtotime($rs["fecha_nueva"])):'';
$return["hora_nueva"] = $rs["hora_nueva"]; $return["hora_nueva"] = $rs["hora_nueva"];
$hora_nueva = explode(":",$rs["hora_nueva"]); $hora_nueva = explode(":",$rs["hora_nueva"]);
$return["hora_ini"] = $hora_nueva[0]; $return["hora_ini"] = $hora_nueva[0];
$return["min_ini"] = $hora_nueva[1]; $return["min_ini"] = $hora_nueva[1];
$return["hora_nueva_fin"] = $rs["hora_nueva_fin"]; $return["hora_nueva_fin"] = $rs["hora_nueva_fin"];
$hora_nueva_fin = explode(":",$rs["hora_nueva_fin"]); $hora_nueva_fin = explode(":",$rs["hora_nueva_fin"]);
$return["hora_fin"] = $hora_nueva_fin[0]; $return["hora_fin"] = $hora_nueva_fin[0];
$return["min_fin"] = $hora_nueva_fin[1]; $return["min_fin"] = $hora_nueva_fin[1];
$return["duracion"] = $rs["duracion_interval"]; $return["duracion"] = $rs["duracion_interval"];
// $return["carrera"] = $rs["PlanEstudio_desc"]; // $return["carrera"] = $rs["PlanEstudio_desc"];
$return["horario"] = $rs["horario_id"]; $return["horario"] = $rs["horario_id"];
$return["materia"] = $rs["materia_id"]; $return["materia"] = $rs["materia_id"];
$return["materia_desc"] = $rs["materia_nombre"]; $return["materia_desc"] = $rs["materia_nombre"];
$return["salon"] = $rs["salon_id"]; $return["salon"] = $rs["salon_id"];
if($rs["salon_id"]==""){ if($rs["salon_id"]==""){
$return["salon_desc"] = "Pendiente"; $return["salon_desc"] = "Pendiente";
}else{ }else{
$salon_json = json_decode($rs["salon_array"], true); $salon_json = json_decode($rs["salon_array"], true);
if($salon_json[0]== "UNIVERSIDAD LA SALLE"){ if($salon_json[0]== "UNIVERSIDAD LA SALLE"){
unset($salon_json[0]); unset($salon_json[0]);
} }
$return["salon_desc"] = join(" / ",$salon_json); $return["salon_desc"] = join(" / ",$salon_json);
} }
$return["ciclo"] = $rs["ciclo"]; $return["ciclo"] = $rs["ciclo"];
$return["bloque"] = $rs["bloque"]; $return["bloque"] = $rs["bloque"];
$return["profesor"] = $rs["profesor_id"]; $return["profesor"] = $rs["profesor_id"];
$return["profesor_nombre"] = $rs["profesor_nombre"]; $return["profesor_nombre"] = $rs["profesor_nombre"];
$return["comentario"] = $rs["descripcion"]; $return["comentario"] = $rs["descripcion"];
$return["alumnos"] = $rs["alumnos"]; $return["alumnos"] = $rs["alumnos"];
$return["aula"] = $rs["tipoaula_id"]; $return["aula"] = $rs["tipoaula_id"];
$return["aula_desc"] = $rs["tipoaula_nombre"]; $return["aula_desc"] = $rs["tipoaula_nombre"];
$return["aula_supervisor"] = $rs["tipoaula_supervisor"]; $return["aula_supervisor"] = $rs["tipoaula_supervisor"];
$return["dia_nombre"] = isset($rs["fecha_clase"]) ? date('w', strtotime($rs["fecha_clase"])): ''; $return["dia_nombre"] = isset($rs["fecha_clase"]) ? date('w', strtotime($rs["fecha_clase"])): '';
$return["dia"] = isset($rs["fecha_clase"]) ? $dias[date('w', strtotime($rs["fecha_clase"]))]: ''; $return["dia"] = isset($rs["fecha_clase"]) ? $dias[date('w', strtotime($rs["fecha_clase"]))]: '';
$return["motivo_cancelacion"] = $rs["motivo_cancelacion"]; $return["motivo_cancelacion"] = $rs["motivo_cancelacion"];
$return["estado"] = $rs["estado_reposicion_id"]; $return["estado"] = $rs["estado_reposicion_id"];
$return["facultad"] = $rs["facultad_nombre"]; $return["facultad"] = $rs["facultad_nombre"];
$return["carrera"] = $rs["carrera_comun"]? $rs["carrera_nombre"]:$rs["horario_carrera"];//si es común, se muestra la carrera de la materia, si no, la carrera del horario $return["carrera"] = $rs["carrera_comun"]? $rs["carrera_nombre"]:$rs["horario_carrera"];//si es común, se muestra la carrera de la materia, si no, la carrera del horario
$return["grupo"] = $rs["horario_grupo"]; $return["grupo"] = $rs["horario_grupo"];
$return["supervisor_nombre"] = $rs["supervisor_nombre"]; $return["supervisor_nombre"] = $rs["supervisor_nombre"];
$return["solicitudtipo_id"] = $rs["solicitudtipo_id"]; $return["solicitudtipo_id"] = $rs["solicitudtipo_id"];
$return["solicitudtipo"] = $rs["solicitudtipo_nombre"]; $return["solicitudtipo"] = $rs["solicitudtipo_nombre"];
} }
echo json_encode($return); echo json_encode($return);
?> ?>

View File

@@ -1,28 +1,28 @@
<?php <?php
header('Content-Type: application/json'); header('Content-Type: application/json');
$ruta = "../"; $ruta = "../";
require_once "../class/c_login.php"; require_once "../class/c_login.php";
// check if the session is started // check if the session is started
if (!isset($_SESSION['user'])) if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión'])); die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']); $user = unserialize($_SESSION['user']);
$ruta = "../"; $ruta = "../";
require_once "../include/bd_pdo.php"; require_once "../include/bd_pdo.php";
$facultad_id = $user->facultad['facultad_id']; $facultad_id = $user->facultad['facultad_id'];
$materias = $db->query(<<<SQL $materias = $db->query(<<<SQL
SELECT usuario_id, usuario_nombre, usuario_clave SELECT usuario_id, usuario_nombre, usuario_clave
FROM usuario FROM usuario
WHERE WHERE
(facultad_id = :facultad_id OR :facultad_id IS NULL) (facultad_id = :facultad_id OR :facultad_id IS NULL)
ORDER BY usuario_nombre ASC ORDER BY usuario_nombre ASC
SQL, SQL,
array('facultad_id' => $facultad_id) array('facultad_id' => $facultad_id)
); );
// $user->print_to_log("Crea carrera", old: $_POST); // $user->print_to_log("Crea carrera", old: $_POST);
die(json_encode($materias)); die(json_encode($materias));

View File

@@ -1,124 +1,414 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
$user = Login::get_user();
$user->access();
if ($user->acceso == null) {
// die($access);
header('Location: main.php?error=1');
} else {
$user->print_to_log('Carreras');
}
$facultad = $user->facultad['facultad_id'] ?? -1;
if ($user->admin) {
$facultad = null;
}
?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Auditoría asistencial</title> <title>Carreras</title>
<?php <?php
include 'import/html_css_files.php'; include 'import/html_css_files.php';
?> ?>
<link rel="stylesheet" type="text/css" href="https://unpkg.com/trix@2.0.0/dist/trix.css">
<style>
[v-cloak] {
display: none;
}
</style>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
</head> </head>
<body> <body>
<? <?php
$redirect = $_SERVER['PHP_SELF'];
include "import/html_header.php"; include "import/html_header.php";
global $user;
html_header( html_header(
"Carreras", "CARRERAS",
"Sistema de gestión de checador", "Gestión de Checador "
); );
?> $user->access();
<main class="container-fluid px-4 my-4" id="app" v-cloak @vue:mounted="mounted" style="min-height: 70vh;"> $max_count = 30;
<section class="row mt-4">
<div class="col-12 position-relative">
<!-- Loop for messages -->
<div class="toast show shadow-sm mb-3 bg-white"
style="position: fixed; top: 15%; right: 1%; max-width: 300px;" role="alert" aria-live="assertive"
aria-atomic="true"
@vue:mounted="$('.toast').toast({delay: 5000}).toast('show').on('hidden.bs.toast', () => { message.text = '' })"
v-if="message.text">
<div class="toast-header">
<strong class="mr-auto text-primary text-uppercase text-center w-100 px-4">
{{ message.title }}
</strong>
<small class="text-muted">{{ message.timestamp }}</small>
<button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close"
@click="message.text = ''">
<span aria-hidden="true">
<i class="fas fa-times"></i>
</span>
</button>
</div>
<div class="toast-body">
<div :class="message.type == 'success' ? 'text-success' : 'text-danger'"><i
:class="message.type == 'success' ? 'fas fa-check-circle' : 'fas fa-times-circle'"></i>
{{ message.text }}
</div>
</div>
</div>
</div>
</section>
<div class="container">
<div class="row" v-for="facultad in carreras">
<!-- Facultad Card -->
<div class="card col-12 mb-4 shadow-lg">
<div class="card-header bg-primary text-white">
<h3 class="mb-1">{{ facultad.facultad_nombre }}</h3>
</div>
<div class="card-body bg-white">
<div class="row justify-content-center">
<!-- Loop for Carreras -->
<div class="col-md-6 mb-3" v-for="carrera in facultad.carreras">
<div class="card border-secondary mb-3 shadow-sm">
<div class="card-body">
<h5 class="card-title text-primary text-uppercase text-center w-100 px-4 mb-3 text-truncate text-break border-bottom border-secondary pb-2"
:title="carrera.carrera_nombre">
{{ carrera.carrera_nombre }}
</h5>
<!-- Dropdown for Niveles --> /*$sql = "SELECT * FROM (:nombre, :carrera, :facultad)";
<div class="dropdown"> if (isset($_POST["desc"])) {
<button class="btn btn-outline-secondary dropdown-toggle" type="button" $desc = $_POST["desc"];
data-toggle="dropdown" aria-expanded="false" $filter_desc = htmlspecialchars($desc, ENT_QUOTES, 'UTF-8');
@vue:mounted="$('.dropdown-toggle').dropdown()"> } else {
{{ carrera.nivel_nombre }} $desc = null;
</button> }
<div class="dropdown-menu shadow">
<a class="dropdown-item" v-for="nivel in niveles" key="nivel.nivel_id" if (isset($_POST["carrera"])) {
style="cursor: pointer; user-select: none;" $pcarrera = $_POST["carrera"];
@click="setNivel(carrera, nivel)" $filter_carrera = htmlspecialchars($pcarrera, ENT_QUOTES, 'UTF-8');
:class="nivel.nivel_id == carrera.nivel_id ? 'active' : ''" } else {
:disabled="nivel.nivel_id == carrera.nivel_id"> $pcarrera = null;
{{ nivel.nivel_nombre }} }
</a>
</div> if ($pcarrera == "") {
</div> $sql .= "LIMIT 30";
</div> }
</div> $fs_materias = query(
</div> <!-- End of Carreras loop --> $sql,
</div> array(":nombre" => $desc, ":carrera" => $pcarrera, ":facultad" => $facultad),
</div> single: false
);
$fs_carreras = query(
"SELECT * FROM fs_carreras(:facultad, null, null) ORDER BY unaccent(carrera_nombre)",
array(":facultad" => $facultad),
single: false
);*/
$stmt = $pdo->prepare('SELECT ca.carrera_id, ca.clave_carrera, ca.carrera_nombre, f.facultad_nombre
FROM carrera ca
JOIN facultad f ON f.facultad_id = ca.facultad_id
WHERE ca.carrera_id != 0
ORDER BY f.facultad_nombre, ca.carrera_nombre');
$stmt->execute();
$carr = $stmt->fetchAll();
$stmt = $pdo->prepare('SELECT * FROM nivel');
$stmt->execute();
$nivel = $stmt->fetchAll();
$stmt = $pdo->prepare('SELECT * FROM facultad');
$stmt->execute();
$facultad = $stmt->fetchAll();
//print_r($fs_materias);
?>
<main class="content marco">
<!-- Filtro -->
<!-- Tabla -->
<div class="row">
<div class="col-12 table-responsive">
<!--
<button type="button" class="btn btn-outline-primary" data-toggle="modal"
data-target="#modal">
<span class="ing-editar ing-fw"></span>
</button>
-->
<div class="col-12 text-end pb-3">
<button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modalCrear">
<span class="ing-mas ing-fw"></span>
Crear
</button>
</div> </div>
<!-- End of Facultad Card -->
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Clave Carrera</th>
<th>Nombre Facultad</th>
<th>Nombre Carrera</th>
<th>Editar</th>
</tr>
</thead>
<tbody>
<?php
if ($carr) {
foreach ($carr as $materia) {
?>
<tr data-id="<?= $materia["carrera_id"]; ?>" id="<?= $materia["carrera_id"]; ?>">
<td class="text-primary">
<?= $materia["clave_carrera"]; ?>
</td>
<td class="text-primary">
<?= $materia["facultad_nombre"]; ?>
</td>
<td class="text-primary">
<!-- <small>(<?= $materia["clave_materia"]; ?>)</small> -->
<?= $materia["carrera_nombre"]; ?>
</td>
<td>
<button type="button" class="btn btn-outline-primary" data-toggle="modal"
data-target="#modal">
<span class="ing-editar ing-fw"></span>
</button>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<div id="message"></div>
</div> </div>
</div> </div>
</main> </main>
<? <!-- Footer -->
include "import/html_footer.php"; ?> <?php
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" include "import/html_footer.php";
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" ?>
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" <!-- Modal Crear-->
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" <div class="modal fade" id="modalCrear" tabindex="-1" role="dialog" aria-labelledby="modalCrear" aria-hidden="true">
crossorigin="anonymous"></script> <div class="modal-dialog modal-dialog-centered" role="document">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" <div class="modal-content">
integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" <div class="modal-header">
crossorigin="anonymous"></script> <h4 class="col-12 modal-title text-center">
<span id="modalLable">
Crear Carrera
</span>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h4>
</div>
<div class="modal-body">
<form action="action\action_carreras_insert.php" method="post" id="formaModal"
onsubmit="return valida_campos_crear()">
<div class="form-box">
<div class="form-group row">
<label for="carreraCrear" class="col-4 col-form-label">Nombre Carrera*</label>
<div class="col-8">
<input id="carreraCrear" name="carreraCrear" type="text" class="form-control" maxlength="100">
</div>
</div>
<div class="form-group row">
<label for="facultadCrear" class="col-4 col-form-label">Nombre Facultad*</label>
<div class="col-8">
<?php
echo '<select class="form-control area" id="facultadCrear" name="facultadCrear" required style="color: black;">';
foreach ($facultad as $op) {
echo '<option value="' . $op['facultad_id'] . '">' . $op['facultad_nombre'] . '</option>';
}
echo '</select>';
?>
</div>
</div>
<div class="form-group row">
<label for="nivelCrear" class="col-4 col-form-label">Nivel*</label>
<div class="col-8">
<?php
echo '<select class="form-control area" id="nivelCrear" name="nivelCrear" required style="color: black;">';
foreach ($nivel as $op) {
echo '<option value="' . $op['nivel_id'] . '">' . $op['nivel_nombre'] . '</option>';
}
echo '</select>';
?>
</div>
</div>
<div class="form-group row">
<label for="nombreCarreraCrear" class="col-4 col-form-label">Clave de la Carrera*</label>
<div class="col-8">
<input id="nombreCarreraCrear" name="nombreCarreraCrear" type="text" class="form-control"
maxlength="100">
</div>
</div>
<div class="form-group row">
<div class="offset-4 col-8">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1">
<span class="ing-aceptar ing-fw"></span> Guardar
</button>
<button type="reset" class="btn btn-outline-danger" data-dismiss="modal">
<span class="ing-cancelar ing-fw"></span> Cancelar
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- End Modal Crear-->
<!-- Modal -->
<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="col-12 modal-title text-center">
<span id="modalLable">
Editar Carrera
</span>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</h4>
</div>
<div class="modal-body">
<form action="./action/action_carreras_update.php" method="post" id="formaModal"
onsubmit="return valida_campos_editar()">
<input type="hidden" name="id" id="carrera_id">
<div class="form-box">
<div class="form-group row">
<label for="carreraEditar" class="col-4 col-form-label">Nombre Carrera*</label>
<div class="col-8">
<input id="carreraEditar" name="carreraEditar" type="text" class="form-control" maxlength="100">
</div>
</div>
<div class="form-group row">
<label for="facultad" class="col-4 col-form-label">Nombre Facultad*</label>
<div class="col-8">
<?php
echo '<select class="form-control area" id="facultadEditar" name="facultadEditar" required style="color: black;">';
foreach ($facultad as $op) {
echo '<option value="' . $op['facultad_id'] . '">' . $op['facultad_nombre'] . '</option>';
}
echo '</select>';
?>
</div>
</div>
<div class="form-group row">
<label for="nivel" class="col-4 col-form-label">Nivel*</label>
<div class="col-8">
<?php
echo '<select class="form-control area" id="nivelEditar" name="nivelEditar" required style="color: black;">';
foreach ($nivel as $op) {
echo '<option value="' . $op['nivel_id'] . '">' . $op['nivel_nombre'] . '</option>';
}
echo '</select>';
?>
</div>
</div>
<div class="form-group row">
<label for="nombreCarreraEditar" class="col-4 col-form-label">Clave de la Carrera*</label>
<div class="col-8">
<input id="nombreCarreraEditar" name="nombreCarreraEditar" type="text" class="form-control"
maxlength="100">
</div>
</div>
<div class="form-group row">
<div class="offset-4 col-8">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1">
<span class="ing-aceptar ing-fw"></span> Guardar
</button>
<button type="reset" class="btn btn-outline-danger" data-dismiss="modal">
<span class="ing-cancelar ing-fw"></span> Cancelar
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- End Modal -->
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script> <script src="js/datalist.js"></script>
<script src="js/carreras.js?<?= rand(0, 2) ?>" type="module"></script> <?php
<script src="js/scrollables.js"></script> require_once 'js/messages.php';
?>
<script>
function valida_campos_editar() {
$('.is-invalid').removeClass('is-invalid');
var ok = true;
if ($("#carreraEditar").val().trim() === "") {
$("#carreraEditar").addClass("is-invalid");
ok = false;
}
if ($("#nombreCarreraEditar").val().trim() === "") {
$("#nombreCarreraEditar").addClass("is-invalid");
ok = false;
}
return ok;
}
function valida_campos_crear() {
$('.is-invalid').removeClass('is-invalid');
var ok = true;
if ($("#carreraCrear").val().trim() === "") {
$("#carreraCrear").addClass("is-invalid");
ok = false;
}
if ($("#nombreCarreraCrear").val().trim() === "") {
$("#nombreCarreraCrear").addClass("is-invalid");
ok = false;
}
return ok;
}
$(document).on("click", ".btn-reset", function (event) {
var forma = $(this).parents("form");
forma.find("input[type=text]").val("");
setDatalistFirst("#filter_carrera");
forma.submit();
});
$('#modal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var id = button.closest("tr").data("id");
//var id = $(event.relatedTarget).parents("tr").data("id");
$.ajax({
url: "action/action_carreras_select.php",
type: "post",
dataType: "json",
data: {
idmateria: id
},
success: function (result) {
$("#carreraEditar").val(result["carrera_nombre"]);
$("#facultadEditar").val(result["facultad_id"]);
$("#nivelEditar").val(result["nivel_id"]);
$("#nombreCarreraEditar").val(result["clave_carrera"]);
$("#carrera_id").val(result["carrera_id"]);
},
error: function () {
console.log("Error")
}
});
});
</script>
</body> </body>
</html> </html>

49
periodos_sgu.php Normal file
View File

@@ -0,0 +1,49 @@
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://portal.ulsa.edu.mx/servicios/AuditoriaAsistencialRest/AuditoriaAsistencialService.svc/auditoriaAsistencial/inicioSesion/seleccionar',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{"username":"SGU_APSA_AUD_ASIST","password":"B4qa594JFPr2ufHrZdHS8A=="}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Transfer-Encoding: chunked'
),
));
$response = curl_exec($curl);
curl_close($curl);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://portal.ulsa.edu.mx/servicios/AuditoriaAsistencialRest/AuditoriaAsistencialService.svc/auditoriaAsistencial/catalogos/periodos/v1/seleccionar',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS =>'[]',
CURLOPT_HTTPHEADER => array(
"token:".json_decode($response, true),
'username: SGU_APSA_AUD_ASIST',
'Transfer-Encoding: chunked'
),
));
$response = curl_exec($curl);
$periodos = implode("\n", array_map(
fn($periodo) => <<<HTML
<li class="list-group item" value="{$periodo->IdPeriodo}" data-clave="{$periodo->NombrePeriodo}">
{$periodo->NombrePeriodo} - {$periodo->NombreNivel}
</li>
HTML, array_filter(
json_decode($response),
fn($periodo) => in_array($periodo->IdPeriodo, [])
)));
curl_close($curl);
echo <<<HTML
<ul class="list-group" id="alumnos">
{$periodos}
</ul>
HTML;