<?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');
}

echo "<center>\n";
echo "<h3 class='maketitle'>Geometric theorems - Update the Theorem Info</h3>\n";
echo "</center>\n";

echo "<hr/>\n";


require($entradaFILE.'dbLogin.php');
?>

<?php


// ================================
// Enunciado - recepção dos valores
// ================================

$pTeoId             = $_POST['TeoId'];
$pTeoName           = $_POST['TeoName'];
$pDateSubmission    = $_POST['DateSubmission'];
$pCategory          = $_POST['Category'];
$pShortDescription  = $_POST['ShortDescription'];
$pDescription       = $_POST['Description'];
// Como obter de um campo múltipo os valores individuais através de exp. reg.
$pUserInfo          = $_POST['UserInfo'];


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

$pUserId = $matches[1];

$pNumRefBibTeo      = $_POST['NumRefBibTeo'];

for ($iaux=1;$iaux<=$pNumRefBibTeo;$iaux++) {
  $pBibRefTeo[$iaux]    = $_POST["BibRefTeo$iaux"];
  $pDelBibRefTeo[$iaux] = $_POST["DelBibRefTeo$iaux"];
}
$pNewBibRefTeo      = $_POST['NewBibRefTeo'];
$pCheckNewBibRefTeo = $_POST['CheckNewBibRefTeo'];


// ================================
// Figuras - recepção dos valores
// ================================
$pNumFiguras        = $_POST['NumFiguras'];
for ($iaux=1;$iaux<=$pNumFiguras;$iaux++) {
  $pFigId[$iaux]                = $_POST["FigId$iaux"];
  $pDrawerName[$iaux]           = $_POST["DrawerName$iaux"];
  $pDrawerVersion[$iaux]        = $_POST["DrawerVersion$iaux"];
  $pDateSubmissionDrawer[$iaux] = $_POST["DateSubmissionDrawer$iaux"];
  $pDrawerCode[$iaux]           = $_POST["DrawerCode$iaux"];

  // Como obter de um campo múltipo os valores individuais através de exp. reg.
  $pDrawerUserName[$iaux]  = $_POST["DrawerUserName$iaux"];
  
  preg_match("§([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+)§",$pDrawerUserName[$iaux],$matches);
  
  $pDrawerUserId[$iaux] = $matches[1];

  // referências bibliográficas
  
  $pNumRefBibFig[$iaux]          = $_POST["NumRefBibFig$iaux"];
  
  for ($jaux=1;$jaux<=$pNumRefBibFig[$iaux];$jaux++) {
    $pBibRefFig[$iaux][$jaux]    = $_POST["BibRefFig$iaux-$jaux"];
    $pDelBibRefFig[$iaux][$jaux] = $_POST["DelBibRefFig$iaux-$jaux"];
  }
  $pNewBibRefFig[$iaux]      = $_POST["NewBibRefFig$iaux"];
  $pCheckNewBibRefFig[$iaux] = $_POST["CheckNewBibRefFig$iaux"];
}


// ====================================
// Demonstrações - recepção dos valores
// ====================================
$pNumDemonstracoes = $_POST['NumDemonstracoes'];
for ($iaux=1;$iaux<=$pNumDemonstracoes;$iaux++) {
  $pDemId[$iaux]                = $_POST["DemId$iaux"];
  $pProverName[$iaux]           = $_POST["ProverName$iaux"];
  $pProverVersion[$iaux]        = $_POST["ProverVersion$iaux"];
  $pProverDateSubmission[$iaux] = $_POST["ProverDateSubmission$iaux"];
  $pProverCode[$iaux]           = $_POST["ProverCode$iaux"];

  // Como obter de um campo múltipo os valores individuais através de exp. reg.
  $pProverUserName[$iaux]  = $_POST["ProverUserName$iaux"];
  
  preg_match("§([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+)§",$pProverUserName[$iaux],$matches);
  
  $pProverUserId[$iaux]    = $matches[1];

  // referências bibliográficas
  $pNumRefBibDem[$iaux]          = $_POST["NumRefBibDem$iaux"];

  for ($jaux=1;$jaux<=$pNumRefBibDem[$iaux];$jaux++) {
    $pBibRefDem[$iaux][$jaux]    = $_POST["BibRefDem$iaux-$jaux"];
    $pDelBibRefDem[$iaux][$jaux] = $_POST["DelBibRefDem$iaux-$jaux"];
  }
  $pNewBibRefDem[$iaux]      = $_POST["NewBibRefDem$iaux"];
  $pCheckNewBibRefDem[$iaux] = $_POST["CheckNewBibRefDem$iaux"];
}


