// get_module.cgi: applicazione per reperire la pagina (costruita dal docente)
// relativa al modulo passato. Tale pagina rimane fuori dall'albero del sito WWW
// Serve inoltre per ritornare le lezioni da scaricare ed i test da eseguire.
// Il comportamento del programma viene determinato in base alla presenza o meno
// di variabili passate sullo stdin:
// - se <20> presente solo la variabile MODULO allora introduce nella pagina iniziale del modulo
// - se sono presenti sia la variabile MODULO che TESTNUM allora ritorna il test indicato per tale modulo (eseguendo controlli se il test <20> gi<67> stato eseguito
// - se sono presenti MODULO TESTNUM e LEZIONE ritorna la lezione indicata, controllando il livello di test necessario per scaricarla
#include<libpq++.h>
#include"applicat.h"
enumbehaviour{normal,get_test,get_lesson};
classGet_module_Application:publicApplication
{
private:
String_dbname;
String_utente;// Utente corrente
String_modulo;// Modulo
String_testnum;// Livello del test
String_lezione;// Nome della lezione
PgEnv_environment;
PgTransaction*_db;
behaviour_what;// Comportamento: reperisce l'indice del modulo, i test o le lezioni
protected:
virtualboolcreate();
virtualbooldestroy();
virtualvoidmain_func();
virtualvoidprint_header(constchar*title);
voidprint_access_error();
voidget_module();
public:
Get_module_Application(){_db=NULL;}
virtual~Get_module_Application(){};
};
boolGet_module_Application::create()
{
_dbname=POSTGRES_DB;
_environment.Port(POSTGRES_PORT);
_environment.Host(POSTGRES_HOST);
_utente=getenv("REMOTE_USER");
_modulo="";
_what=normal;
char*t1,*t2;
char*ccc=getenv("CONTENT_LENGTH");
intcl=ccc!=NULL?atoi(ccc):0;
if(cl<512){// Evita di ricevere troppa roba sullo stdin
for(intx=0;cl&&(!feof(stdin));x++){
t1=fmakeword(stdin,'&',&cl);
t2=makeword(t1,'=');
unescape_url(t1);
unescape_url(t2);
if(!strcmp(t2,"MODULO"))
_modulo=t1;
if(!strcmp(t2,"TESTNUM"))
_testnum=t1;
if(!strcmp(t2,"LEZIONE"))
_lezione=t1;
}
if(!_testnum.empty())
_what=get_test;
if(!_lezione.empty())
_what=get_lesson;
}
else{
print_header("Troppi dati inviati");
cout<<"<H2>Troppi dati inviati</H2><BR><BR>"<<endl;
cout<<"<P>L'applicazione ha ricevuto troppi dati sul buffer d'ingresso.</P><BR>"<<endl;
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
print_header("Accesso al livello di test non consentito");
cout<<"<H2>Accesso al livello di test non consentito</H2><BR><BR>"<<endl;
cout<<"<P>L'utente <STRONG>"<<_utente<<"</STRONG> non ha i permessi necessari per accedere al livello di test richiesto oppure il test <20> gi<67> stato svolto.</P><BR>"<<endl;
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
cout<<"<P>L'utente <STRONG>"<<_utente<<"</STRONG> non ha i permessi necessari per accedere al livello di lezione richiesto.</P><BR>"<<endl;
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";
cout<<"<P>Per ritornare alla pagina iniziale del modulo premete il pulsante INDIETRO del vostro browser o cliccate <a onclick=window.history.back(1)> qui</a>.</P><BR>";