puesto.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
  3. header('Content-Type: application/json');
  4. if (!Login::is_logged()) {
  5. header('HTTP/1.1 401 Unauthorized');
  6. echo json_encode(['error' => 'No se ha iniciado sesión']);
  7. exit();
  8. }
  9. $user = Login::get_user();
  10. try {
  11. switch ($_SERVER['REQUEST_METHOD']) {
  12. case 'GET':
  13. // Fetch all puestos
  14. $facultad_id = $user->facultad['facultad_id'] ?? -1;
  15. $carreras = array_map(fn($c) => $c['carrera_id'], $db->where('facultad_id', $facultad_id)->get(tableName: 'carrera', columns: 'carrera_id'));
  16. $puestos = array_map(
  17. fn($p) => array(
  18. ...$p,
  19. 'materias' => $db->where('puesto_id', $p['puesto_id'])
  20. ->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT')
  21. ->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]),
  22. 'encargado' => $db->where('puesto_id', $p['puesto_id'])
  23. ->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT')
  24. ->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']),
  25. ),
  26. $db->orderBy('puesto.nombre', 'desc')
  27. ->where('facultad_id', $facultad_id)
  28. ->get(tableName: 'puesto', numRows: count($carreras), columns: 'puesto_id, nombre'),
  29. );
  30. echo json_encode($puestos);
  31. break;
  32. case 'POST':
  33. $raw_input = file_get_contents('php://input');
  34. $input_data = json_decode($raw_input, true);
  35. if (!$input_data || !isset($input_data['puesto_nombre'])) {
  36. header('HTTP/1.1 400 Bad Request');
  37. echo json_encode(['error' => 'Datos inválidos']);
  38. exit();
  39. }
  40. $puesto = $db->insert('puesto', [
  41. 'nombre' => $input_data['puesto_nombre'],
  42. 'facultad_id' => $user->facultad['facultad_id'],
  43. ], ['puesto_id', 'nombre', 'facultad_id']);
  44. echo json_encode(
  45. array(
  46. ...$puesto,
  47. 'materias' => [],
  48. 'encargado' => null,
  49. ),
  50. );
  51. break;
  52. case 'PUT':
  53. $raw_input = file_get_contents('php://input');
  54. $input_data = json_decode($raw_input, true);
  55. if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) {
  56. header('HTTP/1.1 400 Bad Request');
  57. echo json_encode(['error' => 'Datos inválidos']);
  58. exit();
  59. }
  60. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia');
  61. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario');
  62. foreach ($input_data['materias'] as $materia_id) {
  63. $db->insert('puesto_materia', [
  64. 'puesto_id' => $input_data['puesto_id'],
  65. 'materia_id' => $materia_id,
  66. ]);
  67. }
  68. if (isset($input_data['usuario_id']))
  69. $db->insert('puesto_usuario', [
  70. 'puesto_id' => $input_data['puesto_id'],
  71. 'usuario_id' => $input_data['usuario_id'],
  72. ]);
  73. echo json_encode(['msg' => 'Puesto actualizado exitosamente']);
  74. break;
  75. case 'DELETE':
  76. $raw_input = file_get_contents('php://input');
  77. $input_data = json_decode($raw_input, true);
  78. if (!$input_data || !isset($input_data['puesto_id'])) {
  79. header('HTTP/1.1 400 Bad Request');
  80. echo json_encode(['error' => 'Datos inválidos']);
  81. exit();
  82. }
  83. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto');
  84. echo json_encode(['msg' => 'Puesto eliminado exitosamente']);
  85. break;
  86. default:
  87. header('HTTP/1.1 405 Method Not Allowed');
  88. echo json_encode(['error' => 'Método no permitido']);
  89. break;
  90. }
  91. } catch (PDOException $e) {
  92. echo json_encode([
  93. 'error' => $e->getMessage(),
  94. 'query' => $db->getLastQuery(),
  95. 'exception' => $e->getTraceAsString()
  96. ]);
  97. }