//mostraTodosOsValores($_POST);

// ====================================================
// Formata os valores para posterior inserção na Tabela
// ====================================================
if (!get_magic_quotes_gpc()) { // verificar se o PHP já não está a fazer o tratamento de forma automática
  $pTeoName            = addslashes($pTeoName);
  $pDateSubmission     = addslashes($pDateSubmission);
  $pShortDescription   = addslashes($pShortDescription);
  $pDescription        = $pDescription; // LaTeX code
  $pCategory           = addslashes($pCategory);

  //  mostraTodosOsValores($_POST);
  //exit;

  for ($iaux=1;$iaux<=$pNumRefBibTeo;$iaux++) {
    $pBibRefTeo[$iaux] = addslashes($pBibRefTeo[$iaux]);
    $pDelBibRefTeo[$iaux] = addslashes($pDelBibRefTeo[$iaux]);
  }
  $pNewBibRefTeo       = addslashes($pNewBibRefTeo);
  $pCheckNewBibRefTeo  = addslashes($pCheckNewBibRefTeo);
  
  // Figuras - preparação para a inserção
  
  for ($iaux=1;$iaux<=$pNumFiguras;$iaux++) {
    $pDateSubmissionDrawer[$iaux] = addslashes($pDateSubmissionDrawer[$iaux]);
    $pDrawerCode[$iaux]    = addslashes($pDrawerCode[$iaux]);
    
    
    // referências bibliográficas
    for ($jaux=1;$jaux<=$pNumRefBibFig[$iaux];$jaux++) {
      $pBibRefFig[$iaux][$jaux]     = addslashes($pBibRefFig[$iaux][$jaux]);
      $pDelBibRefFig[$iaux][$jaux]  = addslashes($pDelBibRefFig[$iaux][$jaux] );
    }
    $pNewBibRefFig[$iaux]     = addslashes($pNewBibRefFig[$iaux]);
    $pCheckNewBibRefFig[$iaux] = addslashes($pCheckNewBibRefFig[$iaux]);
  }
  
  
  // Demonstrações
  
  
  for ($iaux=1;$iaux<=$pNumDemonstracoes;$iaux++) {
    $pProverDateSubmission[$iaux] = addslashes($pProverDateSubmission[$iaux]);
    $pProverCode[$iaux]           = addslashes($pProverCode[$iaux]);
    
    
    // referências bibliográficas
    for ($jaux=1;$jaux<=$pNumRefBibDem[$iaux];$jaux++) {
      $pBibRefDem[$iaux][$jaux]    = addslashes($pBibRefDem[$iaux][$jaux]);
      $pDelBibRefDem[$iaux][$jaux] = addslashes($pDelBibRefDem[$iaux][$jaux] );
    }
    $pNewBibRefDem[$iaux]      = addslashes($pNewBibRefDem[$iaux]);
    $pCheckNewBibRefDem[$iaux] = addslashes($pCheckNewBibRefDem[$iaux]);
  }
}

// =====================================
// Enunciado - Inserção na Base de Dados
// =====================================

// Formata os valores para posterior inserção na Tabela
if (!get_magic_quotes_gpc()) { 
  $pTeoName          = addslashes($pTeoName);
  $pDescription      = addslashes($pDescription);
  $pCategory         = addslashes($pCategory);
  $pDateSubmission   = addslashes($pDateSubmission);
  $pShortDescription = addslashes($pShortDescription);
}

// Inicio da transaccao
@ mysql_query("BEGIN");

$sqlUpdateThmStatement = 
    "UPDATE theorems
        SET teoName          = '$pTeoName',       
            description      = '$pDescription',   
            category         = '$pCategory',      
            dateSubmission   = '$pDateSubmission',
            userId           = '$pUserId',
            shortDescription = '$pShortDescription'   
       WHERE
             teoId = '$pTeoId'";

$resultadoUpdateThmStatement = mysql_query($sqlUpdateThmStatement,$ligacao);


//echo $sqlUpdateThmStatement;

if (!$resultadoUpdateThmStatement) {
  echo 'Error - Theorem not updated!';
  // TRANSAÇÕES - ROLLBACK
  @ mysql_query("ROLLBACK");
  exit;
  //  echo "<meta http-equiv=\"refresh\" content=\"2; url=updateGeoThm.php?argumento=$pTeoId\" />";
  exit;
}

