<?php // $Id:$
session_start();
$pTipoUtilizador = $_SESSION['tipoUtilizador'];
if ($pTipoUtilizador=="anonymous" || $pTipoUtilizador=="regular") {// separa por tipo de utilizador
  require('headersubUsers.inc');
  require('menusubUsers.inc');
}
else {
  require('headersubAdmins.inc');
  require('menusubAdmins.inc');
}
?>


<center>
<h2 class="maketitle">Problems List</h2>
</center>



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

<?php




// Vai recuperar (ou inicializar) as variáveis de ambiente, a saber:
//  Número de linhas por página (modulo)
//  Página actual (nPagina)
//  Última página (numPaginas)
//  Tipo de problemas a mostrar (tipoProblema)
//  Tipo de Pesquisa a efectuar (tipoPesquisa)

// por omissão seleccionam-se todos os problemas
$consultaSQL = "SELECT teoId,teoName
                  FROM theorems
              ORDER BY teoName";

echo "<h1>Consulta: $consultaSQL</h1>";

if (!isset($_SESSION['modulo'])) { // Inicialização;
  $_SESSION['modulo']=10;
  $modulo=$_SESSION['modulo'];
  $_SESSION['nPagina']=1;
  $nPagina = $_SESSION['nPagina'];
  $_SESSION['numPaginas']=1; // este valor não está correcto! Retirar???
  $_SESSION['tipoProblema']='all';
  $tipoProblema=$_SESSION['tipoProblema'];
  $_SESSION['tipoPesquisa']='name';
  $tipoPesquisa=$_SESSION['tipoPesquisa'];  
}
else {
  if (isset($_POST['Nrows'])) { // Vai modificar o valor do módulo
    $_SESSION['modulo']= $_POST['Nrows'];
    // Sempre que se muda o número de elementos por página volta-se à
    // primeira página. Isto para evitar que, não haja resultados para
    // mostrar (por diminuição do número de páginas)
    $_SESSION['nPagina']= 1;
  }
  if (isset($_POST['GoTo'])) { // Vai modificar o valor da página corrente
    $auxGoto = $_POST['GoTo'];
    $nPagina = $_SESSION['nPagina'];
    $numPaginas = $_SESSION['numPaginas'];
    if ($auxGoto=='Home')
      $_SESSION['nPagina']= 1;
    if ($auxGoto=='PgUp')
      if ($nPagina>1)
	$_SESSION['nPagina']= $nPagina-1;
    if ($auxGoto=='PgDn')
      if ($nPagina<$numPaginas & $numPaginas>1 )
	$_SESSION['nPagina']= $nPagina+1;
    if ($auxGoto=='End')
      $_SESSION['nPagina']= $numPaginas;
  }
  if (isset($_POST['Show'])) { // Vai modificar o tipo de problemas a ser visualizado
    $auxShow = $_POST['Show'];
    // Sempre que se muda o tipo de problemas volta-se à primeira
    // página. Isto para evitar que, não haja resultados para mostrar
    // (por diminuição do número de problemas e consequentemente do
    // número de páginas)
    $_SESSION['nPagina']= 1;
    if ($auxShow=='all') {
      $_SESSION['tipoProblema']='all';
      // vai seleccionar todos os elementos
      $consultaSQL = "SELECT teoId,teoName
                        FROM theorems
                    ORDER BY teoName";
    }
    if ($auxShow=='with statement') {
      $_SESSION['tipoProblema']='statement';
      // só selecciona os problemas com um enunciado formal
      $consultaSQL = 'SELECT DISTINCT teoId,teoName 
                        FROM theorems
                       WHERE NOT(description IS NULL)
                    ORDER BY teoName'; 
    }
    if ($auxShow=='with proofs') {
      $_SESSION['tipoProblema']='proofs';
      // só selecciona os problemas com demonstrações
      $consultaSQL = 'SELECT DISTINCT theorems.teoId,teoName 
                        FROM theorems JOIN demonstrations 
                          ON theorems.teoId=demonstrations.teoId
                    ORDER BY teoName'; 
    }
    if ($auxShow=='with figures') {
      $_SESSION['tipoProblema']='figures';
      // só selecciona os problemas com figuras
      $consultaSQL = 'SELECT DISTINCT theorems.teoId,teoName 
                        FROM theorems JOIN figures
                          ON theorems.teoId=figures.teoId
                    ORDER BY teoName'; 
      $tipoProblema='figures';
    }
  }
  if (isset($_POST['Search'])) { // Vai fazer uma pesquisa concreta
    // Sempre que se vai pesquisar um valor concreto volta-se à primeira
    // página. Isto para evitar que, não haja resultados para mostrar
    // (por diminuição do número de problemas e consequentemente do
    // número de páginas)

    echo "<h1>O que é que eu estou a fazer aqui</h1>";

    $_SESSION['nPagina']= 1;
    $auxShow     = $_POST['Search'];
    $valueSearch = $_POST['ValueSearch'];
    $_SESSION['ValueSearch'] = $valueSearch;
    if ($valueSearch=="") { // se o valor a pesquisar é a sequência vazia
      // seleccionam-se todos os problemas: ou é por erro; ou é uma
      // passo inicial (mas já com variáveis de ambiente
      $consultaSQL = "SELECT teoId,teoName
                        FROM theorems
                    ORDER BY teoName";
      unset($_SESSION['tipoPesquisa']); 
    }
    if ($auxShow=='by Name' && $valueSearch!="") {
      $_SESSION['tipoPesquisa']='name';
      // a pesquisa é feita no campo "TeoName" utilizando RegExps do SQL
      $varPesquisa = $valueSearch;
      $consultaSQL = "SELECT DISTINCT theorems.teoId,teoName 
                        FROM theorems JOIN figures
                          ON theorems.teoId=figures.teoId
                       WHERE teoName LIKE '%$varPesquisa%'
                    ORDER BY teoName";  
      echo "<h1>O que é que eu estou a fazer aqui XXXXXXXXXXXX</h1>";
    }
    if ($auxShow=='constructions used' && $valueSearch!="") {
      $_SESSION['tipoPesquisa']='constructions';
      // a pesquisa devia ser feita nas figuras adestritas aos teoremas 
      // XXX Está por fazer XXX
      // mostra todos os resultados
      $varPesquisa = '%'.$valueSearch.'%';
      $consultaSQL = 'SELECT DISTINCT theorems.teoId,teoName 
                        FROM theorems JOIN figures
                          ON theorems.teoId=figures.teoId
                    ORDER BY teoName';  
    }
    if ($auxShow=='lemmas used' && $valueSearch!="") {
      $_SESSION['tipoPesquisa']='lemmas';
      // a pesquisa devia ser feita nas demonstrações  adistritas aos teoremas 
      // XXX Está por fazer XXX
      // mostra todos os resultados
      $varPesquisa = '%'.$valueSearch.'%';
      $consultaSQL = 'SELECT DISTINCT theorems.teoId,teoName 
                        FROM theorems JOIN figures
                          ON theorems.teoId=figures.teoId
                    ORDER BY teoName'; 
    }
  }
  $modulo=$_SESSION['modulo'];
  $nPagina = $_SESSION['nPagina'];
  $tipoProblema=$_SESSION['tipoProblema'];
  $tipoPesquisa=$_SESSION['tipoPesquisa'];  
}

