#!/usr/bin/perl
##
## listino.pl
##
#
# Incorpora la libreria di decodifica dei dati.
#
require ('mini-lib.pl');
#
# &Metodo_non_gestibile ()
#
sub Metodo_non_gestibile
{
    print STDOUT ("Content-type: text/html\n");
    print STDOUT ("\n");
    print STDOUT ("<HTML>\n");
    print STDOUT ("<HEAD>\n");
    print STDOUT ("<TITLE>Errore</TITLE>\n");
    print STDOUT ("</HEAD>\n");
    print STDOUT ("<H1>Metodo $ENV{REQUEST_METHOD} non gestibile.</H1>\n");
    print STDOUT ("</BODY>\n");
    print STDOUT ("</HTML>\n");
}
#
# &Verifica_dati ()
#
sub Verifica_dati
{
    if ($DATI{ricerca} eq "")
      {
        return (0);
      }
    return (1);
}
#
# &Ricerca_listino ()
#
sub Ricerca_listino
{
    local ($query_sql) =
        "SELECT * FROM Listino WHERE descrizione LIKE '$DATI{ricerca}';";
    local (@risposta) = ();

    if (open (LISTINO, "psql -d pubblico -H -q -c \"$query_sql\" |"))
      {
        @risposta = <LISTINO>;
      }
    else
      {
        @risposta = { "La stringa richiesta è incomprensibile\n" };
      }
    #
    print STDOUT ("Content-type: text/html\n");
    print STDOUT ("\n");
    print STDOUT ("<HTML>\n");
    print STDOUT ("<HEAD>\n");
    print STDOUT
      ("<TITLE>Consultazione di un listino attraverso PostgreSQL</TITLE>\n");
    print STDOUT ("</HEAD>\n");
    print STDOUT ("<BODY>\n");
    print STDOUT ("<H1>Consultazione del listino</H1>\n");
    print STDOUT ("<FORM action=\"/cgi-bin/listino.pl\" method=\"GET\">\n");
    print STDOUT ("<P>\n");
    print STDOUT
      ("Inserire una stringa di ricerca per ottenere gli articoli la\n");
    print STDOUT ("cui descrizione coincide: ``%'' corrisponde a una stringa\n");
    print STDOUT ("indefinita; ``_'' corrisponde a un singolo carattere\n");
    print STDOUT ("indefinito.</P>\n");
    print STDOUT ("<P>\n");
    print STDOUT ("<INPUT name=\"ricerca\" size=\"25\">\n");
    print STDOUT ("<INPUT type=\"submit\" value=\"Cerca\"></P>\n");
    print STDOUT ("</FORM>\n");
    print STDOUT ("<P><HR></P>\n");
    print STDOUT
      ("<H3>Risultato della ricerca con il modello: ``$DATI{ricerca}''</H3>\n");
    print STDOUT ("\n");
    print STDOUT ("@risposta");
    print STDOUT ("\n");
    print STDOUT ("</BODY>\n");
    print STDOUT ("</HTML>\n");
}
#
# &Dati_insufficienti ()
# In pratica, invia il FORM da compilare.
#
sub Dati_insufficienti
{
    print STDOUT ("Content-type: text/html\n");
    print STDOUT ("\n");
    print STDOUT ("<HTML>\n");
    print STDOUT ("<HEAD>\n");
    print STDOUT
      ("<TITLE>Consultazione di un listino attraverso PostgreSQL</TITLE>\n");
    print STDOUT ("</HEAD>\n");
    print STDOUT ("<BODY>\n");
    print STDOUT ("<H1>Consultazione del listino</H1>\n");
    print STDOUT ("<FORM action=\"/cgi-bin/listino.pl\" method=\"GET\">\n");
    print STDOUT ("<P>\n");
    print STDOUT
      ("Inserire una stringa di ricerca per ottenere gli articoli la\n");
    print STDOUT
      ("cui descrizione coincide: ``%'' corrisponde a una stringa\n");
    print STDOUT ("indefinita; ``_'' corrisponde a un singolo carattere\n");
    print STDOUT ("indefinito.</P>\n");
    print STDOUT ("<P>\n");
    print STDOUT ("<INPUT name=\"ricerca\" size=\"25\">\n");
    print STDOUT ("<INPUT type=\"submit\" value=\"Cerca\"></P>\n");
    print STDOUT ("</FORM>\n");
    print STDOUT ("\n");
    print STDOUT ("</BODY>\n");
    print STDOUT ("</HTML>\n");
}
##
## Inizio del programma.
##
local (%DATI) = ();
#
# Decodifica i dati in funzione del tipo di metodo della richiesta.
#
if ($ENV{REQUEST_METHOD} eq 'GET')
  {
    %DATI = &Decodifica_GET;
  }
elsif ($ENV{REQUEST_METHOD} eq 'POST')
  {
    %DATI = &Decodifica_POST;
  }
else
  {
    &Metodo_non_gestibile;
  }
#
# Prima fase: si verificano i dati.
#
if (&Verifica_dati)
  {
    &Ricerca_listino;
  }
else
  {
    &Dati_insufficienti;
  }
#
1;
#
