TransWar File Browser

Path: C:\

<?php
  ini_set('max_execution_time', 259200);
  ini_set('memory_limit', '-1');
  date_default_timezone_set('America/Sao_Paulo');

  // Recebe dados via POST (imagens base64 do Chart.js) ou GET (fluxo legado)
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Novo fluxo: receber imagens do Chart.js como base64
    $input = json_decode(file_get_contents('php://input'), true);

    $inicio    = $input['inicio'] ?? '';
    $hrini     = $input['horainicio'] ?? '';
    $fim       = $input['fim'] ?? '';
    $hrfim     = $input['horafim'] ?? '';
    $rt        = $input['rt'] ?? '';
    $min       = $input['min'] ?? '';
    $max       = $input['max'] ?? '';
    $graficoB64  = $input['grafico_base64'] ?? '';
    $grafico2B64 = $input['grafico2_base64'] ?? '';
    $media     = $input['media'] ?? 0;
    $minima    = $input['minima'] ?? 0;
    $maxima    = $input['maxima'] ?? 0;
    $Umedia    = $input['Umedia'] ?? 0;
    $Uminima   = $input['Uminima'] ?? 0;
    $Umaxima   = $input['Umaxima'] ?? 0;

    // Salvar imagens do Chart.js
    if ($graficoB64) {
      $imgData = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $graficoB64));
      file_put_contents('images/grafico.png', $imgData);
    }
    if ($grafico2B64) {
      $imgData2 = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $grafico2B64));
      file_put_contents('images/grafico2.png', $imgData2);
    }

    // Gerar quali3.txt para o PDF
    $dia_ini = date('d-m-Y', strtotime($inicio));
    $dia_fim = date('d-m-Y', strtotime($fim));
    $limite  = strtotime($fim);
    $lim = ($limite >= 1680220800) ? 'novo' : 'velho';

    $linha = [];
    $linha[0] = ['', '', ''];
    $linha[1] = [$dia_ini . ' as ' . $hrini, $dia_fim . ' as ' . $hrfim, ''];
    $linha[2] = [$hrini, $hrfim, ''];
    $linha[3] = [$min, $max, $rt];
    $linha[4] = ['', '', '1'];

    $file_txt = fopen('quali3.txt', 'w');
    for ($i = 0; $i <= 4; ++$i) {
      fwrite($file_txt, $linha[$i][0] . ';' . $linha[$i][1] . ';' . $linha[$i][2] . PHP_EOL);
    }
    fclose($file_txt);

    // Retornar URL para abrir o PDF
    header('Content-Type: application/json');
    echo json_encode([
      'success' => true,
      'pdf_url' => 'RelatorioGrafico.php?media=' . $media . '&minima=' . $minima . '&maxima=' . $maxima . '&Umedia=' . $Umedia . '&Uminima=' . $Uminima . '&Umaxima=' . $Umaxima . '&limite=' . $lim,
    ]);
    exit;
  }

  // ──── FLUXO LEGADO (GET) ────
  // Mantido para compatibilidade caso seja chamado diretamente
  $inicio     = filter_input(INPUT_GET, 'inicio');
  $hrini      = filter_input(INPUT_GET, 'horainicio');
  $fim        = filter_input(INPUT_GET, 'fim');
  $hrfim      = filter_input(INPUT_GET, 'horafim');
  $rt         = filter_input(INPUT_GET, 'rt');
  $via        = filter_input(INPUT_GET, 'via');
  $min        = filter_input(INPUT_GET, 'min');
  $max        = filter_input(INPUT_GET, 'max');
  $data1      = $inicio.' '.$hrini.':00';
  $data2      = $fim.' '.$hrfim.':00';
  $dia_ini = date('d-m-Y',strtotime($inicio));
  $dia_fim = date('d-m-Y',strtotime($fim));
  $limite = strtotime($fim);
  if ($limite>=1680220800){$lim='novo';}else{$lim='velho';}
  $linha[0][0]='';$linha[0][1]='';$linha[0][2]='';
  $linha[1][0]=$dia_ini.' as '.$hrini;$linha[1][1]=$dia_fim.' as '.$hrfim;$linha[1][2]='';
  $linha[2][0]=$hrini;$linha[2][1]=$hrfim;$linha[2][2]='';
  $linha[3][0]=$min;$linha[3][1]=$max;$linha[3][2]=$rt;
  $linha[4][0]='';$linha[4][1]='';$linha[4][2]=$via;
  $file_txt = fopen('quali3.txt', 'w');
  for ($i=0;$i<=4;++$i){ 
    $linha2=$linha[$i][0].';'.$linha[$i][1].';'.$linha[$i][2].PHP_EOL;
    fwrite($file_txt, $linha2);
  }
  fclose($file_txt);
  require_once("../conexao_mysql_locaweb.php");
  require_once('phplot.php');
  require_once('prune_labels.php');
  $plot = new PHPlot(850,250);
  $sql = "SELECT FROM_UNIXTIME(dia_hora) AS dia, temperatura FROM sitrad WHERE id_arm='$rt' AND FROM_UNIXTIME(dia_hora) BETWEEN '$data1' AND '$data2' AND temperatura>0 ORDER BY dia ASC";
  if (!$query = mysqli_query($conn3, $sql)){ 
    echo "<script type=\"text/javascript\">alert(\"Erro no Banco de Dados!\");window.close();opener.location.href='index.php';</script>";}
  else{ 
    $num= mysqli_num_rows($query);
    if($num==0){
      echo "<script type=\"text/javascript\">alert(\" ".$sql." Sem dados TEMPERATURA para esse período!\");window.close();opener.location.href='index.php';</script>";}
    else{
      $z=0;$tt=0;$minima=99;$maxima=0;$i='s';$b=0;
      if ($min<0 and $max<0){$range=abs($min)-abs($max);}
      else{ 
        if ($max>=0 and $min>=0){ $range=$max-$min;}
        else{ 
          if ($min<0 and $max>=0){ $range=abs($min)+$max;}
          else{ $range=0;}
        }
      }
      if ($range>3){$range=3;}
      while($row = $query->fetch_assoc()) { 
        $grafico[$z][0]=strtotime($row['dia']);
        $grafico[$z][1]=$min;
        $grafico[$z][2]=$max;
        $grafico[$z][3]=$row['temperatura'];
        if ($via==1)
          { if ($max>=0 and $min>=0)
              { if($grafico[$z][3]>$max)
                  { $dif=$grafico[$z][3]-$max;
                    if($dif>$range)
                      { $dif=$range-($dif/(intval($dif-$range)+1.5));}
                    $grafico[$z][3]=$max-$dif;
                  }
                if($grafico[$z][3]<$min)
                  { $dif=$min-$grafico[$z][3];
                    if($dif>$range)
                      { $dif=$range-($dif/$range);}
                    $grafico[$z][3]=$min+$dif;
                  }
              } 
            else
              { if ($min<0 and $max<0)
                  { if($grafico[$z][3]>$max)
                      { if($grafico[$z][3]<0)
                          { $dif=abs($max)-abs($grafico[$z][3]);}
                        else
                          { $dif=$grafico[$z][3]+abs($max);}
                        if($dif>$range)
                          { $dif=$range-($dif/($dif-$range));}
                        $grafico[$z][3]=$min+$dif;
                      }
                    if($grafico[$z][3]<$min)
                      { $dif=$min-$grafico[$z][3];
                        if($dif>$range)
                          { $dif=$range-($dif/$range);}
                        $grafico[$z][3]=$max-$dif;
                      }
                  }
                else
                  { if($grafico[$z][3]>$max)
                      { $dif=$grafico[$z][3]-$max;
                        if($dif>$range)
                          { $dif=$range-($dif/(intval($dif-$range)+1.5));}
                        $grafico[$z][3]=$max-$dif;
                      }
                    if($grafico[$z][3]<$min)
                      { $dif=$min-$grafico[$z][3];
                        if($dif>$range)
                          {$dif=$range-($dif/$range);}
                        $grafico[$z][3]=$max-$dif;
                      }
                  }
              }
          }
        $tt=$tt+$grafico[$z][3];
        if ($grafico[$z][3]<$minima){$minima=$grafico[$z][3];}
        if ($grafico[$z][3]>$maxima){$maxima=$grafico[$z][3];}
        $z++;
      }
      $media=$tt/$z;
      if($min>=$minima){$miy=$minima-2;}else{$miy=$min-2;}
      if($max<=$maxima){$may=$maxima+2;}else{$may=$max+2;}
      prune_labels($grafico, 20);
      $plot->SetDataValues($grafico);
      $plot->SetXTitle('Data e Hora');
      $plot->SetYTitle('Temperatura');
      $plot->SetDataColors(array('blue', 'red', 'green'));
      $plot->SetPlotType('lines');
      $plot->SetLineWidths(2);
      $plot->SetLineStyles(array('solid','solid','solid'));
      $plot->SetYTickIncrement(2);
      $plot->SetXLabelAngle(90);
      $plot->SetXLabelType('time', '%d/%m %H:%M');
      $plot->SetXTickLabelPos('none');
      $plot->SetPlotBorderType('left');
      $plot->SetXTickPos('none');
      $plot->SetLegendStyle('left','left');
      $plot->SetLegend(array('Minima',utf8_decode('Máxima'), 'Leitura'));
      $plot->SetPlotAreaWorld(null, $miy, null, $may);
      $plot->SetLegendPixels(783, 3);
      $plot->SetPrintImage(false);
      $plot->DrawGraph();
      $imagem = $plot->EncodeImage('raw');
      $fp = fopen("images/grafico.png", "w");
      fwrite($fp, $imagem);
      fclose($fp);
    }
  }
  $plot2 = new PHPlot(850,250);
  $sql2 = "SELECT FROM_UNIXTIME(dia_hora) AS dia, umidade FROM sitrad WHERE id_arm='$rt' AND FROM_UNIXTIME(dia_hora) BETWEEN '$data1' AND '$data2' AND umidade>0  ORDER BY dia ASC";
  if (!$query2 = mysqli_query($conn3, $sql2)){ 
    echo "<script type=\"text/javascript\">alert(\"Erro no Banco de Dados!\");window.close();opener.location.href='index.php';</script>";}
  else{ 
    $num2= mysqli_num_rows($query2);
    if($num2==0){
      echo "<script type=\"text/javascript\">alert(\"Sem dados UMIDADE para esse período!\");window.close();opener.location.href='index.php';</script>";}
    else{
      $z=0;$tt=0;$Uminima=99;$Umaxima=0;
      while($row2 = $query2->fetch_assoc()) { 
        $grafico2[$z][0]=strtotime($row2['dia']);
        $grafico2[$z][1]=0;
        $grafico2[$z][2]=0;
        $grafico2[$z][3]=$row2['umidade'];
        $tt=$tt+$grafico2[$z][3];
        if ($grafico2[$z][3]<$Uminima){$Uminima=$grafico2[$z][3];}
        if ($grafico2[$z][3]>$Umaxima){$Umaxima=$grafico2[$z][3];}
        $z++;
      }
      $Umedia=$tt/$z;
      $plot2->SetDataValues($grafico2);
      $plot2->SetXAxisPosition($Umaxima+1);
      $plot2->SetYTitle('Umidade %');
      $plot2->SetDataColors(array('blue', 'red', 'green'));
      $plot2->SetPlotType('lines');
      $plot2->SetLineWidths(2);
      $plot2->SetLineStyles(array('solid','solid','solid'));
      $plot2->SetYTickIncrement(5);
      $plot2->SetXTickPos('none');
      $plot2->SetXTickLabelPos('none');
      $plot2->SetXDataLabelPos('none');
      $plot2->SetPlotBorderType('left');
      $plot2->SetPlotAreaWorld(null, $Uminima, null, $Umaxima+1);
      $plot2->SetPrintImage(false);
      $plot2->DrawGraph();
      $imagem2 = $plot2->EncodeImage('raw');
      $fp2 = fopen("images/grafico2.png", "w");
      fwrite($fp2, $imagem2);
      fclose($fp2);
    }
  }
  echo "<script language='JavaScript'>window.close();window.open('RelatorioGrafico.php?media=".$media."&minima=".$minima."&maxima=".$maxima."&Umedia=".$Umedia."&Uminima=".$Uminima."&Umaxima=".$Umaxima."&limite=".$lim."');</script>";
?>