giovedì 24 aprile 2008

WebCalendar: bloccare gli inserimenti degli appuntamenti oltre una certa data

Utilizzo il comodo e bello WebCalendar, un calendario web semplice e potente che si appoggia ad un database SQL (io uso PostgreSQL) per memorizzare gli eventi e la profilazione utente.
Mi è stato chiesto di fare una modifica affinché il calendario non permettesse più l'inserimento di eventi oltre una data prefissata, e non avendo trovato nessuna funzionalità allo scopo, ho deciso di modificare il codice sorgente.
Premetto che non so assolutamente nulla di PHP (codice con il quale il calendario è implementato).
La prima idea che mi è venuta in mente è stata quella di modificare i file relativi alla visualizzazione del calendario (es. week.php e day.php) affinché disabilitassero i link per le date superiori a quelle di fine attività. Ovviamente questa non è una buona idea per due motivi:
  • occorre inserire gli stessi controlli in più file e, soprattutto, ricordarsi di abilitare tali controlli per ogni nuova vista;
  • la data di visualizzazione viene passata come parametro get agli script, e quindi un utente malizioso potrebbe comunque riuscire ad avere accesso al calendario in una data successiva quella di fine attività.
Ho quindi deciso di mettere mano al file che consente l'editazione (e la memorizzazione) di un appuntamento: edit_entry.php. In questo file ho inserito il seguente controllo subito prima della visualizzazione del form di editazione:


// Controllo che la data di fine calendario non sia superata
$endDate = "20080430";
if( $cal_date > $endDate ){
echo "Data di fine attivita' superata";
$can_edit = 0;
}


La variabile $endDate viene inizializzata al valore di fine attività, nel formato YYYYMMDD, mentre la variabile $cal_date contiene la data con la quale è stata richiamata la form di editazione. A questo punto il controllo fra le due variabili di cui sopra verifica se lasciare il form abilitato o disabilitarlo ($can_edit = 0) e stampare un messaggio di warning per l'utente.

Nessun commento: