SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
UNIVERSITÀ DEGLI STUDI DI TRIESTE
                           Facoltà di Ingegneria




         Tesi di Laurea Triennale in Ingegneria Informatica



   PROGETTAZIONE E SVILUPPO DI
    UN'APPLICAZIONE WEB PER LA
  GESTIONE DI DATI DI ATTIVITA' DI
  RICERCA: CASO DELL'IRCCS BURLO
             GAROFOLO




RELATORE                                                LAUREANDO
Prof. Maurizio Fermeglia                                 Daniel Zotti




                           Anno Accademico 2010/2011
INDICE

1. INTRODUZIONE ............................................................................... 1
  1.1 Obiettivo della tesi ...........................................................................1
  1.2 Risultato della tesi ...........................................................................1
  1.3 Stato dell'arte .................................................................................2
  1.4 Motivazioni .....................................................................................2
  1.5 Vincoli di progetto ...........................................................................3
  1.6 Riassunto dei prossimi capitoli...........................................................3
2. ANALISI ........................................................................................... 4
  2.1 Raccolta informazioni e definizione dei requisiti ...................................4
3. PROGETTAZIONE DELLA BASE DI DATI ............................................ 6
  3.1 Requisiti con rielaborazione delle frasi più significative .........................6
  3.2 Glossario dei termini ........................................................................9
  3.3 Operazione di analisi ........................................................................9
     3.3.1 Operazioni statistiche: ................................................................9
     3.3.2 Operazioni di controllo: ...............................................................9
  3.4 Progettazione concettuale ............................................................... 10
     3.4.1 Analisi delle entità .................................................................... 11
     3.4.2 Analisi delle relazioni e delle cardinalità ...................................... 15
  3.5 Progettazione logica ....................................................................... 15
     3.5.1 Schema scheletro .................................................................... 15
     3.5.2 Attributi multipli e composti ...................................................... 17
     3.5.3 Scelta degli identificatori primari ................................................ 17
     3.5.4 Schema E-R Finale Ristrutturato ................................................ 18
     3.5.5 Schema relazionale dedotto dallo schema E-R finale ..................... 19
4. PROGETTAZIONE DELL'APPLICATIVO ............................................ 20
  4.1 Use Case Diagram ......................................................................... 20
  4.2 Activity Diagram ............................................................................ 22
5. INTERFACCIA ................................................................................. 25


                                                   i
5.1 Introduzione ................................................................................. 25
  5.2 La struttura dell’interfaccia dell'applicativo ........................................ 25
    5.2.1 Le pagine di dettaglio ............................................................... 25
    5.2.2 Le pagine di ricerca .................................................................. 27
    5.2.3 La “Home page” del singolo ricercatore ....................................... 29
    5.2.4 Le Statistiche .......................................................................... 30
    5.2.5 Il Pannello di controllo .............................................................. 32
6. IMPLEMENTAZIONE ....................................................................... 33
  6.1 Strutturazione dell’applicazione ....................................................... 33
  6.2 Le funzioni più significative ............................................................. 35
    6.2.1 Esempio di una pagina PHP – anagrafica.php ............................... 35
    6.2.2 Config.php .............................................................................. 41
    6.2.3 Action.php .............................................................................. 41
    6.2.4 Inc.php ................................................................................... 44
  6.3 L’utilizzo di Javascript e css ............................................................ 45
    6.3.1 script.js .................................................................................. 45
    6.3.2 style.css ................................................................................. 48
  6.4 Esportazione in PDF ....................................................................... 50
  6.5 Esportazione in Excel ..................................................................... 51
7. CONCLUSIONI ................................................................................ 52
  7.1 Risultati ottenuti ............................................................................ 52
  7.2 Lavoro svolto ................................................................................ 52
  7.3 Sviluppi Futuri ............................................................................... 53
8. BIBLIOGRAFIA ............................................................................... 54




                                                   ii
1. INTRODUZIONE

1.1 Obiettivo della tesi
Si vuole creare un applicativo Web per la gestione dei ricercatori dell’IRCCS
Burlo Garofolo.

Più precisamente, lo scopo è quello di implementare un sistema in cui si
possano raccogliere tutti i ricercatori che lavorano presso l’IRCCS Burlo
Garofolo con i dati relativi alla loro attività di ricerca quali: pubblicazioni,
progetti di ricerca ed eventi a cui partecipano.

Inoltre si vuole avere una sezione in cui si possano utilizzare i dati raccolti sia
per poter vedere come lavorano i vari dipendenti sia per poter pensare a delle
strategie aziendali per quanto riguarda gli investimenti sulla ricerca.


1.2 Risultato della tesi
L’applicazione sviluppata rispetta i vincoli di progetto ed è già installata ed
utilizzata dall’IRCCS “Burlo Garofolo”a partire da Aprile 2011.




                  Figura 1 - Collage di varie immagini dell'applicazione


                                            1
1.3 Stato dell'arte
Sul mercato esistono già dei software per la gestione delle pubblicazioni come
endnote1per Windows o pybligrapher2per Linux, esistono anche moltissimi
programmi per la gestione del personale,ma l’integrazione completa tra i due
non sembra sia stata ancora pensata.

Inoltre, i programmi citati in precedenza non sono applicazioni web: bisogna
quindi installarle sul computer di ogni utente che intende utilizzarle.




                       Figura 2 - Screenshot del programma endnote


1.4 Motivazioni
Al “Burlo Garofolo”, prima di installare questo software, l’intera attività di
ricerca veniva gestita tramite l’uso di un file Excel e di vari file ausiliari, salvati
in una cartella condivisa.

In direzione scientifica non era presente nemmeno un programma per gestire i
ricercatori.




1
Endnote: http://www.endnote.com/
2
Pybligrapher: http://pybliographer.org/


                                           2
1.5 Vincoli di progetto
  o Sistema operativo del Server: Debian5
  o DBMS: MySQL 5.0 già installato sul server interno
  o Server Web: Apache 2.2 già installato sul server interno
  o Browser: MozillaFirefox3.6 e successive
            Si è scelto di utilizzare Firefox in quanto è installabile anche su
            sistemi operativi Linux e Mac presenti in azienda. Il programma
            funziona anche su Opera e Chrome. Per funzionare su Explorer
            sarebbe necessario effettuare qualche ulteriore modifica che non
            viene descritta in questa tesi.
  o Piattaforma di sviluppo: Linux Ubuntu 9.04
  o Linguaggi di programmazione utilizzati: Php5, Javascript
  o Linguaggio di Markup utilizzato: HTML 4
  o Strumento utilizzato per la programmazione: Editor di testo Geany 0.16


1.6 Riassunto dei prossimi capitoli
  •   Nel capitolo 2 verrà descritta la parte di analisi: raccolta delle
      informazioni e definizione dei requisiti.
  •   Nel capitolo 3 verrà descritta la progettazione della base di dati.
  •   Nel capitolo 4 verrà descritta la progettazione dell’applicativo con l’ausilio
      del linguaggio UML.
  •   Nel capitolo 5 verrà descritta l’interfaccia del software.
  •   Nel   capitolo   6   verranno   analizzate   nel   dettaglio   le   funzioni   più
      significative dell’applicazione.
  •   Nel capitolo 7 ci saranno le conclusioni.
  •   Nel capitolo 8 ci sarà la biografia.




                                         3
2. ANALISI

2.1 Raccolta informazioni e definizione dei requisiti
Il sistema deve essere suddiviso in quattro sezioni fondamentali:

   -   Anagrafica
   -   Pubblicazioni
   -   Progetti di ricerca
   -   Eventi, Congressi, Convegni, ecc…

Nella sezione dell’anagrafica vengono salvati i dati personali di ogni singolo
ricercatore e i dati che riguardano il tipo di lavoro da esso svolto.

Inoltre si vuole avere la possibilità di avere una visione “globale” di ogni
singolo ricercatore, di conseguenza ci dev’essere una “home page” nella quale,
in breve, si possano vedere le pubblicazioni, i progetti di ricerca e gli eventi a
cui ha partecipato ciascun dipendente.

Nella sezione delle pubblicazioni vengono salvati             i   dati   relativi   alle
pubblicazioni a cui partecipano i ricercatori dell’azienda.

Nella sezione dei progetti di ricerca vengono salvati i dati dei progetti di
ricerca, con i relativi costi, ai quali partecipano i ricercatori dell’azienda.

Nella sezione degli eventi vengono salvati i dati relativi agli eventi a cui
partecipano i ricercatori dell’azienda.

Per ognuna di queste sezioni fondamentali ci deve essere la possibilità di
allegare dei file (ad esempio il curriculum del ricercatore o l’articolo di una
pubblicazione) e di fare delle ricerche all’interno della sezione.

Si deve poter accedere al sistema tramite username e password personali e si
deve prevedere l’accesso di più utenti contemporaneamente; ci deve essere
quindi un pannello di controllo nel quale si possono creare, modificare ed
eliminare e credenziali di accesso.

