[ '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; }