<?php 
session_start();
$pTipoUtilizador = $_SESSION['tipoUtilizador'];
if ($pTipoUtilizador=="anonymous" || $pTipoUtilizador=="regular") { // separa por tipo de utilizador
  require('headersubUsers.inc');
  require('menusubUsers.inc');
  //  echo "<meta http-equiv='refresh' content='0; url=../users.php' />";
  exit;  // os anonimos não têem acesso a esta página
}
else {
  require('headersubAdmins.inc');
  require('menusubAdmins.inc');
}
?>


<?php
echo "<meta http-equiv='refresh' content='2; url=../forms.php' />";
?>

<center>
<h3 class="maketitle">Geometric theorems - Update the Figure Info</h3>
</center>

<hr/>

<?php
require('loginsub.php');
?>

<?php

// Obtêm os valores do formulário.
$pFigureId         = $_POST['FigureId'];
$pThmIdName        = $_POST['ThmIdName'];
$pDrwIdNameVersion = $_POST['DrwIdNameVersion'];
$pCode             = $_POST['Code'];
$pDateSubmission   = $_POST['DateSubmission'];
$pUserInfo         = $_POST['UserInfo'];
$pBibref           = $_POST['Bibref'];

// Obtém o identificador do Teorema
preg_match("§([A-Za-z0-9 _.]+) --([A-Za-z0-9 _.]*)§", $pThmIdName,$matches);

$pThmId   = $matches[1];

// Obtém o identificador do Desenhador
preg_match("§([0-9]+) --([A-Za-z0-9 _.]+) --([A-Za-z0-9 _\.]*)§", $pDrwIdNameVersion,$matches);

$pDrwId   = $matches[1];

// Obtém o identificador do Utilizador
$pUserInfo          = $_POST['UserInfo'];

preg_match("§([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+)§",$pUserInfo,$matches);

$pUserId = $matches[1];
//$pUserName = $matches[2];
//$pUserEmail = $matches[3];


// Formata os valores para posterior inserção na Tabela
if (!get_magic_quotes_gpc())
  { $pThmId          = addslashes('$pThmId');
    $pDrwId          = addslashes('$pDrwId');
    $pCode           = addslashes('$pCode');
    $pDateSubmission = addslashes('$pDateSubmission');
    $pUserId         = addslashes('$pUserId');
    $pBibref         = addslashes('$pBibref');
  }


$sqlUpdateFigure = 
    "UPDATE figures
        SET teoId          = '$pThmId',       
            drawerId       = '$pDrwId',
            code           = '$pCode',   
            dateSubmission = '$pDateSubmission',
            userId         = '$pUserId',
            bibref         = '$pBibref'
       WHERE
            figureId = '$pFigureId'";

$resultadoUpdateFigure = mysql_query($sqlUpdateFigure,$ligacao);


// Vai criar o ficheiros jpeg e svg (no caso do Eukleides só o jpeg)
// com a figura para guardar na base de dados.
// 
// Escreve o ficheiro "txt" referente ao código
// 
// Para que vários utilizadores possam, simultaneamente, actualizar
// diferentes figuras adicionou-se ao nome do ficheiro a identificação
// do utilizador que o está a pedir.

$vNameCode = 'figure'.$pUserId.'.code';
$vNamePIC = 'figure'.$pUserId.'.pic';
$vNameSVG = 'figure'.$pUserId.'.svg';
$vNameErr = 'figure'.$pUserId.'.err';
$vNameErrors = 'figure'.$pUserId.'.errors';

ob_start();
print $pCode."\n";
$texfile=fopen($vNameCode,"w");
fwrite($texfile,ob_get_contents()); 
fclose($texfile); 
ob_end_clean(); 

// Vai processar o código com o programa de desenho
// Consoante o programa de desenho
// 2 - Eukleides - 1.0.2
// 3 - GCLC - 5.00
ob_start();
if ($pDrwId==2) { // No caso do Eukleides a componente do SVG mais à frente 
  // o '2>' é para redirigir os stderr
  system("/usr/local/bin/eukleides $vNameCode > $vNamePIC 2> $vNameErr");
}
elseif ($pDrwId==3) {
  // primeiro o ficheiro PIC (vou gerar o jpg posteriormente)
  system("/usr/local/bin/gclc $vNameCode $vNamePIC > $vNameErrors");
  // depois o ficheiro SVG - opção '-svg'
  // faço o "append" ainda não sei bem para o quê, pelo menos não
  // apago o que já está.
  system("/usr/local/bin/gclc $vNameCode $vNameSVG -svg >> $vNameErrors");
  system("grep Syntax $vNameErrors >> $vNameErr");
}