Si deve prevedere una sezione di analisi in cui si possano fare delle statistiche
sui dati inseriti. Questa è forse la sezione più importante in quanto, una volta
inserito un congruo numero di dati, sarà possibile fare le varie richieste al
database e avere una visione dell’andamento dell’attività di ricerca
dell’azienda.




                                        4
Come ultima cosa, si deve avere la possibilità di esportare il risultato di certe
query in un file Excel da poter inviare al ministero, o da utilizzare per
scambiarsi i dati con un formato che sia leggibile da tutti.

Inoltre, sarebbe comodo poter avere la possibilità di stampare o di esportare
in un file pdf le pagine contenenti i risultati delle query.




                                       5
3. PROGETTAZIONE DELLA BASE DI DATI

3.1 Requisiti con rielaborazione delle frasi più significative
In questa parte, nella quale si affronta nel dettaglio il capitolo 2.1, si descrive
la struttura del database in cui verranno salvati i dati dell’intero programma.

Nelle righe successive vengono descritte e rielaborate le frasi più significative
dedotte dall’intervista fatta al committente, raggruppate per concetti simili.

Frasi di carattere generale. Si vuole realizzare un database nel quale
memorizzare i dati relativi ai ricercatori che lavorano nell’azienda.

L’accesso deve avvenire tramite username e password personali.

Frasi relative ai ricercatori. Per ciascun ricercatore si vogliono avere il nome
e il cognome, la data di nascita ed il codice fiscale; si vogliono poter inserire
anche i suoi recapiti.

È importante sapere anche se il ricercatore ha un rapporto esclusivo con
l’azienda e, in caso affermativo, bisogna indicare data di inizio del rapporto
esclusivo ed eventuale data di fine rapporto. Si vuole inoltre sapere se il
ricercatore ha il contratto esclusivo scaduto e se è rientrato in azienda dopo un
certo periodo di tempo.

Ogni ricercatore deve avere una cartella personale sul server dove verranno
salvati gli allegati personali; il percorso di questa cartella verrà salvato nel
database.

Oltre a questi dati, si vuole avere uno storico annuale della struttura di
appartenenza, della posizione in azienda, del tipo di contratto e della qualifica.
In più, per ogni anno, si vuole avere visione dell’H-index3 e della percentuale di
ricerca.

Frasi relative alle pubblicazioni. Le pubblicazioni scientifiche sono degli
scritti redatti in modo oggettivo su un argomento scientifico.

È importante sapere se si tratta di una pubblicazione indicizzata o meno; le
pubblicazioni indicizzate sono quelle che sono state pubblicate su una rivista
che è inserita nell'indice mondiale delle pubblicazioni scientifiche. Pubblicare un
articolo su di essa ha un indice di rilevanza proporzionale a quello della rivista.
Questo indice si chiama Impact Factor4e misura il numero medio di citazioni


3
    http://it.wikipedia.org/wiki/Indice_H
4
    http://it.wikipedia.org/wiki/Fattore_di_impatto


                                                 6
ricevute in un particolare anno da articoli pubblicati in una rivista scientifica
(Journal) nei due anni precedenti

Una sezione molto importante, quindi, è quella in cui si inseriscono i valori
relativi agli impact factor grezzo, normalizzato e corretto.

Si vogliono inserire inoltre i dati relativi al tipo (report, capitolo libro, linea
guida/protocollo) e alla linea di progetto a cui è collegata una pubblicazione.
Ovviamente si devono poter inserire le informazioni riguardanti il titolo, la
testata (o rivista), il volume (con fascicolo e pagine), l’editore e il codice DOI
associato; in aggiunta si vogliono inserire anche i dati relativi all’anno di
pubblicazione e di attribuzione.

Si vogliono avere a disposizione dei campi vero/falso per definire se la
pubblicazione ha una ricaduta assistenziale e per segnalare se c’è una doppia
affiliazione, se gli autori sono in ordine alfabetico e se l’autore corrispondente
si trova in penultima posizione.

Per ogni pubblicazioni, ovviamente, si devono poter inserire gli autori che vi
partecipano, che possono essere appartenenti all’azienda oppure esterni. Per
gli esterni si devono poter inserire semplicemente nome e cognome, per gli
interni invece devono poter essere richiamati direttamente dal database e nella
lista degli autori verranno visualizzati nome, cognome, data di nascita e
struttura di appartenenza. Per ogni autore bisogna poter impostare la posizione
in cui si trova, in quanto è molto importante per l’assegnazione del relativo IF.

Frasi relative ai progetti di ricerca. Anche per quanto riguarda i progetti di
ricerca si vuole poter inserire il tipo (corrente, nazionale, internazionale,
applications,    sperimentazioni)       ma  anche la  tipologia   (pre-clinica,
osservazionale, clinica-sperimentale, gestionale, metodologica). Come per le
pubblicazioni, si deve poter inserire anche l’anno a cui viene attribuito il
progetto di ricerca, la linea ed il titolo.

Poiché un progetto di ricerca può avere una durata di diversi anni, si deve
poter inserire l’anno di inizio e l’anno di fine ricerca. Inoltre ogni progetto ha
un’azienda leader che è capo del progetto e delle aziende partner.

Una parte molto importante per una buona analisi dell’organizzazione dei
progetti di ricerca è quella dove si inseriscono il budget assegnato, richiesto e
totale. Ci dev’essere anche la possibilità di segnalare se e quando quel
determinato budget è stato approvato.

Anche in questo caso, per ogni progetto di ricerca bisogna poter inserire i
ricercatori che vi partecipano, con le stesse modalità descritte per le
pubblicazioni, tolto ovviamente il campo contenente l’IF.


                                        7
Frasi relative agli eventi. La gestione degli eventi è molto simile alle due
viste in precedenza. Per eventi si intendono convegni, congressi, gruppi di
lavoro o più in generale tutte quelle attività che non sono pubblicazioni o
progetti di ricerca. Nella sezione degli eventi si deve inserire il tipo di evento
(quelli spiegati in precedenza) e il ruolo con cui l’azienda partecipa
(moderatore, poster, presentazione orale). Inoltre bisogna inserire il titolo
dell’evento, la data in cui inizia, la sede e lo sponsor nel caso in cui sia
previsto.

La parte di inserimento dei ricercatori che partecipano all’evento segue le
stesse modalità di quella dei progetti di ricerca.

Frasi relative alle credenziali.

Ci deve essere una sezione per la gestione degli utenti dove l’amministratore
del sistema può creare, modificare ed eliminare le credenziali di accesso.

Frasi relative alle statistiche. Per quanto riguarda la sezione delle
statistiche,si devono poter fare delle query specifiche con relativa esportazione
su file Excel.

Si vuole poter conoscere il numero di pubblicazioni fatte tra due date distinte;
in più, dato un anno di pubblicazione o di attribuzione, si vogliono calcolare l’IF
grezzo, normalizzato e corretto dell’azienda, del singolo ricercatore e di una
determinata struttura.

Inoltre, per un determinato anno di pubblicazione o di attribuzione, si vogliono
poter avere a disposizione delle liste con relativi IF (grezzo + normalizzato +
corretto) di tutti i ricercatori,di tutte le pubblicazioni o di tutti i progetti di
ricerca relativi a quell’anno.

Per tenere sotto controllo l’inserimento dei dati, si rende necessario sapere se
ci sono dei ricercatori che non afferiscono a nessuna struttura, o se ci sono
delle pubblicazioni che non hanno segnalato un anno di pubblicazione o di
attribuzione.




                                        8
3.2 Glossario dei termini

Termine          Descrizione                   Sinonimi                 Collegamenti

                                                                        Pubblicazione,
                 Rappresenta un                Dipendente,
Ricercatore                                                             Progetto di
                 dipendente dell’azienda       Lavoratore, Anagrafica
                                                                        ricerca, Evento

                 Rappresenta una               Articolo, Report,
Pubblicazione    qualsiasi pubblicazione su    Capitolo di un libro,    Ricercatore
                 una rivista scientifica       Linea Guida/Protocollo
                                               Pre-clinico,
                 Rappresenta un progetto
                                               Osservazionale,
Progetto di      a carattere scientifico per
                                               Clinico-Sperimentale,    Ricercatore
ricerca          il quale sono stati
                                               Gestionale,
                 stanziati dei soldi
                                               Metodologica
                 Rappresenta la
                 partecipazione da parte
Evento           del ricercatore ad un         Congresso, Convegno      Ricercatore
                 qualsiasi evento di
                 carattere scientifico


3.3 Operazione di analisi

3.3.1 Operazioni statistiche:
   -   Dato l’anno di pubblicazione (o di attribuzione), calcolare il relativo IF
       grezzo, normalizzato e corretto dell’azienda;
   -   Dati il nome del ricercatore e l’anno di pubblicazione (o di attribuzione),
       calcolare il relativo IF grezzo, normalizzato e corretto;
   -   Dati il nome della struttura e l’anno di pubblicazione (o di attribuzione),
       calcolare il relativo IF grezzo, normalizzato e corretto;
   -   Dato l’anno di pubblicazione (o di attribuzione), stampare la lista di tutti i
       ricercatori con relativi IF (grezzo, normalizzato e corretto);
   -   Dato l’anno di pubblicazione (o di attribuzione), stampare la lista di tutte
       le pubblicazioni con relativi IF (grezzo, normalizzato e corretto);
   -   Dato un certo anno di pubblicazione (o di attribuzione), stampare la lista
       di tutti i progetti di ricerca con relativi IF (grezzo, normalizzato e
       corretto);