// cria uma pesquisa, que: ou se mantém, ou foi alterada por invocação
// da consulta apropriada para o efeito

$var=$_POST['ConsultaSQL'];

echo "<h1>XXXXXXXXX-$var-XXXXXXXXXX</h1>";


if (!isset($_POST['ConsultaSQL']) || $_POST['ConsultaSQL']=="") {
  $sql = $consultaSQL;

  echo " eco ";

  echo "<h1>-- $sql --</h1>";
}
else {

  echo " Não eco ";

  $sql = $_POST['ConsultaSQL'];
}

echo "<h1>-- $sql --</h1>";

$resultado = mysql_query($sql,$ligacao);


// O números de campos obtidos
$ncampos =mysql_num_fields($resultado);
// O números de linhas obtidos
$nlinhas =mysql_num_rows($resultado);

     
// Vai (eventualmente) modificar o número de páginas
if ($nlinhas<$modulo) {
  $numPaginas = 1;
  $_SESSION['numPaginas']=$numPaginas; 
}
else {
  // calcula o divisor (inteiro) de nlinhas por módulo
  $numPaginas = floor($nlinhas/$modulo+1); 
  $_SESSION['numPaginas']=$numPaginas; 
}

// echo "<center>";
// echo "<h4 class='maketitle'>$nlinhas Geometric Theorems</h4>";
// echo "</center>";

