puesto.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. $puestos = array_map(
  16. fn($p) => array(
  17. ...$p,
  18. 'materias' => $db->where('puesto_id', $p['puesto_id'])
  19. ->join('puesto_materia', 'puesto_materia.materia_id = materia.materia_id', 'LEFT')
  20. ->get(tableName: 'materia', columns: ['materia.materia_id', 'materia_nombre', 'clave_materia',]),
  21. 'encargado' => $db->where('puesto_id', $p['puesto_id'])
  22. ->join('puesto_usuario', 'puesto_usuario.usuario_id = usuario.usuario_id', 'LEFT')
  23. ->getOne('usuario', ['usuario.usuario_id', 'usuario_nombre', 'usuario_clave']),
  24. ),
  25. $db->orderBy('puesto.nombre', 'desc')
  26. ->where('facultad_id', $facultad_id)
  27. ->get(tableName: 'puesto', columns: 'puesto_id, nombre'),
  28. );
  29. echo json_encode($puestos);
  30. break;
  31. case 'POST':
  32. $raw_input = file_get_contents('php://input');
  33. $input_data = json_decode($raw_input, true);
  34. if (!$input_data || !isset($input_data['puesto_nombre'])) {
  35. header('HTTP/1.1 400 Bad Request');
  36. echo json_encode(['error' => 'Datos inválidos']);
  37. exit();
  38. }
  39. $puesto = $db->insert('puesto', [
  40. 'nombre' => $input_data['puesto_nombre'],
  41. 'facultad_id' => $user->facultad['facultad_id'],
  42. ], ['puesto_id', 'nombre', 'facultad_id']);
  43. echo json_encode(
  44. array(
  45. ...$puesto,
  46. 'materias' => [],
  47. 'encargado' => null,
  48. ),
  49. );
  50. break;
  51. case 'PUT':
  52. $raw_input = file_get_contents('php://input');
  53. $input_data = json_decode($raw_input, true);
  54. if (!$input_data || !isset($input_data['puesto_id'], $input_data['materias'])) {
  55. header('HTTP/1.1 400 Bad Request');
  56. echo json_encode(['error' => 'Datos inválidos']);
  57. exit();
  58. }
  59. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_materia');
  60. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto_usuario');
  61. foreach ($input_data['materias'] as $materia_id) {
  62. $db->insert('puesto_materia', [
  63. 'puesto_id' => $input_data['puesto_id'],
  64. 'materia_id' => $materia_id,
  65. ]);
  66. }
  67. if (isset($input_data['usuario_id']))
  68. $db->insert('puesto_usuario', [
  69. 'puesto_id' => $input_data['puesto_id'],
  70. 'usuario_id' => $input_data['usuario_id'],
  71. ]);
  72. echo json_encode(['msg' => 'Puesto actualizado exitosamente']);
  73. break;
  74. case 'DELETE':
  75. $raw_input = file_get_contents('php://input');
  76. $input_data = json_decode($raw_input, true);
  77. if (!$input_data || !isset($input_data['puesto_id'])) {
  78. header('HTTP/1.1 400 Bad Request');
  79. echo json_encode(['error' => 'Datos inválidos']);
  80. exit();
  81. }
  82. $db->where('puesto_id', $input_data['puesto_id'])->delete('puesto');
  83. echo json_encode(['msg' => 'Puesto eliminado exitosamente']);
  84. break;
  85. default:
  86. header('HTTP/1.1 405 Method Not Allowed');
  87. echo json_encode(['error' => 'Método no permitido']);
  88. break;
  89. }
  90. } catch (PDOException $e) {
  91. echo json_encode([
  92. 'error' => $e->getMessage(),
  93. 'query' => $db->getLastQuery(),
  94. 'exception' => $e->getTraceAsString()
  95. ]);
  96. }