3.3.2 Operazioni di controllo:
   -   Lista di tutti i ricercatori che non afferiscono a nessuna struttura;
   -   Lista di tutte le pubblicazioni che non hanno segnalato un anno di
       pubblicazione o di attribuzione;



                                           9
3.4 Progettazione concettuale
In questo capitolo viene trattato lo schema Entity-Relationship, formato
solamente de Entità e Relazioni. Le entità sono gli oggetti principali di un
database e rappresentano un gruppo omogeneo di informazioni collegate
tramite le relazioni.

Lo schema E-R viene progettato seguendo una strategia di tipo misto,
individuando i concetti principali e realizzando uno schema scheletro che
contiene solamente i concetti più importanti. In seguito lo si può decomporre,
raffinare, espandere ed integrare, fino a raggiungere lo schema finale.




Entità:

  •   Ricercatore: contiene i dettagli relativi all’anagrafica del ricercatore
  •   Struttura Anno: contiene lo storico delle strutture e contratti del
      ricercatore
  •   Pubblicazione: contiene i dettagli della pubblicazione
  •   Progetto di ricerca: raccoglie i dati relativi al progetto di ricerca
  •   Evento: contiene i dettagli relativi all’evento

Relazioni:

  •   Partecipazione: Relazione quaternaria tra le entità “Ricercatore”,
      “Pubblicazione” e “Progetto di ricerca”
  •   Afferenza: Relazione tra le entità “Ricercatore”, “Struttura Anno”




                                     10
3.4.1 Analisi delle entità

RICERCATORE

ID Ricercatore                È il codice univoco che identifica un ricercatore: è
                              candidato ad essere la chiave primaria dell’entità
                              “Ricercatore”.

Nome                          È il nome del ricercatore

Cognome                       È il cognome del ricercatore

Data di Nascita               Data di nascita del ricercatore

Codice Fiscale                Codice Fiscale del ricercatore

Residenza                     Residenza del ricercatore. Attributo composto

Telefono                      Telefono aziendale del ricercatore. Attributo
                              multivalore

E-Mail                        E-Mail del ricercatore

Rapporto Esclusivo            Attributo Si/No che indica se il ricercatore ha o meno
                              un rapporto esclusivo con l’azienda

Inizio Rapporto Esclusivo     Data di inizio del rapporto esclusivo

Fine Rapporto Esclusivo       Data di fine del rapporto esclusivo

Contratto Esclusivo Scaduto   Attributo Si/No che indica se il ricercatore ha il
                              contratto esclusivo scaduto

Rientrato                     Attributo Si/No che indica se il ricercatore è rientrato
                              in azienda dopo la scadenza di un contratto esclusivo

Cartella Ricercatore          Percorso della cartella sul server nella quale
                              verranno salvati gli allegati personali del ricercatore

Modifica                      Data e ora dell’ultima modifica dei dati del
                              ricercatore

Utente Modifica               Utente che ha effettuato l’ultima modifica

Note                          Campo note



                              STRUTTURA ANNO

ID Struttura                  È il codice univoco che identifica una struttura in un
                              dato anno: è candidato ad essere la chiave primaria
                              dell’entità “Struttura Anno”.



                                       11
Anno                     Anno in cui il ricercatore afferisce alla struttura

Posizione                Posizione che il ricercatore assume nella struttura

Ruolo                    Ruolo assunto nella struttura

Tipologia Contratto      Tipo di contratto

Struttura                Nome della struttura

H-Index                  Valore dell’indice H-Index

Alta Produttività        Attributo Si/No che indica se il ricercatore è entrato
                         nella zona di alta produttività

Valore Contratto         Valore del contratto in euro

Percentuale Ricerca      Percentuale di ricerca fatta

Note                     Campo note



                         PUBBLICAZIONE

ID Pubblicazione          È il codice univoco che identifica una pubblicazione:
                          è candidato ad essere la chiave primaria dell’entità
                          “Pubblicazione”.

Cartella Pubblicazione    Percorso della cartella sul server nella quale
                          verranno salvati gli allegati della pubblicazione

Tipo Pubblicazione        Indica se si tratta di una pubblicazione indicizzata o
                          meno

Titolo                    Titolo della pubblicazione

Testata                   Nome della rivista

Codice DOI                Codice univoco DOI

Tipo IF                   Indica il modo in cui viene fatto il calcolo degli IF

PMID                      Pub Med ID

Rivista Posizione         Volume(Capitolo):Pagine

Editore                   Editore della rivista

Anno Pubblicazione        Anno in cui viene pubblicata la pubblicazione sulla
                          rivista

Anno Attribuzione         Anno in cui viene attribuito il valore dell’IF ai
                          ricercatore che sono associati alla rivista



                                  12
Numero Progetto di Ricerca           Indica l’eventuale progetto di ricerca associato

IF Grezzo                            Valore dell’Impact Factor Grezzo

IF Normalizzato                      Valore dell’Impact Factor Normalizzato

IF Corretto                          Valore dell’Impact Factor Corretto

Pubblicazione Scientifica            Attributo Si/No che indica se si tratta di una
                                     pubblicazione scientifica

Ricaduta Assistenziale               Attributo Si/No che indica se la pubblicazione ha
                                     una ricaduta assistenziale

Doppia Affiliazione                  Attributo Si/No che indica se è presente una doppia
                                     affiliazione

Documento Supporto Coerenza          Attributo Si/No che indica se si tratta di un
                                     documento di supporto

Autori ordine alfabetico             Attributo Si/No che indica se gli autori della
                                     pubblicazione sono stati scritti in ordine alfabetico

Autore Penultima                     Indica se l’autore principale è in penultima
                                     posizione

Linea                                Indica la linea di ricerca

Tipologia                            Tipo di pubblicazione (Report, Capitolo Libro, Linea
                                     guida/Protocollo, altro)

Note                                 Campo note



                                 PROGETTO DI RICERCA

ID Ricerca                 È il codice univoco che identifica un progetto di ricerca: è
                           candidato ad essere la chiave primaria dell’entità “Progetto di
                           Ricerca”.

Cartella Ricerca           Percorso della cartella sul server nella quale verranno salvati
                           gli allegati del progetto di ricerca

Tipo Ricerca               Ricerca corrente, nazionale, internazionale, applications,
                           sperimentazioni

Linea                      Linea di ricerca

Numero                     Numero del progetto di ricerca

Titolo                     Titolo del progetto di ricerca

Anno                       Anno a cui assegnare il progetto di ricerca



                                              13
Tipologia                Pre-clinica, osservazionale, clinica-sperimentale, gestionale,
                         metodologica

Anno Inizio              Anno di inizio del progetto di ricerca

Anno Fine                Anno di fine del progetto di ricerca

Leader                   Azienda leader del progetto di ricerca

Partner                  Azienda partner del progetto di ricerca

Budget Assegnato         Budget assegnato in euro

Budget Richiesto         Budget richiesto in euro

Budget Totale            Budget totale in euro

Approvato                Attributo Si/No che indica se il progetto di ricerca è stato
                         approvato dalla direzione scientifica

Data Approvazione        Data in cui è stato approvato il progetto di ricerca

Note                     Campo note



                                         EVENTO

ID Evento           È il codice univoco che identifica un evento: è candidato ad essere
                    la chiave primaria dell’entità “Evento”.

Cartella Evento     Percorso della cartella sul server nella quale verranno salvati gli
                    allegati dell’evento

Tipo Evento         Tipo di evento

Titolo              Titolo dell’evento

Data                Data in cui si è svolto l’evento

Anno                Anno al quale associare l’evento

Sede                Sede dell’evento

Sponsor             Sponsor

Ruolo               Ruolo con il quale l’azienda ha partecipato all’evento

Note                Campo note




                                            14
3.4.2 Analisi delle relazioni e delle cardinalità

                                   PARTECIPAZIONE

Collega l’entità “Ricercatore” alle entità “Pubblicazione”, “Progetti di ricerca” e
“Evento”

Cardinalità    Molti a molti: una pubblicazione (progetto di ricerca, evento) può
               venire assegnato ad uno o più ricercatori differenti, e ad un ricercatore
               possono venire assegnati una o più pubblicazioni (progetti di ricerca,
               eventi) diversi.

Valore IF      Valore dell’IF personale, nel caso in cui il ricercatore partecipi a una
Personale      pubblicazione

Posizione      Posizione nel caso in cui il ricercatore sia un autore collegato a una
               pubblicazione

Responsabile Indica se il ricercatore è il responsabile, nel caso in cui si tratti di un
             progetto di ricerca



                                       AFFERENZA

Collega l’entità “Ricercatore” all’entità “Struttura Anno”

