Stable
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
]) ?>
|
||||
@@ -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",
|
||||
]));
|
||||
|
||||
@@ -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",
|
||||
]));
|
||||
@@ -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",
|
||||
]) ?>
|
||||
|
||||
@@ -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(),
|
||||
]));
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
]));
|
||||
|
||||
@@ -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]));
|
||||
|
||||
@@ -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;
|
||||
@@ -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,
|
||||
]); ?>
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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)";
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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"]}");
|
||||
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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
|
||||
]);
|
||||
@@ -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";
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
]));
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
?>
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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();
|
||||
?>
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
?>
|
||||
@@ -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">×</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:15–8: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">×</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:15–8: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>
|
||||
797
auditoría.php
797
auditoría.php
@@ -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">×</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">×</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">×</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">×</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>
|
||||
528
avisos.php
528
avisos.php
@@ -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">«</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">»</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">«</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">»</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>
|
||||
868
avisos_crear.php
868
avisos_crear.php
@@ -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">×</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">×</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">×</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">×</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>
|
||||
@@ -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">×</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">×</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">×</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">×</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
114
base.php
@@ -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>
|
||||
276
bypass.php
276
bypass.php
@@ -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>
|
||||
1624
carreras.php
1624
carreras.php
File diff suppressed because it is too large
Load Diff
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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;}
|
||||
|
||||
}
|
||||
|
||||
18
css/custominputfile.min.css
vendored
18
css/custominputfile.min.css
vendored
@@ -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}
|
||||
378
css/richtext.css
378
css/richtext.css
@@ -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
468
demo.html
@@ -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>
|
||||
@@ -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">×</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">×</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>
|
||||
@@ -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;
|
||||
}
|
||||
?>
|
||||
@@ -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>
|
||||
564
facultades.php
564
facultades.php
@@ -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">×</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">×</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>
|
||||
@@ -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>
|
||||
@@ -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">
|
||||
@@ -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>
|
||||
@@ -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> -->
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
<? } ?>
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.
@@ -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
Reference in New Issue
Block a user