echo "<hr>";

echo "<center>";
echo "<table border=1 width=100%>\n";
print "<tr>\n"; 
print "<form action='listingGeoThms.php' method='post'>";
print "<th><input type='submit' value='Show'></th>"; 
print "<th><SELECT NAME='Show'>";
if ($tipoProblema=='all') {
  print "<option selected>all</option>";
}
else {
  print "<option>all</option>";
}
if ($tipoProblema=='statement') {
  print "<option selected>with statement</option>";
}
else {
  print "<option>with statement</option>";
}
if ($tipoProblema=='proofs') {
  print "<option selected>with proofs</option>";
}
else {
  print "<option>with proofs</option> ";
}if ($tipoProblema=='figures') {
  print "<option selected>with figures</option>";
}
else {
  print "<option>with figures</option>";
}
print "</SELECT></th>"; 
print "</form>"; 
print "<form action='listingGeoThms.php' method='post'>";
// o tipo de pesquisa tem de ser passado como um valor escondido
print "<input type='hidden' name='ConsultaSQL' value='$sql'>";
print "<th><input type='submit' value='N. rows'</th>";
print "<th><SELECT NAME='Nrows'>";
if ($modulo==10) {
  print "<option selected>10</option>";
}
else {
  print "<option>10</option>";
}
if ($modulo==20) {
  print "<option selected>20</option>";
}
else {
  print "<option>20</option>";
}
if ($modulo==50) {
  print "<option selected>50</option>";
}
else {
  print "<option>50</option>";
}
print "</SELECT></th>"; 
print "</form>"; 
print "<th>Page $nPagina of $numPaginas</th><th>"; 
print "<form action='listingGeoThms.php' method='post'>"; 
// a pesquisa SQL a mostrar tem de ser passado como um valor escondido
print "<input type='hidden' name='ConsultaSQL' value='$sql'>";
print "<input type='hidden' name='GoTo' value='Home'>";
print "<th><input type='submit' value='Home'></th>"; 
print "</form>"; 
print "<form action='listingGeoThms.php' method='post'>"; 
// a pesquisa SQL a mostrar tem de ser passado como um valor escondido
print "<input type='hidden' name='ConsultaSQL' value='$sql'>";
print "<input type='hidden' name='GoTo' value='PgUp'>";
print "<th><input type='submit' value='Pg Up'></th>"; 
print "</form>"; 
print "<form action='listingGeoThms.php' method='post'>"; 
// a pesquisa SQL a mostrar tem de ser passado como um valor escondido
print "<input type='hidden' name='ConsultaSQL' value='$sql'>";
print "<input type='hidden' name='GoTo' value='PgDn'>";
print "<th><input type='submit' value='Pg Dn'></th>"; 
print "</form>"; 
print "<form action='listingGeoThms.php' method='post'>"; 
// a pesquisa SQL a mostrar tem de ser passado como um valor escondido
print "<input type='hidden' name='ConsultaSQL' value='$sql'>";
print "<input type='hidden' name='GoTo' value='End'>";
print "<th><input type='submit' value='End'></th>"; 
print "</form>"; 
print "<th>";
print "<table width='100%'>";
print "<tr>";
print "<form action='listingGeoThms.php' method='post'>";
// a pesquisa é, para já, só feita em termos de nomes dos teoremas
print "<th><input type='submit' value='Search'</th>";
print "<th><SELECT NAME='Search'>";
print "              <option>---Clear---</option>  ";
print "              <option>by Name</option>  ";
//print "              <option>constructions used</option>  ";
//print "              <option>lemmas used</option> "; 
print "           </SELECT></th>"; 
print "</tr>"; 
print "<tr><th colspan='2' width='100%'> <input type='text' name='ValueSearch' size='20' value='$varPesquisa'></th></tr>";
print "</table>";
print "</form>"; 
print "</th>";
print "</tr>\n\n";
print "</table>";
echo "</center>";


//print "<p>&nbsp;</p>";
echo "<hr>";
//print "<p>&nbsp;</p>";