Cardinalità     Uno a molti: un ricercatore afferisce (potenzialmente) ogni anno ad
                una struttura diversa, con diversi tipi di contratto, ruolo, posizione,
                ecc.. e quei dati sono relativi esclusivamente a quel ricercatore




3.5 Progettazione logica

3.5.1 Schema scheletro
Analizzando il diagramma E-R, si può notare immediatamente che la
generalizzazione “Ricerca” raggruppa tre entità troppo diverse tra loro e quindi
conviene sostituirla con tre entità distinte. In questo modo la relazione
“Partecipazione” diventa una relazione ternaria che collega l’entità
“Ricercatore” alle entità “Progetto di Ricerca”, “Pubblicazione” ed “Evento”.




                                            15
In seguito si può notare che la relazione ternaria “Partecipazione” può essere
scomposta. Si analizza nel dettaglio solamente la relazione tra le entità
“Ricercatore” e “Pubblicazione”, ma si può agire allo stesso modo per le coppie
di entità “Ricercatore”-“Progetto di ricerca” e “Ricercatore”-“Evento”.

Un singolo ricercatore può partecipare a diverse pubblicazioni e una stessa
pubblicazione può avere diversi autori; di conseguenza la nuova relazione tra
l’entità “Ricercatore” e l’entità “Pubblicazione” è del tipo molti a molti. Questa
relazione viene chiamata “Partecipazione Pubblicazione”.




                                       16
3.5.2 Attributi multipli e composti
Dall’analisi delle entità che è stata fatta in “Progettazione Concettuale”,
relativamente all’entità “Ricercatore” sono stati evidenziati un attributo
composto e un attributo multivalore.

L’attributo composto “Residenza” relativo appunto alla residenza del
dipendente viene suddiviso, come richiesto dalla direzione scientifica, in due
attributi elementari: “Indirizzo” e “Città”.

L’attributo “Telefono”, che inizialmente doveva essere di tipo multivalore, viene
trattato come un unico attributo semplice in quanto non è interesse
dell’azienda avere più di un numero di telefono per ogni ricercatore.


3.5.3 Scelta degli identificatori primari
ID Ricercatore:Poiché su richiesta del committente il codice fiscale e la data di
nascita devono essere opzionali, è necessario inserire un identificatore di
questo tipo.

ID Pubblicazione: Scegliere un identificatore formato da titolo pubblicazione +
rivista + posizione non è possibile in quanto alcuni di questi attributi possono
essere facoltativi, allora bisogna aggiungere un identificatore di questo tipo.

ID Ricerca:Come per la pubblicazione, si aggiunge un attributo ID Ricerca
come identificatore univoco

ID Evento: Come per la pubblicazione e per il progetto di ricerca, si aggiunge
un attributo ID Evento come identificatore univoco.

ID Struttura Anno:Per le stesse condizioni riguardanti pubblicazione, evento e
progetto di ricerca, si sceglie di utilizzare un ID Struttura Anno come
identificatore univoco per lo storico delle strutture.

ID Partecipazione Pubblicazione: Poiché nella maggior parte delle pubblicazioni
ci possono essere degli autori esterni, non è possibile scegliere un
identificatore univoco composto da ID Ricercatore + ID Pubblicazione. In
questo caso si opta per aggiungere un identificatore ID Partecipazione
Pubblicazione.

ID Partecipazione Ricerca:Come per “Partecipazione Pubblicazione”, si inserisce
un identificatore univoco ID Partecipazione Ricerca

ID Partecipazione Evento: Come per “Partecipazione Ricerca” e “Partecipazione
Pubblicazione”, si inserisce un identificatore univoco ID Partecipazione Evento



                                       17
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

4.1 Use Case Diagram
Lo Use Case Diagram è lo strumento utilizzato per descrivere le funzionalità
offerte dal software; più precisamente è una collezione di scenari che
riguardano l'utilizzo del sistema in cui ogni scenario descrive una sequenza di
eventi e di attori.

La sequenza di eventi descritta da uno Use Case viene iniziata solitamente da
una persona, nel nostro caso l’utente, o da un altro sistema o ancora dal
passare del tempo. Le entità che iniziano la sequenza di eventi sono definite
Actors e vengono rappresentate graficamente da un omino stilizzato
(stickman).




                  Figura 3 - Use Case Diagram dell'intero programma




                                         20
Il diagramma sopra fa intuire in modo abbastanza immediato le funzionalità del
software:

L’utente accede al programma tramite il browser e, per poter utilizzare le varie
funzionalità, deve effettuare il login inserendo username e password che
vengono confrontate con quelle presenti nel database.

Una volta effettuato l’accesso può ricercare le varie anagrafica, pubblicazioni,
progetti di ricerca ed eventi presenti nel database e può modificare,
eliminare o inserire ognuno di questi.

Inoltre per ogni sezione può gestire i file allegati, può interrogare il database
per la parte di analisi e infine può esportare in file Excel i risultati ottenuti.

Per modificare le varie impostazioni può utilizzare il pannello di controllo e,
una volta finito il lavoro, può uscire dal programma tramite il logout.

Il diagramma descrive in modo più dettagliato la Gestione Anagrafiche:




              Figura 4 - Use Case Diagram della gestione delle anagrafiche




                                          21
4.2 Activity Diagram
Un Activity Diagram viene disegnato per descrivere cosa accade durante
un'operazione o un processo e mette in risalto le attività del programma.

Ogni attività è rappresentata da un rettangolo con gli angoli arrotondati e viene
collegata alle altre attività tramite delle frecce direzionali che rappresentano la
transizione da un'attività alla successiva.

Anche l'Activity Diagram ha un punto di partenza, rappresentato da un cerchio
pieno, ed un punto di fine rappresentato da un cerchio pieno con un cerchio più
grande all’esterno.

Per descrivere il funzionamento del software vengono considerati nel dettaglio
solamente due processi che rappresentano, con qualche piccola modifica, la
maggior parte dei processi principali messi in atto dal programma.

Il primo processo che viene preso in considerazione è la modifica
dell’anagrafica del ricercatore, che può descrivere in generale anche le
modifiche di pubblicazioni, progetti di ricerca ed eventi, considerando
solamente i diversi attributi delle vari entità.

L’utente inserisce nel form di ricerca il nome e/o il cognome del ricercatore di
cui vuole modificare l’anagrafica, l’applicazione verifica la connessione con il
database e, se è andata a buon fine, interroga il database e prepara la pagina
HTML con i risultati della ricerca.

Se ci sono più risultati, l’utente clicca sul ricercatore interessato e il
programma, dopo aver controllato la connessione, richiede al database tutti i
dati relativi all’anagrafica e alle strutture collegate al singolo ricercatore.

Dopo aver ricevuto i dati, l’applicazione prepara la pagina HTML e la invia al
browser dell’utente, il quale modifica i campi interessati.

Uno volta premuto il tasto per salvare, viene verificata la connessione e viene
fatto un update dei dati nel database; se tutto è andato a buon fine
l’applicazione genera un messaggio di avvenuta modifica, altrimenti genera un
messaggio d’errore.




                                        22
Figura 5 - Activity Diagram della modifica di un'anagrafica di un ricercatore




                                    23
Il secondo processo considera la parte relativa all’analisi e all’esportazione
delle statistiche in file Excel.

Nella sezione “statistiche” l’utente inserisce i dati per la richiesta al data base,
il programma verifica la connessione, interroga il database e prepara la pagina
HTML con i risultati delle statistiche.

L’utente, dopo aver letto la pagina, può scegliere di fare una nuova richiesta o
può decidere di esportare i risultati in un file Excel.

Se viene cliccato il pulsante “Esporta”, il programma crea il file Excel e, se non
ci sono errori, invia il file al browser dell’utente che cliccherà su “Salva” per
salvare il file Excel sul suo computer.




      Figura 6 - Activity Diagram delle operazioni di analisi e dell'esportazione in Excel




                                              24
5. INTERFACCIA

5.1 Introduzione
In questo capitolo vengono descritte le pagine HTML che formano l’interfaccia
dell’applicazione, più precisamente verranno affrontati:

   -   La struttura dell’interfaccia in generale
   -   Le pagine di dettaglio
   -   Le pagine di ricerca
   -   La home page del ricercatore
   -   Le Statistiche
   -   Il Pannello di controllo



5.2 La struttura dell’interfaccia dell'applicativo
Ogni pagina è formata da un menu, che si trova in posizione fissa nella parte
superiore, da un tasto “indietro” per tornare alla pagina precedente, che si
trova in basso a sinistra, e dal contenuto che a sua volta è suddiviso in diverse
parti; quest’ultimo verrà spiegato nel dettaglio nei successivi capitoli.


5.2.1 Le pagine di dettaglio
Le pagine di dettaglio sono presenti solo per quanto riguarda le sezioni di
Anagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.

Per capire meglio com’è strutturata una pagina di dettaglio, può essere d’aiuto
osservare uno screenshot:




                                         25
Figura 7 - Dettaglio della Pubblicazione

1. Menu
   È presente in tutte le pagine dell’applicazione web, in posizione fissa, e
   permette di raggiungere velocemente qualsiasi sezione del programma.