// agora as referências bibliográficas

// uma qualquer referência que tenha a marca "delete" activa será apagada
for ($iaux=1;$iaux<=$pNumRefBibTeo;$iaux++) {
  if ($pDelBibRefTeo[$iaux]=='on') {
    $sqlDeleteBibRef = "DELETE 
                          FROM bibtheorem
                         WHERE bibrefId='$pBibRefTeo[$iaux]'
                           AND teoId='$pTeoId'";
    
    $resultDeleteBibRef = mysql_query($sqlDeleteBibRef,$ligacao);
    if (!$resultDeleteBibRef) {
      echo 'Error - Bib. Ref. not deleted!';
      // TRANSAÇÕES - ROLLBACK
      @ mysql_query("ROLLBACK");
      exit;
      echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
      exit;
    }
  }
}	

// caso a marca "newbibrefteo" esteja activa insere-se uma nova ref. bib
			       
if ($pCheckNewBibRefTeo=='on') {
  $sqlInsertNewBibRef = "INSERT INTO bibtheorem (bibrefId,teoId) 
                         VALUES ('$pNewBibRefTeo','$pTeoId')";
  $resultInsertNewBibRef = mysql_query($sqlInsertNewBibRef,$ligacao);

  if (!$resultInsertNewBibRef) {
    echo 'Error - New Bib. Ref. not inserted!';
    // TRANSAÇÕES - ROLLBACK
    @ mysql_query("ROLLBACK");
    exit;
    echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
    exit;
  } 
}	

// e informar o mundo que tudo está bem
echo "<h3>Problem description updated</h3>";

echo "<hr>";

// ====================================
// Figuras - Inserção na Base de Dados
// ====================================

// Inicio da transaccao
@ mysql_query("BEGIN");

// »»»»»»»»»»»»»»»»»»»»»»»»»»»»»« ainda por fazer