ob_end_clean(); 

//$filename = 'figure.err';

// Vai verificar se houve erros ou não
if  (file_exists($vNameErr) and filesize($vNameErr>0)) { // há erros 
  $file = fopen ($vNameErr, "r");
  $contents = fread ($file, filesize ($vNameErr));
  echo $contents;
  //system("rm figure.err");
  echo "<center>\n";
  echo "<br>There are errors in the figure's code. The figure was not inserted in the database</b>\n";
  echo "</center>\n";
 }
 else { // Caso não haja erros vai processar a figura
   $vNameLaTeX = 'figure'.$pUserId.'.tex';
   $vNameDVI = 'figure'.$pUserId.'.dvi';
   $vNamePS = 'figure'.$pUserId.'.ps';
   $vNameEPSI = 'figure'.$pUserId.'.epsi';
   $vNameJPG = 'figure'.$pUserId.'.jpg';


   $texfile=fopen($vNameLaTeX,"w");
   fwrite($texfile,ob_get_contents()); 
   fclose($texfile);  
   // Vai produzir o texto LaTeX referente à Figura
   ob_start();
   print "\documentclass[11pt]{article}\n";
   if ($pDrwId==2) { // Eukleides
     print "\usepackage{color}\n";
     print "\usepackage{pstricks}\n";
   }
   elseif ($pDrwId==3) { // GCLC - o pstricks é preciso à conta das cores
     print "\usepackage{gclc}\n";
     print "\usepackage{color}\n";
     print "\usepackage{pstricks}\n";
   }
   print "\pagestyle{empty}\n";
   print "\begin{document}\n";
   print "\input{ $vNamePIC }\n";
   print "\end{document}\n";
   
   $texfile=fopen($vNameLaTeX,"w");
   fwrite($texfile,ob_get_contents()); 
   fclose($texfile); 
   
   system("latex $vNameLaTeX"); 
   system("dvips $vNameDVI -o $vNamePS"); 
   system("ps2epsi $vNamePS $vNameEPSI");
   system("convert $vNameEPSI $vNameJPG");
   ob_end_clean(); 
   
   // Agora vai produzir o ficheiro XML - para já só para o GCLC

   $vNameXML = 'figure'.$pUserId.'.xml';
   $vNameXMLaux = 'fig'.$pUserId.'.xml';
   
   ob_start();   
   if ($pDrwId==2) { // No caso do Eukleides o ficheiro XML é criado vazio
     system("rm $vNameXML"); 
     system("cat ' ' > $vNameXML"); 
     system("rm $vNameSVG"); 
     system("cat ' ' > $vNameSVG"); 
     // ainda tenho de resolver os problemas com o eps2svg
     //system("eps2svg $vNameEPSI");
   }
   elseif ($pDrwId==3) {
     system("/usr/local/bin/gclc $vNameCode $vNameXML -xml");
     // modifica o estilo de saída para a Natural Language
     // É o conteúdo do ficheiro modificado que é inserido na BD
     system("sed -e 's/GeoConsHTML.xsl/GeoConsNL.xsl/g' $vNameXML > $vNameXMLaux"); 
   }
   ob_end_clean(); 

   // e agora a inserção da imagem JPEG
   $fpJPG   = fopen($vNameJPG,'r');
   $contentJPG = fread($fpJPG,filesize($vNameJPG));
   $contentJPG = addslashes($contentJPG);
   fclose($fpJPG);
   
   // e agora a inserção da imagem SVG
   $fpSVG   = fopen($vNameSVG,'r');
   $contentSVG = fread($fpSVG,filesize($vNameSVG));
   $contentSVG = addslashes($contentSVG);
   fclose($fpSVG);

   // e do ficheiro XML
   $fpXML = fopen($vNameXMLaux,'r');
   $contentXML = fread($fpXML,filesize($vNameXMLaux));
   $contentXML = addslashes($contentXML);
   fclose($fpXML);

   $sqlfigure = "UPDATE figures
                    SET codeXML = '$contentXML',
                        figure = '$contentJPG',
                        figureSVG = '$contentSVG'                        
                  WHERE figureId = '$pFigureId'";
   
   $resultadofigure = mysql_query($sqlfigure,$ligacao);
   
   if (!$resultadofigure) {
     echo "Error - figure not updated";
     exit;
   }
 }

if ($resultadoUpdateFigure) {
  echo 'Figure Info Updated.'; 
 }
 else
   echo 'Error - Figure Info not updated!';
?>

<hr/>

<p>&nbsp;</p>

<?php
  require('footer.inc');
?>