2. Titolo della pagina
       olo
   Anche questa è sempre presente in tutte le pagine dell’applicazione ed è
   utile per far ricordare all’utente in che pagina si trova
3. Dati della pagina
   Questa parte si trova solamente nelle pagine di dettaglio e contiene tutti
   i dati modificabili
4. Allegati
   Anche questa parte si trova solamente nelle pagine di dettaglio e
   permette di gestire gli allegati
5. Collegamenti
   Nelle sezioni Pubblicazione, Progetti di Ricerca ed Eventi raccoglie i
   ricercatori collegati.



                                      26
In questa zona, nel caso in cui il ricercatore non sia collegato a nessuna
                                        ricercatore
     struttura relativamente all’anno inserito nella Pubblicazione (o Progetto
                                                      Pubbli
     di Ricerca o Evento), viene segnalato un errore in modo ben visibile,
     come mostrato nell’immagine sotto.




                   Figura 8 - Errore negli autori della pubblicazione

     Per quanto riguarda la sezione di Anagrafica, questa zona raccoglie le
     strutture collegate al singolo ricercatore per ogni anno (vedi immagine
     sotto)




               Figura 9 - Dettaglio delle strutture del singolo ricercatore
                                                     el

  6. Pulsante “Indietro”
     Cliccando su questo pulsante si può tornare alla pagine precedente
  7. Pulsanti di Modifica ed Eliminazione
     Sono dei pulsanti essenziali per salvare le modifiche fatte o eliminare
     un’anagrafica, progetto di ricerca, pubblicazione o evento.
                                         pubblicazione


5.2.2 Le pagine di ricerca
Anche le pagine di ricerca sono presenti solo per quanto riguarda le sezioni di
Anagrafica, Pubblicazioni, Progetti di Ricerca ed Eventi.

E anche in questo caso p   per capire meglio com’è strutturata una pagin di
                                                                   pagina
ricerca, può essere d’aiuto osservare uno screenshot:

NB: Nelle pagine di ricerca sono sempre presenti le sezioni 1,2,6 viste in
precedenza

                                           27
Figura 10 - Risultati della ricerca delle anagrafiche dei ricercatori




                    Figura 11 - Lista delle pubblicazioni: Errori

A. Form di ricerca
   Ogni sezione possiede un form di ricerca con campi diversi per
   anagrafica, pubblicazione, progetto di ricerca o evento.
B. Risultati della ricerca
   È una lista in cui vengono mostrati i risultati della ricerca.
   Se mancano dei campi importanti per quanto riguarda le pubblicazioni, i
   progetti di ricerca e gli eventi le relative righe ve
                             eventi,                       vengono segnalate in
   rosso.


                                         28
C. Modifica
     Collegamento alla pagina di dettaglio anagrafica, pubblicazione, prog
                                                                      progetto
     di ricerca o evento.
  D. Collegamento alla “  “Home page” del ricercatore (solo per anagrafica)
                                        ”                         anagrafica).
     Viene descritto nel dettaglio nel capitolo successivo.
  E. Eliminazione diretta del ricercatore (solo per anagrafica)


5.2.3 La “Home page” del singolo ricercatore
La “Home page” è una pagina che raccoglie tutte le pubblicazioni, i progetti di
ricerca e gli eventi a cui ha partecipato il singolo ricercatore. Essa è
raggiungibile tramite la sezione di anagrafica come si è visto nel capitolo
precedente.




                    Figura 12 - Home page del singolo ricercatore

È una sezione utile se si vuole avere un riassunto di cosa ha fatto un
dipendente da quando fa parte dell’azienda.

Oltre a leggere le varie attività del ricercatore, si possono anche modificare o
aggiungerne di nuove.


                                         29
5.2.4 Le Statistiche
Questa è la parte più importante dell’applicazione in quanto, dopo aver inserito
molti dati, si possono fare tutte le statistiche per controllare come sta andando
la ricerca nell’azienda.




                Figura 13 - Lista delle possibili interrogazioni al Database

La pagina principale delle statistiche si presenta come una lista di form di
ricerca preformattati nei quali l’utente deve inserire i dati necessari e cliccare
                    i
sul tasto “play”.




                            Figura 14 - Dettaglio di una query




                                            30
Un esempio di query potrebbe essere quella vista nelle due immagini sopra:
“Calcolare l’Impact Factor di Daniel Zotti per il 2010 (anno di pubbli
                                                                pubblicazione)”

E il risultato sarebbe quello nell’immagine sotto:




                           Figura 15 - Risultato della query

Un’altra richiesta da fare al database potrebbe essere quella di voler vedere la
“Lista dei ricercatori con i relativi Impact Factor per il 2010 (Anno di
Pubblicazione)”




                        Figura 16 - Altro dettaglio di una query

In questo caso, oltre ad avere la lista dei ricercatori, compare il pulsante
“Esporta” per esportare il risultato su un file Excel.




                                          31
Figura 17 - Risultato della query


5.2.5 Il Pannello di contro
                     controllo
In questa sezione      si   possono     gestire    gli   utenti   che   hanno   accesso
all’applicazione.




                     Figura 18 - Pagina del "Pannello di controllo"



                                          32
6. IMPLEMENTAZIONE

6.1 Strutturazione dell’applicazione
RICERCATORI [cartella]

  -   config.php
        o file di configurazione per server web e collegamenti al database
  -   action.php
        o raccoglie le funzioni per leggere/scrivere sul database
  -   inc.php
        o file che raccoglie tutte le funzioni da utilizzare nelle varie pagine
           PHP
  -   allegati.php
        o raccoglie le funzioni e le pagine della sezione degli allegati
  -   elimina_file.php
        o pagina pop up per l’eliminazione di un allegato
  -   rinomina_file.php
        o pagina per la ridenominazione degli allegati
  -   upload.php
        o pagina per fare l’upload di un allegato
  -   anagrafica.php
        o dettaglio dell’anagrafica e delle strutture del singolo ricercatore
  -   cerca.php
        o raccoglie i risultati di ricerca di anagrafica, pubblicazione, progetti
           di ricerca ed evento
  -   footer.php
        o pulsante indietro presente in quasi tutte le pagine php
  -   header.php
        o header con il menu presente in tutte le pagine php
  -   home.php
        o raccoglie le home di pubblicazione, progetto di ricerca e evento
  -   index.php


                                      33
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’applicazione


6.2 Le funzioni più significative
In questo capitolo vengono analizzate le pagine e le funzioni più significative.


6.2.1 Esempio di una pagina PHP – anagrafica.php
Lo scenario è il seguente:

Dalla pagina cerca.php si clicca sul pulsante della “carta di identità” per
andare nel dettaglio dell’anagrafica (anagrafica.php).

Per prima cosa la pagina anagrafica.phpdeve andare a leggere il valore
dell’identificatore dell’anagrafica che potrebbe essere stato inviato tramite il
metodo POST dal form della pagina precedente, o tramite una variabile di
sessione negli altri casi (che non andremo a specificare):

                                        35
if(isset($_POST['idanagrafica']))
{
       $idanagrafica=$_POST['idanagrafica'];
       $_SESSION['idanagrafica']=$_POST['idanagrafica'];
}
else
{
       $idanagrafica=$_SESSION['idanagrafica'];
}
In seguito vengono salvati, se presenti, i criteri di ricerca (dati del form e
pagina selezionata) per ritornare alla pagina precedente:

if(isset($_POST['nome_ricerca'])||isset($_POST['cognome_ricerca']))
{
       $nome_ricerca=$_POST['nome_ricerca'];
       $cognome_ricerca=$_POST['cognome_ricerca'];
       $_SESSION['nome_ricerca']=$_POST['nome_ricerca'];
       $_SESSION['cognome_ricerca']=$_POST['cognome_ricerca'];
}
else
{
       $nome_ricerca=$_SESSION['nome_ricerca'];
       $cognome_ricerca=$_SESSION['cognome_ricerca'];
}
$pagina_ricerca=$_POST['pag'];
Ora si può interrogare il database per avere tutti i dati del singolo ricercatore:

//PREPARAZIONE QUERY
$qsel="SELECT * FROM anagrafica WHERE idanagrafica = $idanagrafica";
//CONNESSIONE DATABASE
$conn=dbconn();    //dbconn si trova in "inc.php"
//INTERROGAZIONE DATABASE
$risultato=dbquery($qsel,$conn); //dbquery si trova in "inc.php"
//ESPORTAZIONE
$riga = mysql_fetch_assoc($risultato);
//SALVATAGGIO DEI DATI NELLE VARIABILI PHP
$nome=$riga["nome"];

                                             36
