131 lines
5.3 KiB
PHP
131 lines
5.3 KiB
PHP
<?php
|
|
// Consolidated puertos API: handles get_puertos, update_puertos, asignar_puertos
|
|
// Expects $route from api/index.php and bootstrap loaded
|
|
|
|
$archivoPuertos = __DIR__ . '/../data/puertos.json';
|
|
|
|
// Compatibilidad legacy: permitir acceso directo a /api/api_puertos.php?chipid=<chipid>
|
|
// cuando no se pasa por el router (no existe $route).
|
|
if (!isset($route)) {
|
|
// Cargar bootstrap para CORS/headers JSON si está disponible
|
|
$bootstrap = __DIR__ . '/bootstrap.php';
|
|
if (file_exists($bootstrap)) {
|
|
require_once $bootstrap;
|
|
} else {
|
|
// En caso extremo, asegurar Content-Type JSON
|
|
if (!headers_sent()) {
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
}
|
|
}
|
|
|
|
$puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
|
|
if (!isset($_GET['chipid'])) {
|
|
echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]);
|
|
exit;
|
|
}
|
|
$chipid = $_GET['chipid'];
|
|
if (is_array($puertos) && array_key_exists($chipid, $puertos)) {
|
|
echo json_encode($puertos[$chipid]);
|
|
} else {
|
|
echo json_encode(['error' => 'ChipID no encontrado']);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
switch ($route) {
|
|
case 'get_puertos': {
|
|
$puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
|
|
if (!isset($_GET['chipid'])) {
|
|
echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]);
|
|
break;
|
|
}
|
|
$chipid = $_GET['chipid'];
|
|
if (array_key_exists($chipid, $puertos)) {
|
|
echo json_encode($puertos[$chipid]);
|
|
} else {
|
|
echo json_encode(['error' => 'ChipID no encontrado']);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 'asignar_puertos': {
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
echo json_encode(['success' => false, 'message' => 'Método no permitido']);
|
|
break;
|
|
}
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
if (!is_array($data) || empty($data)) {
|
|
echo json_encode(['success' => false, 'message' => 'Datos inválidos']);
|
|
break;
|
|
}
|
|
$puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
|
|
if (!is_array($puertos)) {
|
|
echo json_encode(['success' => false, 'message' => 'Error al leer el archivo de puertos']);
|
|
break;
|
|
}
|
|
foreach ($data as $chipid => $config) {
|
|
if (!isset($puertos[$chipid])) { $puertos[$chipid] = []; }
|
|
foreach ($config as $puerto => $valores) {
|
|
if (!is_array($valores)) continue;
|
|
$puertos[$chipid][$puerto] = [
|
|
'gpio' => $valores['gpio'],
|
|
'disp' => $valores['disp'] ?? null,
|
|
'modo' => $valores['modo'] ?? 'INPUT_PULLUP',
|
|
'notas' => $valores['notas'] ?? '',
|
|
];
|
|
}
|
|
$date = new DateTime('now', new DateTimeZone('America/Argentina/Buenos_Aires'));
|
|
$puertos[$chipid]['update'] = $date->format('Y-m-d H:i:s');
|
|
}
|
|
if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) {
|
|
echo json_encode(['success' => true, 'message' => 'Dispositivo actualizado con éxito']);
|
|
} else {
|
|
echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 'update_puertos': {
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
echo json_encode(['success' => false, 'message' => 'Método no permitido']);
|
|
break;
|
|
}
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
if (!is_array($data) || empty($data)) {
|
|
echo json_encode(['success' => false, 'message' => 'Datos inválidos']);
|
|
break;
|
|
}
|
|
$puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
|
|
foreach ($data as $chipid => $puertosRecibidos) {
|
|
if (!isset($puertos[$chipid])) { continue; }
|
|
foreach ($puertosRecibidos as $puerto => $valores) {
|
|
if ($puerto === 'update') continue;
|
|
if (isset($puertos[$chipid][$puerto])) {
|
|
if (!is_array($valores)) {
|
|
continue;
|
|
}
|
|
if (array_key_exists('disp', $valores)) {
|
|
$puertos[$chipid][$puerto]['disp'] = $valores['disp'];
|
|
}
|
|
if (array_key_exists('notas', $valores)) {
|
|
$puertos[$chipid][$puerto]['notas'] = $valores['notas'];
|
|
}
|
|
if (array_key_exists('modo', $valores)) {
|
|
$puertos[$chipid][$puerto]['modo'] = $valores['modo'];
|
|
}
|
|
}
|
|
}
|
|
$puertos[$chipid]['update'] = date('Y-m-d H:i:s');
|
|
}
|
|
if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) {
|
|
echo json_encode(['success' => true, 'message' => 'Puertos actualizados con éxito']);
|
|
} else {
|
|
echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']);
|
|
}
|
|
break;
|
|
}
|
|
|
|
default:
|
|
json_error('Ruta no soportada en api_puertos', 404);
|
|
}
|