Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi)
Upcoming SlideShare
Loading in...5
×
 

Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi)

on

  • 1,744 views

 

Statistics

Views

Total Views
1,744
Slideshare-icon Views on SlideShare
1,743
Embed Views
1

Actions

Likes
1
Downloads
33
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi) Progettazione e sviluppo di un'applicazione web per la gestione di dati di attività di ricerca: caso dell'IRCCS Burlo Garofolo (Tesi) Document Transcript

    • UNIVERSITÀ DEGLI STUDI DI TRIESTE Facoltà di Ingegneria Tesi di Laurea Triennale in Ingegneria Informatica PROGETTAZIONE E SVILUPPO DI UNAPPLICAZIONE WEB PER LA GESTIONE DI DATI DI ATTIVITA DI RICERCA: CASO DELLIRCCS BURLO GAROFOLORELATORE LAUREANDOProf. Maurizio Fermeglia Daniel Zotti Anno Accademico 2010/2011
    • INDICE1. INTRODUZIONE ............................................................................... 1 1.1 Obiettivo della tesi ...........................................................................1 1.2 Risultato della tesi ...........................................................................1 1.3 Stato dellarte .................................................................................2 1.4 Motivazioni .....................................................................................2 1.5 Vincoli di progetto ...........................................................................3 1.6 Riassunto dei prossimi capitoli...........................................................32. ANALISI ........................................................................................... 4 2.1 Raccolta informazioni e definizione dei requisiti ...................................43. 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 ..................... 194. PROGETTAZIONE DELLAPPLICATIVO ............................................ 20 4.1 Use Case Diagram ......................................................................... 20 4.2 Activity Diagram ............................................................................ 225. INTERFACCIA ................................................................................. 25 i
    • 5.1 Introduzione ................................................................................. 25 5.2 La struttura dell’interfaccia dellapplicativo ........................................ 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 .............................................................. 326. 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 ..................................................................... 517. CONCLUSIONI ................................................................................ 52 7.1 Risultati ottenuti ............................................................................ 52 7.2 Lavoro svolto ................................................................................ 52 7.3 Sviluppi Futuri ............................................................................... 538. BIBLIOGRAFIA ............................................................................... 54 ii
    • 1. INTRODUZIONE1.1 Obiettivo della tesiSi vuole creare un applicativo Web per la gestione dei ricercatori dell’IRCCSBurlo Garofolo.Più precisamente, lo scopo è quello di implementare un sistema in cui sipossano raccogliere tutti i ricercatori che lavorano presso l’IRCCS BurloGarofolo 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 siaper poter vedere come lavorano i vari dipendenti sia per poter pensare a dellestrategie aziendali per quanto riguarda gli investimenti sulla ricerca.1.2 Risultato della tesiL’applicazione sviluppata rispetta i vincoli di progetto ed è già installata edutilizzata dall’IRCCS “Burlo Garofolo”a partire da Aprile 2011. Figura 1 - Collage di varie immagini dellapplicazione 1
    • 1.3 Stato dellarteSul mercato esistono già dei software per la gestione delle pubblicazioni comeendnote1per Windows o pybligrapher2per Linux, esistono anche moltissimiprogrammi per la gestione del personale,ma l’integrazione completa tra i duenon sembra sia stata ancora pensata.Inoltre, i programmi citati in precedenza non sono applicazioni web: bisognaquindi installarle sul computer di ogni utente che intende utilizzarle. Figura 2 - Screenshot del programma endnote1.4 MotivazioniAl “Burlo Garofolo”, prima di installare questo software, l’intera attività diricerca veniva gestita tramite l’uso di un file Excel e di vari file ausiliari, salvatiin una cartella condivisa.In direzione scientifica non era presente nemmeno un programma per gestire iricercatori.1Endnote: http://www.endnote.com/2Pybligrapher: http://pybliographer.org/ 2
    • 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.161.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
    • 2. ANALISI2.1 Raccolta informazioni e definizione dei requisitiIl 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 singoloricercatore e i dati che riguardano il tipo di lavoro da esso svolto.Inoltre si vuole avere la possibilità di avere una visione “globale” di ognisingolo 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 acui ha partecipato ciascun dipendente.Nella sezione delle pubblicazioni vengono salvati i dati relativi allepubblicazioni a cui partecipano i ricercatori dell’azienda.Nella sezione dei progetti di ricerca vengono salvati i dati dei progetti diricerca, con i relativi costi, ai quali partecipano i ricercatori dell’azienda.Nella sezione degli eventi vengono salvati i dati relativi agli eventi a cuipartecipano i ricercatori dell’azienda.Per ognuna di queste sezioni fondamentali ci deve essere la possibilità diallegare dei file (ad esempio il curriculum del ricercatore o l’articolo di unapubblicazione) e di fare delle ricerche all’interno della sezione.Si deve poter accedere al sistema tramite username e password personali e sideve prevedere l’accesso di più utenti contemporaneamente; ci deve esserequindi un pannello di controllo nel quale si possono creare, modificare edeliminare e credenziali di accesso.Si deve prevedere una sezione di analisi in cui si possano fare delle statistichesui dati inseriti. Questa è forse la sezione più importante in quanto, una voltainserito un congruo numero di dati, sarà possibile fare le varie richieste aldatabase e avere una visione dell’andamento dell’attività di ricercadell’azienda. 4
    • Come ultima cosa, si deve avere la possibilità di esportare il risultato di certequery in un file Excel da poter inviare al ministero, o da utilizzare perscambiarsi i dati con un formato che sia leggibile da tutti.Inoltre, sarebbe comodo poter avere la possibilità di stampare o di esportarein un file pdf le pagine contenenti i risultati delle query. 5
    • 3. PROGETTAZIONE DELLA BASE DI DATI3.1 Requisiti con rielaborazione delle frasi più significativeIn questa parte, nella quale si affronta nel dettaglio il capitolo 2.1, si descrivela struttura del database in cui verranno salvati i dati dell’intero programma.Nelle righe successive vengono descritte e rielaborate le frasi più significativededotte dall’intervista fatta al committente, raggruppate per concetti simili.Frasi di carattere generale. Si vuole realizzare un database nel qualememorizzare 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 nomee il cognome, la data di nascita ed il codice fiscale; si vogliono poter inserireanche i suoi recapiti.È importante sapere anche se il ricercatore ha un rapporto esclusivo conl’azienda e, in caso affermativo, bisogna indicare data di inizio del rapportoesclusivo ed eventuale data di fine rapporto. Si vuole inoltre sapere se ilricercatore ha il contratto esclusivo scaduto e se è rientrato in azienda dopo uncerto periodo di tempo.Ogni ricercatore deve avere una cartella personale sul server dove verrannosalvati gli allegati personali; il percorso di questa cartella verrà salvato neldatabase.Oltre a questi dati, si vuole avere uno storico annuale della struttura diappartenenza, 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 diricerca.Frasi relative alle pubblicazioni. Le pubblicazioni scientifiche sono degliscritti redatti in modo oggettivo su un argomento scientifico.È importante sapere se si tratta di una pubblicazione indicizzata o meno; lepubblicazioni indicizzate sono quelle che sono state pubblicate su una rivistache è inserita nellindice mondiale delle pubblicazioni scientifiche. Pubblicare unarticolo su di essa ha un indice di rilevanza proporzionale a quello della rivista.Questo indice si chiama Impact Factor4e misura il numero medio di citazioni3 http://it.wikipedia.org/wiki/Indice_H4 http://it.wikipedia.org/wiki/Fattore_di_impatto 6
    • ricevute in un particolare anno da articoli pubblicati in una rivista scientifica(Journal) nei due anni precedentiUna sezione molto importante, quindi, è quella in cui si inseriscono i valorirelativi agli impact factor grezzo, normalizzato e corretto.Si vogliono inserire inoltre i dati relativi al tipo (report, capitolo libro, lineaguida/protocollo) e alla linea di progetto a cui è collegata una pubblicazione.Ovviamente si devono poter inserire le informazioni riguardanti il titolo, latestata (o rivista), il volume (con fascicolo e pagine), l’editore e il codice DOIassociato; in aggiunta si vogliono inserire anche i dati relativi all’anno dipubblicazione e di attribuzione.Si vogliono avere a disposizione dei campi vero/falso per definire se lapubblicazione ha una ricaduta assistenziale e per segnalare se c’è una doppiaaffiliazione, se gli autori sono in ordine alfabetico e se l’autore corrispondentesi trova in penultima posizione.Per ogni pubblicazioni, ovviamente, si devono poter inserire gli autori che vipartecipano, che possono essere appartenenti all’azienda oppure esterni. Pergli esterni si devono poter inserire semplicemente nome e cognome, per gliinterni invece devono poter essere richiamati direttamente dal database e nellalista degli autori verranno visualizzati nome, cognome, data di nascita estruttura di appartenenza. Per ogni autore bisogna poter impostare la posizionein 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 diricerca si vuole poter inserire il tipo (corrente, nazionale, internazionale,applications, sperimentazioni) ma anche la tipologia (pre-clinica,osservazionale, clinica-sperimentale, gestionale, metodologica). Come per lepubblicazioni, si deve poter inserire anche l’anno a cui viene attribuito ilprogetto di ricerca, la linea ed il titolo.Poiché un progetto di ricerca può avere una durata di diversi anni, si devepoter inserire l’anno di inizio e l’anno di fine ricerca. Inoltre ogni progetto haun’azienda leader che è capo del progetto e delle aziende partner.Una parte molto importante per una buona analisi dell’organizzazione deiprogetti di ricerca è quella dove si inseriscono il budget assegnato, richiesto etotale. Ci dev’essere anche la possibilità di segnalare se e quando queldeterminato budget è stato approvato.Anche in questo caso, per ogni progetto di ricerca bisogna poter inserire iricercatori che vi partecipano, con le stesse modalità descritte per lepubblicazioni, tolto ovviamente il campo contenente l’IF. 7
    • Frasi relative agli eventi. La gestione degli eventi è molto simile alle dueviste in precedenza. Per eventi si intendono convegni, congressi, gruppi dilavoro o più in generale tutte quelle attività che non sono pubblicazioni oprogetti 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 titolodell’evento, la data in cui inizia, la sede e lo sponsor nel caso in cui siaprevisto.La parte di inserimento dei ricercatori che partecipano all’evento segue lestesse modalità di quella dei progetti di ricerca.Frasi relative alle credenziali.Ci deve essere una sezione per la gestione degli utenti dove l’amministratoredel sistema può creare, modificare ed eliminare le credenziali di accesso.Frasi relative alle statistiche. Per quanto riguarda la sezione dellestatistiche,si devono poter fare delle query specifiche con relativa esportazionesu 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’IFgrezzo, normalizzato e corretto dell’azienda, del singolo ricercatore e di unadeterminata struttura.Inoltre, per un determinato anno di pubblicazione o di attribuzione, si voglionopoter avere a disposizione delle liste con relativi IF (grezzo + normalizzato +corretto) di tutti i ricercatori,di tutte le pubblicazioni o di tutti i progetti diricerca relativi a quell’anno.Per tenere sotto controllo l’inserimento dei dati, si rende necessario sapere seci sono dei ricercatori che non afferiscono a nessuna struttura, o se ci sonodelle pubblicazioni che non hanno segnalato un anno di pubblicazione o diattribuzione. 8
    • 3.2 Glossario dei terminiTermine 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, Ricercatorericerca il quale sono stati Gestionale, stanziati dei soldi Metodologica Rappresenta la partecipazione da parteEvento del ricercatore ad un Congresso, Convegno Ricercatore qualsiasi evento di carattere scientifico3.3 Operazione di analisi3.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
    • 3.4 Progettazione concettualeIn questo capitolo viene trattato lo schema Entity-Relationship, formatosolamente de Entità e Relazioni. Le entità sono gli oggetti principali di undatabase e rappresentano un gruppo omogeneo di informazioni collegatetramite le relazioni.Lo schema E-R viene progettato seguendo una strategia di tipo misto,individuando i concetti principali e realizzando uno schema scheletro checontiene 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’eventoRelazioni: • Partecipazione: Relazione quaternaria tra le entità “Ricercatore”, “Pubblicazione” e “Progetto di ricerca” • Afferenza: Relazione tra le entità “Ricercatore”, “Struttura Anno” 10
    • 3.4.1 Analisi delle entitàRICERCATOREID Ricercatore È il codice univoco che identifica un ricercatore: è candidato ad essere la chiave primaria dell’entità “Ricercatore”.Nome È il nome del ricercatoreCognome È il cognome del ricercatoreData di Nascita Data di nascita del ricercatoreCodice Fiscale Codice Fiscale del ricercatoreResidenza Residenza del ricercatore. Attributo compostoTelefono Telefono aziendale del ricercatore. Attributo multivaloreE-Mail E-Mail del ricercatoreRapporto Esclusivo Attributo Si/No che indica se il ricercatore ha o meno un rapporto esclusivo con l’aziendaInizio Rapporto Esclusivo Data di inizio del rapporto esclusivoFine Rapporto Esclusivo Data di fine del rapporto esclusivoContratto Esclusivo Scaduto Attributo Si/No che indica se il ricercatore ha il contratto esclusivo scadutoRientrato Attributo Si/No che indica se il ricercatore è rientrato in azienda dopo la scadenza di un contratto esclusivoCartella Ricercatore Percorso della cartella sul server nella quale verranno salvati gli allegati personali del ricercatoreModifica Data e ora dell’ultima modifica dei dati del ricercatoreUtente Modifica Utente che ha effettuato l’ultima modificaNote Campo note STRUTTURA ANNOID Struttura È il codice univoco che identifica una struttura in un dato anno: è candidato ad essere la chiave primaria dell’entità “Struttura Anno”. 11
    • Anno Anno in cui il ricercatore afferisce alla strutturaPosizione Posizione che il ricercatore assume nella strutturaRuolo Ruolo assunto nella strutturaTipologia Contratto Tipo di contrattoStruttura Nome della strutturaH-Index Valore dell’indice H-IndexAlta Produttività Attributo Si/No che indica se il ricercatore è entrato nella zona di alta produttivitàValore Contratto Valore del contratto in euroPercentuale Ricerca Percentuale di ricerca fattaNote Campo note PUBBLICAZIONEID 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 pubblicazioneTipo Pubblicazione Indica se si tratta di una pubblicazione indicizzata o menoTitolo Titolo della pubblicazioneTestata Nome della rivistaCodice DOI Codice univoco DOITipo IF Indica il modo in cui viene fatto il calcolo degli IFPMID Pub Med IDRivista Posizione Volume(Capitolo):PagineEditore Editore della rivistaAnno Pubblicazione Anno in cui viene pubblicata la pubblicazione sulla rivistaAnno Attribuzione Anno in cui viene attribuito il valore dell’IF ai ricercatore che sono associati alla rivista 12
    • Numero Progetto di Ricerca Indica l’eventuale progetto di ricerca associatoIF Grezzo Valore dell’Impact Factor GrezzoIF Normalizzato Valore dell’Impact Factor NormalizzatoIF Corretto Valore dell’Impact Factor CorrettoPubblicazione Scientifica Attributo Si/No che indica se si tratta di una pubblicazione scientificaRicaduta Assistenziale Attributo Si/No che indica se la pubblicazione ha una ricaduta assistenzialeDoppia Affiliazione Attributo Si/No che indica se è presente una doppia affiliazioneDocumento Supporto Coerenza Attributo Si/No che indica se si tratta di un documento di supportoAutori ordine alfabetico Attributo Si/No che indica se gli autori della pubblicazione sono stati scritti in ordine alfabeticoAutore Penultima Indica se l’autore principale è in penultima posizioneLinea Indica la linea di ricercaTipologia Tipo di pubblicazione (Report, Capitolo Libro, Linea guida/Protocollo, altro)Note Campo note PROGETTO DI RICERCAID 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 ricercaTipo Ricerca Ricerca corrente, nazionale, internazionale, applications, sperimentazioniLinea Linea di ricercaNumero Numero del progetto di ricercaTitolo Titolo del progetto di ricercaAnno Anno a cui assegnare il progetto di ricerca 13
    • Tipologia Pre-clinica, osservazionale, clinica-sperimentale, gestionale, metodologicaAnno Inizio Anno di inizio del progetto di ricercaAnno Fine Anno di fine del progetto di ricercaLeader Azienda leader del progetto di ricercaPartner Azienda partner del progetto di ricercaBudget Assegnato Budget assegnato in euroBudget Richiesto Budget richiesto in euroBudget Totale Budget totale in euroApprovato Attributo Si/No che indica se il progetto di ricerca è stato approvato dalla direzione scientificaData Approvazione Data in cui è stato approvato il progetto di ricercaNote Campo note EVENTOID 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’eventoTipo Evento Tipo di eventoTitolo Titolo dell’eventoData Data in cui si è svolto l’eventoAnno Anno al quale associare l’eventoSede Sede dell’eventoSponsor SponsorRuolo Ruolo con il quale l’azienda ha partecipato all’eventoNote Campo note 14
    • 3.4.2 Analisi delle relazioni e delle cardinalità PARTECIPAZIONECollega 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 unaPersonale pubblicazionePosizione Posizione nel caso in cui il ricercatore sia un autore collegato a una pubblicazioneResponsabile Indica se il ricercatore è il responsabile, nel caso in cui si tratti di un progetto di ricerca AFFERENZACollega 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 ricercatore3.5 Progettazione logica3.5.1 Schema scheletroAnalizzando il diagramma E-R, si può notare immediatamente che lageneralizzazione “Ricerca” raggruppa tre entità troppo diverse tra loro e quindiconviene 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
    • In seguito si può notare che la relazione ternaria “Partecipazione” può esserescomposta. Si analizza nel dettaglio solamente la relazione tra le entità“Ricercatore” e “Pubblicazione”, ma si può agire allo stesso modo per le coppiedi entità “Ricercatore”-“Progetto di ricerca” e “Ricercatore”-“Evento”.Un singolo ricercatore può partecipare a diverse pubblicazioni e una stessapubblicazione può avere diversi autori; di conseguenza la nuova relazione tral’entità “Ricercatore” e l’entità “Pubblicazione” è del tipo molti a molti. Questarelazione viene chiamata “Partecipazione Pubblicazione”. 16
    • 3.5.2 Attributi multipli e compostiDall’analisi delle entità che è stata fatta in “Progettazione Concettuale”,relativamente all’entità “Ricercatore” sono stati evidenziati un attributocomposto e un attributo multivalore.L’attributo composto “Residenza” relativo appunto alla residenza deldipendente viene suddiviso, come richiesto dalla direzione scientifica, in dueattributi elementari: “Indirizzo” e “Città”.L’attributo “Telefono”, che inizialmente doveva essere di tipo multivalore, vienetrattato come un unico attributo semplice in quanto non è interessedell’azienda avere più di un numero di telefono per ogni ricercatore.3.5.3 Scelta degli identificatori primariID Ricercatore:Poiché su richiesta del committente il codice fiscale e la data dinascita devono essere opzionali, è necessario inserire un identificatore diquesto tipo.ID Pubblicazione: Scegliere un identificatore formato da titolo pubblicazione +rivista + posizione non è possibile in quanto alcuni di questi attributi possonoessere facoltativi, allora bisogna aggiungere un identificatore di questo tipo.ID Ricerca:Come per la pubblicazione, si aggiunge un attributo ID Ricercacome identificatore univocoID Evento: Come per la pubblicazione e per il progetto di ricerca, si aggiungeun attributo ID Evento come identificatore univoco.ID Struttura Anno:Per le stesse condizioni riguardanti pubblicazione, evento eprogetto di ricerca, si sceglie di utilizzare un ID Struttura Anno comeidentificatore univoco per lo storico delle strutture.ID Partecipazione Pubblicazione: Poiché nella maggior parte delle pubblicazionici possono essere degli autori esterni, non è possibile scegliere unidentificatore univoco composto da ID Ricercatore + ID Pubblicazione. Inquesto caso si opta per aggiungere un identificatore ID PartecipazionePubblicazione.ID Partecipazione Ricerca:Come per “Partecipazione Pubblicazione”, si inserisceun identificatore univoco ID Partecipazione RicercaID Partecipazione Evento: Come per “Partecipazione Ricerca” e “PartecipazionePubblicazione”, si inserisce un identificatore univoco ID Partecipazione Evento 17
    • 3.5.4 Schema E-R Finale Ristrutturato 18
    • 3.5.5 Schema relazionale dedotto dallo schema E-R finale 19
    • 4. PROGETTAZIONE DELLAPPLICATIVO4.1 Use Case DiagramLo Use Case Diagram è lo strumento utilizzato per descrivere le funzionalitàofferte dal software; più precisamente è una collezione di scenari cheriguardano lutilizzo del sistema in cui ogni scenario descrive una sequenza dieventi e di attori.La sequenza di eventi descritta da uno Use Case viene iniziata solitamente dauna persona, nel nostro caso l’utente, o da un altro sistema o ancora dalpassare del tempo. Le entità che iniziano la sequenza di eventi sono definiteActors e vengono rappresentate graficamente da un omino stilizzato(stickman). Figura 3 - Use Case Diagram dellintero programma 20
    • Il diagramma sopra fa intuire in modo abbastanza immediato le funzionalità delsoftware:L’utente accede al programma tramite il browser e, per poter utilizzare le variefunzionalità, deve effettuare il login inserendo username e password chevengono 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 databaseper 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
    • 4.2 Activity DiagramUn Activity Diagram viene disegnato per descrivere cosa accade duranteunoperazione o un processo e mette in risalto le attività del programma.Ogni attività è rappresentata da un rettangolo con gli angoli arrotondati e vienecollegata alle altre attività tramite delle frecce direzionali che rappresentano latransizione da unattività alla successiva.Anche lActivity Diagram ha un punto di partenza, rappresentato da un cerchiopieno, 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 dettagliosolamente due processi che rappresentano, con qualche piccola modifica, lamaggior parte dei processi principali messi in atto dal programma.Il primo processo che viene preso in considerazione è la modificadell’anagrafica del ricercatore, che può descrivere in generale anche lemodifiche di pubblicazioni, progetti di ricerca ed eventi, considerandosolamente i diversi attributi delle vari entità.L’utente inserisce nel form di ricerca il nome e/o il cognome del ricercatore dicui vuole modificare l’anagrafica, l’applicazione verifica la connessione con ildatabase e, se è andata a buon fine, interroga il database e prepara la paginaHTML con i risultati della ricerca.Se ci sono più risultati, l’utente clicca sul ricercatore interessato e ilprogramma, dopo aver controllato la connessione, richiede al database tutti idati relativi all’anagrafica e alle strutture collegate al singolo ricercatore.Dopo aver ricevuto i dati, l’applicazione prepara la pagina HTML e la invia albrowser dell’utente, il quale modifica i campi interessati.Uno volta premuto il tasto per salvare, viene verificata la connessione e vienefatto un update dei dati nel database; se tutto è andato a buon finel’applicazione genera un messaggio di avvenuta modifica, altrimenti genera unmessaggio d’errore. 22
    • Figura 5 - Activity Diagram della modifica di unanagrafica di un ricercatore 23
    • Il secondo processo considera la parte relativa all’analisi e all’esportazionedelle 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 paginaHTML con i risultati delle statistiche.L’utente, dopo aver letto la pagina, può scegliere di fare una nuova richiesta opuò decidere di esportare i risultati in un file Excel.Se viene cliccato il pulsante “Esporta”, il programma crea il file Excel e, se nonci sono errori, invia il file al browser dell’utente che cliccherà su “Salva” persalvare il file Excel sul suo computer. Figura 6 - Activity Diagram delle operazioni di analisi e dellesportazione in Excel 24
    • 5. INTERFACCIA5.1 IntroduzioneIn questo capitolo vengono descritte le pagine HTML che formano l’interfacciadell’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 controllo5.2 La struttura dell’interfaccia dellapplicativoOgni pagina è formata da un menu, che si trova in posizione fissa nella partesuperiore, da un tasto “indietro” per tornare alla pagina precedente, che sitrova in basso a sinistra, e dal contenuto che a sua volta è suddiviso in diverseparti; quest’ultimo verrà spiegato nel dettaglio nei successivi capitoli.5.2.1 Le pagine di dettaglioLe pagine di dettaglio sono presenti solo per quanto riguarda le sezioni diAnagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.Per capire meglio com’è strutturata una pagina di dettaglio, può essere d’aiutoosservare uno screenshot: 25
    • Figura 7 - Dettaglio della Pubblicazione1. 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 trova3. Dati della pagina Questa parte si trova solamente nelle pagine di dettaglio e contiene tutti i dati modificabili4. Allegati Anche questa parte si trova solamente nelle pagine di dettaglio e permette di gestire gli allegati5. Collegamenti Nelle sezioni Pubblicazione, Progetti di Ricerca ed Eventi raccoglie i ricercatori collegati. 26
    • 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. pubblicazione5.2.2 Le pagine di ricercaAnche le pagine di ricerca sono presenti solo per quanto riguarda le sezioni diAnagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.E anche in questo caso p per capire meglio com’è strutturata una pagin di paginaricerca, può essere d’aiuto osservare uno screenshot:NB: Nelle pagine di ricerca sono sempre presenti le sezioni 1,2,6 viste inprecedenza 27
    • Figura 10 - Risultati della ricerca delle anagrafiche dei ricercatori Figura 11 - Lista delle pubblicazioni: ErroriA. 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
    • 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 ricercatoreLa “Home page” è una pagina che raccoglie tutte le pubblicazioni, i progetti diricerca e gli eventi a cui ha partecipato il singolo ricercatore. Essa èraggiungibile tramite la sezione di anagrafica come si è visto nel capitoloprecedente. Figura 12 - Home page del singolo ricercatoreÈ una sezione utile se si vuole avere un riassunto di cosa ha fatto undipendente da quando fa parte dell’azienda.Oltre a leggere le varie attività del ricercatore, si possono anche modificare oaggiungerne di nuove. 29
    • 5.2.4 Le StatisticheQuesta è la parte più importante dell’applicazione in quanto, dopo aver inseritomolti dati, si possono fare tutte le statistiche per controllare come sta andandola ricerca nell’azienda. Figura 13 - Lista delle possibili interrogazioni al DatabaseLa pagina principale delle statistiche si presenta come una lista di form diricerca preformattati nei quali l’utente deve inserire i dati necessari e cliccare isul tasto “play”. Figura 14 - Dettaglio di una query 30
    • 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 queryUn’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 diPubblicazione)” Figura 16 - Altro dettaglio di una queryIn questo caso, oltre ad avere la lista dei ricercatori, compare il pulsante“Esporta” per esportare il risultato su un file Excel. 31
    • Figura 17 - Risultato della query5.2.5 Il Pannello di contro controlloIn questa sezione si possono gestire gli utenti che hanno accessoall’applicazione. Figura 18 - Pagina del "Pannello di controllo" 32
    • 6. IMPLEMENTAZIONE6.1 Strutturazione dell’applicazioneRICERCATORI [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
    • 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
    • • 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’applicazione6.2 Le funzioni più significativeIn questo capitolo vengono analizzate le pagine e le funzioni più significative.6.2.1 Esempio di una pagina PHP – anagrafica.phpLo scenario è il seguente:Dalla pagina cerca.php si clicca sul pulsante della “carta di identità” perandare nel dettaglio dell’anagrafica (anagrafica.php).Per prima cosa la pagina anagrafica.phpdeve andare a leggere il valoredell’identificatore dell’anagrafica che potrebbe essere stato inviato tramite ilmetodo POST dal form della pagina precedente, o tramite una variabile disessione negli altri casi (che non andremo a specificare): 35
    • 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 epagina 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
    • $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 UNAIf(($cartella_anagrafica==)||(strlen($cartella_anagrafica)!=30)||($cartella_anagrafica==NULL)){ $cartella_anagrafica=random_string(30);}Si preferisce dare un nome RANDOM di lunghezza fissa (30 caratteri) allacartella dell’anagrafica, invece di rinominare la cartella con un nome standard(ES:NOME+COGNOME), così i file che vengono salvati sul server non possonoessere associati direttamente al ricercatore, a meno che non si abbia accessoal database per vedere il collegamento nome cartella – ricercatore.Dopo aver esportato i dati dal database, si può stampare l’intera pagina deidettagli 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
    • <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>ModificaAnagrafica</button></td> </tr>"; <tr> <td></td> <td><buttontype=submitname=anagrafica value=ELIMINA>EliminaAnagrafica</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 lestrutture per ogni anno collegate al ricercatore: 38
    • //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>TipoContratto</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"]; 39
    • $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=buttononclick="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
    • <buttonclass=immagine type=buttononclick="azioneConferma(anagrafica,index.php?pagina=action&azione=modifica_anagrafica,index.php?pagina=cerca,modificare questa anagrafica?);"><div><imgsrc="immagini/tick.png"><br>MODIFICA<br>ANAGRAFICA</div></button></div>6.2.2 Config.phpQuesto file contiene tutte le informazioni di configurazione; nel caso in cui sisposti l’applicazione su un altro server, basta modificare questo file.Nella prima variabile viene indicata la cartella del webserver dove si trova ilprogramma:$percorso="/ricercatori";In seguito vengono indicate le credenziali di accesso al database:$dbhost = localhost; //nome dellhost$dbuser = ricercatori; //nome utente db$dbpass = ricercatori; //password db$dbname = ricercatori; //nome del dbNell’ultima parte del file si impostano i collegamenti con il foglio di stile e lefunzioni 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.phpL’applicativo raccoglie, in un file chiamato “action.php”, tutte le procedure checontengono le query per scrivere/leggere sul data base. La funzioneinteressata viene richiamata tramite la variabile di tipo GET “azione”.//AZIONI RELATIVA ALL’ANAGRAFICAif ($_GET[azione]=="modifica_anagrafica"){ modifica_anagrafica();} 41
    • elseif ($_GET[azione]=="inserisci_anagrafica"){ inserisci_anagrafica();}elseif ($_GET[azione]=="elimina_anagrafica"){ elimina_anagrafica();}//AZIONI RELATIVE ALLA PUBBLICAZIONEelseif ($_GET[azione]=="modifica_pubblicazione"){ modifica_pubblicazione();}elseif ($_GET[azione]=="inserisci_pubblicazione")...omissis...else{ <div> echo$_GET[azione]." non e unazione 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
    • `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 AGGIUNGOif (($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
    • 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_anagrafica6.2.4 Inc.phpQuesta pagina racchiude tutte le funzioni ausiliarie come le procedure per ilcollegamento al db o le funzioni di conversioni dei dati. Vediamo alcunefunzioni di esempio://CONNESSIONE AL DBfunction 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 DBfunction dbclose() 44
    • { global $dbhost, $dbuser, $dbpass; mysql_close(mysql_connect($dbhost, $dbuser, $dbpass));}//ESECUZIONE QUERYfunction 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/AAAAfunction 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 cssPer rendere l’interfaccia user-friendly ed evitare di ricaricare le pagine php adogni modifica, vengono utilizzate delle funzioni javascript e dei fogli di stile css.6.3.1 script.jsIl file script.js contiene tutte le funzioni javascript utilizzate dal programma.In questo capitolo viene analizzata nel dettaglio solamente la funzione cheaggiunge dinamicamente, lato client,un autore ad una pubblicazione.Lo scenario è il seguente: l’utente clicca in fondo alla pagina del dettagliopubblicazione sul link “aggiungi autore Burlo”; si apre, quindi, una finestrapopup nella quale può ricercare un dipendente da aggiungere come autore. 45
    • Dalla lista dei risultati di ricerca l’utente sceglie il dipendente da aggiungere eclicca sul pulsante “+”Qui di seguito si analizza nel dettaglio la funzione javascript che vienechiamata dopo aver cliccato sul pulsante “+”:functionaggiungiRigaAutoreBurlo (idTbody,num_riga) Burlo{//LEGGO I DATI DEL RICERCATORE DALLA PAGINA POPUPvaridanagrafica = 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
    • //OPENER È LA PAGINA DEL DETTAGLIO PUBBLCAZIONEvartbody = 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 INPUTvartr= 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 AGGIUNGOUNA 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 CONTATOREvarrighe_totali = opener.document.getElementById(righe_tot); 47
    • 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 statocome autore della pubbli pubblicazione.6.3.2 style.cssSenza bisogno di scomodare il linguaggio javascript, si possono creare deitooltip anche utilizzando solamente i fogli di stile css.Di seguito si evidenzia il codice per far apparire un tooltip che fa vedere l’interotitolo di una pubblicazione quando l’utente passa sopra con il mouse sul titoloridotto ai primi 40 caratteri.Nella pagina HTML:<td> <a class=tooltip> <?$titolo_limitato 48
    • 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 :hovera.tooltip:hoverspan.tooltip{ display: block; position: absolute; bottom: 20px; left: 30px; min-width: 200px; border: 1px solid #000000; background-color: #FFFFFF; 49
    • color:#000000; padding:3px; text-align: center; cursor:default;}6.4 Esportazione in PDFIl browser Firefox dà la possibilità di stampare su file PDF l’intera pagina HTML.Approfittando di questa funzione e dell’attributo “@media” del css, possiamodiversificare lo stile perla visualizzazione a schermo (@media screen) e lavisualizzazione per la stampa (@media print).@media print{ html { background-color: #FFFFFF;} div.menu_basso,div.menu_alto,.immagine,div#crea_file,div#crea_filea,a.tooltipspan.tooltip {display:none; }}Nell’immagine si può vedere il risultato dell’esportazione in PDF: 50
    • 6.5 Esportazione in ExcelPer 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’ARRAYwhile ($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","IFnormalizzato","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 EXCELecho "<div id=crea_file><a href=tmp/$nome_file>Esporta</a></div>"; 51
    • 7. CONCLUSIONI7.1 Risultati ottenutiI risultati ottenuti rispettano i vincoli di progetto discussi in fase di analisi.L’applicazione web creata permette la gestione completa dei dati di attività diricerca dei ricercatori dell’IRCCS Burlo Garofolo. Il software è installato sulserver web interno del Burlo ed è utilizzato da Aprile 2011.Per quanto riguarda i dati che erano presenti nel file Excel condiviso utilizzatoin precedenza, sono stati importati nel nuovo database, e, quindi, il file è statodefinitivamente eliminato.7.2 Lavoro svoltoDATABASE: • Tabelle: 9CODICE HTML/PHP: • Pagine: 29 • Funzioni: 38 o inc.php: 20 o action.php: 18CODICE JAVASCRIPT: • Funzioni:31 • Righe:1150CODICE CSS: • Classi e ID: 35 • Righe: 380 52
    • 7.3 Sviluppi FuturiIn questo momento le persone che hanno accesso al programma sono cinque efanno 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 loriguardano personalmente.Un altro sviluppo alquanto interessante, che potrebbe venire implementato abreve,è l’importazione automatica dei nomi delle riviste e dei relativi IF grezziall’interno del programma. 53
    • 8. BIBLIOGRAFIAM. Fermeglia, materiale didattico del corso “Basi di dati”F. Sbroiavacca, materiale didattico del corso “Sistemi Informativi”C. Wenz, “JavaScript in tasca”, Pearson Education, 2007Riferimenti 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