$cognome=$riga["cognome"];
$data_di_nascita=$riga["natoil"];
//CONVERSIONE DATA DA FORMATO MYSQL A FORMATO GG/MM/AAAA
$natoil=converti_data_da_mysql($data_di_nascita);
...omissis...
//SE NON È STATA CREATA UNA CARTELLA PER IL RICERCATORE, NE CREO UNA
If(($cartella_anagrafica=='')||(strlen($cartella_anagrafica)!=30)||($cartella_anagrafic
a==NULL))
{
        $cartella_anagrafica=random_string(30);
}
Si preferisce dare un nome RANDOM di lunghezza fissa (30 caratteri) alla
cartella dell’anagrafica, invece di rinominare la cartella con un nome standard
(ES:NOME+COGNOME), così i file che vengono salvati sul server non possono
essere associati direttamente al ricercatore, a meno che non si abbia accesso
al database per vedere il collegamento nome cartella – ricercatore.

Dopo aver esportato i dati dal database, si può stampare l’intera pagina dei
dettagli con tutti i dati da modificare:

//TITOLO DELLA PAGINA CON NOME E COGNOME ED EVENTUALE DATA DI NASCITA
<p class=titolo>
        <?$nome $cognome?>
        if ($natoil!=''){echo "($natoil)";}
</p>
//FORM CON I DATI DA MODIFICARE
<form name=anagrafica id=anagrafica method=POST>
<div class=anagrafica_sinistra>
<table align=right>
<input type=hidden name=idanagrafica Value="<?$idanagrafica?>">
<input type=hiddenname=cartella_anagraficavalue="<?$cartella_anagrafica?>">
<tr>
<td align=right>Nome: </td>
<td>
        <input type=text name=nome size=40 value="<?$nome?>">
        </td>
</tr>
<tr>

                                              37
<td align=right>Cognome: </td>
<td>
         <input type=text name=cognome size=40 value="<?$cognome?>">
         </td>
</tr>
...omissis...
         <tr>
         <td></td>
      <td><buttontype=submitname=anagrafica value=MODIFICA>Modifica
Anagrafica</button></td>
         </tr>";
         <tr>
         <td></td>
      <td><buttontype=submitname=anagrafica value=ELIMINA>Elimina
Anagrafica</button></td>
</tr>
</table>
</div>
</form>
In seguito si visualizzano tutti gli allegati dell’anagrafica del ricercatore

<div class=allegati>
<?
$cartella_post=$cartella="documenti/".$cartella_anagrafica."/";
include('allegati.php');
?>
<div>
<button class=immagine type=button onclick="apriFinestraUpload('<?$cartella_post?>');">
<div class=anagrafica_upload_nuovo>
<imgsrc="immagini/upload.png">Nuovo Upload
<div>
</button>
</div>
</div>
Successivamente si esportano dal database e si stampano sulla pagina tutte le
strutture per ogni anno collegate al ricercatore:



                                            38
//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"];


                                                  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=button
onclick="azioneConferma('anagrafica','index.php?pagina=action&azione=elimina_anagrafica
','index.php?pagina=cerca','eliminare questa anagrafica?');">
<div>
<imgsrc="immagini/ics.png"><br>ELIMINA<br>ANAGRAFICA
</div>
</button>




                                                40
<buttonclass=immagine type=button
onclick="azioneConferma('anagrafica','index.php?pagina=action&azione=modifica_anagrafic
a','index.php?pagina=cerca','modificare questa anagrafica?');">
<div>
<imgsrc="immagini/tick.png"><br>MODIFICA<br>ANAGRAFICA
</div>
</button>
</div>


6.2.2 Config.php
Questo file contiene tutte le informazioni di configurazione; nel caso in cui si
sposti l’applicazione su un altro server, basta modificare questo file.

Nella prima variabile viene indicata la cartella del webserver dove si trova il
programma:

$percorso="/ricercatori";
In seguito vengono indicate le credenziali di accesso al database:

$dbhost = 'localhost';      //nome dell'host
$dbuser = 'ricercatori'; //nome utente db
$dbpass = 'ricercatori'; //password db
$dbname = 'ricercatori'; //nome del db
Nell’ultima parte del file si impostano i collegamenti con il foglio di stile e le
funzioni javascript:

<head>
         <link rel=stylesheet type=text/css href="inc/style.css">
         <script type="text/javascript" src="inc/script.js"></script>
</head>


6.2.3 Action.php
L’applicativo raccoglie, in un file chiamato “action.php”, tutte le procedure che
contengono le query per scrivere/leggere sul data base. La funzione
interessata viene richiamata tramite la variabile di tipo GET “azione”.

//AZIONI RELATIVA ALL’ANAGRAFICA
if ($_GET['azione']=="modifica_anagrafica"){
         modifica_anagrafica();
}



                                               41
elseif ($_GET['azione']=="inserisci_anagrafica"){
         inserisci_anagrafica();
}
elseif ($_GET['azione']=="elimina_anagrafica"){
         elimina_anagrafica();
}
//AZIONI RELATIVE ALLA PUBBLICAZIONE
elseif ($_GET['azione']=="modifica_pubblicazione"){
         modifica_pubblicazione();
}
elseif ($_GET['azione']=="inserisci_pubblicazione")
...omissis...
else
{
         <div>
         echo$_GET['azione']." non e' un'azione valida...";
         </div>
}
Nel resto del file vengono definite le funzioni chiamate in precedenza.
Prendiamo come esempio la funzione “modifica anagrafica”:

