123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?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()
- ]);
- }
|