if ($nlinhas==0) { // Não há resultados para mostrar
  print("<h2>".gettext("There are no results to show")."</h2>");
}
else { // Vai mostrar os resultados por páginas (desde $inicio até $fim)
  // cabeçalho
  print "<center>";
  print "<table border=1 width=100%>\n";
  print "<tr>\n";
  //print "<th> GeoThm Id</th><th> Name</th><th>&nbsp;</th><th>&nbsp;</th>";
  print "<th> Name</th><th>Short Description</th><th>Figure</th><th>N. Figures</th><th>N. Proofs</th><th>&nbsp;</th>";
  print "</tr>\n\n";
  $inicio = 1+($nPagina-1)*$modulo;
  $fim = $nPagina*$modulo;
  if ($fim>$nlinhas) $fim=$nlinhas;
  $iaux = $inicio; 
  // Coloca o ponteiro $resultado a apontar para a 1a linha a obter (começa no 0)
  mysql_data_seek($resultado, $iaux-1);
  // a variável $nThumbnail está relacionada com o mostrar de miniaturas das figuras.
  $nThumbnail=0;
  // começa por apagar as figuras anteriores
  system("rm figureDB*.png figureThumbnail*.png");
  while ($iaux<=$fim) {
    $linha = mysql_fetch_assoc($resultado);
    print "<tr>\n";
    $pTeoId=trim($linha['teoId']);
    $pTeoName=trim($linha['teoName']);
    //  print " <td align=center>$pTeoId</td>\n"; 
    print " <td>$pTeoName</td>\n";
    print " <td>&nbsp;</td>\n";
    $nThumbnail=$nThumbnail+1;
    print " <td align='center'>".obtemfigura($pTeoId,$nThumbnail,$ligacao)."</td>\n";
    print " <td align='center'>".numfiguras($pTeoId,$ligacao)."</td>\n";
    print " <td align='center'>".numprovas($pTeoId,$ligacao)."</td>\n";
    print " <td><a href=Forms/formGeoThm.php?argumento=$pTeoId>See details</a></td>\n";
    print"</tr>";
    $iaux=$iaux+1;
  }
  print "</table>\n";
  print "</center>";
  
  echo "<hr>";
  
  print "<p>&nbsp;</p>";
  
}


function obtemfigura($pTeoId,$nThumbnail,$ligacao) {
  // vai agora criar uma miniatura da imagem
  
  // primeiro obtém a imagem da Base de dados, dado que a selecção é
  // feita pelo identificação do teorema, vai-se obter a promeira das
  // imagens.
  
  $sqlFiguraPNG = "SELECT figure 
                     FROM figures 
                    WHERE teoId='$pTeoId'"; 
  $resultadoFiguraPNG = mysql_query($sqlFiguraPNG, $ligacao); 
  $linhaFiguraPNG = mysql_fetch_array($resultadoFiguraPNG); 
  $FigurePNG = $linhaFiguraPNG["figure"]; 
  
  $vNameFiguraPNG="figureDB".$nThumbnail.".png";
  $vNameThumbNailPNG="figureThumbnail".$nThumbnail.".png";
  
  // depois escreve-a num ficheiro
  ob_start();
  print $FigurePNG;
  $texfile=fopen($vNameFiguraPNG,"w");
  fwrite($texfile,ob_get_contents()); 
  fclose($texfile); 
  ob_end_clean(); 
  
  // depois converte-a numa miniatura através do programa imagemagik é
  // de notar que além da miniaturização há (eventualmente) também uma
  // conversão de formatos (jpg para png).
  system("convert -size 80x80 $vNameFiguraPNG -resize 80x80 +profile \"*\" $vNameThumbNailPNG");
  
  return("<img src='view_imageThumbnail.php?argumento=$vNameThumbNailPNG' alt='No Figure'>");
}

function numfiguras($pTeoId,$ligacao) {
  $sqlFig = "SELECT figureId
               FROM figures
              WHERE teoId='$pTeoId'";

  $resultadoFig = mysql_query($sqlFig,$ligacao);
  $nlinhasFig   = mysql_num_rows($resultadoFig);
  
  return($nlinhasFig);
}

function numprovas($pTeoId,$ligacao) {
  // cria uma pesquisa --- para obter o número de provas.
  $sqlDem = "SELECT demId
               FROM demonstrations
              WHERE teoId='$pTeoId'";
  
  $resultadoDem = mysql_query($sqlDem,$ligacao);
  $nLinhasDem =mysql_num_rows($resultadoDem);
  return($nLinhasDem);
}

?>

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