Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Davide Ciambelli
Semelhante a Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi) (20)
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi)
1. UNIVERSITÀ DEGLI STUDI DI TRIESTE
Facoltà di Ingegneria
Tesi di Laurea Triennale in Ingegneria Informatica
PROGETTAZIONE E SVILUPPO DI
UN'APPLICAZIONE WEB PER LA
GESTIONE DI DATI DI ATTIVITA' DI
RICERCA: CASO DELL'IRCCS BURLO
GAROFOLO
RELATORE LAUREANDO
Prof. Maurizio Fermeglia Daniel Zotti
Anno Accademico 2010/2011
2.
3. INDICE
1. INTRODUZIONE ............................................................................... 1
1.1 Obiettivo della tesi ...........................................................................1
1.2 Risultato della tesi ...........................................................................1
1.3 Stato dell'arte .................................................................................2
1.4 Motivazioni .....................................................................................2
1.5 Vincoli di progetto ...........................................................................3
1.6 Riassunto dei prossimi capitoli...........................................................3
2. ANALISI ........................................................................................... 4
2.1 Raccolta informazioni e definizione dei requisiti ...................................4
3. PROGETTAZIONE DELLA BASE DI DATI ............................................ 6
3.1 Requisiti con rielaborazione delle frasi più significative .........................6
3.2 Glossario dei termini ........................................................................9
3.3 Operazione di analisi ........................................................................9
3.3.1 Operazioni statistiche: ................................................................9
3.3.2 Operazioni di controllo: ...............................................................9
3.4 Progettazione concettuale ............................................................... 10
3.4.1 Analisi delle entità .................................................................... 11
3.4.2 Analisi delle relazioni e delle cardinalità ...................................... 15
3.5 Progettazione logica ....................................................................... 15
3.5.1 Schema scheletro .................................................................... 15
3.5.2 Attributi multipli e composti ...................................................... 17
3.5.3 Scelta degli identificatori primari ................................................ 17
3.5.4 Schema E-R Finale Ristrutturato ................................................ 18
3.5.5 Schema relazionale dedotto dallo schema E-R finale ..................... 19
4. PROGETTAZIONE DELL'APPLICATIVO ............................................ 20
4.1 Use Case Diagram ......................................................................... 20
4.2 Activity Diagram ............................................................................ 22
5. INTERFACCIA ................................................................................. 25
i
4. 5.1 Introduzione ................................................................................. 25
5.2 La struttura dell’interfaccia dell'applicativo ........................................ 25
5.2.1 Le pagine di dettaglio ............................................................... 25
5.2.2 Le pagine di ricerca .................................................................. 27
5.2.3 La “Home page” del singolo ricercatore ....................................... 29
5.2.4 Le Statistiche .......................................................................... 30
5.2.5 Il Pannello di controllo .............................................................. 32
6. IMPLEMENTAZIONE ....................................................................... 33
6.1 Strutturazione dell’applicazione ....................................................... 33
6.2 Le funzioni più significative ............................................................. 35
6.2.1 Esempio di una pagina PHP – anagrafica.php ............................... 35
6.2.2 Config.php .............................................................................. 41
6.2.3 Action.php .............................................................................. 41
6.2.4 Inc.php ................................................................................... 44
6.3 L’utilizzo di Javascript e css ............................................................ 45
6.3.1 script.js .................................................................................. 45
6.3.2 style.css ................................................................................. 48
6.4 Esportazione in PDF ....................................................................... 50
6.5 Esportazione in Excel ..................................................................... 51
7. CONCLUSIONI ................................................................................ 52
7.1 Risultati ottenuti ............................................................................ 52
7.2 Lavoro svolto ................................................................................ 52
7.3 Sviluppi Futuri ............................................................................... 53
8. BIBLIOGRAFIA ............................................................................... 54
ii
5. 1. INTRODUZIONE
1.1 Obiettivo della tesi
Si vuole creare un applicativo Web per la gestione dei ricercatori dell’IRCCS
Burlo Garofolo.
Più precisamente, lo scopo è quello di implementare un sistema in cui si
possano raccogliere tutti i ricercatori che lavorano presso l’IRCCS Burlo
Garofolo con i dati relativi alla loro attività di ricerca quali: pubblicazioni,
progetti di ricerca ed eventi a cui partecipano.
Inoltre si vuole avere una sezione in cui si possano utilizzare i dati raccolti sia
per poter vedere come lavorano i vari dipendenti sia per poter pensare a delle
strategie aziendali per quanto riguarda gli investimenti sulla ricerca.
1.2 Risultato della tesi
L’applicazione sviluppata rispetta i vincoli di progetto ed è già installata ed
utilizzata dall’IRCCS “Burlo Garofolo”a partire da Aprile 2011.
Figura 1 - Collage di varie immagini dell'applicazione
1
6. 1.3 Stato dell'arte
Sul mercato esistono già dei software per la gestione delle pubblicazioni come
endnote1per Windows o pybligrapher2per Linux, esistono anche moltissimi
programmi per la gestione del personale,ma l’integrazione completa tra i due
non sembra sia stata ancora pensata.
Inoltre, i programmi citati in precedenza non sono applicazioni web: bisogna
quindi installarle sul computer di ogni utente che intende utilizzarle.
Figura 2 - Screenshot del programma endnote
1.4 Motivazioni
Al “Burlo Garofolo”, prima di installare questo software, l’intera attività di
ricerca veniva gestita tramite l’uso di un file Excel e di vari file ausiliari, salvati
in una cartella condivisa.
In direzione scientifica non era presente nemmeno un programma per gestire i
ricercatori.
1
Endnote: http://www.endnote.com/
2
Pybligrapher: http://pybliographer.org/
2
7. 1.5 Vincoli di progetto
o Sistema operativo del Server: Debian5
o DBMS: MySQL 5.0 già installato sul server interno
o Server Web: Apache 2.2 già installato sul server interno
o Browser: MozillaFirefox3.6 e successive
Si è scelto di utilizzare Firefox in quanto è installabile anche su
sistemi operativi Linux e Mac presenti in azienda. Il programma
funziona anche su Opera e Chrome. Per funzionare su Explorer
sarebbe necessario effettuare qualche ulteriore modifica che non
viene descritta in questa tesi.
o Piattaforma di sviluppo: Linux Ubuntu 9.04
o Linguaggi di programmazione utilizzati: Php5, Javascript
o Linguaggio di Markup utilizzato: HTML 4
o Strumento utilizzato per la programmazione: Editor di testo Geany 0.16
1.6 Riassunto dei prossimi capitoli
• Nel capitolo 2 verrà descritta la parte di analisi: raccolta delle
informazioni e definizione dei requisiti.
• Nel capitolo 3 verrà descritta la progettazione della base di dati.
• Nel capitolo 4 verrà descritta la progettazione dell’applicativo con l’ausilio
del linguaggio UML.
• Nel capitolo 5 verrà descritta l’interfaccia del software.
• Nel capitolo 6 verranno analizzate nel dettaglio le funzioni più
significative dell’applicazione.
• Nel capitolo 7 ci saranno le conclusioni.
• Nel capitolo 8 ci sarà la biografia.
3
8. 2. ANALISI
2.1 Raccolta informazioni e definizione dei requisiti
Il sistema deve essere suddiviso in quattro sezioni fondamentali:
- Anagrafica
- Pubblicazioni
- Progetti di ricerca
- Eventi, Congressi, Convegni, ecc…
Nella sezione dell’anagrafica vengono salvati i dati personali di ogni singolo
ricercatore e i dati che riguardano il tipo di lavoro da esso svolto.
Inoltre si vuole avere la possibilità di avere una visione “globale” di ogni
singolo ricercatore, di conseguenza ci dev’essere una “home page” nella quale,
in breve, si possano vedere le pubblicazioni, i progetti di ricerca e gli eventi a
cui ha partecipato ciascun dipendente.
Nella sezione delle pubblicazioni vengono salvati i dati relativi alle
pubblicazioni a cui partecipano i ricercatori dell’azienda.
Nella sezione dei progetti di ricerca vengono salvati i dati dei progetti di
ricerca, con i relativi costi, ai quali partecipano i ricercatori dell’azienda.
Nella sezione degli eventi vengono salvati i dati relativi agli eventi a cui
partecipano i ricercatori dell’azienda.
Per ognuna di queste sezioni fondamentali ci deve essere la possibilità di
allegare dei file (ad esempio il curriculum del ricercatore o l’articolo di una
pubblicazione) e di fare delle ricerche all’interno della sezione.
Si deve poter accedere al sistema tramite username e password personali e si
deve prevedere l’accesso di più utenti contemporaneamente; ci deve essere
quindi un pannello di controllo nel quale si possono creare, modificare ed
eliminare e credenziali di accesso.
Si deve prevedere una sezione di analisi in cui si possano fare delle statistiche
sui dati inseriti. Questa è forse la sezione più importante in quanto, una volta
inserito un congruo numero di dati, sarà possibile fare le varie richieste al
database e avere una visione dell’andamento dell’attività di ricerca
dell’azienda.
4
9. Come ultima cosa, si deve avere la possibilità di esportare il risultato di certe
query in un file Excel da poter inviare al ministero, o da utilizzare per
scambiarsi i dati con un formato che sia leggibile da tutti.
Inoltre, sarebbe comodo poter avere la possibilità di stampare o di esportare
in un file pdf le pagine contenenti i risultati delle query.
5
10. 3. PROGETTAZIONE DELLA BASE DI DATI
3.1 Requisiti con rielaborazione delle frasi più significative
In questa parte, nella quale si affronta nel dettaglio il capitolo 2.1, si descrive
la struttura del database in cui verranno salvati i dati dell’intero programma.
Nelle righe successive vengono descritte e rielaborate le frasi più significative
dedotte dall’intervista fatta al committente, raggruppate per concetti simili.
Frasi di carattere generale. Si vuole realizzare un database nel quale
memorizzare i dati relativi ai ricercatori che lavorano nell’azienda.
L’accesso deve avvenire tramite username e password personali.
Frasi relative ai ricercatori. Per ciascun ricercatore si vogliono avere il nome
e il cognome, la data di nascita ed il codice fiscale; si vogliono poter inserire
anche i suoi recapiti.
È importante sapere anche se il ricercatore ha un rapporto esclusivo con
l’azienda e, in caso affermativo, bisogna indicare data di inizio del rapporto
esclusivo ed eventuale data di fine rapporto. Si vuole inoltre sapere se il
ricercatore ha il contratto esclusivo scaduto e se è rientrato in azienda dopo un
certo periodo di tempo.
Ogni ricercatore deve avere una cartella personale sul server dove verranno
salvati gli allegati personali; il percorso di questa cartella verrà salvato nel
database.
Oltre a questi dati, si vuole avere uno storico annuale della struttura di
appartenenza, della posizione in azienda, del tipo di contratto e della qualifica.
In più, per ogni anno, si vuole avere visione dell’H-index3 e della percentuale di
ricerca.
Frasi relative alle pubblicazioni. Le pubblicazioni scientifiche sono degli
scritti redatti in modo oggettivo su un argomento scientifico.
È importante sapere se si tratta di una pubblicazione indicizzata o meno; le
pubblicazioni indicizzate sono quelle che sono state pubblicate su una rivista
che è inserita nell'indice mondiale delle pubblicazioni scientifiche. Pubblicare un
articolo su di essa ha un indice di rilevanza proporzionale a quello della rivista.
Questo indice si chiama Impact Factor4e misura il numero medio di citazioni
3
http://it.wikipedia.org/wiki/Indice_H
4
http://it.wikipedia.org/wiki/Fattore_di_impatto
6
11. ricevute in un particolare anno da articoli pubblicati in una rivista scientifica
(Journal) nei due anni precedenti
Una sezione molto importante, quindi, è quella in cui si inseriscono i valori
relativi agli impact factor grezzo, normalizzato e corretto.
Si vogliono inserire inoltre i dati relativi al tipo (report, capitolo libro, linea
guida/protocollo) e alla linea di progetto a cui è collegata una pubblicazione.
Ovviamente si devono poter inserire le informazioni riguardanti il titolo, la
testata (o rivista), il volume (con fascicolo e pagine), l’editore e il codice DOI
associato; in aggiunta si vogliono inserire anche i dati relativi all’anno di
pubblicazione e di attribuzione.
Si vogliono avere a disposizione dei campi vero/falso per definire se la
pubblicazione ha una ricaduta assistenziale e per segnalare se c’è una doppia
affiliazione, se gli autori sono in ordine alfabetico e se l’autore corrispondente
si trova in penultima posizione.
Per ogni pubblicazioni, ovviamente, si devono poter inserire gli autori che vi
partecipano, che possono essere appartenenti all’azienda oppure esterni. Per
gli esterni si devono poter inserire semplicemente nome e cognome, per gli
interni invece devono poter essere richiamati direttamente dal database e nella
lista degli autori verranno visualizzati nome, cognome, data di nascita e
struttura di appartenenza. Per ogni autore bisogna poter impostare la posizione
in cui si trova, in quanto è molto importante per l’assegnazione del relativo IF.
Frasi relative ai progetti di ricerca. Anche per quanto riguarda i progetti di
ricerca si vuole poter inserire il tipo (corrente, nazionale, internazionale,
applications, sperimentazioni) ma anche la tipologia (pre-clinica,
osservazionale, clinica-sperimentale, gestionale, metodologica). Come per le
pubblicazioni, si deve poter inserire anche l’anno a cui viene attribuito il
progetto di ricerca, la linea ed il titolo.
Poiché un progetto di ricerca può avere una durata di diversi anni, si deve
poter inserire l’anno di inizio e l’anno di fine ricerca. Inoltre ogni progetto ha
un’azienda leader che è capo del progetto e delle aziende partner.
Una parte molto importante per una buona analisi dell’organizzazione dei
progetti di ricerca è quella dove si inseriscono il budget assegnato, richiesto e
totale. Ci dev’essere anche la possibilità di segnalare se e quando quel
determinato budget è stato approvato.
Anche in questo caso, per ogni progetto di ricerca bisogna poter inserire i
ricercatori che vi partecipano, con le stesse modalità descritte per le
pubblicazioni, tolto ovviamente il campo contenente l’IF.
7
12. Frasi relative agli eventi. La gestione degli eventi è molto simile alle due
viste in precedenza. Per eventi si intendono convegni, congressi, gruppi di
lavoro o più in generale tutte quelle attività che non sono pubblicazioni o
progetti di ricerca. Nella sezione degli eventi si deve inserire il tipo di evento
(quelli spiegati in precedenza) e il ruolo con cui l’azienda partecipa
(moderatore, poster, presentazione orale). Inoltre bisogna inserire il titolo
dell’evento, la data in cui inizia, la sede e lo sponsor nel caso in cui sia
previsto.
La parte di inserimento dei ricercatori che partecipano all’evento segue le
stesse modalità di quella dei progetti di ricerca.
Frasi relative alle credenziali.
Ci deve essere una sezione per la gestione degli utenti dove l’amministratore
del sistema può creare, modificare ed eliminare le credenziali di accesso.
Frasi relative alle statistiche. Per quanto riguarda la sezione delle
statistiche,si devono poter fare delle query specifiche con relativa esportazione
su file Excel.
Si vuole poter conoscere il numero di pubblicazioni fatte tra due date distinte;
in più, dato un anno di pubblicazione o di attribuzione, si vogliono calcolare l’IF
grezzo, normalizzato e corretto dell’azienda, del singolo ricercatore e di una
determinata struttura.
Inoltre, per un determinato anno di pubblicazione o di attribuzione, si vogliono
poter avere a disposizione delle liste con relativi IF (grezzo + normalizzato +
corretto) di tutti i ricercatori,di tutte le pubblicazioni o di tutti i progetti di
ricerca relativi a quell’anno.
Per tenere sotto controllo l’inserimento dei dati, si rende necessario sapere se
ci sono dei ricercatori che non afferiscono a nessuna struttura, o se ci sono
delle pubblicazioni che non hanno segnalato un anno di pubblicazione o di
attribuzione.
8
13. 3.2 Glossario dei termini
Termine Descrizione Sinonimi Collegamenti
Pubblicazione,
Rappresenta un Dipendente,
Ricercatore Progetto di
dipendente dell’azienda Lavoratore, Anagrafica
ricerca, Evento
Rappresenta una Articolo, Report,
Pubblicazione qualsiasi pubblicazione su Capitolo di un libro, Ricercatore
una rivista scientifica Linea Guida/Protocollo
Pre-clinico,
Rappresenta un progetto
Osservazionale,
Progetto di a carattere scientifico per
Clinico-Sperimentale, Ricercatore
ricerca il quale sono stati
Gestionale,
stanziati dei soldi
Metodologica
Rappresenta la
partecipazione da parte
Evento del ricercatore ad un Congresso, Convegno Ricercatore
qualsiasi evento di
carattere scientifico
3.3 Operazione di analisi
3.3.1 Operazioni statistiche:
- Dato l’anno di pubblicazione (o di attribuzione), calcolare il relativo IF
grezzo, normalizzato e corretto dell’azienda;
- Dati il nome del ricercatore e l’anno di pubblicazione (o di attribuzione),
calcolare il relativo IF grezzo, normalizzato e corretto;
- Dati il nome della struttura e l’anno di pubblicazione (o di attribuzione),
calcolare il relativo IF grezzo, normalizzato e corretto;
- Dato l’anno di pubblicazione (o di attribuzione), stampare la lista di tutti i
ricercatori con relativi IF (grezzo, normalizzato e corretto);
- Dato l’anno di pubblicazione (o di attribuzione), stampare la lista di tutte
le pubblicazioni con relativi IF (grezzo, normalizzato e corretto);
- Dato un certo anno di pubblicazione (o di attribuzione), stampare la lista
di tutti i progetti di ricerca con relativi IF (grezzo, normalizzato e
corretto);
3.3.2 Operazioni di controllo:
- Lista di tutti i ricercatori che non afferiscono a nessuna struttura;
- Lista di tutte le pubblicazioni che non hanno segnalato un anno di
pubblicazione o di attribuzione;
9
14. 3.4 Progettazione concettuale
In questo capitolo viene trattato lo schema Entity-Relationship, formato
solamente de Entità e Relazioni. Le entità sono gli oggetti principali di un
database e rappresentano un gruppo omogeneo di informazioni collegate
tramite le relazioni.
Lo schema E-R viene progettato seguendo una strategia di tipo misto,
individuando i concetti principali e realizzando uno schema scheletro che
contiene solamente i concetti più importanti. In seguito lo si può decomporre,
raffinare, espandere ed integrare, fino a raggiungere lo schema finale.
Entità:
• Ricercatore: contiene i dettagli relativi all’anagrafica del ricercatore
• Struttura Anno: contiene lo storico delle strutture e contratti del
ricercatore
• Pubblicazione: contiene i dettagli della pubblicazione
• Progetto di ricerca: raccoglie i dati relativi al progetto di ricerca
• Evento: contiene i dettagli relativi all’evento
Relazioni:
• Partecipazione: Relazione quaternaria tra le entità “Ricercatore”,
“Pubblicazione” e “Progetto di ricerca”
• Afferenza: Relazione tra le entità “Ricercatore”, “Struttura Anno”
10
15. 3.4.1 Analisi delle entità
RICERCATORE
ID Ricercatore È il codice univoco che identifica un ricercatore: è
candidato ad essere la chiave primaria dell’entità
“Ricercatore”.
Nome È il nome del ricercatore
Cognome È il cognome del ricercatore
Data di Nascita Data di nascita del ricercatore
Codice Fiscale Codice Fiscale del ricercatore
Residenza Residenza del ricercatore. Attributo composto
Telefono Telefono aziendale del ricercatore. Attributo
multivalore
E-Mail E-Mail del ricercatore
Rapporto Esclusivo Attributo Si/No che indica se il ricercatore ha o meno
un rapporto esclusivo con l’azienda
Inizio Rapporto Esclusivo Data di inizio del rapporto esclusivo
Fine Rapporto Esclusivo Data di fine del rapporto esclusivo
Contratto Esclusivo Scaduto Attributo Si/No che indica se il ricercatore ha il
contratto esclusivo scaduto
Rientrato Attributo Si/No che indica se il ricercatore è rientrato
in azienda dopo la scadenza di un contratto esclusivo
Cartella Ricercatore Percorso della cartella sul server nella quale
verranno salvati gli allegati personali del ricercatore
Modifica Data e ora dell’ultima modifica dei dati del
ricercatore
Utente Modifica Utente che ha effettuato l’ultima modifica
Note Campo note
STRUTTURA ANNO
ID Struttura È il codice univoco che identifica una struttura in un
dato anno: è candidato ad essere la chiave primaria
dell’entità “Struttura Anno”.
11
16. Anno Anno in cui il ricercatore afferisce alla struttura
Posizione Posizione che il ricercatore assume nella struttura
Ruolo Ruolo assunto nella struttura
Tipologia Contratto Tipo di contratto
Struttura Nome della struttura
H-Index Valore dell’indice H-Index
Alta Produttività Attributo Si/No che indica se il ricercatore è entrato
nella zona di alta produttività
Valore Contratto Valore del contratto in euro
Percentuale Ricerca Percentuale di ricerca fatta
Note Campo note
PUBBLICAZIONE
ID Pubblicazione È il codice univoco che identifica una pubblicazione:
è candidato ad essere la chiave primaria dell’entità
“Pubblicazione”.
Cartella Pubblicazione Percorso della cartella sul server nella quale
verranno salvati gli allegati della pubblicazione
Tipo Pubblicazione Indica se si tratta di una pubblicazione indicizzata o
meno
Titolo Titolo della pubblicazione
Testata Nome della rivista
Codice DOI Codice univoco DOI
Tipo IF Indica il modo in cui viene fatto il calcolo degli IF
PMID Pub Med ID
Rivista Posizione Volume(Capitolo):Pagine
Editore Editore della rivista
Anno Pubblicazione Anno in cui viene pubblicata la pubblicazione sulla
rivista
Anno Attribuzione Anno in cui viene attribuito il valore dell’IF ai
ricercatore che sono associati alla rivista
12
17. Numero Progetto di Ricerca Indica l’eventuale progetto di ricerca associato
IF Grezzo Valore dell’Impact Factor Grezzo
IF Normalizzato Valore dell’Impact Factor Normalizzato
IF Corretto Valore dell’Impact Factor Corretto
Pubblicazione Scientifica Attributo Si/No che indica se si tratta di una
pubblicazione scientifica
Ricaduta Assistenziale Attributo Si/No che indica se la pubblicazione ha
una ricaduta assistenziale
Doppia Affiliazione Attributo Si/No che indica se è presente una doppia
affiliazione
Documento Supporto Coerenza Attributo Si/No che indica se si tratta di un
documento di supporto
Autori ordine alfabetico Attributo Si/No che indica se gli autori della
pubblicazione sono stati scritti in ordine alfabetico
Autore Penultima Indica se l’autore principale è in penultima
posizione
Linea Indica la linea di ricerca
Tipologia Tipo di pubblicazione (Report, Capitolo Libro, Linea
guida/Protocollo, altro)
Note Campo note
PROGETTO DI RICERCA
ID Ricerca È il codice univoco che identifica un progetto di ricerca: è
candidato ad essere la chiave primaria dell’entità “Progetto di
Ricerca”.
Cartella Ricerca Percorso della cartella sul server nella quale verranno salvati
gli allegati del progetto di ricerca
Tipo Ricerca Ricerca corrente, nazionale, internazionale, applications,
sperimentazioni
Linea Linea di ricerca
Numero Numero del progetto di ricerca
Titolo Titolo del progetto di ricerca
Anno Anno a cui assegnare il progetto di ricerca
13
18. Tipologia Pre-clinica, osservazionale, clinica-sperimentale, gestionale,
metodologica
Anno Inizio Anno di inizio del progetto di ricerca
Anno Fine Anno di fine del progetto di ricerca
Leader Azienda leader del progetto di ricerca
Partner Azienda partner del progetto di ricerca
Budget Assegnato Budget assegnato in euro
Budget Richiesto Budget richiesto in euro
Budget Totale Budget totale in euro
Approvato Attributo Si/No che indica se il progetto di ricerca è stato
approvato dalla direzione scientifica
Data Approvazione Data in cui è stato approvato il progetto di ricerca
Note Campo note
EVENTO
ID Evento È il codice univoco che identifica un evento: è candidato ad essere
la chiave primaria dell’entità “Evento”.
Cartella Evento Percorso della cartella sul server nella quale verranno salvati gli
allegati dell’evento
Tipo Evento Tipo di evento
Titolo Titolo dell’evento
Data Data in cui si è svolto l’evento
Anno Anno al quale associare l’evento
Sede Sede dell’evento
Sponsor Sponsor
Ruolo Ruolo con il quale l’azienda ha partecipato all’evento
Note Campo note
14
19. 3.4.2 Analisi delle relazioni e delle cardinalità
PARTECIPAZIONE
Collega l’entità “Ricercatore” alle entità “Pubblicazione”, “Progetti di ricerca” e
“Evento”
Cardinalità Molti a molti: una pubblicazione (progetto di ricerca, evento) può
venire assegnato ad uno o più ricercatori differenti, e ad un ricercatore
possono venire assegnati una o più pubblicazioni (progetti di ricerca,
eventi) diversi.
Valore IF Valore dell’IF personale, nel caso in cui il ricercatore partecipi a una
Personale pubblicazione
Posizione Posizione nel caso in cui il ricercatore sia un autore collegato a una
pubblicazione
Responsabile Indica se il ricercatore è il responsabile, nel caso in cui si tratti di un
progetto di ricerca
AFFERENZA
Collega l’entità “Ricercatore” all’entità “Struttura Anno”
Cardinalità Uno a molti: un ricercatore afferisce (potenzialmente) ogni anno ad
una struttura diversa, con diversi tipi di contratto, ruolo, posizione,
ecc.. e quei dati sono relativi esclusivamente a quel ricercatore
3.5 Progettazione logica
3.5.1 Schema scheletro
Analizzando il diagramma E-R, si può notare immediatamente che la
generalizzazione “Ricerca” raggruppa tre entità troppo diverse tra loro e quindi
conviene sostituirla con tre entità distinte. In questo modo la relazione
“Partecipazione” diventa una relazione ternaria che collega l’entità
“Ricercatore” alle entità “Progetto di Ricerca”, “Pubblicazione” ed “Evento”.
15
20. In seguito si può notare che la relazione ternaria “Partecipazione” può essere
scomposta. Si analizza nel dettaglio solamente la relazione tra le entità
“Ricercatore” e “Pubblicazione”, ma si può agire allo stesso modo per le coppie
di entità “Ricercatore”-“Progetto di ricerca” e “Ricercatore”-“Evento”.
Un singolo ricercatore può partecipare a diverse pubblicazioni e una stessa
pubblicazione può avere diversi autori; di conseguenza la nuova relazione tra
l’entità “Ricercatore” e l’entità “Pubblicazione” è del tipo molti a molti. Questa
relazione viene chiamata “Partecipazione Pubblicazione”.
16
21. 3.5.2 Attributi multipli e composti
Dall’analisi delle entità che è stata fatta in “Progettazione Concettuale”,
relativamente all’entità “Ricercatore” sono stati evidenziati un attributo
composto e un attributo multivalore.
L’attributo composto “Residenza” relativo appunto alla residenza del
dipendente viene suddiviso, come richiesto dalla direzione scientifica, in due
attributi elementari: “Indirizzo” e “Città”.
L’attributo “Telefono”, che inizialmente doveva essere di tipo multivalore, viene
trattato come un unico attributo semplice in quanto non è interesse
dell’azienda avere più di un numero di telefono per ogni ricercatore.
3.5.3 Scelta degli identificatori primari
ID Ricercatore:Poiché su richiesta del committente il codice fiscale e la data di
nascita devono essere opzionali, è necessario inserire un identificatore di
questo tipo.
ID Pubblicazione: Scegliere un identificatore formato da titolo pubblicazione +
rivista + posizione non è possibile in quanto alcuni di questi attributi possono
essere facoltativi, allora bisogna aggiungere un identificatore di questo tipo.
ID Ricerca:Come per la pubblicazione, si aggiunge un attributo ID Ricerca
come identificatore univoco
ID Evento: Come per la pubblicazione e per il progetto di ricerca, si aggiunge
un attributo ID Evento come identificatore univoco.
ID Struttura Anno:Per le stesse condizioni riguardanti pubblicazione, evento e
progetto di ricerca, si sceglie di utilizzare un ID Struttura Anno come
identificatore univoco per lo storico delle strutture.
ID Partecipazione Pubblicazione: Poiché nella maggior parte delle pubblicazioni
ci possono essere degli autori esterni, non è possibile scegliere un
identificatore univoco composto da ID Ricercatore + ID Pubblicazione. In
questo caso si opta per aggiungere un identificatore ID Partecipazione
Pubblicazione.
ID Partecipazione Ricerca:Come per “Partecipazione Pubblicazione”, si inserisce
un identificatore univoco ID Partecipazione Ricerca
ID Partecipazione Evento: Come per “Partecipazione Ricerca” e “Partecipazione
Pubblicazione”, si inserisce un identificatore univoco ID Partecipazione Evento
17
24. 4. PROGETTAZIONE DELL'APPLICATIVO
4.1 Use Case Diagram
Lo Use Case Diagram è lo strumento utilizzato per descrivere le funzionalità
offerte dal software; più precisamente è una collezione di scenari che
riguardano l'utilizzo del sistema in cui ogni scenario descrive una sequenza di
eventi e di attori.
La sequenza di eventi descritta da uno Use Case viene iniziata solitamente da
una persona, nel nostro caso l’utente, o da un altro sistema o ancora dal
passare del tempo. Le entità che iniziano la sequenza di eventi sono definite
Actors e vengono rappresentate graficamente da un omino stilizzato
(stickman).
Figura 3 - Use Case Diagram dell'intero programma
20
25. Il diagramma sopra fa intuire in modo abbastanza immediato le funzionalità del
software:
L’utente accede al programma tramite il browser e, per poter utilizzare le varie
funzionalità, deve effettuare il login inserendo username e password che
vengono confrontate con quelle presenti nel database.
Una volta effettuato l’accesso può ricercare le varie anagrafica, pubblicazioni,
progetti di ricerca ed eventi presenti nel database e può modificare,
eliminare o inserire ognuno di questi.
Inoltre per ogni sezione può gestire i file allegati, può interrogare il database
per la parte di analisi e infine può esportare in file Excel i risultati ottenuti.
Per modificare le varie impostazioni può utilizzare il pannello di controllo e,
una volta finito il lavoro, può uscire dal programma tramite il logout.
Il diagramma descrive in modo più dettagliato la Gestione Anagrafiche:
Figura 4 - Use Case Diagram della gestione delle anagrafiche
21
26. 4.2 Activity Diagram
Un Activity Diagram viene disegnato per descrivere cosa accade durante
un'operazione o un processo e mette in risalto le attività del programma.
Ogni attività è rappresentata da un rettangolo con gli angoli arrotondati e viene
collegata alle altre attività tramite delle frecce direzionali che rappresentano la
transizione da un'attività alla successiva.
Anche l'Activity Diagram ha un punto di partenza, rappresentato da un cerchio
pieno, ed un punto di fine rappresentato da un cerchio pieno con un cerchio più
grande all’esterno.
Per descrivere il funzionamento del software vengono considerati nel dettaglio
solamente due processi che rappresentano, con qualche piccola modifica, la
maggior parte dei processi principali messi in atto dal programma.
Il primo processo che viene preso in considerazione è la modifica
dell’anagrafica del ricercatore, che può descrivere in generale anche le
modifiche di pubblicazioni, progetti di ricerca ed eventi, considerando
solamente i diversi attributi delle vari entità.
L’utente inserisce nel form di ricerca il nome e/o il cognome del ricercatore di
cui vuole modificare l’anagrafica, l’applicazione verifica la connessione con il
database e, se è andata a buon fine, interroga il database e prepara la pagina
HTML con i risultati della ricerca.
Se ci sono più risultati, l’utente clicca sul ricercatore interessato e il
programma, dopo aver controllato la connessione, richiede al database tutti i
dati relativi all’anagrafica e alle strutture collegate al singolo ricercatore.
Dopo aver ricevuto i dati, l’applicazione prepara la pagina HTML e la invia al
browser dell’utente, il quale modifica i campi interessati.
Uno volta premuto il tasto per salvare, viene verificata la connessione e viene
fatto un update dei dati nel database; se tutto è andato a buon fine
l’applicazione genera un messaggio di avvenuta modifica, altrimenti genera un
messaggio d’errore.
22
27. Figura 5 - Activity Diagram della modifica di un'anagrafica di un ricercatore
23
28. Il secondo processo considera la parte relativa all’analisi e all’esportazione
delle statistiche in file Excel.
Nella sezione “statistiche” l’utente inserisce i dati per la richiesta al data base,
il programma verifica la connessione, interroga il database e prepara la pagina
HTML con i risultati delle statistiche.
L’utente, dopo aver letto la pagina, può scegliere di fare una nuova richiesta o
può decidere di esportare i risultati in un file Excel.
Se viene cliccato il pulsante “Esporta”, il programma crea il file Excel e, se non
ci sono errori, invia il file al browser dell’utente che cliccherà su “Salva” per
salvare il file Excel sul suo computer.
Figura 6 - Activity Diagram delle operazioni di analisi e dell'esportazione in Excel
24
29. 5. INTERFACCIA
5.1 Introduzione
In questo capitolo vengono descritte le pagine HTML che formano l’interfaccia
dell’applicazione, più precisamente verranno affrontati:
- La struttura dell’interfaccia in generale
- Le pagine di dettaglio
- Le pagine di ricerca
- La home page del ricercatore
- Le Statistiche
- Il Pannello di controllo
5.2 La struttura dell’interfaccia dell'applicativo
Ogni pagina è formata da un menu, che si trova in posizione fissa nella parte
superiore, da un tasto “indietro” per tornare alla pagina precedente, che si
trova in basso a sinistra, e dal contenuto che a sua volta è suddiviso in diverse
parti; quest’ultimo verrà spiegato nel dettaglio nei successivi capitoli.
5.2.1 Le pagine di dettaglio
Le pagine di dettaglio sono presenti solo per quanto riguarda le sezioni di
Anagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.
Per capire meglio com’è strutturata una pagina di dettaglio, può essere d’aiuto
osservare uno screenshot:
25
30. Figura 7 - Dettaglio della Pubblicazione
1. Menu
È presente in tutte le pagine dell’applicazione web, in posizione fissa, e
permette di raggiungere velocemente qualsiasi sezione del programma.
2. Titolo della pagina
olo
Anche questa è sempre presente in tutte le pagine dell’applicazione ed è
utile per far ricordare all’utente in che pagina si trova
3. Dati della pagina
Questa parte si trova solamente nelle pagine di dettaglio e contiene tutti
i dati modificabili
4. Allegati
Anche questa parte si trova solamente nelle pagine di dettaglio e
permette di gestire gli allegati
5. Collegamenti
Nelle sezioni Pubblicazione, Progetti di Ricerca ed Eventi raccoglie i
ricercatori collegati.
26
31. In questa zona, nel caso in cui il ricercatore non sia collegato a nessuna
ricercatore
struttura relativamente all’anno inserito nella Pubblicazione (o Progetto
Pubbli
di Ricerca o Evento), viene segnalato un errore in modo ben visibile,
come mostrato nell’immagine sotto.
Figura 8 - Errore negli autori della pubblicazione
Per quanto riguarda la sezione di Anagrafica, questa zona raccoglie le
strutture collegate al singolo ricercatore per ogni anno (vedi immagine
sotto)
Figura 9 - Dettaglio delle strutture del singolo ricercatore
el
6. Pulsante “Indietro”
Cliccando su questo pulsante si può tornare alla pagine precedente
7. Pulsanti di Modifica ed Eliminazione
Sono dei pulsanti essenziali per salvare le modifiche fatte o eliminare
un’anagrafica, progetto di ricerca, pubblicazione o evento.
pubblicazione
5.2.2 Le pagine di ricerca
Anche le pagine di ricerca sono presenti solo per quanto riguarda le sezioni di
Anagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.
E anche in questo caso p per capire meglio com’è strutturata una pagin di
pagina
ricerca, può essere d’aiuto osservare uno screenshot:
NB: Nelle pagine di ricerca sono sempre presenti le sezioni 1,2,6 viste in
precedenza
27
32. Figura 10 - Risultati della ricerca delle anagrafiche dei ricercatori
Figura 11 - Lista delle pubblicazioni: Errori
A. Form di ricerca
Ogni sezione possiede un form di ricerca con campi diversi per
anagrafica, pubblicazione, progetto di ricerca o evento.
B. Risultati della ricerca
È una lista in cui vengono mostrati i risultati della ricerca.
Se mancano dei campi importanti per quanto riguarda le pubblicazioni, i
progetti di ricerca e gli eventi le relative righe ve
eventi, vengono segnalate in
rosso.
28
33. C. Modifica
Collegamento alla pagina di dettaglio anagrafica, pubblicazione, prog
progetto
di ricerca o evento.
D. Collegamento alla “ “Home page” del ricercatore (solo per anagrafica)
” anagrafica).
Viene descritto nel dettaglio nel capitolo successivo.
E. Eliminazione diretta del ricercatore (solo per anagrafica)
5.2.3 La “Home page” del singolo ricercatore
La “Home page” è una pagina che raccoglie tutte le pubblicazioni, i progetti di
ricerca e gli eventi a cui ha partecipato il singolo ricercatore. Essa è
raggiungibile tramite la sezione di anagrafica come si è visto nel capitolo
precedente.
Figura 12 - Home page del singolo ricercatore
È una sezione utile se si vuole avere un riassunto di cosa ha fatto un
dipendente da quando fa parte dell’azienda.
Oltre a leggere le varie attività del ricercatore, si possono anche modificare o
aggiungerne di nuove.
29
34. 5.2.4 Le Statistiche
Questa è la parte più importante dell’applicazione in quanto, dopo aver inserito
molti dati, si possono fare tutte le statistiche per controllare come sta andando
la ricerca nell’azienda.
Figura 13 - Lista delle possibili interrogazioni al Database
La pagina principale delle statistiche si presenta come una lista di form di
ricerca preformattati nei quali l’utente deve inserire i dati necessari e cliccare
i
sul tasto “play”.
Figura 14 - Dettaglio di una query
30
35. Un esempio di query potrebbe essere quella vista nelle due immagini sopra:
“Calcolare l’Impact Factor di Daniel Zotti per il 2010 (anno di pubbli
pubblicazione)”
E il risultato sarebbe quello nell’immagine sotto:
Figura 15 - Risultato della query
Un’altra richiesta da fare al database potrebbe essere quella di voler vedere la
“Lista dei ricercatori con i relativi Impact Factor per il 2010 (Anno di
Pubblicazione)”
Figura 16 - Altro dettaglio di una query
In questo caso, oltre ad avere la lista dei ricercatori, compare il pulsante
“Esporta” per esportare il risultato su un file Excel.
31
36. Figura 17 - Risultato della query
5.2.5 Il Pannello di contro
controllo
In questa sezione si possono gestire gli utenti che hanno accesso
all’applicazione.
Figura 18 - Pagina del "Pannello di controllo"
32
37. 6. IMPLEMENTAZIONE
6.1 Strutturazione dell’applicazione
RICERCATORI [cartella]
- config.php
o file di configurazione per server web e collegamenti al database
- action.php
o raccoglie le funzioni per leggere/scrivere sul database
- inc.php
o file che raccoglie tutte le funzioni da utilizzare nelle varie pagine
PHP
- allegati.php
o raccoglie le funzioni e le pagine della sezione degli allegati
- elimina_file.php
o pagina pop up per l’eliminazione di un allegato
- rinomina_file.php
o pagina per la ridenominazione degli allegati
- upload.php
o pagina per fare l’upload di un allegato
- anagrafica.php
o dettaglio dell’anagrafica e delle strutture del singolo ricercatore
- cerca.php
o raccoglie i risultati di ricerca di anagrafica, pubblicazione, progetti
di ricerca ed evento
- footer.php
o pulsante indietro presente in quasi tutte le pagine php
- header.php
o header con il menu presente in tutte le pagine php
- home.php
o raccoglie le home di pubblicazione, progetto di ricerca e evento
- index.php
33
38. o pagina che fa da contenitore a tutte le altre pagine che vengono
caricate al momento della richiesta
- modifica_utente.php
o pagina di modifica delle credenziali
- pannello.php
o pagina del pannello di controllo
- principale.php
o pagina principale in cui ci sono i vari form per la ricerca di
anagrafica, pubblicazione, progetto di ricerca ed evento, più i
collegamenti a pannello di controllo e statistiche
- scelta_persona.php
o pagina popup per scegliere i ricercatori da collegare alla
pubblicazione o al progetto di ricerca o all’evento
- statistiche.php
o pagina con la lista dei form delle statistiche
- statistiche_risultati.php
o pagina con i risultati della singola statistica
- TMP [cartella]
o Cartella in cui vengono salvati i file provvisori delle esportazioni in
Excel
- IMMAGINI [cartella]
o Cartella che contiene tutte le immagini che servono a creare
l’interfaccia del programma
- PUBBLICAZIONE [cartella]
• home_pubblicazione.php
o pagina che viene inclusa nella home.php con la lista delle
pubblicazioni relative al singolo ricercatore
• dettaglio_pubblicazione.php
o pagina di dettaglio della singola pubblicazione
• inserisci_pubblicazione.php
o pagina di inserimento di una nuova pubblicazione
- PROGETTO DI RICERCA [cartella]
34
39. • home_ricerca.php
o pagina che viene inclusa nella home.php con la lista dei
progetti di ricerca relativi al singolo ricercatore
• dettaglio_ricerca.php
o pagina di dettaglio del singolo progetto di ricerca
• inserisci_ricerca.php
o pagina di inserimento di un nuovo progetto di ricerca
- EVENTO [cartella]
• home_evento.php
o pagina che viene inclusa nella home.php con la lista degli
eventi relativi al singolo ricercatore
• dettaglio_evento.php
o pagina di dettaglio del singolo evento
• inserisci_evento.php
o pagina di inserimento di un nuovo evento
- INC [cartella]
• style.css
o foglio di stile dell’applicazione
• script.js
o file contenente tutti gli script javascript utilizzati
dall’applicazione
6.2 Le funzioni più significative
In questo capitolo vengono analizzate le pagine e le funzioni più significative.
6.2.1 Esempio di una pagina PHP – anagrafica.php
Lo scenario è il seguente:
Dalla pagina cerca.php si clicca sul pulsante della “carta di identità” per
andare nel dettaglio dell’anagrafica (anagrafica.php).
Per prima cosa la pagina anagrafica.phpdeve andare a leggere il valore
dell’identificatore dell’anagrafica che potrebbe essere stato inviato tramite il
metodo POST dal form della pagina precedente, o tramite una variabile di
sessione negli altri casi (che non andremo a specificare):
35
40. if(isset($_POST['idanagrafica']))
{
$idanagrafica=$_POST['idanagrafica'];
$_SESSION['idanagrafica']=$_POST['idanagrafica'];
}
else
{
$idanagrafica=$_SESSION['idanagrafica'];
}
In seguito vengono salvati, se presenti, i criteri di ricerca (dati del form e
pagina selezionata) per ritornare alla pagina precedente:
if(isset($_POST['nome_ricerca'])||isset($_POST['cognome_ricerca']))
{
$nome_ricerca=$_POST['nome_ricerca'];
$cognome_ricerca=$_POST['cognome_ricerca'];
$_SESSION['nome_ricerca']=$_POST['nome_ricerca'];
$_SESSION['cognome_ricerca']=$_POST['cognome_ricerca'];
}
else
{
$nome_ricerca=$_SESSION['nome_ricerca'];
$cognome_ricerca=$_SESSION['cognome_ricerca'];
}
$pagina_ricerca=$_POST['pag'];
Ora si può interrogare il database per avere tutti i dati del singolo ricercatore:
//PREPARAZIONE QUERY
$qsel="SELECT * FROM anagrafica WHERE idanagrafica = $idanagrafica";
//CONNESSIONE DATABASE
$conn=dbconn(); //dbconn si trova in "inc.php"
//INTERROGAZIONE DATABASE
$risultato=dbquery($qsel,$conn); //dbquery si trova in "inc.php"
//ESPORTAZIONE
$riga = mysql_fetch_assoc($risultato);
//SALVATAGGIO DEI DATI NELLE VARIABILI PHP
$nome=$riga["nome"];
36
41. $cognome=$riga["cognome"];
$data_di_nascita=$riga["natoil"];
//CONVERSIONE DATA DA FORMATO MYSQL A FORMATO GG/MM/AAAA
$natoil=converti_data_da_mysql($data_di_nascita);
...omissis...
//SE NON È STATA CREATA UNA CARTELLA PER IL RICERCATORE, NE CREO UNA
If(($cartella_anagrafica=='')||(strlen($cartella_anagrafica)!=30)||($cartella_anagrafic
a==NULL))
{
$cartella_anagrafica=random_string(30);
}
Si preferisce dare un nome RANDOM di lunghezza fissa (30 caratteri) alla
cartella dell’anagrafica, invece di rinominare la cartella con un nome standard
(ES:NOME+COGNOME), così i file che vengono salvati sul server non possono
essere associati direttamente al ricercatore, a meno che non si abbia accesso
al database per vedere il collegamento nome cartella – ricercatore.
Dopo aver esportato i dati dal database, si può stampare l’intera pagina dei
dettagli con tutti i dati da modificare:
//TITOLO DELLA PAGINA CON NOME E COGNOME ED EVENTUALE DATA DI NASCITA
<p class=titolo>
<?$nome $cognome?>
if ($natoil!=''){echo "($natoil)";}
</p>
//FORM CON I DATI DA MODIFICARE
<form name=anagrafica id=anagrafica method=POST>
<div class=anagrafica_sinistra>
<table align=right>
<input type=hidden name=idanagrafica Value="<?$idanagrafica?>">
<input type=hiddenname=cartella_anagraficavalue="<?$cartella_anagrafica?>">
<tr>
<td align=right>Nome: </td>
<td>
<input type=text name=nome size=40 value="<?$nome?>">
</td>
</tr>
<tr>
37
42. <td align=right>Cognome: </td>
<td>
<input type=text name=cognome size=40 value="<?$cognome?>">
</td>
</tr>
...omissis...
<tr>
<td></td>
<td><buttontype=submitname=anagrafica value=MODIFICA>Modifica
Anagrafica</button></td>
</tr>";
<tr>
<td></td>
<td><buttontype=submitname=anagrafica value=ELIMINA>Elimina
Anagrafica</button></td>
</tr>
</table>
</div>
</form>
In seguito si visualizzano tutti gli allegati dell’anagrafica del ricercatore
<div class=allegati>
<?
$cartella_post=$cartella="documenti/".$cartella_anagrafica."/";
include('allegati.php');
?>
<div>
<button class=immagine type=button onclick="apriFinestraUpload('<?$cartella_post?>');">
<div class=anagrafica_upload_nuovo>
<imgsrc="immagini/upload.png">Nuovo Upload
<div>
</button>
</div>
</div>
Successivamente si esportano dal database e si stampano sulla pagina tutte le
strutture per ogni anno collegate al ricercatore:
38
44. $idanagrafica=$riga["idanagrafica"];
$anno=$riga["anno"];
...omissis...
<input type=hiddenname=<?idanagrafica2_$i?>value=<?$idanagrafica2?>>
<tr id=row<?$i?>>
<td>
<input type=text id=<?anno_$i?> name=<?anno_$i?> value=<?$anno?>>
</td>
...omissis...
<td onclick=”eliminaRigaAnagrafica2(this);">
<imgsrc="immagini/ics.png" alt="elimina">
</td>
</tr>
$i++;
}//while
?>
</tbody>
</table>
<p><a href="javascript:
aggiungiRigaAnagrafica2('anagrafica2_tbody','<?$i?>');">[aggiungi un campo]</a></p>
</div>
Ed infine si visualizzano i due bottoni di modifica ed eliminazione
<div id=bottoni>
<input type=hidden id=righe_tot name=righe_tot value="<?($i-1)?>">
<input type=hidden id=righe_provvisorie value="<?($i-1)?>">
<input type=hidden id=riga_iniziale value="<?($i-1)?>">
<input type=hidden name=idanagrafica value="<?$idanagrafica?>">
<buttonclass=immagine type=button
onclick="azioneConferma('anagrafica','index.php?pagina=action&azione=elimina_anagrafica
','index.php?pagina=cerca','eliminare questa anagrafica?');">
<div>
<imgsrc="immagini/ics.png"><br>ELIMINA<br>ANAGRAFICA
</div>
</button>
40
45. <buttonclass=immagine type=button
onclick="azioneConferma('anagrafica','index.php?pagina=action&azione=modifica_anagrafic
a','index.php?pagina=cerca','modificare questa anagrafica?');">
<div>
<imgsrc="immagini/tick.png"><br>MODIFICA<br>ANAGRAFICA
</div>
</button>
</div>
6.2.2 Config.php
Questo file contiene tutte le informazioni di configurazione; nel caso in cui si
sposti l’applicazione su un altro server, basta modificare questo file.
Nella prima variabile viene indicata la cartella del webserver dove si trova il
programma:
$percorso="/ricercatori";
In seguito vengono indicate le credenziali di accesso al database:
$dbhost = 'localhost'; //nome dell'host
$dbuser = 'ricercatori'; //nome utente db
$dbpass = 'ricercatori'; //password db
$dbname = 'ricercatori'; //nome del db
Nell’ultima parte del file si impostano i collegamenti con il foglio di stile e le
funzioni javascript:
<head>
<link rel=stylesheet type=text/css href="inc/style.css">
<script type="text/javascript" src="inc/script.js"></script>
</head>
6.2.3 Action.php
L’applicativo raccoglie, in un file chiamato “action.php”, tutte le procedure che
contengono le query per scrivere/leggere sul data base. La funzione
interessata viene richiamata tramite la variabile di tipo GET “azione”.
//AZIONI RELATIVA ALL’ANAGRAFICA
if ($_GET['azione']=="modifica_anagrafica"){
modifica_anagrafica();
}
41
46. elseif ($_GET['azione']=="inserisci_anagrafica"){
inserisci_anagrafica();
}
elseif ($_GET['azione']=="elimina_anagrafica"){
elimina_anagrafica();
}
//AZIONI RELATIVE ALLA PUBBLICAZIONE
elseif ($_GET['azione']=="modifica_pubblicazione"){
modifica_pubblicazione();
}
elseif ($_GET['azione']=="inserisci_pubblicazione")
...omissis...
else
{
<div>
echo$_GET['azione']." non e' un'azione valida...";
</div>
}
Nel resto del file vengono definite le funzioni chiamate in precedenza.
Prendiamo come esempio la funzione “modifica anagrafica”:
functionmodifica_anagrafica()
{
//SALVO NELLE VARIABILI I DATI DA MODIFICARE
$idanagrafica=$_POST['idanagrafica'];
$nome=$_POST['nome'];
...omissis
$cartella=$_POST['cartella_anagrafica'];
if (!file_exists("documenti/".$cartella))mkdir("documenti/$cartella", 0777);
//FORMATTAZIONE DEI CAMPI
$nome=strtolower($nome);
$timestamp=date('Y-m-d H:m:s'); //2010-01-02 17:01:13
$codice_fiscale=strtoupper($codice_fiscale);
...omissis...
//PREPARAZIONE DELLA QUERY
$q="UPDATE `anagrafica` SET
42
47. `nome` = '$nome',
`cognome` = '$cognome',
...omissis...
//CONNESSIONE CON IL DB E ESECUZIONE DELLA QUERY
$conn=dbconn();
dbquery($q,$conn);
<p>Modifica dell’anagrafica effettuata con successo</p>
//MODIFICA DEI DATI DI STRUTTURA ANNO
$righe_tot=$_POST['righe_tot'];
if (isset($_POST['righe_tot']))
{
for ($cont=0;$cont<=$righe_tot;$cont++){
$nuovo_aggiunto=$_POST["nuovo_$cont"];
$anno_aggiunto=$_POST["anno_$cont"];
$struttura_aggiunto=$_POST["struttura_$cont"];
...omissis...
//SE CI SONO DEI CAMPI NUOVI, LI AGGIUNGO
if (($nuovo_aggiunto=='nuovo')&&(($anno_aggiunto!='')||($ruolo_aggiunto!='') ||
($struttura_aggiunto!='') || ($note_aggiunto!='')))
{
//PREPARAZIONE QUERY
$q="insertinto anagrafica2 ( idanagrafica, anno, posizione, ruolo,
..., note ) values ( ";
$q.="'$idanagrafica' ";
$q.=",'$anno_aggiunto' ";
...omissis...
$q.=")";
//CONNESSIONE DB E ESPORTAZIONE QUERY
$conn=dbconn();
dbquery($q,$conn);
}
else
{
$idanagrafica2=$_POST["idanagrafica2_$cont"];
$anno=$_POST["anno_$cont"];
43
48. if ( ($anno=='')&&($ruolo=='')&&($struttura=='')&&($hindex=='')&&($note=='') &&
($idanagrafica2!='') )
{
//SE I CAMPI SONO VUOTI, LI ELIMINO
$q="DELETE FROM `anagrafica2` WHERE `anagrafica2`.`idanagrafica2` = '$idanagrafica2'";
$conn=dbconn();
dbquery($q,$conn);
}
else
{
//SE SONO STATI MODIFICATI DEI CAMPI, LI MODIFICO
$q="UPDATE `anagrafica2` SET `anno`='$anno',`posizione`=...
...omissis...
$q.="`note` = '$note' WHERE `anagrafica2`.`idanagrafica2`='$idanagrafica2'";
$conn=dbconn();
dbquery($q,$conn);
}
dbclose();
}//modifica_anagrafica
6.2.4 Inc.php
Questa pagina racchiude tutte le funzioni ausiliarie come le procedure per il
collegamento al db o le funzioni di conversioni dei dati. Vediamo alcune
funzioni di esempio:
//CONNESSIONE AL DB
function dbconn()
{
global $dbhost,$dbuser,$dbpass,$dbname;
mysql_connect($dbhost, $dbuser, $dbpass)
or die('Errore nella connessione con MySql');
mysql_select_db($dbname)
or die('Errore nella connessione al database');
}
//CHIUSURA CONNESSIONE AL DB
function dbclose()
44
49. {
global $dbhost, $dbuser, $dbpass;
mysql_close(mysql_connect($dbhost, $dbuser, $dbpass));
}
//ESECUZIONE QUERY
function dbquery($q,$conn)
{
$rs=mysql_query("$q") or die("Query non valida:" .mysql_error());
return $rs;
}
//CONVERSIONE DATA DA FORMATO MYSQL A FORMATO GG/MM/AAAA
function converti_data_da_mysql($date)
{
if ($date=="0000-00-00")
{
$newdate='';
}
else
{
list($anno, $mese, $giorno) = explode("-","$date");
$newdate="".$giorno."/".$mese."/".$anno."";
}
return $newdate;}
6.3 L’utilizzo di Javascript e css
Per rendere l’interfaccia user-friendly ed evitare di ricaricare le pagine php ad
ogni modifica, vengono utilizzate delle funzioni javascript e dei fogli di stile css.
6.3.1 script.js
Il file script.js contiene tutte le funzioni javascript utilizzate dal programma.
In questo capitolo viene analizzata nel dettaglio solamente la funzione che
aggiunge dinamicamente, lato client,un autore ad una pubblicazione.
Lo scenario è il seguente: l’utente clicca in fondo alla pagina del dettaglio
pubblicazione sul link “aggiungi autore Burlo”; si apre, quindi, una finestra
popup nella quale può ricercare un dipendente da aggiungere come autore.
45
50. Dalla lista dei risultati di ricerca l’utente sceglie il dipendente da aggiungere e
clicca sul pulsante “+”
Qui di seguito si analizza nel dettaglio la funzione javascript che viene
chiamata dopo aver cliccato sul pulsante “+”:
functionaggiungiRigaAutoreBurlo (idTbody,num_riga)
Burlo
{
//LEGGO I DATI DEL RICERCATORE DALLA PAGINA POPUP
varidanagrafica = document.getElementById('idanagrafica'+e).value;
document.getElementById('idanagrafica'+e).value;
var nome = document.getElementById('nome'+e).value;
var cognome = document.getElementById('cognome'+e).value;
varnatoil = document.getElementById('natoil'+e).value;
if(! document.getElementById&&document.createElement) { return; }
46
51. //OPENER È LA PAGINA DEL DETTAGLIO PUBBLCAZIONE
vartbody = opener.document.getElementById(idTbody);
varriga_inizialeVal = opener.document.getElementById('riga_iniziale').value;
varriga_provvisoria = opener.document.getElementById('righe_provvisorie');
varriga_provvisoriaVal = opener.document.getElementById('righe_provvisorie').value;
var riga = Number(riga_inizialeVal)+Number(riga_provvisoriaVal);
//CREAO LA NUOVA RIGA DELLA TABELLA CON I CAMPI DI INPUT
vartr= opener.document.createElement("tr");
vartdNome = opener.document.createElement("td");
vartdCognome = opener.document.createElement("td");
...omissis...
varinputNuovo = opener.document.createElement("input");
varinputNome = opener.document.createElement("input");
...omissis...
inputNuovo.name="nuovo_"+riga;
inputNuovo.type="hidden";
inputNuovo.value="nuovo";
...omissis..
tdNome.appendChild(inputNome);
tdNome.appendChild(inputNuovo);
tdCognome.appendChild(inputCognome);
tdVuoto.appendChild(testoVuoto);
...omissis...
tr.id="row"+riga;
tr.appendChild(tdNome);
...omissis...
tbody.appendChild(tr);
var intestazione = opener.document.getElementById('intestazione');
if (intestazione.style.visibility=='hidden')
//L’INTESTAZIONE DELLA TABELLA È PRESENTE SOLO SE È PRESENTE UN AUTORE. SE AGGIUNGO
UNA RIGA DEVO RENDERE VISIBILE L’INTESTAZIONE
{intestazione.style.visibility='visible';}
else { intestazione.style.visibility='visible'; }
//LEGGO IL VALORE DELLA RIGA CORRENTE E NE AGGIUNGO UNA AL CONTATORE
varrighe_totali = opener.document.getElementById('righe_tot');
47
52. varrighe_totaliVal = opener.document.getElementById('righe_tot').value;
opener.document.getElementById('righe_tot').value;
righe_totali.setAttribute('value',riga);
calcolo=Number(riga_provvisoriaVal)+Number(1);
riga_provvisoria.setAttribute('value',calcolo);
//RENDO INVISIBILE LA SCRITTA “Nessun ricercatore del Burlo selezionato
A “Nessun selezionato”
var vuoto = opener.document.getElementById('vuoto');
document.getElementById('vuoto');
vuoto.setAttribute('style','display:none');
}
E nell’immagine successiva il risultato finale: il ricercatore è stat aggiunto
stato
come autore della pubbli
pubblicazione.
6.3.2 style.css
Senza bisogno di scomodare il linguaggio javascript, si possono creare dei
tooltip anche utilizzando solamente i fogli di stile css.
Di seguito si evidenzia il codice per far apparire un tooltip che fa vedere l’intero
titolo di una pubblicazione quando l’utente passa sopra con il mouse sul titolo
ridotto ai primi 40 caratteri.
Nella pagina HTML:
<td>
<a class=tooltip>
<?$titolo_limitato
48
54. color:#000000;
padding:3px;
text-align: center;
cursor:default;
}
6.4 Esportazione in PDF
Il browser Firefox dà la possibilità di stampare su file PDF l’intera pagina HTML.
Approfittando di questa funzione e dell’attributo “@media” del css, possiamo
diversificare lo stile perla visualizzazione a schermo (@media screen) e la
visualizzazione per la stampa (@media print).
@media print{
html
{
background-color: #FFFFFF;
}
div.menu_basso,div.menu_alto,.immagine,div#crea_file,div#crea_file
a,a.tooltipspan.tooltip
{
display:none;
}
}
Nell’immagine si può vedere il risultato dell’esportazione in PDF:
50
55. 6.5 Esportazione in Excel
Per esportare un risultato in Excel è stata usata la seguente procedura:
//INIZIALIZZO L’ARRAY DOVE SALVARE I RECORD
$esportazione=array();
$i=0; //inizializzo il contatore dei record
//ESPORTO OGNI RIGA DEL RISULTATO DELLA QUERY NELL’ARRAY
while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
$idanagrafica=$riga['idanagrafica'];
...omissis...
$esportazione[$i]=array("$idanagrafica","$nome","$cognome","$struttura",da_punto_
a_virgola($ifgrezzo),da_punto_a_virgola($ifnormalizzato),da_punto_a_virgola($ifcorretto
));
$i++;
}
//CREO IL FILE EXCEL PARTENDO DALL’ARRAY
$nome_file="statistiche.xls";
if (($file = fopen("tmp/$nome_file", "w")) !== FALSE)
{
$esportazione_header=array("id","NOME","COGNOME","STRUTTURA","IFgrezzo","IFnormal
izzato","IF corretto");
fputcsv($file, $esportazione_header,chr(9),'"'); for ($k=1;$k<=$i;$k++)
{
//NB: chr(9)=TABULAZIONE
fputcsv($file, $esportazione[$k],chr(9),'"');
}
}
fclose($file);
//CREO IL PULSANTE PER SALVARE IL FILE EXCEL
echo "<div id=crea_file><a href=tmp/$nome_file>Esporta</a></div>";
51
56. 7. CONCLUSIONI
7.1 Risultati ottenuti
I risultati ottenuti rispettano i vincoli di progetto discussi in fase di analisi.
L’applicazione web creata permette la gestione completa dei dati di attività di
ricerca dei ricercatori dell’IRCCS Burlo Garofolo. Il software è installato sul
server web interno del Burlo ed è utilizzato da Aprile 2011.
Per quanto riguarda i dati che erano presenti nel file Excel condiviso utilizzato
in precedenza, sono stati importati nel nuovo database, e, quindi, il file è stato
definitivamente eliminato.
7.2 Lavoro svolto
DATABASE:
• Tabelle: 9
CODICE HTML/PHP:
• Pagine: 29
• Funzioni: 38
o inc.php: 20
o action.php: 18
CODICE JAVASCRIPT:
• Funzioni:31
• Righe:1150
CODICE CSS:
• Classi e ID: 35
• Righe: 380
52
57. 7.3 Sviluppi Futuri
In questo momento le persone che hanno accesso al programma sono cinque e
fanno tutte parte della direzione scientifica. Per un prossimo futuro si può
pensare di dare l’accesso al programma ad ogni singolo ricercatore in modalità
“ospite”, dandogli la possibilità di leggere esclusivamente i dati che lo
riguardano personalmente.
Un altro sviluppo alquanto interessante, che potrebbe venire implementato a
breve,è l’importazione automatica dei nomi delle riviste e dei relativi IF grezzi
all’interno del programma.
53
58. 8. BIBLIOGRAFIA
M. Fermeglia, materiale didattico del corso “Basi di dati”
F. Sbroiavacca, materiale didattico del corso “Sistemi Informativi”
C. Wenz, “JavaScript in tasca”, Pearson Education, 2007
Riferimenti Web:
http://database.html.it/guide/leggi/87/guida-mysql/
http://dev.mysql.com/doc/refman/5.0/en/index.html
http://php.html.it/guide/leggi/77/guida-php-e-mysql-pratica/
http://php.html.it/guide/leggi/99/guida-php-di-base/
http://php.html.it/guide/leggi/92/guida-php-su-linux/
http://php.html.it/guide/leggi/101/guida-php-pratica/
http://php.net/
http://javascript.html.it/guide/leggi/25/guida-javascript-di-base/
54