progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di...
DESCRIPTION
TRANSCRIPT
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 Prof. Maurizio Fermeglia
LAUREANDO Daniel Zotti
Anno Accademico 2010/2011
i
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
ii
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
1
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
2
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.
1Endnote: http://www.endnote.com/ 2Pybligrapher: http://pybliographer.org/
3
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.
4
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.
5
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.
6
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
7
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.
8
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.
9
3.2 Glossario dei termini
Termine Descrizione Sinonimi Collegamenti
Ricercatore Rappresenta un dipendente dell’azienda
Dipendente, Lavoratore, Anagrafica
Pubblicazione, Progetto di ricerca, Evento
Pubblicazione Rappresenta una qualsiasi pubblicazione su una rivista scientifica
Articolo, Report, Capitolo di un libro, Linea Guida/Protocollo
Ricercatore
Progetto di ricerca
Rappresenta un progetto a carattere scientifico per il quale sono stati stanziati dei soldi
Pre-clinico, Osservazionale, Clinico-Sperimentale, Gestionale, Metodologica
Ricercatore
Evento
Rappresenta la partecipazione da parte del ricercatore ad un qualsiasi evento di carattere scientifico
Congresso, Convegno Ricercatore
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;
10
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”
11
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”.
12
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
13
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
14
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
15
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 Personale
Valore dell’IF personale, nel caso in cui il ricercatore partecipi a una 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”.
16
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”.
17
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
18
3.5.4 Schema E-R Finale Ristrutturato
19
3.5.5 Schema relazionale dedotto dallo schema E-R finale
20
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
21
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
22
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.
23
Figura 5 - Activity Diagram della modifica di un'anagrafica di un ricercatore
24
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
25
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:
Figura
1. Menu È presente in tuttepermette di raggiungere velocemente qualsiasi sezione del programma.
2. Titolo della paginaAnche questa è sempre presente in tutte le pagine utile per far ricordare all’utente in che pagina si trova
3. Dati della paginaQuesta 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
Figura 7 - Dettaglio della Pubblicazione
tutte le pagine dell’applicazione web, in posizione fissa, e permette di raggiungere velocemente qualsiasi sezione del programma.
olo della pagina
Anche questa è sempre presente in tutte le pagine dell’applicazione ed è utile per far ricordare all’utente in che pagina si trovaDati della pagina
Questa parte si trova solamente nelle pagine di dettaglio e contiene tutti
Anche questa parte si trova solamente nelle pagine di dettaglio e permette di gestire gli allegati
Nelle sezioni Pubblicazione, Progetti di Ricerca ed Eventi raccoglie i ricercatori collegati.
le pagine dell’applicazione web, in posizione fissa, e permette di raggiungere velocemente qualsiasi sezione del programma.
dell’applicazione ed è utile per far ricordare all’utente in che pagina si trova
Questa parte si trova solamente nelle pagine di dettaglio e contiene tutti
Anche questa parte si trova solamente nelle pagine di dettaglio e
Nelle sezioni Pubblicazione, Progetti di Ricerca ed Eventi raccoglie i
In questa zona, nel caso in cui il rstruttura relativamente all’anno inserito nella Pubbldi Ricerca o Evento), viene segnalato un errore in modo ben visibile, come mostrato nell’immagine sotto.
Figura
Per quanto riguarda la sezione di Anagrafica, questa zona raccoglie le strutture collegate al singolo ricercatore per ogni anno (vedi immagine sotto)
Figura 9 -
6. Pulsante “Indietro”Cliccando su questo pulsante si può tornare alla pagine precedente
7. Pulsanti di Modifica ed EliminazioneSono dei pulsanti essenziali per salvare le modifiche fatte o eliminare un’anagrafica, progetto di ricerca, p
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 pricerca, può essere d’aiuto osservare
NB: Nelle pagine di ricerca sono sempre presenti le sezioni 1,2,6 viste in
precedenza
27
zona, nel caso in cui il ricercatore non sia collegato a nessuna struttura relativamente all’anno inserito nella Pubblidi 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
- Dettaglio delle strutture del singolo ricercatore
Pulsante “Indietro”
Cliccando su questo pulsante si può tornare alla pagine precedentePulsanti di Modifica ed Eliminazione
Sono dei pulsanti essenziali per salvare le modifiche fatte o eliminare un’anagrafica, progetto di ricerca, pubblicazione o evento.
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 per capire meglio com’è strutturata una pagind’aiuto osservare uno screenshot:
ricerca sono sempre presenti le sezioni 1,2,6 viste in
icercatore non sia collegato a nessuna icazione (o Progetto
di Ricerca o Evento), viene segnalato un errore in modo ben visibile,
della pubblicazione
Per quanto riguarda la sezione di Anagrafica, questa zona raccoglie le strutture collegate al singolo ricercatore per ogni anno (vedi immagine
el singolo ricercatore
Cliccando su questo pulsante si può tornare alla pagine precedente
Sono dei pulsanti essenziali per salvare le modifiche fatte o eliminare ubblicazione o evento.
Anche le pagine di ricerca sono presenti solo per quanto riguarda le sezioni di
capire meglio com’è strutturata una pagina di
ricerca sono sempre presenti le sezioni 1,2,6 viste in
Figura 10 - Risultati della ricerca delle anagrafiche dei ricercatori
Figura
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 iSe mancano dei campi importanti progetti di ricerca e gli eventirosso.
28
Risultati della ricerca delle anagrafiche dei ricercatori
Figura 11 - Lista delle pubblicazioni: Errori
Ogni sezione possiede un form di ricerca con campi diversi per anagrafica, pubblicazione, progetto di ricerca o evento.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
Risultati della ricerca delle anagrafiche dei ricercatori
Ogni sezione possiede un form di ricerca con campi diversi per anagrafica, pubblicazione, progetto di ricerca o evento.
risultati della ricerca. per quanto riguarda le pubblicazioni, i
vengono segnalate in
C. Modifica Collegamento alla pagina di dettaglio anagrafica, pubblicazione, progdi ricerca o evento.
D. Collegamento alla “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
È 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
Collegamento alla pagina di dettaglio anagrafica, pubblicazione, progdi ricerca o evento. Collegamento alla “Home page” del ricercatore (solo per anagrafica)Viene descritto nel dettaglio nel capitolo successivo.
diretta del ricercatore (solo per anagrafica)
del singolo ricercatore
“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
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
Collegamento alla pagina di dettaglio anagrafica, pubblicazione, progetto
” del ricercatore (solo per anagrafica).
diretta del ricercatore (solo per anagrafica)
“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
È una sezione utile se si vuole avere un riassunto di cosa ha fatto un
Oltre a leggere le varie attività del ricercatore, si possono anche modificare o
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
La pagina principale delle statistiche si presenta come una lista di formricerca preformattati nei quali l’utente deve inserire i dati necessari e cliccare sul tasto “play”.
30
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
- Lista delle possibili interrogazioni al Database
La pagina principale delle statistiche si presenta come una lista di formi nei quali l’utente deve inserire i dati necessari e cliccare
Figura 14 - Dettaglio di una query
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
al Database
La pagina principale delle statistiche si presenta come una lista di form di i nei quali l’utente deve inserire i dati necessari e cliccare
Un esempio di query potrebbe essere quella vista nelle“Calcolare l’Impact Factor di Daniel Zotti per il 2010 (anno di pubbli
E il risultato sarebbe quello nell’immagine sotto:
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
In questo caso, oltre ad avere la lista dei ricercatori, compare il pulsante “Esporta” per esportare il risultato su un file
31
Un esempio di query potrebbe essere quella vista nelle due immagini “Calcolare l’Impact Factor di Daniel Zotti per il 2010 (anno di pubbli
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
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.
due immagini sopra: “Calcolare l’Impact Factor di Daniel Zotti per il 2010 (anno di pubblicazione)”
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
In questo caso, oltre ad avere la lista dei ricercatori, compare il pulsante
5.2.5 Il Pannello di contro
In questa sezione si all’applicazione.
Figura
32
Figura 17 - Risultato della query
Pannello di controllo
si possono gestire gli utenti che hanno accesso
Figura 18 - Pagina del "Pannello di controllo"
possono gestire gli utenti che hanno accesso
33
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
34
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]
35
• 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):
36
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"];
37
$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>
38
<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:
39
//ESPORTAZIONE
$qsel="SELECT * FROM anagrafica2 WHERE idanagrafica = $idanagraficaorder by anno DESC";
$conn=dbconn();
$risultato=dbquery($qsel,$conn);
$num = mysql_num_rows ($risultato);
//STAMPA
<div class=dettagli_annuali>
<p>DETTAGLI ANNUALI</p>
<div id=contenitore_anagrafica2>
<?
if ($num==0){
echo "<div><p id=vuoto style=\"display:inline;\">vuoto</p></div>";
}
else {
echo "<div><p id=vuoto style=\"display:none;\">vuoto</p></div>";
}
?>
<table id=anagrafica2_table>
<tbody id=anagrafica2_tbody>
<?
if ($num==0){
echo "<tr id=intestazione style=\"visibility:hidden\">";
$i=1;
}
else{
echo "<tr id=intestazione style=\"visibility:visible\">";
$i=0;
}
?>
<th>Anno</th><th>Posizione</th><th>Qualifica(Ruolo)</th><th>Tipo
Contratto</th><th>Struttura</th><th>H-
index</th><th>A.P.</th><th>Valore</th><th>%</th><th>Note</th>
</tr>
<?
while ($riga = mysql_fetch_assoc($risultato)){
$idanagrafica2=$riga["idanagrafica2"];
40
$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>
41
<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();
}
42
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
43
`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"];
44
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()
45
{
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.
Dalla lista dei risultati di ricerca clicca sul pulsante “+”
Qui di seguito si analizza nel dettaglio la funzione javascriptchiamata dopo aver cliccato sul pulsante “+”:
functionaggiungiRigaAutoreBurlo
{
//LEGGO I DATI DEL RICERCATORE DALLA PAGINA POPUP
varidanagrafica = document.ge
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)
46
Dalla lista dei risultati di ricerca l’utente sceglie il dipendente
Qui di seguito si analizza nel dettaglio la funzione javascriptchiamata dopo aver cliccato sul pulsante “+”:
Burlo (idTbody,num_riga)
//LEGGO I DATI DEL RICERCATORE DALLA PAGINA POPUP
varidanagrafica = 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; }
sceglie il dipendente da aggiungere e
Qui di seguito si analizza nel dettaglio la funzione javascript che viene
tElementById('idanagrafica'+e).value;
47
//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');
varrighe_totaliVal = opener.
righe_totali.setAttribute('value',riga);
calcolo=Number(riga_provvisoriaVal)+Number(1);
riga_provvisoria.setAttribute('value',calcolo);
//RENDO INVISIBILE LA SCRITTA “
var vuoto = opener.document.getElementById('vuoto');
vuoto.setAttribute('style','display:none');
}
E nell’immagine successiva ilcome autore della pubbli
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
opener.document.getElementById('righe_tot').value;
righe_totali.setAttribute('value',riga);
calcolo=Number(riga_provvisoriaVal)+Number(1);
riga_provvisoria.setAttribute('value',calcolo);
A SCRITTA “Nessun ricercatore del Burlo selezionato
document.getElementById('vuoto');
vuoto.setAttribute('style','display:none');
nell’immagine successiva il risultato finale: il ricercatore è statdella pubblicazione.
Senza bisogno di scomodare il linguaggio javascript, si possono creare dei tooltip anche utilizzando solamente i fogli di stile css.
il codice per far apparire un tooltip che fa vedere l’intero una pubblicazione quando l’utente passa sopra con il mouse sul titolo
ridotto ai primi 40 caratteri.
<?$titolo_limitato
document.getElementById('righe_tot').value;
Nessun ricercatore del Burlo selezionato”
risultato finale: il ricercatore è stato aggiunto
Senza bisogno di scomodare il linguaggio javascript, si possono creare dei
il codice per far apparire un tooltip che fa vedere l’intero una pubblicazione quando l’utente passa sopra con il mouse sul titolo
49
if (strlen($titolo_limitato)<strlen($titolo))
{
echo "<span class=tooltip>";
echo "$titolo";
echo "</span>";
}
?>
</a>
</td>
Nel file style.css contenente lo stile del tooltip:
a.tooltip
{
position:relative;
z-index:14;
text-decoration:none
}
a.tooltip:hover
{
z-index: 15;
background-color: #FFCCFF
}
a.tooltipspan.tooltip
{
display: none
}
//LO SPAN VERRÀ MOSTRATO SOLTANTO SULLO STATO :hover
a.tooltip:hoverspan.tooltip
{
display: block;
position: absolute;
bottom: 20px;
left: 30px;
min-width: 200px;
border: 1px solid #000000;
background-color: #FFFFFF;
50
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:
51
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>";
52
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
53
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.
54
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/