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 (<?=$_title ?>) per inserire il titolo e permettere di eseguire codice php fino al punto in cui comincia il "vero HTML" nella pagina. In questo modo si ottiene maggiore separazione tra php e HTML nelle singole pagine. 2 *** Inserito un (blando, credo) livello di controllo per determinare se nelle pagine ad accessi ripetuti (preview/confirm) si proviene proprio dalla stessa pagina. Le pagine interessate sono add_bubble, delete_bubble, vote_bubble. 3 *** Rimossa la classe tblCat per la gestione delle liste id/nome. ================================================================================ 030608 - MC Modificato quasiDDD, identificando funzioni che possono essere sviluppate in parallelo e quindi distribuite su più sviluppatori. ================================================================================ 030607 - MC Un po' di ottimizzazioni per riprendere la mano dopo tre settimane :-) 1 *** Modificata funzione display_user_and_doc per ridurre chiamate a funzioni nelle pagine. Diventa tutto concentrato lì. 2 *** Tolto da dab_common le chiamate a name_from_id che vengono effettuate solo da chi ne ha bisogno, così da evitare un po' di select al DB inutili. 3 *** Utilizzate le classi per esercizio in _dab_user_home, E' stato creato il file class_tblCat per mantenere una select SQL in memoria e utilizzarla in una select HTML. ================================================================================ 030606 - DS Convertito il formato: nel più leggibile Convertite le variabili $dab_host, $dab_user, $dab_password, $dab_database nelle costanti DAB_HOST, DAB_USER, DAB_PASSWORD, DAB_DATABASE (Nota sull'uso delle costanti: si utilizzano così come sono scritte, senza $ davanti unica sfiga: non si possono espandere dentro alle stringhe, è necessario sempre chiudere la stringa, concatenare la costante ed eventualmente riaprire la stringa. Ad esempio: "il database di DaB è: ".DAB_DATABASE."
") Aggiunto il file dab_config.inc dove sono definite le costanti di cui sopra Utilizzato require_once(...) al posto di require(...) in modo che al crescere della complessità degli include, non si corra il rischio di includere dei file più di una volta. ================================================================================ 030518 Aggiunta un po' di gestione degli errori in: add_doc, quando utente non è definito common, quando utente e doc non sono definiti show_doc, quando doc non definito ATTENZIONE! Modificato DB per inserire al posto della data l'intero restituito dalla funzione time(). Inoltre sono stati uniformati un po' di nomi dei campi temporali. Sono quindi stati modificati gli script add_doc, show_doc, info_bubble e pesantemente il file functions, per tenere conto del tempo. Anche HTML_functions è stato modificato, anche se questo dovrà essere oggetto di revisioni per separare un po' di più il codice php dall'HTML per una migliore formattazione. ================================================================================ 030514 Aggiunta funzione di modifica bolle (poi si dovranno controllare gli accessi) In dab_add_bubble.php si dovrebbe usare la funzione html_entity_decode() per mostrare i
come new line nel TEXTAREA di modifica (cercare html_entity_decode per vedere dove), ma pare funzioni da PHP4.3 in poi e io al momento ho la 4.2.3 ================================================================================ 030510 Aggiunto inserimento di voti nella procedura di riempimento. Aggiunti input commenti per voti e bolle. Formattato meglio l'output del documento. Risolti i problemi con virgolette, caratteri speciali e "a capo" *** TODO Qual è il formato di data in mysql? STUDIARE. Serve per confermare date and time degli inserimenti di voti e bolle. Mancano funzioni di cancellazione e modifica. La gestione degli errori è carente :-) La formattazione va vista con un guru dell'HTML ================================================================================ 030507 Aggiunta la votazione, anche se sperimentata poco. Adesso la variabile di sessione $dab_current_bubble si riferisce correttamente alla bolla selezionata, invece che al numero della bolla come erroneamente faceva prima e il tutto sembra funzionare. In alcuni casi si potrebbero salvare delle query e addirittura delle connessioni (specialmente nei preview di alcuni script), ma bisognerebbe conservare i risultati delle query oppure sperimentare l'azzeramento del puntatore a $result con nuovo fetch e vedere che succede, ma forse è meglio ottimizzare dopo. Va fatta pulizia in generale. Vanno aggiunti i form per i commenti e le funzioni devono aggiungere le date di immissione dei record. Va formattato meglio lo show dei documenti e delle bolle. ================================================================================ 030504 I files sono ulteriormente puliti: sono stati eliminati ulteriori inutili. Adesso ci sono due home page: _dab_admin_home.php _dab_user_home.php Quella admin permette di creare e poi riempire con dei dati di prova il db (utente root). Quella user, permette di selezionare utente e documento correnti, di aggiungere nuovi documenti e di visualizzarli. Dalla visualizzazione del documento si possono aggiungere nuove bolle o alternative. Il tutto ha link di ritorno che sembrano funzionare. L'inserimento delle bolle non viene ancora effettuato lockando la tabella 'bubble', ma è specificato dove si dovrebbe fare. In dab_common.inc è specificata una variabile $dab_user_home su cui ritornare dalle varie pagine, così se si vuol cambiare, si cambia per tutti insieme.