403Webshell
Server IP : 127.0.0.1  /  Your IP : 216.73.216.109
Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10
System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64
User : SERVERWEB ( 0)
PHP Version : 8.1.10
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : OFF |  Perl : OFF |  Python : OFF |  Sudo : OFF |  Pkexec : OFF
Directory :  C:/laragon/www/modules/unidades/assets/redMonica/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : C:/laragon/www/modules/unidades/assets/redMonica/data.php
<?php
// Enable all error reporting
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

ob_start();
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

$host = "200.58.81.34";
$port = "5443";
$dbname = "db_provegaq";
$user = "provegaq";
$password = "provegaq123";

function outputFallbackData($message = 'Datos no disponibles temporalmente') {
    $today = date('Y-m-d');
    $categories = [
        [
            'idCategoriaAire' => 0,
            'uuid' => 'fallback-sin-datos',
            'valorMinimo' => 0,
            'valorMaximo' => 500,
            'categoria' => 'Sin datos',
            'descripcion' => $message,
            'color' => '#cccccc',
            'norma' => '',
            'recomendacion' => 'Intente nuevamente mas tarde.',
            'activo' => false,
            'estado' => false
        ]
    ];

    ob_end_clean();
    echo json_encode([
        'fecha' => $today,
        'ica' => [
            'valor' => 0,
            'clasificacion' => 'Sin datos',
            'color' => '#cccccc',
            'descripcion' => $message,
            'recomendaciones_gral' => 'Intente nuevamente mas tarde.',
            'grupos_riesgo' => []
        ],
        'monitoringDataList' => [],
        'indicesList' => $categories,
        'riskGroupsList' => [],
        'allCategorias' => $categories,
        'allGroups' => []
    ]);
    exit();
}

// $host = "localhost";
// $dbname = "db_provegaq"; 
// $user = "postgres";
// $password = "ADMIN"; 

$testConnection = @fsockopen($host, $port, $errno, $errstr, 2);
if (!$testConnection) {
    outputFallbackData('No se pudo conectar con la base de datos de monitoreo.');
}
fclose($testConnection);

try {
    $dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_TIMEOUT, 30);
    
    // Test the connection with a simple query
    $testQuery = $pdo->query("SELECT 1 as test");
    if (!$testQuery) {
        throw new Exception("Test query failed");
    }
    
} catch (PDOException $e) {
    outputFallbackData('No se pudo obtener la informacion de calidad del aire.');
} catch (Exception $e) {
    outputFallbackData('No se pudo obtener la informacion de calidad del aire.');
}

// Get all monitoring data with station and contaminant information
$sqlMonitoringData = "
    SELECT 
        ma.id_medicion_aire,
        ma.uuid,
        ma.fecha,
        ma.mes,
        ma.dia,
        ma.valor,
        ma.estado,
        e.id_estacion,
        e.uuid as estacion_uuid,
        e.nombre as estacion_nombre,
        e.tipo as estacion_tipo,
        e.ubicacion as estacion_ubicacion,
        e.descripcion as estacion_descripcion,
        c.id_contaminante,
        c.uuid as contaminante_uuid,
        c.nombre as contaminante_nombre,
        c.descripcion as contaminante_descripcion
    FROM medicion_aire ma
    JOIN estaciones e ON ma.id_estacion = e.id_estacion
    JOIN contaminantes c ON ma.id_contaminante = c.id_contaminante
    WHERE ma.estado = false AND e.estado = false AND c.estado = false
    ORDER BY ma.fecha DESC
";
$stmtMonitoringData = $pdo->query($sqlMonitoringData);
$monitoringDataList = $stmtMonitoringData->fetchAll(PDO::FETCH_ASSOC);

// Get all categories
$sqlAllCategorias = "SELECT * FROM categoria_aire WHERE estado = false ORDER BY valor_minimo ASC";
$stmtAllCategorias = $pdo->query($sqlAllCategorias);
$allCategorias = $stmtAllCategorias->fetchAll(PDO::FETCH_ASSOC);

// Get all risk groups with category information
$sqlAllGroups = "
    SELECT 
        g.*, 
        c.categoria,
        c.valor_minimo,
        c.valor_maximo,
        c.color,
        c.descripcion as categoria_descripcion
    FROM grupos_riesgo g
    JOIN categoria_aire c ON g.id_categoria_aire = c.id_categoria_aire
    WHERE g.estado = false AND c.estado = false
    ORDER BY c.valor_minimo ASC, g.grupo ASC
";
$stmtAllGroups = $pdo->query($sqlAllGroups);
$allGroupsRaw = $stmtAllGroups->fetchAll(PDO::FETCH_ASSOC);

// Organize groups by category
$allGroups = [];
foreach ($allGroupsRaw as $grp) {
    $allGroups[$grp['categoria']][] = $grp;
}

// Get latest measurement for dashboard display
$sqlLast = "
    SELECT ma.fecha, ma.valor 
    FROM medicion_aire ma
    WHERE ma.estado = false 
    ORDER BY ma.fecha DESC, ma.id_medicion_aire DESC 
    LIMIT 1
