login.php

<?php
 
/*
Lo scopo di questa classe è quello di visualizzare i classici
campi "username" e "passoword" e di gestire una basilare
autenticazione.
*/
class Login extends P4A_Mask
{
    function Login()
    {
        /*
        Richiamiamo il costruttore della classe estesa, questa
        linea è fondamentale!
        */
        parent::P4A_Mask();
 
        /*
        Con questa istruzione possiamo impostare un titolo alla maschera,
        nel caso decidiate di non impostarlo, verrà automaticamente
        generato a partire dal nome della classe.
        */
        $this->setTitle("Applicazione di esempio");
 
        /*
        Costruiamo un widget "message", questo elemento di interfaccia
        è in grado di visualizzare dei messaggi con un'icona. La sua
        particolarità è che il messaggio viene visualizzato e poi
        rimosso, molto utile per i classici messaggi di sistema.
        */
        $this->build("p4a_message", "message");
 
        /*
        Ora istanziamo un "field", il classico campo di input per ricevere
        dati dall'utente.
        I field possono essere di molti tipi (text, textarea, rich_textarea,
        password, image, file), per cambiare tipo è necessario eseguire
        il metodo setType. Questa metodologia è molto comoda per variare il
        tipo di un field a runtime.
        */
        $this->build("p4a_field", "username");
 
        /*
        Vorremmo anche che sia possibile, cliccando il tasto "invio", eseguire
        una funzione a nostra scelta. Per fare questo aggiungiamo al field
        l'azione "onReturnPress" e dichiariamo l'intercettazione.
        */
        $this->username->addAction("onReturnPress");
        $this->intercept($this->username, "onReturnPress", "check");
 
        /*
        Creiamo il field per ricevere la password e impostiamolo di tipo
        "password", così facendo i dati saranno automaticamente criptati
        mediante algoritmo md5 (opzione disabilitabile) e il contenuto
        del campo sarà offuscato dal classico carattere "*".
        */
        $this->build("p4a_field", "password");
        $this->password->setType("password");
        $this->password->addAction("onReturnPress");
        $this->intercept($this->password, "onReturnPress", "check");
        /*
        Alla nostra applicazione serve ancora un tasto "login", da cliccare
        per procedere oltre (anche se è possibile premere il tasto invio
        quando si ha il focus su un field)
        */
        $this->build("p4a_button", "login");
        $this->intercept($this->login, "onClick", "check");
 
        /*
        Dopo aver costruito tutti gli elementi dobbiamo ancorarli
        (nelle posizioni desiderate) in un apposito contenitore.
        P4A ha diversi contenitori (sheet per l'ancoraggio a griglia
        tabellare, canvas per l'ancoraggio a posizione assoluta e relativa,
        frame per il moderno layout tableless, fieldset come estensione del frame)
        */
        $this->build("p4a_frame", "frame");
        $this->frame->anchorCenter($this->message);
        $this->frame->anchor($this->username);
        $this->frame->anchor($this->password);
        $this->frame->newRow();
        $this->frame->anchorCenter($this->login);
        $this->frame->setWidth(300);
 
        /*
        Ora dobbiamo fare sapere al sistema come vogliamo visualizzare gli
        elementi di interfaccia. Il template della maschera di default
        contiene alcune zone diverse: menu, top, main. Desideriamo visualizzare
        nella parte centrale il frame principale:
        */
        $this->display("main", $this->frame);
 
        /*
        Gestiamo anche il focus per l'ingresso nella maschera dicendo al
        sistema quale campo vogliamo sia selezionato.
        */
        $this->setFocus($this->username);
    }
 
    function check()
    {
        $p4a =& p4a::singleton();
 
        /*
        Recuperiamo i valori digitati dall'utente con il metodo getNewValue.
        Questo metodo differisce da getValue perché il field è grado di gestire
        due valori, quello con cui è stato creato e quello succesivo che viene
        modificato dall'utente. La getValue viene utilizzata ad esempio per annullare
        un'operazione.
        */
        $username = $this->username->getNewValue();
        $password = $this->password->getNewValue();
 
        /*
        Verifichiamo molto semplicemente i dati (facendo attenzione al fatto
        che la password viene criptata in md5) e apriamo la maschera successiva
        in caso di successo oppure impostiamo un messaggio d'errore in caso
        di fallimento.
        */
        if ($username == "root" and $password == md5("test")) {
            $p4a->openMask("finito");
        } else {
            $this->message->setValue("Username o password errati (prova username \"root\", password \"test\")");
        }
    }
}
 
?>
 
sample_it/login.php.txt · Last modified: 2007/01/03 12:56
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki