This commit is contained in:
2023-08-08 17:04:21 +00:00
parent 31ecda89b2
commit ec382e989a
147 changed files with 18206 additions and 18063 deletions

View File

@@ -1,43 +1,43 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
extract($_POST);
$initial_date = DateTime::createFromFormat('d/m/Y', $fecha_inicial);
$final_date = DateTime::createFromFormat('d/m/Y', $fecha_final);
if ($initial_date > $final_date) {
echo json_encode(['error' => 'La fecha inicial no puede ser mayor a la fecha final']);
die;
}
// Nombre del profesor es opcional
$params = [
':carrera' => empty($carrera) ? null : $carrera,
':periodo' => $periodo,
':nombre' => empty($nombre) ? null : $nombre,
':clave' => empty($clave) ? null : $clave,
':initial_date' => $initial_date->format('Y-m-d'),
':final_date' => $final_date->format('Y-m-d'),
':facultad' => $facultad,
];
$response = json_encode(
[
"retardo" => query("SELECT FS_HAS_RETARDO(:facultad) retardo", [
'facultad' => $facultad
]),
"reporte" => queryAll(
"SELECT * FROM fs_asistencia_reporte(:carrera, :periodo, :clave, :nombre, :facultad, :initial_date, :final_date) where total > 0",
$params
)
]
);
$user->print_to_log("Genera reporte de asistencias", old: $params);
echo $response;
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
extract($_POST);
$initial_date = DateTime::createFromFormat('d/m/Y', $fecha_inicial);
$final_date = DateTime::createFromFormat('d/m/Y', $fecha_final);
if ($initial_date > $final_date) {
echo json_encode(['error' => 'La fecha inicial no puede ser mayor a la fecha final']);
die;
}
// Nombre del profesor es opcional
$params = [
':carrera' => empty($carrera) ? null : $carrera,
':periodo' => $periodo,
':nombre' => empty($nombre) ? null : $nombre,
':clave' => empty($clave) ? null : $clave,
':initial_date' => $initial_date->format('Y-m-d'),
':final_date' => $final_date->format('Y-m-d'),
':facultad' => $facultad,
];
$response = json_encode(
[
"retardo" => query("SELECT FS_HAS_RETARDO(:facultad) retardo", [
'facultad' => $facultad
]),
"reporte" => queryAll(
"SELECT * FROM fs_asistencia_reporte(:carrera, :periodo, :clave, :nombre, :facultad, :initial_date, :final_date) where total > 0",
$params
)
]
);
$user->print_to_log("Genera reporte de asistencias", old: $params);
echo $response;

View File

@@ -1,100 +1,100 @@
<?php
$ruta = "../";
require_once "../vendor/autoload.php";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$user->print_to_log('Genera excel de asistencias');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//crea imagen
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('La Salle');
$drawing->setDescription('La Salle');
$drawing->setPath('../imagenes/logo.png'); // put your path and image here
$drawing->setCoordinates('A1');
$drawing->setHeight(100);
$drawing->setOffsetX(10);
//agrega imagen
$drawing->setWorksheet($spreadsheet->getActiveSheet());
// In POST
/** Array
* * nombre
* * clave
* * id
* * total
* * asistencias
* * faltas
* * justificaciones
* * retardos
*/
$retardo = query("SELECT COALESCE(FS_HAS_RETARDO(:facultad), FALSE) AS retardo", [':facultad' => $user->facultad['facultad_id']])['retardo'];
extract($_POST);
$row = 6;
$sheet->setCellValue("A$row", 'Clave');
$sheet->setCellValue("B$row", 'Profesor');
$sheet->setCellValue("C$row", 'Asistencias');
$sheet->setCellValue("D$row", 'Faltas');
$sheet->setCellValue("E$row", 'Justificaciones');
$sheet->setCellValue("F$row", 'Retardos');
$sheet->setCellValue("G$row", 'Total');
// $row++;
$col = 0;
# die(print_r($asistencias, true));
foreach (json_decode($asistencias, true) as $profesor) {
$row++;
$sheet->setCellValue("A$row", $profesor['profesor_clave']);
$sheet->setCellValue("B$row", $profesor['profesor_nombre']);
$sheet->setCellValue("C$row", $profesor['asistencias']);
$sheet->setCellValue("D$row", $profesor['faltas']);
$sheet->setCellValue("E$row", $profesor['justificaciones']);
$sheet->setCellValue("F$row", $profesor['retardos']);
$sheet->setCellValue("G$row", $profesor['total']);
}
# Style
$sheet->getStyle("A6:G$row")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
$sheet->getStyle("A6:G$row")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle("A6:G$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$sheet->getStyle("A6:G$row")->getAlignment()->setWrapText(true);
$sheet->getStyle("A6:G$row")->getFont()->setSize(12);
$sheet->getStyle("A6:G$row")->getFont()->setName('Indivisa Sans');
# Autosize columns
foreach (range('A', 'G') as $column) {
$sheet->getColumnDimension($column)->setAutoSize(true);
}
# filters in the column
$sheet->setAutoFilter("A6:G6");
if (!$retardo) # hide column
$sheet->getColumnDimension('F')->setVisible(false);
#$writer = new Xlsx($spreadsheet);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
# $writer->save('asistencias.xlsx');
// download
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="asistencias.xlsx"');
header('Cache-Control: max-age=0');
// cache expires in 60 seconds (1 minute)
header('Expires: mon 26 jul 1997 05:00:00 gmt');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');
$writer->save('php://output');
<?php
$ruta = "../";
require_once "../vendor/autoload.php";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$user->print_to_log('Genera excel de asistencias');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//crea imagen
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('La Salle');
$drawing->setDescription('La Salle');
$drawing->setPath('../imagenes/logo.png'); // put your path and image here
$drawing->setCoordinates('A1');
$drawing->setHeight(100);
$drawing->setOffsetX(10);
//agrega imagen
$drawing->setWorksheet($spreadsheet->getActiveSheet());
// In POST
/** Array
* * nombre
* * clave
* * id
* * total
* * asistencias
* * faltas
* * justificaciones
* * retardos
*/
$retardo = query("SELECT COALESCE(FS_HAS_RETARDO(:facultad), FALSE) AS retardo", [':facultad' => $user->facultad['facultad_id']])['retardo'];
extract($_POST);
$row = 6;
$sheet->setCellValue("A$row", 'Clave');
$sheet->setCellValue("B$row", 'Profesor');
$sheet->setCellValue("C$row", 'Asistencias');
$sheet->setCellValue("D$row", 'Faltas');
$sheet->setCellValue("E$row", 'Justificaciones');
$sheet->setCellValue("F$row", 'Retardos');
$sheet->setCellValue("G$row", 'Total');
// $row++;
$col = 0;
# die(print_r($asistencias, true));
foreach (json_decode($asistencias, true) as $profesor) {
$row++;
$sheet->setCellValue("A$row", $profesor['profesor_clave']);
$sheet->setCellValue("B$row", $profesor['profesor_nombre']);
$sheet->setCellValue("C$row", $profesor['asistencias']);
$sheet->setCellValue("D$row", $profesor['faltas']);
$sheet->setCellValue("E$row", $profesor['justificaciones']);
$sheet->setCellValue("F$row", $profesor['retardos']);
$sheet->setCellValue("G$row", $profesor['total']);
}
# Style
$sheet->getStyle("A6:G$row")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
$sheet->getStyle("A6:G$row")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle("A6:G$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$sheet->getStyle("A6:G$row")->getAlignment()->setWrapText(true);
$sheet->getStyle("A6:G$row")->getFont()->setSize(12);
$sheet->getStyle("A6:G$row")->getFont()->setName('Indivisa Sans');
# Autosize columns
foreach (range('A', 'G') as $column) {
$sheet->getColumnDimension($column)->setAutoSize(true);
}
# filters in the column
$sheet->setAutoFilter("A6:G6");
if (!$retardo) # hide column
$sheet->getColumnDimension('F')->setVisible(false);
#$writer = new Xlsx($spreadsheet);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
# $writer->save('asistencias.xlsx');
// download
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="asistencias.xlsx"');
header('Cache-Control: max-age=0');
// cache expires in 60 seconds (1 minute)
header('Expires: mon 26 jul 1997 05:00:00 gmt');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');
$writer->save('php://output');

View File

@@ -1,57 +1,57 @@
<?
#input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
$information = [
'GET' => [
#'periodo_id',
],
];
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
$data = $db->query("SELECT *, horario_view.facultad_id FROM registro
JOIN horario_view USING (horario_id)
LEFT JOIN estado_supervisor USING (estado_supervisor_id)
LEFT JOIN profesor USING (profesor_id)
LEFT JOIN usuario ON usuario.usuario_id = registro.supervisor_id
ORDER BY registro_fecha_ideal DESC, horario_hora ASC, registro_fecha_supervisor ASC");
$last_query = [
'query' => $db->getLastQuery(),
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
<?
#input $_GET['id_espacio_sgu']
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
$information = [
'GET' => [
#'periodo_id',
],
];
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
$data = $db->query("SELECT *, horario_view.facultad_id, horario_view.periodo_id FROM registro
JOIN horario_view USING (horario_id)
LEFT JOIN estado_supervisor USING (estado_supervisor_id)
LEFT JOIN profesor USING (profesor_id)
LEFT JOIN usuario ON usuario.usuario_id = registro.supervisor_id
ORDER BY registro_fecha_ideal DESC, horario_hora ASC, registro_fecha_supervisor ASC");
$last_query = [
'query' => $db->getLastQuery(),
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
}

View File

@@ -1,9 +1,9 @@
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$sql = "SELECT fu_update_estado_aviso(false, :id)";
$params = [':id' => $_POST['id']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$sql = "SELECT fu_update_estado_aviso(false, :id)";
$params = [':id' => $_POST['id']];
echo json_encode(query($sql, $params, false));
?>

View File

@@ -1,28 +1,28 @@
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$profesores = [];
if(isset($_POST['tipo'])){
foreach($_POST['tipo'] as $tipo){
$profesores_carrera = query("SELECT profesor_id FROM fs_profesor_carrera(:carrera_id)", [':carrera_id' => $tipo], false);
foreach($profesores_carrera as $profesor){
array_push($profesores, $profesor['profesor_id']);
}
}
}
$sql = "SELECT fi_aviso(:fecha_inicial, :fecha_final, :texto, :facultad)";
$params = [':fecha_inicial' => $_POST['fecha_inicial'], ':fecha_final' => $_POST['fecha_final'], ':texto' => $_POST['texto'], ':facultad' => $_POST['facultad']];
$aviso_id = query($sql, $params, true);
$sql = "SELECT fi_aviso_profesor(:aviso_id, :profesor_id)";
foreach($profesores as $profesor_id){
$params = [':aviso_id' => $aviso_id['fi_aviso'], ':profesor_id' => $profesor_id];
query($sql, $params, false);
}
header("Location: ../avisos.php");
exit();
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$profesores = [];
if(isset($_POST['tipo'])){
foreach($_POST['tipo'] as $tipo){
$profesores_carrera = query("SELECT profesor_id FROM fs_profesor_carrera(:carrera_id)", [':carrera_id' => $tipo], false);
foreach($profesores_carrera as $profesor){
array_push($profesores, $profesor['profesor_id']);
}
}
}
$sql = "SELECT fi_aviso(:fecha_inicial, :fecha_final, :texto, :facultad)";
$params = [':fecha_inicial' => $_POST['fecha_inicial'], ':fecha_final' => $_POST['fecha_final'], ':texto' => $_POST['texto'], ':facultad' => $_POST['facultad']];
$aviso_id = query($sql, $params, true);
$sql = "SELECT fi_aviso_profesor(:aviso_id, :profesor_id)";
foreach($profesores as $profesor_id){
$params = [':aviso_id' => $aviso_id['fi_aviso'], ':profesor_id' => $profesor_id];
query($sql, $params, false);
}
header("Location: ../avisos.php");
exit();
?>

View File

@@ -1,52 +1,52 @@
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$aviso = query("SELECT * FROM fs_aviso(:id, null, null, null, 0, null)", [':id' => $_POST['aviso_id']], true);
if(isset($_POST['fecha_final'])){
$fecha_fin = $_POST['fecha_final'];
}else{
$fecha_fin = $aviso['aviso_fecha_final'];
}
if(isset($_POST['texto'])){
$texto = $_POST['texto'];
}else{
$texto = $aviso['aviso_texto'];
}
if(isset($_POST['fecha_inicial'])){
$fecha_inicio = $_POST['fecha_inicial'];
}else{
$fecha_inicio = $aviso['aviso_fecha_inicial'];
}
$sql = "SELECT fu_update_aviso(:id, :fecha_fin, :texto, :fecha_inicio)";
$params = [':id' => $_POST['aviso_id'], ':fecha_fin' => $fecha_fin, ':texto' => $texto, ':fecha_inicio' => $fecha_inicio];
query($sql, $params, true);
query("SELECT fd_aviso_profesor(:aviso_id)", [':aviso_id' => $_POST['aviso_id']], false);
$profesores = [];
if(isset($_POST['tipo'])){
foreach($_POST['tipo'] as $tipo){
$profesores_carrera = query("SELECT profesor_id FROM fs_profesor_carrera(:carrera_id)", [':carrera_id' => $tipo], false);
foreach($profesores_carrera as $profesor){
array_push($profesores, $profesor['profesor_id']);
}
}
}
foreach($_POST['usuario'] as $profesor){
array_push($profesores, $profesor);
}
$sql = "SELECT fi_aviso_profesor(:aviso_id, :profesor_id)";
foreach($profesores as $profesor_id){
$params = [':aviso_id' => $_POST['aviso_id'], ':profesor_id' => $profesor_id];
query($sql, $params, false);
}
header("Location: ../avisos.php");
exit();
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$aviso = query("SELECT * FROM fs_aviso(:id, null, null, null, 0, null)", [':id' => $_POST['aviso_id']], true);
if(isset($_POST['fecha_final'])){
$fecha_fin = $_POST['fecha_final'];
}else{
$fecha_fin = $aviso['aviso_fecha_final'];
}
if(isset($_POST['texto'])){
$texto = $_POST['texto'];
}else{
$texto = $aviso['aviso_texto'];
}
if(isset($_POST['fecha_inicial'])){
$fecha_inicio = $_POST['fecha_inicial'];
}else{
$fecha_inicio = $aviso['aviso_fecha_inicial'];
}
$sql = "SELECT fu_update_aviso(:id, :fecha_fin, :texto, :fecha_inicio)";
$params = [':id' => $_POST['aviso_id'], ':fecha_fin' => $fecha_fin, ':texto' => $texto, ':fecha_inicio' => $fecha_inicio];
query($sql, $params, true);
query("SELECT fd_aviso_profesor(:aviso_id)", [':aviso_id' => $_POST['aviso_id']], false);
$profesores = [];
if(isset($_POST['tipo'])){
foreach($_POST['tipo'] as $tipo){
$profesores_carrera = query("SELECT profesor_id FROM fs_profesor_carrera(:carrera_id)", [':carrera_id' => $tipo], false);
foreach($profesores_carrera as $profesor){
array_push($profesores, $profesor['profesor_id']);
}
}
}
foreach($_POST['usuario'] as $profesor){
array_push($profesores, $profesor);
}
$sql = "SELECT fi_aviso_profesor(:aviso_id, :profesor_id)";
foreach($profesores as $profesor_id){
$params = [':aviso_id' => $_POST['aviso_id'], ':profesor_id' => $profesor_id];
query($sql, $params, false);
}
header("Location: ../avisos.php");
exit();
?>

View File

@@ -1,24 +1,24 @@
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
$nivel = $db->where("id", $_POST['periodo'])->getOne("fs_periodo", "nivel_id");
$carreras = $db
->where("nivel", $nivel)
->where("facultad", $_POST['facultad'])
->get("fs_carrera", null, "id, carrera");
$user->print_to_log("Crea carrera", old: $_POST);
die(json_encode($carreras));
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
$nivel = $db->where("id", $_POST['periodo'])->getOne("fs_periodo", "nivel_id");
$carreras = $db
->where("nivel", $nivel)
->where("facultad", $_POST['facultad'])
->get("fs_carrera", null, "id, carrera");
$user->print_to_log("Crea carrera", old: $_POST);
die(json_encode($carreras));

View File

@@ -1,19 +1,19 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
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);
echo json_encode(query($sql, $params, true));
$user->print_to_log("Crea carrera", new: $params);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
exit();
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
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);
echo json_encode(query($sql, $params, true));
$user->print_to_log("Crea carrera", new: $params);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
exit();

View File

@@ -1,16 +1,16 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
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);
echo json_encode(query($sql, $params, true));
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
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);
echo json_encode(query($sql, $params, true));

View File

@@ -1,19 +1,19 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
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)";
print_r($_POST);
$params = [':idcarrera' => $_POST['id'], ':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado'], ':idnivel' => $_POST['nivel']];
query($sql, $params, true);
$user->print_to_log("Actualiza carrera.", old: $old, new: $params);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
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)";
print_r($_POST);
$params = [':idcarrera' => $_POST['id'], ':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado'], ':idnivel' => $_POST['nivel']];
query($sql, $params, true);
$user->print_to_log("Actualiza carrera.", old: $old, new: $params);
header("Location: ../carreras.php?facultad=" . $_POST['facultad']);
exit();

View File

@@ -1,15 +1,15 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
#$sql = "SELECT * FROM diasfestivos WHERE diasfestivos_id = :id";
$sql = "DELETE FROM diasfestivos WHERE diasfestivos_id = :id";
$params = [':id' => $_POST['id']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
#$sql = "SELECT * FROM diasfestivos WHERE diasfestivos_id = :id";
$sql = "DELETE FROM diasfestivos WHERE diasfestivos_id = :id";
$params = [':id' => $_POST['id']];
echo json_encode(query($sql, $params, false));

View File

@@ -1,48 +1,48 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
if ($_POST['periodo'] == 0) {
$periodo = null;
} else {
$periodo = $_POST['periodo'];
}
if (isset($_POST['rango'])) {
$diaInicio = new DateTime(date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivo']))));
$diaFin = new DateTime(date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivoFin']))));
$cantidad = $diaFin->diff($diaInicio);
$date = date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivo'])));
for ($dias = 0; $dias <= $cantidad->days; $dias++) {
$sql = "SELECT fi_diasfestivos(:periodo, :dia)";
$params = [':periodo' => $periodo, ':dia' => $date];
query($sql, $params, false);
$date = date("Y-m-d", strtotime($date . "+ 1 days"));
}
header("Location: ../días_festivos.php");
exit();
} else {
$sql = "SELECT * FROM fs_diasfestivos(null, :dia)";
$params = [':dia' => $_POST['diaFestivo']];
$dia_general = query($sql, $params, false);
$sql = "SELECT * FROM fs_diasfestivos(null, null, :periodo, :dia)";
$params = [':periodo' => $periodo, ":dia" => $_POST['diaFestivo']];
$dia = query($sql, $params, false);
if (!$dia && !$dia_general) { //no hay repetidos
$sql = "SELECT fi_diasfestivos(:periodo, :dia)";
$id = query($sql, $params, false);
header("Location: ../días_festivos.php");
exit();
} else {
header("Location: ../días_festivos.php?error=1");
exit();
}
}
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
if ($_POST['periodo'] == 0) {
$periodo = null;
} else {
$periodo = $_POST['periodo'];
}
if (isset($_POST['rango'])) {
$diaInicio = new DateTime(date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivo']))));
$diaFin = new DateTime(date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivoFin']))));
$cantidad = $diaFin->diff($diaInicio);
$date = date("Y-m-d", strtotime(str_replace("/", "-", $_POST['diaFestivo'])));
for ($dias = 0; $dias <= $cantidad->days; $dias++) {
$sql = "SELECT fi_diasfestivos(:periodo, :dia)";
$params = [':periodo' => $periodo, ':dia' => $date];
query($sql, $params, false);
$date = date("Y-m-d", strtotime($date . "+ 1 days"));
}
header("Location: ../días_festivos.php");
exit();
} else {
$sql = "SELECT * FROM fs_diasfestivos(null, :dia)";
$params = [':dia' => $_POST['diaFestivo']];
$dia_general = query($sql, $params, false);
$sql = "SELECT * FROM fs_diasfestivos(null, null, :periodo, :dia)";
$params = [':periodo' => $periodo, ":dia" => $_POST['diaFestivo']];
$dia = query($sql, $params, false);
if (!$dia && !$dia_general) { //no hay repetidos
$sql = "SELECT fi_diasfestivos(:periodo, :dia)";
$id = query($sql, $params, false);
header("Location: ../días_festivos.php");
exit();
} else {
header("Location: ../días_festivos.php?error=1");
exit();
}
}

View File

@@ -1,19 +1,19 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$params = [':id' => $_POST['id']];
if ($_POST['periodo'] == 0) {
$sql = "SELECT * FROM fs_diasfestivos(:id, null)";
} else {
$sql = "SELECT * FROM fs_diasfestivos(null, :id, null, null)";
}
echo json_encode(query($sql, $params, true));
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$params = [':id' => $_POST['id']];
if ($_POST['periodo'] == 0) {
$sql = "SELECT * FROM fs_diasfestivos(:id, null)";
} else {
$sql = "SELECT * FROM fs_diasfestivos(null, :id, null, null)";
}
echo json_encode(query($sql, $params, true));

View File

@@ -1,31 +1,31 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if ($_POST['periodo'] == 0) {
$periodo = null;
} else
$periodo = $_POST['periodo'];
$sql = "SELECT * FROM fs_diasfestivos(null, :dia) WHERE diasfestivos_id != :id";
$params = [':dia' => $_POST['diaFestivo'], ':id' => $_POST['id']];
$dia_general = query($sql, $params, false);
$sql = "SELECT * FROM fs_diasfestivos(null, null, :periodo, :dia) WHERE diasfestivos_id != :id";
$params = [':periodo' => $periodo, ':dia' => $_POST['diaFestivo'], ':id' => $_POST['id']];
$dia = query($sql, $params, false);
if (!$dia && !$dia_general) { //no hay repetidos
$sql = "SELECT fu_update_diasfestivos(:id, :dia, :periodo)";
query($sql, $params, false);
header("Location: ../días_festivos.php");
exit();
} else { //es repetido
header("Location: ../días_festivos.php?error=1");
exit();
}
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if ($_POST['periodo'] == 0) {
$periodo = null;
} else
$periodo = $_POST['periodo'];
$sql = "SELECT * FROM fs_diasfestivos(null, :dia) WHERE diasfestivos_id != :id";
$params = [':dia' => $_POST['diaFestivo'], ':id' => $_POST['id']];
$dia_general = query($sql, $params, false);
$sql = "SELECT * FROM fs_diasfestivos(null, null, :periodo, :dia) WHERE diasfestivos_id != :id";
$params = [':periodo' => $periodo, ':dia' => $_POST['diaFestivo'], ':id' => $_POST['id']];
$dia = query($sql, $params, false);
if (!$dia && !$dia_general) { //no hay repetidos
$sql = "SELECT fu_update_diasfestivos(:id, :dia, :periodo)";
query($sql, $params, false);
header("Location: ../días_festivos.php");
exit();
} else { //es repetido
header("Location: ../días_festivos.php?error=1");
exit();
}

View File

@@ -1,42 +1,42 @@
<?
#input $_GET['id_espacio_sgu']
define("INFORMATION", [
'GET' => [
],
]);
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
#return html
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
$raw = file_get_contents('php://input');
$post_get = json_decode($raw, true);
$data = $db->get('estado_supervisor');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
'post_data' => $post_get,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
<?
#input $_GET['id_espacio_sgu']
define("INFORMATION", [
'GET' => [
],
]);
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
#return html
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
$raw = file_get_contents('php://input');
$post_get = json_decode($raw, true);
$data = $db->get('estado_supervisor');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
'post_data' => $post_get,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
}

View File

@@ -1,51 +1,51 @@
<?
$information = [
'GET' => [],
];
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user'])) {
http_response_code(500);
echo json_encode([
'error' => 'No se ha iniciado sesión'
]);
exit;
}
$user = unserialize($_SESSION['user']);
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
// step 1: get subrutas
$data = $db->get('facultad');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
<?
$information = [
'GET' => [],
];
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user'])) {
http_response_code(500);
echo json_encode([
'error' => 'No se ha iniciado sesión'
]);
exit;
}
$user = unserialize($_SESSION['user']);
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
// step 1: get subrutas
$data = $db->get('facultad');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
}

View File

@@ -1,23 +1,23 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fi_facultad(:nombre, :activa)";
$params = [':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado']];
$fac_id = query($sql, $params, true);
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $fac_id['fi_facultad'], ':idnivel' => 1, ':antes' => -15, ':despues' => 16, ':retardo' => 31];
query($sql, $params, false);
$params = [':idfacultad' => $fac_id['fi_facultad'], ':idnivel' => 2, ':antes' => -15, ':despues' => 16, ':retardo' => 31];
query($sql, $params, false);
print_r($fac_id);
header("Location: ../carreras.php?facultad=" . $fac_id['fi_facultad']);
exit();
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fi_facultad(:nombre, :activa)";
$params = [':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado']];
$fac_id = query($sql, $params, true);
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $fac_id['fi_facultad'], ':idnivel' => 1, ':antes' => -15, ':despues' => 16, ':retardo' => 31];
query($sql, $params, false);
$params = [':idfacultad' => $fac_id['fi_facultad'], ':idnivel' => 2, ':antes' => -15, ':despues' => 16, ':retardo' => 31];
query($sql, $params, false);
print_r($fac_id);
header("Location: ../carreras.php?facultad=" . $fac_id['fi_facultad']);
exit();

View File

@@ -1,15 +1,15 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM facultad WHERE facultad_id = :idFacultad";
$params = [':idFacultad' => $_POST['id_facultad']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM facultad WHERE facultad_id = :idFacultad";
$params = [':idFacultad' => $_POST['id_facultad']];
echo json_encode(query($sql, $params, false));

View File

@@ -1,17 +1,17 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fu_updatefacultad(:nombre, :activa, :id)";
$params = [':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado'], ':id' => $_POST['id']];
query($sql, $params, false);
header("Location: ../facultades.php");
exit();
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fu_updatefacultad(:nombre, :activa, :id)";
$params = [':nombre' => mb_strtoupper($_POST['nombre']), ':activa' => $_POST['estado'], ':id' => $_POST['id']];
query($sql, $params, false);
header("Location: ../facultades.php");
exit();

View File

@@ -1,26 +1,26 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
// if method is get
header("Content-Type: application/json");
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$user->print_to_log("Acceso a reposiciones");
if (empty($_GET['horario_id']))
die(json_encode(['error' => 'No se ha enviado el id del horario']));
// fecha greater than today
$reposiciones = $db->query("SELECT fecha, EXTRACT(DOW FROM fecha) as day, EXTRACT(MONTH FROM fecha) as month, EXTRACT(YEAR FROM fecha) as year, EXTRACT(DAY FROM fecha) as dia_mes FROM fechas_clase(:horario_id) WHERE fecha > CURRENT_DATE", [
'horario_id' => $_GET['horario_id']
]);
echo json_encode([
'status' => 'success',
'data' => $reposiciones
]);
}
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
// if method is get
header("Content-Type: application/json");
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$user->print_to_log("Acceso a reposiciones");
if (empty($_GET['horario_id']))
die(json_encode(['error' => 'No se ha enviado el id del horario']));
// fecha greater than today
$reposiciones = $db->query("SELECT fecha, EXTRACT(DOW FROM fecha) as day, EXTRACT(MONTH FROM fecha) as month, EXTRACT(YEAR FROM fecha) as year, EXTRACT(DAY FROM fecha) as dia_mes FROM fechas_clase(:horario_id) WHERE fecha > CURRENT_DATE", [
'horario_id' => $_GET['horario_id']
]);
echo json_encode([
'status' => 'success',
'data' => $reposiciones
]);
}

View File

@@ -1,23 +1,23 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_POST);
$params = ['per' => $_POST['periodo'], 'fac' => $_POST['facultad'], 'car' => $_POST['carrera']];
$user->print_to_log("Acceso a grupos", old: $params);
$grupos = queryAll("SELECT DISTINCT LENGTH(GRUPO), GRUPO FROM fs_horario_basic WHERE PERIODO_ID = COALESCE(:per, PERIODO_ID) AND FACULTAD_ID = COALESCE(:fac, FACULTAD_ID) AND CARRERA_ID = COALESCE(:car, CARRERA_ID) ORDER BY LENGTH(GRUPO), GRUPO", $params);
$grupos = array_map(fn ($grupo) => $grupo['grupo'], $grupos);
echo json_encode([
'status' => 'success',
'grupos' => $grupos
]);
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_POST);
$params = ['per' => $_POST['periodo'], 'fac' => $_POST['facultad'], 'car' => $_POST['carrera']];
$user->print_to_log("Acceso a grupos", old: $params);
$grupos = queryAll("SELECT DISTINCT LENGTH(GRUPO), GRUPO FROM fs_horario_basic WHERE PERIODO_ID = COALESCE(:per, PERIODO_ID) AND FACULTAD_ID = COALESCE(:fac, FACULTAD_ID) AND CARRERA_ID = COALESCE(:car, CARRERA_ID) ORDER BY LENGTH(GRUPO), GRUPO", $params);
$grupos = array_map(fn ($grupo) => $grupo['grupo'], $grupos);
echo json_encode([
'status' => 'success',
'grupos' => $grupos
]);

View File

@@ -1,28 +1,28 @@
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
$grupo = isset($_GET['grupo']) ? $_GET['grupo'] : 1;
$grupo_horarios = $db->querySingle(
"WITH bloques AS (
SELECT id, hora_inicio, hora_fin
FROM public.bloque_horario
WHERE grupo = ?
ORDER BY hora_inicio ASC
)
SELECT json_agg(json_build_object(
'id', id,
'hora_inicio', hora_inicio,
'hora_fin', hora_fin,
'selected', current_time between hora_inicio and hora_fin
)) AS bloque_horario
FROM bloques
",
[$grupo]
)['bloque_horario'];
echo $grupo_horarios;
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
$grupo = isset($_GET['grupo']) ? $_GET['grupo'] : 1;
$grupo_horarios = $db->querySingle(
"WITH bloques AS (
SELECT id, hora_inicio, hora_fin
FROM public.bloque_horario
WHERE grupo = ?
ORDER BY hora_inicio ASC
)
SELECT json_agg(json_build_object(
'id', id,
'hora_inicio', hora_inicio,
'hora_fin', hora_fin,
'selected', current_time between hora_inicio and hora_fin
)) AS bloque_horario
FROM bloques
",
[$grupo]
)['bloque_horario'];
echo $grupo_horarios;

View File

@@ -1,35 +1,35 @@
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_POST);
$dias = array("domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado");
$horarios = $db
->get("fs_horario($periodo, $carrera, '$grupo', true)");
// get each id from $horarios (might be duplicate)
try {
$horarios = array_map(function ($horario) use ($dias, $db) {
$horario['profesores'] = array_map(
fn ($profesor) =>
$db->where("id", $profesor)->getOne("fs_profesor"),
explode(",", substr($horario['profesores'], 1, -1))
);
$horario['dia'] = $dias[$horario['dia']];
return $horario;
}, $horarios);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
]));
}
?>
<?= json_encode([
"status" => "success",
"horario" => $horarios,
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_POST);
$dias = array("domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado");
$horarios = $db
->get("fs_horario($periodo, $carrera, '$grupo', true)");
// get each id from $horarios (might be duplicate)
try {
$horarios = array_map(function ($horario) use ($dias, $db) {
$horario['profesores'] = array_map(
fn ($profesor) =>
$db->where("id", $profesor)->getOne("fs_profesor"),
explode(",", substr($horario['profesores'], 1, -1))
);
$horario['dia'] = $dias[$horario['dia']];
return $horario;
}, $horarios);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
]));
}
?>
<?= json_encode([
"status" => "success",
"horario" => $horarios,
]) ?>

View File

@@ -1,41 +1,41 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
extract($_POST);
$params = [
"hora" => $hora,
"salon" => $salón,
"facultad_id" => $facultad,
"periodo" => $periodo,
"grupo" => $grupo,
"materia_id" => $materia,
"dia" => $día,
"duracion" => $duración,
"profesores" => "{{$profesores}}",
];
header("Content-Type: application/json");
$user->print_to_log("Creación de horario", new: $params);
try {
$db->insert("fs_horario", $params);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => "No se pudo crear el horario",
]));
}
die(json_encode([
"status" => "success",
"message" => "Horario creado correctamente",
]));
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
extract($_POST);
$params = [
"hora" => $hora,
"salon" => $salón,
"facultad_id" => $facultad,
"periodo" => $periodo,
"grupo" => $grupo,
"materia_id" => $materia,
"dia" => $día,
"duracion" => $duración,
"profesores" => "{{$profesores}}",
];
header("Content-Type: application/json");
$user->print_to_log("Creación de horario", new: $params);
try {
$db->insert("fs_horario", $params);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => "No se pudo crear el horario",
]));
}
die(json_encode([
"status" => "success",
"message" => "Horario creado correctamente",
]));

View File

@@ -1,38 +1,38 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
extract($_POST);
try {
$old = $db
->where('horario_id', $id)
->getOne('horario');
$user->print_to_log("Eliminación de horario", old: $old);
$horario = $db
->where('id', $id)
->delete('fs_horario');
} catch (Exception $e) {
// if message contains "Integrity constraint violation"
$message = (strpos($e->getMessage(), 'Foreign') !== false)
? "No se puede eliminar el registro, tiene datos asociados"
: "Error al eliminar el registro";
die(json_encode([
"status" => "error",
"message" => $message,
"response" => $e->getMessage(),
]));
}
die(json_encode([
"status" => "success",
"message" => "Horario eliminado correctamente",
<?php
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
extract($_POST);
try {
$old = $db
->where('horario_id', $id)
->getOne('horario');
$user->print_to_log("Eliminación de horario", old: $old);
$horario = $db
->where('id', $id)
->delete('fs_horario');
} catch (Exception $e) {
// if message contains "Integrity constraint violation"
$message = (strpos($e->getMessage(), 'Foreign') !== false)
? "No se puede eliminar el registro, tiene datos asociados"
: "Error al eliminar el registro";
die(json_encode([
"status" => "error",
"message" => $message,
"response" => $e->getMessage(),
]));
}
die(json_encode([
"status" => "success",
"message" => "Horario eliminado correctamente",
]));

View File

@@ -1,51 +1,51 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
require_once "../include/func_excel.php";
extract($_POST);
# $carrera;
# $facultad;
$horarios = json_decode($data, true);
// make sure profesores are in the database
foreach ($horarios as $horario) {
$params = [
'materia' => $horario['materia'],
'carrera' => $carrera,
];
$horario['materia'] = query("SELECT FI_MATERIA(:materia, :carrera) id", $params)['id'];
$params = [
'clave' => $horario['clave'],
'nombre' => $horario['nombre'],
'correo' => $horario['correo'],
'grado' => $horario['grado'],
'facultad' => $facultad,
];
$horario['profesor'] = query("SELECT FI_PROFESOR(:nombre, :clave, :facultad, :correo, :grado) id", $params)['id'];
$horario = array_diff_key($horario, array_flip(['clave', 'nombre', 'correo', 'grado', '']));
$horario['periodo'] = $periodo;
$horario['facultad'] = $facultad;
try {
query(
"SELECT FI_HORARIO(:horario::VARCHAR, :profesor::INT, :materia::INT, :facultad::INT, :periodo::INT, :grupo::VARCHAR, :salon::VARCHAR)",
$horario
);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"sql" => $e->getMessage(),
"message" => "Error al cargar el archivo",
]));
}
}
?>
<?= json_encode([
"status" => "success",
"message" => "Horarios guardado con éxito",
]) ?>
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
require_once "../include/func_excel.php";
extract($_POST);
# $carrera;
# $facultad;
$horarios = json_decode($data, true);
// make sure profesores are in the database
foreach ($horarios as $horario) {
$params = [
'materia' => $horario['materia'],
'carrera' => $carrera,
];
$horario['materia'] = query("SELECT FI_MATERIA(:materia, :carrera) id", $params)['id'];
$params = [
'clave' => $horario['clave'],
'nombre' => $horario['nombre'],
'correo' => $horario['correo'],
'grado' => $horario['grado'],
'facultad' => $facultad,
];
$horario['profesor'] = query("SELECT FI_PROFESOR(:nombre, :clave, :facultad, :correo, :grado) id", $params)['id'];
$horario = array_diff_key($horario, array_flip(['clave', 'nombre', 'correo', 'grado', '']));
$horario['periodo'] = $periodo;
$horario['facultad'] = $facultad;
try {
query(
"SELECT FI_HORARIO(:horario::VARCHAR, :profesor::INT, :materia::INT, :facultad::INT, :periodo::INT, :grupo::VARCHAR, :salon::VARCHAR)",
$horario
);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"sql" => $e->getMessage(),
"message" => "Error al cargar el archivo",
]));
}
}
?>
<?= json_encode([
"status" => "success",
"message" => "Horarios guardado con éxito",
]) ?>

View File

@@ -1,38 +1,38 @@
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
$dias = array("domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado");
try {
if(empty($_POST['profesor_id']))
throw new Exception("No se ha especificado un profesor");
// RECORD LAST QUERY
$horarios = $db->query("SELECT * FROM fs_horario(_periodo_id => ?, _last => true, _profesor_id => ?) ORDER BY MATERIA", [
$_POST['periodo_id'],
$_POST['profesor_id'],
]);
$horarios = array_map(function ($horario) use ($dias, $db) {
$horario['profesores'] = array_map(
fn ($profesor) =>
$db->where("id", $profesor)->getOne("fs_profesor"),
explode(",", substr($horario['profesores'], 1, -1))
);
$horario['dia'] = $dias[$horario['dia']];
return $horario;
}, $horarios);
die(json_encode([
"status" => "success",
"data" => $horarios,
// "data" => [],
]));
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
"query" => $db->getLastQuery(),
]));
}
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once("../include/bd_pdo.php");
$dias = array("domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado");
try {
if(empty($_POST['profesor_id']))
throw new Exception("No se ha especificado un profesor");
// RECORD LAST QUERY
$horarios = $db->query("SELECT * FROM fs_horario(_periodo_id => ?, _last => true, _profesor_id => ?) ORDER BY MATERIA", [
$_POST['periodo_id'],
$_POST['profesor_id'],
]);
$horarios = array_map(function ($horario) use ($dias, $db) {
$horario['profesores'] = array_map(
fn ($profesor) =>
$db->where("id", $profesor)->getOne("fs_profesor"),
explode(",", substr($horario['profesores'], 1, -1))
);
$horario['dia'] = $dias[$horario['dia']];
return $horario;
}, $horarios);
die(json_encode([
"status" => "success",
"data" => $horarios,
// "data" => [],
]));
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
"query" => $db->getLastQuery(),
]));
}

View File

@@ -1,48 +1,48 @@
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$horario = array_map(fn ($value) => $_POST[$value], array_filter([
"hora" => "hora",
"dia" => "día",
"salon" => "salón",
"duracion" => "duración",
], fn ($value) => !empty($_POST[$value])));
if (!empty($_POST['profesores']))
$horario["profesores"] = "{ {$_POST['profesores']} }";
try {
$id = $_POST['id'] ?? 0;
$old = $db
->where("horario_id", $id)
->getOne("horario");
$horario = $db
->where("id", $id)
->update("fs_horario", $horario);
$new = $db
->orderBy("horario_id", "DESC")
->getOne("horario");
$user->print_to_log("Actualización de horario", old: $old, new: $new);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
'POST' => $_POST,
]));
}
die(json_encode([
"status" => "success",
]));
<?php
header('Content-Type: application/json');
$ruta = "../";
require_once "../class/c_login.php";
// check if the session is started
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$horario = array_map(fn ($value) => $_POST[$value], array_filter([
"hora" => "hora",
"dia" => "día",
"salon" => "salón",
"duracion" => "duración",
], fn ($value) => !empty($_POST[$value])));
if (!empty($_POST['profesores']))
$horario["profesores"] = "{ {$_POST['profesores']} }";
try {
$id = $_POST['id'] ?? 0;
$old = $db
->where("horario_id", $id)
->getOne("horario");
$horario = $db
->where("id", $id)
->update("fs_horario", $horario);
$new = $db
->orderBy("horario_id", "DESC")
->getOne("horario");
$user->print_to_log("Actualización de horario", old: $old, new: $new);
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
'POST' => $_POST,
]));
}
die(json_encode([
"status" => "success",
]));

View File

@@ -1,33 +1,33 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
extract($_POST);
/* print_r($claves);
exit; */
$fecha = DateTime::createFromFormat('d/m/Y', $fecha);
if (isset($hora)) {
$claves = [[
'clave' => $clave,
'hora' => $hora,
'id' => $id
]];
}
foreach ($claves as $horario)
try {
$profesor_id = $horario["clave"];
query("SELECT fi_registrar_asistencia(:id::INT, FALSE, ARRAY[ NOW(), :fecha::DATE + :hora::TIME ]::TIMESTAMP[], :profesor_id::INT, TRUE)", [
":fecha" => $fecha->format('Y-m-d'),
":hora" => $horario["hora"],
":id" => $horario["id"],
":profesor_id" => $profesor_id
]);
}
catch (Exception $e) {
die( json_encode(["error" => $e->getMessage()]) );
}
die(json_encode(["success" => true]));
<?php
$ruta = "../";
require_once "../class/c_login.php";
extract($_POST);
/* print_r($claves);
exit; */
$fecha = DateTime::createFromFormat('d/m/Y', $fecha);
if (isset($hora)) {
$claves = [[
'clave' => $clave,
'hora' => $hora,
'id' => $id
]];
}
foreach ($claves as $horario)
try {
$profesor_id = $horario["clave"];
query("SELECT fi_registrar_asistencia(:id::INT, FALSE, ARRAY[ NOW(), :fecha::DATE + :hora::TIME ]::TIMESTAMP[], :profesor_id::INT, TRUE)", [
":fecha" => $fecha->format('Y-m-d'),
":hora" => $horario["hora"],
":id" => $horario["id"],
":profesor_id" => $profesor_id
]);
}
catch (Exception $e) {
die( json_encode(["error" => $e->getMessage()]) );
}
die(json_encode(["success" => true]));

View File

@@ -1,43 +1,42 @@
<?php
/*
* Valida usuario con la BD y devuelve contraseña para validar con PHP
*
* Recibe:
* POST: usuario, password
*
* Error:
* 0 - No se recibieron datos
* 1 - Usuario/Contraseña incorrectos
* 2 - Usuario no esta en BD
* 3 - No existe usuario
*
* Success:
* Redirecciona a inicio.php
*/
include_once("../include/nocache.php"); //continue on error
$ruta = "../";
require_once("../include/bd_pdo.php"); //die on error
require_once("../class/c_login.php");
require_once("../include/util.php");
require_once("../include/nusoap/nusoap.php");
if (!isset($_POST["username"]) || !isset($_POST["passwd"]))
die(header("Location: ../index.php?error=0"));
$usr = trim(filter_input(INPUT_POST, "username")); //limpia texto
$pass = $_POST["passwd"];
$user = Login::validUser($usr, $pass);
if (is_array($user)) {
$_SESSION['error'] = true;
// build query params
$params = http_build_query($user);
header("Location: ../index.php?$params");
} else {
$_SESSION['user'] = serialize($user);
header("Location: " . (isset($_SESSION['ruta']) ? $_SESSION['ruta'] : "../main.php"));
}
<?php
/*
* Valida usuario con la BD y devuelve contraseña para validar con PHP
*
* Recibe:
* POST: usuario, password
*
* Error:
* 0 - No se recibieron datos
* 1 - Usuario/Contraseña incorrectos
* 2 - Usuario no esta en BD
* 3 - No existe usuario
*
* Success:
* Redirecciona a inicio.php
*/
include_once "../include/nocache.php"; //continue on error
$ruta = "../";
require_once "../include/bd_pdo.php"; //die on error
require_once "../class/c_login.php";
require_once "../include/util.php";
if (!isset($_POST["username"]) || !isset($_POST["passwd"]))
die(header("Location: ../index.php?error=0"));
$usr = trim(filter_input(INPUT_POST, "username")); //limpia texto
$pass = $_POST["passwd"];
$user = Login::validUser($usr, $pass);
if (is_array($user)) {
$_SESSION['error'] = true;
// build query params
$params = http_build_query($user);
header("Location: ../index.php?$params");
} else {
$_SESSION['user'] = serialize($user);
header("Location: " . (isset($_SESSION['ruta']) ? $_SESSION['ruta'] : "../main.php"));
}
exit;

View File

@@ -1,26 +1,26 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
extract($_POST);
# print_r($_POST); exit;
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
if (!$user->admin && ($access = $user->access('asistencia')) == 'n')
die(json_encode(['error' => true]));
$user->print_to_log('Consultar materias');
$materias = queryAll(
"SELECT id, nombre FROM FS_MATERIA WHERE carrera = COALESCE(:carrera, carrera) ORDER BY nombre",
[':carrera' => empty($carrera) ? null : $carrera]
);
?>
<?= json_encode([
'status' => 'success',
'materias' => $materias,
<?php
$ruta = "../";
require_once "../class/c_login.php";
extract($_POST);
# print_r($_POST); exit;
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
if (!$user->admin && ($access = $user->access('asistencia')) == 'n')
die(json_encode(['error' => true]));
$user->print_to_log('Consultar materias');
$materias = queryAll(
"SELECT id, nombre FROM FS_MATERIA WHERE carrera = COALESCE(:carrera, carrera) ORDER BY nombre",
[':carrera' => empty($carrera) ? null : $carrera]
);
?>
<?= json_encode([
'status' => 'success',
'materias' => $materias,
]); ?>

View File

@@ -1,8 +1,8 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql="SELECT * FROM materia WHERE materia_id = :idMateria";
$params = ['idMateria' => $_POST['idmateria']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql="SELECT * FROM materia WHERE materia_id = :idMateria";
$params = ['idMateria' => $_POST['idmateria']];
echo json_encode(query($sql, $params, false));
?>

View File

@@ -1,11 +1,11 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "UPDATE materia SET materia_nombre = :nombre WHERE materia_id = :id";
$params = array(':nombre' => mb_strtoupper($_POST["nombre"]), ':id' => $_POST["id"]);
$hecho = query($sql, $params, false);
header("Location: ../materias.php");
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "UPDATE materia SET materia_nombre = :nombre WHERE materia_id = :id";
$params = array(':nombre' => mb_strtoupper($_POST["nombre"]), ':id' => $_POST["id"]);
$hecho = query($sql, $params, false);
header("Location: ../materias.php");
exit();
?>

View File

@@ -1,17 +1,17 @@
<!-- fi_horario(
p_hora character varying,
p_materia character varying,
p_clave character varying,
p_nombre character varying,
p_grado character varying,
p_correo character varying,
p_facultad integer,
p_carrera integer,
p_grupo character varying DEFAULT NULL::character varying,
p_salon character varying DEFAULT NULL::character varying) -->
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
<!-- fi_horario(
p_hora character varying,
p_materia character varying,
p_clave character varying,
p_nombre character varying,
p_grado character varying,
p_correo character varying,
p_facultad integer,
p_carrera integer,
p_grupo character varying DEFAULT NULL::character varying,
p_salon character varying DEFAULT NULL::character varying) -->
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
$sql = "SELECT fi_horario(:hora, :materia, :clave, :nombre, :grado, :correo, :facultad, :carrera, :grupo, :salon)";

View File

@@ -1,17 +1,17 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fi_periodo(:fecha_inicio, :fecha_fin, :estado, :nombre, :nivel, :facultad)";
$params = [
':fecha_inicio' => $_POST['fecha_inicial'],
':fecha_fin' => $_POST['fecha_final'],
':estado' => $_POST['estadoP'],
':nombre' => mb_strtoupper($_POST['nombreP']),
':nivel' => $_POST['nivelP'],
':facultad' => $_POST['facultadP']
];
echo json_encode(query($sql, $params, true));
header("Location: ../carreras.php?facultad=".$_POST['facultadP']);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT fi_periodo(:fecha_inicio, :fecha_fin, :estado, :nombre, :nivel, :facultad)";
$params = [
':fecha_inicio' => $_POST['fecha_inicial'],
':fecha_fin' => $_POST['fecha_final'],
':estado' => $_POST['estadoP'],
':nombre' => mb_strtoupper($_POST['nombreP']),
':nivel' => $_POST['nivelP'],
':facultad' => $_POST['facultadP']
];
echo json_encode(query($sql, $params, true));
header("Location: ../carreras.php?facultad=".$_POST['facultadP']);
exit();
?>

View File

@@ -1,8 +1,8 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM fs_periodo WHERE facultad_id = :idfacultad AND id = :idperiodo";
$params = [':idfacultad' => $_POST['idfacultad'], ':idperiodo' => $_POST['idperiodo']];
echo json_encode(query($sql, $params, true));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM fs_periodo WHERE facultad_id = :idfacultad AND id = :idperiodo";
$params = [':idfacultad' => $_POST['idfacultad'], ':idperiodo' => $_POST['idperiodo']];
echo json_encode(query($sql, $params, true));
?>

View File

@@ -1,18 +1,18 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
$sql = "SELECT fu_update_periodo(:periodo_id, :fecha_inicio, :fecha_final, :estado, :nombre, :nivel)";
$params = [
':periodo_id' => $_POST['idP'],
':fecha_inicio' => $_POST['fecha_inicial'],
':fecha_final' => $_POST['fecha_final'],
':estado' => $_POST['estadoP'],
':nombre' => mb_strtoupper($_POST['nombreP']),
':nivel' => $_POST['nivelP']
];
echo json_encode(query($sql, $params, true));
header("Location: ../carreras.php?facultad=".$_POST['facultadP']);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
$sql = "SELECT fu_update_periodo(:periodo_id, :fecha_inicio, :fecha_final, :estado, :nombre, :nivel)";
$params = [
':periodo_id' => $_POST['idP'],
':fecha_inicio' => $_POST['fecha_inicial'],
':fecha_final' => $_POST['fecha_final'],
':estado' => $_POST['estadoP'],
':nombre' => mb_strtoupper($_POST['nombreP']),
':nivel' => $_POST['nivelP']
];
echo json_encode(query($sql, $params, true));
header("Location: ../carreras.php?facultad=".$_POST['facultadP']);
exit();
?>

View File

@@ -1,27 +1,27 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$params = array(':id' => $user->user['id'], ':per' => $_POST['id']);
$user->print_to_log('Actualizando periodo from ' . $user->periodo . ' to ' . $_POST['id']);
query("SELECT FU_UPDATEPERIODO(:id, :per)", $params);
$user->periodo = $params[':per'];
# if the user is admin, also update the facultad in user object
if ($user->admin) {
$facultad = query("SELECT FACULTAD_ID id, FACULTAD f FROM FS_PERIODO WHERE ID = :id", [':id' => $user->periodo]);
$user->facultad = array(
'facultad_id' => $facultad["id"],
'facultad' => $facultad["f"],
);
}
$_SESSION['user'] = serialize($user);
header("Location: {$_POST["target"]}");
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$params = array(':id' => $user->user['id'], ':per' => $_POST['id']);
$user->print_to_log('Actualizando periodo from ' . $user->periodo . ' to ' . $_POST['id']);
query("SELECT FU_UPDATEPERIODO(:id, :per)", $params);
$user->periodo = $params[':per'];
# if the user is admin, also update the facultad in user object
if ($user->admin) {
$facultad = query("SELECT FACULTAD_ID id, FACULTAD f FROM FS_PERIODO WHERE ID = :id", [':id' => $user->periodo]);
$user->facultad = array(
'facultad_id' => $facultad["id"],
'facultad' => $facultad["f"],
);
}
$_SESSION['user'] = serialize($user);
header("Location: {$_POST["target"]}");

View File

@@ -1,40 +1,40 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['lectura']))
$ver = $_POST['lectura'];
if(isset($_POST['editar']))
$editar = $_POST['editar'];
foreach($editar as $edit){
$edit_separado = explode("_", $edit);
$completo[]=$edit_separado;
}
#echo "<br><br><br><br>";
#print_r($ver);
#print_r($editar);
query("SELECT fd_permiso()", null, false);
foreach($ver as $lectura){
$igual=false;
$ver_separado = explode("_", $lectura);
#print_r($ver_separado);
foreach($completo as $comp){
if($ver_separado[0] == $comp[0] && $ver_separado[1] == $comp[1]){
#echo " igual";
$igual=true;
break;
}
}
#echo "<br>";
if(!$igual)
$completo[]=$ver_separado;
}
#print_r($completo);
foreach($completo as $actual){
$sql = "SELECT fi_permiso(:pagina, :rol, :tipo)";
$params = [':pagina' => $actual['0'], ':rol' => $actual['1'], ':tipo' => $actual['2']];
query($sql, $params, false);
}
header("Location: ../permisos.php");
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['lectura']))
$ver = $_POST['lectura'];
if(isset($_POST['editar']))
$editar = $_POST['editar'];
foreach($editar as $edit){
$edit_separado = explode("_", $edit);
$completo[]=$edit_separado;
}
#echo "<br><br><br><br>";
#print_r($ver);
#print_r($editar);
query("SELECT fd_permiso()", null, false);
foreach($ver as $lectura){
$igual=false;
$ver_separado = explode("_", $lectura);
#print_r($ver_separado);
foreach($completo as $comp){
if($ver_separado[0] == $comp[0] && $ver_separado[1] == $comp[1]){
#echo " igual";
$igual=true;
break;
}
}
#echo "<br>";
if(!$igual)
$completo[]=$ver_separado;
}
#print_r($completo);
foreach($completo as $actual){
$sql = "SELECT fi_permiso(:pagina, :rol, :tipo)";
$params = [':pagina' => $actual['0'], ':rol' => $actual['1'], ':tipo' => $actual['2']];
query($sql, $params, false);
}
header("Location: ../permisos.php");
exit();
?>

View File

@@ -1,14 +1,14 @@
<?php
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_GET);
$profesores = $db
->where("facultad_id", $facultad ?? 0)
->get("fs_profesor");
echo json_encode([
"status" => "success",
"profesores" => $profesores
<?php
$ruta = "../";
require_once("../include/bd_pdo.php");
extract($_GET);
$profesores = $db
->where("facultad_id", $facultad ?? 0)
->get("fs_profesor");
echo json_encode([
"status" => "success",
"profesores" => $profesores
]);

View File

@@ -1,40 +1,40 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
// die(print_r($_POST, true));
extract($_POST);
// if hora fin is null, then subtract half an hour from hora inicio and set hora fin to hora inicio + half an hour
$hora_fin = empty($hora_fin) ? $hora_inicio : $hora_fin;
$hora_inicio = date('H:i:s', strtotime($hora_inicio < '07:00' ? '07:00' : $hora_inicio) - 1800);
$hora_fin = date('H:i:s', strtotime($hora_fin > '22:00' ? '22:00' : $hora_fin) + 1800);
die(json_encode(
array_map(fn ($row) => array_merge(
$db->where('id', $row['profesor_id'])->getOne('fs_profesor'),
$db->where('id', $row['materia_id'])->getOne('fs_materia'),
$row
),
queryAll(
"SELECT REPORTE.*
FROM fs_asistencia_profesorreporte(null, :periodo, null, :fecha, :fecha) AS REPORTE
JOIN PROFESOR P ON P.PROFESOR_ID = REPORTE.PROFESOR_ID
WHERE HORA_CHECADO IS NULL
AND HORA BETWEEN :inicio AND :fin
AND P.PROFESOR_CLAVE ILIKE COALESCE(:clave, P.PROFESOR_CLAVE) and UNACCENT(P.PROFESOR_NOMBRE) ILIKE UNACCENT(COALESCE(:nombre, P.PROFESOR_NOMBRE))
AND FECHA = :fecha
ORDER BY HORA, MATERIA",
[
'periodo' => $periodo,
'fecha' => $fecha,
'inicio' => $hora_inicio,
'fin' => $hora_fin,
'clave' => empty($clave) ? null : "%$clave%",
'nombre' => empty($nombre) ? null : "%$nombre%"
]
))));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
// die(print_r($_POST, true));
extract($_POST);
// if hora fin is null, then subtract half an hour from hora inicio and set hora fin to hora inicio + half an hour
$hora_fin = empty($hora_fin) ? $hora_inicio : $hora_fin;
$hora_inicio = date('H:i:s', strtotime($hora_inicio < '07:00' ? '07:00' : $hora_inicio) - 1800);
$hora_fin = date('H:i:s', strtotime($hora_fin > '22:00' ? '22:00' : $hora_fin) + 1800);
die(json_encode(
array_map(fn ($row) => array_merge(
$db->where('id', $row['profesor_id'])->getOne('fs_profesor'),
$db->where('id', $row['materia_id'])->getOne('fs_materia'),
$row
),
queryAll(
"SELECT REPORTE.*
FROM fs_asistencia_profesorreporte(null, :periodo, null, :fecha, :fecha) AS REPORTE
JOIN PROFESOR P ON P.PROFESOR_ID = REPORTE.PROFESOR_ID
WHERE HORA_CHECADO IS NULL
AND HORA BETWEEN :inicio AND :fin
AND P.PROFESOR_CLAVE ILIKE COALESCE(:clave, P.PROFESOR_CLAVE) and UNACCENT(P.PROFESOR_NOMBRE) ILIKE UNACCENT(COALESCE(:nombre, P.PROFESOR_NOMBRE))
AND FECHA = :fecha
ORDER BY HORA, MATERIA",
[
'periodo' => $periodo,
'fecha' => $fecha,
'inicio' => $hora_inicio,
'fin' => $hora_fin,
'clave' => empty($clave) ? null : "%$clave%",
'nombre' => empty($nombre) ? null : "%$nombre%"
]
))));
#ECHO "$hora_inicio - $hora_fin";

View File

@@ -1,7 +1,7 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
$sql = "SELECT fu_estado_facultad_profesor(:idprofesor, :idfacultad, :estado)";
$params = [':idprofesor' => $_POST['id_profesor'], ':idfacultad' => $_POST['id_facultad'], ':estado' => $_POST['estado']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
$sql = "SELECT fu_estado_facultad_profesor(:idprofesor, :idfacultad, :estado)";
$params = [':idprofesor' => $_POST['id_profesor'], ':idfacultad' => $_POST['id_facultad'], ':estado' => $_POST['estado']];
echo json_encode(query($sql, $params, false));
?>

View File

@@ -1,75 +1,75 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
$id = trim(filter_input(INPUT_POST, "id", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
if(isset($_POST["dlfacultad"]))
$facultad = trim(filter_input(INPUT_POST, "dlfacultad", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
else
$facultad = trim(filter_input(INPUT_POST, "mfacultad", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$clave = trim(filter_input(INPUT_POST, "mclave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$grado = trim(filter_input(INPUT_POST, "grado", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$nombre = trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$grado = mb_strtoupper($grado);
if(!empty($grado)){
if(!ctype_space($grado)){
if($grado[strlen($grado)-1] != '.')
$grado.='.';
}
else{
$grado="";
}
}
$fs_profesores = query(//revisar si existe la clave del profesor
"SELECT * FROM fs_profesor WHERE clave = :clave",
array(":clave" => $_POST["mclave"]),
true
);
if(!$fs_profesores){//hay que crearlo desde 0 (profesor) y agregarlo a su facultad(facultad_profesor)
$profesor_id = query(
"SELECT public.fi_profesor(
:nombre,
:clave,
:facultad,
null,
:grado
)",
array(":nombre" => mb_strtoupper($nombre), ":clave" => $clave, ":facultad" => $facultad, ":grado" => $grado),
true
);
header("Location: ../profesores.php");
exit();
}
else{//el profesor ya existe
$profac = query(
"SELECT * FROM facultad_profesor WHERE facultad_id = :facultad AND profesor_id = :profesor",
array(":facultad" => $facultad, ":profesor" => $fs_profesores["id"]),
true
);
if(!$profac){//agregarlo a la facultad (facultad_profesor)
query(
"SELECT fi_facultad_profesor(
:facultad,
:profesor
)",
array(":facultad" => $facultad, ":profesor" => $fs_profesores["id"]),
true
);
header("Location: ../profesores.php");
exit();
}
else{//regresar error (ya existe este profesor en esta facultad)
//print_r($profac);
if(!$profac['fp_activo']){
query(
"SELECT fu_estado_facultad_profesor(:idprofesor, :idfacultad, :estado)",
array(":idprofesor" => $fs_profesores["id"], ":idfacultad" => $facultad, ":estado" => true),
true
);
header("Location: ../profesores.php");
exit();
}
header("Location: ../profesores.php?error=1");
#exit();
}
}
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
$id = trim(filter_input(INPUT_POST, "id", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
if(isset($_POST["dlfacultad"]))
$facultad = trim(filter_input(INPUT_POST, "dlfacultad", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
else
$facultad = trim(filter_input(INPUT_POST, "mfacultad", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$clave = trim(filter_input(INPUT_POST, "mclave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$grado = trim(filter_input(INPUT_POST, "grado", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$nombre = trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
$grado = mb_strtoupper($grado);
if(!empty($grado)){
if(!ctype_space($grado)){
if($grado[strlen($grado)-1] != '.')
$grado.='.';
}
else{
$grado="";
}
}
$fs_profesores = query(//revisar si existe la clave del profesor
"SELECT * FROM fs_profesor WHERE clave = :clave",
array(":clave" => $_POST["mclave"]),
true
);
if(!$fs_profesores){//hay que crearlo desde 0 (profesor) y agregarlo a su facultad(facultad_profesor)
$profesor_id = query(
"SELECT public.fi_profesor(
:nombre,
:clave,
:facultad,
null,
:grado
)",
array(":nombre" => mb_strtoupper($nombre), ":clave" => $clave, ":facultad" => $facultad, ":grado" => $grado),
true
);
header("Location: ../profesores.php");
exit();
}
else{//el profesor ya existe
$profac = query(
"SELECT * FROM facultad_profesor WHERE facultad_id = :facultad AND profesor_id = :profesor",
array(":facultad" => $facultad, ":profesor" => $fs_profesores["id"]),
true
);
if(!$profac){//agregarlo a la facultad (facultad_profesor)
query(
"SELECT fi_facultad_profesor(
:facultad,
:profesor
)",
array(":facultad" => $facultad, ":profesor" => $fs_profesores["id"]),
true
);
header("Location: ../profesores.php");
exit();
}
else{//regresar error (ya existe este profesor en esta facultad)
//print_r($profac);
if(!$profac['fp_activo']){
query(
"SELECT fu_estado_facultad_profesor(:idprofesor, :idfacultad, :estado)",
array(":idprofesor" => $fs_profesores["id"], ":idfacultad" => $facultad, ":estado" => true),
true
);
header("Location: ../profesores.php");
exit();
}
header("Location: ../profesores.php?error=1");
#exit();
}
}
?>

View File

@@ -1,10 +1,10 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM profesor WHERE profesor_id = :idProfesor";
$params = [':idProfesor' => $_POST['profesor']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM profesor WHERE profesor_id = :idProfesor";
$params = [':idProfesor' => $_POST['profesor']];
echo json_encode(query($sql, $params, false));

View File

@@ -1,36 +1,36 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$profesor = query(
"SELECT * FROM profesor WHERE :clave = profesor_clave",
array(":clave" => $_POST["mclave"]),
true
);
if($profesor){
if($profesor['profesor_id'] != $_POST['id']){
echo "clave en uso";
header("Location: ../profesores.php?error=2");
exit();
}
}
$grado = $_POST['grado'];
$grado = mb_strtoupper($grado);
if(!empty($grado)){
if(!ctype_space($grado)){
if($grado[strlen($grado)-1] != '.')
$grado.='.';
}
else{
$grado="";
}
}
print_r($_POST);
$sql = "SELECT public.fu_updateprofesor(:id, :clave, :nombre, :grado)";
$params = array(':id' => $_POST["id"], ':clave' => $_POST["mclave"], ':nombre' => mb_strtoupper($_POST["nombre"]), ':grado' => $grado);
$hecho = query($sql, $params, false);
header("Location: ../profesores.php", true, 307);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$profesor = query(
"SELECT * FROM profesor WHERE :clave = profesor_clave",
array(":clave" => $_POST["mclave"]),
true
);
if($profesor){
if($profesor['profesor_id'] != $_POST['id']){
echo "clave en uso";
header("Location: ../profesores.php?error=2");
exit();
}
}
$grado = $_POST['grado'];
$grado = mb_strtoupper($grado);
if(!empty($grado)){
if(!ctype_space($grado)){
if($grado[strlen($grado)-1] != '.')
$grado.='.';
}
else{
$grado="";
}
}
print_r($_POST);
$sql = "SELECT public.fu_updateprofesor(:id, :clave, :nombre, :grado)";
$params = array(':id' => $_POST["id"], ':clave' => $_POST["mclave"], ':nombre' => mb_strtoupper($_POST["nombre"]), ':grado' => $grado);
$hecho = query($sql, $params, false);
header("Location: ../profesores.php", true, 307);
exit();
?>

View File

@@ -1,54 +1,54 @@
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
// if method is get
header("Content-Type: application/json");
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$user->print_to_log("Acceso a reposiciones");
$reposiciones = $db
->where('periodo_id', $_GET['periodo_id'] ?? null)
->where('profesor_id', $_GET['profesor_id'] ?? [])
->get("reposicion");
echo json_encode([
'status' => 'success',
'reposiciones' => $reposiciones
]);
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
$user->print_to_log("Creación de reposición", new: $params);
try {
$requiredParams = ['horario_id', 'fecha', 'hora', 'duracion_id', 'descripcion', 'profesor_id', 'salon', 'unidad', 'periodo_id', 'fecha_clase'];
// Filter params based on requiredParams
$params = array_filter($_POST, function ($key) use ($requiredParams) {
return in_array($key, $requiredParams);
}, ARRAY_FILTER_USE_KEY);
// Check if all required params are present
if (count($params) !== count($requiredParams)) {
throw new Exception('Falta uno o más parámetros requeridos');
}
$db->insert("reposicion", $params);
// Return success response
echo json_encode([
"status" => "success",
"message" => "Reposición creada correctamente",
]);
} catch (Exception $e) {
// Return error response
echo json_encode([
"status" => "error",
"message" => "No se pudo crear la reposición",
"error" => $e->getMessage(),
]);
}
}
<?php
$ruta = "../";
require_once "../class/c_login.php";
if (!isset($_SESSION['user']))
die(json_encode(['error' => 'No se ha iniciado sesión']));
$user = unserialize($_SESSION['user']);
$ruta = "../";
require_once "../include/bd_pdo.php";
// if method is get
header("Content-Type: application/json");
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$user->print_to_log("Acceso a reposiciones");
$reposiciones = $db
->where('periodo_id', $_GET['periodo_id'] ?? null)
->where('profesor_id', $_GET['profesor_id'] ?? [])
->get("reposicion");
echo json_encode([
'status' => 'success',
'reposiciones' => $reposiciones
]);
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
$user->print_to_log("Creación de reposición", new: $params);
try {
$requiredParams = ['horario_id', 'fecha', 'hora', 'duracion_id', 'descripcion', 'profesor_id', 'salon', 'unidad', 'periodo_id', 'fecha_clase'];
// Filter params based on requiredParams
$params = array_filter($_POST, function ($key) use ($requiredParams) {
return in_array($key, $requiredParams);
}, ARRAY_FILTER_USE_KEY);
// Check if all required params are present
if (count($params) !== count($requiredParams)) {
throw new Exception('Falta uno o más parámetros requeridos');
}
$db->insert("reposicion", $params);
// Return success response
echo json_encode([
"status" => "success",
"message" => "Reposición creada correctamente",
]);
} catch (Exception $e) {
// Return error response
echo json_encode([
"status" => "error",
"message" => "No se pudo crear la reposición",
"error" => $e->getMessage(),
]);
}
}

View File

@@ -1,50 +1,50 @@
<?php
#display PHP errors
$ruta = "../";
require_once "../include/bd_pdo.php";
require_once "../include/func_excel.php";
require_once "../include/func_string.php";
use PhpOffice\PhpSpreadsheet\IOFactory;
$reader = IOFactory::createReader("Xlsx");
$reader->setReadDataOnly(true);
$file = $_FILES['archivo'];
$spreadsheet = $reader->load($file['tmp_name'][0]);
$data = [];
try {
foreach_sheet(
$spreadsheet, // object $spreadsheet
function (array $row_data, int $i, string $sheet) {
global $horario, $data;
if (renglón_vacío($row_data)) return;
validar_registro($row_data, $i);
$horario["horario"] = horario($row_data, $i, $sheet);
foreach (array_filter($row_data) as $key => $value)
$horario = array_merge($horario, ($key == 'maestro') ? columna_nombre($value) : [$key => $value]);
$data[] = $horario;
}
);
die(json_encode([
"status" => "success",
"message" => "Horario revisado con éxito, se leyeron: " . count($data) . " registros",
"data" => $data
]));
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
]));
}
<?php
#display PHP errors
$ruta = "../";
require_once "../include/bd_pdo.php";
require_once "../include/func_excel.php";
require_once "../include/func_string.php";
use PhpOffice\PhpSpreadsheet\IOFactory;
$reader = IOFactory::createReader("Xlsx");
$reader->setReadDataOnly(true);
$file = $_FILES['archivo'];
$spreadsheet = $reader->load($file['tmp_name'][0]);
$data = [];
try {
foreach_sheet(
$spreadsheet, // object $spreadsheet
function (array $row_data, int $i, string $sheet) {
global $horario, $data;
if (renglón_vacío($row_data)) return;
validar_registro($row_data, $i);
$horario["horario"] = horario($row_data, $i, $sheet);
foreach (array_filter($row_data) as $key => $value)
$horario = array_merge($horario, ($key == 'maestro') ? columna_nombre($value) : [$key => $value]);
$data[] = $horario;
}
);
die(json_encode([
"status" => "success",
"message" => "Horario revisado con éxito, se leyeron: " . count($data) . " registros",
"data" => $data
]));
} catch (Exception $e) {
die(json_encode([
"status" => "error",
"message" => $e->getMessage(),
]));
}

View File

@@ -1,11 +1,11 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
$sql = "INSERT INTO rol (rol_titulo) VALUES (:nombre)";
$params = [':nombre' => mb_strtoupper($_POST['mtitulo'])];
$hecho = query($sql, $params, true);
header("Location: ../roles.php");
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
print_r($_POST);
$sql = "INSERT INTO rol (rol_titulo) VALUES (:nombre)";
$params = [':nombre' => mb_strtoupper($_POST['mtitulo'])];
$hecho = query($sql, $params, true);
header("Location: ../roles.php");
exit();
?>

View File

@@ -1,11 +1,11 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM rol WHERE rol_id = :idRol";
$params = [':idRol' => $_POST['rol']];
echo json_encode( query($sql, $params, true));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM rol WHERE rol_id = :idRol";
$params = [':idRol' => $_POST['rol']];
echo json_encode( query($sql, $params, true));
?>

View File

@@ -1,11 +1,11 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "UPDATE rol SET rol_titulo = :nombre WHERE rol_id = :id";
$params = array(':nombre' => mb_strtoupper($_POST['mtitulo']), ':id' => $_POST['id']);
print_r($_POST);
$hecho = query($sql, $params, false);
header("Location: ../roles.php", true, 307);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "UPDATE rol SET rol_titulo = :nombre WHERE rol_id = :id";
$params = array(':nombre' => mb_strtoupper($_POST['mtitulo']), ':id' => $_POST['id']);
print_r($_POST);
$hecho = query($sql, $params, false);
header("Location: ../roles.php", true, 307);
exit();
?>

View File

@@ -1,37 +1,37 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
print_r($_POST);
$fs_tiempo = query(
"SELECT * FROM fs_tiempo_checado(:facultad, 1)", [':facultad' => $_POST['facultadT']], true
);
if($fs_tiempo){
$sql = "SELECT fu_update_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 1, ':antes' => -1*$_POST['antesL'], ':despues' => $_POST['despuesL']+1, ':retardo' => $_POST['retardoL']+$_POST['despuesL']+1];
}
else{
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 1, ':antes' => -1*$_POST['antesL'], ':despues' => $_POST['despuesL']+1, ':retardo' => $_POST['retardoL']+$_POST['despuesL']+1];
}
query($sql, $params, false);
$fs_tiempo2 = query(
"SELECT * FROM fs_tiempo_checado(:facultad, 2)", [':facultad' => $_POST['facultadT']], true
);
if($fs_tiempo2){
$sql = "SELECT fu_update_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 2, ':antes' => -1*$_POST['antesP'], ':despues' => $_POST['despuesP']+1, ':retardo' => $_POST['retardoP']+$_POST['despuesP']+1];
}
else{
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 2, ':antes' => -1*$_POST['antesP'], ':despues' => $_POST['despuesP']+1, ':retardo' => $_POST['retardoP']+$_POST['despuesP']+1];
}
query($sql, $params, false);
header("Location: ../carreras.php?facultad=".$_POST['facultadT']);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
print_r($_POST);
$fs_tiempo = query(
"SELECT * FROM fs_tiempo_checado(:facultad, 1)", [':facultad' => $_POST['facultadT']], true
);
if($fs_tiempo){
$sql = "SELECT fu_update_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 1, ':antes' => -1*$_POST['antesL'], ':despues' => $_POST['despuesL']+1, ':retardo' => $_POST['retardoL']+$_POST['despuesL']+1];
}
else{
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 1, ':antes' => -1*$_POST['antesL'], ':despues' => $_POST['despuesL']+1, ':retardo' => $_POST['retardoL']+$_POST['despuesL']+1];
}
query($sql, $params, false);
$fs_tiempo2 = query(
"SELECT * FROM fs_tiempo_checado(:facultad, 2)", [':facultad' => $_POST['facultadT']], true
);
if($fs_tiempo2){
$sql = "SELECT fu_update_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 2, ':antes' => -1*$_POST['antesP'], ':despues' => $_POST['despuesP']+1, ':retardo' => $_POST['retardoP']+$_POST['despuesP']+1];
}
else{
$sql = "SELECT fi_tiempo_checado(:idfacultad, :idnivel, :antes, :despues, :retardo)";
$params = [':idfacultad' => $_POST['facultadT'], ':idnivel' => 2, ':antes' => -1*$_POST['antesP'], ':despues' => $_POST['despuesP']+1, ':retardo' => $_POST['retardoP']+$_POST['despuesP']+1];
}
query($sql, $params, false);
header("Location: ../carreras.php?facultad=".$_POST['facultadT']);
exit();
?>

View File

@@ -1,22 +1,22 @@
<?php
$ruta = "../";
require_once '../class/c_login.php';
// print_r($_POST); exit;
if (($user = Login::validUser($_POST['username'], $_POST['passwd'])) === false) {
echo json_encode("error");
exit;
}
$facultades = queryAll("SELECT DISTINCT ID, FACULTAD FROM FS_FACULTAD WHERE ACTIVA");
for ($i = 0; $i < count($facultades); $i++) {
# print_r($facultades[$i]);
$facultades[$i]['usuarios'] = queryAll(
"SELECT ID, USERNAME FROM FS_USUARIO WHERE facultad = :facultad",
array(":facultad" => $facultades[$i]["id"])
);
}
echo json_encode($facultades);
<?php
$ruta = "../";
require_once '../class/c_login.php';
// print_r($_POST); exit;
if (($user = Login::validUser($_POST['username'], $_POST['passwd'])) === false) {
echo json_encode("error");
exit;
}
$facultades = queryAll("SELECT DISTINCT ID, FACULTAD FROM FS_FACULTAD WHERE ACTIVA");
for ($i = 0; $i < count($facultades); $i++) {
# print_r($facultades[$i]);
$facultades[$i]['usuarios'] = queryAll(
"SELECT ID, USERNAME FROM FS_USUARIO WHERE facultad = :facultad",
array(":facultad" => $facultades[$i]["id"])
);
}
echo json_encode($facultades);

View File

@@ -1,22 +1,22 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['dlfacultad']))
$facultad=$_POST['dlfacultad'];
else
$facultad=$_POST['mfacultad'];
$hecho = query("SELECT * FROM fs_usuario WHERE clave = :clave", [':clave' => $_POST['mclave']], true);
if(!$hecho){
$sql = "SELECT fi_usuario(:nombre, :correo, :clave, :rol, :facultad)";
$params = [':nombre' => mb_strtoupper($_POST['mnombre']), ':correo' => $_POST['mcorreo'], ':clave' => $_POST['mclave'], ':rol' => $_POST['mrol'], ':facultad' => $facultad];
$hecho = query($sql, $params, true);
header("Location: ../usuarios.php", true, 307);
exit();
}
else{
header("Location: ../usuarios.php?error=1");
exit();
}
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['dlfacultad']))
$facultad=$_POST['dlfacultad'];
else
$facultad=$_POST['mfacultad'];
$hecho = query("SELECT * FROM fs_usuario WHERE clave = :clave", [':clave' => $_POST['mclave']], true);
if(!$hecho){
$sql = "SELECT fi_usuario(:nombre, :correo, :clave, :rol, :facultad)";
$params = [':nombre' => mb_strtoupper($_POST['mnombre']), ':correo' => $_POST['mcorreo'], ':clave' => $_POST['mclave'], ':rol' => $_POST['mrol'], ':facultad' => $facultad];
$hecho = query($sql, $params, true);
header("Location: ../usuarios.php", true, 307);
exit();
}
else{
header("Location: ../usuarios.php?error=1");
exit();
}
?>

View File

@@ -1,8 +1,8 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM usuario WHERE usuario_id = :idUsuario";
$params = [':idUsuario' => $_POST['usuario']];
echo json_encode(query($sql, $params, true));
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
$sql = "SELECT * FROM usuario WHERE usuario_id = :idUsuario";
$params = [':idUsuario' => $_POST['usuario']];
echo json_encode(query($sql, $params, true));
?>

View File

@@ -1,15 +1,15 @@
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['dlfacultad']))
$facultad=$_POST['dlfacultad'];
else
$facultad=$_POST['mfacultad'];
$sql = "SELECT fu_update_usuario(:id, :nombre, :correo, :clave, :rol, :facultad)";
$params = array(':id' => $_POST['id'], ':nombre' => mb_strtoupper($_POST['mnombre']), ':correo' => $_POST['mcorreo'], ':clave' => $_POST['mclave'], ':rol' => $_POST['mrol'], ':facultad' => $facultad);
#print_r($_POST);
$hecho = query($sql, $params, false);
header("Location: ../usuarios.php", true, 307);
exit();
<?php
$ruta = "../";
require_once "../include/bd_pdo.php";
global $pdo;
if(isset($_POST['dlfacultad']))
$facultad=$_POST['dlfacultad'];
else
$facultad=$_POST['mfacultad'];
$sql = "SELECT fu_update_usuario(:id, :nombre, :correo, :clave, :rol, :facultad)";
$params = array(':id' => $_POST['id'], ':nombre' => mb_strtoupper($_POST['mnombre']), ':correo' => $_POST['mcorreo'], ':clave' => $_POST['mclave'], ':rol' => $_POST['mrol'], ':facultad' => $facultad);
#print_r($_POST);
$hecho = query($sql, $params, false);
header("Location: ../usuarios.php", true, 307);
exit();
?>

View File

@@ -1,10 +1,10 @@
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$sql = "SELECT * FROM fs_carreras(:fac, null, null)";
$params = [':fac' => $_POST['fac_id']];
echo json_encode(query($sql, $params, false));
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
$sql = "SELECT * FROM fs_carreras(:fac, null, null)";
$params = [':fac' => $_POST['fac_id']];
echo json_encode(query($sql, $params, false));
?>

View File

@@ -1,37 +1,37 @@
<?php
$ruta = "../";
require_once '../class/c_login.php';
# print_r($_POST); exit;
extract($_POST); // $usuario
Login::log_out();
$user = query("SELECT * FROM FS_USUARIO WHERE ID = :id", [":id" => $usuario]);
// die(json_encode($user));
$facultad = [
"facultad_id" => $user["facultad"],
"facultad" => $user["facultad_nombre"]
];
$rol = [
"rol_id" => $user["rol"],
"rol" => $user["titulo"]
];
$admin = false;
$periodo = $user["periodo"];
$user = [
"id" => $user["id"],
"nombre" => $user["username"]
];
$user = new Login($user, $facultad, $rol, $admin, $periodo);
if (isset($_SESSION))
session_start();
$_SESSION['user'] = serialize($user);
header("Location: ../main.php");
<?php
$ruta = "../";
require_once '../class/c_login.php';
# print_r($_POST); exit;
extract($_POST); // $usuario
Login::log_out();
$user = query("SELECT * FROM FS_USUARIO WHERE ID = :id", [":id" => $usuario]);
// die(json_encode($user));
$facultad = [
"facultad_id" => $user["facultad"],
"facultad" => $user["facultad_nombre"]
];
$rol = [
"rol_id" => $user["rol"],
"rol" => $user["titulo"]
];
$admin = false;
$periodo = $user["periodo"];
$user = [
"id" => $user["id"],
"nombre" => $user["username"]
];
$user = new Login($user, $facultad, $rol, $admin, $periodo);
if (isset($_SESSION))
session_start();
$_SESSION['user'] = serialize($user);
header("Location: ../main.php");
exit;

View File

@@ -1,60 +1,60 @@
<?
#input $_GET['id_espacio_sgu']
define("INFORMATION", [
'POST' => [
'profesor_id',
'horario_id',
'estado',
'comentario',
'supervisor_id',
],
]);
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
#return html
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// check parameters
$raw = file_get_contents('php://input');
$post_data = json_decode($raw, true);
// if it's a list
// step 1: get subrutas
if (empty($post_data)) {
http_response_code(400);
echo json_encode(['error' => 'No hay clases pendientes']);
exit;
}
$data = $db->query(
'INSERT INTO registro (profesor_id, horario_id, registro_fecha_supervisor, estado_supervisor_id, registro_fecha_ideal, supervisor_id, comentario)
VALUES' .
implode(',', array_map(fn($x) => "({$x['profesor_id']} , {$x['horario_id']}, NOW()," . (is_null($x['estado']) ? 'null' : $x['estado']) . ", NOW(), {$x['supervisor_id']}," . (empty($x['comentario']) ? 'null' : "'{$x['comentario']}'") . ')', $post_data))
. ' ON CONFLICT (profesor_id, horario_id, registro_fecha_ideal) DO UPDATE SET estado_supervisor_id = EXCLUDED.estado_supervisor_id, registro_fecha_supervisor = NOW(), comentario = EXCLUDED.comentario
RETURNING *'
);
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
'post_data' => $post_data,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
<?
#input $_GET['id_espacio_sgu']
define("INFORMATION", [
'POST' => [
'profesor_id',
'horario_id',
'estado',
'comentario',
'supervisor_id',
],
]);
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
#return html
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// check parameters
$raw = file_get_contents('php://input');
$post_data = json_decode($raw, true);
// if it's a list
// step 1: get subrutas
if (empty($post_data)) {
http_response_code(400);
echo json_encode(['error' => 'No hay clases pendientes']);
exit;
}
$data = $db->query(
'INSERT INTO registro (profesor_id, horario_id, registro_fecha_supervisor, estado_supervisor_id, registro_fecha_ideal, supervisor_id, comentario)
VALUES' .
implode(',', array_map(fn($x) => "({$x['profesor_id']} , {$x['horario_id']}, NOW()," . (is_null($x['estado']) ? 'null' : $x['estado']) . ", NOW(), {$x['supervisor_id']}," . (empty($x['comentario']) ? 'null' : "'{$x['comentario']}'") . ')', $post_data))
. ' ON CONFLICT (profesor_id, horario_id, registro_fecha_ideal) DO UPDATE SET estado_supervisor_id = EXCLUDED.estado_supervisor_id, registro_fecha_supervisor = NOW(), comentario = EXCLUDED.comentario, supervisor_id = EXCLUDED.supervisor_id
RETURNING *'
);
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
'post_data' => $post_data,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
}

View File

@@ -1,28 +1,28 @@
<?
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
$universidad_la_salle = $db
->where('salon', 'UNIVERSIDAD LA SALLE', 'ILIKE')
->getOne('salon_view');
$rutas =
array_map(
function (&$ruta) use ($db) {
$ruta['subrutas'] =
$db
->where('id_espacio_padre', $ruta['id_espacio_sgu'])
->orderBy('salon')
->get('salon_view');
return $ruta;
},
$db
->where('id_espacio_padre', $universidad_la_salle['id_espacio_sgu'])
->orderBy('salon')
->get('salon_view')
);
// echo json_encode($universidad_la_salle, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); EXIT;
<?
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
$universidad_la_salle = $db
->where('salon', 'UNIVERSIDAD LA SALLE', 'ILIKE')
->getOne('salon_view');
$rutas =
array_map(
function ($ruta) use ($db) {
$ruta['subrutas'] =
$db
->where('id_espacio_padre', $ruta['id_espacio_sgu'])
->orderBy('salon')
->get('salon_view');
return $ruta;
},
$db
->where('id_espacio_padre', $universidad_la_salle['id_espacio_sgu'])
->orderBy('salon')
->get('salon_view')
);
// echo json_encode($universidad_la_salle, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); EXIT;
echo json_encode($rutas, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

View File

@@ -1,73 +1,73 @@
<?
#input $_GET['id_espacio_sgu']
$information = [
'GET' => [
'id_espacio_sgu',
'bloque_horario_id',
],
];
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
// step 1: get subrutas
$data = $db
->where('tiene_salones')
->where("{$_GET['id_espacio_sgu']} = ANY(id_espacio_sgu_array)")
->get('salon_view');
// step 3: get horarios
$data = array_map(
fn($ruta) => array_merge(
[
'horarios' => $db
->join('periodo', 'periodo.periodo_id = horario_view.periodo_id')
->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (horario_view.horario_hora, horario_view.horario_hora + horario_view.duracion)')
->join('salon_view', 'salon_view.salon_id = horario_view.salon_id')
->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id')
->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id')
->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT')
->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin')
->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)')
->where('bloque_horario.id', $_GET['bloque_horario_id'])
->where('id_espacio_padre', $ruta['id_espacio_sgu'])
->get('horario_view', null, '*, horario_view.horario_id, profesor.profesor_id'),
],
$ruta
),
$data
);
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
<?
#input $_GET['id_espacio_sgu']
$information = [
'GET' => [
'id_espacio_sgu',
'bloque_horario_id',
],
];
#output rutas: [ ...ruta, salones: [{...salon}] ]
header('Content-Type: application/json charset=utf-8');
$ruta = "../";
require_once "../class/c_login.php";
// check method
try {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// check parameters
array_walk($information['GET'], function ($value) {
if (!array_key_exists($value, $_GET)) {
http_response_code(400);
echo json_encode(['error' => "$value is required"]);
exit;
}
});
// step 1: get subrutas
$data = $db
->where('tiene_salones')
->where("{$_GET['id_espacio_sgu']} = ANY(id_espacio_sgu_array)")
->get('salon_view');
// step 3: get horarios
$data = array_map(
fn($ruta) => array_merge(
[
'horarios' => $db
->join('periodo', 'periodo.periodo_id = horario_view.periodo_id')
->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (horario_view.horario_hora, horario_view.horario_hora + horario_view.duracion)')
->join('salon_view', 'salon_view.salon_id = horario_view.salon_id')
->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id')
->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id')
->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT')
->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin')
->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)')
->where('bloque_horario.id', $_GET['bloque_horario_id'])
->where('id_espacio_padre', $ruta['id_espacio_sgu'])
->get('horario_view', null, '*, horario_view.horario_id, profesor.profesor_id'),
],
$ruta
),
$data
);
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
http_response_code(405);
echo json_encode(['error' => 'method not allowed']);
exit;
}
} catch (PDOException $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
'query' => $db->getLastQuery(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
} catch (Exception $th) {
http_response_code(500);
echo json_encode([
'error' => $th->getMessage(),
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
}

View File

@@ -1,24 +1,24 @@
{
"type": "array",
"items": {
"type": "object",
"properties": {
"profesor_id": {
"type": "integer"
},
"horario_id": {
"type": "integer"
},
"estado": {
"type": ["integer", "null"]
},
"comentario": {
"type": "string"
},
"supervisor_id": {
"type": "integer"
}
},
"required": ["profesor_id", "horario_id", "comentario", "supervisor_id"]
}
}
{
"type": "array",
"items": {
"type": "object",
"properties": {
"profesor_id": {
"type": "integer"
},
"horario_id": {
"type": "integer"
},
"estado": {
"type": ["integer", "null"]
},
"comentario": {
"type": "string"
},
"supervisor_id": {
"type": "integer"
}
},
"required": ["profesor_id", "horario_id", "comentario", "supervisor_id"]
}
}

View File

@@ -1,26 +1,26 @@
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
if($_POST['nombre']==""){
$nombre = null;
}else{
$nombre = $_POST['nombre'];
}
if($_POST['clave']==""){
$clave = null;
}else{
$clave = $_POST['clave'];
}
if($_POST['facultad']==""){
$facultad = null;
}else{
$facultad = $_POST['facultad'];
}
$sql = "SELECT * FROM fs_profesores(:nombre, :clave, :facultad) ORDER BY profesor_nombre";
$params = [':nombre' => $nombre, ':clave' => $clave, ':facultad' => $facultad];
echo json_encode(query($sql, $params, false));
<?php
$ruta = '../';
require_once '../include/bd_pdo.php';
global $pdo;
if($_POST['nombre']==""){
$nombre = null;
}else{
$nombre = $_POST['nombre'];
}
if($_POST['clave']==""){
$clave = null;
}else{
$clave = $_POST['clave'];
}
if($_POST['facultad']==""){
$facultad = null;
}else{
$facultad = $_POST['facultad'];
}
$sql = "SELECT * FROM fs_profesores(:nombre, :clave, :facultad) ORDER BY profesor_nombre";
$params = [':nombre' => $nombre, ':clave' => $clave, ':facultad' => $facultad];
echo json_encode(query($sql, $params, false));
?>

View File

@@ -1,286 +1,286 @@
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
$user->access();
if (!$user->admin && in_array($user->acceso, ['r', 'n']))
die(header('Location: main.php?error=1'));
$user->print_to_log('Consultar: Alta de horario');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cargar horario desde Excel | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
</head>
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Cargar horario desde Excel", "Sistema de gestión de checador");
?>
<main class="container content marco content-margin" id="local-app">
<div class="row mb-3">
<div class="col-12 text-right">
<button class="btn btn-outline-secondary" data-toggle="modal" data-target="#modalDescargarPlantilla">
<span class="ing-descarga ing-fw"></span>
Descargar plantilla
</button>
</div>
</div>
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form>
<div class="form-group">
<div class="form-box">
<?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo');
$carreras = $db
->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id'])
->orderBy('carrera')
->get('fs_carrera');
?>
<div class="form-group row" id="input-carrera">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar carrera</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row" id="input-file">
<label for="excel" class="col-4 col-form-label">Archivo de horarios</label>
<div class="col-8 col-sm-6">
<input class="form-control-file" id="excel" name="archivo" accept=".xlsx, .xls" require>
</div>
</div>
<div class="form-group mt-5 row justify-content-center">
<!-- on click reload -->
<button id="btn-cancelar" type="button" class="btn btn-danger mx-2" onclick="location.reload()">
<span class="ing-cancelar"></span>
Cancelar
</button>
<button id="btn-cargar" type="button" class="btn btn-primary" onclick="submit_files()">
<span class="ing-guardar"></span>
Guardar horario
</button>
</div>
</div>
</div>
</form>
</main>
<div class="modal fade" id="modalDescargarPlantilla" tabindex="-1" aria-labelledby="descargarPlantillaModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="descargarPlantillaModalLabel">Instrucciones</h5>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<ol>
<li> Los encabezados deberán mantenerse en todo momento, tal cual se encuentran en la plantilla. </li>
<li> Las horas válidas son de 7:00 a 22:00 en bloques de 15 minutos. </li>
<li> La columna DURACIÓN es la duración de una clase en horas. Si la clase es de 7:158:45 se pone que la hora de la clase es de 7:15 con una duración de 180. </li>
<!-- <li> Únicamente las columnas de … </li> -->
<li> Si se encuentra un error en la revisión del archivo no se guardará ningún registro. </li>
<li> Una vez revisado el archivo haz clic en el botón [Guardar horario] para que se guarde la información. </li>
</ol>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Aceptar</button>
<button type="button" class="btn btn-primary" id="descargarPlantilla"><span class="ing-descarga"></span> Descargar</button>
<button type="button" class="btn btn-primary" id="descargarPlantillaEjemplo"><span class="ing-descarga"></span> Descargar ejemplo</button>
</div>
</div>
</div>
</div>
</body>
<?php
require_once("import/html_footer.php");
require_once("js/messages.php")
?>
<script src="js/scrollables.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/custominputfile.min-es.js"></script>
<link rel="stylesheet" href="css/custominputfile.min.css">
<script src="js/fetchlib.js"></script>
<script>
var datum = []
$(document).ready(function() {
$('#excel').customFile({
allowed: ['xlsx', 'xls'],
maxFiles: 1,
callbacks: {
onSuccess: async function(item) {
var formData = $.customFile.serialize('archivo');
const {
status,
message,
data
} = await fetch('action/action_revisar_excel.php', {
method: 'POST',
body: formData,
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error en el formato del archivo');
item.destroy();
return
}
triggerMessage(message + " Haz clic en el botón <b>Guardar horario</b> para guardar los datos", `Archivo revisado, aún <b>no guardado</b>`, 'primary');
datum = data;
// hide form
document.querySelector('#input-file').classList.add('d-none');
document.querySelector('#input-carrera').classList.add('d-none');
// show button
document.querySelector('#btn-cargar').classList.remove('d-none');
document.querySelector('#btn-cancelar').classList.remove('d-none');
},
}
});
// hide
document.querySelector('#input-file').classList.add('d-none');
document.querySelector('#btn-cancelar').classList.add('d-none');
document.querySelector('#btn-cargar').classList.add('d-none');
// on click in carrera
[... document.querySelectorAll('#dlcarrera ul li')].forEach(
li => li.addEventListener('click', () => {
document.querySelector('#input-file').classList.remove('d-none')
})
)
})
async function submit_files() {
// disable button
const button = document.querySelector('#btn-cargar');
// add class disabled to button
button.classList.add('disabled');
// disable button
button.disabled = true;
// add loading icon
button.innerHTML = '<span class="ing-cargando"></span> Cargando...';
let missing = [];
let carrera = $('#filter_carrera').val();
if (carrera == '') missing.push('Carrera');
if (datum.length == 0) missing.push('Archivo de horarios');
let facultad = <?= $user->facultad['facultad_id'] ?>;
if (missing.length > 0) {
messageMissingInputs(missing);
// remove class disabled to button
button.classList.remove('disabled');
// enable button
button.disabled = false;
// remove loading icon
button.innerHTML = '<span class="ing-guardar"></span> Guardar horario';
return;
}
const formData = new FormData();
formData.append('carrera', carrera);
formData.append('facultad', facultad);
formData.append('periodo', <?= $user->periodo ?>);
formData.append('data', JSON.stringify(datum));
const {
status,
message
} = await fetch('action/action_horario_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
triggerMessage(message, (status == 'error') ? 'Error al guardar el archivo' : 'Horarios guardados', (status == 'error') ? 'danger' : 'success');
// await 1 second
// await setTimeout(() => {}, 1000);
// remove class disabled to
button.classList.remove('disabled');
// enable button
button.disabled = false;
button.innerHTML = 'Cargar otro horario';
// refresh page
button.onclick = () => location.reload()
// hide button
document.querySelector('#btn-cancelar').classList.add('d-none');
}
document.querySelector('#descargarPlantilla').addEventListener('click', function() {
window.open('template/plantilla.xlsx', '_blank');
});
document.querySelector('#descargarPlantillaEjemplo').addEventListener('click', function() {
window.open('template/ejemplo.xlsx', '_blank');
});
</script>
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
$user->access();
if (!$user->admin && in_array($user->acceso, ['r', 'n']))
die(header('Location: main.php?error=1'));
$user->print_to_log('Consultar: Alta de horario');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cargar horario desde Excel | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
</head>
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Cargar horario desde Excel", "Sistema de gestión de checador");
?>
<main class="container content marco content-margin" id="local-app">
<div class="row mb-3">
<div class="col-12 text-right">
<button class="btn btn-outline-secondary" data-toggle="modal" data-target="#modalDescargarPlantilla">
<span class="ing-descarga ing-fw"></span>
Descargar plantilla
</button>
</div>
</div>
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form>
<div class="form-group">
<div class="form-box">
<?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo');
$carreras = $db
->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id'])
->orderBy('carrera')
->get('fs_carrera');
?>
<div class="form-group row" id="input-carrera">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar carrera</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row" id="input-file">
<label for="excel" class="col-4 col-form-label">Archivo de horarios</label>
<div class="col-8 col-sm-6">
<input class="form-control-file" id="excel" name="archivo" accept=".xlsx, .xls" require>
</div>
</div>
<div class="form-group mt-5 row justify-content-center">
<!-- on click reload -->
<button id="btn-cancelar" type="button" class="btn btn-danger mx-2" onclick="location.reload()">
<span class="ing-cancelar"></span>
Cancelar
</button>
<button id="btn-cargar" type="button" class="btn btn-primary" onclick="submit_files()">
<span class="ing-guardar"></span>
Guardar horario
</button>
</div>
</div>
</div>
</form>
</main>
<div class="modal fade" id="modalDescargarPlantilla" tabindex="-1" aria-labelledby="descargarPlantillaModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="descargarPlantillaModalLabel">Instrucciones</h5>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<ol>
<li> Los encabezados deberán mantenerse en todo momento, tal cual se encuentran en la plantilla. </li>
<li> Las horas válidas son de 7:00 a 22:00 en bloques de 15 minutos. </li>
<li> La columna DURACIÓN es la duración de una clase en horas. Si la clase es de 7:158:45 se pone que la hora de la clase es de 7:15 con una duración de 180. </li>
<!-- <li> Únicamente las columnas de … </li> -->
<li> Si se encuentra un error en la revisión del archivo no se guardará ningún registro. </li>
<li> Una vez revisado el archivo haz clic en el botón [Guardar horario] para que se guarde la información. </li>
</ol>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Aceptar</button>
<button type="button" class="btn btn-primary" id="descargarPlantilla"><span class="ing-descarga"></span> Descargar</button>
<button type="button" class="btn btn-primary" id="descargarPlantillaEjemplo"><span class="ing-descarga"></span> Descargar ejemplo</button>
</div>
</div>
</div>
</div>
</body>
<?php
require_once("import/html_footer.php");
require_once("js/messages.php")
?>
<script src="js/scrollables.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/custominputfile.min-es.js"></script>
<link rel="stylesheet" href="css/custominputfile.min.css">
<script src="js/fetchlib.js"></script>
<script>
var datum = []
$(document).ready(function() {
$('#excel').customFile({
allowed: ['xlsx', 'xls'],
maxFiles: 1,
callbacks: {
onSuccess: async function(item) {
var formData = $.customFile.serialize('archivo');
const {
status,
message,
data
} = await fetch('action/action_revisar_excel.php', {
method: 'POST',
body: formData,
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error en el formato del archivo');
item.destroy();
return
}
triggerMessage(message + " Haz clic en el botón <b>Guardar horario</b> para guardar los datos", `Archivo revisado, aún <b>no guardado</b>`, 'primary');
datum = data;
// hide form
document.querySelector('#input-file').classList.add('d-none');
document.querySelector('#input-carrera').classList.add('d-none');
// show button
document.querySelector('#btn-cargar').classList.remove('d-none');
document.querySelector('#btn-cancelar').classList.remove('d-none');
},
}
});
// hide
document.querySelector('#input-file').classList.add('d-none');
document.querySelector('#btn-cancelar').classList.add('d-none');
document.querySelector('#btn-cargar').classList.add('d-none');
// on click in carrera
[... document.querySelectorAll('#dlcarrera ul li')].forEach(
li => li.addEventListener('click', () => {
document.querySelector('#input-file').classList.remove('d-none')
})
)
})
async function submit_files() {
// disable button
const button = document.querySelector('#btn-cargar');
// add class disabled to button
button.classList.add('disabled');
// disable button
button.disabled = true;
// add loading icon
button.innerHTML = '<span class="ing-cargando"></span> Cargando...';
let missing = [];
let carrera = $('#filter_carrera').val();
if (carrera == '') missing.push('Carrera');
if (datum.length == 0) missing.push('Archivo de horarios');
let facultad = <?= $user->facultad['facultad_id'] ?>;
if (missing.length > 0) {
messageMissingInputs(missing);
// remove class disabled to button
button.classList.remove('disabled');
// enable button
button.disabled = false;
// remove loading icon
button.innerHTML = '<span class="ing-guardar"></span> Guardar horario';
return;
}
const formData = new FormData();
formData.append('carrera', carrera);
formData.append('facultad', facultad);
formData.append('periodo', <?= $user->periodo ?>);
formData.append('data', JSON.stringify(datum));
const {
status,
message
} = await fetch('action/action_horario_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
triggerMessage(message, (status == 'error') ? 'Error al guardar el archivo' : 'Horarios guardados', (status == 'error') ? 'danger' : 'success');
// await 1 second
// await setTimeout(() => {}, 1000);
// remove class disabled to
button.classList.remove('disabled');
// enable button
button.disabled = false;
button.innerHTML = 'Cargar otro horario';
// refresh page
button.onclick = () => location.reload()
// hide button
document.querySelector('#btn-cancelar').classList.add('d-none');
}
document.querySelector('#descargarPlantilla').addEventListener('click', function() {
window.open('template/plantilla.xlsx', '_blank');
});
document.querySelector('#descargarPlantillaEjemplo').addEventListener('click', function() {
window.open('template/ejemplo.xlsx', '_blank');
});
</script>
</html>

View File

@@ -1,377 +1,422 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supervisor</title>
<?php
include 'import/html_css_files.php';
?>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<?
$redirect = $_SERVER['PHP_SELF'];
include "import/html_header.php";
global $user;
html_header(
"Registro de asistencia - Vicerrectoría Académica",
"Sistema de gestión de checador",
);
#include "import/periodo.php";
?>
<main class="container-fluid px-4 mt-4" id="app" v-cloak @vue:mounted="mounted">
<form action="">
<div class="form-box">
<div class="form-group row">
<label for="periodo" class="col-4 col-form-label">Facultad</label>
<div class="col-6">
<div id="dlPeriodo" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona una facultad</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li class="datalist-option" data-id="0" @click="store.filters.facultad_id = null;">
Todas las facultades
</li>
<li class="datalist-option" v-for="facultad in store.facultades.data"
:key="facultad.facultad_id" :data-id="facultad.facultad_id"
@click="store.filters.facultad_id = facultad.facultad_id">
(<small> {{facultad.clave_dependencia}} </small>) {{ facultad.facultad_nombre }}
</li>
</ul>
<input type="hidden" id="facultad_id" name="id">
</div>
</div>
</div>
<div class="form-group row align-items-center">
<label for="switchFecha" class="col-4 col-form-label">
Fecha
<!-- switch -->
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="switchFecha"
v-model="store.filters.switchFecha" @input="store.filters.switchFechas">
<label class="custom-control-label" for="switchFecha"></label>
</div>
</label>
<div class="col-3" v-if="store.filters.switchFecha">
<div class="form-row">
<input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker"
placeholder="Seleccione una fecha de inicio" readonly
v-model="store.filters.fecha_inicio">
</div>
</div>
<div class="col-3" v-if="store.filters.switchFecha">
<div class="form-row">
<input id="fecha_fin" name="fecha_fin" class="form-control date-picker"
placeholder="Seleccione una fecha final" readonly v-model="store.filters.fecha_fin">
</div>
</div>
<div class="col-6" v-if="!store.filters.switchFecha">
<div class="form-row">
<input id="fecha" name="fecha" class="form-control date-picker"
placeholder="Seleccione una fecha" readonly v-model="store.filters.fecha">
</div>
</div>
</div>
<div class="form-group row">
<label for="profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6">
<div class="form-row justify-content-around align-items-center">
<input id="profesor" name="profesor" class="form-control col-11 mr-1 px-2"
placeholder="Seleccione una profesor" list="dlProfesor"
v-model="store.filters.profesor">
<button type="button" class="btn btn-info btn-sm form-control col ml-auto"
@click="store.filters.profesor = null">
<i class="ing-borrar"></i>
</button>
</div>
<datalist id="dlProfesor">
<option v-for="profesor in profesores" :key="profesor.profesor_id"
:value="`(${profesor.profesor_clave}) ${profesor.profesor_nombre}`">
</datalist>
</div>
</div>
<div class="form-group row">
<label for="periodo" class="col-4 col-form-label">Asistencia</label>
<div class="col-6">
<div class="form-row justify-content-around align-items-center">
<div id="dlPeriodo" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="estados">Selecciona un estado de asistencia</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li class="datalist-option" data-id="0" @click="store.filters.estados = [];">
Todos los registros
</li>
<li class="datalist-option" v-for="estado in store.estados.data"
:key="estado.estado_supervisor_id" :data-id="estado.estado_supervisor_id"
@click="store.filters.estados = store.toggle(store.filters.estados, estado.estado_supervisor_id); ; setTimeout(store.estados.printEstados, 0);">
<span class="badge"
:class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`"><i
:class="estado.estado_icon"></i> {{estado.nombre}}</span>
</li>
</ul>
<input type="hidden" id="estado_id" name="estado_id">
</div>
</div>
</div>
</div>
</div>
</form>
<div class="mt-3 d-flex justify-content-center flex-wrap">
<!-- refresh -->
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered table-sm">
<thead class="thead-dark">
<tr>
<th scope="col" class="text-center align-middle px-2">
<button @click="registros.invertir" class="btn btn-info mr-3"
v-if="registros.relevant.length > 1">
<i class="ing-cambiar ing-rotate-90"></i>
</button>
Fecha
</th>
<th scope="col" class="text-center align-middle px-2">Salón</th>
<th scope="col" class="text-center align-middle px-2">Profesor</th>
<th scope="col" class="text-center align-middle px-2">Horario</th>
<th scope="col" class="text-center align-middle px-2">Registro</th>
<th scope="col" class="text-center align-middle px-2">Supervisor</th>
</tr>
</thead>
<tbody>
<tr v-if="registros.relevant.length == 0">
<td colspan="7" class="text-center">No hay clases en este horario</td>
</tr>
<tr v-for="registro in registros.relevant" :key="registro.registro_id">
<td class="text-center align-middle px-2">{{ registro.registro_fecha_ideal }}
</td>
<td class="text-center align-middle px-2">{{ registro.salon }}</td>
<td class="text-center align-middle px-2">
<div class="col-12">
<strong>{{ registro.profesor_clave }}</strong>
{{ registro.profesor_nombre }}
</div>
<div class="col-12">
<button type="button" class="btn btn-outline-dark btn-sm"
@click="store.current.clase_vista = registro" data-toggle="modal"
data-target="#ver-detalle">
Ver detalle <i class="ing-ojo"></i>
</button>
</div>
</td>
<td class="text-center align-middle px-2">{{ registro.horario_hora.slice(0,5) }} - {{
registro.horario_fin.slice(0,5) }}</td>
<!-- -->
<td class="text-center align-middle px-2">
<div v-if="registro.registro_fecha">
<div class="col-12">
Registro <small>{{ registro.registro_fecha.slice(11,16) }}</small>
</div>
</div>
<div v-else>
<strong>
<div class="col-12">
<span class="badge badge-danger"><i class="ing-cancelar"></i></span>
</div>
<div class="col-12 mt-2">
Sin registro
</div>
</strong>
</div>
</td>
<!-- Sí checó supervisor -->
<td class="text-center align-middle px-2">
<div v-if="registro.registro_fecha_supervisor">
<div class="row">
<div class="col-12">
<strong>{{ registro.usuario_nombre }}</strong>
</div>
<div class="col-12">
Hora
<small>{{ registro.registro_fecha_supervisor.slice(11,19) }}</small>
</div>
<div class="col-12 mt-2">
<span class="badge" :class="`badge-${registro.estado_color}`">
<i :class="`${registro.estado_icon}`"></i>
<strong>{{ registro.nombre }}</strong>
</span>
</div>
</div>
<!-- comentario -->
<hr v-if="registro.comentario">
<div class="col-12 " @click="registros.mostrarComentario(registro.registro_id)"
v-if="registro.comentario" style="cursor: pointer;">
<strong class="badge badge-primary">Observaciones:</strong>
<small class="text-truncate">{{registro.comentario.slice(0,
25)}}{{registro.comentario.length > 10 ? '...' : ''}}</small>
</div>
</div>
<!-- No checó -->
<div v-else>
<div class="col-12">
<span class="badge badge-danger"><i class="ing-cancelar"></i></span>
</div>
<div class="col-12 mt-2">
<strong>Sin registro</strong>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal" tabindex="-1" id="ver-comentario">
<div class="modal-dialog modal-dialog-centered modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Comentario</h5>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container">
<div class="input-group">
<textarea class="form-control" aria-label="Comentarios de la clase" rows="5"
v-model="store.current.comentario" disabled></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal">
Aceptar
</button>
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" id="ver-detalle">
<div class="modal-dialog modal-dialog-centered modal-xl" v-if="clase_vista">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title" :data-id="clase_vista.horario_id">Detalle de la clase</h2>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container">
<div class="row">
<section class="col-12 col-md-6">
<h4 class="h4">Profesor</h4>
<div class="row">
<div class="col-12">
<strong>Nombre:</strong>
{{ clase_vista.profesor_nombre }}
</div>
<div class="col-12">
<strong>Correo:</strong>
<a :href="`mailto:${clase_vista.profesor_correo}`"><strong>{{
clase_vista.profesor_correo }}</strong></a>
</div>
<div class="col-12">
<strong>Clave:</strong>
{{ clase_vista.profesor_clave }}
</div>
<div class="col-12">
<strong>Facultad:</strong>
{{ clase_vista.facultad }}
</div>
</div>
</section>
<section class="col-12 col-md-6">
<h4 class="h4">Clase</h4>
<div class="row">
<div class="col-12">
<strong>Materia:</strong>
{{ clase_vista.materia }}
</div>
<div class="col-12">
<strong>Carrera:</strong>
{{ clase_vista.carrera }}
</div>
<div class="col-12">
<strong>Nivel:</strong>
{{ clase_vista.nivel}}
</div>
<div class="col-12">
<strong>Grupo:</strong>
{{ clase_vista.horario_grupo }}
</div>
<div class="col-12">
<strong>Horario:</strong>
<!-- hora hh:mm:ss to hh:mm -->
{{ clase_vista.horario_hora?.slice(0, 5) }} - {{
clase_vista.horario_fin?.slice(0, 5) }}
</div>
<div class="col-12">
<strong>Salón:</strong>
{{ clase_vista.salon }}
</div>
</div>
</section>
</div>
<div class="row">
<section class="col-12">
<h4 class="h4 mt-4">Registro</h4>
<div class="row">
<div class="col-12 text-center" v-if="!clase_vista.registro_fecha">
<strong><span class="badge badge-danger"><i class="ing-cancelar"></i></span>
El profesor aún no ha registrado su asistencia</strong>
</div>
<div class="col-6 text-center" v-else>
El profesor registró su asistencia a las
<code>{{clase_vista.registro_fecha.slice(11, 16)}}</code>
<hr>
<p v-if="!clase_vista.registro_retardo" class="text-center">
<span class="badge badge-success"><i class="ing-aceptar"></i></span>
A tiempo
</p>
<p v-else class="text-center">
<span class="badge badge-warning"><i class="ing-retardo"></i></span>
Con retardo
</p>
</div>
</div>
</section>
</div>
</div>
</div>
<div class="modal-footer">
<!-- botón aceptar -->
<button type="button" class="btn btn-outline-primary" data-dismiss="modal">
<i class="ing-aceptar"></i>
Aceptar
</button>
</div>
</div>
</div>
</div>
</main>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="js/auditoría.js" type="module"></script>
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supervisor</title>
<?php
include 'import/html_css_files.php';
?>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<?
$redirect = $_SERVER['PHP_SELF'];
include "import/html_header.php";
global $user;
html_header(
"Registro de asistencia - Vicerrectoría Académica",
"Sistema de gestión de checador",
);
?>
<main class="container-fluid px-4 mt-4" id="app" v-cloak @vue:mounted="mounted">
<form action="">
<?php include "import/periodo.php" ?>
<div class="form-box">
<div class="form-group row">
<label for="dlFacultad" class="col-4 col-form-label">Facultad</label>
<div class="col-6">
<div id="dlFacultad" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona una facultad</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li class="datalist-option" data-id="0" @click="store.filters.facultad_id = null;">
Todas las facultades
</li>
<li class="datalist-option" v-for="facultad in store.facultades.data"
:key="facultad.facultad_id" :data-id="facultad.facultad_id"
@click="store.filters.facultad_id = facultad.facultad_id">
(<small> {{facultad.clave_dependencia}} </small>) {{ facultad.facultad_nombre }}
</li>
</ul>
<input type="hidden" id="facultad_id" name="id">
</div>
</div>
</div>
<div class="form-group row align-items-center">
<label for="switchFecha" class="col-4 col-form-label">
Fecha
<!-- switch -->
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="switchFecha"
v-model="store.filters.switchFecha" @input="store.filters.switchFechas">
<label class="custom-control-label" for="switchFecha"></label>
</div>
</label>
<div class="col-3" v-if="store.filters.switchFecha">
<div class="form-row">
<input id="fecha_inicio" name="fecha_inicio" class="form-control date-picker"
placeholder="Seleccione una fecha de inicio" readonly
v-model="store.filters.fecha_inicio">
</div>
</div>
<div class="col-3" v-if="store.filters.switchFecha">
<div class="form-row">
<input id="fecha_fin" name="fecha_fin" class="form-control date-picker"
placeholder="Seleccione una fecha final" readonly v-model="store.filters.fecha_fin">
</div>
</div>
<div class="col-6" v-if="!store.filters.switchFecha">
<div class="form-row">
<input id="fecha" name="fecha" class="form-control date-picker"
placeholder="Seleccione una fecha" readonly v-model="store.filters.fecha">
</div>
</div>
</div>
<div class="form-group row" v-if="store.bloques_horario.data.length > 0">
<label for="dlBloqueHorarios" class="col-4 col-form-label">Bloque horarios</label>
<div class="col-6">
<div id="dlBloqueHorarios" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">
{{ store.bloques_horario.data.find(bloque => bloque.selected).hora_inicio.substr(0,5)
}} -
{{ store.bloques_horario.data.find(bloque => bloque.selected).hora_fin.substr(0,5) }}
</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li class="datalist-option not-selectable">
Mañana
</li>
<li class="datalist-option" :class="{selected: bloque.selected}"
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio < '13:00:00')"
:key="bloque.id" :data-id="bloque.id" @click="store.filters.bloque_horario = bloque.id">
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
</li>
<li class="datalist-option not-selectable">
Tarde
</li>
<li class="datalist-option" :class="{selected: bloque.selected}"
v-for="bloque in store.bloques_horario.data.filter(bloque => bloque.hora_inicio >= '13:00:00')"
:key="bloque.id" :data-id="bloque.id" @click="store.filters.bloque_horario = bloque.id">
{{ bloque.hora_inicio.substr(0,5) }} - {{ bloque.hora_fin.substr(0,5) }}
</li>
</ul>
<input type="hidden" id="bloque_id" name="id">
</div>
</div>
</div>
<div class="form-group row">
<label for="profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6">
<div class="form-row justify-content-around align-items-center">
<input id="profesor" name="profesor" class="form-control col-11 mr-1 px-2"
placeholder="Seleccione una profesor" list="dlProfesor"
v-model="store.filters.profesor">
<button type="button" class="btn btn-info btn-sm form-control col ml-auto"
@click="store.filters.profesor = null">
<i class="ing-borrar"></i>
</button>
</div>
<datalist id="dlProfesor">
<option v-for="profesor in profesores" :key="profesor.profesor_id"
:value="`(${profesor.profesor_clave}) ${profesor.profesor_nombre}`">
</datalist>
</div>
</div>
<div class="form-group row">
<label for="dlAsistencia" class="col-4 col-form-label">Asistencia</label>
<div class="col-6">
<div class="form-row justify-content-around align-items-center">
<div id="dlAsitencia" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="estados">Selecciona un estado de asistencia</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li class="datalist-option" data-id="0" @click="store.filters.estados = [];">
Todos los registros
</li>
<li class="datalist-option" v-for="estado in store.estados.data"
:key="estado.estado_supervisor_id" :data-id="estado.estado_supervisor_id"
@click="store.filters.estados = store.toggle(store.filters.estados, estado.estado_supervisor_id); ; setTimeout(store.estados.printEstados, 0);">
<span class="badge"
:class="`badge-${store.filters.estados.includes(estado.estado_supervisor_id) ? 'dark' : estado.estado_color}`"><i
:class="estado.estado_icon"></i> {{estado.nombre}}</span>
</li>
</ul>
<input type="hidden" id="estado_id" name="estado_id">
</div>
</div>
</div>
</div>
</div>
</form>
<div class="mt-3 d-flex justify-content-center flex-wrap">
<!-- botón descargar -->
<div class="btn-group my-3" v-if="registros.relevant.length">
<button type="button" class="btn btn-info mr-3" @click="registros.descargar"
:disabled="!registros.relevant.length">
<i class="ing-descarga"></i>
Descargar reporte
</button>
</div>
<!-- refresh -->
<div class="table-responsive">
<table class="table table-hover table-striped table-bordered table-sm">
<thead class="thead-dark">
<tr>
<th scope="col" class="text-center align-middle px-2">
<button @click="registros.invertir" class="btn btn-info mr-3"
v-if="registros.relevant.length > 1">
<i class="ing-cambiar ing-rotate-90"></i>
</button>
Fecha
</th>
<th scope="col" class="text-center align-middle px-2">Salón</th>
<th scope="col" class="text-center align-middle px-2">Profesor</th>
<th scope="col" class="text-center align-middle px-2">Horario</th>
<th scope="col" class="text-center align-middle px-2">Registro</th>
<th scope="col" class="text-center align-middle px-2">Supervisor</th>
</tr>
</thead>
<tbody>
<tr v-if="registros.relevant.length == 0">
<td colspan="7" class="text-center">No hay clases en este horario</td>
</tr>
<tr v-for="registro in registros.relevant" :key="registro.registro_id">
<td class="text-center align-middle px-2">{{ registro.registro_fecha_ideal }}
</td>
<td class="text-center align-middle px-2">{{ registro.salon }}</td>
<td class="text-center align-middle px-2">
<div class="col-12">
<strong>{{ registro.profesor_clave }}</strong>
{{ registro.profesor_nombre }}
</div>
<div class="col-12">
<button type="button" class="btn btn-outline-dark btn-sm"
@click="store.current.clase_vista = registro" data-toggle="modal"
data-target="#ver-detalle">
Ver detalle <i class="ing-ojo"></i>
</button>
</div>
</td>
<td class="text-center align-middle px-2">{{ registro.horario_hora.slice(0,5) }} - {{
registro.horario_fin.slice(0,5) }}</td>
<!-- -->
<td class="text-center align-middle px-2">
<div v-if="registro.registro_fecha">
<div class="col-12">
Registro <small>{{ registro.registro_fecha.slice(11,16) }}</small>
</div>
</div>
<div v-else>
<strong>
<div class="col-12">
<span class="badge badge-danger"><i class="ing-cancelar"></i></span>
</div>
<div class="col-12 mt-2">
Sin registro
</div>
</strong>
</div>
</td>
<!-- Sí checó supervisor -->
<td class="text-center align-middle px-2">
<div v-if="registro.registro_fecha_supervisor">
<div class="row">
<div class="col-12">
<strong>{{ registro.usuario_nombre }}</strong>
</div>
<div class="col-12">
Hora
<small>{{ registro.registro_fecha_supervisor.slice(11,19) }}</small>
</div>
<div class="col-12 mt-2">
<span class="badge" :class="`badge-${registro.estado_color}`">
<i :class="`${registro.estado_icon}`"></i>
<strong>{{ registro.nombre }}</strong>
</span>
</div>
</div>
<!-- comentario -->
<hr v-if="registro.comentario">
<div class="col-12 " @click="registros.mostrarComentario(registro.registro_id)"
v-if="registro.comentario" style="cursor: pointer;">
<strong class="badge badge-primary">Observaciones:</strong>
<small class="text-truncate">{{registro.comentario.slice(0,
25)}}{{registro.comentario.length > 10 ? '...' : ''}}</small>
</div>
</div>
<!-- No checó -->
<div v-else>
<div class="col-12">
<span class="badge badge-danger"><i class="ing-cancelar"></i></span>
</div>
<div class="col-12 mt-2">
<strong>Sin registro</strong>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal" tabindex="-1" id="ver-comentario">
<div class="modal-dialog modal-dialog-centered modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Comentario</h5>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container">
<div class="input-group">
<textarea class="form-control" aria-label="Comentarios de la clase" rows="5"
v-model="store.current.comentario" disabled></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal">
Aceptar
</button>
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" id="ver-detalle">
<div class="modal-dialog modal-dialog-centered modal-xl" v-if="clase_vista">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title" :data-id="clase_vista.horario_id">Detalle de la clase</h2>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container">
<div class="row">
<section class="col-12 col-md-6">
<h4 class="h4">Profesor</h4>
<div class="row">
<div class="col-12">
<strong>Nombre:</strong>
{{ clase_vista.profesor_nombre }}
</div>
<div class="col-12">
<strong>Correo:</strong>
<a :href="`mailto:${clase_vista.profesor_correo}`"><strong>{{
clase_vista.profesor_correo }}</strong></a>
</div>
<div class="col-12">
<strong>Clave:</strong>
{{ clase_vista.profesor_clave }}
</div>
<div class="col-12">
<strong>Facultad:</strong>
{{ clase_vista.facultad }}
</div>
</div>
</section>
<section class="col-12 col-md-6">
<h4 class="h4">Clase</h4>
<div class="row">
<div class="col-12">
<strong>Materia:</strong>
{{ clase_vista.materia }}
</div>
<div class="col-12">
<strong>Carrera:</strong>
{{ clase_vista.carrera }}
</div>
<div class="col-12">
<strong>Nivel:</strong>
{{ clase_vista.nivel}}
</div>
<div class="col-12">
<strong>Grupo:</strong>
{{ clase_vista.horario_grupo }}
</div>
<div class="col-12">
<strong>Horario:</strong>
<!-- hora hh:mm:ss to hh:mm -->
{{ clase_vista.horario_hora?.slice(0, 5) }} - {{
clase_vista.horario_fin?.slice(0, 5) }}
</div>
<div class="col-12">
<strong>Salón:</strong>
{{ clase_vista.salon }}
</div>
</div>
</section>
</div>
<div class="row">
<section class="col-12">
<h4 class="h4 mt-4">Registro</h4>
<div class="row">
<div class="col-12 text-center" v-if="!clase_vista.registro_fecha">
<strong><span class="badge badge-danger"><i class="ing-cancelar"></i></span>
El profesor aún no ha registrado su asistencia</strong>
</div>
<div class="col-6 text-center" v-else>
El profesor registró su asistencia a las
<code>{{clase_vista.registro_fecha.slice(11, 16)}}</code>
<hr>
<p v-if="!clase_vista.registro_retardo" class="text-center">
<span class="badge badge-success"><i class="ing-aceptar"></i></span>
A tiempo
</p>
<p v-else class="text-center">
<span class="badge badge-warning"><i class="ing-retardo"></i></span>
Con retardo
</p>
</div>
</div>
</section>
</div>
</div>
</div>
<div class="modal-footer">
<!-- botón aceptar -->
<button type="button" class="btn btn-outline-primary" data-dismiss="modal">
<i class="ing-aceptar"></i>
Aceptar
</button>
</div>
</div>
</div>
</div>
</main>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<!-- <script src="js/datalist.js"></script> -->
<script src="js/datepicker-es.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
<script src="js/auditoría.js" type="module"></script>
</body>
</html>

View File

@@ -1,265 +1,265 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
include 'include/constantes.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Avisos');
}
$fac = $user->facultad['facultad_id'];
if($user->admin){
$fac = null;
}
$limit = 20;
if(isset($_POST['filter_fecha']) && $_POST['filter_fecha'] != ""){
$filter_fecha = $_POST['filter_fecha'];
}
else{
$filter_fecha = null;
}
if(isset($_GET['pag'])){
$pag = $_GET['pag'] - 1;
}else{
$pag = 0;
}
if($user->admin){
$count = query("SELECT count(1) FROM fs_aviso(null, :fecha, :facultad_id, null, 0, null)", [':fecha' => $filter_fecha, ':facultad_id' => $fac], true);
$fs_avisos = query("SELECT * FROM fs_aviso(null, :fecha, :facultad_id, :limite, :offset, null)", [':fecha' => $filter_fecha, ':facultad_id' => $fac, ':limite' => $limit, ':offset' => $pag * $limit], false);
}else{
$count = query("SELECT count(1) FROM fs_aviso(null, :fecha, :facultad_id, null, 0, true)", [':fecha' => $filter_fecha, ':facultad_id' => $fac], true);
$fs_avisos = query("SELECT * FROM fs_aviso(null, :fecha, :facultad_id, :limite, :offset, true)", [':fecha' => $filter_fecha, ':facultad_id' => $fac, ':limite' => $limit, ':offset' => $pag * $limit], false);
}
$paginas = ceil($count['count'] / $limit);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"Avisos",
"Gestión de Checador "
);
$user->access();
?>
<main class="content marco">
<?php if($user->acceso == 'w') {?>
<div class="row">
<div class="col-12 text-right">
<a href="avisos_crear.php">
<button type="button" class="btn btn-outline-secondary"><span class="ing-mas ing-fw"></span>Crear Aviso</button>
</a>
</div>
</div>
<?php } ?>
<!-- Filtro -->
<div class="row">
<div class="col-12">
<form action="avisos.php" method="post">
<div class="form-box">
<div class="form-group row">
<label for="filter_fecha" class="col-4 con-form-label">Fecha</label>
<div class="col-8 col-sm-4">
<input id="filter_fecha" name="filter_fecha" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="" value="<?php if(isset($filter_fecha)){ echo $filter_fecha; } ?>">
</div>
</div>
<p class="offset-4">Se muestran los avisos posteriores a la fecha</p>
</div>
<div class="form-group">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary">
<span class="ing-buscar ing-fw"></span>
Filtrar
</button>
<button type="button" class="btn btn-outline-danger btn-reset">
<span class="ing-borrar ing-fw"></span>
Limpiar
</button>
</div>
</div>
</form>
</div>
</div>
<div id="message"></div>
<!-- Tabla -->
<div class="row">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Estado</th>
<?php if($user->acceso == 'w') {?>
<th>Facultad</th>
<?php }?>
<th>Fechas</th>
<th>Mensaje</th>
<?php if($user->acceso == 'w') {?>
<th>Acciones</th>
<?php }?>
</tr>
</thead>
<tbody>
<?php $today = date('Y-m-j');
foreach($fs_avisos as $aviso){
$color2 = 'danger';
$title2 = 'Inactivo';
$color = 'danger';
$title = 'Fuera de tiempo';
$icono = 'retardo';
if($today >= $aviso['aviso_fecha_inicial'] && $today <= $aviso['aviso_fecha_final']){
$color = 'success';
$title = 'En tiempo';
$icono = 'reloj';
}else if($today < $aviso['aviso_fecha_inicial']){
$color = 'warning';
$title = 'Antes de tiempo';
}
if($aviso['aviso_estado'] == true){
$color2 = 'success';
$title2 = 'Activo';
}
$day = explode("-", $aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'].'/'.$day['1'].'/'.$day[0];
$day = explode("-", $aviso['aviso_fecha_final']);
$dia_final = $day['2'].'/'.$day['1'].'/'.$day[0];
?>
<tr data-id="<?= $aviso['aviso_id'] ?>" id="<?= $aviso['aviso_id'] ?>">
<td class="text-center"><?php if($user->admin){ ?> <span class="ing-bullet text-<?= $color2 ?>" title="<?= $title2 ?>"></span> <?php } ?> <span class="ing-<?= $icono ?> text-<?= $color ?>" title="<?= $title ?>"></span></td>
<?php if($user->acceso == 'w') {?>
<td><?= $aviso['facultad_nombre'] ?></td>
<?php }?>
<td><?= $dia_inicial ?> - <?= $dia_final ?></td>
<td><?= $aviso['aviso_texto'] ?></td>
<?php if($user->acceso == 'w') {?>
<td class="text-center">
<a href="avisos_editar.php?id=<?= $aviso['aviso_id'] ?>" title="Editar"><span class="ing-editar"></span></a>
<?php if($aviso['aviso_estado'] == true){ ?>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura"></span></a>
<?php } ?>
</td>
<?php }?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
<nav aria-label="paginas">
<ul class="pagination justify-content-end">
<?php if($pag != 0){ ?>
<li class="page-item">
<a class="page-link" href="avisos.php?pag=<?= $pag ?>" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<?php } ?>
<?php for($i = 0; $i < $paginas; $i++){ ?>
<li class="page-item <?php if($i == $pag){ echo"active"; } ?>" <?php if($i == $pag){ echo 'aria-current="page"'; } ?>><a class="page-link" href="avisos.php?pag=<?= $i+1 ?>"><?= $i+1 ?></a></li>
<?php }
if(($pag + 1) < $paginas){ ?>
<li class="page-item">
<a class="page-link" href="avisos.php?pag=<?= $pag + 2 ?>" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
<?php } ?>
</ul>
</nav>
</main>
<?php
include "import/html_footer.php";
?>
<?php if($user->acceso == 'w') {?>
<div class="modal fade" id="modal_confirm" 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-body">
<div class="row">
<div class="col">
<p class="font-weight-bold">¿Estás seguro de que quieres borrar el aviso?</p>
<p>Esta acción no se puede deshacer.</p>
</div>
</div>
</div>
<div class="modal-footer">
<input type="hidden" id="id_borrar" value="">
<button type="button" class="btn btn-outline-primary btn-borrar"><?php echo $ICO["aceptar"];?> Borrar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
</div>
</div>
</div>
</div>
<?php } ?>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).on( "click", ".btn-reset", function(event){
var forma = $(this).parents("form");
forma.find("input[type=text]").val("");
forma.find("select").prop("selectedIndex",0);
forma.submit();
});
$('#modal_confirm').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget); // Button that triggered the modal
var id = button.parents("tr").data("id");
$("#id_borrar").val(id);
});
$('.btn-borrar').click(function(){
var cid = $('#id_borrar').val();
$.ajax({
url: './action/action_avisos_delete.php',
type: 'POST',
dataType: 'json',
data: {id: cid},
success: function(result){
console.log("bien");
},
error: function(){
console.log(cid);
}
});
$('#modal_confirm').modal("hide");
location.reload();
});
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
include 'include/constantes.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Avisos');
}
$fac = $user->facultad['facultad_id'];
if($user->admin){
$fac = null;
}
$limit = 20;
if(isset($_POST['filter_fecha']) && $_POST['filter_fecha'] != ""){
$filter_fecha = $_POST['filter_fecha'];
}
else{
$filter_fecha = null;
}
if(isset($_GET['pag'])){
$pag = $_GET['pag'] - 1;
}else{
$pag = 0;
}
if($user->admin){
$count = query("SELECT count(1) FROM fs_aviso(null, :fecha, :facultad_id, null, 0, null)", [':fecha' => $filter_fecha, ':facultad_id' => $fac], true);
$fs_avisos = query("SELECT * FROM fs_aviso(null, :fecha, :facultad_id, :limite, :offset, null)", [':fecha' => $filter_fecha, ':facultad_id' => $fac, ':limite' => $limit, ':offset' => $pag * $limit], false);
}else{
$count = query("SELECT count(1) FROM fs_aviso(null, :fecha, :facultad_id, null, 0, true)", [':fecha' => $filter_fecha, ':facultad_id' => $fac], true);
$fs_avisos = query("SELECT * FROM fs_aviso(null, :fecha, :facultad_id, :limite, :offset, true)", [':fecha' => $filter_fecha, ':facultad_id' => $fac, ':limite' => $limit, ':offset' => $pag * $limit], false);
}
$paginas = ceil($count['count'] / $limit);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"Avisos",
"Gestión de Checador "
);
$user->access();
?>
<main class="content marco">
<?php if($user->acceso == 'w') {?>
<div class="row">
<div class="col-12 text-right">
<a href="avisos_crear.php">
<button type="button" class="btn btn-outline-secondary"><span class="ing-mas ing-fw"></span>Crear Aviso</button>
</a>
</div>
</div>
<?php } ?>
<!-- Filtro -->
<div class="row">
<div class="col-12">
<form action="avisos.php" method="post">
<div class="form-box">
<div class="form-group row">
<label for="filter_fecha" class="col-4 con-form-label">Fecha</label>
<div class="col-8 col-sm-4">
<input id="filter_fecha" name="filter_fecha" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="" value="<?php if(isset($filter_fecha)){ echo $filter_fecha; } ?>">
</div>
</div>
<p class="offset-4">Se muestran los avisos posteriores a la fecha</p>
</div>
<div class="form-group">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary">
<span class="ing-buscar ing-fw"></span>
Filtrar
</button>
<button type="button" class="btn btn-outline-danger btn-reset">
<span class="ing-borrar ing-fw"></span>
Limpiar
</button>
</div>
</div>
</form>
</div>
</div>
<div id="message"></div>
<!-- Tabla -->
<div class="row">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Estado</th>
<?php if($user->acceso == 'w') {?>
<th>Facultad</th>
<?php }?>
<th>Fechas</th>
<th>Mensaje</th>
<?php if($user->acceso == 'w') {?>
<th>Acciones</th>
<?php }?>
</tr>
</thead>
<tbody>
<?php $today = date('Y-m-j');
foreach($fs_avisos as $aviso){
$color2 = 'danger';
$title2 = 'Inactivo';
$color = 'danger';
$title = 'Fuera de tiempo';
$icono = 'retardo';
if($today >= $aviso['aviso_fecha_inicial'] && $today <= $aviso['aviso_fecha_final']){
$color = 'success';
$title = 'En tiempo';
$icono = 'reloj';
}else if($today < $aviso['aviso_fecha_inicial']){
$color = 'warning';
$title = 'Antes de tiempo';
}
if($aviso['aviso_estado'] == true){
$color2 = 'success';
$title2 = 'Activo';
}
$day = explode("-", $aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'].'/'.$day['1'].'/'.$day[0];
$day = explode("-", $aviso['aviso_fecha_final']);
$dia_final = $day['2'].'/'.$day['1'].'/'.$day[0];
?>
<tr data-id="<?= $aviso['aviso_id'] ?>" id="<?= $aviso['aviso_id'] ?>">
<td class="text-center"><?php if($user->admin){ ?> <span class="ing-bullet text-<?= $color2 ?>" title="<?= $title2 ?>"></span> <?php } ?> <span class="ing-<?= $icono ?> text-<?= $color ?>" title="<?= $title ?>"></span></td>
<?php if($user->acceso == 'w') {?>
<td><?= $aviso['facultad_nombre'] ?></td>
<?php }?>
<td><?= $dia_inicial ?> - <?= $dia_final ?></td>
<td><?= $aviso['aviso_texto'] ?></td>
<?php if($user->acceso == 'w') {?>
<td class="text-center">
<a href="avisos_editar.php?id=<?= $aviso['aviso_id'] ?>" title="Editar"><span class="ing-editar"></span></a>
<?php if($aviso['aviso_estado'] == true){ ?>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura"></span></a>
<?php } ?>
</td>
<?php }?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
<nav aria-label="paginas">
<ul class="pagination justify-content-end">
<?php if($pag != 0){ ?>
<li class="page-item">
<a class="page-link" href="avisos.php?pag=<?= $pag ?>" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<?php } ?>
<?php for($i = 0; $i < $paginas; $i++){ ?>
<li class="page-item <?php if($i == $pag){ echo"active"; } ?>" <?php if($i == $pag){ echo 'aria-current="page"'; } ?>><a class="page-link" href="avisos.php?pag=<?= $i+1 ?>"><?= $i+1 ?></a></li>
<?php }
if(($pag + 1) < $paginas){ ?>
<li class="page-item">
<a class="page-link" href="avisos.php?pag=<?= $pag + 2 ?>" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
<?php } ?>
</ul>
</nav>
</main>
<?php
include "import/html_footer.php";
?>
<?php if($user->acceso == 'w') {?>
<div class="modal fade" id="modal_confirm" 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-body">
<div class="row">
<div class="col">
<p class="font-weight-bold">¿Estás seguro de que quieres borrar el aviso?</p>
<p>Esta acción no se puede deshacer.</p>
</div>
</div>
</div>
<div class="modal-footer">
<input type="hidden" id="id_borrar" value="">
<button type="button" class="btn btn-outline-primary btn-borrar"><?php echo $ICO["aceptar"];?> Borrar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
</div>
</div>
</div>
</div>
<?php } ?>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).on( "click", ".btn-reset", function(event){
var forma = $(this).parents("form");
forma.find("input[type=text]").val("");
forma.find("select").prop("selectedIndex",0);
forma.submit();
});
$('#modal_confirm').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget); // Button that triggered the modal
var id = button.parents("tr").data("id");
$("#id_borrar").val(id);
});
$('.btn-borrar').click(function(){
var cid = $('#id_borrar').val();
$.ajax({
url: './action/action_avisos_delete.php',
type: 'POST',
dataType: 'json',
data: {id: cid},
success: function(result){
console.log("bien");
},
error: function(){
console.log(cid);
}
});
$('#modal_confirm').modal("hide");
location.reload();
});
</script>
</body>
</html>

View File

@@ -1,435 +1,435 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access('Avisos');
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Avisos Crear');
}
$fac = $user->facultad['facultad_id'];
if($user->admin){
$fac = null;
}
$fs_carreras = query('SELECT * FROM fs_carreras(:fac, null, null)', [':fac' => $fac], false);
$fs_facultades = query('SELECT * FROM facultad WHERE facultad_activa = true', null, false);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos Crear</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/richtext.css" type="text/css">
<link rel="stylesheet" href="css/fa_all.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"CREAR AVISO",
"Gestión de Checador "
);
$user->access('Avisos');
?>
<main class="content marco">
<div class="row">
<div class="col-12">
<form action="./action/action_avisos_insert.php" method="post" id="formaModal" onsubmit="return validaCampos()">
<div class="form-box">
<?php if($user->admin){ ?>
<div class="form-group row">
<label for="facultad" class="col-4 col-form-label">Facultad *</label>
<div class="col-8 col-sm-4">
<div class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Mostrar todas</div>
<span class="ing-buscar icono"></span>
<ul style="display: none;">
<?php foreach($fs_facultades as $facultad){ ?>
<li data-id="<?= $facultad['facultad_id'] ?>" class="pl-4"><?= $facultad['facultad_nombre'] ?></li>
<?php } ?>
</ul>
<input type="hidden" id="facultad" name="facultad" value="">
</div>
</div>
</div>
<?php }else {?>
<input type="hidden" name="facultad" id="facultad" value="<?= $fac ?>">
<?php }?>
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial *</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha Final *</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="texto" class="col-4 col-form-label">Aviso *</label>
<div class="col-8">
<textarea name="texto" id="texto" class="richtext" rows="10"></textarea>
<div class="invalid-feedback">No puede estar vacio</div>
</div>
</div>
<div class="form-group row tipo_aviso">
<label class="col-4 col-form-label">Enviar aviso:</label>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_tipo" id="bloque_tipo" value="1" data-box="profesorBox" data-select="tipo_box">
<label class="custom-control-label" for="bloque_tipo">Por carrera</label>
</div>
</div>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_usr" id="bloque_usr" value="1" data-box="administrativoBox" data-select="usuario_box">
<label class="custom-control-label" for="bloque_usr">Por nombre</label>
</div>
</div>
</div>
<div class="invalid-feedback offset-4">No hay profesores para mandar el aviso</div>
<div class="collapse" id="profesorBox">
<h3>Carreras</h3>
<p>Utiliza el botón para asignar las carreras que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="tipo[]" id="tipo_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_carrera"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-tipo"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
<div class="collapse" id="administrativoBox">
<h3>Nombre de profesores</h3>
<p>Utiliza el botón para asignar los profesores que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="usuario[]" id="usuario_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_usr"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-usr"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
</div>
<div class="form-group row mt-2">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><span class="ing-aceptar"></span> Guardar</button>
<a href="avisos.php" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Cancelar</a>
</div>
</div>
</form>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal_carrera" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<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">Carreras
<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">
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Carrera</th>
<th>Asignar</th>
</tr>
</thead>
<tbody id="table-result-carrera">
<tr class="tipo-row">
<td class="carrera-nombre"></td>
<td class="carrera-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-carrera"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal_usr" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="col-12 modal-title text-center">Busca Usuarios
<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 id="forma_buscar-usr" onsubmit="return false">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Nombre</label>
<div class="col-8">
<input id="filter_desc" name="desc" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave ULSA</label>
<div class="col-8">
<input id="filter_clave" name="clave" type="text" class="form-control">
</div>
</div>
</div>
<div class="for-group row">
<div class="offset-4">
<button type="submit" class="btn btn-outline-primary" id="btn-busca-usr"><span class="ing-buscar"></span> Buscar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar"></span> Cerrar</button>
</div>
</div>
</form>
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white mt-3">
<thead class="thead-dark">
<tr>
<th>Usuario</th>
<th style="width: 20%;">Asignar</th>
</tr>
</thead>
<tbody id="table-result-usr">
<tr class="usr-row">
<td class="usr-nombre"></td>
<td class="usr-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-usr"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="./js/richtext.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).ready(function(){
$('.richtext').richText();
//var today = new Date();
$("#fecha_inicial").datepicker("option", "minDate", today);
$("#fecha_final").datepicker("option", "minDate", today);
$('#fecha_inicial').datepicker("setDate", today);
$('#fecha_final').datepicker("setDate", today);
setDatalistFirst('#facultad');
});
$(document).on( "change", ".tipo-switch", function(event){
if($(this).data("box") !== undefined){
if($(this).prop('checked')){
$('#'+$(this).data("box")).collapse('show');
}else{
$('#'+$(this).data("box")).collapse('hide');
}
}
$('#bloque_tipo').removeClass("is-invalid");
$('#bloque_usr').removeClass("is-invalid");
});
$(document).on( "click", ".btn-agrega-carrera", function(event){
var id = $(this).data("id");
var text = $(this).data("text");
if($('#tipo_box option[value="' + id + '"]').length == 0){
$("#tipo_box").append($("<option></option>").attr("value",id).text(text));
}
$(this).parents("tr").addClass("d-none");
});
$(document).on( "click", ".btn-quita-tipo", function(event){
var id = $("#tipo_box option:selected").val();
$("#arow_"+id).removeClass("d-none");
$("#tipo_box option:selected").remove();
});
$(document).on( "click", ".modal-open", function(event){
$(".area-row").removeClass("d-none");
$('#area > option').each(function() {
$("#row_"+$(this).val()).addClass("d-none");
});
$('#modal').modal("show");
});
$(document).on('click', '#btn-busca-usr', function(event){
var nombre = $('#filter_desc').val();
var clave = $('#filter_clave').val();
var fac = $('#facultad').val();
$('#table-result-usr').show();
$.ajax({
url: 'action/usuario_find.php',
type: 'POST',
dataType: 'json',
data: {nombre: nombre, clave: clave, facultad: fac},
success: function(result){
console.log(result.length);
$("#table-result-usr").find(".usr-nombre").html("");
$("#table-result-usr").find(".usr-agrega button").addClass("invisible");
var rows = $("#table-result-usr > tr").length;//limpia tabla actual
if(rows > result.length){
while(rows > result.length && rows > 1){
$("#table-result-usr .usr-row:last-child").remove();
rows--;
}
}else{
for(var i=rows; i<result.length; i++){
$("#table-result-usr .usr-row:first-child").clone(true).appendTo("#table-result-usr");
}
}
if(result.length != 0){
$('#table-result-usr').children().each(function(index){
if(index < result.length){
$(this).find('.usr-nombre').html(result[index]['profesor_nombre']);
$(this).find('.usr-agrega button').data("id", result[index]['profesor_id']);
$(this).find('.usr-agrega button').data("text", result[index]['profesor_nombre']);
$(this).find(".usr-agrega button").removeClass("invisible");
}
})
}
},
error: function(){
console.log('error');
}
});
});
$(document).on( "click", ".btn-agrega-usr", function(event){
var id = $(this).data("id");
var text = $(this).data("text");
var rows = $("#table-result-usr > tr").length;//limpia tabla actual
if($('#usuario_box option[value="' + id + '"]').length == 0){
$("#usuario_box").append($("<option></option>").attr("value",id).text(text));
}
if(rows > 1)
$(this).parents("tr").remove();
else{
$(this).parents("tr").hide();
$("#filter_desc-usr").val("");
}
});
$(document).on( "click", ".btn-quita-usr", function(event){
$("#usuario_box option:selected").remove();
});
function validaCampos(){
var error = false;
var inicio = $('#fecha_inicial').val();
var fin = $('#fecha_final').val();
var aux = inicio.split('/');
inicio = aux[2]+'-'+aux[1]+'-'+aux[0];
aux = fin.split('/');
fin = aux[2]+'-'+aux[1]+'-'+aux[0];
if(fin < inicio){
$('#fecha_final').addClass('is-invalid');
error = true;
}
if($('#texto').val() == ""){
$('#texto').addClass('is-invalid');
error = true;
}
if($('select').find('option').length == 0){
error = true;
$('.tipo_aviso').addClass('is-invalid');
}else{
$('.tipo_aviso').removeClass('is-invalid');
}
if(error == true){
return false;
}else{
$('#tipo_box option').prop('selected', true);
$('#usuario_box option').prop('selected', true);
$('#formaModal').prop('action', './action/action_avisos_insert.php');
}
}
$('#modal_carrera').on('show.bs.modal', function(event){
var fac_id = $('#facultad').val();
$.ajax({
url: 'action/carrera_find.php',
type: 'POST',
dataType: 'json',
data: {fac_id: fac_id},
success: function(result){
$("#table-result-carrera").find(".carrera-nombre").html("");
$("#table-result-carrera").find(".carrera-agrega button").addClass("invisible");
var rows = $("#table-result-carrera > tr").length;
if(rows > result.length){
while(rows > result.length && rows > 1){
$("#table-result-carrera .tipo-row:last-child").remove();
rows--;
}
}else{
for(var i=rows; i<result.length; i++){
$("#table-result-carrera .tipo-row:first-child").clone(true).appendTo("#table-result-carrera");
}
}
if(result.length != 0){
$("#table-result-carrera").children().each(function(index){
if(index < result.length){
$(this).find('.carrera-nombre').html(result[index]['carrera_nombre']);
$(this).find('.carrera-agrega button').data("id", result[index]['carrera_id']);
$(this).find('.carrera-agrega button').data("text", result[index]['carrera_nombre']);
$(this).find(".carrera-agrega button").removeClass("invisible");
}
})
}
},
error: function(){
console.log("Error");
}
});
})
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access('Avisos');
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Avisos Crear');
}
$fac = $user->facultad['facultad_id'];
if($user->admin){
$fac = null;
}
$fs_carreras = query('SELECT * FROM fs_carreras(:fac, null, null)', [':fac' => $fac], false);
$fs_facultades = query('SELECT * FROM facultad WHERE facultad_activa = true', null, false);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos Crear</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/richtext.css" type="text/css">
<link rel="stylesheet" href="css/fa_all.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"CREAR AVISO",
"Gestión de Checador "
);
$user->access('Avisos');
?>
<main class="content marco">
<div class="row">
<div class="col-12">
<form action="./action/action_avisos_insert.php" method="post" id="formaModal" onsubmit="return validaCampos()">
<div class="form-box">
<?php if($user->admin){ ?>
<div class="form-group row">
<label for="facultad" class="col-4 col-form-label">Facultad *</label>
<div class="col-8 col-sm-4">
<div class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Mostrar todas</div>
<span class="ing-buscar icono"></span>
<ul style="display: none;">
<?php foreach($fs_facultades as $facultad){ ?>
<li data-id="<?= $facultad['facultad_id'] ?>" class="pl-4"><?= $facultad['facultad_nombre'] ?></li>
<?php } ?>
</ul>
<input type="hidden" id="facultad" name="facultad" value="">
</div>
</div>
</div>
<?php }else {?>
<input type="hidden" name="facultad" id="facultad" value="<?= $fac ?>">
<?php }?>
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial *</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha Final *</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="texto" class="col-4 col-form-label">Aviso *</label>
<div class="col-8">
<textarea name="texto" id="texto" class="richtext" rows="10"></textarea>
<div class="invalid-feedback">No puede estar vacio</div>
</div>
</div>
<div class="form-group row tipo_aviso">
<label class="col-4 col-form-label">Enviar aviso:</label>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_tipo" id="bloque_tipo" value="1" data-box="profesorBox" data-select="tipo_box">
<label class="custom-control-label" for="bloque_tipo">Por carrera</label>
</div>
</div>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_usr" id="bloque_usr" value="1" data-box="administrativoBox" data-select="usuario_box">
<label class="custom-control-label" for="bloque_usr">Por nombre</label>
</div>
</div>
</div>
<div class="invalid-feedback offset-4">No hay profesores para mandar el aviso</div>
<div class="collapse" id="profesorBox">
<h3>Carreras</h3>
<p>Utiliza el botón para asignar las carreras que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="tipo[]" id="tipo_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_carrera"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-tipo"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
<div class="collapse" id="administrativoBox">
<h3>Nombre de profesores</h3>
<p>Utiliza el botón para asignar los profesores que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="usuario[]" id="usuario_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_usr"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-usr"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
</div>
<div class="form-group row mt-2">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><span class="ing-aceptar"></span> Guardar</button>
<a href="avisos.php" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Cancelar</a>
</div>
</div>
</form>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal_carrera" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<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">Carreras
<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">
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Carrera</th>
<th>Asignar</th>
</tr>
</thead>
<tbody id="table-result-carrera">
<tr class="tipo-row">
<td class="carrera-nombre"></td>
<td class="carrera-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-carrera"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal_usr" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="col-12 modal-title text-center">Busca Usuarios
<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 id="forma_buscar-usr" onsubmit="return false">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Nombre</label>
<div class="col-8">
<input id="filter_desc" name="desc" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave ULSA</label>
<div class="col-8">
<input id="filter_clave" name="clave" type="text" class="form-control">
</div>
</div>
</div>
<div class="for-group row">
<div class="offset-4">
<button type="submit" class="btn btn-outline-primary" id="btn-busca-usr"><span class="ing-buscar"></span> Buscar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar"></span> Cerrar</button>
</div>
</div>
</form>
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white mt-3">
<thead class="thead-dark">
<tr>
<th>Usuario</th>
<th style="width: 20%;">Asignar</th>
</tr>
</thead>
<tbody id="table-result-usr">
<tr class="usr-row">
<td class="usr-nombre"></td>
<td class="usr-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-usr"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="./js/richtext.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).ready(function(){
$('.richtext').richText();
//var today = new Date();
$("#fecha_inicial").datepicker("option", "minDate", today);
$("#fecha_final").datepicker("option", "minDate", today);
$('#fecha_inicial').datepicker("setDate", today);
$('#fecha_final').datepicker("setDate", today);
setDatalistFirst('#facultad');
});
$(document).on( "change", ".tipo-switch", function(event){
if($(this).data("box") !== undefined){
if($(this).prop('checked')){
$('#'+$(this).data("box")).collapse('show');
}else{
$('#'+$(this).data("box")).collapse('hide');
}
}
$('#bloque_tipo').removeClass("is-invalid");
$('#bloque_usr').removeClass("is-invalid");
});
$(document).on( "click", ".btn-agrega-carrera", function(event){
var id = $(this).data("id");
var text = $(this).data("text");
if($('#tipo_box option[value="' + id + '"]').length == 0){
$("#tipo_box").append($("<option></option>").attr("value",id).text(text));
}
$(this).parents("tr").addClass("d-none");
});
$(document).on( "click", ".btn-quita-tipo", function(event){
var id = $("#tipo_box option:selected").val();
$("#arow_"+id).removeClass("d-none");
$("#tipo_box option:selected").remove();
});
$(document).on( "click", ".modal-open", function(event){
$(".area-row").removeClass("d-none");
$('#area > option').each(function() {
$("#row_"+$(this).val()).addClass("d-none");
});
$('#modal').modal("show");
});
$(document).on('click', '#btn-busca-usr', function(event){
var nombre = $('#filter_desc').val();
var clave = $('#filter_clave').val();
var fac = $('#facultad').val();
$('#table-result-usr').show();
$.ajax({
url: 'action/usuario_find.php',
type: 'POST',
dataType: 'json',
data: {nombre: nombre, clave: clave, facultad: fac},
success: function(result){
console.log(result.length);
$("#table-result-usr").find(".usr-nombre").html("");
$("#table-result-usr").find(".usr-agrega button").addClass("invisible");
var rows = $("#table-result-usr > tr").length;//limpia tabla actual
if(rows > result.length){
while(rows > result.length && rows > 1){
$("#table-result-usr .usr-row:last-child").remove();
rows--;
}
}else{
for(var i=rows; i<result.length; i++){
$("#table-result-usr .usr-row:first-child").clone(true).appendTo("#table-result-usr");
}
}
if(result.length != 0){
$('#table-result-usr').children().each(function(index){
if(index < result.length){
$(this).find('.usr-nombre').html(result[index]['profesor_nombre']);
$(this).find('.usr-agrega button').data("id", result[index]['profesor_id']);
$(this).find('.usr-agrega button').data("text", result[index]['profesor_nombre']);
$(this).find(".usr-agrega button").removeClass("invisible");
}
})
}
},
error: function(){
console.log('error');
}
});
});
$(document).on( "click", ".btn-agrega-usr", function(event){
var id = $(this).data("id");
var text = $(this).data("text");
var rows = $("#table-result-usr > tr").length;//limpia tabla actual
if($('#usuario_box option[value="' + id + '"]').length == 0){
$("#usuario_box").append($("<option></option>").attr("value",id).text(text));
}
if(rows > 1)
$(this).parents("tr").remove();
else{
$(this).parents("tr").hide();
$("#filter_desc-usr").val("");
}
});
$(document).on( "click", ".btn-quita-usr", function(event){
$("#usuario_box option:selected").remove();
});
function validaCampos(){
var error = false;
var inicio = $('#fecha_inicial').val();
var fin = $('#fecha_final').val();
var aux = inicio.split('/');
inicio = aux[2]+'-'+aux[1]+'-'+aux[0];
aux = fin.split('/');
fin = aux[2]+'-'+aux[1]+'-'+aux[0];
if(fin < inicio){
$('#fecha_final').addClass('is-invalid');
error = true;
}
if($('#texto').val() == ""){
$('#texto').addClass('is-invalid');
error = true;
}
if($('select').find('option').length == 0){
error = true;
$('.tipo_aviso').addClass('is-invalid');
}else{
$('.tipo_aviso').removeClass('is-invalid');
}
if(error == true){
return false;
}else{
$('#tipo_box option').prop('selected', true);
$('#usuario_box option').prop('selected', true);
$('#formaModal').prop('action', './action/action_avisos_insert.php');
}
}
$('#modal_carrera').on('show.bs.modal', function(event){
var fac_id = $('#facultad').val();
$.ajax({
url: 'action/carrera_find.php',
type: 'POST',
dataType: 'json',
data: {fac_id: fac_id},
success: function(result){
$("#table-result-carrera").find(".carrera-nombre").html("");
$("#table-result-carrera").find(".carrera-agrega button").addClass("invisible");
var rows = $("#table-result-carrera > tr").length;
if(rows > result.length){
while(rows > result.length && rows > 1){
$("#table-result-carrera .tipo-row:last-child").remove();
rows--;
}
}else{
for(var i=rows; i<result.length; i++){
$("#table-result-carrera .tipo-row:first-child").clone(true).appendTo("#table-result-carrera");
}
}
if(result.length != 0){
$("#table-result-carrera").children().each(function(index){
if(index < result.length){
$(this).find('.carrera-nombre').html(result[index]['carrera_nombre']);
$(this).find('.carrera-agrega button').data("id", result[index]['carrera_id']);
$(this).find('.carrera-agrega button').data("text", result[index]['carrera_nombre']);
$(this).find(".carrera-agrega button").removeClass("invisible");
}
})
}
},
error: function(){
console.log("Error");
}
});
})
</script>
</body>
</html>

View File

@@ -1,437 +1,437 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$user->access('Avisos');
if (!$user->admin && $user->acceso == 'n') {
header('Location: main.php?error=1');
} else {
$user->print_to_log('Avisos Editar');
}
$fac = $user->facultad['facultad_id'];
if ($user->admin) {
$fac = null;
}
$fs_aviso = query('SELECT * FROM fs_aviso(:aviso_id, null, :facultad_id, null, 0, null)', [':aviso_id' => $_GET['id'], ':facultad_id' => $fac], true);
$fs_carreras = query('SELECT * FROM fs_carreras(:fac, null, null)', [':fac' => $fs_aviso['facultad_id']], false);
$fs_usr = query('SELECT * FROM fs_profesor_aviso(:aviso_id)', [':aviso_id' => $_GET['id']], false);
$today = date('Y-m-d');
$edit = $today < $fs_aviso['aviso_fecha_inicial'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos Crear</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/richtext.css" type="text/css">
<link rel="stylesheet" href="css/fa_all.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"EDITAR AVISO",
"Gestión de Checador "
);
$user->access('Avisos');
?>
<main class="content marco">
<div class="row">
<div class="col-12">
<form action="./action/action_avisos_update.php" method="post" id="formaModal" onsubmit="return validaCampos()">
<input type="hidden" name="aviso_id" id="aviso_id" value="<?= $fs_aviso['aviso_id'] ?>">
<div class="form-box">
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<?php if ($edit) { ?>
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_inicial; ?>">
<div class="invalid-feedback">No es una fecha valida</div>
<?php } else { ?>
<div>
<?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_inicial; ?>
</div>
<?php } ?>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha Final *</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_final']);
$dia_final = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_final; ?>">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="texto" class="col-4 col-form-label">Aviso *</label>
<div class="col-8">
<?php if ($edit == true) { ?>
<textarea name="texto" id="texto" class="richtext" rows="10" readonly="readonly"><?= $fs_aviso['aviso_texto'] ?></textarea>
<?php } else { ?>
<p><?= $fs_aviso['aviso_texto'] ?></p>
<?php } ?>
</div>
</div>
<?php if ($edit) { ?>
<div class="form-group row tipo_aviso">
<label class="col-4 col-form-label">Enviar aviso:</label>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_tipo" id="bloque_tipo" value="1" data-box="profesorBox" data-select="tipo_box">
<label class="custom-control-label" for="bloque_tipo">Por carrera</label>
</div>
</div>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_usr" id="bloque_usr" value="1" data-box="administrativoBox" data-select="usuario_box">
<label class="custom-control-label" for="bloque_usr">Por nombre</label>
</div>
</div>
</div>
<div class="invalid-feedback offset-4">No hay profesores para mandar el aviso</div>
<div class="collapse" id="profesorBox">
<h3>Carreras</h3>
<p>Utiliza el botón para asignar las carreras que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="tipo[]" id="tipo_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_carrera"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-tipo"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
<div class="collapse" id="administrativoBox">
<h3>Nombre de profesores</h3>
<p>Utiliza el botón para asignar los profesores que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="usuario[]" id="usuario_box" class="form-control" multiple="multiple" size="5">
<?php
foreach ($fs_usr as $usuario) {
echo "<option value='" . $usuario['profesor_id'] . "'>" . $usuario['profesor_nombre'] . "</option>";
}
?>
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_usr"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-usr"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
</div>
<?php } else {
$num_prof = round(count($fs_usr) / 2);
?>
<h3>Profesores que recibirán el aviso</h3>
<div class="row" style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<div class="col-5">
<div>
<ul>
<?php for ($i = 0; $i < $num_prof; $i++) {
echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
} ?>
</ul>
</div>
</div>
<div class="col-5">
<div>
<ul>
<?php for ($i = $i; $i < count($fs_usr); $i++) {
echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
} ?>
</ul>
</div>
</div>
</div>
<?php } ?>
<div class="form-group row mt-2">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><span class="ing-aceptar"></span> Guardar</button>
<a href="avisos.php" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Cancelar</a>
</div>
</div>
</form>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal_carrera" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<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">Carreras
<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">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Carrera</th>
<th>Asignar</th>
</tr>
</thead>
<tbody>
<?php $count = 1;
foreach ($fs_carreras as $carrera) { ?>
<tr class="tipo-row" id="arow_<?= $carrera['carrera_id'] ?>">
<td><?= $carrera['carrera_nombre'] ?></td>
<td class="text-center"><button type="button" class="btn btn-outline-primary btn-sm btn-agrega-tipo" data-id="<?= $carrera['carrera_id'] ?>" data-text="<?= $carrera['carrera_nombre'] ?>"><span class="ing-mas"></span></button></td>
</tr>
<?php $count++;
} ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal_usr" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="col-12 modal-title text-center">Busca Usuarios
<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 id="forma_buscar-usr" onsubmit="return false">
<input type="hidden" id="facultad" name="facultad" value="<?= $fac ?>">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Nombre</label>
<div class="col-8">
<input id="filter_desc" name="desc" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave ULSA</label>
<div class="col-8">
<input id="filter_clave" name="clave" type="text" class="form-control">
</div>
</div>
</div>
<div class="for-group row">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="btn-busca-usr"><span class="ing-buscar"></span> Buscar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar"></span> Cerrar</button>
</div>
</div>
</form>
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white mt-3">
<thead class="thead-dark">
<tr>
<th>Usuario</th>
<th style="width: 20%;">Asignar</th>
</tr>
</thead>
<tbody id="table-result-usr">
<tr class="usr-row">
<td class="usr-nombre"></td>
<td class="usr-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-usr"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="./js/richtext.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).ready(function() {
$('.richtext').richText();
$("#fecha_final").datepicker("option", "minDate", today);
$("#fecha_inicial").datepicker("option", "minDate", today);
<?php
if (count($fs_usr) > 0) { ?>
$('#bloque_usr').prop("checked", true);
$('#administrativoBox').collapse('show');
<?php } if ($edit == false) { ?>
$('.richText-editor').removeAttr("contentEditable");
<?php }
?>
});
$(document).on("change", ".tipo-switch", function(event) {
if ($(this).data("box") !== undefined) {
if ($(this).prop('checked')) {
$('#' + $(this).data("box")).collapse('show');
} else {
$('#' + $(this).data("box")).collapse('hide');
}
}
$('#bloque_tipo').removeClass("is-invalid");
$('#bloque_usr').removeClass("is-invalid");
});
$(document).on("click", ".btn-agrega-tipo", function(event) {
var id = $(this).data("id");
var text = $(this).data("text");
if ($('#tipo_box option[value="' + id + '"]').length == 0) {
$("#tipo_box").append($("<option></option>").attr("value", id).text(text));
}
$(this).parents("tr").addClass("d-none");
});
$(document).on("click", ".btn-quita-tipo", function(event) {
var id = $("#tipo_box option:selected").val();
$("#arow_" + id).removeClass("d-none");
$("#tipo_box option:selected").remove();
});
$(document).on("click", ".modal-open", function(event) {
$(".area-row").removeClass("d-none");
$('#area > option').each(function() {
$("#row_" + $(this).val()).addClass("d-none");
});
$('#modal').modal("show");
});
$(document).on('click', '#btn-busca-usr', function(event) {
var nombre = $('#filter_desc').val();
var clave = $('#filter_clave').val();
var fac = $('#facultad').val();
$('#table-result-usr').show();
$.ajax({
url: 'action/usuario_find.php',
type: 'POST',
dataType: 'json',
data: {
nombre: nombre,
clave: clave,
facultad: fac
},
success: function(result) {
console.log(result.length);
$("#table-result-usr").find(".usr-nombre").html("");
$("#table-result-usr").find(".usr-agrega button").addClass("invisible");
var rows = $("#table-result-usr > tr").length; //limpia tabla actual
if (rows > result.length) {
while (rows > result.length && rows > 1) {
$("#table-result-usr .usr-row:last-child").remove();
rows--;
}
} else {
for (var i = rows; i < result.length; i++) {
$("#table-result-usr .usr-row:first-child").clone(true).appendTo("#table-result-usr");
}
}
if (result.length != 0) {
$('#table-result-usr').children().each(function(index) {
if (index < result.length) {
$(this).find('.usr-nombre').html(result[index]['profesor_nombre']);
$(this).find('.usr-agrega button').data("id", result[index]['profesor_id']);
$(this).find('.usr-agrega button').data("text", result[index]['profesor_nombre']);
$(this).show();
$(this).find(".usr-agrega button").removeClass("invisible");
}
})
}
},
error: function() {
console.log('error');
}
});
});
$(document).on("click", ".btn-agrega-usr", function(event) {
var id = $(this).data("id");
var text = $(this).data("text");
var rows = $("#table-result-usr > tr").length; //limpia tabla actual
if ($('#usuario_box option[value="' + id + '"]').length == 0) {
$("#usuario_box").append($("<option></option>").attr("value", id).text(text));
}
if (rows > 1)
$(this).parents("tr").remove();
else {
$(this).parents("tr").hide();
$("#filter_desc-usr").val("");
}
});
$(document).on("click", ".btn-quita-usr", function(event) {
$("#usuario_box option:selected").remove();
});
function validaCampos() {
var error = false;
var inicio = $('#fecha_inicial').val();
var fin = $('#fecha_final').val();
var aux = inicio.split('/');
inicio = aux[2] + '-' + aux[1] + '-' + aux[0];
aux = fin.split('/');
fin = aux[2] + '-' + aux[1] + '-' + aux[0];
if (fin < inicio) {
$('#fecha_final').addClass('is-invalid');
error = true;
}
if ($('select').find('option').length == 0) {
error = true;
$('.tipo_aviso').addClass('is-invalid');
} else {
$('.tipo_aviso').removeClass('is-invalid');
}
if (error) {
return false;
} else {
$('#tipo_box option').prop('selected', true);
$('#usuario_box option').prop('selected', true);
$('#formaModal').prp('action', './action/action_avisos_update.php');
}
}
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$user->access('Avisos');
if (!$user->admin && $user->acceso == 'n') {
header('Location: main.php?error=1');
} else {
$user->print_to_log('Avisos Editar');
}
$fac = $user->facultad['facultad_id'];
if ($user->admin) {
$fac = null;
}
$fs_aviso = query('SELECT * FROM fs_aviso(:aviso_id, null, :facultad_id, null, 0, null)', [':aviso_id' => $_GET['id'], ':facultad_id' => $fac], true);
$fs_carreras = query('SELECT * FROM fs_carreras(:fac, null, null)', [':fac' => $fs_aviso['facultad_id']], false);
$fs_usr = query('SELECT * FROM fs_profesor_aviso(:aviso_id)', [':aviso_id' => $_GET['id']], false);
$today = date('Y-m-d');
$edit = $today < $fs_aviso['aviso_fecha_inicial'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Avisos Crear</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/richtext.css" type="text/css">
<link rel="stylesheet" href="css/fa_all.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"EDITAR AVISO",
"Gestión de Checador "
);
$user->access('Avisos');
?>
<main class="content marco">
<div class="row">
<div class="col-12">
<form action="./action/action_avisos_update.php" method="post" id="formaModal" onsubmit="return validaCampos()">
<input type="hidden" name="aviso_id" id="aviso_id" value="<?= $fs_aviso['aviso_id'] ?>">
<div class="form-box">
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<?php if ($edit) { ?>
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_inicial; ?>">
<div class="invalid-feedback">No es una fecha valida</div>
<?php } else { ?>
<div>
<?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
$dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_inicial; ?>
</div>
<?php } ?>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha Final *</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_final']);
$dia_final = $day['2'] . '/' . $day['1'] . '/' . $day[0];
echo $dia_final; ?>">
<div class="invalid-feedback">No es una fecha valida</div>
</div>
</div>
<div class="form-group row">
<label for="texto" class="col-4 col-form-label">Aviso *</label>
<div class="col-8">
<?php if ($edit == true) { ?>
<textarea name="texto" id="texto" class="richtext" rows="10" readonly="readonly"><?= $fs_aviso['aviso_texto'] ?></textarea>
<?php } else { ?>
<p><?= $fs_aviso['aviso_texto'] ?></p>
<?php } ?>
</div>
</div>
<?php if ($edit) { ?>
<div class="form-group row tipo_aviso">
<label class="col-4 col-form-label">Enviar aviso:</label>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_tipo" id="bloque_tipo" value="1" data-box="profesorBox" data-select="tipo_box">
<label class="custom-control-label" for="bloque_tipo">Por carrera</label>
</div>
</div>
<div class="col-4 pt-2">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input tipo-switch" name="bloque_usr" id="bloque_usr" value="1" data-box="administrativoBox" data-select="usuario_box">
<label class="custom-control-label" for="bloque_usr">Por nombre</label>
</div>
</div>
</div>
<div class="invalid-feedback offset-4">No hay profesores para mandar el aviso</div>
<div class="collapse" id="profesorBox">
<h3>Carreras</h3>
<p>Utiliza el botón para asignar las carreras que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="tipo[]" id="tipo_box" class="form-control" multiple="multiple" size="5">
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_carrera"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-tipo"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
<div class="collapse" id="administrativoBox">
<h3>Nombre de profesores</h3>
<p>Utiliza el botón para asignar los profesores que recibirán el aviso.</p>
<div class="form-group row">
<div class="col-10">
<select name="usuario[]" id="usuario_box" class="form-control" multiple="multiple" size="5">
<?php
foreach ($fs_usr as $usuario) {
echo "<option value='" . $usuario['profesor_id'] . "'>" . $usuario['profesor_nombre'] . "</option>";
}
?>
</select>
</div>
<div class="col-2">
<p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_usr"><span class="ing-mas ing-fw"></span> Asignar</button></p>
<p><button type="button" class="btn btn-outline-danger btn-quita-usr"><span class="ing-menos ing-fw"></span> Quitar</button></p>
</div>
</div>
</div>
</div>
<?php } else {
$num_prof = round(count($fs_usr) / 2);
?>
<h3>Profesores que recibirán el aviso</h3>
<div class="row" style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<div class="col-5">
<div>
<ul>
<?php for ($i = 0; $i < $num_prof; $i++) {
echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
} ?>
</ul>
</div>
</div>
<div class="col-5">
<div>
<ul>
<?php for ($i = $i; $i < count($fs_usr); $i++) {
echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
} ?>
</ul>
</div>
</div>
</div>
<?php } ?>
<div class="form-group row mt-2">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><span class="ing-aceptar"></span> Guardar</button>
<a href="avisos.php" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Cancelar</a>
</div>
</div>
</form>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal_carrera" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<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">Carreras
<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">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Carrera</th>
<th>Asignar</th>
</tr>
</thead>
<tbody>
<?php $count = 1;
foreach ($fs_carreras as $carrera) { ?>
<tr class="tipo-row" id="arow_<?= $carrera['carrera_id'] ?>">
<td><?= $carrera['carrera_nombre'] ?></td>
<td class="text-center"><button type="button" class="btn btn-outline-primary btn-sm btn-agrega-tipo" data-id="<?= $carrera['carrera_id'] ?>" data-text="<?= $carrera['carrera_nombre'] ?>"><span class="ing-mas"></span></button></td>
</tr>
<?php $count++;
} ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal_usr" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="col-12 modal-title text-center">Busca Usuarios
<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 id="forma_buscar-usr" onsubmit="return false">
<input type="hidden" id="facultad" name="facultad" value="<?= $fac ?>">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Nombre</label>
<div class="col-8">
<input id="filter_desc" name="desc" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave ULSA</label>
<div class="col-8">
<input id="filter_clave" name="clave" type="text" class="form-control">
</div>
</div>
</div>
<div class="for-group row">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary" id="btn-busca-usr"><span class="ing-buscar"></span> Buscar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar"></span> Cerrar</button>
</div>
</div>
</form>
<div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
<table class="table table-sm table-striped table-white mt-3">
<thead class="thead-dark">
<tr>
<th>Usuario</th>
<th style="width: 20%;">Asignar</th>
</tr>
</thead>
<tbody id="table-result-usr">
<tr class="usr-row">
<td class="usr-nombre"></td>
<td class="usr-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-usr"><span class="ing-mas"></span></button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="./js/richtext.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$(document).ready(function() {
$('.richtext').richText();
$("#fecha_final").datepicker("option", "minDate", today);
$("#fecha_inicial").datepicker("option", "minDate", today);
<?php
if (count($fs_usr) > 0) { ?>
$('#bloque_usr').prop("checked", true);
$('#administrativoBox').collapse('show');
<?php } if ($edit == false) { ?>
$('.richText-editor').removeAttr("contentEditable");
<?php }
?>
});
$(document).on("change", ".tipo-switch", function(event) {
if ($(this).data("box") !== undefined) {
if ($(this).prop('checked')) {
$('#' + $(this).data("box")).collapse('show');
} else {
$('#' + $(this).data("box")).collapse('hide');
}
}
$('#bloque_tipo').removeClass("is-invalid");
$('#bloque_usr').removeClass("is-invalid");
});
$(document).on("click", ".btn-agrega-tipo", function(event) {
var id = $(this).data("id");
var text = $(this).data("text");
if ($('#tipo_box option[value="' + id + '"]').length == 0) {
$("#tipo_box").append($("<option></option>").attr("value", id).text(text));
}
$(this).parents("tr").addClass("d-none");
});
$(document).on("click", ".btn-quita-tipo", function(event) {
var id = $("#tipo_box option:selected").val();
$("#arow_" + id).removeClass("d-none");
$("#tipo_box option:selected").remove();
});
$(document).on("click", ".modal-open", function(event) {
$(".area-row").removeClass("d-none");
$('#area > option').each(function() {
$("#row_" + $(this).val()).addClass("d-none");
});
$('#modal').modal("show");
});
$(document).on('click', '#btn-busca-usr', function(event) {
var nombre = $('#filter_desc').val();
var clave = $('#filter_clave').val();
var fac = $('#facultad').val();
$('#table-result-usr').show();
$.ajax({
url: 'action/usuario_find.php',
type: 'POST',
dataType: 'json',
data: {
nombre: nombre,
clave: clave,
facultad: fac
},
success: function(result) {
console.log(result.length);
$("#table-result-usr").find(".usr-nombre").html("");
$("#table-result-usr").find(".usr-agrega button").addClass("invisible");
var rows = $("#table-result-usr > tr").length; //limpia tabla actual
if (rows > result.length) {
while (rows > result.length && rows > 1) {
$("#table-result-usr .usr-row:last-child").remove();
rows--;
}
} else {
for (var i = rows; i < result.length; i++) {
$("#table-result-usr .usr-row:first-child").clone(true).appendTo("#table-result-usr");
}
}
if (result.length != 0) {
$('#table-result-usr').children().each(function(index) {
if (index < result.length) {
$(this).find('.usr-nombre').html(result[index]['profesor_nombre']);
$(this).find('.usr-agrega button').data("id", result[index]['profesor_id']);
$(this).find('.usr-agrega button').data("text", result[index]['profesor_nombre']);
$(this).show();
$(this).find(".usr-agrega button").removeClass("invisible");
}
})
}
},
error: function() {
console.log('error');
}
});
});
$(document).on("click", ".btn-agrega-usr", function(event) {
var id = $(this).data("id");
var text = $(this).data("text");
var rows = $("#table-result-usr > tr").length; //limpia tabla actual
if ($('#usuario_box option[value="' + id + '"]').length == 0) {
$("#usuario_box").append($("<option></option>").attr("value", id).text(text));
}
if (rows > 1)
$(this).parents("tr").remove();
else {
$(this).parents("tr").hide();
$("#filter_desc-usr").val("");
}
});
$(document).on("click", ".btn-quita-usr", function(event) {
$("#usuario_box option:selected").remove();
});
function validaCampos() {
var error = false;
var inicio = $('#fecha_inicial').val();
var fin = $('#fecha_final').val();
var aux = inicio.split('/');
inicio = aux[2] + '-' + aux[1] + '-' + aux[0];
aux = fin.split('/');
fin = aux[2] + '-' + aux[1] + '-' + aux[0];
if (fin < inicio) {
$('#fecha_final').addClass('is-invalid');
error = true;
}
if ($('select').find('option').length == 0) {
error = true;
$('.tipo_aviso').addClass('is-invalid');
} else {
$('.tipo_aviso').removeClass('is-invalid');
}
if (error) {
return false;
} else {
$('#tipo_box option').prop('selected', true);
$('#usuario_box option').prop('selected', true);
$('#formaModal').prp('action', './action/action_avisos_update.php');
}
}
</script>
</body>
</html>

114
base.php
View File

@@ -1,58 +1,58 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access('usuarios');
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Base');
}
$fac = $user->facultad['facultad_id'] ?? -1;
if($user->admin){
$fac=null;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Base</title>
<?php
include 'import/html_css_files.php';
?>
<script src="js/messages.js" defer></script>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"PROFESORES",
"Gestión de Checador "
);
?>
<main class="content marco">
</main>
<?php
include "import/html_footer.php";
?>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access('usuarios');
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Base');
}
$fac = $user->facultad['facultad_id'] ?? -1;
if($user->admin){
$fac=null;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Base</title>
<?php
include 'import/html_css_files.php';
?>
<script src="js/messages.js" defer></script>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"PROFESORES",
"Gestión de Checador "
);
?>
<main class="content marco">
</main>
<?php
include "import/html_footer.php";
?>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
</script>
</body>
</html>

View File

@@ -1,139 +1,139 @@
<?php
if (isset($_GET["error"]) && is_numeric($_GET["error"])) {
switch ($_GET["error"]) {
case 0:
$errorDesc = "No se reciberon datos.";
break;
case 1:
$errorDesc = "El usuario y/o contraseña son incorrectos.";
break;
case 2:
$errorDesc = "El usuario no tiene permisos de ingresar.";
break;
case 3:
$errorDesc = "El usuario y/o contraseña son incorrectos.";
break;
}
}
?>
<!DOCTYPE html>
<html lang="es" prefix="og: http://ogp.me/ns#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>.: Administrador de checador :.</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?= rand() ?>" type="text/css">
<link rel="stylesheet" href="css/index.css" type="text/css">
<body>
<!-- HEADER -->
<?php include "import/html_header.php";
html_header("Checador inicio de sesión"); ?>
<main class="container-fluid content d-flex justify-content-center align-items-center">
<div class="logSize p-5 bg-white defaultShadow">
<div class="row mb-4">
<div class="col-sm-12">
<h1 class="mb-1">Iniciar sesión</h1>
</div>
</div>
<form method="post" action="action/force_session.php" id="session">
<div class="row user">
<div class="col">
<p class="text-center font-weight-bold text-info">Utiliza tu usuario y contraseña institucionales</p>
</div>
</div>
<div class="form-group row user">
<div class="input-group px-4">
<div class="input-group-prepend secondary">
<div class="input-group-text bg-primary text-white"><i class="ing-usuario ing-fw"></i></div>
</div>
<input class="form-control form-control-lg" type="text" autocomplete="username" placeholder="Usuario (ad)" id="username" name="username" value="" autofocus="true" maxlength="10" />
</div>
</div>
<div class="form-group row user">
<div class="input-group mb-2 px-4">
<div class="input-group-prepend">
<div class="input-group-text bg-primary text-white"><i class="ing-pass ing-fw"></i></div>
</div>
<input class="form-control form-control-lg" type="password" autocomplete="current-password" placeholder="Contraseña" id="passwd" name="passwd" value="" maxlength="50" />
</div>
</div>
<!-- Usuario -->
<div class="form-group row" id="cold-bypass">
<div class="input-group mb-2 px-4">
<div id="dlUsuario" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona un usuario</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
</ul>
<input type="hidden" id="user" name="usuario" value="">
</div>
</div>
</div>
<div class="error">
<?php if (isset($_GET["error"])) { ?>
<p class="text-danger text-center font-weight-bold">¡ERROR! <?= $errorDesc ?></p>
<?php } ?>
</div>
<p class="text-center">
<button type="submit" class="btn btn-lg btn-outline-primary btn-ing arrow">Ingresar</button>
</p>
</form>
</div>
</main>
<!--- FOOTER--->
<?php require_once("import/html_footer.php"); ?>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/bootstrap/popper.min.js"></script>
<script src="js/sidebarmenu.js"></script>
<script src="js/datalist.js"></script>
<script>
$("#cold-bypass").hide();
// on submit, prevent default
$("#session").submit(function(e) {
if ($("#user").val() != "") {
$(this).unbind('submit').submit();
return;
}
e.preventDefault();
// dlUsuario has a value force session and redirect to main.php
// get the form data
var formData = {
'username': $('input[name=username]').val(),
'passwd': $('input[name=passwd]').val(),
};
$.post("action/action_usuario.php", formData, function(data) {
console.log(data);
$(".error").html("");
if (data == "error") {
$(".error").html("<p class='text-danger text-center font-weight-bold'>¡ERROR! El usuario y/o contraseña son incorrectos.</p>");
return;
}
$("#cold-bypass").show();
data.forEach(function(element) {
// console.log(element);
$("#dlUsuario ul").append(`<li class="not-selectable" data-id="${element.id}">${element.facultad}</li>`);
element.usuarios.forEach(function(usuario) {
$("#dlUsuario ul").append(`<li data-id="${usuario.id}">${usuario.username}</li>`);
});
});
// hide username and password
$(".user").hide();
}, 'json');
});
</script>
</body>
<?php
if (isset($_GET["error"]) && is_numeric($_GET["error"])) {
switch ($_GET["error"]) {
case 0:
$errorDesc = "No se reciberon datos.";
break;
case 1:
$errorDesc = "El usuario y/o contraseña son incorrectos.";
break;
case 2:
$errorDesc = "El usuario no tiene permisos de ingresar.";
break;
case 3:
$errorDesc = "El usuario y/o contraseña son incorrectos.";
break;
}
}
?>
<!DOCTYPE html>
<html lang="es" prefix="og: http://ogp.me/ns#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>.: Administrador de checador :.</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?= rand() ?>" type="text/css">
<link rel="stylesheet" href="css/index.css" type="text/css">
<body>
<!-- HEADER -->
<?php include "import/html_header.php";
html_header("Checador inicio de sesión"); ?>
<main class="container-fluid content d-flex justify-content-center align-items-center">
<div class="logSize p-5 bg-white defaultShadow">
<div class="row mb-4">
<div class="col-sm-12">
<h1 class="mb-1">Iniciar sesión</h1>
</div>
</div>
<form method="post" action="action/force_session.php" id="session">
<div class="row user">
<div class="col">
<p class="text-center font-weight-bold text-info">Utiliza tu usuario y contraseña institucionales</p>
</div>
</div>
<div class="form-group row user">
<div class="input-group px-4">
<div class="input-group-prepend secondary">
<div class="input-group-text bg-primary text-white"><i class="ing-usuario ing-fw"></i></div>
</div>
<input class="form-control form-control-lg" type="text" autocomplete="username" placeholder="Usuario (ad)" id="username" name="username" value="" autofocus="true" maxlength="10" />
</div>
</div>
<div class="form-group row user">
<div class="input-group mb-2 px-4">
<div class="input-group-prepend">
<div class="input-group-text bg-primary text-white"><i class="ing-pass ing-fw"></i></div>
</div>
<input class="form-control form-control-lg" type="password" autocomplete="current-password" placeholder="Contraseña" id="passwd" name="passwd" value="" maxlength="50" />
</div>
</div>
<!-- Usuario -->
<div class="form-group row" id="cold-bypass">
<div class="input-group mb-2 px-4">
<div id="dlUsuario" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona un usuario</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
</ul>
<input type="hidden" id="user" name="usuario" value="">
</div>
</div>
</div>
<div class="error">
<?php if (isset($_GET["error"])) { ?>
<p class="text-danger text-center font-weight-bold">¡ERROR! <?= $errorDesc ?></p>
<?php } ?>
</div>
<p class="text-center">
<button type="submit" class="btn btn-lg btn-outline-primary btn-ing arrow">Ingresar</button>
</p>
</form>
</div>
</main>
<!--- FOOTER--->
<?php require_once("import/html_footer.php"); ?>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/bootstrap/popper.min.js"></script>
<script src="js/sidebarmenu.js"></script>
<script src="js/datalist.js"></script>
<script>
$("#cold-bypass").hide();
// on submit, prevent default
$("#session").submit(function(e) {
if ($("#user").val() != "") {
$(this).unbind('submit').submit();
return;
}
e.preventDefault();
// dlUsuario has a value force session and redirect to main.php
// get the form data
var formData = {
'username': $('input[name=username]').val(),
'passwd': $('input[name=passwd]').val(),
};
$.post("action/action_usuario.php", formData, function(data) {
console.log(data);
$(".error").html("");
if (data == "error") {
$(".error").html("<p class='text-danger text-center font-weight-bold'>¡ERROR! El usuario y/o contraseña son incorrectos.</p>");
return;
}
$("#cold-bypass").show();
data.forEach(function(element) {
// console.log(element);
$("#dlUsuario ul").append(`<li class="not-selectable" data-id="${element.id}">${element.facultad}</li>`);
element.usuarios.forEach(function(usuario) {
$("#dlUsuario ul").append(`<li data-id="${usuario.id}">${usuario.username}</li>`);
});
});
// hide username and password
$(".user").hide();
}, 'json');
});
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,73 +1,73 @@
<?php
/*
* Objeto para leer y escribir datos de log de intentos de asistencia realizadas por el usuario
*/
namespace classes;
define("MAX_LINES", 200);
class LogAsistencias
{
//put your code here
private $file, $month, $year;
private $dir;
function __construct($ruta = null)
{
// die ruta
$this->month = date("m");
$this->year = date("Y");
$this->dir = ($ruta ?? '') . "log/";
$this->updateFilename();
}
function setMes(string $mes)
{
$this->month = $mes;
$this->updateFilename();
}
function setAno(string $ano)
{
$this->year = $ano;
$this->updateFilename();
}
private function updateFilename()
{
$this->file = "asistencias_" . $this->year . "_" . $this->month . ".log";
}
private function cleanLog($text)
{ //remueve || de los textos
return trim(str_ireplace("||", "", $text));
}
function appendLog($claveULSA, $nombre, $desc)
{
$filename = $this->dir . $this->file;
if (!file_exists($this->dir)) {
mkdir($this->dir, 0755, true);
}
if (file_exists($this->dir)) {
$data = date('Y-m-d H:i:s') . "||" . $this->cleanLog($claveULSA) . "||" . $this->cleanLog($desc) . "||" . $this->cleanLog($nombre) . "\n";
/*echo*/
file_put_contents($filename, $data, FILE_APPEND);
}
}
function getLog($mes = "", $ano = "")
{
if ($mes != "") $this->setMes($mes);
if ($ano != "") $this->setAno($ano);
$filename = $this->dir . $this->file;
if (file_exists($filename)) {
//return array_slice(file ($filename , FILE_SKIP_EMPTY_LINES) , -10);
$lines = file($filename, FILE_SKIP_EMPTY_LINES);
//echo "antes: ".count($lines);
if (count($lines) > MAX_LINES) {
$lines = array_slice($lines, MAX_LINES * (-1));
}
//echo "despues: ".count($lines);
return $lines;
} else
return array();
}
}
<?php
/*
* Objeto para leer y escribir datos de log de intentos de asistencia realizadas por el usuario
*/
namespace classes;
define("MAX_LINES", 200);
class LogAsistencias
{
//put your code here
private $file, $month, $year;
private $dir;
function __construct($ruta = null)
{
// die ruta
$this->month = date("m");
$this->year = date("Y");
$this->dir = ($ruta ?? '') . "log/";
$this->updateFilename();
}
function setMes(string $mes)
{
$this->month = $mes;
$this->updateFilename();
}
function setAno(string $ano)
{
$this->year = $ano;
$this->updateFilename();
}
private function updateFilename()
{
$this->file = "asistencias_" . $this->year . "_" . $this->month . ".log";
}
private function cleanLog($text)
{ //remueve || de los textos
return trim(str_ireplace("||", "", $text));
}
function appendLog($claveULSA, $nombre, $desc)
{
$filename = $this->dir . $this->file;
if (!file_exists($this->dir)) {
mkdir($this->dir, 0755, true);
}
if (file_exists($this->dir)) {
$data = date('Y-m-d H:i:s') . "||" . $this->cleanLog($claveULSA) . "||" . $this->cleanLog($desc) . "||" . $this->cleanLog($nombre) . "\n";
/*echo*/
file_put_contents($filename, $data, FILE_APPEND);
}
}
function getLog($mes = "", $ano = "")
{
if ($mes != "") $this->setMes($mes);
if ($ano != "") $this->setAno($ano);
$filename = $this->dir . $this->file;
if (file_exists($filename)) {
//return array_slice(file ($filename , FILE_SKIP_EMPTY_LINES) , -10);
$lines = file($filename, FILE_SKIP_EMPTY_LINES);
//echo "antes: ".count($lines);
if (count($lines) > MAX_LINES) {
$lines = array_slice($lines, MAX_LINES * (-1));
}
//echo "despues: ".count($lines);
return $lines;
} else
return array();
}
}

View File

@@ -1,130 +1,143 @@
<?php
date_default_timezone_set('America/Mexico_City');
$currentTime = time();
$endOfDay = strtotime('tomorrow') - 1;
$remainingTime = $endOfDay - $currentTime;
session_set_cookie_params($remainingTime, '/', $_SERVER['HTTP_HOST'], false, true);
require_once($ruta ?? '') . "include/bd_pdo.php";
require_once($ruta ?? '') . "class/c_logasistencia.php";
require_once($ruta ?? '') . "include/nusoap/nusoap.php";
session_start();
class Login
{
public string $acceso;
public function __construct(public array $user, public array $facultad, public array $rol, public bool $admin, public ?int $periodo, public bool $supervisor, public bool $jefe_carrera, public bool $profesor)
{
}
public function print_to_log(string $desc, array $old = null, array $new = null): void
{
$log = new classes\LogAsistencias($_ENV["RUTA_RAIZ"]);
if ($old)
$desc .= " |#| OLD:" . json_encode($old);
if ($new)
$desc .= " |#| NEW:" . json_encode($new);
$log->appendLog($this->user["id"], $this->user["nombre"], $desc);
}
public function access(string $pagina = null): void
{
if ($this->admin) {
$this->acceso = "w";
return;
}
# print_r( $access );
$this->acceso = query(
'SELECT tipo FROM PERMISO_VIEW WHERE ID = :usr AND PAGINA_RUTA ILIKE :ruta',
array(
':usr' => $this->user["id"],
':ruta' => $pagina ?? substr(basename($_SERVER['PHP_SELF']), 0, -4)
)
)["tipo"] ?? 'n';
}
public function __toString(): string
{
return "Usuario: {$this->user["nombre"]} ({$this->user["id"]}), Es admin: {$this->admin}, supervisor: {$this->supervisor}, jefe carrera: {$this->jefe_carrera}, profesor: {$this->profesor}";
}
private static function validaUsuario($user, $pass): bool
{
file_put_contents('php://stderr', $user);
if (in_array($user, ['ad017045']) and $pass == "admin")
return true;
$client = new nusoap_client('http://200.13.89.2/validacion.php?wsdl', 'wsdl');
$client->getError() and die('Error al crear el cliente: ' . $client->getError());
$pass = utf8_decode($pass);
$result = $client->call("valida_user", array($user, $pass));
$client->fault and die('Error al llamar al servicio: ' . $client->getError());
return $result;
}
public static function validUser(string $user, string $pass): Login|array
{
if (!Login::validaUsuario($user, $pass)) {
return [
'error' => true,
'msg' => 'Error al autenticar usuario'
];
}
global $db;
if ($db->has("FS_VALIDACLAVEULSA('$user')")) {
#die (Login::validaUsuario($user, $pass));
$fs_validaclaveulsa = $db->querySingle(
'SELECT * FROM FS_VALIDACLAVEULSA(?)',
[$user]
);
$user = array(
'id' => $fs_validaclaveulsa["id"],
'nombre' => $fs_validaclaveulsa["nombre"],
);
$facultad = array(
'facultad_id' => $fs_validaclaveulsa["facultad_id"],
'facultad' => $fs_validaclaveulsa["facultad"],
);
$rol = array(
'id' => $fs_validaclaveulsa["rol_id"],
'rol' => $fs_validaclaveulsa["rol"]
);
$supervisor = $db
->join('rol', 'rol.rol_id = usuario.rol_id')
->where('usuario_id', $user["id"])
->where('rol.rol_titulo', 'Supervisor')
->has('usuario');
$jefe_carrera = $db->where('usuario_id', $user["id"])->has('usuario_carrera');
$admin = $fs_validaclaveulsa["is_admin"];
$periodo = $fs_validaclaveulsa["periodo_id"];
return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false);
} else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user))->has("profesor")) {
$profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user))->getOne("profesor");
$user = array(
'id' => $profesor["profesor_clave"],
'nombre' => $profesor["profesor_nombre"],
);
$facultad = $rol = array(
'facultad_id' => null,
'facultad' => 'Docente',
);
$supervisor = false;
$jefe_carrera = false;
$admin = false;
$periodo = null;
// CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour
setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/");
return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, true);
} else
return [
'error' => true,
'msg' => 'Usuario no encontrado'
];
}
public static function log_out(): void
{
session_start();
session_destroy();
}
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
date_default_timezone_set('America/Mexico_City');
$currentTime = time();
$endOfDay = strtotime('tomorrow') - 1;
$remainingTime = $endOfDay - $currentTime;
session_set_cookie_params($remainingTime, '/', $_SERVER['HTTP_HOST'], false, true);
session_start();
require_once($ruta ?? '') . "include/bd_pdo.php";
require_once($ruta ?? '') . "class/c_logasistencia.php";
require_once($ruta ?? '') . "vendor/autoload.php";
class Login
{
public string $acceso;
public function __construct(public array $user, public array $facultad, public array $rol, public bool $admin, public ?int $periodo, public bool $supervisor, public bool $jefe_carrera, public bool $profesor)
{
}
public function print_to_log(string $desc, array $old = null, array $new = null): void
{
$log = new classes\LogAsistencias($_ENV["RUTA_RAIZ"]);
if ($old)
$desc .= " |#| OLD:" . json_encode($old);
if ($new)
$desc .= " |#| NEW:" . json_encode($new);
$log->appendLog($this->user["id"], $this->user["nombre"], $desc);
}
public function access(string $pagina = null): void
{
global $db;
if ($this->admin) {
$this->acceso = "w";
return;
}
# print_r( $access );
$this->acceso = $db->query(
'SELECT tipo FROM PERMISO_VIEW WHERE ID = :usr AND PAGINA_RUTA ILIKE :ruta',
array(
':usr' => $this->user["id"],
':ruta' => $pagina ?? substr(basename($_SERVER['PHP_SELF']), 0, -4)
)
)["tipo"] ?? 'n';
}
public function __toString(): string
{
return "Usuario: {$this->user["nombre"]} ({$this->user["id"]}), Es admin: {$this->admin}, supervisor: {$this->supervisor}, jefe carrera: {$this->jefe_carrera}, profesor: {$this->profesor}";
}
private static function validaUsuario($user, $pass): bool
{
file_put_contents('php://stderr', $user);
if ($user == 'ad017045' and $pass == "admin")
return true;
$client = new nusoap_client('http://200.13.89.2/validacion.php?wsdl', 'wsdl');
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = FALSE;
$client->getError() and die('Error al crear el cliente: ' . $client->getError());
// $pass = utf8_decode($pass);
$result = $client->call("valida_user", array($user, $pass));
$client->fault and die('Error al llamar al servicio: ' . $client->getError());
return $result;
}
public static function validUser(string $user, string $pass): Login|array
{
if (Login::validaUsuario($user, $pass) === false) {
return [
'error' => true,
'msg' => 'Error al autenticar usuario'
];
}
global $db;
if ($db->has("FS_VALIDACLAVEULSA('$user')")) {
#die (Login::validaUsuario($user, $pass));
$fs_validaclaveulsa = $db->querySingle(
'SELECT * FROM FS_VALIDACLAVEULSA(?)',
[$user]
);
$user = array(
'id' => $fs_validaclaveulsa["id"],
'nombre' => $fs_validaclaveulsa["nombre"],
'clave' => $db->where('usuario_id', $fs_validaclaveulsa["id"])->getOne("usuario")["usuario_clave"]
);
$facultad = array(
'facultad_id' => $fs_validaclaveulsa["facultad_id"],
'facultad' => $fs_validaclaveulsa["facultad"],
);
$rol = array(
'id' => $fs_validaclaveulsa["rol_id"],
'rol' => $fs_validaclaveulsa["rol"]
);
$supervisor = $db
->join('rol', 'rol.rol_id = usuario.rol_id')
->where('usuario_id', $user["id"])
->where('rol.rol_titulo', 'Supervisor')
->has('usuario');
$jefe_carrera = $db->where('usuario_id', $user["id"])->has('usuario_carrera');
$admin = $fs_validaclaveulsa["is_admin"];
$periodo = $fs_validaclaveulsa["periodo_id"];
return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false);
} else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->has("profesor")) {
$profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->getOne("profesor");
$user = array(
'id' => $profesor["profesor_clave"],
'nombre' => $profesor["profesor_nombre"],
);
$facultad = array(
'facultad_id' => null,
'facultad' => null,
);
$rol = array(
'id' => null,
'rol' => 'Docente'
);
// CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour
setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/");
return new Login($user, $facultad, $rol, admin: false, periodo: null, supervisor: false, jefe_carrera: false, profesor: true);
} else
return [
'error' => true,
'msg' => 'Usuario no encontrado'
];
}
public static function log_out(): void
{
session_start();
session_destroy();
}
}

View File

@@ -1,15 +1,15 @@
<?php
class Menu {
private array $menu = [];
public function __construct() {
$this->conn = new Connection();
}
public function getMenu() {
$sql = "SELECT * FROM menu";
$result = $this->conn->getConnection()->query($sql);
$this->menu = $result->fetchAll();
return $this->menu;
}
<?php
class Menu {
private array $menu = [];
public function __construct() {
$this->conn = new Connection();
}
public function getMenu() {
$sql = "SELECT * FROM menu";
$result = $this->conn->getConnection()->query($sql);
$this->menu = $result->fetchAll();
return $this->menu;
}
}

View File

@@ -1,57 +1,57 @@
<?php
define("DB_HOST",($_SERVER["SERVER_NAME"] == "localhost") ? "200.13.89.27" : "localhost");
define('DB_USER', 'checa_usr');
define('DB_PASS', 'Cr0n0m3tr4d0&$');
define('DB_NAME', 'checador');
class Connection {
private $conn;
public function __construct() {
$this->conn = new PDO(
"pgsql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS,
array(PDO::ATTR_PERSISTENT => true)
);
}
public function getConnection() {
return $this->conn;
}
public function query() {}
}
try {
$pdo = new PDO(
"pgsql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS,
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
)
);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
function SQL(string $sql, array $params = [])
{
global $pdo;
$stmt = $pdo->prepare($sql);
foreach ($params as $key => $value) {
// bind Parameter
$stmt->bindParam($key, $value);
}
$stmt->execute($params);
return $stmt->fetchAll();
}
function filter_by(array $array, array $fields): array
{
$result = [];
foreach ($array as $key => $value) {
$result[$key] = [];
foreach ($fields as $field) {
$result[$key][$field] = $value[$field];
}
}
return $result;
<?php
define("DB_HOST",($_SERVER["SERVER_NAME"] == "localhost") ? "200.13.89.27" : "localhost");
define('DB_USER', 'checa_usr');
define('DB_PASS', 'Cr0n0m3tr4d0&$');
define('DB_NAME', 'checador');
class Connection {
private $conn;
public function __construct() {
$this->conn = new PDO(
"pgsql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS,
array(PDO::ATTR_PERSISTENT => true)
);
}
public function getConnection() {
return $this->conn;
}
public function query() {}
}
try {
$pdo = new PDO(
"pgsql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS,
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
)
);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
function SQL(string $sql, array $params = [])
{
global $pdo;
$stmt = $pdo->prepare($sql);
foreach ($params as $key => $value) {
// bind Parameter
$stmt->bindParam($key, $value);
}
$stmt->execute($params);
return $stmt->fetchAll();
}
function filter_by(array $array, array $fields): array
{
$result = [];
foreach ($array as $key => $value) {
$result[$key] = [];
foreach ($fields as $field) {
$result[$key][$field] = $value[$field];
}
}
return $result;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +1,46 @@
body {
font-family: 'indivisa-text';
/*background-image: linear-gradient(rgba(0,29,104, 0.3), rgba(0,29,104, 0.3)), url('../imagenes/fondochecador.png');*/
background-image: url('../imagenes/fondochecador.jpg');
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-position: center;
height: 100%;
overflow: hidden;
}
.hora{font-size: 4rem; border-right: 2px solid #d21034; line-height: 1.1; padding-bottom: 8px;}
.fecha{font-size: 1.9rem; line-height: 1.2em; }
.facultad{font-size: 1.5rem; font-weight: bold; color: #aaa;}
.checa-box{width:800px; min-height: 380px; -webkit-box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2); -moz-box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2); box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2);}
h1, h2, h3 {letter-spacing: 1px; position: relative; color: #001e61;}
.subtitle:before{ content: ''; position: absolute; bottom: -8px; left: 0; width: 80px; display: block; background: #d21034; height: 3px; }
.text-big{font-size:3.6rem;}
#list-result{font-size:1.15rem;}
#list-result li{margin:0.2em 0; border-bottom: 1px dashed #969696;}
.text-clave{ outline: none; color: #b7b7b7 !important; background: transparent; border: 1px solid #dbdcdd; border-radius: 5px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; font-size: 12px; font-weight: 300; vertical-align: middle; text-align:center; padding: 10px 20px;}
.text-clave:focus{ color: #001d68 !important; border-color: #001d68;}
.sin-servicio, .text-clave{font-size:1.7rem;}
.aviso{ font-size:120%;}
.mensaje{ font-size: 7vh; }
@media (max-width: 768px) {
.hora{ font-size: 3.2rem;}
.fecha{font-size: 1.4rem;}
.checa-box{width:100%;}
.text-big{font-size:3rem;}
.sin-servicio, .text-clave{font-size:1.2rem;}
}
@media (max-width: 576px) {
.hora{font-size: 2rem !important;}
.fecha, .titulo{font-size: 1rem;}
#logo{width: 75%;}
.facultad{font-size: 1.2rem}
.text-big{font-size:2.8rem;}
}
body {
font-family: 'indivisa-text';
/*background-image: linear-gradient(rgba(0,29,104, 0.3), rgba(0,29,104, 0.3)), url('../imagenes/fondochecador.png');*/
background-image: url('../imagenes/fondochecador.jpg');
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-position: center;
height: 100%;
overflow: hidden;
}
.hora{font-size: 4rem; border-right: 2px solid #d21034; line-height: 1.1; padding-bottom: 8px;}
.fecha{font-size: 1.9rem; line-height: 1.2em; }
.facultad{font-size: 1.5rem; font-weight: bold; color: #aaa;}
.checa-box{width:800px; min-height: 380px; -webkit-box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2); -moz-box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2); box-shadow: 0px 0px 5px 1px rgba(150,150,150,0.2);}
h1, h2, h3 {letter-spacing: 1px; position: relative; color: #001e61;}
.subtitle:before{ content: ''; position: absolute; bottom: -8px; left: 0; width: 80px; display: block; background: #d21034; height: 3px; }
.text-big{font-size:3.6rem;}
#list-result{font-size:1.15rem;}
#list-result li{margin:0.2em 0; border-bottom: 1px dashed #969696;}
.text-clave{ outline: none; color: #b7b7b7 !important; background: transparent; border: 1px solid #dbdcdd; border-radius: 5px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; font-size: 12px; font-weight: 300; vertical-align: middle; text-align:center; padding: 10px 20px;}
.text-clave:focus{ color: #001d68 !important; border-color: #001d68;}
.sin-servicio, .text-clave{font-size:1.7rem;}
.aviso{ font-size:120%;}
.mensaje{ font-size: 7vh; }
@media (max-width: 768px) {
.hora{ font-size: 3.2rem;}
.fecha{font-size: 1.4rem;}
.checa-box{width:100%;}
.text-big{font-size:3rem;}
.sin-servicio, .text-clave{font-size:1.2rem;}
}
@media (max-width: 576px) {
.hora{font-size: 2rem !important;}
.fecha, .titulo{font-size: 1rem;}
#logo{width: 75%;}
.facultad{font-size: 1.2rem}
.text-big{font-size:2.8rem;}
}

View File

@@ -1,10 +1,10 @@
/*
jQuery Custom Input File Plugin - version 1.0
Copyright 2014, Ángel Espro, www.aesolucionesweb.com.ar,
Licence : GNU General Public License
Site: www.aesolucionesweb.com.ar/plugins/custom-input-file
You must not remove these lines. Read gpl.txt for further legal information.
*/
/*
jQuery Custom Input File Plugin - version 1.0
Copyright 2014, Ángel Espro, www.aesolucionesweb.com.ar,
Licence : GNU General Public License
Site: www.aesolucionesweb.com.ar/plugins/custom-input-file
You must not remove these lines. Read gpl.txt for further legal information.
*/
.cif-file-picker{position:relative;width:380px;height:180px;padding:0;border:4px dashed rgba(0,0,0,.2);display:table-cell;vertical-align:middle;text-align:center;opacity:.5;box-sizing:border-box;-moz-box-sizing:border-box}.cif-icon-picker{background:url(cif-icons-20xy.png) 0 0 no-repeat;width:80px;height:60px;display:inline-block}.cif-file-picker h3{margin:0;font-size:20px;text-align:center}.cif-file-picker p{margin:0 0 10px 0;font-size:16px;text-align:center}.cif-file-picker:hover{opacity:1}.cif-file-picker.dragover:not(.inactive){border-color:#46be5e;opacity:1;box-shadow:0 0 50px rgba(0,0,0,.5)}.cif-file-picker.inactive{opacity:.2}.cif-file-picker.inactive.dragover{cursor:pointer}.cif-parent{position:relative;margin-bottom:10px}.foto-file-row .field-wr-int{position:relative}.cif-close{opacity:.5;text-indent:-100000px;width:14px;height:14px;cursor:default;color:#555;background:url(cif-icons-20xy.png) 0px -60px no-repeat}.cif-file-container.cif-type-image .cif-close{top:0px;left:0px;position:absolute}.cif-close:hover{opacity:1}.cif-file-container.cif-container-all-type .cif-file-row{margin:10px 0}.cif-file-container.cif-container-all-type .cif-parent{max-width:380px;box-sizing:border-box;-moz-box-sizing:border-box;padding:10px 10px 10px 30px;border:1px solid #dfdfdf;background:#F4F4F4}.cif-file-container.cif-container-all-type .cif-all-type{font-size:13px;line-height:16px}.cif-file-container.cif-container-all-type .cif-close{top:50%;margin-top:-7px;left:5px;position:absolute}.cif-file-container.cif-container-all-type .cif-file-size{opacity:.8}.cif-file-container.cif-container-image-type .cif-file-row{border-bottom:1px solid #f2f2f2;padding:20px 0}.cif-file-container.cif-container-image-type .cif-parent{padding-top:30px}.cif-file-container.cif-container-image-type .cif-close{top:5px}.cif-img{max-height:300px;max-width:380px}#cif-msg-wr{font-size:13px;position:fixed;z-index:10000;top:100px;right:20px;max-width:50%;padding:15px;background:#fff;border:1px solid #dfdfdf;box-shadow:3px 3px 6px rgba(0,0,0,.5)}#cif-msg-wr .cif-msg-close{opacity:.5;position:absolute;right:0;top:0;width:16px;height:16px;text-indent:-100000px;background:url(cif-icons-20xy.png) 0 -75px no-repeat}#cif-msg-wr .cif-msg-close:hover{opacity:1}.cif-msg-icon{padding:0 10px;font-size:8px}.cif-msg-icon-error{background:url(cif-icons-20xy.png) 0 -120px no-repeat}.cif-msg-icon-ok{background:url(cif-icons-20xy.png) 0 -100px no-repeat}.cf-progressbar-wr{position:fixed;top:0;left:0;background:rgba(0,0,0,.7);width:100%;height:100%;z-index:50000}.cf-progressbar{height:12px;position:absolute;top:50%;margin-top:-6px;left:50%;margin-left:-125px;width:250px;background:#dadada;padding:2px;box-sizing:border-box;border:1px solid #000}.cf-progressbar>span{display:block;height:100%;background:rgb(43,194,83);background-image:url(bg-progress-bar.png);position:relative;transition:width 200ms;overflow:hidden}.jcrop-holder .preview-pane{display:block;position:absolute;z-index:2000;top:00px;left:102%;padding:6px;border:1px rgba(0,0,0,.4) solid;background-color:white;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:1px 1px 5px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 5px 2px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 5px 2px rgba(0, 0, 0, 0.2)}.preview-pane .preview-container{overflow:hidden}

View File

@@ -1,190 +1,190 @@
.richText {
position: relative;
border: 1px solid #D6D8D8;
background: #D6D8D8;
width: 100%;
border-radius: 0.25rem;
}
.richText .richText-toolbar ul {
padding: 0 !important;
margin: 0 !important;
display: flex;
flex-wrap: wrap;
justify-content: left;/*center*/
}
.richText .richText-toolbar ul li {
list-style: none;
}
.richText .richText-toolbar ul li a {
display: block;
padding: 0.25rem 0.5rem;
cursor: pointer;
-webkit-transition: color 0.4s;
-moz-transition: color 0.4s;
transition: color 0.4s;
}
.richText .richText-toolbar ul li a:hover {
color: #001d68;
}
.richText .richText-toolbar ul li a .fa, .richText .richText-toolbar ul li a .fas, .richText .richText-toolbar ul li a .far, .richText .richText-toolbar ul li a svg {
pointer-events: none;
}
.richText .richText-toolbar ul li[data-disable="true"] {
opacity: 0.1;
}
.richText .richText-toolbar ul li[data-disable="true"] a {
cursor: default;
}
.richText .richText-toolbar ul li:not([data-disable="true"]).is-selected .richText-dropdown-outer {
display: block;
}
.richText .richText-toolbar ul:after {
display: block;
content: "";
clear: both;
}
.richText .richText-toolbar:last-child {
font-size: 0.75rem;
}
.richText .richText-toolbar:after {
display: block;
clear: both;
content: "";
}
.richText .richText-form select {cursor: pointer;}
.richText .richText-editor {
padding: 0.5rem;
background-color: #FFFFFF;
height: 15rem;
outline: none;
overflow-y: scroll;
overflow-x: auto;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.3);
cursor: default;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown {
position: relative;
z-index:10;
display: block;
margin: 3% auto 0 auto;
background-color: #D6D8D8;
border: 0.1rem solid #777777;
border-radius: 0.25rem;
padding: 0.75rem;
padding-top: 1.5rem;
max-width: 90%;
-webkit-box-shadow: 0 0 5px 0 #777777;
-moz-box-shadow: 0 0 5px 0 #777777;
box-shadow: 0 0 5px 0 #777777;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown .richText-dropdown-close {
position: absolute;
top: 0.25rem;
right: 0.5rem;
color: #CE0E2D;
cursor: pointer;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown .richText-dropdown-close:hover {
opacity: 0.5
}
.richText-form-item{
position: relative;
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.richText .richText-form label {
display: flex;
align-items: left;/*center*/
padding: 0.375rem 0.75rem;
margin-bottom: 0;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
font-weight: 600;
text-align: left;/*center*/
white-space: nowrap;
}
.richText .richText-form input[type="text"], .richText .richText-form input[type="file"], .richText .richText-form input[type="number"], .richText .richText-form select {
display: block;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #777777;
background-color: #FFFFFF;
background-clip: padding-box;
border: 1px solid #D6D8DB;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
position: relative;
flex: 1 1 auto;
width: 1%;
margin-bottom: 0;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown {list-style: none;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li {display: block;float: none;font-family: Calibri,Verdana,Helvetica,sans-serif;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li a {display: block;padding: 10px 15px;border-bottom: #EFEFEF solid 1px;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li a:hover {background-color: #FFFFFF;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline {margin: 10px 6px;float: left;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline a {display: block;padding: 0;margin: 0;border: none;-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%;-webkit-box-shadow: 0 0 10px 0 #999;-moz-box-shadow: 0 0 10px 0 #999;box-shadow: 0 0 10px 0 #999;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline a span {display: block;height: 30px;width: 30px;-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%;}
.richText .richText-undo, .richText .richText-redo {
float: left;
display: block;
padding: 0.5rem;
cursor: pointer;
}
.richText .richText-undo.is-disabled, .richText .richText-redo.is-disabled {
opacity: 0.4;
}
.richText .richText-help {
display: none;
}
/*
.richText .richText-initial {margin-bottom: -4px;padding: 10px;background-color: #282828;border: none;color: #33FF33;font-family: Monospace,Calibri,Verdana,Helvetica,sans-serif;max-width: 100%;min-width: 100%;width: 100%;min-height: 400px;height: 400px;}
.richText .richText-editor ul, .richText .richText-editor ol {margin: 10px 25px;}
.richText .richText-editor:focus {border-left: #3498db solid 2px;}
.richText .richText-editor table {margin: 10px 0;border-spacing: 0;width: 100%;}
.richText .richText-editor table td, .richText .richText-editor table th {padding: 10px;border: #EFEFEF solid 1px;}
.richText .richText-help {float: right;display: block;padding: 10px 15px;cursor: pointer;}
.richText .richText-help-popup a {color: #3498db;text-decoration: underline;}
.richText .richText-help-popup hr {margin: 10px auto 5px auto;border: none;border-top: #EFEFEF solid 1px;}
.richText .richText-list.list-rightclick {position: absolute;background-color: #FAFAFA;border-right: #EFEFEF solid 1px;border-bottom: #EFEFEF solid 1px;}
.richText {
position: relative;
border: 1px solid #D6D8D8;
background: #D6D8D8;
width: 100%;
border-radius: 0.25rem;
}
.richText .richText-toolbar ul {
padding: 0 !important;
margin: 0 !important;
display: flex;
flex-wrap: wrap;
justify-content: left;/*center*/
}
.richText .richText-toolbar ul li {
list-style: none;
}
.richText .richText-toolbar ul li a {
display: block;
padding: 0.25rem 0.5rem;
cursor: pointer;
-webkit-transition: color 0.4s;
-moz-transition: color 0.4s;
transition: color 0.4s;
}
.richText .richText-toolbar ul li a:hover {
color: #001d68;
}
.richText .richText-toolbar ul li a .fa, .richText .richText-toolbar ul li a .fas, .richText .richText-toolbar ul li a .far, .richText .richText-toolbar ul li a svg {
pointer-events: none;
}
.richText .richText-toolbar ul li[data-disable="true"] {
opacity: 0.1;
}
.richText .richText-toolbar ul li[data-disable="true"] a {
cursor: default;
}
.richText .richText-toolbar ul li:not([data-disable="true"]).is-selected .richText-dropdown-outer {
display: block;
}
.richText .richText-toolbar ul:after {
display: block;
content: "";
clear: both;
}
.richText .richText-toolbar:last-child {
font-size: 0.75rem;
}
.richText .richText-toolbar:after {
display: block;
clear: both;
content: "";
}
.richText .richText-form select {cursor: pointer;}
.richText .richText-editor {
padding: 0.5rem;
background-color: #FFFFFF;
height: 15rem;
outline: none;
overflow-y: scroll;
overflow-x: auto;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.3);
cursor: default;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown {
position: relative;
z-index:10;
display: block;
margin: 3% auto 0 auto;
background-color: #D6D8D8;
border: 0.1rem solid #777777;
border-radius: 0.25rem;
padding: 0.75rem;
padding-top: 1.5rem;
max-width: 90%;
-webkit-box-shadow: 0 0 5px 0 #777777;
-moz-box-shadow: 0 0 5px 0 #777777;
box-shadow: 0 0 5px 0 #777777;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown .richText-dropdown-close {
position: absolute;
top: 0.25rem;
right: 0.5rem;
color: #CE0E2D;
cursor: pointer;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer .richText-dropdown .richText-dropdown-close:hover {
opacity: 0.5
}
.richText-form-item{
position: relative;
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
.richText .richText-form label {
display: flex;
align-items: left;/*center*/
padding: 0.375rem 0.75rem;
margin-bottom: 0;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
font-weight: 600;
text-align: left;/*center*/
white-space: nowrap;
}
.richText .richText-form input[type="text"], .richText .richText-form input[type="file"], .richText .richText-form input[type="number"], .richText .richText-form select {
display: block;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #777777;
background-color: #FFFFFF;
background-clip: padding-box;
border: 1px solid #D6D8DB;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
position: relative;
flex: 1 1 auto;
width: 1%;
margin-bottom: 0;
}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown {list-style: none;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li {display: block;float: none;font-family: Calibri,Verdana,Helvetica,sans-serif;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li a {display: block;padding: 10px 15px;border-bottom: #EFEFEF solid 1px;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li a:hover {background-color: #FFFFFF;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline {margin: 10px 6px;float: left;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline a {display: block;padding: 0;margin: 0;border: none;-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%;-webkit-box-shadow: 0 0 10px 0 #999;-moz-box-shadow: 0 0 10px 0 #999;box-shadow: 0 0 10px 0 #999;}
.richText .richText-toolbar ul li a .richText-dropdown-outer ul.richText-dropdown li.inline a span {display: block;height: 30px;width: 30px;-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%;}
.richText .richText-undo, .richText .richText-redo {
float: left;
display: block;
padding: 0.5rem;
cursor: pointer;
}
.richText .richText-undo.is-disabled, .richText .richText-redo.is-disabled {
opacity: 0.4;
}
.richText .richText-help {
display: none;
}
/*
.richText .richText-initial {margin-bottom: -4px;padding: 10px;background-color: #282828;border: none;color: #33FF33;font-family: Monospace,Calibri,Verdana,Helvetica,sans-serif;max-width: 100%;min-width: 100%;width: 100%;min-height: 400px;height: 400px;}
.richText .richText-editor ul, .richText .richText-editor ol {margin: 10px 25px;}
.richText .richText-editor:focus {border-left: #3498db solid 2px;}
.richText .richText-editor table {margin: 10px 0;border-spacing: 0;width: 100%;}
.richText .richText-editor table td, .richText .richText-editor table th {padding: 10px;border: #EFEFEF solid 1px;}
.richText .richText-help {float: right;display: block;padding: 10px 15px;cursor: pointer;}
.richText .richText-help-popup a {color: #3498db;text-decoration: underline;}
.richText .richText-help-popup hr {margin: 10px auto 5px auto;border: none;border-top: #EFEFEF solid 1px;}
.richText .richText-list.list-rightclick {position: absolute;background-color: #FAFAFA;border-right: #EFEFEF solid 1px;border-bottom: #EFEFEF solid 1px;}
.richText .richText-list.list-rightclick li {padding: 5px 7px;cursor: pointer;list-style: none;}*/

468
demo.html
View File

@@ -1,235 +1,235 @@
<link rel="stylesheet" href="css/indivisa.css">
<p class="container">
<i class="ing-fb1"></i> ing-fb1
</p>
<p class="container">
<i class="ing-fb2"></i> ing-fb2
</p>
<p class="container">
<i class="ing-tw1"></i> ing-tw1
</p>
<p class="container">
<i class="ing-tw2"></i> ing-tw2
</p>
<p class="container">
<i class="ing-in1"></i> ing-in1
</p>
<p class="container">
<i class="ing-in2"></i> ing-in2
</p>
<p class="container">
<i class="ing-instra1"></i> ing-instra1
</p>
<p class="container">
<i class="ing-instra2"></i> ing-instra2
</p>
<p class="container">
<i class="ing-youtube"></i> ing-youtube
</p>
<p class="container">
<i class="ing-telefono"></i> ing-telefono
</p>
<p class="container">
<i class="ing-mail"></i> ing-mail
</p>
<p class="container">
<i class="ing-link"></i> ing-link
</p>
<p class="container">
<i class="ing-ubicacion"></i> ing-ubicacion
</p>
<p class="container">
<i class="ing-puntos"></i> ing-puntos
</p>
<p class="container">
<i class="ing-usuario"></i> ing-usuario
</p>
<p class="container">
<i class="ing-pass"></i> ing-pass
</p>
<p class="container">
<i class="ing-menu"></i> ing-menu
</p>
<p class="container">
<i class="ing-salir"></i> ing-salir
</p>
<p class="container">
<i class="ing-flecha"></i> ing-flecha
</p>
<p class="container">
<i class="ing-cambiar"></i> ing-cambiar
</p>
<p class="container">
<i class="ing-caret"></i> ing-caret
</p>
<p class="container">
<i class="ing-aceptar"></i> ing-aceptar
</p>
<p class="container">
<i class="ing-cancelar"></i> ing-cancelar
</p>
<p class="container">
<i class="ing-mas"></i> ing-mas
</p>
<p class="container">
<i class="ing-menos"></i> ing-menos
</p>
<p class="container">
<i class="ing-editar"></i> ing-editar
</p>
<p class="container">
<i class="ing-buscar"></i> ing-buscar
</p>
<p class="container">
<i class="ing-ojo"></i> ing-ojo
</p>
<p class="container">
<i class="ing-borrar"></i> ing-borrar
</p>
<p class="container">
<i class="ing-basura"></i> ing-basura
</p>
<p class="container">
<i class="ing-camara"></i> ing-camara
</p>
<p class="container">
<i class="ing-importante"></i> ing-importante
</p>
<p class="container">
<i class="ing-bullet"></i> ing-bullet
</p>
<p class="container">
<i class="ing-home"></i> ing-home
</p>
<p class="container">
<i class="ing-formacion"></i> ing-formacion
</p>
<p class="container">
<i class="ing-empleo"></i> ing-empleo
</p>
<p class="container">
<i class="ing-insignia1"></i> ing-insignia1
</p>
<p class="container">
<i class="ing-insignia2"></i> ing-insignia2
</p>
<p class="container">
<i class="ing-insignia3"></i> ing-insignia3
</p>
<p class="container">
<i class="ing-insignia4"></i> ing-insignia4
</p>
<p class="container">
<i class="ing-eventos"></i> ing-eventos
</p>
<p class="container">
<i class="ing-reporte"></i> ing-reporte
</p>
<p class="container">
<i class="ing-catalogo"></i> ing-catalogo
</p>
<p class="container">
<i class="ing-evalua-cartel"></i> ing-evalua-cartel
</p>
<p class="container">
<i class="ing-revision-cartel"></i> ing-revision-cartel
</p>
<p class="container">
<i class="ing-reporte-resultados"></i> ing-reporte-resultados
</p>
<p class="container">
<i class="ing-mi-cartel"></i> ing-mi-cartel
</p>
<p class="container">
<i class="ing-galeria1"></i> ing-galeria1
</p>
<p class="container">
<i class="ing-galeria2"></i> ing-galeria2
</p>
<p class="container">
<i class="ing-iniciar-sesion"></i> ing-iniciar-sesion
</p>
<p class="container">
<i class="ing-finalistas"></i> ing-finalistas
</p>
<p class="container">
<i class="ing-comite"></i> ing-comite
</p>
<p class="container">
<i class="ing-administrador"></i> ing-administrador
</p>
<p class="container">
<i class="ing-estrella1"></i> ing-estrella1
</p>
<p class="container">
<i class="ing-estrella2"></i> ing-estrella2
</p>
<p class="container">
<i class="ing-carga-archivo"></i> ing-carga-archivo
</p>
<p class="container">
<i class="ing-carga-multiple"></i> ing-carga-multiple
</p>
<p class="container">
<i class="ing-descarga"></i> ing-descarga
</p>
<p class="container">
<i class="ing-autorizar"></i> ing-autorizar
</p>
<p class="container">
<i class="ing-negar"></i> ing-negar
</p>
<p class="container">
<i class="ing-no-cargado"></i> ing-no-cargado
</p>
<p class="container">
<i class="ing-alumnos"></i> ing-alumnos
</p>
<p class="container">
<i class="ing-cardex"></i> ing-cardex
</p>
<p class="container">
<i class="ing-configuracion"></i> ing-configuracion
</p>
<p class="container">
<i class="ing-listado-menus"></i> ing-listado-menus
</p>
<p class="container">
<i class="ing-mi-cuenta"></i> ing-mi-cuenta
</p>
<p class="container">
<i class="ing-ver"></i> ing-ver
</p>
<p class="container">
<i class="ing-grafica"></i> ing-grafica
</p>
<p class="container">
<i class="ing-clic"></i> ing-clic
</p>
<p class="container">
<i class="ing-guardar"></i> ing-guardar
</p>
<p class="container">
<i class="ing-regresar"></i> ing-regresar
</p>
<p class="container">
<i class="ing-cuadrado"></i> ing-cuadrado
</p>
<p class="container">
<i class="ing-imprimir"></i> ing-imprimir
</p>
<p class="container">
<i class="ing-importante2"></i> ing-importante2
</p>
<p class="container">
<i class="ing-copiar"></i> ing-copiar
</p>
<p class="container">
<i class="ing-reloj"></i> ing-reloj
</p>
<p class="container">
<i class="ing-retardo"></i> ing-retardo
</p>
<p class="container">
<i class="ing-justificar"></i> ing-justificar
<link rel="stylesheet" href="css/indivisa.css">
<p class="container">
<i class="ing-fb1"></i> ing-fb1
</p>
<p class="container">
<i class="ing-fb2"></i> ing-fb2
</p>
<p class="container">
<i class="ing-tw1"></i> ing-tw1
</p>
<p class="container">
<i class="ing-tw2"></i> ing-tw2
</p>
<p class="container">
<i class="ing-in1"></i> ing-in1
</p>
<p class="container">
<i class="ing-in2"></i> ing-in2
</p>
<p class="container">
<i class="ing-instra1"></i> ing-instra1
</p>
<p class="container">
<i class="ing-instra2"></i> ing-instra2
</p>
<p class="container">
<i class="ing-youtube"></i> ing-youtube
</p>
<p class="container">
<i class="ing-telefono"></i> ing-telefono
</p>
<p class="container">
<i class="ing-mail"></i> ing-mail
</p>
<p class="container">
<i class="ing-link"></i> ing-link
</p>
<p class="container">
<i class="ing-ubicacion"></i> ing-ubicacion
</p>
<p class="container">
<i class="ing-puntos"></i> ing-puntos
</p>
<p class="container">
<i class="ing-usuario"></i> ing-usuario
</p>
<p class="container">
<i class="ing-pass"></i> ing-pass
</p>
<p class="container">
<i class="ing-menu"></i> ing-menu
</p>
<p class="container">
<i class="ing-salir"></i> ing-salir
</p>
<p class="container">
<i class="ing-flecha"></i> ing-flecha
</p>
<p class="container">
<i class="ing-cambiar"></i> ing-cambiar
</p>
<p class="container">
<i class="ing-caret"></i> ing-caret
</p>
<p class="container">
<i class="ing-aceptar"></i> ing-aceptar
</p>
<p class="container">
<i class="ing-cancelar"></i> ing-cancelar
</p>
<p class="container">
<i class="ing-mas"></i> ing-mas
</p>
<p class="container">
<i class="ing-menos"></i> ing-menos
</p>
<p class="container">
<i class="ing-editar"></i> ing-editar
</p>
<p class="container">
<i class="ing-buscar"></i> ing-buscar
</p>
<p class="container">
<i class="ing-ojo"></i> ing-ojo
</p>
<p class="container">
<i class="ing-borrar"></i> ing-borrar
</p>
<p class="container">
<i class="ing-basura"></i> ing-basura
</p>
<p class="container">
<i class="ing-camara"></i> ing-camara
</p>
<p class="container">
<i class="ing-importante"></i> ing-importante
</p>
<p class="container">
<i class="ing-bullet"></i> ing-bullet
</p>
<p class="container">
<i class="ing-home"></i> ing-home
</p>
<p class="container">
<i class="ing-formacion"></i> ing-formacion
</p>
<p class="container">
<i class="ing-empleo"></i> ing-empleo
</p>
<p class="container">
<i class="ing-insignia1"></i> ing-insignia1
</p>
<p class="container">
<i class="ing-insignia2"></i> ing-insignia2
</p>
<p class="container">
<i class="ing-insignia3"></i> ing-insignia3
</p>
<p class="container">
<i class="ing-insignia4"></i> ing-insignia4
</p>
<p class="container">
<i class="ing-eventos"></i> ing-eventos
</p>
<p class="container">
<i class="ing-reporte"></i> ing-reporte
</p>
<p class="container">
<i class="ing-catalogo"></i> ing-catalogo
</p>
<p class="container">
<i class="ing-evalua-cartel"></i> ing-evalua-cartel
</p>
<p class="container">
<i class="ing-revision-cartel"></i> ing-revision-cartel
</p>
<p class="container">
<i class="ing-reporte-resultados"></i> ing-reporte-resultados
</p>
<p class="container">
<i class="ing-mi-cartel"></i> ing-mi-cartel
</p>
<p class="container">
<i class="ing-galeria1"></i> ing-galeria1
</p>
<p class="container">
<i class="ing-galeria2"></i> ing-galeria2
</p>
<p class="container">
<i class="ing-iniciar-sesion"></i> ing-iniciar-sesion
</p>
<p class="container">
<i class="ing-finalistas"></i> ing-finalistas
</p>
<p class="container">
<i class="ing-comite"></i> ing-comite
</p>
<p class="container">
<i class="ing-administrador"></i> ing-administrador
</p>
<p class="container">
<i class="ing-estrella1"></i> ing-estrella1
</p>
<p class="container">
<i class="ing-estrella2"></i> ing-estrella2
</p>
<p class="container">
<i class="ing-carga-archivo"></i> ing-carga-archivo
</p>
<p class="container">
<i class="ing-carga-multiple"></i> ing-carga-multiple
</p>
<p class="container">
<i class="ing-descarga"></i> ing-descarga
</p>
<p class="container">
<i class="ing-autorizar"></i> ing-autorizar
</p>
<p class="container">
<i class="ing-negar"></i> ing-negar
</p>
<p class="container">
<i class="ing-no-cargado"></i> ing-no-cargado
</p>
<p class="container">
<i class="ing-alumnos"></i> ing-alumnos
</p>
<p class="container">
<i class="ing-cardex"></i> ing-cardex
</p>
<p class="container">
<i class="ing-configuracion"></i> ing-configuracion
</p>
<p class="container">
<i class="ing-listado-menus"></i> ing-listado-menus
</p>
<p class="container">
<i class="ing-mi-cuenta"></i> ing-mi-cuenta
</p>
<p class="container">
<i class="ing-ver"></i> ing-ver
</p>
<p class="container">
<i class="ing-grafica"></i> ing-grafica
</p>
<p class="container">
<i class="ing-clic"></i> ing-clic
</p>
<p class="container">
<i class="ing-guardar"></i> ing-guardar
</p>
<p class="container">
<i class="ing-regresar"></i> ing-regresar
</p>
<p class="container">
<i class="ing-cuadrado"></i> ing-cuadrado
</p>
<p class="container">
<i class="ing-imprimir"></i> ing-imprimir
</p>
<p class="container">
<i class="ing-importante2"></i> ing-importante2
</p>
<p class="container">
<i class="ing-copiar"></i> ing-copiar
</p>
<p class="container">
<i class="ing-reloj"></i> ing-reloj
</p>
<p class="container">
<i class="ing-retardo"></i> ing-retardo
</p>
<p class="container">
<i class="ing-justificar"></i> ing-justificar
</p>

View File

@@ -1,343 +1,343 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Dias_festivos');
}
if(isset($_GET['facultad'])){
$fac = $_GET['facultad'];
}else if($user->admin){
$fac = null;
}else{
$fac = $user->facultad['facultad_id'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Días Festivos</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/toggle.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"DÍAS FESTIVOS",
"Gestión de Checador "
);
$user->access();
$fs_dias_festivos = query("SELECT * FROM fs_diasfestivos(:facultad, null, null, null) ORDER BY diasfestivos_dia", [':facultad' => $fac], false);
$fs_periodos = query("SELECT * FROM fs_periodos(null, null) WHERE estado = 'Activo'", null, false);
$fs_dias_festivos_generales = query("SELECT * FROM fs_diasfestivos(null, null) ORDER BY diasfestivos_dia", null, false);
?>
<main class="content marco">
<?php if($user->admin){ ?>
<div class="col-12 text-right">
<button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span> Agregar Día Festivo</button>
</div>
<?php } ?>
<div id="message"></div>
<!-- Tabla -->
<?php if($fs_dias_festivos || $fs_dias_festivos_generales){ ?>
<div class="row mt-3">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Día</th>
<th>Periodo</th>
<th>Nivel</th>
<?php if($user->admin){ ?>
<th>Facultad</th>
<th>Acciones</th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php foreach($fs_dias_festivos as $dia){ ?>
<tr data-id="<?= $dia['diasfestivos_id'] ?>" id="<?= $dia['diasfestivos_id'] ?>" data-periodo="1">
<td class="text-center"><?php $day = explode("-", $dia['diasfestivos_dia']);
echo $day['2']."-".$day['1']."-".$day['0'];
?></td>
<td class="text-center"><?= $dia['periodo_nombre'] ?></td>
<td class="text-center"><?= $dia['nivel_nombre'] ?></td>
<?php if($user->admin){ ?>
<td class="text-center"><?= $dia['facultad_nombre'] ?></td>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura ing-fw"></span></a>
</td>
<?php } ?>
</tr>
<?php } ?>
<?php foreach($fs_dias_festivos_generales as $dia){ ?>
<tr data-id="<?= $dia['diasfestivos_id'] ?>" id="<?= $dia['diasfestivos_id'] ?>" data-periodo="0">
<td class="text-center"><?php $day = explode("-", $dia['diasfestivos_dia']);
echo $day['2']."-".$day['1']."-".$day['0'];
?></td>
<td class="text-center">Todos</td>
<td class="text-center">Todos</td>
<?php if($user->admin){ ?>
<td class="text-center">Todas</td>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura ing-fw"></span></a>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
<?php } ?>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- 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="modalLabel">
Editar Día Festivo
</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="" method="post" id="formaModal" onsubmit="return valida_campos()">
<input type="hidden" name="id" id="id">
<div class="form-box">
<div class="form-group row">
<label for="periodo" class="col-3 col-form-label">Periodo *</label>
<div class="col-8">
<div class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="fac">Mostrar todos</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="0" class="pl4-">Todos</li>
<?php foreach($fs_periodos as $periodo){ ?>
<li data-id="<?= $periodo['id'] ?>" class="pl4-"> <?php echo $periodo['periodo']." ".$periodo['facultad']." - ".$periodo['nivel']; ?></li>
<?php } ?>
</ul>
<input type="hidden" id="periodo" name="periodo" value="">
</div>
</div>
</div>
<div class="form-group row" id="rangoDiv">
<label for="rango" class="col-3 col-form-label">Rango</label>
<div class="col-8">
<input type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-on="SI" data-off="NO" data-size="s" id="rango" name="rango">
</div>
</div>
<div class="form-group row" id="diasFestivos">
<label for="diaFestivo" class="col-3 col-form-label">Día festivo *</label>
<div class="col-4" id="dia">
<input id="diaFestivo" name="diaFestivo" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
</div>
<div class="col-1 diaFestivoRango">
-
</div>
<div class="col-4 diaFestivoRango" id="diaFestivoRango">
<input id="diaFestivoFin" name="diaFestivoFin" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
</div>
<div class="invalid-feedback">Debe seleccionar una fecha</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>
<div class="modal fade" id="modal_confirm" 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-body">
<div class="row">
<div class="col">
<p class="font-weight-bold">¿Estás seguro de querer borrar el día festivo?</p>
</div>
</div>
</div>
<div class="modal-footer">
<input type="hidden" id="id_borrar" value="">
<button type="button" class="btn btn-outline-primary btn-borrar"><span class="ing-aceptar ing-fw"></span> Borrar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar ing-fw"></span> Cancelar</button>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="js/toggle.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
$(document).ready(function(){
$('.diaFestivoRango').hide();
});
$('#rango').change(function(){
if($(this).is(':checked')){
$('#diaFestivoFin').val('');
$('.diaFestivoRango').show();
$('#diaFestivoFin').datepicker("setDate", today);
}
else{
$('.diaFestivoRango').hide();
}
});
$('#modal_confirm').on('show.bs.modal', function(event){
var button = $(event.relatedTarget);
var id = button.parents("tr").data("id");
$("#id_borrar").val(id);
});
$(".btn-borrar").click(function(){
var id = $("#id_borrar").val();
$.ajax({
url: 'action/action_diasfestivos_borra.php',
type: 'post',
dataType: 'json',
data:{id: id},
success:function(result){
location.reload();
},
error: function(){console.log("Error")}
});
});
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
<?php if(!$fs_dias_festivos && !$fs_dias_festivos_generales){ ?>
triggerMessage("No se encontraron días festivos", "Error");
<?php } ?>
$('#modal').on('show.bs.modal', function (event){
var button = $(event.relatedTarget);
var tipo = button.data('tipo');
var modal = $(this);
if(tipo==1){//agregar
$('#modalLabel').html("Agregar Día Festivo");
$('#submitBtn').data('tipo', 1);
$('#diaFestivo').datepicker("setDate", today);
$('#diaFestivoFin').datepicker("setDate", today);
setDatalistFirst("#periodo");
$('#rangoDiv').show();
$('#dia').removeClass('col-9');
$('#dia').addClass('col-4');
}
else{
$('#modalLabel').html("Editar Día Festivo");
$('#submitBtn').data('tipo', 2);
$('#rangoDiv').hide();
$('#dia').removeClass('col-4');
$('#dia').addClass('col-9');
var id = $(event.relatedTarget).parents('tr').data('id');
var periodo = $(event.relatedTarget).parents('tr').data('periodo');
$.ajax({
url:"action/action_diasfestivos_select.php",
type:"post",
dataType:"json",
data:{id: id, periodo: periodo},
success:function(result){
console.log(result);
$('#id').val(result['diasfestivos_id']);
if(!result['periodo_id']){
setDatalist('#periodo', 0);
}else{
setDatalist('#periodo', result['periodo_id']);
}
var date = new Date(result['diasfestivos_dia']);
date.setDate(date.getDate() + 1);
$('#diaFestivo').datepicker("setDate", date);
},
error: function(){console.log("Error")}
});
}
});
function valida_campos(){
var error=false;
if($("#diaFestivo").val()==""){
$("#diaFestivo").addClass("is-invalid");
error=true;
}
var inicio = $("#diaFestivo").val();
var fin = $("#diaFestivoFin").val();
var aux = inicio.split("/");
inicio = aux[2] +"-"+ aux[1] +"-"+ aux[0];
aux = fin.split("/");
fin = aux[2] +"-"+ aux[1] +"-"+ aux[0];
console.log(inicio);
if((fin < inicio || fin == inicio) && $("#rango").is(':checked')){
$('#diaFestivoFin').addClass("is-invalid");
error=true;
}
if(error){
return false;
}else{
var btn = $("#submitBtn");
if(btn.data("tipo") == 2){//update
$("#formaModal").prop("action", "./action/action_diasfestivos_update.php");
}
else{//insert
$("#formaModal").prop("action", "./action/action_diasfestivos_insert.php");
}
}
}
<?php if(isset($_GET['error'])){
if($_GET['error'] == 1){ ?>
triggerMessage("Este dia festivo ya existe", "Error");
<?php }
} ?>
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if(!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Dias_festivos');
}
if(isset($_GET['facultad'])){
$fac = $_GET['facultad'];
}else if($user->admin){
$fac = null;
}else{
$fac = $user->facultad['facultad_id'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Días Festivos</title>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<link rel="stylesheet" href="css/toggle.css" type="text/css">
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"DÍAS FESTIVOS",
"Gestión de Checador "
);
$user->access();
$fs_dias_festivos = query("SELECT * FROM fs_diasfestivos(:facultad, null, null, null) ORDER BY diasfestivos_dia", [':facultad' => $fac], false);
$fs_periodos = query("SELECT * FROM fs_periodos(null, null) WHERE estado = 'Activo'", null, false);
$fs_dias_festivos_generales = query("SELECT * FROM fs_diasfestivos(null, null) ORDER BY diasfestivos_dia", null, false);
?>
<main class="content marco">
<?php if($user->admin){ ?>
<div class="col-12 text-right">
<button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span> Agregar Día Festivo</button>
</div>
<?php } ?>
<div id="message"></div>
<!-- Tabla -->
<?php if($fs_dias_festivos || $fs_dias_festivos_generales){ ?>
<div class="row mt-3">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Día</th>
<th>Periodo</th>
<th>Nivel</th>
<?php if($user->admin){ ?>
<th>Facultad</th>
<th>Acciones</th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php foreach($fs_dias_festivos as $dia){ ?>
<tr data-id="<?= $dia['diasfestivos_id'] ?>" id="<?= $dia['diasfestivos_id'] ?>" data-periodo="1">
<td class="text-center"><?php $day = explode("-", $dia['diasfestivos_dia']);
echo $day['2']."-".$day['1']."-".$day['0'];
?></td>
<td class="text-center"><?= $dia['periodo_nombre'] ?></td>
<td class="text-center"><?= $dia['nivel_nombre'] ?></td>
<?php if($user->admin){ ?>
<td class="text-center"><?= $dia['facultad_nombre'] ?></td>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura ing-fw"></span></a>
</td>
<?php } ?>
</tr>
<?php } ?>
<?php foreach($fs_dias_festivos_generales as $dia){ ?>
<tr data-id="<?= $dia['diasfestivos_id'] ?>" id="<?= $dia['diasfestivos_id'] ?>" data-periodo="0">
<td class="text-center"><?php $day = explode("-", $dia['diasfestivos_dia']);
echo $day['2']."-".$day['1']."-".$day['0'];
?></td>
<td class="text-center">Todos</td>
<td class="text-center">Todos</td>
<?php if($user->admin){ ?>
<td class="text-center">Todas</td>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar"><span class="ing-basura ing-fw"></span></a>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
<?php } ?>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- 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="modalLabel">
Editar Día Festivo
</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="" method="post" id="formaModal" onsubmit="return valida_campos()">
<input type="hidden" name="id" id="id">
<div class="form-box">
<div class="form-group row">
<label for="periodo" class="col-3 col-form-label">Periodo *</label>
<div class="col-8">
<div class="datalist datalist-select mb-1 w-100">
<div class="datalist-input" id="fac">Mostrar todos</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="0" class="pl4-">Todos</li>
<?php foreach($fs_periodos as $periodo){ ?>
<li data-id="<?= $periodo['id'] ?>" class="pl4-"> <?php echo $periodo['periodo']." ".$periodo['facultad']." - ".$periodo['nivel']; ?></li>
<?php } ?>
</ul>
<input type="hidden" id="periodo" name="periodo" value="">
</div>
</div>
</div>
<div class="form-group row" id="rangoDiv">
<label for="rango" class="col-3 col-form-label">Rango</label>
<div class="col-8">
<input type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-on="SI" data-off="NO" data-size="s" id="rango" name="rango">
</div>
</div>
<div class="form-group row" id="diasFestivos">
<label for="diaFestivo" class="col-3 col-form-label">Día festivo *</label>
<div class="col-4" id="dia">
<input id="diaFestivo" name="diaFestivo" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
</div>
<div class="col-1 diaFestivoRango">
-
</div>
<div class="col-4 diaFestivoRango" id="diaFestivoRango">
<input id="diaFestivoFin" name="diaFestivoFin" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="">
</div>
<div class="invalid-feedback">Debe seleccionar una fecha</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>
<div class="modal fade" id="modal_confirm" 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-body">
<div class="row">
<div class="col">
<p class="font-weight-bold">¿Estás seguro de querer borrar el día festivo?</p>
</div>
</div>
</div>
<div class="modal-footer">
<input type="hidden" id="id_borrar" value="">
<button type="button" class="btn btn-outline-primary btn-borrar"><span class="ing-aceptar ing-fw"></span> Borrar</button>
<button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar ing-fw"></span> Cancelar</button>
</div>
</div>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/datalist.js"></script>
<script src="js/datepicker-es.js"></script>
<script src="js/toggle.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
$(document).ready(function(){
$('.diaFestivoRango').hide();
});
$('#rango').change(function(){
if($(this).is(':checked')){
$('#diaFestivoFin').val('');
$('.diaFestivoRango').show();
$('#diaFestivoFin').datepicker("setDate", today);
}
else{
$('.diaFestivoRango').hide();
}
});
$('#modal_confirm').on('show.bs.modal', function(event){
var button = $(event.relatedTarget);
var id = button.parents("tr").data("id");
$("#id_borrar").val(id);
});
$(".btn-borrar").click(function(){
var id = $("#id_borrar").val();
$.ajax({
url: 'action/action_diasfestivos_borra.php',
type: 'post',
dataType: 'json',
data:{id: id},
success:function(result){
location.reload();
},
error: function(){console.log("Error")}
});
});
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
<?php if(!$fs_dias_festivos && !$fs_dias_festivos_generales){ ?>
triggerMessage("No se encontraron días festivos", "Error");
<?php } ?>
$('#modal').on('show.bs.modal', function (event){
var button = $(event.relatedTarget);
var tipo = button.data('tipo');
var modal = $(this);
if(tipo==1){//agregar
$('#modalLabel').html("Agregar Día Festivo");
$('#submitBtn').data('tipo', 1);
$('#diaFestivo').datepicker("setDate", today);
$('#diaFestivoFin').datepicker("setDate", today);
setDatalistFirst("#periodo");
$('#rangoDiv').show();
$('#dia').removeClass('col-9');
$('#dia').addClass('col-4');
}
else{
$('#modalLabel').html("Editar Día Festivo");
$('#submitBtn').data('tipo', 2);
$('#rangoDiv').hide();
$('#dia').removeClass('col-4');
$('#dia').addClass('col-9');
var id = $(event.relatedTarget).parents('tr').data('id');
var periodo = $(event.relatedTarget).parents('tr').data('periodo');
$.ajax({
url:"action/action_diasfestivos_select.php",
type:"post",
dataType:"json",
data:{id: id, periodo: periodo},
success:function(result){
console.log(result);
$('#id').val(result['diasfestivos_id']);
if(!result['periodo_id']){
setDatalist('#periodo', 0);
}else{
setDatalist('#periodo', result['periodo_id']);
}
var date = new Date(result['diasfestivos_dia']);
date.setDate(date.getDate() + 1);
$('#diaFestivo').datepicker("setDate", date);
},
error: function(){console.log("Error")}
});
}
});
function valida_campos(){
var error=false;
if($("#diaFestivo").val()==""){
$("#diaFestivo").addClass("is-invalid");
error=true;
}
var inicio = $("#diaFestivo").val();
var fin = $("#diaFestivoFin").val();
var aux = inicio.split("/");
inicio = aux[2] +"-"+ aux[1] +"-"+ aux[0];
aux = fin.split("/");
fin = aux[2] +"-"+ aux[1] +"-"+ aux[0];
console.log(inicio);
if((fin < inicio || fin == inicio) && $("#rango").is(':checked')){
$('#diaFestivoFin').addClass("is-invalid");
error=true;
}
if(error){
return false;
}else{
var btn = $("#submitBtn");
if(btn.data("tipo") == 2){//update
$("#formaModal").prop("action", "./action/action_diasfestivos_update.php");
}
else{//insert
$("#formaModal").prop("action", "./action/action_diasfestivos_insert.php");
}
}
}
<?php if(isset($_GET['error'])){
if($_GET['error'] == 1){ ?>
triggerMessage("Este dia festivo ya existe", "Error");
<?php }
} ?>
</script>
</body>
</html>

View File

@@ -1,111 +1,111 @@
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
if (!$user->admin)
header('Location: main.php?error=1');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Editar Horarios | <?php echo $_SESSION['facultad'] ?? "Administrador"; ?></title>
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?php echo rand(); ?>" type="text/css">
</head>
<body>
<?php
include "import/html_header.php";
html_header("Editar Horarios", "Gestión de Checador");
?>
<!-- Create a schedule design -->
<main class="content marco">
<div class="container-fluid">
<div class="row">
<div class="col-sm-12">
<!-- Nivel select option -->
<div class="form-group">
<label for="nivel">Nivel</label>
<select class="form-control" id="nivel">
<option value="0">Selecciona un nivel</option>
<option value="1">Nivel 1</option>
<option value="2">Nivel 2</option>
<option value="3">Nivel 3</option>
<option value="4">Nivel 4</option>
<option value="5">Nivel 5</option>
<option value="6">Nivel 6</option>
<option value="7">Nivel 7</option>
<option value="8">Nivel 8</option>
<option value="9">Nivel 9</option>
<option value="10">Nivel 10</option>
</select>
</div>
</div>
</div>
<!-- Table Schedule -->
<div class="row">
<div class="col-sm-12">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th scope="col">Hora</th>
<th scope="col">Lunes</th>
<th scope="col">Martes</th>
<th scope="col">Miércoles</th>
<th scope="col">Jueves</th>
<th scope="col">Viernes</th>
<th scope="col">Sábado</th>
<th scope="col">Domingo</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">7:00 - 8:00</th>
<!-- Matemáticas Martes id horario: 3 edit -->
<td>
</td>
</tbody>
</table>
</div>
</div>
</div>
</main>
<?php
include "import/html_footer.php";
?>
</body>
</html>
<?php
function get_horarios($facultad_id): array
{
$dias = array("lun", "mar", "mié", "jue", "vie", "sáb",);
foreach ($dias as $dia) {
$horarios = query(
"SELECT * FROM HORARIO_VIEW
WHERE FACULTAD_ID = :facultad_id AND DIA = :dia
ORDER BY HORA",
array(":facultad_id" => $facultad_id, ":dia" => $dia)
);
foreach ($horarios as $h)
$horario[$dia][] = $h;
}
return $horario;
}
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
if (!$user->admin)
header('Location: main.php?error=1');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Editar Horarios | <?php echo $_SESSION['facultad'] ?? "Administrador"; ?></title>
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?php echo rand(); ?>" type="text/css">
</head>
<body>
<?php
include "import/html_header.php";
html_header("Editar Horarios", "Gestión de Checador");
?>
<!-- Create a schedule design -->
<main class="content marco">
<div class="container-fluid">
<div class="row">
<div class="col-sm-12">
<!-- Nivel select option -->
<div class="form-group">
<label for="nivel">Nivel</label>
<select class="form-control" id="nivel">
<option value="0">Selecciona un nivel</option>
<option value="1">Nivel 1</option>
<option value="2">Nivel 2</option>
<option value="3">Nivel 3</option>
<option value="4">Nivel 4</option>
<option value="5">Nivel 5</option>
<option value="6">Nivel 6</option>
<option value="7">Nivel 7</option>
<option value="8">Nivel 8</option>
<option value="9">Nivel 9</option>
<option value="10">Nivel 10</option>
</select>
</div>
</div>
</div>
<!-- Table Schedule -->
<div class="row">
<div class="col-sm-12">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th scope="col">Hora</th>
<th scope="col">Lunes</th>
<th scope="col">Martes</th>
<th scope="col">Miércoles</th>
<th scope="col">Jueves</th>
<th scope="col">Viernes</th>
<th scope="col">Sábado</th>
<th scope="col">Domingo</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">7:00 - 8:00</th>
<!-- Matemáticas Martes id horario: 3 edit -->
<td>
</td>
</tbody>
</table>
</div>
</div>
</div>
</main>
<?php
include "import/html_footer.php";
?>
</body>
</html>
<?php
function get_horarios($facultad_id): array
{
$dias = array("lun", "mar", "mié", "jue", "vie", "sáb",);
foreach ($dias as $dia) {
$horarios = query(
"SELECT * FROM HORARIO_VIEW
WHERE FACULTAD_ID = :facultad_id AND DIA = :dia
ORDER BY HORA",
array(":facultad_id" => $facultad_id, ":dia" => $dia)
);
foreach ($horarios as $h)
$horario[$dia][] = $h;
}
return $horario;
}
?>

View File

@@ -1,209 +1,209 @@
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$user->access('excel_horario');
if (!$user->admin && in_array($user->acceso, ['r', 'n'])) {
// die($access);
header('Location: main.php?error=1');
} else {
$user->print_to_log('Consultar asistencia');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cargar horario desde Excel | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
</head>
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Cargar horario desde Excel", "Gestión de Checador");
?>
<main class="container content content-margin" id="local-app">
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form>
<div class="form-group">
<div class="form-box">
<?php
$carreras = query("SELECT * FROM FS_CARRERA WHERE FACULTAD = COALESCE(:fac, FACULTAD) AND PERIODO = COALESCE(:per, PERIODO) ORDER BY CARRERA", [":fac" => $user->facultad['facultad_id'], ":per" => $user->periodo], single: false);
#die(print_r($carreras, true));
?>
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6 ">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar carrera</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row">
<label for="excel" class="col-4 col-form-label">Archivo de horarios</label>
<div class="col-8 col-sm-6">
<input class="form-control-file" id="excel" name="archivo" accept=".xlsx, .xls" require>
</div>
</div>
<div class="form-group mt-5 row justify-content-center">
<button id="btn-cargar" type="button" class="btn btn-primary" onclick="submit_files()">
<span class="ing-guardar"></span>
Cargar horario
</button>
</div>
</div>
</div>
</form>
</main>
</body>
<?php
require_once("import/html_footer.php");
require_once("js/messages.php")
?>
<script src="js/scrollables.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/custominputfile.min-es.js"></script>
<link rel="stylesheet" href="css/custominputfile.min.css">
<script src="js/fetchlib.js"></script>
<script lang="jquery">
var datum = []
$(document).ready(function() {
$('#excel').customFile({
allowed: ['xlsx', 'xls'],
maxFiles: 1,
callbacks: {
onSuccess: async function(item) {
var formData = $.customFile.serialize('archivo');
const {
status,
message,
data
} = await fetch('action/action_revisar_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error en el formato del archivo');
item.destroy();
return
}
triggerMessage(message, `Archivo revisado`, 'success');
datum = data;
},
}
});
})
async function submit_files() {
// disable button
const button = document.querySelector('#btn-cargar');
// add class disabled to button
button.classList.add('disabled');
// disable button
button.disabled = true;
// add loading icon
button.innerHTML = '<span class="ing-cargando"></span> Cargando...';
let missing = [];
let carrera = $('#filter_carrera').val();
if (carrera == '') missing.push('Carrera');
if (datum.length == 0) missing.push('Archivo de horarios');
let facultad = <?= $user->facultad['facultad_id'] ?>;
if (missing.length > 0) {
messageMissingInputs(missing);
// remove class disabled to button
button.classList.remove('disabled');
// enable button
button.disabled = false;
// remove loading icon
button.innerHTML = '<span class="ing-guardar"></span> Cargar horario';
return;
}
formData.append('carrera', carrera);
formData.append('facultad', facultad);
formData.append('data', JSON.stringify(datum));
const {
status,
message
} = await fetch('action/action_horario_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error al guardar el archivo');
return
}
triggerMessage(message, `Horarios guardados`, 'success');
// await 1 second
await new Promise(resolve => setTimeout(resolve, 1000));
// reload page
location.reload();
}
</script>
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
} else
$user = unserialize($_SESSION['user']);
$user->access('excel_horario');
if (!$user->admin && in_array($user->acceso, ['r', 'n'])) {
// die($access);
header('Location: main.php?error=1');
} else {
$user->print_to_log('Consultar asistencia');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cargar horario desde Excel | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
</head>
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Cargar horario desde Excel", "Gestión de Checador");
?>
<main class="container content content-margin" id="local-app">
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form>
<div class="form-group">
<div class="form-box">
<?php
$carreras = query("SELECT * FROM FS_CARRERA WHERE FACULTAD = COALESCE(:fac, FACULTAD) AND PERIODO = COALESCE(:per, PERIODO) ORDER BY CARRERA", [":fac" => $user->facultad['facultad_id'], ":per" => $user->periodo], single: false);
#die(print_r($carreras, true));
?>
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6 ">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar carrera</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row">
<label for="excel" class="col-4 col-form-label">Archivo de horarios</label>
<div class="col-8 col-sm-6">
<input class="form-control-file" id="excel" name="archivo" accept=".xlsx, .xls" require>
</div>
</div>
<div class="form-group mt-5 row justify-content-center">
<button id="btn-cargar" type="button" class="btn btn-primary" onclick="submit_files()">
<span class="ing-guardar"></span>
Cargar horario
</button>
</div>
</div>
</div>
</form>
</main>
</body>
<?php
require_once("import/html_footer.php");
require_once("js/messages.php")
?>
<script src="js/scrollables.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/custominputfile.min-es.js"></script>
<link rel="stylesheet" href="css/custominputfile.min.css">
<script src="js/fetchlib.js"></script>
<script lang="jquery">
var datum = []
$(document).ready(function() {
$('#excel').customFile({
allowed: ['xlsx', 'xls'],
maxFiles: 1,
callbacks: {
onSuccess: async function(item) {
var formData = $.customFile.serialize('archivo');
const {
status,
message,
data
} = await fetch('action/action_revisar_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error en el formato del archivo');
item.destroy();
return
}
triggerMessage(message, `Archivo revisado`, 'success');
datum = data;
},
}
});
})
async function submit_files() {
// disable button
const button = document.querySelector('#btn-cargar');
// add class disabled to button
button.classList.add('disabled');
// disable button
button.disabled = true;
// add loading icon
button.innerHTML = '<span class="ing-cargando"></span> Cargando...';
let missing = [];
let carrera = $('#filter_carrera').val();
if (carrera == '') missing.push('Carrera');
if (datum.length == 0) missing.push('Archivo de horarios');
let facultad = <?= $user->facultad['facultad_id'] ?>;
if (missing.length > 0) {
messageMissingInputs(missing);
// remove class disabled to button
button.classList.remove('disabled');
// enable button
button.disabled = false;
// remove loading icon
button.innerHTML = '<span class="ing-guardar"></span> Cargar horario';
return;
}
formData.append('carrera', carrera);
formData.append('facultad', facultad);
formData.append('data', JSON.stringify(datum));
const {
status,
message
} = await fetch('action/action_horario_excel.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.catch(error => {
return {
status: 'error',
message: 'Error al cargar el archivo',
}
});
if (status == 'error') {
triggerMessage(message, 'Error al guardar el archivo');
return
}
triggerMessage(message, `Horarios guardados`, 'success');
// await 1 second
await new Promise(resolve => setTimeout(resolve, 1000));
// reload page
location.reload();
}
</script>
</html>

View File

@@ -1,283 +1,283 @@
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Facultades');
}
if($user->admin!=true){
header('Location: carreras.php?facultad='.$user->facultad['facultad_id']);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Facultades</title>
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"FACULTADES",
"Gestión de Checador "
);
$user->access();
if(isset($_POST["estado"])){
echo "estado=".$_POST["estado"];
}
if(isset($_POST["desc"])){
$desc=$_POST["desc"];
$filter_desc = trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING, array('flags' => FILTER_FLAG_STRIP_LOW)));
}else{
$desc=null;
}
if($user->admin==true){
$fs_facultades = query(
"SELECT * FROM fs_facultades(:nombre)",
array(":nombre" => $desc),
single:false
);
}else{
$fs_facultades = query(
"SELECT * FROM fs_facultades(:nombre) where facultad_id = :facultad",
array(":nombre" => $desc, ":facultad" => $user->facultad["facultad_id"]),
single:false
);
}
?>
<main class="content marco">
<?php if($user->admin==true) {?>
<div class="row">
<div class="col-12 text-right">
<button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span>Crear facultad</button>
</div>
</div>
<?php }?>
<!-- Filtro -->
<div class="row">
<div class="col-12">
<form action="facultades.php" method="post">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Facultad</label>
<div class="col-8 col-sm-4">
<input id="filter_desc" name="desc" type="text" class="form-control"<?php if(isset($filter_desc)){ echo'value="'.$filter_desc.'"';}?>>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary">
<span class="ing-buscar ing-fw"></span>
Filtrar
</button>
<button type="submit" class="btn btn-outline-danger btn-reset">
<span class="ing-borrar ing-fw"></span>
Limpiar
</button>
</div>
</div>
</form>
</div>
</div>
<!-- Tabla -->
<div class="row">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Estado</th>
<th>Facultad</th>
<?php if($user->acceso == 'w') {?>
<th>Acciones</th>
<?php }?>
</tr>
</thead>
<tbody>
<?php
foreach($fs_facultades as $facultad){
?>
<tr data-id="<?php echo $facultad["facultad_id"];?>" id="<?php echo $facultad["facultad_id"];?>">
<?php
$color = "danger";
$title = "Inactiva";
if($facultad["facultad_activa"]==1){
$color ="success";
$title="Activa";
}
?>
<td class="text-<?php echo $color;?> text-center" title="<?php echo $title;?>">
<span class="ing-bullet"></span>
</td>
<td class="text-primary"><?php echo $facultad["facultad_nombre"];?></td>
<?php if($user->acceso == 'w') {?>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="carreras.php?facultad=<?php echo $facultad["facultad_id"];?>" title="Agregar carreras o periodos"><span class="ing-mas inf-fw"></span></a>
</td>
<?php }?>
</tr>
<?php }?>
</tbody>
</table>
<div id="message"></div>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal" tabindex="-1" role="dialog" arialabelledby="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="modalLabel">
Editar nombre de Facultad
</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="" method="post" id="formaModal" onsubmit="return valida_campos()">
<input type="hidden" name="id" id="id">
<div class="form-box">
<div class="form-group row">
<label for="nombre" class="col-4 col-form-label">Nombre *</label>
<div class="col-8">
<input id="nombre" name="nombre" type="text" class="form-control" maxlength="100">
</div>
</div>
<div class="form-group row">
<label for="estado" class="col-4 col-form-label">Estado *</label>
<div class="col-4">
<div class="form-check form-check-inline">
<input class="form-check-input radio-lg" type="radio" id="estado_activo" name="estado" value="1" checked="checked">
<label for="estado_activo" class="col-form-label">Activo</label>
</div>
</div>
<div class="col-4">
<div class="form-check form-check-inline">
<input class="form-check-input radio-lg" type="radio" id="estado_inactivo" name="estado" value="0">
<label for="estado_inactivo" class="col-form-label">Inactivo</label>
</div>
</div>
</div>
<div class ="form-group row mt-3">
<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>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
<?php if(!$fs_facultades){?>
triggerMessage("No se encontraron facultades con estos datos", "Error");
<?php }?>
function valida_campos(){
var error=false;
if($("#nombre").val()==""){
$("#nombre").addClass("is-invalid");
error=true;
}else{
$("#nombre").removeClass("is-invalid");
}
if($('#estado_activo').prop('checked') == false && $('#estado_inactivo').prop('checked') == false){
error=true;
}
if(error){
return false;
}else{
var btn = $('#submitBtn');
if(btn.data("tipo")==2)//update
$('#formaModal').prop("action", "./action/action_facultades_update.php");
else//insert
$('#formaModal').prop("action", "./action/action_facultades_insert.php");
}
}
$(document).on("click", ".btn-reset", function(event){
var forma = $(this).parents("form");
forma.find("input[type=text]").val("");
setDatalistFirst("#filter_desc");
forma.submit();
});
$('#modal').on('show.bs.modal', function(event){
var button = $(event.relatedTarget);
var tipo = button.data('tipo');
var modal = $(this);
if(tipo == 1){//crear
$("#submitBtn").data('tipo', 1);
$("#modalLabel").html("Crear Facultad");
$("#nombre").val("");
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
}else{//editar
$("#submitBtn").data('tipo', 2);
$("#modalLabel").html("Editar Facultad");
$("#nombre").val("");
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
var id = $(event.relatedTarget).parents("tr").data("id");
$.ajax({
url:"action/action_facultades_select.php",
type:"post",
dataType:"json",
data:{id_facultad: id},
success:function(result){
$("#id").val(result[0]["facultad_id"]);
$("#nombre").val(result[0]["facultad_nombre"]);
if(result[0]["facultad_activa"]==1){
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
}else{
$('#estado_inactivo').prop('checked', true);
$('#estado_activo').prop('checked', false);
}
},
error: function(){console.log("Error")}
});
}
});
</script>
</body>
<?php
require_once 'class/c_login.php';
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])){
header('Location: index.php');
exit;
}
else
$user = unserialize($_SESSION['user']);
$user->access();
if(!$user->admin && $user->acceso == 'n'){
header('Location: main.php?error=1');
}else{
$user->print_to_log('Facultades');
}
if($user->admin!=true){
header('Location: carreras.php?facultad='.$user->facultad['facultad_id']);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Facultades</title>
<?php
include 'import/html_css_files.php';
?>
</head>
<body>
<?php
include "import/html_header.php";
html_header(
"FACULTADES",
"Gestión de Checador "
);
$user->access();
if(isset($_POST["estado"])){
echo "estado=".$_POST["estado"];
}
if(isset($_POST["desc"])){
$desc=$_POST["desc"];
$filter_desc = trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING, array('flags' => FILTER_FLAG_STRIP_LOW)));
}else{
$desc=null;
}
if($user->admin==true){
$fs_facultades = query(
"SELECT * FROM fs_facultades(:nombre)",
array(":nombre" => $desc),
single:false
);
}else{
$fs_facultades = query(
"SELECT * FROM fs_facultades(:nombre) where facultad_id = :facultad",
array(":nombre" => $desc, ":facultad" => $user->facultad["facultad_id"]),
single:false
);
}
?>
<main class="content marco">
<?php if($user->admin==true) {?>
<div class="row">
<div class="col-12 text-right">
<button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span>Crear facultad</button>
</div>
</div>
<?php }?>
<!-- Filtro -->
<div class="row">
<div class="col-12">
<form action="facultades.php" method="post">
<div class="form-box">
<div class="form-group row">
<label for="filter_desc" class="col-4 col-form-label">Facultad</label>
<div class="col-8 col-sm-4">
<input id="filter_desc" name="desc" type="text" class="form-control"<?php if(isset($filter_desc)){ echo'value="'.$filter_desc.'"';}?>>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-12 text-center">
<button type="submit" class="btn btn-outline-primary">
<span class="ing-buscar ing-fw"></span>
Filtrar
</button>
<button type="submit" class="btn btn-outline-danger btn-reset">
<span class="ing-borrar ing-fw"></span>
Limpiar
</button>
</div>
</div>
</form>
</div>
</div>
<!-- Tabla -->
<div class="row">
<div class="col-12 table-responsive">
<table class="table table-sm table-striped table-white">
<thead class="thead-dark">
<tr>
<th>Estado</th>
<th>Facultad</th>
<?php if($user->acceso == 'w') {?>
<th>Acciones</th>
<?php }?>
</tr>
</thead>
<tbody>
<?php
foreach($fs_facultades as $facultad){
?>
<tr data-id="<?php echo $facultad["facultad_id"];?>" id="<?php echo $facultad["facultad_id"];?>">
<?php
$color = "danger";
$title = "Inactiva";
if($facultad["facultad_activa"]==1){
$color ="success";
$title="Activa";
}
?>
<td class="text-<?php echo $color;?> text-center" title="<?php echo $title;?>">
<span class="ing-bullet"></span>
</td>
<td class="text-primary"><?php echo $facultad["facultad_nombre"];?></td>
<?php if($user->acceso == 'w') {?>
<td class="text-center icono-acciones">
<a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
<a href="carreras.php?facultad=<?php echo $facultad["facultad_id"];?>" title="Agregar carreras o periodos"><span class="ing-mas inf-fw"></span></a>
</td>
<?php }?>
</tr>
<?php }?>
</tbody>
</table>
<div id="message"></div>
</div>
</div>
</main>
<!-- Footer -->
<?php
include "import/html_footer.php";
?>
<!-- Modal -->
<div class="modal fade" id="modal" tabindex="-1" role="dialog" arialabelledby="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="modalLabel">
Editar nombre de Facultad
</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="" method="post" id="formaModal" onsubmit="return valida_campos()">
<input type="hidden" name="id" id="id">
<div class="form-box">
<div class="form-group row">
<label for="nombre" class="col-4 col-form-label">Nombre *</label>
<div class="col-8">
<input id="nombre" name="nombre" type="text" class="form-control" maxlength="100">
</div>
</div>
<div class="form-group row">
<label for="estado" class="col-4 col-form-label">Estado *</label>
<div class="col-4">
<div class="form-check form-check-inline">
<input class="form-check-input radio-lg" type="radio" id="estado_activo" name="estado" value="1" checked="checked">
<label for="estado_activo" class="col-form-label">Activo</label>
</div>
</div>
<div class="col-4">
<div class="form-check form-check-inline">
<input class="form-check-input radio-lg" type="radio" id="estado_inactivo" name="estado" value="0">
<label for="estado_inactivo" class="col-form-label">Inactivo</label>
</div>
</div>
</div>
<div class ="form-group row mt-3">
<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>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<?php
require_once 'js/messages.php';
?>
<script>
<?php if(!$fs_facultades){?>
triggerMessage("No se encontraron facultades con estos datos", "Error");
<?php }?>
function valida_campos(){
var error=false;
if($("#nombre").val()==""){
$("#nombre").addClass("is-invalid");
error=true;
}else{
$("#nombre").removeClass("is-invalid");
}
if($('#estado_activo').prop('checked') == false && $('#estado_inactivo').prop('checked') == false){
error=true;
}
if(error){
return false;
}else{
var btn = $('#submitBtn');
if(btn.data("tipo")==2)//update
$('#formaModal').prop("action", "./action/action_facultades_update.php");
else//insert
$('#formaModal').prop("action", "./action/action_facultades_insert.php");
}
}
$(document).on("click", ".btn-reset", function(event){
var forma = $(this).parents("form");
forma.find("input[type=text]").val("");
setDatalistFirst("#filter_desc");
forma.submit();
});
$('#modal').on('show.bs.modal', function(event){
var button = $(event.relatedTarget);
var tipo = button.data('tipo');
var modal = $(this);
if(tipo == 1){//crear
$("#submitBtn").data('tipo', 1);
$("#modalLabel").html("Crear Facultad");
$("#nombre").val("");
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
}else{//editar
$("#submitBtn").data('tipo', 2);
$("#modalLabel").html("Editar Facultad");
$("#nombre").val("");
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
var id = $(event.relatedTarget).parents("tr").data("id");
$.ajax({
url:"action/action_facultades_select.php",
type:"post",
dataType:"json",
data:{id_facultad: id},
success:function(result){
$("#id").val(result[0]["facultad_id"]);
$("#nombre").val(result[0]["facultad_nombre"]);
if(result[0]["facultad_activa"]==1){
$('#estado_inactivo').prop('checked', false);
$('#estado_activo').prop('checked', true);
}else{
$('#estado_inactivo').prop('checked', true);
$('#estado_activo').prop('checked', false);
}
},
error: function(){console.log("Error")}
});
}
});
</script>
</body>
</html>

View File

@@ -1,135 +1,135 @@
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
$user->access();
if (!$user->admin && in_array($user->acceso, ['n']))
die(header('Location: main.php?error=1'));
$user->print_to_log('Consultar horario');
$write = $user->admin || in_array($user->acceso, ['w']);
// var_dump($user);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Consultar horario | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/plain; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
<script src="js/scrollables.js" defer></script>
<script src="js/jquery.min.js" defer></script>
<script src="js/bootstrap/bootstrap.min.js" defer></script>
<script src="js/messages.js" defer></script>
<script>
const write = <?= $write ? 'true' : 'false' ?>;
</script>
<script src="js/moment.js" defer></script>
<script src="js/horario_profesor.js" defer></script>
</head>
<!-- -->
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Consultar horario", "Sistema de gestión de checador");
?>
<?= "<!-- $user -->" ?>
<main class="container content marco content-margin" id="local-app">
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form id="form" class="form-horizontal">
<div class="form-group">
<div class="form-box">
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" />
<div class="form-group row">
<label for="clave_profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6">
<input list="lista_profesores" name="clave_profesor" id="clave_profesor" class="form-control" placeholder="Profesor" required="required">
<div class="valid-feedback">
Profesor encontrado
</div>
<div class="invalid-feedback">
Profesor no encontrado
</div>
<datalist id="lista_profesores">
<?php
$profesores = $db->where('facultad_id', $user->facultad['facultad_id'])->get("fs_profesor");
foreach ($profesores as $profesor) {
extract($profesor);
?>
<option data-grado="<?= $grado ?>" data-clave="<?= $clave ?>" data-profesor="<?= $profesor ?>" data-id="<?= $id; ?>" value="<?= "$clave | $grado $profesor" ?>"></option>
<?php
}
?>
</datalist>
<ul class="list-group" id="profesores"></ul>
<input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo ?>">
<input type="hidden" id="profesor_id" name="profesor_id" value="">
</div>
</div>
<!-- ICO-BUSCAR FILTRAR & ICO-BORRAR LIMPIAR -->
<div class="form-group row justify-content-center">
<button class="btn btn-outline-primary mr-2">
<span class="ing-buscar icono"></span>
Buscar horario
</button>
<button type="button" class="btn btn-outline-danger" onclick="location.reload()">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</div>
</div>
</form>
<div class="form-group mt-4 row justify-content-center">
<?php if ($write) { ?>
<button type="button" id="nuevo" class="btn btn-outline-primary ml-4 d-none" title="Nuevo horario" data-toggle="modal" data-target="#modal-editar">
<span class="ing-mas ing-fw"></span> Nuevo
</button>
<?php } ?>
</div>
</div>
</div>
</form>
<!-- Horario is a (table with one a cell) within a table
7:15 - 8:45, 8:45 - 10:15, 10:30 - 12:00, 12:00 - 13:30
de lunes a viernes, a excepción de que tenga sábado
-->
<div id="btn-excel-horario" class="mb-2 float-right hidden">
<button class="btn btn-outline-secondary " title="Exportar a Excel">
<span class="ing-descarga ing-fw"></span> Exportar a Excel
</button>
</div>
<!-- Table responsive -->
<div class="table-responsive">
<table class="table table-bordered table-sm table-responsive-md" id="table-horario">
<thead class="thead-dark">
<tr id="headers">
<th scope="col" class="text-center">Hora</th>
<th scope="col" class="text-center">Lunes</th>
<th scope="col" class="text-center">Martes</th>
<th scope="col" class="text-center">Miércoles</th>
<th scope="col" class="text-center">Jueves</th>
<th scope="col" class="text-center">Viernes</th>
<th scope="col" class="text-center">Sábado</th>
</tr>
</thead>
<tbody id="horario"></tbody>
</table>
</div>
</main>
</body>
<?php
require_once 'class/c_login.php';
if (!isset($_SESSION['user']))
die(header('Location: index.php'));
$user = unserialize($_SESSION['user']);
$user->access();
if (!$user->admin && in_array($user->acceso, ['n']))
die(header('Location: main.php?error=1'));
$user->print_to_log('Consultar horario');
$write = $user->admin || in_array($user->acceso, ['w']);
// var_dump($user);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Consultar horario | <?= $user->facultad['facultad'] ?? 'General' ?></title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/plain; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php include_once "import/html_css_files.php"; ?>
<script src="js/scrollables.js" defer></script>
<script src="js/jquery.min.js" defer></script>
<script src="js/bootstrap/bootstrap.min.js" defer></script>
<script src="js/messages.js" defer></script>
<script>
const write = <?= $write ? 'true' : 'false' ?>;
</script>
<script src="js/moment.js" defer></script>
<script src="js/horario_profesor.js" defer></script>
</head>
<!-- -->
<body style="display: block;">
<?php
include('include/constantes.php');
include("import/html_header.php");
html_header("Consultar horario", "Sistema de gestión de checador");
?>
<?= "<!-- $user -->" ?>
<main class="container content marco content-margin" id="local-app">
<section id="message"></section>
<?php require('import/periodo.php') ?>
<form id="form" class="form-horizontal">
<div class="form-group">
<div class="form-box">
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" />
<div class="form-group row">
<label for="clave_profesor" class="col-4 col-form-label">Profesor</label>
<div class="col-6">
<input list="lista_profesores" name="clave_profesor" id="clave_profesor" class="form-control" placeholder="Profesor" required="required">
<div class="valid-feedback">
Profesor encontrado
</div>
<div class="invalid-feedback">
Profesor no encontrado
</div>
<datalist id="lista_profesores">
<?php
$profesores = $db->where('facultad_id', $user->facultad['facultad_id'])->get("fs_profesor");
foreach ($profesores as $profesor) {
extract($profesor);
?>
<option data-grado="<?= $grado ?>" data-clave="<?= $clave ?>" data-profesor="<?= $profesor ?>" data-id="<?= $id; ?>" value="<?= "$clave | $grado $profesor" ?>"></option>
<?php
}
?>
</datalist>
<ul class="list-group" id="profesores"></ul>
<input type="hidden" id="periodo_id" name="periodo_id" value="<?= $user->periodo ?>">
<input type="hidden" id="profesor_id" name="profesor_id" value="">
</div>
</div>
<!-- ICO-BUSCAR FILTRAR & ICO-BORRAR LIMPIAR -->
<div class="form-group row justify-content-center">
<button class="btn btn-outline-primary mr-2">
<span class="ing-buscar icono"></span>
Buscar horario
</button>
<button type="button" class="btn btn-outline-danger" onclick="location.reload()">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</div>
</div>
</form>
<div class="form-group mt-4 row justify-content-center">
<?php if ($write) { ?>
<button type="button" id="nuevo" class="btn btn-outline-primary ml-4 d-none" title="Nuevo horario" data-toggle="modal" data-target="#modal-editar">
<span class="ing-mas ing-fw"></span> Nuevo
</button>
<?php } ?>
</div>
</div>
</div>
</form>
<!-- Horario is a (table with one a cell) within a table
7:15 - 8:45, 8:45 - 10:15, 10:30 - 12:00, 12:00 - 13:30
de lunes a viernes, a excepción de que tenga sábado
-->
<div id="btn-excel-horario" class="mb-2 float-right hidden">
<button class="btn btn-outline-secondary " title="Exportar a Excel">
<span class="ing-descarga ing-fw"></span> Exportar a Excel
</button>
</div>
<!-- Table responsive -->
<div class="table-responsive">
<table class="table table-bordered table-sm table-responsive-md" id="table-horario">
<thead class="thead-dark">
<tr id="headers">
<th scope="col" class="text-center">Hora</th>
<th scope="col" class="text-center">Lunes</th>
<th scope="col" class="text-center">Martes</th>
<th scope="col" class="text-center">Miércoles</th>
<th scope="col" class="text-center">Jueves</th>
<th scope="col" class="text-center">Viernes</th>
<th scope="col" class="text-center">Sábado</th>
</tr>
</thead>
<tbody id="horario"></tbody>
</table>
</div>
</main>
</body>
</html>

View File

@@ -1,6 +1,6 @@
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?php echo rand(); ?>" type="text/css">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" type="image/png" href="imagenes/favicon.png" />
<link rel="stylesheet" href="css/bootstrap-ulsa.min.css" type="text/css">
<link rel="stylesheet" href="css/indivisa.css" type="text/css">
<link rel="stylesheet" href="css/sgi.css?rand=<?php echo rand(); ?>" type="text/css">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/jquery-ui.css">

View File

@@ -1,105 +1,105 @@
<div class="container-fluid">
<footer class="footer" >
<div class="footerTop">
<div class="container">
<div class="logotipo">
<img src="imagenes/lasalle-logo-blanco.png" alt="Universidad La Salle" width="15%">
<h3> <span>Profesionales</span>con <strong>Valor</strong></h3>
</div>
<div class="ubicacion">
<div class="address">
<div class="tabs">
<ul class="nav list-inline" id="tabsFooter" role="tablist">
<li class="list-inline-item">
<a class="nav-link active" id="unidad1-tab" data-toggle="tab" href="#unidad1" role="tab" aria-controls="calendario" aria-selected="true">Unidad Condesa</a>
</li>
<li class="list-inline-item">
<a class="nav-link " id="unidad2-tab" data-toggle="tab" href="#unidad2" role="tab" aria-controls="lista" aria-selected="false">Unidad Santa Teresa</a>
</li>
<li class="list-inline-item">
<a class="nav-link " id="unidad3-tab" data-toggle="tab" href="#unidad3" role="tab" aria-controls="lista" aria-selected="false">Unidad San Fernando</a>
</li>
<li class="list-inline-item">
<a class="nav-link" id="unidad4-tab" data-toggle="tab" href="#unidad4" role="tab" aria-controls="lista" aria-selected="false">Unidad Santa Lucía</a>
</li>
</ul>
<div class="tab-content" id="tabsCont">
<div class="tab-pane fade show active" id="unidad1" role="tabpanel" aria-labelledby="unidad1-tab">
<p>Benjamín Franklin No 45, Col. Condesa, Alc. Cuauhtémoc, CDMX, CP 06140 <span class="tel">Tel. <a href="tel:+525552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle/@19.4085702,-99.1810039,15z/data=!4m5!3m4!1s0x0:0x3108b5797f9c9ecd!8m2!3d19.4085702!4d-99.1810039" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad2" role="tabpanel" aria-labelledby="unidad2-tab">
<p>Camino a Santa Teresa 811, Col. Rinconada del Pedregal, Alc. Tlalpan, CDMX, CP 14010 <span class="tel">Tel. <a href="tel:5552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle+Unidad+Santa+Teresa/@19.299013,-99.196093,15z/data=!4m5!3m4!1s0x0:0xdfc2b61c9b67aac2!8m2!3d19.299013!4d-99.196093" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad3" role="tabpanel" aria-labelledby="unidad3-tab">
<p>Av. De Las Fuentes 17, Col. Tlalpan, Alc. Tlalpan, CDMX, CP 14000 <span class="tel">Tel. <a href="tel:+525552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle+Facultad+de+Medicina/@19.2930318,-99.1720808,15z/data=!4m5!3m4!1s0x0:0x29b7725e5a004277!8m2!3d19.2930318!4d-99.1720808" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad4" role="tabpanel" aria-labelledby="unidad4-tab">
<p>Av. Tamaulipas 3, Col. Zona Federal, Alc. Álvaro Obregón, CDMX, CP 01357 <span class="tel">Tel. <a href="tel:5556021130">55 5602-1130</a> </span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Unidad+Deportiva+La+Salle/@19.3662852,-99.2421597,15z/data=!4m5!3m4!1s0x0:0x88e0334f044bc518!8m2!3d19.3662852!4d-99.2421597" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
</div>
</div>
</div>
<div class="redes">
<h4>Compartir :</h4>
<ul>
<li><a href="https://www.facebook.com/LaSalleMXIngenieria" target="_blank"><i class="fab fa-facebook-f fa-fw"></i></a></li>
<!--<li><a href="https://twitter.com/lasalle_mx" target="_blank"><i class="fab fa-twitter fa-fw"></i></a></li>-->
<li><a href="https://www.youtube.com/user/IngenieriaLaSalle/" target="_blank"><i class="fab fa-youtube fa-fw"></i></a></li>
<!--<li><a href="https://www.instagram.com/lasalle_mx/" target="_blank"><i class="fab fa-instagram fa-fw"></i></a></li>-->
<!--<li><a href="https://www.linkedin.com/school/universidad-la-salle?pathWildcard=24227" target="_blank"><i class="fab fa-linkedin-in fa-fw"></i></a></li>-->
</ul>
</div>
</div>
</div>
</div>
<div class="footerMiddle">
<div class="container">
<div class="row justify-content-md-center">
<nav class="col-12 col-md-10">
<a class="footerMore menuMore" href="#">Sistema y Red La Salle</a>
<ul>
<li><a href="http://bajio.delasalle.edu.mx/" target="_blank">Bajío</a></li>
<li><a href="http://www.lasalle.mx/" target="_blank">Ciudad de México</a></li>
<li><a href="http://lasallecancun.edu.mx/" target="_blank">Cancún</a></li>
<li><a href="http://www.ulsapuebla.mx/" target="_blank">Puebla</a></li>
<li><a href="http://www.ulsapuebla.mx/" target="_blank">Chihuahua</a></li>
<li><a href="http://www.lasallecuernavaca.edu.mx/wp/" target="_blank">Cuernavaca</a></li>
<li><a href="http://www.ulsalaguna.edu.mx/" target="_blank">Laguna</a></li>
<li><a href="http://www.lasallemorelia.edu.mx/" target="_blank">Morelia</a></li>
<li><a href="http://www.ulsaneza.edu.mx/" target="_blank">Nezahualcóyotl</a></li>
<li><a href="http://www.ulsa-noroeste.edu.mx/n2015/" target="_blank">Noroeste</a></li>
<li><a href="http://www.ulsaoaxaca.edu.mx/" target="_blank">Oaxaca</a></li>
<li><a href="http://www.lasallep.edu.mx/" target="_blank">Pachuca</a></li>
<li><a href="https://www.ulsasaltillo.edu.mx/" target="_blank">Saltillo</a></li>
<li><a href="https://www.lasallevictoria.edu.mx/" target="_blank">Victoria</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div class="footerBottom">
<div class="container">
<div class="logotipos">
<ul>
<li><a href="http://redlasalle.mx/" target="_blank"><img src="imagenes/la-salle-logo-red-universidades.png" alt="La Salle - logotipo" class="img-responsive" width="80"></a></li>
<li><a href="http://ialu.org/english/" target="_blank"><img src="imagenes/la-salle-logo-international-ia.png" alt="La Salle - logotipo" class="img-responsive" width="80"></a></li>
</ul>
</div>
<div class="legales">
<a class="footerMore menuMore" href="#">Legales</a>
<ul>
<li><a href="https://lasalle.mx/globales/contacto.html" target="_blank">Contacto</a></li>
<li><a href="https://lasalle.mx/globales/terminos-y-condiciones.html" target="_blank">Términos y condiciones</a></li>
<li><a href="https://lasalle.mx/globales/aviso-de-privacidad.html" target="_blank">Aviso de Privacidad</a></li>
<!--<li><a href="https://lasalle.mx/globales/mapa-de-sitio.html" target="_blank">Mapa de sitio</a></li>
<li><a href="https://lasalle.mx/globales/preguntas-frecuentes/" target="_blank">Preguntas frecuentes</a></li>-->
</ul>
</div>
</div>
</div>
</footer>
<div class="container-fluid">
<footer class="footer" >
<div class="footerTop">
<div class="container">
<div class="logotipo">
<img src="imagenes/lasalle-logo-blanco.png" alt="Universidad La Salle" width="15%">
<h3> <span>Profesionales</span>con <strong>Valor</strong></h3>
</div>
<div class="ubicacion">
<div class="address">
<div class="tabs">
<ul class="nav list-inline" id="tabsFooter" role="tablist">
<li class="list-inline-item">
<a class="nav-link active" id="unidad1-tab" data-toggle="tab" href="#unidad1" role="tab" aria-controls="calendario" aria-selected="true">Unidad Condesa</a>
</li>
<li class="list-inline-item">
<a class="nav-link " id="unidad2-tab" data-toggle="tab" href="#unidad2" role="tab" aria-controls="lista" aria-selected="false">Unidad Santa Teresa</a>
</li>
<li class="list-inline-item">
<a class="nav-link " id="unidad3-tab" data-toggle="tab" href="#unidad3" role="tab" aria-controls="lista" aria-selected="false">Unidad San Fernando</a>
</li>
<li class="list-inline-item">
<a class="nav-link" id="unidad4-tab" data-toggle="tab" href="#unidad4" role="tab" aria-controls="lista" aria-selected="false">Unidad Santa Lucía</a>
</li>
</ul>
<div class="tab-content" id="tabsCont">
<div class="tab-pane fade show active" id="unidad1" role="tabpanel" aria-labelledby="unidad1-tab">
<p>Benjamín Franklin No 45, Col. Condesa, Alc. Cuauhtémoc, CDMX, CP 06140 <span class="tel">Tel. <a href="tel:+525552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle/@19.4085702,-99.1810039,15z/data=!4m5!3m4!1s0x0:0x3108b5797f9c9ecd!8m2!3d19.4085702!4d-99.1810039" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad2" role="tabpanel" aria-labelledby="unidad2-tab">
<p>Camino a Santa Teresa 811, Col. Rinconada del Pedregal, Alc. Tlalpan, CDMX, CP 14010 <span class="tel">Tel. <a href="tel:5552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle+Unidad+Santa+Teresa/@19.299013,-99.196093,15z/data=!4m5!3m4!1s0x0:0xdfc2b61c9b67aac2!8m2!3d19.299013!4d-99.196093" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad3" role="tabpanel" aria-labelledby="unidad3-tab">
<p>Av. De Las Fuentes 17, Col. Tlalpan, Alc. Tlalpan, CDMX, CP 14000 <span class="tel">Tel. <a href="tel:+525552789500">55 5278-9500</a> / <a href="tel:+8005272553">800 LASALLE</a></span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Universidad+La+Salle+Facultad+de+Medicina/@19.2930318,-99.1720808,15z/data=!4m5!3m4!1s0x0:0x29b7725e5a004277!8m2!3d19.2930318!4d-99.1720808" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
<div class="tab-pane fade" id="unidad4" role="tabpanel" aria-labelledby="unidad4-tab">
<p>Av. Tamaulipas 3, Col. Zona Federal, Alc. Álvaro Obregón, CDMX, CP 01357 <span class="tel">Tel. <a href="tel:5556021130">55 5602-1130</a> </span><br>
<a class="btnMap " href="https://www.google.com/maps/place/Unidad+Deportiva+La+Salle/@19.3662852,-99.2421597,15z/data=!4m5!3m4!1s0x0:0x88e0334f044bc518!8m2!3d19.3662852!4d-99.2421597" target="_blank"> <span class="fas fa-map-marker-alt mr-1"></span>¿Cómo llegar?</a></p>
</div>
</div>
</div>
</div>
<div class="redes">
<h4>Compartir :</h4>
<ul>
<li><a href="https://www.facebook.com/LaSalleMXIngenieria" target="_blank"><i class="fab fa-facebook-f fa-fw"></i></a></li>
<!--<li><a href="https://twitter.com/lasalle_mx" target="_blank"><i class="fab fa-twitter fa-fw"></i></a></li>-->
<li><a href="https://www.youtube.com/user/IngenieriaLaSalle/" target="_blank"><i class="fab fa-youtube fa-fw"></i></a></li>
<!--<li><a href="https://www.instagram.com/lasalle_mx/" target="_blank"><i class="fab fa-instagram fa-fw"></i></a></li>-->
<!--<li><a href="https://www.linkedin.com/school/universidad-la-salle?pathWildcard=24227" target="_blank"><i class="fab fa-linkedin-in fa-fw"></i></a></li>-->
</ul>
</div>
</div>
</div>
</div>
<div class="footerMiddle">
<div class="container">
<div class="row justify-content-md-center">
<nav class="col-12 col-md-10">
<a class="footerMore menuMore" href="#">Sistema y Red La Salle</a>
<ul>
<li><a href="http://bajio.delasalle.edu.mx/" target="_blank">Bajío</a></li>
<li><a href="http://www.lasalle.mx/" target="_blank">Ciudad de México</a></li>
<li><a href="http://lasallecancun.edu.mx/" target="_blank">Cancún</a></li>
<li><a href="http://www.ulsapuebla.mx/" target="_blank">Puebla</a></li>
<li><a href="http://www.ulsapuebla.mx/" target="_blank">Chihuahua</a></li>
<li><a href="http://www.lasallecuernavaca.edu.mx/wp/" target="_blank">Cuernavaca</a></li>
<li><a href="http://www.ulsalaguna.edu.mx/" target="_blank">Laguna</a></li>
<li><a href="http://www.lasallemorelia.edu.mx/" target="_blank">Morelia</a></li>
<li><a href="http://www.ulsaneza.edu.mx/" target="_blank">Nezahualcóyotl</a></li>
<li><a href="http://www.ulsa-noroeste.edu.mx/n2015/" target="_blank">Noroeste</a></li>
<li><a href="http://www.ulsaoaxaca.edu.mx/" target="_blank">Oaxaca</a></li>
<li><a href="http://www.lasallep.edu.mx/" target="_blank">Pachuca</a></li>
<li><a href="https://www.ulsasaltillo.edu.mx/" target="_blank">Saltillo</a></li>
<li><a href="https://www.lasallevictoria.edu.mx/" target="_blank">Victoria</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div class="footerBottom">
<div class="container">
<div class="logotipos">
<ul>
<li><a href="http://redlasalle.mx/" target="_blank"><img src="imagenes/la-salle-logo-red-universidades.png" alt="La Salle - logotipo" class="img-responsive" width="80"></a></li>
<li><a href="http://ialu.org/english/" target="_blank"><img src="imagenes/la-salle-logo-international-ia.png" alt="La Salle - logotipo" class="img-responsive" width="80"></a></li>
</ul>
</div>
<div class="legales">
<a class="footerMore menuMore" href="#">Legales</a>
<ul>
<li><a href="https://lasalle.mx/globales/contacto.html" target="_blank">Contacto</a></li>
<li><a href="https://lasalle.mx/globales/terminos-y-condiciones.html" target="_blank">Términos y condiciones</a></li>
<li><a href="https://lasalle.mx/globales/aviso-de-privacidad.html" target="_blank">Aviso de Privacidad</a></li>
<!--<li><a href="https://lasalle.mx/globales/mapa-de-sitio.html" target="_blank">Mapa de sitio</a></li>
<li><a href="https://lasalle.mx/globales/preguntas-frecuentes/" target="_blank">Preguntas frecuentes</a></li>-->
</ul>
</div>
</div>
</div>
</footer>
</div>

View File

@@ -1,22 +1,22 @@
<?php // Necesita sesión y BD abiertas
require_once "include/constantes.php";
?>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<?php
require_once "import/periodo.php";
?>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/datepicker-es.js"></script>
<?php include_once "js/messages.php"; ?>
<!-- <script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
<?php // Necesita sesión y BD abiertas
require_once "include/constantes.php";
?>
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/calendar.css">
<?php
require_once "import/periodo.php";
?>
<script src="js/jquery.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/datepicker-es.js"></script>
<?php include_once "js/messages.php"; ?>
<!-- <script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
</script> -->

View File

@@ -1,139 +1,139 @@
<?php
include_once "import/html_forms.php";
?>
<form id="asistencia">
<div class="form-box">
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id']; ?>">
<?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo');
$carreras = $db
->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id'])
->orderBy('carrera')
->get('fs_carrera');
?>
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6 ">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar todas las carreras</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="">Seleccionar todas las carreras</li>
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row">
<label for="filterClave" class="col-4 col-form-label">Clave</label>
<div class="col-6 ">
<input type="text" class="form-control" id="filterClave" name="clave" placeholder="Clave del profesor (opcional)" value="<?= $clave ?? '' ?>" pattern="(do)?[0-9]{3,6}" title="La clave debe tener 8 caracteres, los primeros 2 deben ser letras y los últimos 6 números" minlength="3" maxlength="8">
</div>
</div>
<div class="form-group row">
<label for="filterNombre" class="col-4 col-form-label">Nombre</label>
<div class="col-6 ">
<input type="text" class="form-control" id="filterNombre" name="nombre" placeholder="Nombre del profesor (opcional)">
</div>
</div>
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha final</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida o el rango es incorrecto.</div>
</div>
</div>
</div>
<div class="form-group row justify-content-center">
<button type="submit" class="btn btn-outline-primary mr-2" id="btn-buscar"><?php echo $ICO["buscar"]; ?> Buscar asistencias</button>
<button type="button" class="btn btn-outline-danger" onclick="window.location.href = window.location.href"><?php echo $ICO["borrar"]; ?> Limpiar</button>
</div>
</form>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
<?php
$periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo]);
echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n";
echo "// Fecha inicial: " . ($fecha_inicial ?? 'n/a') . " - Fecha final: " . ($fecha_final ?? 'n/a') . "\n";
?>
// $periodo format = Y-m-d
const inicio = new Date(<?= date('Y, m-1, d', strtotime($periodo['inicio'])) ?>);
var fecha_inicial = new Date(<?= date('Y, m-1, d', strtotime($fecha_inicial ?? $periodo['inicio'])) ?>)
var fecha_final = new Date(<?= date('Y, m-1, d', strtotime($fecha_final ?? $periodo['fin'])) ?>)
const limit = new Date(Math.min(today, fecha_final));
console.log(`today: ${today}, fecha_inicial: ${fecha_inicial}, fecha_final: ${fecha_final}`);
$("#fecha_inicial").datepicker("option", "minDate", inicio);
$("#fecha_inicial").datepicker("option", "maxDate", limit);
$("#fecha_final").datepicker("option", "minDate", fecha_inicial);
$("#fecha_final").datepicker("option", "maxDate", limit);
// if today is in the period, set the initial date to today
$("#fecha_inicial").datepicker("setDate", fecha_inicial);
$("#fecha_final").datepicker("setDate", today <= fecha_final ? today : fecha_final);
// if the datepicker is changed, check if the range is valid
makeRequiredDatalist("#filter_facultad", true);
makeRequiredDatalist("#filter_carrera", true);
$(document).on('click', '#dlFacultad ul li', function() {
var id = $(this).data('id');
// remove all option
$('#dlcarrera ul').empty();
disableDatalist("#filter_carrera", false);
$.post(
'action/action_carreras.php', {
facultad: id,
periodo: $('#periodo').val()
},
function(data) {
$('#dlcarrera ul').append("<li>Seleccionar todas</li>");
for (var i = 0; i < data.length; i++)
$('#dlcarrera ul').append(`<li data-id="${data[i].id}">${data[i].carrera}</li>`);
setDatalistFirst("#filter_carrera")
},
'json'
)
});
$(document).on('change', '#fecha_inicial', function() {
var fi = $(this).datepicker("getDate");
$("#fecha_final").datepicker("option", "minDate", fi);
});
$(document).on('change', '#fecha_final', function() {
var ff = $(this).datepicker("getDate");
$("#fecha_inicial").datepicker("option", "maxDate", ff);
});
<?php
include_once "import/html_forms.php";
?>
<form id="asistencia">
<div class="form-box">
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id']; ?>">
<?php
$periodo = $db->where('id', $user->periodo)->getOne('fs_periodo');
$carreras = $db
->where('nivel', $periodo['nivel_id'])
->where('facultad', $user->facultad['facultad_id'])
->orderBy('carrera')
->get('fs_carrera');
?>
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6 ">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Seleccionar todas las carreras</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-id="">Seleccionar todas las carreras</li>
<?php
foreach ($carreras as $carrera) {
?>
<li data-id="<?= $carrera['id'] ?>">
<?= $carrera['carrera'] ?>
</li>
<?php
}
?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<div class="form-group row">
<label for="filterClave" class="col-4 col-form-label">Clave</label>
<div class="col-6 ">
<input type="text" class="form-control" id="filterClave" name="clave" placeholder="Clave del profesor (opcional)" value="<?= $clave ?? '' ?>" pattern="(do)?[0-9]{3,6}" title="La clave debe tener 8 caracteres, los primeros 2 deben ser letras y los últimos 6 números" minlength="3" maxlength="8">
</div>
</div>
<div class="form-group row">
<label for="filterNombre" class="col-4 col-form-label">Nombre</label>
<div class="col-6 ">
<input type="text" class="form-control" id="filterNombre" name="nombre" placeholder="Nombre del profesor (opcional)">
</div>
</div>
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha final</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida o el rango es incorrecto.</div>
</div>
</div>
</div>
<div class="form-group row justify-content-center">
<button type="submit" class="btn btn-outline-primary mr-2" id="btn-buscar"><?php echo $ICO["buscar"]; ?> Buscar asistencias</button>
<button type="button" class="btn btn-outline-danger" onclick="window.location.href = window.location.href"><?php echo $ICO["borrar"]; ?> Limpiar</button>
</div>
</form>
<script>
var today = new Date();
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
<?php
$periodo = query("SELECT * FROM FS_PERIODO WHERE ID = :periodo", [":periodo" => $user->periodo]);
echo "// Período: {$periodo["inicio"]} - {$periodo["fin"]}\n";
echo "// Fecha inicial: " . ($fecha_inicial ?? 'n/a') . " - Fecha final: " . ($fecha_final ?? 'n/a') . "\n";
?>
// $periodo format = Y-m-d
const inicio = new Date(<?= date('Y, m-1, d', strtotime($periodo['inicio'])) ?>);
var fecha_inicial = new Date(<?= date('Y, m-1, d', strtotime($fecha_inicial ?? $periodo['inicio'])) ?>)
var fecha_final = new Date(<?= date('Y, m-1, d', strtotime($fecha_final ?? $periodo['fin'])) ?>)
const limit = new Date(Math.min(today, fecha_final));
console.log(`today: ${today}, fecha_inicial: ${fecha_inicial}, fecha_final: ${fecha_final}`);
$("#fecha_inicial").datepicker("option", "minDate", inicio);
$("#fecha_inicial").datepicker("option", "maxDate", limit);
$("#fecha_final").datepicker("option", "minDate", fecha_inicial);
$("#fecha_final").datepicker("option", "maxDate", limit);
// if today is in the period, set the initial date to today
$("#fecha_inicial").datepicker("setDate", fecha_inicial);
$("#fecha_final").datepicker("setDate", today <= fecha_final ? today : fecha_final);
// if the datepicker is changed, check if the range is valid
makeRequiredDatalist("#filter_facultad", true);
makeRequiredDatalist("#filter_carrera", true);
$(document).on('click', '#dlFacultad ul li', function() {
var id = $(this).data('id');
// remove all option
$('#dlcarrera ul').empty();
disableDatalist("#filter_carrera", false);
$.post(
'action/action_carreras.php', {
facultad: id,
periodo: $('#periodo').val()
},
function(data) {
$('#dlcarrera ul').append("<li>Seleccionar todas</li>");
for (var i = 0; i < data.length; i++)
$('#dlcarrera ul').append(`<li data-id="${data[i].id}">${data[i].carrera}</li>`);
setDatalistFirst("#filter_carrera")
},
'json'
)
});
$(document).on('change', '#fecha_inicial', function() {
var fi = $(this).datepicker("getDate");
$("#fecha_final").datepicker("option", "minDate", fi);
});
$(document).on('change', '#fecha_final', function() {
var ff = $(this).datepicker("getDate");
$("#fecha_inicial").datepicker("option", "maxDate", ff);
});
</script>

View File

@@ -1,111 +1,111 @@
<?php
include_once "import/html_forms.php";
?>
<link rel="stylesheet" href="css/clockpicker.css">
<form id="justificar">
<div class="form-box">
<div class="col-md-6 col-sm-12 text-center mb-3">
Selecciona la fecha que deseas justificar.
</div>
<div class="form-group row">
<label for="filter_fecha" class="col-4 col-form-label">Fecha *</label>
<div class="col-6 ">
<input id="filter_fecha" name="fecha" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<!-- Hora inicio CLOCKPICKER -->
<div class="form-group row">
<label for="filter_hora_inicio" class="col-4 col-form-label">Hora estimada *</label>
<div class="input-group clockpicker col-6 ">
<input id="filter_hora_inicio" name="hora_inicio" type="text" class="form-control" placeholder="hh:mm" maxlength="5" required="required" readonly>
<div class="input-group-append">
<span class="input-group-text" onclick="$('#filter_hora_inicio').focus();">
<i class="ing-reloj"></i>
</span>
</div>
<div class="invalid-feedback">No es una hora válida.</div>
</div>
</div>
<!-- Hora fin -->
<div class="form-group row">
<label for="filter_hora_fin" class="col-4 col-form-label">Hora límite</label>
<div class="input-group clockpicker col-6">
<input id="filter_hora_fin" name="hora_fin" type="text" class="form-control" placeholder="hh:mm" maxlength="5" readonly>
<div class="input-group-append">
<span class="input-group-text" onclick="$('#filter_hora_fin').focus();">
<i class="ing-reloj"></i>
</span>
</div>
<div class="invalid-feedback">No es una hora válida.</div>
</div>
</div>
<!-- ClaveULSA -->
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave</label>
<div class="col-6">
<input id="filter_clave" name="clave" type="text" class="form-control" pattern="(do)?[0-9]{3,6}" placeholder="Clave del profesor (do)" maxlength="8" title="Clave del profesor (do)">
<div class="invalid-feedback">No es una clave válida.</div>
</div>
</div>
<!-- Nombre -->
<div class="form-group row">
<label for="filter_nombre" class="col-4 col-form-label">Nombre</label>
<div class="col-6">
<input id="filter_nombre" name="nombre" type="text" class="form-control" placeholder="Nombre del profesor" maxlength="50" title="Nombre del profesor">
<div class="invalid-feedback">No es un nombre válido.</div>
</div>
</div>
<!-- button center -->
<div class="form-group row justify-content-center p-3">
<button class="btn btn-primary mr-3" id="main-button" type="button">
<?= $ICO['buscar'] ?>
Buscar profesores
</button>
<!-- reload page -->
<button type="button" class="btn btn-outline-danger" onclick="location.reload();">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</div>
</form>
<script src="js/clockpicker.js"></script>
<script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$('.clockpicker').clockpicker({
placement: 'bottom',
align: 'right',
donetext: 'Aceptar',
autoclose: true,
'default': 'now',
afterShow: function() {
$('.clockpicker-minutes').find('.clockpicker-tick').filter(function() {
return $(this).text() % 5 !== 0;
}).remove();
$('.clockpicker-hours').find('.clockpicker-tick').filter(function(index, element) {
let num = parseInt($(element).text());
let condition = num < 7 || num > 22;
return condition;
}).remove();
}
});
// only accept from 7:00 to 22:00
<?php
include_once "import/html_forms.php";
?>
<link rel="stylesheet" href="css/clockpicker.css">
<form id="justificar">
<div class="form-box">
<div class="col-md-6 col-sm-12 text-center mb-3">
Selecciona la fecha que deseas justificar.
</div>
<div class="form-group row">
<label for="filter_fecha" class="col-4 col-form-label">Fecha *</label>
<div class="col-6 ">
<input id="filter_fecha" name="fecha" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<!-- Hora inicio CLOCKPICKER -->
<div class="form-group row">
<label for="filter_hora_inicio" class="col-4 col-form-label">Hora estimada *</label>
<div class="input-group clockpicker col-6 ">
<input id="filter_hora_inicio" name="hora_inicio" type="text" class="form-control" placeholder="hh:mm" maxlength="5" required="required" readonly>
<div class="input-group-append">
<span class="input-group-text" onclick="$('#filter_hora_inicio').focus();">
<i class="ing-reloj"></i>
</span>
</div>
<div class="invalid-feedback">No es una hora válida.</div>
</div>
</div>
<!-- Hora fin -->
<div class="form-group row">
<label for="filter_hora_fin" class="col-4 col-form-label">Hora límite</label>
<div class="input-group clockpicker col-6">
<input id="filter_hora_fin" name="hora_fin" type="text" class="form-control" placeholder="hh:mm" maxlength="5" readonly>
<div class="input-group-append">
<span class="input-group-text" onclick="$('#filter_hora_fin').focus();">
<i class="ing-reloj"></i>
</span>
</div>
<div class="invalid-feedback">No es una hora válida.</div>
</div>
</div>
<!-- ClaveULSA -->
<div class="form-group row">
<label for="filter_clave" class="col-4 col-form-label">Clave</label>
<div class="col-6">
<input id="filter_clave" name="clave" type="text" class="form-control" pattern="(do)?[0-9]{3,6}" placeholder="Clave del profesor (do)" maxlength="8" title="Clave del profesor (do)">
<div class="invalid-feedback">No es una clave válida.</div>
</div>
</div>
<!-- Nombre -->
<div class="form-group row">
<label for="filter_nombre" class="col-4 col-form-label">Nombre</label>
<div class="col-6">
<input id="filter_nombre" name="nombre" type="text" class="form-control" placeholder="Nombre del profesor" maxlength="50" title="Nombre del profesor">
<div class="invalid-feedback">No es un nombre válido.</div>
</div>
</div>
<!-- button center -->
<div class="form-group row justify-content-center p-3">
<button class="btn btn-primary mr-3" id="main-button" type="button">
<?= $ICO['buscar'] ?>
Buscar profesores
</button>
<!-- reload page -->
<button type="button" class="btn btn-outline-danger" onclick="location.reload();">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</div>
</form>
<script src="js/clockpicker.js"></script>
<script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
$('.clockpicker').clockpicker({
placement: 'bottom',
align: 'right',
donetext: 'Aceptar',
autoclose: true,
'default': 'now',
afterShow: function() {
$('.clockpicker-minutes').find('.clockpicker-tick').filter(function() {
return $(this).text() % 5 !== 0;
}).remove();
$('.clockpicker-hours').find('.clockpicker-tick').filter(function(index, element) {
let num = parseInt($(element).text());
let condition = num < 7 || num > 22;
return condition;
}).remove();
}
});
// only accept from 7:00 to 22:00
</script>

View File

@@ -1,163 +1,163 @@
<section id="message"></section>
<?php
$target = '/checador_otros/admin_checador/reporte_de_asistencias.php';
$id = $_POST['id'];
include_once "import/html_forms.php";
$carreras = queryAll("SELECT DISTINCT carrera, id, facultad FROM FS_CARRERA WHERE ID IN (SELECT distinct CARRERA_ID FROM FS_HORARIO_BASIC WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per)", [':id' => $id, ':per' => $user->periodo]);
// materia por carrera
#print_r($carreras);
$materias = queryAll("SELECT DISTINCT * FROM FS_MATERIA WHERE CARRERA = COALESCE(:car, CARRERA) AND ID IN (SELECT distinct materia_id FROM HORARIO WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per) ORDER BY NOMBRE", [":car" => empty($carrera) ? null : $carrera, ':id' => $id, ':per' => $user->periodo]);
#exit();
$periodo = query("SELECT inicio, fin FROM FS_PERIODO WHERE ID = :per", [':per' => $user->periodo]);
?>
<form action="#" method="post" id="form" class="form-horizontal">
<input type="hidden" name="id" value="<?= $id; ?>" />
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" />
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id'] ?>" />
<input type="hidden" name="clave" value="<?= $profesor['clave'] ?>" />
<div class="form-box">
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Todas las carreras</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<!-- Seleccionar todas -->
<li data-value="0">Todas las carreras</li>
<?php foreach ($carreras as $car) {
?>
<li data-id="<?= $car['id'] ?>" class="<?= ($car['id'] == $carrera) ? "selected" : '' ?>" onclick="carreras(<?= $car['id'] ?>)">
<?= $car['carrera'] ?>
</li>
<?php } ?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<!-- Materia -->
<div class="form-group row">
<label for="filter_materia" class="col-4 col-form-label">Materia</label>
<div class="col-6">
<div id="dlmateria" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Todas las materias</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-value="0">Todas las materias</li>
<?php foreach ($materias as $materia) { ?>
<li data-id="<?= $materia['id']; ?>" class="<?= ($materia['id'] == $_POST['materia']) ? "selected" : '' ?>">
<?= $materia['nombre']; ?>
</li>
<?php } ?>
</ul>
<input type="hidden" id="filter_materia" name="materia" value="">
</div>
</div>
</div>
<!-- Fecha inicial y fecha final -->
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha final</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida o el rango es incorrecto.</div>
</div>
</div>
</div>
<!-- ICO-BUSCAR FILTRAR & ICO-BORRAR LIMPIAR -->
<div class="form-group row justify-content-center">
<button type="button" class="btn btn-outline-primary mr-2" onclick="if(validateForm) submit('vista_profesor.php')">
<span class="ing-buscar icono"></span>
Filtrar
</button>
<button type="button" class="btn btn-outline-danger" onclick="reset_form(); submit('vista_profesor.php')">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</form>
<?php
include_once "js/messages.php";
?>
<script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
var today = new Date();
var fecha_inicial = new Date(<?= $fecha_inicial->format("Y, m-1, d") ?>);
var fecha_inicial_periodo = new Date(<?= date("Y, m-1, d", strtotime($periodo['inicio'])) ?>);
var fecha_final = new Date(<?= $fecha_final->format("Y, m-1, d") ?>);
var fecha_final_periodo = new Date(<?= date("Y, m-1, d", strtotime($periodo['fin'])) ?>);
var limit = new Date(Math.min(today, fecha_final_periodo));
// if today is in the period, set the initial date to today
$("#fecha_inicial").datepicker("option", "minDate", fecha_inicial_periodo);
$("#fecha_inicial").datepicker("option", "maxDate", limit);
$("#fecha_final").datepicker("option", "minDate", fecha_inicial_periodo);
$("#fecha_final").datepicker("option", "maxDate", limit);
$("#fecha_inicial").datepicker("setDate", fecha_inicial);
$("#fecha_final").datepicker("setDate", today <= fecha_final ? today : fecha_final);
function reset_form() {
$("#fecha_inicial").datepicker("setDate", fecha_inicial_periodo);
$("#fecha_final").datepicker("setDate", today <= fecha_inicial_periodo ? today : fecha_final_periodo);
setDatalistFirst("#filter_carrera");
setDatalistFirst("#filter_materia");
disableDatalist("#filter_materia");
}
<?php if (empty($carrera)) { ?>
disableDatalist("#filter_materia", true);
<?php } ?>
// $("#fecha_inicial").on("change", function() {
// var fecha_inicial = $("#fecha_inicial").datepicker("getDate");
// var fecha_final = $("#fecha_final").datepicker("getDate");
// if (fecha_final < fecha_inicial) {
// $("#fecha_final").datepicker("setDate", fecha_inicial);
// }
// $("#fecha_final").datepicker("option", "minDate", fecha_inicial);
// });
// $("#fecha_final").on("change", function() {
// var fecha_inicial = $("#fecha_inicial").datepicker("getDate");
// var fecha_final = $("#fecha_final").datepicker("getDate");
// if (fecha_final < fecha_inicial) {
// $("#fecha_inicial").datepicker("setDate", fecha_final);
// }
// $("#fecha_inicial").datepicker("option", "maxDate", fecha_final);
// });
// Datalist carrera then select materia
$(document).on('click', '#dlcarrera li', function() {
// if this is empty
// console.log($(this).attr('data-value'));
if ($(this).attr('data-value') == '0')
disableDatalist("#filter_materia", true);
});
$(document).on('change', '#fecha_inicial', function() {
let fi = $(this).datepicker("getDate");
$("#fecha_final").datepicker("option", "minDate", fi);
});
$(document).on('change', '#fecha_final', function() {
let ff = $(this).datepicker("getDate");
$("#fecha_inicial").datepicker("option", "maxDate", ff);
});
<section id="message"></section>
<?php
$target = '/checador_otros/admin_checador/reporte_de_asistencias.php';
$id = $_POST['id'];
include_once "import/html_forms.php";
$carreras = queryAll("SELECT DISTINCT carrera, id, facultad FROM FS_CARRERA WHERE ID IN (SELECT distinct CARRERA_ID FROM FS_HORARIO_BASIC WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per)", [':id' => $id, ':per' => $user->periodo]);
// materia por carrera
#print_r($carreras);
$materias = queryAll("SELECT DISTINCT * FROM FS_MATERIA WHERE CARRERA = COALESCE(:car, CARRERA) AND ID IN (SELECT distinct materia_id FROM HORARIO WHERE :id IN (SELECT HORARIO_ID FROM HORARIO_PROFESOR WHERE PROFESOR_ID = :id) AND PERIODO_ID = :per) ORDER BY NOMBRE", [":car" => empty($carrera) ? null : $carrera, ':id' => $id, ':per' => $user->periodo]);
#exit();
$periodo = query("SELECT inicio, fin FROM FS_PERIODO WHERE ID = :per", [':per' => $user->periodo]);
?>
<form action="#" method="post" id="form" class="form-horizontal">
<input type="hidden" name="id" value="<?= $id; ?>" />
<input type="hidden" name="periodo" value="<?= $user->periodo ?>" />
<input type="hidden" name="facultad" value="<?= $user->facultad['facultad_id'] ?>" />
<input type="hidden" name="clave" value="<?= $profesor['clave'] ?>" />
<div class="form-box">
<div class="form-group row">
<label for="filter_carrera" class="col-4 col-form-label">Carrera</label>
<div class="col-6">
<div id="dlcarrera" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Todas las carreras</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<!-- Seleccionar todas -->
<li data-value="0">Todas las carreras</li>
<?php foreach ($carreras as $car) {
?>
<li data-id="<?= $car['id'] ?>" class="<?= ($car['id'] == $carrera) ? "selected" : '' ?>" onclick="carreras(<?= $car['id'] ?>)">
<?= $car['carrera'] ?>
</li>
<?php } ?>
</ul>
<input type="hidden" id="filter_carrera" name="carrera" value="">
</div>
</div>
</div>
<!-- Materia -->
<div class="form-group row">
<label for="filter_materia" class="col-4 col-form-label">Materia</label>
<div class="col-6">
<div id="dlmateria" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Todas las materias</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<li data-value="0">Todas las materias</li>
<?php foreach ($materias as $materia) { ?>
<li data-id="<?= $materia['id']; ?>" class="<?= ($materia['id'] == $_POST['materia']) ? "selected" : '' ?>">
<?= $materia['nombre']; ?>
</li>
<?php } ?>
</ul>
<input type="hidden" id="filter_materia" name="materia" value="">
</div>
</div>
</div>
<!-- Fecha inicial y fecha final -->
<div class="form-group row">
<label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
<div class="col-8 col-sm-4">
<input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida.</div>
</div>
</div>
<div class="form-group row">
<label for="fecha_final" class="col-4 col-form-label">Fecha final</label>
<div class="col-8 col-sm-4">
<input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly>
<div class="invalid-feedback">No es una fecha válida o el rango es incorrecto.</div>
</div>
</div>
</div>
<!-- ICO-BUSCAR FILTRAR & ICO-BORRAR LIMPIAR -->
<div class="form-group row justify-content-center">
<button type="button" class="btn btn-outline-primary mr-2" onclick="if(validateForm) submit('vista_profesor.php')">
<span class="ing-buscar icono"></span>
Filtrar
</button>
<button type="button" class="btn btn-outline-danger" onclick="reset_form(); submit('vista_profesor.php')">
<span class="ing-borrar icono"></span>
Limpiar
</button>
</div>
</form>
<?php
include_once "js/messages.php";
?>
<script>
$(".date-picker").datepicker($.datepicker.regional["es"]);
$(".date-picker").datepicker({
dateFormat: "dd/mm/yyyy",
changeMonth: true,
});
var today = new Date();
var fecha_inicial = new Date(<?= $fecha_inicial->format("Y, m-1, d") ?>);
var fecha_inicial_periodo = new Date(<?= date("Y, m-1, d", strtotime($periodo['inicio'])) ?>);
var fecha_final = new Date(<?= $fecha_final->format("Y, m-1, d") ?>);
var fecha_final_periodo = new Date(<?= date("Y, m-1, d", strtotime($periodo['fin'])) ?>);
var limit = new Date(Math.min(today, fecha_final_periodo));
// if today is in the period, set the initial date to today
$("#fecha_inicial").datepicker("option", "minDate", fecha_inicial_periodo);
$("#fecha_inicial").datepicker("option", "maxDate", limit);
$("#fecha_final").datepicker("option", "minDate", fecha_inicial_periodo);
$("#fecha_final").datepicker("option", "maxDate", limit);
$("#fecha_inicial").datepicker("setDate", fecha_inicial);
$("#fecha_final").datepicker("setDate", today <= fecha_final ? today : fecha_final);
function reset_form() {
$("#fecha_inicial").datepicker("setDate", fecha_inicial_periodo);
$("#fecha_final").datepicker("setDate", today <= fecha_inicial_periodo ? today : fecha_final_periodo);
setDatalistFirst("#filter_carrera");
setDatalistFirst("#filter_materia");
disableDatalist("#filter_materia");
}
<?php if (empty($carrera)) { ?>
disableDatalist("#filter_materia", true);
<?php } ?>
// $("#fecha_inicial").on("change", function() {
// var fecha_inicial = $("#fecha_inicial").datepicker("getDate");
// var fecha_final = $("#fecha_final").datepicker("getDate");
// if (fecha_final < fecha_inicial) {
// $("#fecha_final").datepicker("setDate", fecha_inicial);
// }
// $("#fecha_final").datepicker("option", "minDate", fecha_inicial);
// });
// $("#fecha_final").on("change", function() {
// var fecha_inicial = $("#fecha_inicial").datepicker("getDate");
// var fecha_final = $("#fecha_final").datepicker("getDate");
// if (fecha_final < fecha_inicial) {
// $("#fecha_inicial").datepicker("setDate", fecha_final);
// }
// $("#fecha_inicial").datepicker("option", "maxDate", fecha_final);
// });
// Datalist carrera then select materia
$(document).on('click', '#dlcarrera li', function() {
// if this is empty
// console.log($(this).attr('data-value'));
if ($(this).attr('data-value') == '0')
disableDatalist("#filter_materia", true);
});
$(document).on('change', '#fecha_inicial', function() {
let fi = $(this).datepicker("getDate");
$("#fecha_final").datepicker("option", "minDate", fi);
});
$(document).on('change', '#fecha_final', function() {
let ff = $(this).datepicker("getDate");
$("#fecha_inicial").datepicker("option", "maxDate", ff);
});
</script>

View File

@@ -1,160 +1,149 @@
<script defer src="js/sidebarmenu.js"></script>
<?php
require_once 'class/c_login.php';
$ruta = "../";
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])) {
if (isset($redirect))
$_SESSION['ruta'] = $redirect;
header('Location: index.php');
}
$user = unserialize($_SESSION['user']);
function html_header($title, $header = null)
{
global $user;
$grupos = queryAll("SELECT * FROM GRUPO ORDER BY grupo_nombre");
if ($user->admin)
$paginas = queryAll("SELECT * FROM pagina ORDER BY pagina_ruta");
else
$paginas = queryAll("SELECT * FROM PERMISO_VIEW WHERE id = :id ORDER BY pagina_ruta", array(":id" => $user->user['id']));
?>
<aside id="sidebar" class="bg-light defaultShadow d-flex flex-column p-4">
<div class="d-flex align-items-center mb-5">
<div class="logotipo"><a href="https://lasalle.mx/" target="_blank"><img src="imagenes/logo_lasalle.png"></a>
</div>
<div class="flex-grow-1 d-flex justify-content-end">
<nav class="navbar navbar-expand d-none d-flex">
<ul class="navbar-nav">
</ul>
</nav>
<div class="d-flex mainMenu justify-content-center align-items-center">
<div class="max-h iconSesion">
<a href="salir.php" class="iconOff max-h pl-3 d-flex justify-content-start align-items-center"><i
class="ing-salir"></i></a>
</div>
<div class="max-h">
<div class="bg-primary rounded-circle pointer max-h max-w d-flex justify-content-center align-items-center"
id="dismiss">
<span class="text-white iconMenuSidebar ing-cancelar"></span>
</div>
</div>
</div>
</div>
</div>
<div class="accordion px-2" id="accordionMenu">
<p class="mb-0 mt-3 ml-4 pl-1">
<a class="d-block side-menu" href="main.php">
<span class="ing-home"></span> Menú
</a>
</p>
<?php
if ($user->admin) { ?>
<p class="mb-0 mt-3 ml-4 pl-1">
<a href="permisos.php" class="d-block side-menu">
<span class="ing-pass"></span> Permisos
</a>
</p>
<?php }
$cont = 0;
foreach ($grupos as $grupo) {
?>
<p class="mb-0 mt-3">
<a class="d-block side-menu collapsed" data-toggle="collapse" href="#menu_<?= $cont ?>" role="button"
aria-expanded="false">
<i class="ing-caret ing-fw mr-2"></i>
<span class="<?= $grupo['grupo_icon'] ?>"></span>
<?= ucfirst($grupo['grupo_nombre']) ?>
</a>
</p>
<div id="menu_<?= $cont ?>" class="collapse" data-parent="#accordionMenu" style>
<ul class="fa-ul">
<?php
foreach ($paginas as $pagina) {
#print_r($paginas);
$page = ucfirst(str_replace('_', ' ', $pagina['pagina_ruta']));
$user->access($pagina['pagina_ruta'] ?? '');
if ($grupo['grupo_id'] == $pagina['grupo_id']) {
if ($user->admin || $user->acceso != 'n') {
?>
<li class="mt-1">
<a href="<?= $pagina['pagina_ruta'] ?>.php">
<?= $page ?>
</a>
</li>
<?php }
}
}
?>
</ul>
</div>
<?php $cont++;
}
?>
</div>
</aside>
<div class="overlay"></div>
<header class="sticky-top bg-white">
<div class="container marco menu d-flex align-items-center">
<div class="logotipo">
<a href="https://lasalle.mx/" target="_blank">
<img src="imagenes/logo_lasalle.png">
</a>
</div>
<div class="flex-grow-1 d-flex justify-content-end">
<nav class="navbar navbar-expand-lg d-flex">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<!-- Add your navigation items here -->
</ul>
</div>
</nav>
<div class="d-flex mainMenu justify-content-center align-items-center">
<div class="max-h iconSesion">
<a href="salir.php" class="iconOff max-h pl-3 d-flex justify-content-start align-items-center">
<i class="ing-salir"></i>
</a>
</div>
<div class="max-h">
<span id="sidebarCollapse" style="font-size: 44px;"
class="ing-menu bg-white rounded-circle pointer max-w d-flex justify-content-center align-items-center"></span>
</div>
</div>
</div>
</div>
</header>
<div class="row bg-info mx-0 barra-gris d-flex flex-column">
<?php
if ($header != null) {
?>
<div class="marco">
<div class="col-sm-12">
<h2 class="text-muted">
<?= $header; ?>
</div>
</div>
<?php } ?>
<div class="marco">
<div class="col-sm-12 py-3">
<h2 class="text-uppercase">
<?= $title; ?>
</h2>
</div>
</div>
</div>
<?php }
?>
<script defer src="js/sidebarmenu.js"></script>
<?php
require_once 'class/c_login.php';
$ruta = "../";
require_once 'include/bd_pdo.php';
if (!isset($_SESSION['user'])) {
if (isset($redirect))
$_SESSION['ruta'] = $redirect;
header('Location: index.php');
}
$user = unserialize($_SESSION['user']);
if ($user->admin):
?><!-- <pre><? var_dump($user) ?></pre> -->
<?
endif;
$grupos = $user->admin ? queryAll("SELECT * FROM GRUPO ORDER BY grupo_nombre") : $db->query("SELECT * FROM GRUPO WHERE grupo_id IN (SELECT grupo_id FROM PERMISO_VIEW WHERE id = :id) ORDER BY grupo_nombre", array(":id" => $user->user['id']));
function html_header($title, $header = null)
{
global $grupos, $user, $db;
?>
<aside id="sidebar" class="bg-light defaultShadow d-flex flex-column p-4">
<div class="d-flex align-items-center mb-5">
<div class="logotipo"><a href="https://lasalle.mx/" target="_blank"><img src="imagenes/logo_lasalle.png"></a>
</div>
<div class="flex-grow-1 d-flex justify-content-end">
<nav class="navbar navbar-expand d-none d-flex">
<ul class="navbar-nav">
</ul>
</nav>
<div class="d-flex mainMenu justify-content-center align-items-center">
<div class="max-h iconSesion">
<a href="salir.php" class="iconOff max-h pl-3 d-flex justify-content-start align-items-center"><i
class="ing-salir"></i></a>
</div>
<div class="max-h">
<div class="bg-primary rounded-circle pointer max-h max-w d-flex justify-content-center align-items-center"
id="dismiss">
<span class="text-white iconMenuSidebar ing-cancelar"></span>
</div>
</div>
</div>
</div>
</div>
<div class="accordion px-2" id="accordionMenu">
<p class="mb-0 mt-3 ml-4 pl-1">
<a class="d-block side-menu" href="main.php">
<span class="ing-home"></span> Menú
</a>
</p>
<?php
if ($user->admin) { ?>
<p class="mb-0 mt-3 ml-4 pl-1">
<a href="permisos.php" class="d-block side-menu">
<span class="ing-pass"></span> Permisos
</a>
</p>
<?php }
foreach ($grupos as $key => $grupo) {
?>
<p class="mb-0 mt-3">
<a class="d-block side-menu collapsed" data-toggle="collapse" href="#menu_<?= $key ?>" role="button"
aria-expanded="false">
<i class="ing-caret ing-fw mr-2"></i>
<span class="<?= $grupo['grupo_icon'] ?>"></span>
<?= ucfirst($grupo['grupo_nombre']) ?>
</a>
</p>
<div id="menu_<?= $key ?>" class="collapse" data-parent="#accordionMenu" style>
<ul class="fa-ul">
<?
foreach ($user->admin ? $db->query("SELECT * FROM PAGINA WHERE grupo_id = :grupo_id ORDER BY pagina_titulo", array(":grupo_id" => $grupo['grupo_id'])) : $db->query("SELECT * FROM PAGINA WHERE grupo_id = :grupo_id and pagina_id IN (SELECT pagina_id FROM PERMISO_VIEW WHERE id = :id) ORDER BY pagina_titulo", array(":grupo_id" => $grupo['grupo_id'], ":id" => $user->user['id']))
as $pagina):
?>
<li class="mt-1">
<a href="<?= $pagina['pagina_ruta'] ?>.php">
<?= $pagina['pagina_titulo'] ?>
</a>
</li>
<? endforeach; ?>
</ul>
</div>
<?php
}
?>
</div>
</aside>
<div class="overlay"></div>
<header class="sticky-top bg-white">
<div class="container marco menu d-flex align-items-center">
<div class="logotipo">
<a href="https://lasalle.mx/" target="_blank">
<img src="imagenes/logo_lasalle.png">
</a>
</div>
<div class="flex-grow-1 d-flex justify-content-end">
<nav class="navbar navbar-expand-lg d-flex">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<!-- Add your navigation items here -->
</ul>
</div>
</nav>
<div class="d-flex mainMenu justify-content-center align-items-center">
<div class="max-h iconSesion">
<a href="salir.php" class="iconOff max-h pl-3 d-flex justify-content-start align-items-center">
<i class="ing-salir"></i>
</a>
</div>
<div class="max-h">
<span id="sidebarCollapse" style="font-size: 44px;"
class="ing-menu bg-white rounded-circle pointer max-w d-flex justify-content-center align-items-center"></span>
</div>
</div>
</div>
</div>
</header>
<div class="row bg-info mx-0 barra-gris d-flex flex-column">
<?php
if ($header != null) {
?>
<div class="marco">
<div class="col-sm-12">
<h2 class="text-muted">
<?= $header; ?>
</div>
</div>
<?php } ?>
<div class="marco">
<div class="col-sm-12 py-3">
<h2 class="text-uppercase">
<?= $title; ?>
</h2>
</div>
</div>
</div>
<? } ?>

View File

@@ -1,32 +1,31 @@
<?php
require "include/constantes.php";
function html_header($title, $header = null, $links = [])
{
?>
<nav class="navbar sticky-top navbar-light bg-white">
<header class="container-fluid">
<div class="menu">
<a class="navbar-brand" href="/"><img id="logo" src="imagenes/logo_lasalle.png" border="0" class="img-fluid" /></a>
</div>
</header>
</nav>
<!-- Barra azul -->
<div class="row bg-info mx-0 barra-gris">
<?php
if ($header != null) {
?>
<div class="marco">
<div class="col-sm-12">
<h2 class="text-muted"><?= $header; ?>
</div>
</div>
<?php } ?>
<div class="marco">
<div class="col-sm-12 py-3">
<h2 class="text-uppercase"><?= $title; ?></h2>
</div>
</div>
</div>
<?php
}
<?php
require "include/constantes.php";
function html_header($title, $header = null, $links = [])
{
?>
<nav class="navbar sticky-top navbar-light bg-white">
<header class="container-fluid">
<div class="menu">
<a class="navbar-brand" href="/"><img id="logo" src="imagenes/logo_lasalle.png" class="img-fluid" /></a>
</div>
</header>
</nav>
<!-- Barra azul -->
<div class="row bg-info mx-0 barra-gris">
<?php
if ($header != null) {
?>
<div class="marco">
<div class="col-sm-12">
<h2 class="text-muted"><?= $header; ?>
</div>
</div>
<?php } ?>
<div class="marco">
<div class="col-sm-12 py-3">
<h2 class="text-uppercase"><?= $title; ?></h2>
</div>
</div>
</div>
<?php
}

View File

@@ -1,47 +1,47 @@
<?php
# Componente, desplegable para la barra de navegación con los contenidos del menú (i.e. módulos con sus páginas)
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
}
else
$user = $_SESSION['user'];
$pages = query('SELECT * FROM FS_MODULOS', single: false);
$modules = query('SELECT DISTINCT id, titulo FROM FS_MODULOS', single: false);
?>
<!-- Cuando se le hace click al hamburguer button se despliega un menú en la derecha -->
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<?php
foreach ($modules as $module) {
?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php echo ucfirst($module['titulo']); ?>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<?php
foreach ($pages as $page)
if ($page['id'] == $module['id']) {
?>
<a class="dropdown-item" href="<?php echo $page['ruta'] . ".php"; ?>">
<?php echo ucfirst(str_replace('_', ' ', $page['ruta'])); ?>
</a>
<?php
}
?>
</div>
</li>
<?php
}
?>
</ul>
<?php
# Componente, desplegable para la barra de navegación con los contenidos del menú (i.e. módulos con sus páginas)
require_once 'class/c_login.php';
if (!isset($_SESSION['user'])) {
header('Location: index.php');
exit;
}
else
$user = $_SESSION['user'];
$pages = query('SELECT * FROM FS_MODULOS', single: false);
$modules = query('SELECT DISTINCT id, titulo FROM FS_MODULOS', single: false);
?>
<!-- Cuando se le hace click al hamburguer button se despliega un menú en la derecha -->
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<?php
foreach ($modules as $module) {
?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php echo ucfirst($module['titulo']); ?>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<?php
foreach ($pages as $page)
if ($page['id'] == $module['id']) {
?>
<a class="dropdown-item" href="<?php echo $page['ruta'] . ".php"; ?>">
<?php echo ucfirst(str_replace('_', ' ', $page['ruta'])); ?>
</a>
<?php
}
?>
</div>
</li>
<?php
}
?>
</ul>
</div>

View File

@@ -1,42 +1,42 @@
<?php
include_once "include/constantes.php";
?>
<a href="#top" id="scroll-up" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 3rem; right: 1rem;">
<?= $ICO['arriba'] ?>
</a>
<!-- Scroll down -->
<a href="#bottom" id="scroll-down" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 1rem; right: 1rem;">
<?= $ICO['abajo'] ?>
</a>
<script>
$(document).ready(function() {
$(window).scroll(function() {
if ($(this).scrollTop() > 100) {
$('#scroll-up').fadeIn();
} else {
$('#scroll-up').fadeOut();
}
if ($(this).scrollTop() < $(document).height() - $(window).height() - 100) {
$('#scroll-down').fadeIn();
} else {
$('#scroll-down').fadeOut();
}
});
$('#scroll-up').click(function() {
$("html, body").animate({
scrollTop: 0
}, 600);
return false;
});
$('#scroll-down').click(function() {
$("html, body").animate({
scrollTop: $(document).height()
}, 600);
return false;
});
});
<?php
include_once "include/constantes.php";
?>
<a href="#top" id="scroll-up" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 3rem; right: 1rem;">
<?= $ICO['arriba'] ?>
</a>
<!-- Scroll down -->
<a href="#bottom" id="scroll-down" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 1rem; right: 1rem;">
<?= $ICO['abajo'] ?>
</a>
<script>
$(document).ready(function() {
$(window).scroll(function() {
if ($(this).scrollTop() > 100) {
$('#scroll-up').fadeIn();
} else {
$('#scroll-up').fadeOut();
}
if ($(this).scrollTop() < $(document).height() - $(window).height() - 100) {
$('#scroll-down').fadeIn();
} else {
$('#scroll-down').fadeOut();
}
});
$('#scroll-up').click(function() {
$("html, body").animate({
scrollTop: 0
}, 600);
return false;
});
$('#scroll-down').click(function() {
$("html, body").animate({
scrollTop: $(document).height()
}, 600);
return false;
});
});
</script>

View File

@@ -1,64 +1,65 @@
<script src="js/jquery.min.js"></script>
<form action="action/action_periodousuario_update.php" method="post" id="formaPeriodo">
<div class="row">
<div class="col-12">
<?php
$target = $target ?? strtok($_SERVER["REQUEST_URI"], '?');
$niveles = array_map(
fn($nivel) => array_merge(
$nivel,
['periodos' => $db->where('nivel_id', $nivel['nivel_id'])->get('periodo_view')]
), $db->get("nivel")
);
// collect facultad_id's with facultad from $periodos
?>
<input type="hidden" name="target" value="<?= $target ?>">
<div class="form-box">
<div class="form-group row">
<label for="periodo" class="col-4 col-form-label">Cambiar de periodo</label>
<div class="col-6">
<div id="dlPeriodo" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona un periodo</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($niveles as $nivel) {
?>
<li data-id="<?= $nivel['nivel_id'] ?>" class="not-selectable disable">
<?= $nivel['nivel_nombre'] ?>
</li>
<?
$periodos_rs = $db->query(
'SELECT * FROM fs_periodo(NULL, :nivel, 4)',
[':nivel' => $nivel['nivel_id']]
);
foreach ($periodos_rs as $per) {
?>
<li data-id="<?= $per['periodo_id'] ?>" <?php if ($user->periodo == $per["periodo_id"]) {
echo 'class="selected"';
} ?>>
<?= $per['periodo_nombre'] ?>
</li>
<?php } ?>
<?php } ?>
</ul>
<input type="hidden" id="periodo" name="id" value="">
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<script src="./js/datalist.js"></script>
<script>
setDatalist('#periodo', <?php echo $user->periodo; ?>)
makeRequiredDatalist("#periodo", true);
$(document).on('click', '#dlPeriodo ul li', function () {
$('#formaPeriodo').submit();
});
<script src="js/jquery.min.js"></script>
<form action="action/action_periodousuario_update.php" method="post" id="formaPeriodo">
<div class="row">
<div class="col-12">
<?php
$target = $target ?? strtok($_SERVER["REQUEST_URI"], '?');
$niveles = array_map(
fn($nivel) => array_merge(
$nivel,
['periodos' => $db->where('nivel_id', $nivel['nivel_id'])->get('periodo_view')]
), $db->get("nivel")
);
// collect facultad_id's with facultad from $periodos
?>
<input type="hidden" name="target" value="<?= $target ?>">
<div class="form-box">
<div class="form-group row">
<label for="periodo" class="col-4 col-form-label">Cambiar de periodo</label>
<div class="col-6">
<div id="dlPeriodo" class="datalist datalist-select mb-1 w-100">
<div class="datalist-input">Selecciona un periodo</div>
<span class="ing-buscar icono"></span>
<ul style="display:none">
<?php
foreach ($niveles as $nivel) {
?>
<li data-id="<?= $nivel['nivel_id'] ?>" class="not-selectable disable">
<?= $nivel['nivel_nombre'] ?>
</li>
<?
$periodos_rs = $db->query(
'SELECT * FROM fs_periodo(NULL, :nivel, 4)',
[':nivel' => $nivel['nivel_id']]
);
array_walk($periodos_rs, function ($per) {
global $user;
?>
<li data-id="<?= $per['periodo_id'] ?>" <?php if ($user->periodo == $per["periodo_id"]) {
echo 'class="selected"';
} ?>>
<?= $per['periodo_nombre'] ?>
</li>
<?php }); ?>
<?php } ?>
</ul>
<input type="hidden" id="periodo" name="id" value="">
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<script src="./js/datalist.js"></script>
<script defer>
setDatalist('#periodo', <?php echo $user->periodo; ?>)
makeRequiredDatalist("#periodo", true);
$(document).on('click', '#dlPeriodo ul li:not(.not-selectable)', function () {
$('#formaPeriodo').submit();
});
</script>

View File

@@ -1,63 +1,63 @@
<?php
require_once ($ruta ?? "./") . "vendor/autoload.php";
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
use \SeinopSys\PostgresDb;
# Connect to the database
try {
// Postgres
$pdo = new PDO("pgsql:host=" . $_ENV['DB_HOST'] . ";dbname=" . $_ENV['DB_NAME'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db = new PostgresDb();
$db->setConnection($pdo);
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// check recursivelly if the array has only empty strings
function is_response_empty($array)
{
foreach ($array as $value) {
if (is_array($value)) {
if (!is_response_empty($value)) {
return false;
}
} else {
if (!empty($value)) {
return false;
}
}
}
return true;
}
// SQL function
function query(string $sql, array $params = null, bool $single = true)
{
global $pdo;
try {
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$response = $single ? $stmt->fetch(PDO::FETCH_ASSOC) : $stmt->fetchAll(PDO::FETCH_ASSOC);
return $response;
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
return false;
} finally {
$stmt->closeCursor();
$stmt = null;
}
}
function queryAll(string $sql, array $params = null)
{
return query($sql, $params, false);
}
function toSQLArray(array $array): string
{
return sprintf("{%s}", implode(", ", $array));
}
<?php
require_once ($ruta ?? "./") . "vendor/autoload.php";
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
use \SeinopSys\PostgresDb;
# Connect to the database
try {
// Postgres
$pdo = new PDO("pgsql:host=" . $_ENV['DB_HOST'] . ";dbname=" . $_ENV['DB_NAME'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db = new PostgresDb();
$db->setConnection($pdo);
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// check recursivelly if the array has only empty strings
function is_response_empty($array)
{
foreach ($array as $value) {
if (is_array($value)) {
if (!is_response_empty($value)) {
return false;
}
} else {
if (!empty($value)) {
return false;
}
}
}
return true;
}
// SQL function
function query(string $sql, array $params = null, bool $single = true)
{
global $pdo;
try {
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$response = $single ? $stmt->fetch(PDO::FETCH_ASSOC) : $stmt->fetchAll(PDO::FETCH_ASSOC);
return $response;
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
return false;
} finally {
$stmt->closeCursor();
$stmt = null;
}
}
function queryAll(string $sql, array $params = null)
{
return query($sql, $params, false);
}
function toSQLArray(array $array): string
{
return sprintf("{%s}", implode(", ", $array));
}

View File

@@ -1,165 +1,165 @@
<?php
require_once "../vendor/autoload.php";
require_once "../include/bd_pdo.php";
$columnas = array(
"SALÓN",
"GRUPO",
"CLAVE",
"DOCENTE",
"MATERIA",
"LUNES",
"MARTES",
"MIÉRCOLES",
"JUEVES",
"VIERNES",
"SÁBADO",
"DURACIÓN",
);
$cl = ['salon', 'grupo', 'clave', 'maestro', 'materia',];
define('HORARIO', 5);
define('COLUMNA_MAXIMA', chr(count($columnas) + ord('A') - 1));
function columna_nombre(string $columna): array
{
$nombre = "";
$datos_nombre = explode(" ", str_replace(array("\n", chr(10), chr(13)), " ", trim(preg_replace('/_x([0-9a-fA-F]{4})_/', ' ', $columna))));
$temp_nombre = explode(".", $datos_nombre[0]);
if (count($temp_nombre) > 1) {
$nombre .= $temp_nombre[1] . " ";
$grado = $temp_nombre[0] . ".";
array_shift($datos_nombre);
} else
$grado = strpos($datos_nombre[0], ".") !== false ? array_shift($datos_nombre) : null;
$email = strpos($columna, "@") !== false ? array_pop($datos_nombre) : null;
$nombre .= implode(" ", $datos_nombre);
return array(
"grado" => $grado,
"nombre" => trim($nombre),
"correo" => $email,
);
}
###
function validar_columnas(object $sheet): void
{
global $columnas;
$diff = array_diff(array_map(fn ($col) => trim($col), get_columns($sheet)), $columnas);
#array clean
if (!empty($diff)) {
$diff = array_filter($diff, fn ($col) => !empty($col));
throw new Exception("Error en el formato del archivo: " . (empty($diff) ? "Columnas vacías" : "Columnas incorrectas: [" . implode(", ", $diff) . "]"));
}
}
###
function get_columns(object $sheet)
{
global $columnas;
$columns = array();
foreach ($sheet->getRowIterator(1, 1) as $row)
foreach ($row->getCellIterator() as $index => $cell) {
$columns[$index] = mb_strtoupper($cell->getValue() ?? "");
if ($index == COLUMNA_MAXIMA) break;
}
return $columns;
}
###
function foreach_sheet(object $workbook, callable $callback = null): void
{
$sheets = $workbook->getSheetNames();
// validate columns
foreach ($sheets as $sheet) {
$worksheet = $workbook->getSheetByName($sheet);
validar_columnas($worksheet);
foreach_register($worksheet, $callback, $sheet);
}
}
###
function foreach_register(object $worksheet, callable $callback = null, string $sheet): void
{
foreach ($worksheet->getRowIterator(2) as $key => $row) {
$row_data = array();
foreach ($row->getCellIterator() as $index => $cell) {
$row_data[] = str_replace(' ', '', $cell->getValue() ?? "");
if ($index == COLUMNA_MAXIMA) break;
}
if ($callback !== null) {
$callback($row_data, $key, $sheet);
}
}
}
function horario(array &$row, int $fila, string $sheet): string
{
global $cl, $db;
date_default_timezone_set('UTC');
$horario_tostring = "";
for ($i = HORARIO; $i < count($row) - 1; $i++) {
// echo $row[$i] . " $i\n";
if (!empty(trim($row[$i] ?? ""))) {
$row[$i] = str_replace(array(" -", "- ", " - "), "-", $row[$i]);
$separar_por_espacios = EXPLODE(" ", trim(preg_replace('!\s+!', ' ', $row[$i])));
foreach ($separar_por_espacios as $horario) {
$hora = // if string includes : then is string else is excel date
(strpos($horario, ":") === false)
? \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($horario)->format('H:i')
: preg_replace('/[^0-9:]/', '', str_replace('.', ':', trim((strpos($horario, "-") !== false) ? explode("-", $horario)[0] : $horario)));
if (
$hora > "22:00" || $hora < "07:00" || explode(":", $hora)[1] % 15 !== 0
) {
throw new Exception("Error en el formato del archivo: Hora incorrecta [$hora] en la fila $fila, hoja $sheet.");
}
$duración = end($row);
if ($duración <= 180 and $duración >= 30 and $duración % 15 == 0)
$bloques = $duración / 15;
else if ($duración <= 3 and $duración >= 0.5)
$bloques = $duración * 60 / 15;
else
throw new Exception("Error en el formato del archivo: Duración [$duración] incorrecta en la fila $fila, hoja $sheet.");
$duraciónID = $db->where("duracion_bloques", $bloques)->get("duracion", 1, "duracion_id")[0]["duracion_id"];
$horario_tostring .= ($i - 4) . ",$hora,$duraciónID;";
}
}
}
$row = array_combine($cl, array_intersect_key($row, array_keys($cl)));
$horario_tostring = substr($horario_tostring, 0, -1);
if (empty($horario_tostring))
throw new Exception("Error en el formato del archivo: No se encontró horario en la fila $fila, hoja $sheet.");
return $horario_tostring;
}
function validar_registro(array $row, int $fila): void
{
$tiene_horario = false;
for ($i = 0; $i < HORARIO - 1; $i++)
if (empty(trim($row[$i])))
throw new Exception("Error faltan datos en la fila $fila de la hoja");
for ($i = HORARIO; $i < COLUMNA_MAXIMA; $i++)
if ($tiene_horario = !empty($row[$i]))
break;
if (!$tiene_horario)
throw new Exception("Error en el formato del archivo: No se encontró horario en la fila $fila.");
}
function renglón_vacío(array $row)
{
foreach ($row as $columna)
if (!empty($columna))
return false;
return true;
}
<?php
require_once "../vendor/autoload.php";
require_once "../include/bd_pdo.php";
$columnas = array(
"SALÓN",
"GRUPO",
"CLAVE",
"DOCENTE",
"MATERIA",
"LUNES",
"MARTES",
"MIÉRCOLES",
"JUEVES",
"VIERNES",
"SÁBADO",
"DURACIÓN",
);
$cl = ['salon', 'grupo', 'clave', 'maestro', 'materia',];
define('HORARIO', 5);
define('COLUMNA_MAXIMA', chr(count($columnas) + ord('A') - 1));
function columna_nombre(string $columna): array
{
$nombre = "";
$datos_nombre = explode(" ", str_replace(array("\n", chr(10), chr(13)), " ", trim(preg_replace('/_x([0-9a-fA-F]{4})_/', ' ', $columna))));
$temp_nombre = explode(".", $datos_nombre[0]);
if (count($temp_nombre) > 1) {
$nombre .= $temp_nombre[1] . " ";
$grado = $temp_nombre[0] . ".";
array_shift($datos_nombre);
} else
$grado = strpos($datos_nombre[0], ".") !== false ? array_shift($datos_nombre) : null;
$email = strpos($columna, "@") !== false ? array_pop($datos_nombre) : null;
$nombre .= implode(" ", $datos_nombre);
return array(
"grado" => $grado,
"nombre" => trim($nombre),
"correo" => $email,
);
}
###
function validar_columnas(object $sheet): void
{
global $columnas;
$diff = array_diff(array_map(fn ($col) => trim($col), get_columns($sheet)), $columnas);
#array clean
if (!empty($diff)) {
$diff = array_filter($diff, fn ($col) => !empty($col));
throw new Exception("Error en el formato del archivo: " . (empty($diff) ? "Columnas vacías" : "Columnas incorrectas: [" . implode(", ", $diff) . "]"));
}
}
###
function get_columns(object $sheet)
{
global $columnas;
$columns = array();
foreach ($sheet->getRowIterator(1, 1) as $row)
foreach ($row->getCellIterator() as $index => $cell) {
$columns[$index] = mb_strtoupper($cell->getValue() ?? "");
if ($index == COLUMNA_MAXIMA) break;
}
return $columns;
}
###
function foreach_sheet(object $workbook, callable $callback = null): void
{
$sheets = $workbook->getSheetNames();
// validate columns
foreach ($sheets as $sheet) {
$worksheet = $workbook->getSheetByName($sheet);
validar_columnas($worksheet);
foreach_register($worksheet, $callback, $sheet);
}
}
###
function foreach_register(object $worksheet, callable $callback = null, string $sheet): void
{
foreach ($worksheet->getRowIterator(2) as $key => $row) {
$row_data = array();
foreach ($row->getCellIterator() as $index => $cell) {
$row_data[] = str_replace(' ', '', $cell->getValue() ?? "");
if ($index == COLUMNA_MAXIMA) break;
}
if ($callback !== null) {
$callback($row_data, $key, $sheet);
}
}
}
function horario(array &$row, int $fila, string $sheet): string
{
global $cl, $db;
date_default_timezone_set('UTC');
$horario_tostring = "";
for ($i = HORARIO; $i < count($row) - 1; $i++) {
// echo $row[$i] . " $i\n";
if (!empty(trim($row[$i] ?? ""))) {
$row[$i] = str_replace(array(" -", "- ", " - "), "-", $row[$i]);
$separar_por_espacios = EXPLODE(" ", trim(preg_replace('!\s+!', ' ', $row[$i])));
foreach ($separar_por_espacios as $horario) {
$hora = // if string includes : then is string else is excel date
(strpos($horario, ":") === false)
? \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($horario)->format('H:i')
: preg_replace('/[^0-9:]/', '', str_replace('.', ':', trim((strpos($horario, "-") !== false) ? explode("-", $horario)[0] : $horario)));
if (
$hora > "22:00" || $hora < "07:00" || explode(":", $hora)[1] % 15 !== 0
) {
throw new Exception("Error en el formato del archivo: Hora incorrecta [$hora] en la fila $fila, hoja $sheet.");
}
$duración = end($row);
if ($duración <= 180 and $duración >= 30 and $duración % 15 == 0)
$bloques = $duración / 15;
else if ($duración <= 3 and $duración >= 0.5)
$bloques = $duración * 60 / 15;
else
throw new Exception("Error en el formato del archivo: Duración [$duración] incorrecta en la fila $fila, hoja $sheet.");
$duraciónID = $db->where("duracion_bloques", $bloques)->get("duracion", 1, "duracion_id")[0]["duracion_id"];
$horario_tostring .= ($i - 4) . ",$hora,$duraciónID;";
}
}
}
$row = array_combine($cl, array_intersect_key($row, array_keys($cl)));
$horario_tostring = substr($horario_tostring, 0, -1);
if (empty($horario_tostring))
throw new Exception("Error en el formato del archivo: No se encontró horario en la fila $fila, hoja $sheet.");
return $horario_tostring;
}
function validar_registro(array $row, int $fila): void
{
$tiene_horario = false;
for ($i = 0; $i < HORARIO - 1; $i++)
if (empty(trim($row[$i])))
throw new Exception("Error faltan datos en la fila $fila de la hoja");
for ($i = HORARIO; $i < COLUMNA_MAXIMA; $i++)
if ($tiene_horario = !empty($row[$i]))
break;
if (!$tiene_horario)
throw new Exception("Error en el formato del archivo: No se encontró horario en la fila $fila.");
}
function renglón_vacío(array $row)
{
foreach ($row as $columna)
if (!empty($columna))
return false;
return true;
}

View File

@@ -1,10 +1,10 @@
<?php
namespace utils;
function simpify_string(string $string): string
{
$string = mb_strtolower($string);
$string_without_accents = str_replace(array('á', 'é', 'í', 'ó', 'ú', 'ñ'), array('a', 'e', 'i', 'o', 'u', 'n'), $string);
$string_without_spaces = str_replace(' ', '', $string_without_accents);
return $string_without_spaces;
}
<?php
namespace utils;
function simpify_string(string $string): string
{
$string = mb_strtolower($string);
$string_without_accents = str_replace(array('á', 'é', 'í', 'ó', 'ú', 'ñ'), array('a', 'e', 'i', 'o', 'u', 'n'), $string);
$string_without_spaces = str_replace(' ', '', $string_without_accents);
return $string_without_spaces;
}

Binary file not shown.

View File

@@ -1,14 +1,14 @@
<?php
/*
* Headers apra evitar caché de la página
*/
//no index
header("X-Robots-Tag: noindex, nofollow", true);
//no caché
header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
date_default_timezone_set('America/Mexico_City');
<?php
/*
* Headers apra evitar caché de la página
*/
//no index
header("X-Robots-Tag: noindex, nofollow", true);
//no caché
header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
date_default_timezone_set('America/Mexico_City');
?>

Some files were not shown because too many files have changed in this diff Show More