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