123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?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
- $facultad_id = $user->facultad['facultad_id'] ?? -1;
- $carreras = array_map(fn($c) => $c['carrera_id'], $db->where('facultad_id', $facultad_id)->get(tableName: 'carrera', columns: 'carrera_id'));
- $puestos = array_map(
- fn($p) => array(
- ...$p,
- 'materias' => $db->where('puesto_id', $p['puesto_id'])
- ->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT')
- ->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]),
- 'encargado' => $db->where('puesto_id', $p['puesto_id'])
- ->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT')
- ->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']),
- ),
- $db->orderBy('puesto.nombre', 'desc')
- ->where('facultad_id', $facultad_id)
- ->get(tableName: 'puesto', numRows: count($carreras), columns: 'puesto_id, nombre'),
- );
- echo json_encode($puestos);
- break;
- case 'POST':
- $raw_input = file_get_contents('php://input');
- $input_data = json_decode($raw_input, true);
- if (!$input_data || !isset($input_data['puesto_nombre'])) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(['error' => 'Datos inválidos']);
- exit();
- }
- $puesto = $db->insert('puesto', [
- 'nombre' => $input_data['puesto_nombre'],
- 'facultad_id' => $user->facultad['facultad_id'],
- ], ['puesto_id', 'nombre', 'facultad_id']);
- echo json_encode(
- array(
- ...$puesto,
- 'materias' => [],
- 'encargado' => null,
- ),
- );
- break;
- case 'PUT':
- $raw_input = file_get_contents('php://input');
- $input_data = json_decode($raw_input, true);
- if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(['error' => 'Datos inválidos']);
- exit();
- }
- $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia');
- $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario');
- foreach ($input_data['materias'] as $materia_id) {
- $db->insert('puesto_materia', [
- 'puesto_id' => $input_data['puesto_id'],
- 'materia_id' => $materia_id,
- ]);
- }
- if (isset($input_data['usuario_id']))
- $db->insert('puesto_usuario', [
- 'puesto_id' => $input_data['puesto_id'],
- 'usuario_id' => $input_data['usuario_id'],
- ]);
- echo json_encode(['msg' => 'Puesto actualizado exitosamente']);
- break;
- case 'DELETE':
- $raw_input = file_get_contents('php://input');
- $input_data = json_decode($raw_input, true);
- if (!$input_data || !isset($input_data['puesto_id'])) {
- header('HTTP/1.1 400 Bad Request');
- echo json_encode(['error' => 'Datos inválidos']);
- exit();
- }
- $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto');
- echo json_encode(['msg' => 'Puesto eliminado exitosamente']);
- 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()
- ]);
- }
|