for ($iaux=1;$iaux<=$pNumFiguras;$iaux++) {
  echo "<h3>Processing Figure - $pFigId[$iaux] </h3>"; 
  //echo "<pre>Drawer Name - $pDrawerName[$iaux]   </pre>"; 
  //  echo "<pre>Drawer Ver  - $pDrawerVersion[$iaux]</pre>"; 
  //  echo "<pre>Date Sub    - $pDateSubmissionDrawer[$iaux] </pre>"; 
  //  echo "<pre>Drawer Code - $pDrawerCode[$iaux]   </pre>"; 
  //  echo "<pre>User Id     - $pDrawerUserId[$iaux] </pre>"; 
  
  // obtêm o código do drawer

  $auxFigId      = $pFigId[$iaux];
  $auxDrawerName = $pDrawerName[$iaux];
  $auxDrawerVer  = $pDrawerVersion[$iaux];
  $auxDateSub    = $pDateSubmissionDrawer[$iaux];
  $auxDrawerCode = $pDrawerCode[$iaux];
  $auxUserId     = $pDrawerUserId[$iaux];


  $sqlGetDrawerId = "SELECT drawerId FROM drawers
                      WHERE name='$auxDrawerName'
                        AND version='$auxDrawerVer'";
  $resultGetDrawerId = mysql_query($sqlGetDrawerId,$ligacao);
  
    
  if (!$resultGetDrawerId) {
    echo "Error - Get Drawer Id";
    exit;
  }
  else {
    $linhaGetDrawerId = mysql_fetch_assoc($resultGetDrawerId);
    $auxDrawerId = $linhaGetDrawerId['drawerId'];
  }
  
  $sqlUpdateFigure = "UPDATE figures 
                         SET teoId          = '$pTeoId',        
                             drawerId       = '$auxDrawerId',
                             code           = '$auxDrawerCode',   
                             dateSubmission = '$auxDateSub',
                             userId         = '$auxUserId'
                       WHERE 
                             figureId = '$auxFigId'"; 

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

  //  echo $sqlUpdateFigure;


  if (!$resultUpdateFigure) {
    echo 'Error - Update Fig. (L316)';
    // TRANSAÇÕES - ROLLBACK
    @ mysql_query("ROLLBACK");
    exit;
    echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
    exit;
  }


  // 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 $auxDrawerCode."\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
  ob_start();
  if ($auxDrawerId==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 ($auxDrawerId==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 ($auxDrawerId==2) { // Eukleides
      print "\usepackage{color}\n";
      print "\usepackage{pstricks}\n";
    }
    elseif ($auxDrawerId==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 ($auxDrawerId==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 ($auxDrawerId==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 = '$auxFigId'";
    
    $resultadofigure = mysql_query($sqlfigure,$ligacao);
    
    if (!$resultadofigure) { // termina aqui a actualização das figuras (sem bib. refs.)
      echo 'Error - Figure Info not updated!';
      // TRANSAÇÕES - ROLLBACK
      @ mysql_query("ROLLBACK");
      exit;
      echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
      exit;
    }
  }
  

  // echo "<h2>NumRefBibFig- $pNumRefBibFig +</h2>";
  // referências bibliográficas      
  for ($jaux=1;$jaux<=$pNumRefBibFig[$iaux];$jaux++) {
    //    echo "<pre>BibRefFig - ".$pBibRefFig[$iaux][$jaux]." </pre>"; ;
    //    echo "<pre>DelBibRefFig - ".$pDelBibRefFig[$iaux][$jaux]." </pre>"; 
    // vai apagar uma referência bibliográfica (eventualmente)
    if ($pDelBibRefFig[$iaux][$jaux] == 'on') {
      $auxDelBibRefFig = $pBibRefFig[$iaux][$jaux];
      $auxFigId = $pFigId[$iaux];
      $sqlDeleteBibRefFig = "DELETE FROM bibfigure
                                   WHERE bibrefId='$auxDelBibRefFig'
                                     AND figureId='$auxFigId'";
      $resultDeleteBibRefFig = mysql_query($sqlDeleteBibRefFig,$ligacao);
      
      if (!$resultDeleteBibRefFig) {
	echo 'Error - Delete Bib. Ref. Fig. (L492)';
	// TRANSAÇÕES - ROLLBACK
	@ mysql_query("ROLLBACK");
	exit;
	echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
	exit;
      } 
    }
  }
  //  echo "<pre>NewBibRefFig - $pNewBibRefFig[$iaux]     </pre>"; 
  //  echo "<pre>CheckNewBibRefFig - $pCheckNewBibRefFig[$iaux] </pre>"; 
  echo "<hr>";
  
  // Vai inserir uma nova referência bibliográfica (eventualmente)
  if ($pCheckNewBibRefFig[$iaux] == 'on') {
    $auxNewBibRefFig = $pNewBibRefFig[$iaux];
    $auxFigId = $pFigId[$iaux];
    $sqlInsertNewBibRefFig = "INSERT INTO bibfigure (bibrefId,figureId) 
                                   VALUES ('$auxNewBibRefFig','$auxFigId')";
    $resultInsertNewBibRefFig = mysql_query($sqlInsertNewBibRefFig,$ligacao);
    
    if (!$resultInsertNewBibRefFig) {
      echo 'Error - New Bib. Ref. Fig. not inserted! (L514)';
      // TRANSAÇÕES - ROLLBACK
      @ mysql_query("ROLLBACK");
      exit;
      echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
      exit;
    } 
  }
}



// se tudo correu bem... então pode-se fazer a inserção
//@mysql_query("COMMIT");

// e informar o mundo que tudo está bem com as figuras
echo "<h3>Problem figures updated</h3>";
echo "<hr>";

				       
// ==========================================
// Demonstrações - Inserção na Base de Dados
// ==========================================


// »»»»»»»»»»»»»»»»»»»»»»»»»»»»»« ainda por fazer

// Inicio da transaccao
@ mysql_query("BEGIN");


for ($iaux=1;$iaux<=$pNumDemonstracoes; $iaux++) {
  echo "<h3>Processing Proof - $pDemId[$iaux] </h3>"; 

  //  echo "<pre>ProofId       - $pDemId[$iaux]  </pre>"; 
  //  echo "<pre>ProverName    - $pProverName[$iaux]  </pre>"; 
  //  echo "<pre>ProverVersion - $pProverVersion[$iaux]       </pre>"; 
  //  echo "<pre>ProverDateSub - $pProverDateSubmission[$iaux]</pre>"; 
  //  echo "<pre>ProverCode    - $pProverCode[$iaux]          </pre>"; 
  //  echo "<pre>ProverUserId  - $pProverUserId[$iaux]        </pre>"; 


  // Obtêm os valores para uma dada demonstração entre várias
  $auxDemId          = $pDemId[$iaux];
  $auxProverName     = $pProverName[$iaux];
  $auxProverVersion  = $pProverVersion[$iaux];
  $auxCode           = $pProverCode[$iaux];
  $auxDateSubmission = $pProverDateSubmission[$iaux];
  $auxUserId         = $pProverUserId[$iaux];

  // Get the prover Id
  $sqlGetProverId = "SELECT proverId FROM provers
                      WHERE name='$auxProverName'
                        AND version='$auxProverVersion'";

  echo $auxProverName;
  echo $sqlGetProverId;


  $resultGetProverId = mysql_query($sqlGetProverId,$ligacao);
  
  if (!$resultGetProverId) {
    echo "Error - Get Prover Id";
    exit;
  }
  else {
    $linhaGetProverId = mysql_fetch_assoc($resultGetProverId);
    $auxProverId = $linhaGetProverId['proverId'];
  }


  //«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

  //
  // DEVIA EFECTUAR UM "LOCK TABLE" PARA IMPEDIR INCONSISTÊNCIAS
  //
  // e introduzir as Transacções (se calhar chega as transacções)
  //
  
  // Dados genéricos

  // Inicio da transacção
  @ mysql_query("BEGIN");

  $sqlUpdateProof = 
    "UPDATE demonstrations
        SET teoId          = '$pTeoId',       
            proverId       = '$auxProverId',
            code           = '$auxCode',   
            dateSubmission = '$auxDateSubmission',
            userId         = '$auxUserId'
       WHERE
            demId = $auxDemId";

  $resultadoUpdateProof = mysql_query($sqlUpdateProof,$ligacao);

  echo $sqlUpdateProof;

  if (!$resultadoUpdateProof) {
    echo "<p>Error - Proof Info not updated! (L607)</p>";
    // TRANSAÇÕES - ROLLBACK
    @ mysql_query("ROLLBACK"); 
    exit;
 echo "<meta http-equiv=\"refresh\" content=\"20; url=../Geothms/updateGeoThm.php?argumento=$pTeoId\" />";
    exit;
  }


  // Esta parte vai estar dependente do provador escolhido

  if ($auxProverId == 2) { // GCLCprover - Area Method
    echo "<p>Processing (GCLCprover - Area Method), please wait</p>";
    flush(); 
    require('../Proofs/uUpdateProofGCLCprover.php');
  }
  elseif ($auxProverId == 3) { // GCLCprover+euk2gclc 
    // ---> tenho de ver isto com mais cuidado
    echo "<p>Processing (GCLCprover+euk2gclc), please wait</p>";
    flush(); 
    //require('../Proofs/uUpdateProofGCLCproverEuk.php');
  }
  elseif ($auxProverId == 4) { //Coq+JNarboux
    echo "<p>Processing (Coq Area Method), please wait</p>";
    flush(); 
    require('../Proofs/uUpdateProofCoqJN.php');
  }
  elseif ($auxProverId == 5) { // GCLCprover - Wu's Method
    echo "<p>Processing (GCLCprover - Wu's Method), please wait</p>";
    flush(); 
    require('../Proofs/uUpdateProofGCLCproverWM.php');
  }
  elseif ($auxProverId == 6) { // GCLCprover - Gröbner Basis Method
    echo "<p>Processing (GCLCprover - Gröbner Basis Method), please wait</p>";
    flush(); 
    require('../Proofs/uUpdateProofGCLCproverGBM.php');
  }
  
  // Os programas que processam a demonstração fazem o fecho da transação.

  // referências bibliográficas      

  for ($jaux=1;$jaux<=$pNumRefBibDem[$iaux];$jaux++) {
    //    echo "<pre>BibRefDem         - ".$pBibRefDem[$iaux][$jaux]."</pre>"; 
    //    echo "<pre>DelBibRefDem      - ".$pDelBibRefDem[$iaux][$jaux]."</pre>"; 

    // vai apagar uma referência bibliográfica (eventualmente)
    if ($pDelBibRefDem[$iaux][$jaux] == 'on') {
      $auxDelBibRefDem = $pBibRefDem[$iaux][$jaux];
      $auxDemId = $pDemId[$iaux];
      $sqlDeleteBibRefDem = "DELETE FROM bibproofs
                                   WHERE bibrefId = '$auxDelBibRefDem'
                                     AND demId = '$auxDemId'";
      $resultDeleteBibRefDem = mysql_query($sqlDeleteBibRefDem,$ligacao);

      if (!$resultDeleteBibRefDem) {
	echo 'Error - Delete Bib. Ref. Dem. (L653)';
	// TRANSAÇÕES - ROLLBACK
	@ mysql_query("ROLLBACK");
	echo "<meta http-equiv=\"refresh\" content=\"20; url=updateGeoThm.php?argumento=$pTeoId\" />";
	exit;
      } 
    }

  }


  //  echo "<pre>NewBibRefDem      - $pNewBibRefDem[$iaux]   </pre>";   
  //  echo "<pre>CheckNewBibRefDem - $pCheckNewBibRefDem[$iaux]</pre>"; 

  // Vai inserir uma nova referência bibliográfica (eventualmente)
  if ($pCheckNewBibRefDem[$iaux] == 'on') {
    $auxNewBibRefDem = $pNewBibRefDem[$iaux];
    $auxDemId = $pDemId[$iaux];
    $sqlInsertNewBibRefDem = "INSERT INTO bibproofs (bibrefId,demId) 
                            VALUES ('$auxNewBibRefDem','$auxDemId')";
    $resultInsertNewBibRefDem = mysql_query($sqlInsertNewBibRefDem,$ligacao);
    
    if (!$resultInsertNewBibRefDem) {
      echo 'Error - New Bib. Ref. Dem. not inserted! (L677)';
      // TRANSAÇÕES - ROLLBACK
      @ mysql_query("ROLLBACK");
      exit;
      // echo "<meta http-equiv=\"refresh\" content=\"2; url=updateGeoThm.php?argumento=$pTeoId\" />";
      exit;
    } 
  }
  echo "<hr>";
}

// se tudo correu bem... então pode-se fazer a inserção
@mysql_query("COMMIT");

// e informar o mundo que tudo está bem
echo "<h3>Problem proofs updated</h3>";

// Volta para a página contendo a lista de problemas
echo "<meta http-equiv='refresh' content='2; url=insertUpdateGeoThms.php' />";


?>

<hr/>

<p>&nbsp;</p>

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


<? // funções auxiliares

function mostraTodosOsValores($_POST) {

  $pTeoId             = $_POST['TeoId'];
  $pTeoName           = $_POST['TeoName'];
  $pDateSubmission    = $_POST['DateSubmission'];
  $pCategory          = $_POST['Category'];
  $pShortDescription  = $_POST['ShortDescription'];
  $pDescription       = $_POST['Description'];
  // Como obter de um campo múltipo os valores individuais através de exp. reg.
  $pUserInfo          = $_POST['UserInfo'];
  

  echo "$pTeoId<br />";             
  echo "$pTeoName<br />";           
  echo "$pDateSubmission<br />";    
  echo "$pCategory<br />";          
  echo "$pShortDescription<br />";  
  echo "$pDescription<br />";       
  echo "$pUserInfo<br />";          

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

  echo "$pUserId<br />"; 

  $pNumRefBibTeo      = $_POST['NumRefBibTeo'];
  
  echo "$pNumRefBibTeo<br />"; 

  for ($iaux=1;$iaux<=$pNumRefBibTeo;$iaux++) {
    $pBibRefTeo[$iaux]    = $_POST["BibRefTeo$iaux"];
    $pDelBibRefTeo[$iaux] = $_POST["DelBibRefTeo$iaux"];

    echo $pBibRefTeo[$iaux]."<br />"; 
    echo $pDelBibRefTeo[$iaux]."<br />"; 
  }
  $pNewBibRefTeo      = $_POST['NewBibRefTeo'];
  $pCheckNewBibRefTeo = $_POST['CheckNewBibRefTeo'];
  
  echo $pNewBibRefTeo."<br />"; 
  echo $pCheckNewBibRefTeo."<br />"; 

  // ================================
  // Figuras - recepção dos valores
  // ================================
  $pNumFiguras        = $_POST['NumFiguras'];

  echo $pNumFiguras."<br />"; 

  for ($iaux=1;$iaux<=$pNumFiguras;$iaux++) {
    $pFigId[$iaux]                = $_POST["FigId$iaux"];
    $pDrawerName[$iaux]           = $_POST["DrawerName$iaux"];
    $pDrawerVersion[$iaux]        = $_POST["DrawerVersion$iaux"];
    $pDateSubmissionDrawer[$iaux] = $_POST["DateSubmissionDrawer$iaux"];
    $pDrawerCode[$iaux]           = $_POST["DrawerCode$iaux"];
    
    // Como obter de um campo múltipo os valores individuais através de exp. reg.
    $pDrawerUserName[$iaux]  = $_POST["DrawerUserName$iaux"];
    
    preg_match("§([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+)§",$pDrawerUserName[$iaux],$matches);
    
    $pDrawerUserId[$iaux] = $matches[1];
    
    echo $pFigId[$iaux]."<br />"; 
    echo $pDrawerUserName[$iaux]."<br />"; 
    echo $pDrawerUserId[$iaux]."<br />"; 
    echo $pDrawerVersion[$iaux]."<br />"; 
    echo $pDateSubmissionDrawer[$iaux]."<br />"; 
    echo $pDrawerCode[$iaux]."<br />";  


    // referências bibliográficas
    
    $pNumRefBibFig[$iaux]          = $_POST["NumRefBibFig$iaux"];

    echo $pNumRefBibFig[$iaux]."<br />";     
    
    
    for ($jaux=1;$jaux<=$pNumRefBibFig[$iaux];$jaux++) {
      $pBibRefFig[$iaux][$jaux]    = $_POST["BibRefFig$iaux-$jaux"];
      $pDelBibRefFig[$iaux][$jaux] = $_POST["DelBibRefFig$iaux-$jaux"];

      echo $pBibRefFig[$iaux][$jaux]."<br />";  
      echo $pDelBibRefFig[$iaux][$jaux]."<br />";  
    }
    $pNewBibRefFig[$iaux]      = $_POST["NewBibRefFig$iaux"];
    $pCheckNewBibRefFig[$iaux] = $_POST["CheckNewBibRefFig$iaux"];

    echo $pNewBibRefFig[$iaux]."<br />";  
    echo $pCheckNewBibRefFig[$iaux]."<br />";  
  }
  
  
  // ====================================
  // Demonstrações - recepção dos valores
  // ====================================
  $pNumDemonstracoes = $_POST['NumDemonstracoes'];

  echo $pNumDemonstracoes."<br />";  

  for ($iaux=1;$iaux<=$pNumDemonstracoes;$iaux++) {
    $pDemId[$iaux]                = $_POST["DemId$iaux"];
    $pProverName[$iaux]           = $_POST["ProverName$iaux"];
    $pProverVersion[$iaux]        = $_POST["ProverVersion$iaux"];
    $pProverDateSubmission[$iaux] = $_POST["ProverDateSubmission$iaux"];
    $pProverCode[$iaux]           = $_POST["ProverCode$iaux"];
    
    // Como obter de um campo múltipo os valores individuais através de exp. reg.
    $pProverUserName[$iaux]  = $_POST["ProverUserName$iaux"];
    
    preg_match("§([A-Za-z0-9 _.]+) -- ([A-Za-z0-9 _.]+)§",$pProverUserName[$iaux],$matches);
    
    $pProverUserId[$iaux]    = $matches[1];
    
    echo $pDemId[$iaux]."<br />";  
    echo $pProverUserName[$iaux]."<br />";  
    echo $pProverUserId[$iaux]."<br />";  
    echo $pProverVersion[$iaux]."<br />";  
    echo $pProverDateSubmission[$iaux]."<br />";  
    echo $pProverCode[$iaux]."<br />";  


    // referências bibliográficas
    $pNumRefBibDem[$iaux]          = $_POST["NumRefBibDem$iaux"];
    
    echo $pNumRefBibDem[$iaux]."<br />"; 

    for ($jaux=1;$jaux<=$pNumRefBibDem[$iaux];$jaux++) {
      $pBibRefDem[$iaux][$jaux]    = $_POST["BibRefDem$iaux-$jaux"];
      $pDelBibRefDem[$iaux][$jaux] = $_POST["DelBibRefDem$iaux-$jaux"];

      echo $pBibRefDem[$iaux][$jaux]."<br />"; 
      echo $pDelBibRefDem[$iaux][$jaux]."<br />"; 
    }
    $pNewBibRefDem[$iaux]      = $_POST["NewBibRefDem$iaux"];
    $pCheckNewBibRefDem[$iaux] = $_POST["CheckNewBibRefDem$iaux"];

    echo $pNewBibRefDem[$iaux]."<br />"; 
    echo $pCheckNewBibRefDem[$iaux]."<br />"; 

  }
}












?>