TODO MC: Creare funzioni di cancellazione e backup di documenti per soccorrere "casini on line". Forse creare un layer di PHP_doc/PHP_bubble per gli show_doc/show_bubble Poi guradare nei vari files di interfaccia e scorporare ulteriormente. Poi creare i files SQL_... Penso che sarebbe meglio comunque uniformare tutte le date delle verie tabelle. Io propongo l'"int" di linux, però su questo non ho un'opinione forte... MB: Sistemazione di upload, manualetto. DS: procedure di accreditamento e accesso (temporanee). 031112 - MC Nell'ottica di separare HTML da codice tutte le funzioni HTML sono state spostate in una directory specifica (html, appunto). in html c'è HTML_functions che include tutti i files contenuti in html/common. In html/common ci sono funzioni utilizzate da più pagine. In html/pages ci sono funzioni utilizzate (e incluse) da singole pagine (i nomi corrispondono): usati da show_doc HTML_display_doc -- mostra documento HTML_display_paragraph_buttons -- mostra bottoni di paragrafo usato da show_votes HTML_display_votes -- mostra tutti i voti usato da show_bubble HTML_display_bubble -- mostra una bolla Questi files sono inclusi da dab_HTML_functions, così tutti gli altri devono includere solo questo. Scorporate funzioni HTML da dab_edit_bubble a dab_HTML_edit_bubble da dab_vote_bubble a dab_HTML_vote_bubble da dab_add_doc a dab_HTML_add_doc da dab_user_home a dab_HTML_user_home Ho trasformato HTML_show_doc in show_doc, spostandola in functions (era in HTML_functions). Ho creato le funzioni HTML (nel file HTML_display_doc): HTML_doc_begin/HTML_doc_end HTML_doc_paragraph_begin/HTML_doc_paragraph_end HTML_doc_bubble_begin/HTML_doc_bubble_end Anche HTML_bubble2 ha seguito la stessa sorte ed è diventata show_bubble che chiama le funzioni (in HTML_display_bubble): HTML_display_bubble_begin HTML_display_bubble_body HTML_display_bubble_comment HTML_display_bubble_end Sempre nell'ottica di separazione di PHP da HTML la funzione: HTML_paragraph_buttons è stata eliminata. Al suo posto vengono chiamate, direttamente da show_doc, nell'ordine (in HTML_display_paragraph_buttons): HTML_display_paragraph_buttons_begin HTML_display_paragraph_button_bubble_shift(left/reset/right) HTML_display_paragraph_button_bubble_info HTML_display_paragraph_button_bubble_add HTML_display_paragraph_button_paragraph_append HTML_display_paragraph_buttons_end Corretto: Quando si trasferisce un doc il bottone di voto era presente nelle bolle. Tolto. Eliminate funzioni non chiamate: get_doc_date, get_bubble_date, get_vote_date. 031105 - MC/MB Corretto bug "divide by 0" in stats. 031103 - MC Aggiunto DAB_UPLOAD_MAX_FILESIZE in config, per settare la dimensione massima del file che si può uploadare. Tolto l'accesso alla pagina di admin da index. Eliminata HTML_bubble_votes: trasfrmata in show_bubble_votes (in functions) che chiama le funzioni HTML: // HTML_votes_functions ///////////////////////////////////////////////////// // // Usage of HTML_votes functions // HTML_votes_title(); // HTML_votes_begin_table(); // HTML_votes_header() // loop // HTML_votes_row($time, $name, $email, $veto, $trust , $effort, $comment); // HTML_votes_end_table(); Spostato un po' di codice da HTML_bubble_info a chi la chiama. Aggiunti un po' di "global $dab_show_doc" nei bottoni di shift che prima funzionavano per miracolo... 031030 - MC Cambiata funzione HTML_doc in HTML:doc2 perché sul sito (PHP 4.2.2) dava errore di ridefinizione di funzione. Forse è un nome riservato. Aggiunti dab_upload.php (classe) e dab_upload_doc.php per l'upload dei documenti. C'è quindi una serie di tag che si devono mettere nel documento per poterlo uploadare. Esempio: [NEW DOC] Questo sarà il titolo del nuovo documento [BUBBLE END] 10 [VOTE BEGIN] 10 [VOTE END] 15 [MAIN BUBBLE] Questo sarà il titolo della bolla principale [BUBBLE TEXT] Questo (invece) è il suo simpatico testo [BUBBLE COMMENT] Naturalmente stiamo scherzando... [PARAGRAPH] [BUBBLE TITLE] Questa e` la prima bolla del primo paragrafo [BUBBLE TEXT] Questo e` il testo della prima bolla del primo paragrafo [BUBBLE COMMENT] Questo e` il commento alla prima bolla del primo paragrafo [BUBBLE TITLE] Questa e` la prima bolla alternativa del primo paragrafo [BUBBLE TEXT] Questo e` il testo della prima bolla alternativa del primo paragrafo [BUBBLE COMMENT] Questo e` il commento alla prima bolla alternativa del primo paragrafo [PARAGRAPH] [BUBBLE TITLE] Questa e` la prima bolla del secondo paragrafo ... La possibilità di uploadare è stata aggiunta al dab_user_home. In dab_functions ora add_doc ritorna il documento creato invece che aggiornare la variabile global (e add_doc.php è stato aggiornato di conseguenza). La funzione viene anche utilizzata da upload_doc. 031022 - MC In dab_functions aggiunta show_bubble_info che mostra per ogni paragrafo le bolle alternative e l'elenco dei voti. Questa funzione viene utilizzata da dab_info.php (che è stato aggiunto ex novo) e da edit_bubble e vote_bubble, così chi deve modificare o votare, ha davanti tutto l'elenco delle alternative. HTML_functions è stato modificato spostando tutti i "common_buttons" che prima erano nel config e che sono diventati "HTML_buttons". La funzione HTML_bubble è stata modificata ed è diventata HTML_bubble2. Il file show_doc è stato modificato pesantemente così da mostrare le bolle in orizzontale, ma "scorrevoli". Ho tentato di compattare il più possibile, così da lasciare più spazio per il testo e meno ammennicoli che disturbano. I tasti relativi al paragrafo (scorrimento -dx/sx/reset- info, bolla alternativa nuovo paragrafo) sono stati messi in prima colonna. I tasti relativi alle singole bolle alternative (Vota, Modifica, Elimina) sono stati spostati nella barra del titolo di ciascuna bolla in maniera MOLTO sintetica: |V|M|E|). Ho modificato il modo di mostrare le statistiche: le icone di contrasto e impegno sono di sfondo alla casella della tabella, e il colore pure è di sfondo, invece che del carattere. Mi sembra molto più visibile, anche se non sono riuscito ancora ad allineare al centro l'immagine). Il numero di colonne (bolle alternative) da visualizzare è selezionabile (per ora solo da codice). Adesso è settato a ALL. Il file vetoes.php è stato eliminato, al suo posto basta info.php. Da config è stato tolto tutto ciò che non riguardava direttamente variabili e costanti. Common è quasi vuoto (le variabili trust/effort sono state spostate in config). Comunque contiene solo "codice". I vettori colori e icone sono di 10 elementi, mentre i valori sono effettivamente 11 (da 0 a 10). Per i colori ho aggiunto il 10 uguale al 9 (e ho rovesciato i valori: 0=rosso). Per le icone devo fare ancora qualcosa. Il file edit_bubble è stato modificato per mostrare bubble_info in coda, mentre la bolla all'inizio viene visualizzata solo per delete e modify. Inoltre i campi vengono riempiti solo per modify, negli altri casi vengono lasciati vuoti. 031002 - DS Aggiunta la directory /lib in cui inserire le classi e altre librerie Aggiunta la classe TopBar contenuta nel file lib/class_TopBar.php per la gestione del TOP omogeneo di tutte le pagine. La classe utilizza anche i files: css/TopBar.css, img/TopBar_logo.png e img/TopBar_logoff.png. Ritoccata la funzione name_from_id() in modo da essere corretta rispetto al rilascio delle risorse MySQL (e micro-ottimizzazione: utilizzo di mysql_fetch_row(), visto che si carica un solo valore) Modificato il codice per funzionare anche se non è attivata l'opzione PHP register globals. (di default è ON, ma viene in genere impostata a OFF in quanto pericolosa per la sicurezza) Aggiunta una patch per far funzionare il codice anche in assenza del valore PHP_SELF, che in alcune versioni di PHP non viene valorizzato. Ho modificato la funzione begin_HTML() in HTML_head(), facendogli contenere solamente la parte di codice comune da espandere all'interno del tag
per il seguente motivo: Ogni funzione che genera dell'HTML dovrebbe essere auto-consistente, ovvero generare coppie di tag chiusi, altrimenti diventa difficile seguire la logica del programma. (quale logica ci permette di ricordare quale TAG begin_HTML() apre ma non chiude ? Solo ? o anche ? sarebbe un continuo farsi di queste domande) Anche creare una funzione duale end_HTML(), che chiude ciò che begin_HTML() apre, risolve solo parzialmente il problema... La cosa migliore per la leggibilità complessiva è attenersi, per quanto possibile, alla seguente regola: >>> I TAG aperti via codice devono essere chiusi via codice nello stesso "scope"/funzione che li ha aperti. <<< Un secondo motivo a supporto di questa regola è il seguente: In questo modo se in teoria dovesse eliminare tutto il codice PHP da una pagina, quello che rimane sarebbe una pagina HTML ben formata. Questo ci aiuto prima di tutto ad indentare meglio il codice, ma ci permette anche di utilizzare, se lo vogliamo, dei programmi di ausilio per la generazione della parte statica della pagina (i.e. DreamWeaver o altri) che considerano il codice PHP come un commento (Per utilizzare questo tipo di programmi si va incontro anche ad altri problemi, ma non li possiamo affrontare tutti in questa sede) La classe TopBar, che genera l'HTML comune in alto, l'ho inserita all'interno di dab_HTML_functions.inc Non mi era chiaro il meccanismo degli include (dab_common non veniva inclusa dalla dab_home, per il problema della registrazione delle variabili di sessione, credo) Ho introdotto due modifiche: 1) Ho uniformato gli include: Ora dab_config.inc NON viene più incluso direttamente da nessuno, in quanto incluso da dab_common.inc che diventa l'include di base per TUTTI i files Spostata l'inizializzazione del random seed nell'unico file che utilizza la cosa, _dab_fill_db.php Modificato il modo di gestire le variabili di sessione. In generale credo sia utile vedere che una globale è una variabile di sessione, utilizzando esplicitamente $_SESSION["nome"], però effettivamente se viene utilizzata everywhere, utilizzare dei riferimenti è + snello. In ogni caso ho sostituito l'utilizzo di session_register(), con un riferimento diretto. E' equivalente ed ha il vantaggio di avere un codice che può essere incluso da tutti senza strani test sulla presenza di PHPSESSID. Sostituita la time2datestring(...) con una chiamata diretta alla funzione di sistema strftime(...) e una stringa di formato impostata in dab_config.inc Ho sostituito le chiamate a srand() e rand() con le + efficienti e serie mt_srand() e mt_rand() Spostati gli include nella directory /inc Rinominati da .inc a .php perchè altrimenti Quanta non riconosce che sono file PHP e non applica il corretto highlight mode (e metterlo a mano tutte le volte è un pianto). In fondo ora gli include sono nella directory /inc... quindi si capisce ugualmente di cosa si tratta. ! IMPORTANTE ! MODIFICHE AL DATABASE: Modificata la tabella VOTE: 1) Creato un indice UNIQUE sulla coppia di chiavi (USER_id, B_id) in modo da poter facilmente utilizzare il comando REPLACE di MySQL per aggiornare un voto (se esisteva già) oppure per inserirlo (se non esisteva). 2) Modificata la colonona creation_time da int(11) a timestamp(14). MMMmmm... non sono sicuro di aver fatto bene. Dobbiamo metterci daccordo su come gestire le date, perchè forse è meglio lasciarle come INT utilizzando l'intero del sistema operativo, invece del formato nativo di MySQL... Ho mantenuto sempre la logica che una pagina si processa le proprie form in testa, per eseguire eventualmente un redirect. Aggiunte al file config.php tutte le costanti e gli array necessari per la creazione delle varie icone associate alle bolle. dab_functions.php, add_doc() => Quando si inserisce un nuovo documento, viene automaticamente preselezionato nella variabile di sessione current_doc, così si può direttamente saltare dentro alla pagina di visualizzazione del documento. Nell'elenco documenti (dab_user_home) viene visualizzato anche l'utente autore del documento e relativo link alla mail dello stesso Modificata la pagina di creazione di un nuovo documento, in modo da creare contestualmente anche la bolla 0, con le "intenzioni" del documento stesso. Fuse le dab_add_bubble.php e dab_delete_bubble.php in un'unica dab_edit_bubble.php che effettua tutte le operazioni necessarie sulle bolle. (Ho cambiato nome al file anche perchè ho dovuto praticamente riscrivere i vecchi files avendo ormai cambiato troppe cose nelle strutture comuni, per adattare i vecchi) ================================================================================ 031001 - MC Aggiunto lock tabelle quando si aggiunge/modifica/cancella bolla nel file dab_functions.inc. Aggiunto unicità del voto: modificato dab_functions.inc con aggiunta di funzione get_vote e modifica di add_vote. modificato dab_vote_bubble.php per tener conto del recupero del vecchio voto. ================================================================================ 030915 - MB/MC Aggiunto il file dab_stats.inc che contiene le funzioni statistiche. Nel dab_show_doc al momento vengono mostrati tutti i valori calcolati, ma le bolle alternative vengono ordinate in base al numero di voti favorevoli (non veti). Modificato DB con aggiunta a table "bubble" dei valori statistici calcolati. I valori vengono aggiornati quando la bolla viene votata. Sono stati modificati i quasi tutti i files per accomodare i cambiamenti. In vote/add/delete bubble è stata modificata la procedura così che al confirm si ritorna direttamente al documento, posizionati sulla bolla corrente. In dab_config e dab_common sono state aggiunte le costanti DAB_TRUST_XXX e DAB_EFFORT_XXX per non confondersi in seguito con i livelli di consenso e impegno. Aggiunto il file dab_vetoes.php per mostrare i veti e i commenti relativi. ================================================================================ 030903 - MC Dopo la pausa estiva riprendiamo lo sviluppo. Per "rifare" amicizia col codice ho modificato il file dab_show_doc.php in modo da selezionare la bolla con un solo click e posizionare il documento alla bolla selezionata. ================================================================================ 030618 - MC Aggiunto il file DAB_RELEASE_NOTES per documentazione e per organizzare il lavoro delle parti che mancano. ****** Grandi Cambiamenti 1 *** Sono stati aggiunti i controlli di accesso. (vedi RELEASE_NOTES). In questo momento appaiono solo i tasti corrispondenti alle funzioni consentite all'utente. 2 *** Sono state aggiunte le funzioni di cancellazione delle bolle e delle singole alternative. 3 *** Inserita la finta pagina di login _dab_user_login.php in cui si sceglie l'utente e poi si va alla user home page in cui ci sono solo i documenti a cui l'utente ha accesso. In questo modo, quando ci sarà il vero login, il punto di entrata rimarrà comunque la stessa user home page. 4 *** In bubble_doc sono stati aggiunti i campi: access_read (accesso di default = tutti gli utenti) access_add_Bubble (accesso di default = tutti gli utenti) access_edit_Bubble (accesso di default = l'autore) per i controlli degli accessi. 5 *** Aggiunta la tabella access_control con i campi doc/user/access_level per definire accessi ai documenti non di default. 6 *** Aggiunte alla tabella bubble i campi title e paragraph. In questo modo ogni alternativa può avere un titolo che la rende intelleggibile dagli umani oltre che dalle macchine. Il paragrafo invece serve per ordinare in maniera arbitraria le bolle in modo da facilitare gli inserimenti e rendere più sicura l'integrità delle bolle alternative nel caso si fosse deciso di utilizzare il number come numero d'ordine. ****** Piccoli Cambiamenti 1 *** Aggiunta funzione begin_HTML (