CREATE OR REPLACE PACKAGE GUI AS
-- VERSIONE: 1.10
/* COSTANTI */
/* un po' di valori di default... */
default_Title CONSTANT varchar2(100):='Laboratorio Basi di Dati 2005'; -- titolo delle pagine
default_MaxTextLength CONSTANT number := 200; -- massima dimensione di un campo in una textbox
default_MaxTextBoxSize CONSTANT number := 50; -- massimo numero di caratteri visualizzati da una textbox
default_TextAreaNRows CONSTANT number := 5; -- numero di righe in una textarea
default_TextAreaNCols CONSTANT number := 80; -- numero di colonne in una textarea
default_YearDiff CONSTANT number := 20; /* differenza standard fra la prima e
l'ultima data mostrata nel menu` a
tendina delle date */
/* inserite qui l'indirizzo del server oracle che usate
Probabilmente se non funzionano alcuni link all'interno della pagina e` perche` dovete
cambiare oracle1 con oracle2 in questa stringa... (o viceversa)
*/
urlServerName CONSTANT varchar2(60):='http://oracle1.cli.di.unipi.it/pls/webdb/';
/* inserite qui il vostro username di oracle (non l'account del cli!) */
userName CONSTANT varchar2(15):='bdl05';
/* alcuni nomi di procedure standard, da NON cambiare (esclusi i casi di testing) */
urlMenu CONSTANT varchar2(40):='gruppo38.menuPrincipale';
urlHelp CONSTANT varchar2(15):='help';
/* url usati, da cambiare. Occhio alla dimensione dell'url!! */
urlLogo CONSTANT varchar2(70):='http://www.cli.di.unipi.it/~gestbdl/bdl05/logobdl.jpg';
urlCSS CONSTANT varchar2(70):='http://www.cli.di.unipi.it/~gestbdl/bdl05/modgui.css';
urlJS CONSTANT varchar2(70):='http://www.cli.di.unipi.it/~gestbdl/bdl05/modgui.js';
/* PROTOTIPI DI FUNZIONE */
PROCEDURE openPage (
title varchar2 DEFAULT default_Title,
javascript2 varchar2 DEFAULT NULL);
PROCEDURE closePage;
PROCEDURE printPlainText (
text varchar2);
PROCEDURE printText (
text varchar2);
PROCEDURE printMessage (
text varchar2);
PROCEDURE printErrorText(
text varchar2);
PROCEDURE printH1 (
text varchar2);
PROCEDURE printH2 (
text varchar2);
PROCEDURE printH3 (
text varchar2);
PROCEDURE printNLine;
PROCEDURE openForm (
action varchar2,
method varchar2 DEFAULT 'GET',
other varchar2 DEFAULT NULL);
PROCEDURE closeForm;
PROCEDURE openTable (
width varchar2 DEFAULT '100%',
border varchar2 DEFAULT '1',
other varchar2 DEFAULT NULL);
PROCEDURE closeTable;
PROCEDURE openTableRow( other varchar2 default null );
PROCEDURE closeTableRow;
PROCEDURE printTableData(text varchar2, other varchar2 default null);
PROCEDURE openTableData( other varchar2 default null );
PROCEDURE closeTableData;
PROCEDURE printTableHead( text varchar2, other varchar2 default null );
PROCEDURE openTableHead( other varchar2 default null );
PROCEDURE closeTableHead;
PROCEDURE printWrongTableData( text varchar2, other varchar2 default null );
PROCEDURE openWrongTableData( other varchar2 default null );
PROCEDURE printTableEditRow(
label varchar2,
name varchar2,
length number DEFAULT default_MaxTextLength,
defval varchar2 DEFAULT NULL,
thesize number DEFAULT default_MaxTextBoxSize,
error boolean DEFAULT FALSE);
PROCEDURE printTextBox(
name varchar2,
length number DEFAULT default_MaxTextLength,
defval varchar2 DEFAULT NULL,
thesize number DEFAULT default_MaxTextBoxSize,
other varchar2 DEFAULT NULL);
PROCEDURE printPassword (
name varchar2,
length number DEFAULT default_MaxTextLength);
PROCEDURE printCheckBox(
name varchar2,
active boolean DEFAULT FALSE,
value varchar2 DEFAULT 'on',
other varchar2 DEFAULT NULL);
PROCEDURE printRadioButton (
name varchar2,
value varchar2,
label varchar2,
selected boolean DEFAULT FALSE,
other varchar2 DEFAULT NULL);
PROCEDURE openSelect (
name varchar2,
other varchar2 DEFAULT NULL);
PROCEDURE openLinkedSelect (
name varchar2,
other varchar2 DEFAULT NULL);
PROCEDURE closeSelect;
PROCEDURE printOption(
value varchar2,
label varchar2,
selected boolean DEFAULT FALSE);
PROCEDURE printTextArea (
name varchar2,
value varchar2 DEFAULT NULL,
nrows number DEFAULT default_TextAreaNRows,
ncols number DEFAULT default_TextAreaNCols,
other varchar2 DEFAULT NULL);
PROCEDURE printSubmitButton (
label varchar2,
name varchar2 DEFAULT NULL,
other varchar2 DEFAULT NULL);
PROCEDURE printButton (
label varchar2,
name varchar2 DEFAULT NULL,
other varchar2 DEFAULT NULL);
PROCEDURE printResetButton (
label varchar2,
other varchar2 DEFAULT NULL);
PROCEDURE printHiddenField (
name varchar2,
value varchar2 DEFAULT NULL);
PROCEDURE printSession (
value varchar2);
PROCEDURE printLink(
url varchar2,
name varchar2,
newwnd boolean DEFAULT FALSE);
PROCEDURE openCenter;
PROCEDURE closeCenter;
PROCEDURE printToolbar (sessione varchar2);
PROCEDURE printDateInput(
prefix in varchar2 DEFAULT 'laData',
data date DEFAULT NULL,
yearDiff integer DEFAULT default_YearDiff,
canBeNull boolean DEFAULT FALSE,
other varchar2 DEFAULT NULL);
PROCEDURE printDateComp(
prefix in varchar2 DEFAULT 'laData',
prefix2 in varchar2 DEFAULT 'laData2',
data date DEFAULT NULL,
comp varchar2 DEFAULT NULL,
data2 date DEFAULT NULL,
yearDiff integer DEFAULT default_YearDiff,
canBeNull boolean DEFAULT FALSE );
FUNCTION htmlEncode( text varchar2 ) RETURN varchar2;
FUNCTION sessionEncode( iduser number ) RETURN varchar2;
FUNCTION getUserID( session varchar2 ) RETURN number;
END GUI;
/
CREATE OR REPLACE PACKAGE BODY GUI AS
/* inizializza una pagina html.
Parametri:
title - titolo della pagina (default: Laboratorio Basi di Dati 2005)
javascript2 - url di un ulteriore (opzionale) file javascript
Genera:
title
*/
PROCEDURE openPage (
title varchar2 DEFAULT default_Title,
javascript2 varchar2 DEFAULT NULL) IS
BEGIN
htp.print('');
htp.print('');
htp.print('' );
htp.print('' );
IF javascript2 IS NOT NULL THEN
htp.print( '' );
END IF;
htp.print('' || title || '');
htp.print('');
htp.print('
' );
htp.print('
');
htp.print('
' );
htp.print('
Universit&' || 'agrave; di Pisa ' );
htp.print(' Laboratorio di Basi di Dati
' );
htp.print('
' );
htp.print('
');
END;
/* chiude una pagina html.
Genera:
*/
PROCEDURE closePage IS
BEGIN
htp.print('');
htp.print('');
END;
/* stampa del testo normale, cosi` com'e` (equivalente a htp.print())
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printPlainText (
text varchar2) IS
BEGIN
htp.print(text);
END;
/* stampa del testo normale in un paragrafo.
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printText (
text varchar2) IS
BEGIN
htp.print('
' || text || '
');
END;
/* stampa un messaggio se la stringa passata e` diversa da null
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printMessage (
text varchar2) IS
BEGIN
htp.print( '
' || text || '
' );
END;
/* stampa del testo di un errore in un paragrafo.
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printErrorText (
text varchar2) IS
BEGIN
htp.print('
' || text || '
' );
END;
/* stampa del testo come un titolo principale
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printH1 (
text varchar2) IS
BEGIN
htp.print('
' || text || '
');
END;
/* stampa del testo come un titolo secondario
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printH2 (
text varchar2) IS
BEGIN
htp.print('
' || text || '
');
END;
/* stampa del testo come un titolo di terzo livello
Parametri:
text - testo da stampare
Genera:
text
*/
PROCEDURE printH3 (
text varchar2) IS
BEGIN
htp.print('
' || text || '
');
END;
/* stampa un ritorno a capo in html.
Genera:
*/
PROCEDURE printNLine IS
BEGIN
htp.print(' ');
END;
/* inizializza un form
Parametri:
action - url della pagina a cui trasferire i dati
method - metodo di trasferimento dei parametri (GET o POST) (default: 'GET')
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE closeForm IS
BEGIN
htp.print('');
END;
/* inizializza una tabella
Parametri:
width - larghezza della tabella (default: 100%)
border - dimensione dei bordi della tabella (default: 1)
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE openTable (
width varchar2 DEFAULT '100%',
border varchar2 DEFAULT '1',
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print('
');
END;
/* chiude una tabella
Genera:
*/
PROCEDURE closeTable IS
BEGIN
htp.print('
');
END;
/* inizializza una riga di una tabella
Parametri:
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE openTableRow( other varchar2 DEFAULT NULL ) IS
BEGIN
htp.print('
' );
END;
/* chiude una riga di una tabella
Genera:
*/
PROCEDURE closeTableRow IS
BEGIN
htp.print('');
END;
/* scrive un campo di una tabella.
Parametri:
text - contenuto del campo
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
text
*/
PROCEDURE printTableData(
text varchar2,
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print( '
' || text || '
' );
END;
/* inizializza un campo di una tabella.
Parametri:
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE openTableData( other varchar2 DEFAULT NULL ) IS
BEGIN
htp.print( '
' );
END;
/* chiude un campo di una tabella. */
PROCEDURE closeTableData IS
BEGIN
htp.print( '
' );
END;
/* scrive un campo d'intestazione di una tabella.
Parametri:
text - contenuto del campo
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
text
*/
PROCEDURE printTableHead(
text varchar2,
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print( '
' || text || '
' );
END;
/* inizializza un campo d'intestazione di una tabella.
Parametri:
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE openTableHead( other varchar2 DEFAULT NULL ) IS
BEGIN
htp.print( '
' );
END;
/* chiude un campo d'intestazione di una tabella. */
PROCEDURE closeTableHead IS
BEGIN
htp.print( '
' );
END;
/* scrive il nome di un campo errato di una tabella.
Parametri:
text - contenuto del campo
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
text
*/
PROCEDURE printWrongTableData(
text varchar2,
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print( '
' || text || '
' );
END;
/* inizializza un campo errato di una tabella.
Parametri:
other - variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE openWrongTableData( other varchar2 DEFAULT NULL ) IS
BEGIN
htp.print( '
' );
END;
/* stampa una riga di una tabella comunemente usata per la modifica dei campi.
Parametri:
label - nome del campo da visualizzare all'utente
name - nome del campo della casella di testo (non visibile all'utente)
length - lunghezza della casella di testo (default: default_MaxTextLength)
defval - valore di preimpostato della casella di testo (default: NULL)
thesize - dimensione massima del campo (default: default_MaxTextBoxSize)
error - indica se deve segnalare il campo come errato o meno (nome in rosso o no) (default: FALSE)
Genera:
label
*/
PROCEDURE printTableEditRow(
label varchar2,
name varchar2,
length number DEFAULT default_MaxTextLength,
defval varchar2 DEFAULT NULL,
thesize number DEFAULT default_MaxTextBoxSize,
error boolean DEFAULT FALSE) IS
BEGIN
openTableRow;
IF error = TRUE THEN
printWrongTableData( label );
ELSE
printTableData( label );
END IF;
openTableData;
printTextBox( name, length, defval, thesize );
closeTableData;
closeTableRow;
END;
/* stampa una casella di testo.
Parametri:
name - nome del campo
length - dimensione massima del campo (default: default_MaxTextLength)
defval - valore di default
thesize - dimensione della casella di testo (default: default_MaxTextBoxSize)
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE printTextBox(
name varchar2,
length number DEFAULT default_MaxTextLength,
defval varchar2 DEFAULT NULL,
thesize number DEFAULT default_MaxTextBoxSize,
other varchar2 DEFAULT NULL) IS
BEGIN
IF defval IS NULL THEN
htp.print( '');
ELSE
htp.print( '');
END IF;
END;
/* stampa una casella per immettere una password.
Parametri:
name - nome del campo
length - lunghezza del campo (default: default_MaxTextLength)
Genera:
*/
PROCEDURE printPassword (
name varchar2,
length number DEFAULT default_MaxTextLength) IS
BEGIN
htp.print('');
END;
/* stampa una checkbox
Parametri:
name - nome del campo
active - stato della checkbox (attiva o meno) (default: FALSE)
value - valore del campo quando attivo (default: 'on')
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE printCheckBox(
name varchar2,
active boolean DEFAULT FALSE,
value varchar2 DEFAULT 'on',
other varchar2 DEFAULT NULL) IS
BEGIN
IF active = TRUE THEN
htp.print('');
ELSE
htp.print('');
END IF;
END;
/* stampa un radiobutton
Parametri:
name - nome del campo
value - valore del campo quando attivo
label - etichetta del campo
selected - stato della checkbox (attiva o meno) (default: FALSE)
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
*/
PROCEDURE printRadioButton (
name varchar2,
value varchar2,
label varchar2,
selected boolean DEFAULT FALSE,
other varchar2 DEFAULT NULL) IS
BEGIN
IF selected = TRUE THEN
htp.print('' || label);
ELSE
htp.print('' || label);
END IF;
END;
/* inizializza un menu` a tendina
Parametri:
name - nome del campo
other - altre variabili opzionali da inserire nel tag (default: NULL)
Genera:
');
END;
/* aggiunge un'opzione nel menu` a tendina
Parametri:
value - valore del campo quando selezionata questa opzione
label - etichetta dell'opzione
selected - specifica se l'opzione e` selezionata (default: FALSE)
Genera:
*/
PROCEDURE printOption(
value varchar2,
label varchar2,
selected boolean DEFAULT FALSE) IS
BEGIN
IF selected = FALSE THEN
htp.print('');
ELSE
htp.print('');
END IF;
END;
/* stampa un'area di testo multiriga
Parametri:
name - nome del campo
value - valore di default del campo (default: NULL)
nrows - numero di righe (default: default_TextAreaNRows)
ncols - numero di colonne (default: default_TextAreaNCols)
other - altre variabili opzionali da aggiungere al tag (default: NULL)
Genera:
*/
PROCEDURE printTextArea (
name varchar2,
value varchar2 DEFAULT NULL,
nrows number DEFAULT default_TextAreaNRows,
ncols number DEFAULT default_TextAreaNCols,
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print('');
END;
/* aggiunge un pulsante di submit al form
Parametri:
label = label del pulsante
name = nome del pulsante (default: NULL)
other = altre variabili opzionali da aggiungere al tag (default: NULL)
Genera:
*/
PROCEDURE printSubmitButton (
label varchar2,
name varchar2 DEFAULT NULL,
other varchar2 DEFAULT NULL) IS
BEGIN
IF name IS NULL THEN
htp.print('');
ELSE
htp.print('');
END IF;
END;
/* aggiunge un pulsante generico in un form (non fa ne` submit ne` reset)
Parametri:
label = label del pulsante
name = nome del pulsante (default: NULL)
other = altre variabili opzionali da aggiungere al tag (default: NULL)
Genera:
*/
PROCEDURE printButton (
label varchar2,
name varchar2 DEFAULT NULL,
other varchar2 DEFAULT NULL) IS
BEGIN
IF name IS NULL THEN
htp.print('');
ELSE
htp.print('');
END IF;
END;
/* aggiunge un pulsante di reset al form
Parametri:
label = label del pulsante
other = altre variabili opzionali da aggiungere al tag (default: NULL)
Genera:
*/
PROCEDURE printResetButton (
label varchar2,
other varchar2 DEFAULT NULL) IS
BEGIN
htp.print('');
END;
/* aggiunge un campo nascosto al form
Parametri:
name - nome del campo
value - valore del campo (default: NULL)
Genera:
*/
PROCEDURE printHiddenField (
name varchar2,
value varchar2 DEFAULT NULL) IS
BEGIN
htp.print('');
END;
/* aggiunge un campo nascosto per la variabile di sessioe nel form
Parametri:
value - valore del parametro di sessioe
Genera:
Nota:
equivale ad usare inputHiddenField( 'sessione', value );
*/
PROCEDURE printSession (
value varchar2) IS
BEGIN
printHiddenField( 'sessione', value );
END;
/* stampa un link
Parametri:
url - l'url di destinazione (solo il nome della procedura e` necessario,
utente e url del server sono automaticamente aggiunti)
name - nome del link
newwnd - specifica se deve aprire una nuova finestra una volta cliccato
Genera:
name
*/
PROCEDURE printLink(
url varchar2,
name varchar2,
newwnd boolean DEFAULT FALSE) IS
BEGIN
htp.print('' || name || '');
END;
/* inizializza del testo centrato
Genera:
*/
PROCEDURE openCenter IS
BEGIN
htp.print('
');
END;
/* chiude del testo centrato
Genera:
*/
PROCEDURE closeCenter IS
BEGIN
htp.print('
');
END;
/* stampa la toolbar con i comandi standard di navigazione (ovvero i due riferimenti al menu ed all'help)
Parametri:
sessione - L'identificativo di sessione.
*/
PROCEDURE printToolbar( sessione varchar2 ) IS
BEGIN
htp.print( '' );
openTable( border=>'0', width=>'0' );
openTableRow;
openTableData;
openForm( urlMenu );
printHiddenField( 'sessione', sessione );
printSubmitButton( 'Menu Principale' );
closeForm;
closeTableData;
openTableData;
openForm( urlHelp );
printHiddenField( 'sessione', sessione );
printSubmitButton( 'Help' );
closeForm();
closeTableData;
closeTableRow;
closeTable;
END;
/* inserisce le 3 combobox dei menu` a tendina di gg/mm/aaaa
Parametri:
prefix - prefisso per il nome delle componenti
data - la data iniziale da usare
yearDiff - massima distanza degli anni da mostrare
canBeNull - indica se la data puo` essere nulla
other - aggiunge delle opzioni a TUTTE le combobox
Genera:
3 combobox di nome prefix_lAnno, prefix_ilMese, prefix_ilGiorno
con gia` selezionata la data attuale
Autori originali:
Anedda Valentino
Casanovi Claudio
Fioravanti Luca
e` stato cambiato il nome della procedura e sono stati aggiunti i parametri
data e yearDiff.
*/
PROCEDURE printDateInput(
prefix in varchar2 DEFAULT 'laData',
data date DEFAULT NULL,
yearDiff integer DEFAULT default_YearDiff,
canBeNull boolean DEFAULT FALSE,
other varchar2 DEFAULT NULL)
IS
--Variabili della procedura
today date;
tyear integer;
tmonth integer;
tday integer;
minYear integer;
maxYear integer;
--prefix VarChar2(20) := 'default';
--Inizio corpo procedura
BEGIN
today := data;
IF today IS NULL AND canBeNull = FALSE THEN
today := CURRENT_DATE;
END IF;
IF NOT today IS NULL THEN
tyear := EXTRACT(YEAR FROM today);
tmonth := EXTRACT(MONTH FROM today);
tday := EXTRACT(DAY FROM today);
ELSE
tyear := 0;
tmonth := 0;
tday := 0;
END IF;
-- calcola l'intervallo degli anni da visualizzare
IF today IS NULL THEN
minYear := EXTRACT( YEAR FROM CURRENT_DATE ) - yearDiff/2;
maxYear := EXTRACT( YEAR FROM CURRENT_DATE ) + yearDiff/2;
ELSE
minYear := tyear - yearDiff/2;
maxYear := tyear + yearDiff/2;
END IF;
--giorno
GUI.openSelect(prefix||'_ilGiorno', other=>other);
IF canBeNull=TRUE THEN
GUI.printOption( '', '', true );
END IF;
FOR giorno in 1..31
LOOP
IF (giorno = tday) then
GUI.printOption(giorno, giorno, true);
ELSE
GUI.printOption(giorno, giorno);
END IF;
END LOOP;
GUI.closeSelect();
--mese
GUI.openSelect(prefix || '_ilMese', other=>other);
IF canBeNull=TRUE THEN
GUI.printOption( '', '', true );
END IF;
FOR mese in 1..12
LOOP
IF (mese = tmonth) THEN
GUI.printOption(mese, mese, true);
ELSE
GUI.printOption(mese, mese);
END IF;
END LOOP;
GUI.closeSelect();
--Anno
GUI.openSelect(prefix || '_lAnno', other=>other);
IF canBeNull=TRUE THEN
GUI.printOption( '', '', true );
END IF;
--For per inserire anni.
FOR anno IN minYear..maxYear
LOOP
IF (anno = tyear) THEN
GUI.printOption(anno, anno, true);
ELSE
GUI.printOption(anno, anno);
END IF;
END LOOP;
GUI.closeSelect();
END;
/* inserisce le 3 combobox dei menu` a tendina di gg/mm/aaaa, un menu per la scelta del tipo di
confronto da fare con la data (maggiore, minore, uguale, ecc...) ed altre 3 combobox per una
possibile data da indicare per un intervallo
Parametri:
prefix - prefisso per il nome delle componenti
prefix2 - prefisso per il nome dei componenti della seconda data per l'intervallo
data - la data iniziale da usare
comp - tipo di confronto selezionato ('uguale', 'maggiore', 'minore', 'diverso', 'trail')
data2 - la seconda data da usare (per l'intervallo)
yearDiff - massima distanza degli anni da mostrare
canBeNull - indica se la data puo` essere nulla
Genera:
1 combobox con la selezione dei confronti di nome prefix_comp
3 combobox di nome prefix_lAnno, prefix_ilMese, prefix_ilGiorno
con gia` selezionata la data attuale
altre 3 combobox per la seconda data dell'intervallo (il nome e` composto con prefix2 invece che prefix)
Nota:
La seconda data, indipendentemente dal valore di canBeNull non puo` essere null,
se viene passato null viene usata la data attuale.
*/
PROCEDURE printDateComp(
prefix in varchar2 DEFAULT 'laData',
prefix2 in varchar2 DEFAULT 'laData2',
data date DEFAULT NULL,
comp varchar2 DEFAULT NULL,
data2 date DEFAULT NULL,
yearDiff integer DEFAULT default_YearDiff,
canBeNull boolean DEFAULT FALSE ) IS
--Variabili della procedura
today date;
tyear integer;
tmonth integer;
tday integer;
minYear integer;
maxYear integer;
hiddenstr varchar2(50);
BEGIN
today := data;
IF today IS NULL AND canBeNull = FALSE THEN
today := CURRENT_DATE;
END IF;
IF today IS NOT NULL THEN
tyear := EXTRACT(YEAR FROM today);
tmonth := EXTRACT(MONTH FROM today);
tday := EXTRACT(DAY FROM today);
ELSE
tyear := 0;
tmonth := 0;
tday := 0;
END IF;
IF today IS NULL THEN
minYear := EXTRACT( YEAR FROM CURRENT_DATE ) - yearDiff/2;
maxYear := EXTRACT( YEAR FROM CURRENT_DATE ) + yearDiff/2;
ELSE
minYear := tyear - yearDiff/2;
maxYear := tyear + yearDiff/2;
END IF;
--Menu a tendina per i confronti
GUI.openSelect(prefix || '_comp', other=>'onChange="dateCompChange( this, ''' || prefix2 || ''' )"' );
GUI.printOption( 'uguale', 'uguale a', comp='uguale' );
GUI.printOption( 'maggiore', 'maggiore di', comp='maggiore' );
GUI.printOption( 'minore', 'minore di', comp='minore' );
GUI.printOption( 'diverso', 'diverso da', comp='diverso' );
GUI.printOption( 'trail', 'tra il', comp='trail' );
GUI.printOption( 'qualsiasi', 'qualsiasi', comp='qualsiasi' );
GUI.closeSelect;
--giorno
GUI.openSelect(prefix||'_ilGiorno');
IF canBeNull = TRUE THEN
GUI.printOption( '', '' );
END IF;
FOR giorno in 1..31
LOOP
IF (giorno = tday) then
GUI.printOption(giorno, giorno, true);
ELSE
GUI.printOption(giorno, giorno);
END IF;
END LOOP;
GUI.closeSelect();
--mese
GUI.openSelect(prefix || '_ilMese');
IF canBeNull = TRUE THEN
GUI.printOption( '', '' );
END IF;
FOR mese in 1..12
LOOP
IF (mese = tmonth) THEN
GUI.printOption(mese, mese, true);
ELSE
GUI.printOption(mese, mese);
END IF;
END LOOP;
GUI.closeSelect();
--Anno
GUI.openSelect(prefix || '_lAnno');
IF canBeNull = TRUE THEN
GUI.printOption( '', '' );
END IF;
--For per inserire anni.
FOR anno IN minYear..maxYear
LOOP
IF (anno = tyear) THEN
GUI.printOption(anno, anno, true);
ELSE
GUI.printOption(anno, anno);
END IF;
END LOOP;
GUI.closeSelect();
/*********** SECONDA DATA *************/
hiddenstr := 'style="visibility:hidden" ';
IF comp = 'trail' THEN
hiddenstr := '';
END IF;
htp.print( 'ed il' );
today := data2;
IF today IS NULL THEN
today := CURRENT_DATE;
END IF;
tyear := EXTRACT(YEAR FROM today);
tmonth := EXTRACT(MONTH FROM today);
tday := EXTRACT(DAY FROM today);
--giorno
GUI.openSelect(prefix2||'_ilGiorno', other=>hiddenstr || 'id="' || prefix2 || '_ilGiorno"');
FOR giorno in 1..31
LOOP
IF (giorno = tday) then
GUI.printOption(giorno, giorno, true);
ELSE
GUI.printOption(giorno, giorno);
END IF;
END LOOP;
GUI.closeSelect();
--mese
GUI.openSelect(prefix2 || '_ilMese', other=>hiddenstr || 'id="' || prefix2 || '_ilMese"');
FOR mese in 1..12
LOOP
IF (mese = tmonth) THEN
GUI.printOption(mese, mese, true);
ELSE
GUI.printOption(mese, mese);
END IF;
END LOOP;
GUI.closeSelect();
--Anno
GUI.openSelect(prefix2 || '_lAnno', other=>hiddenstr || 'id="' || prefix2 || '_lAnno"');
--For per inserire anni.
FOR anno IN minYear..maxYear
LOOP
IF (anno = tyear) THEN
GUI.printOption(anno, anno, true);
ELSE
GUI.printOption(anno, anno);
END IF;
END LOOP;
GUI.closeSelect();
END;
/* converte una stringa in una stringa html valida
Parametri:
text - testo da convertire
Return:
una stringa con i caratteri speciali html convertiti
*/
FUNCTION htmlEncode( text varchar2 ) RETURN varchar2 IS
BEGIN
RETURN REPLACE( REPLACE( REPLACE( REPLACE( text, '&', '&' || 'amp;' ), '<', '&' || 'lt;' ), '>', '&' || 'gt;' ), '"', '&' || 'quot;' );
END;
/* codifica il parametro di sessione
Parametri:
iduser - id dell'utente
Return:
una stringa di sessione codificata
*/
FUNCTION sessionEncode( iduser number ) RETURN varchar2 IS
BEGIN
RETURN to_char( iduser );
END;
/* decodifica il parametro userid dalla variabile di sessione.
Parametri:
session - la sessione codificata
*/
FUNCTION getUserID( session varchar2 ) RETURN number IS
BEGIN
RETURN to_number( session );
END;
END GUI;
/
show err package GUI;
show err;
commit;