12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <?
- #input $_GET['id_espacio_sgu']
- $information = [
- 'GET' => [
- 'id_espacio_sgu',
- 'bloque_horario_id',
- ],
- ];
- #output rutas: [ ...ruta, salones: [{...salon}] ]
- header('Content-Type: application/json charset=utf-8');
- $ruta = "../";
- require_once "../class/c_login.php";
- // check method
- try {
- if ($_SERVER['REQUEST_METHOD'] === 'GET') {
- // check parameters
- array_walk($information['GET'], function ($value) {
- if (!array_key_exists($value, $_GET)) {
- http_response_code(400);
- echo json_encode(['error' => "$value is required"]);
- exit;
- }
- });
- // step 1: get subrutas
- $data = $db
- ->where('tiene_salones')
- ->where("{$_GET['id_espacio_sgu']} = ANY(id_espacio_sgu_array)")
- ->get('salon_view');
- // step 3: get horarios
- $data = array_map(
- fn($ruta) => array_merge(
- [
- 'horarios' => $db
- ->join('periodo', 'periodo.periodo_id = horario_view.periodo_id')
- ->join('bloque_horario', '(bloque_horario.hora_inicio, bloque_horario.hora_fin) OVERLAPS (horario_view.horario_hora, horario_view.horario_hora + horario_view.duracion)')
- ->join('salon_view', 'salon_view.salon_id = horario_view.salon_id')
- ->join('horario_profesor', 'horario_profesor.horario_id = horario_view.horario_id')
- ->join('profesor', 'profesor.profesor_id = horario_profesor.profesor_id')
- ->join('registro', '(registro.profesor_id, registro.horario_id, registro.registro_fecha_ideal) = (profesor.profesor_id, horario_view.horario_id, CURRENT_DATE)', 'LEFT')
- ->where('CURRENT_DATE BETWEEN periodo.periodo_fecha_inicio AND periodo.periodo_fecha_fin')
- ->where('horario_dia = EXTRACT(DOW FROM CURRENT_DATE)')
- ->where('bloque_horario.id', $_GET['bloque_horario_id'])
- ->where('id_espacio_padre', $ruta['id_espacio_sgu'])
- ->get('horario_view', null, '*, horario_view.horario_id, profesor.profesor_id'),
- ],
- $ruta
- ),
- $data
- );
- echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
- } else {
- http_response_code(405);
- echo json_encode(['error' => 'method not allowed']);
- exit;
- }
- } catch (PDOException $th) {
- http_response_code(500);
- echo json_encode([
- 'error' => $th->getMessage(),
- 'query' => $db->getLastQuery(),
- ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
- exit;
- } catch (Exception $th) {
- http_response_code(500);
- echo json_encode([
- 'error' => $th->getMessage(),
- ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
- exit;
- }
|