";
$stmtFecha = $pdo->query($sqlLast);
$rowFecha = $stmtFecha->fetch(PDO::FETCH_ASSOC);

if ($rowFecha) {
    $ultima_fecha = $rowFecha['fecha'];
    $ultima_fecha = date('Y-m-d', strtotime($ultima_fecha));
    $ica_value = floatval($rowFecha['valor']);
} else {
    $ultima_fecha = date('Y-m-d');
    $ica_value = 0;
}

// Get category for the latest ICA value
$sqlCategoria = "
    SELECT * FROM categoria_aire
    WHERE :ica_value BETWEEN valor_minimo::DECIMAL AND valor_maximo::DECIMAL 
    AND estado = false
    LIMIT 1
";
$stmtCategoria = $pdo->prepare($sqlCategoria);
$stmtCategoria->bindValue(':ica_value', $ica_value, PDO::PARAM_STR);
$stmtCategoria->execute();
$categoria = $stmtCategoria->fetch(PDO::FETCH_ASSOC);

if (!$categoria) {
    // Use default category if none found
    $categoria = [
        'categoria' => 'Sin datos',
        'color' => '#cccccc',
        'descripcion' => 'No hay datos disponibles',
        'recomendacion' => 'Esperando datos de medición'
    ];
}

// Get risk groups for the current category
$riesgo = [];
if ($categoria && isset($categoria['id_categoria_aire'])) {
    $sqlRiesgo = "
        SELECT g.grupo, g.recomendacion 
        FROM grupos_riesgo g
        WHERE g.id_categoria_aire = :id_categoria AND g.estado = false
    ";
    $stmtRiesgo = $pdo->prepare($sqlRiesgo);
    $stmtRiesgo->execute(['id_categoria' => $categoria['id_categoria_aire']]);
    $riesgo = $stmtRiesgo->fetchAll(PDO::FETCH_ASSOC);
}

// Process monitoring data for the frontend
$processedMonitoringData = [];
foreach ($monitoringDataList as $data) {
    $processedMonitoringData[] = [
        'idMedicionAire' => $data['id_medicion_aire'],
        'uuid' => $data['uuid'],
        'fecha' => $data['fecha'],
        'mes' => $data['mes'],
        'dia' => intval($data['dia']),
        'valor' => floatval($data['valor']),
        'estado' => $data['estado'],
        'estacionDto' => [
            'idEstacion' => $data['id_estacion'],
            'uuid' => $data['estacion_uuid'],
            'nombre' => $data['estacion_nombre'],
            'tipo' => $data['estacion_tipo'],
            'ubicacion' => $data['estacion_ubicacion'],
            'descripcion' => $data['estacion_descripcion']
        ],
        'contaminanteDto' => [
            'idContaminante' => $data['id_contaminante'],
            'uuid' => $data['contaminante_uuid'],
            'nombre' => $data['contaminante_nombre'],
            'descripcion' => $data['contaminante_descripcion']
        ]
    ];
}

// Process categories for the frontend
$processedCategories = [];
foreach ($allCategorias as $cat) {
    $processedCategories[] = [
        'idCategoriaAire' => $cat['id_categoria_aire'],
        'uuid' => $cat['uuid'],
        'valorMinimo' => intval($cat['valor_minimo']),
        'valorMaximo' => intval($cat['valor_maximo']),
        'categoria' => $cat['categoria'],
        'descripcion' => $cat['descripcion'],
        'color' => $cat['color'],
        'norma' => $cat['norma'],
        'recomendacion' => $cat['recomendacion'],
        'activo' => $cat['activo'],
        'estado' => $cat['estado']
    ];
}

// Process risk groups for the frontend
$processedRiskGroups = [];
foreach ($allGroupsRaw as $group) {
    $processedRiskGroups[] = [
        'idGrupoRiesgo' => $group['id_grupo_riesgo'],
        'uuid' => $group['uuid'],
        'grupo' => $group['grupo'],
        'recomendacion' => $group['recomendacion'],
        'estado' => $group['estado'],
        'categoriaAireDto' => [
            'idCategoriaAire' => $group['id_categoria_aire'],
            'categoria' => $group['categoria'],
            'valorMinimo' => intval($group['valor_minimo']),
            'valorMaximo' => intval($group['valor_maximo']),
            'color' => $group['color'],
            'descripcion' => $group['categoria_descripcion']
        ]
    ];
}

$response = [
    "fecha" => $ultima_fecha,
    "ica" => [
        "valor" => $ica_value,
        "clasificacion" => $categoria['categoria'],
        "color" => $categoria['color'],
        "descripcion" => $categoria['descripcion'],
        "recomendaciones_gral" => $categoria['recomendacion'],
        "grupos_riesgo" => $riesgo
    ],
    "monitoringDataList" => $processedMonitoringData,
    "indicesList" => $processedCategories,
    "riskGroupsList" => $processedRiskGroups,
    "allCategorias" => $processedCategories,
    "allGroups" => $allGroups
];

ob_end_clean();
echo json_encode($response);
exit();

Youez - 2016 - github.com/yon3zu
LinuXploit