functionmodifica_anagrafica()
{
//SALVO NELLE VARIABILI I DATI DA MODIFICARE
    $idanagrafica=$_POST['idanagrafica'];
    $nome=$_POST['nome'];
...omissis
    $cartella=$_POST['cartella_anagrafica'];
if (!file_exists("documenti/".$cartella))mkdir("documenti/$cartella", 0777);
//FORMATTAZIONE DEI CAMPI
$nome=strtolower($nome);
$timestamp=date('Y-m-d H:m:s'); //2010-01-02 17:01:13
$codice_fiscale=strtoupper($codice_fiscale);
...omissis...
//PREPARAZIONE DELLA QUERY
$q="UPDATE `anagrafica` SET


                                               42
`nome` = '$nome',
`cognome` = '$cognome',
...omissis...
//CONNESSIONE CON IL DB E ESECUZIONE DELLA QUERY
$conn=dbconn();
dbquery($q,$conn);
<p>Modifica dell’anagrafica effettuata con successo</p>
//MODIFICA DEI DATI DI STRUTTURA ANNO
$righe_tot=$_POST['righe_tot'];
if (isset($_POST['righe_tot']))
{
for ($cont=0;$cont<=$righe_tot;$cont++){
$nuovo_aggiunto=$_POST["nuovo_$cont"];
$anno_aggiunto=$_POST["anno_$cont"];
$struttura_aggiunto=$_POST["struttura_$cont"];
...omissis...
//SE CI SONO DEI CAMPI NUOVI, LI AGGIUNGO
if (($nuovo_aggiunto=='nuovo')&&(($anno_aggiunto!='')||($ruolo_aggiunto!='') ||
($struttura_aggiunto!='') || ($note_aggiunto!='')))
{
//PREPARAZIONE QUERY
$q="insertinto anagrafica2 ( idanagrafica, anno, posizione, ruolo,
..., note ) values ( ";
$q.="'$idanagrafica' ";
$q.=",'$anno_aggiunto' ";
...omissis...
$q.=")";
//CONNESSIONE DB E ESPORTAZIONE QUERY
$conn=dbconn();
dbquery($q,$conn);
}
else
{
       $idanagrafica2=$_POST["idanagrafica2_$cont"];
$anno=$_POST["anno_$cont"];



                                             43
if ( ($anno=='')&&($ruolo=='')&&($struttura=='')&&($hindex=='')&&($note=='') &&
($idanagrafica2!='') )
{
//SE I CAMPI SONO VUOTI, LI ELIMINO
$q="DELETE FROM `anagrafica2` WHERE `anagrafica2`.`idanagrafica2` = '$idanagrafica2'";
$conn=dbconn();
dbquery($q,$conn);
}
else
{
//SE SONO STATI MODIFICATI DEI CAMPI, LI MODIFICO
$q="UPDATE `anagrafica2` SET `anno`='$anno',`posizione`=...
...omissis...
$q.="`note` = '$note' WHERE `anagrafica2`.`idanagrafica2`='$idanagrafica2'";
$conn=dbconn();
dbquery($q,$conn);
}
dbclose();
}//modifica_anagrafica


6.2.4 Inc.php
Questa pagina racchiude tutte le funzioni ausiliarie come le procedure per il
collegamento al db o le funzioni di conversioni dei dati. Vediamo alcune
funzioni di esempio:

//CONNESSIONE AL DB
function dbconn()
{
       global $dbhost,$dbuser,$dbpass,$dbname;
       mysql_connect($dbhost, $dbuser, $dbpass)
       or die('Errore nella connessione con MySql');
       mysql_select_db($dbname)
       or die('Errore nella connessione al database');
}
//CHIUSURA CONNESSIONE AL DB
function dbclose()



                                          44
{
      global $dbhost, $dbuser, $dbpass;
      mysql_close(mysql_connect($dbhost, $dbuser, $dbpass));
}
//ESECUZIONE QUERY
function dbquery($q,$conn)
{
      $rs=mysql_query("$q") or die("Query non valida:" .mysql_error());
      return $rs;
}
//CONVERSIONE DATA DA FORMATO MYSQL A FORMATO GG/MM/AAAA
function converti_data_da_mysql($date)
{
      if ($date=="0000-00-00")
      {
             $newdate='';
      }
      else
      {
             list($anno, $mese, $giorno) = explode("-","$date");
             $newdate="".$giorno."/".$mese."/".$anno."";
      }
      return $newdate;}


6.3 L’utilizzo di Javascript e css
Per rendere l’interfaccia user-friendly ed evitare di ricaricare le pagine php ad
ogni modifica, vengono utilizzate delle funzioni javascript e dei fogli di stile css.


6.3.1 script.js
Il file script.js contiene tutte le funzioni javascript utilizzate dal programma.
In questo capitolo viene analizzata nel dettaglio solamente la funzione che
aggiunge dinamicamente, lato client,un autore ad una pubblicazione.

Lo scenario è il seguente: l’utente clicca in fondo alla pagina del dettaglio
pubblicazione sul link “aggiungi autore Burlo”; si apre, quindi, una finestra
popup nella quale può ricercare un dipendente da aggiungere come autore.


                                          45
Dalla lista dei risultati di ricerca l’utente sceglie il dipendente da aggiungere e
clicca sul pulsante “+”




Qui di seguito si analizza nel dettaglio la funzione javascript che viene
chiamata dopo aver cliccato sul pulsante “+”:

functionaggiungiRigaAutoreBurlo (idTbody,num_riga)
                          Burlo
{
//LEGGO I DATI DEL RICERCATORE DALLA PAGINA POPUP
varidanagrafica = document.getElementById('idanagrafica'+e).value;
                  document.getElementById('idanagrafica'+e).value;
var nome = document.getElementById('nome'+e).value;
var cognome = document.getElementById('cognome'+e).value;
varnatoil = document.getElementById('natoil'+e).value;
if(! document.getElementById&&document.createElement) { return; }


                                          46
//OPENER È LA PAGINA DEL DETTAGLIO PUBBLCAZIONE
vartbody = opener.document.getElementById(idTbody);
varriga_inizialeVal = opener.document.getElementById('riga_iniziale').value;
varriga_provvisoria = opener.document.getElementById('righe_provvisorie');
varriga_provvisoriaVal = opener.document.getElementById('righe_provvisorie').value;
var riga = Number(riga_inizialeVal)+Number(riga_provvisoriaVal);
//CREAO LA NUOVA RIGA DELLA TABELLA CON I CAMPI DI INPUT
vartr= opener.document.createElement("tr");
vartdNome = opener.document.createElement("td");
vartdCognome = opener.document.createElement("td");
  ...omissis...
varinputNuovo = opener.document.createElement("input");
varinputNome = opener.document.createElement("input");
...omissis...
  inputNuovo.name="nuovo_"+riga;
inputNuovo.type="hidden";
inputNuovo.value="nuovo";
  ...omissis..
tdNome.appendChild(inputNome);
tdNome.appendChild(inputNuovo);
tdCognome.appendChild(inputCognome);
tdVuoto.appendChild(testoVuoto);
  ...omissis...
tr.id="row"+riga;
tr.appendChild(tdNome);
  ...omissis...
tbody.appendChild(tr);
var intestazione = opener.document.getElementById('intestazione');
if (intestazione.style.visibility=='hidden')
//L’INTESTAZIONE DELLA TABELLA È PRESENTE SOLO SE È PRESENTE UN AUTORE. SE AGGIUNGO
UNA RIGA DEVO RENDERE VISIBILE L’INTESTAZIONE
{intestazione.style.visibility='visible';}
  else { intestazione.style.visibility='visible'; }
  //LEGGO IL VALORE DELLA RIGA CORRENTE E NE AGGIUNGO UNA AL CONTATORE
varrighe_totali = opener.document.getElementById('righe_tot');



                                             47
varrighe_totaliVal = opener.document.getElementById('righe_tot').value;
                     opener.document.getElementById('righe_tot').value;
righe_totali.setAttribute('value',riga);
    calcolo=Number(riga_provvisoriaVal)+Number(1);
riga_provvisoria.setAttribute('value',calcolo);
    //RENDO INVISIBILE LA SCRITTA “Nessun ricercatore del Burlo selezionato
                        A         “Nessun                       selezionato”
var vuoto = opener.document.getElementById('vuoto');
                   document.getElementById('vuoto');
vuoto.setAttribute('style','display:none');
}
E nell’immagine successiva il risultato finale: il ricercatore è stat aggiunto
                                                                 stato
come autore della pubbli
                  pubblicazione.




6.3.2 style.css
Senza bisogno di scomodare il linguaggio javascript, si possono creare dei
tooltip anche utilizzando solamente i fogli di stile css.




Di seguito si evidenzia il codice per far apparire un tooltip che fa vedere l’intero
titolo di una pubblicazione quando l’utente passa sopra con il mouse sul titolo
ridotto ai primi 40 caratteri.

Nella pagina HTML:

<td>
        <a class=tooltip>
              <?$titolo_limitato



                                            48
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;


                                              49
color:#000000;
           padding:3px;
           text-align: center;
           cursor:default;
}


6.4 Esportazione in PDF
Il browser Firefox dà la possibilità di stampare su file PDF l’intera pagina HTML.
Approfittando di questa funzione e dell’attributo “@media” del css, possiamo
diversificare lo stile perla visualizzazione a schermo (@media screen) e la
visualizzazione per la stampa (@media print).

@media print{
    html
    {
        background-color: #FFFFFF;
}
  div.menu_basso,div.menu_alto,.immagine,div#crea_file,div#crea_file
a,a.tooltipspan.tooltip
    {
display:none;
    }
}
Nell’immagine si può vedere il risultato dell’esportazione in PDF:




                                          50
6.5 Esportazione in Excel
Per esportare un risultato in Excel è stata usata la seguente procedura:

//INIZIALIZZO L’ARRAY DOVE SALVARE I RECORD
$esportazione=array();
$i=0; //inizializzo il contatore dei record
//ESPORTO OGNI RIGA DEL RISULTATO DELLA QUERY NELL’ARRAY
while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
      $idanagrafica=$riga['idanagrafica'];
      ...omissis...
      $esportazione[$i]=array("$idanagrafica","$nome","$cognome","$struttura",da_punto_
a_virgola($ifgrezzo),da_punto_a_virgola($ifnormalizzato),da_punto_a_virgola($ifcorretto
));
      $i++;
}
//CREO IL FILE EXCEL PARTENDO DALL’ARRAY
$nome_file="statistiche.xls";
if (($file = fopen("tmp/$nome_file", "w")) !== FALSE)
{
      $esportazione_header=array("id","NOME","COGNOME","STRUTTURA","IFgrezzo","IFnormal
izzato","IF corretto");
      fputcsv($file, $esportazione_header,chr(9),'"');        for ($k=1;$k<=$i;$k++)
      {
              //NB: chr(9)=TABULAZIONE
              fputcsv($file, $esportazione[$k],chr(9),'"');
      }
}
fclose($file);
//CREO IL PULSANTE PER SALVARE IL FILE EXCEL
echo "<div id=crea_file><a href=tmp/$nome_file>Esporta</a></div>";




                                           51
7. CONCLUSIONI

7.1 Risultati ottenuti
I risultati ottenuti rispettano i vincoli di progetto discussi in fase di analisi.
L’applicazione web creata permette la gestione completa dei dati di attività di
ricerca dei ricercatori dell’IRCCS Burlo Garofolo. Il software è installato sul
server web interno del Burlo ed è utilizzato da Aprile 2011.

Per quanto riguarda i dati che erano presenti nel file Excel condiviso utilizzato
in precedenza, sono stati importati nel nuovo database, e, quindi, il file è stato
definitivamente eliminato.


7.2 Lavoro svolto
DATABASE:

   •   Tabelle: 9

CODICE HTML/PHP:

   •   Pagine: 29
   •   Funzioni: 38
         o inc.php: 20
         o action.php: 18

CODICE JAVASCRIPT:

   •   Funzioni:31
   •   Righe:1150

CODICE CSS:

   •   Classi e ID: 35
   •   Righe: 380




                                       52
7.3 Sviluppi Futuri
In questo momento le persone che hanno accesso al programma sono cinque e
fanno tutte parte della direzione scientifica. Per un prossimo futuro si può
pensare di dare l’accesso al programma ad ogni singolo ricercatore in modalità
“ospite”, dandogli la possibilità di leggere esclusivamente i dati che lo
riguardano personalmente.

Un altro sviluppo alquanto interessante, che potrebbe venire implementato a
breve,è l’importazione automatica dei nomi delle riviste e dei relativi IF grezzi
all’interno del programma.




                                       53
8. BIBLIOGRAFIA

M. Fermeglia, materiale didattico del corso “Basi di dati”

F. Sbroiavacca, materiale didattico del corso “Sistemi Informativi”

C. Wenz, “JavaScript in tasca”, Pearson Education, 2007

Riferimenti Web:

      http://database.html.it/guide/leggi/87/guida-mysql/

      http://dev.mysql.com/doc/refman/5.0/en/index.html

      http://php.html.it/guide/leggi/77/guida-php-e-mysql-pratica/

      http://php.html.it/guide/leggi/99/guida-php-di-base/

      http://php.html.it/guide/leggi/92/guida-php-su-linux/

      http://php.html.it/guide/leggi/101/guida-php-pratica/

      http://php.net/

      http://javascript.html.it/guide/leggi/25/guida-javascript-di-base/




                                       54

Mais conteúdo relacionado

Mais procurados

Angular 5 presentation for beginners
Angular 5 presentation for beginnersAngular 5 presentation for beginners
Angular 5 presentation for beginnersImran Qasim
 
JAVA PPT by NAVEEN TOKAS
JAVA PPT by NAVEEN TOKASJAVA PPT by NAVEEN TOKAS
JAVA PPT by NAVEEN TOKASNAVEEN TOKAS
 
100 JAVA Programs-1.pdf
100 JAVA Programs-1.pdf100 JAVA Programs-1.pdf
100 JAVA Programs-1.pdfAbhay
 
Flutter vs React Native | Edureka
Flutter vs React Native | EdurekaFlutter vs React Native | Edureka
Flutter vs React Native | EdurekaEdureka!
 
Introduction to React Native - Nader Dabit
Introduction to React Native - Nader DabitIntroduction to React Native - Nader Dabit
Introduction to React Native - Nader DabitAmazon Web Services
 
What is Material UI?
What is Material UI?What is Material UI?
What is Material UI?Flatlogic
 
AngularJS – What, Why, Advantages and Disadvantages
AngularJS – What, Why, Advantages and DisadvantagesAngularJS – What, Why, Advantages and Disadvantages
AngularJS – What, Why, Advantages and DisadvantagesWeblineIndia
 
Building beautiful apps using google flutter
Building beautiful apps using google flutterBuilding beautiful apps using google flutter
Building beautiful apps using google flutterAhmed Abu Eldahab
 
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Edureka!
 
Java Presentation
Java PresentationJava Presentation
Java Presentationaitrichtech
 
Google flutter and why does it matter
Google flutter and why does it matterGoogle flutter and why does it matter
Google flutter and why does it matterAhmed Abu Eldahab
 
Angular components
Angular componentsAngular components
Angular componentsSultan Ahmed
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?Sergi Martínez
 

Mais procurados (20)

Angular 5 presentation for beginners
Angular 5 presentation for beginnersAngular 5 presentation for beginners
Angular 5 presentation for beginners
 
flutter.school #HelloWorld
flutter.school #HelloWorldflutter.school #HelloWorld
flutter.school #HelloWorld
 
Java
JavaJava
Java
 
JAVA PPT by NAVEEN TOKAS
JAVA PPT by NAVEEN TOKASJAVA PPT by NAVEEN TOKAS
JAVA PPT by NAVEEN TOKAS
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
100 JAVA Programs-1.pdf
100 JAVA Programs-1.pdf100 JAVA Programs-1.pdf
100 JAVA Programs-1.pdf
 
Flutter vs React Native | Edureka
Flutter vs React Native | EdurekaFlutter vs React Native | Edureka
Flutter vs React Native | Edureka
 
Flutter
FlutterFlutter
Flutter
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Flutter Intro
Flutter IntroFlutter Intro
Flutter Intro
 
Introduction to React Native - Nader Dabit
Introduction to React Native - Nader DabitIntroduction to React Native - Nader Dabit
Introduction to React Native - Nader Dabit
 
What is Material UI?
What is Material UI?What is Material UI?
What is Material UI?
 
AngularJS – What, Why, Advantages and Disadvantages
AngularJS – What, Why, Advantages and DisadvantagesAngularJS – What, Why, Advantages and Disadvantages
AngularJS – What, Why, Advantages and Disadvantages
 
Building beautiful apps using google flutter
Building beautiful apps using google flutterBuilding beautiful apps using google flutter
Building beautiful apps using google flutter
 
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
 
Java Presentation
Java PresentationJava Presentation
Java Presentation
 
Oop in kotlin
Oop in kotlinOop in kotlin
Oop in kotlin
 
Google flutter and why does it matter
Google flutter and why does it matterGoogle flutter and why does it matter
Google flutter and why does it matter
 
Angular components
Angular componentsAngular components
Angular components
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?
 

Destaque

Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...
Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...
Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...Raffaele Bernardi
 
Gestione commesse (pm) NAV 2016
Gestione commesse (pm) NAV 2016Gestione commesse (pm) NAV 2016
Gestione commesse (pm) NAV 2016Roberto Stefanetti
 
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...CATTID "Sapienza"
 
Tesi Common Rail-Carlo De Pellegrin
Tesi Common Rail-Carlo De PellegrinTesi Common Rail-Carlo De Pellegrin
Tesi Common Rail-Carlo De PellegrinCarlo De Pellegrin
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Boymix81
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Francesco Komauli
 
Tesi Specialistica - Weka SMP
Tesi Specialistica - Weka SMPTesi Specialistica - Weka SMP
Tesi Specialistica - Weka SMPFabio Pustetto
 
Tesi laurea triennale - Fertilia la città incompiuta
Tesi laurea triennale - Fertilia la città incompiutaTesi laurea triennale - Fertilia la città incompiuta
Tesi laurea triennale - Fertilia la città incompiutaRiccardo Gnani
 
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...Alberto Scotto
 
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...Davide Trebbi
 
Tesi di laurea di Josip Mihovilović
Tesi di laurea di Josip MihovilovićTesi di laurea di Josip Mihovilović
Tesi di laurea di Josip MihovilovićJosip Mihovilovic
 
Mini tesi "lo stile costa crociere"
Mini tesi "lo stile costa crociere" Mini tesi "lo stile costa crociere"
Mini tesi "lo stile costa crociere" filippo rossi
 
Tesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaTesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaSergio Taddia
 
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)Mario Valiante
 
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - TesiREALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesibasix86
 

Destaque (20)

Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...
Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...
Progetto e sviluppo di un applicativo basato su Google Earth per la visualizz...
 
Gestione commesse (pm) NAV 2016
Gestione commesse (pm) NAV 2016Gestione commesse (pm) NAV 2016
Gestione commesse (pm) NAV 2016
 
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...
Progettazione e sviluppo di un'applicazione mobile per la qualità dell'aria a...
 
Tesi Common Rail-Carlo De Pellegrin
Tesi Common Rail-Carlo De PellegrinTesi Common Rail-Carlo De Pellegrin
Tesi Common Rail-Carlo De Pellegrin
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
 
Tesi Specialistica - Weka SMP
Tesi Specialistica - Weka SMPTesi Specialistica - Weka SMP
Tesi Specialistica - Weka SMP
 
Tesi laurea triennale - Fertilia la città incompiuta
Tesi laurea triennale - Fertilia la città incompiutaTesi laurea triennale - Fertilia la città incompiuta
Tesi laurea triennale - Fertilia la città incompiuta
 
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
 
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...
Tesi di laurea - L'industria culturale in Italia - il caffé letterario - Davi...
 
Vertical Branding nella Moda
Vertical  Branding nella ModaVertical  Branding nella Moda
Vertical Branding nella Moda
 
Tesi di laurea di Josip Mihovilović
Tesi di laurea di Josip MihovilovićTesi di laurea di Josip Mihovilović
Tesi di laurea di Josip Mihovilović
 
A.Dionisi Thesis
A.Dionisi ThesisA.Dionisi Thesis
A.Dionisi Thesis
 
Mini tesi "lo stile costa crociere"
Mini tesi "lo stile costa crociere" Mini tesi "lo stile costa crociere"
Mini tesi "lo stile costa crociere"
 
Ringraziamenti
RingraziamentiRingraziamenti
Ringraziamenti
 
Tesi
TesiTesi
Tesi
 
Tesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaTesi Laurea Sergio Taddia
Tesi Laurea Sergio Taddia
 
Tesi peiretti
Tesi peirettiTesi peiretti
Tesi peiretti
 
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)
Tesi di laurea triennale: Rilevamento geologico dell'area di Tagliacozzo (AQ)
 
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - TesiREALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
REALIZZAZIONE HARDWARE E SOFTWARE DI UN ROBOT MOBILE DI SERVIZIO - Tesi
 

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

Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsLorenzo Stacchio
 
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Raffaele Bernardi
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Luca Bressan
 
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...ciakana
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Francesco Cucari
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...diegohusu
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...ozacchig
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Matteo Miotto
 
Documentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloDocumentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloMarco Vaiano
 
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointDenis Tomada
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Filippo Muscolino
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...thediabloz
 
Un sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNUn sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNAlessandro Segatto
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Davide Ciambelli
 

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

Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Tesi Tamiazzo09
Tesi Tamiazzo09Tesi Tamiazzo09
Tesi Tamiazzo09
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
 
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
 
TesiEtta
TesiEttaTesiEtta
TesiEtta
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
 
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...
 
Documentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloDocumentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnalo
 
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...
 
Un sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNUn sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMN
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
 

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

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