XAL - Realizzazione di un sito web in Joomla Andrea Poli vr056636 Dipartimento di Informatica Facoltà di Scienze matematiche, fisiche e naturali Università degli Studi di Verona xx Luglio 2009 Presentazione tesi laurea triennale
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Introduzione Introduzione Le aziende Bint S.r.l. e ComputerVAR ITT hanno realizzato il framework XAL per consentire in modo rapido ed efficace di sviluppare applicazioni web e non per la gestione di processi e, come sviluppo futuro, il monitoraggio di sistemi. È nata quindi la necessita di pubblicizzare tale framework presso il mondo degli sviluppatori in modo da incentivarne l uso. A tal proposito poi è sorta anche la necessità di realizzare un tool per rappresentare graficamente l automa temporale alla base di un applicazione XAL in modo da facilitare ulteriormente la fase di progettazione e sviluppo dell applicazione.
Obiettivi del progetto Obiettivi del progetto Realizzare un sito web per: presentare il framework XAL sviluppato da Bint S.r.l. e ComputerVAR ITT gestire gli stage proposti dalle aziende Bint S.r.l. e ComputerVAR ITT mettere a disposizione degli sviluppatori il codice dell interprete XAL e eventuali tool Realizzare un tool per rappresentare graficamente un automa temporale avente le seguenti caratteristiche: possibilità di generare il documento XML in conformità con l xml schema relativo ad un automa XAL validazione dell automa e delle sue proprietà
XAL - Una breve introduzione XAL - Una breve introduzione XAL XAL (acronimo di XML Automata Language) è un paradigma di programmazione con relativo framework per definire applicazioni orientate al web, e non, sotto forma di automi temporali. Esso consente di definire un applicazione come un insieme di stati, legati assieme da transizioni che scattano quando si verificano determinati eventi. XAL consente di specificare esplicitamente dei vincoli temporali che vanno rispettati, affinchè determinate transizioni possano effettivamente avvenire.
XAL - Una breve introduzione XAL - Una breve introduzione A ciascuno stato sono associate due funzioni: una di azione e una di metrica. Queste funzioni possono essere vere e proprie funzioni come intese al PHP, metodi di classi o chiamate a web service remoti.
Progettazione Progettazione Struttura del sito web Componente SpazioStage XAL Designer Tool
Progettazione Struttura del sito web Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Progettazione Struttura del sito web Struttura del sito web Il sito web è organizzato nel seguente modo: back-end: front-end: interfaccia per la gestione degli stage tutorial pubblicazioni paper tesi downloads stage contatti FAQ chi siamo
Progettazione Componente SpazioStage Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Progettazione Componente SpazioStage Componente SpazioStage Il componente SpazioStage è nato dalla necessità di poter gestire gli stage proposti dalle aziende Bint S.r.l. e ComputerVAR ITT. Requisiti Schema ER Schema UML
Progettazione Componente SpazioStage Requisiti fornire un interfaccia efficace per la gestione degli stage pre e post laurea offerti integrare nel motore di ricerca di Joomla la ricerca degli stage fornire all utente la possibilità di richiedere in modo rapido informazioni aggiuntive riguardanti uno stage
Progettazione Componente SpazioStage Schema ER Ideale
Progettazione Componente SpazioStage Schema ER adattato a Joomla la chiave primaria di ogni entità è stata sostituita da un id autoincrementante. è stato creato un indice unique comprendente i campi che costituivano la chiave primaria
Progettazione Componente SpazioStage Schema UML Beans & JTable
Progettazione Componente SpazioStage Schema UML Controller
Progettazione Componente SpazioStage Schema UML Model
Progettazione Componente SpazioStage Schema UML View
Progettazione XAL Designer Tool Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Progettazione XAL Designer Tool XAL Designer Tool XAL Designer Tool consente di rappresentare graficamente un automa temporale alla base di un applicazione XAL e di ottenere da tale rappresentazione il corrispondente codice XML. Requisiti Schema UML
Progettazione XAL Designer Tool Requisiti rappresentare graficamente un automa temporale alla base di un applicazione XAL in particolare poter specificare: le azioni e le metriche gli stati e le relative proprietà associate (azione, metrica, stato finale, stato iniziale) le transizioni e le relative proprietà associate (simbolo, vincoli temporali) ottenere una rappresentazione in formato XML che rispetti lo schema XML di un automa XAL.
Progettazione XAL Designer Tool Requisiti Automa XML Schema Di seguito vedremo la descrizione in XML di un semplice automa XAL. Per l xml schema completo invitiamo a consultare http://www.computervaritt.it/xal/xal/xml/automa.xsd 1 <Automa Id="SimpleAutomaton" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" 2 xsi:nonamespaceschemalocation="automa.xsd"> 3 <GlobalState> 4 <Variable Name="gVar" Value="" Type="string"/> 5 </GlobalState> 6 <Clocks> 7 <Variable Name="cVar"/> 8 </Clocks> 9 <ActionPool> 10 <Action Id="metric" Type="function"> 11 <System Name="f2" Path="../index.php"/> 12 <Input> 13 <Parameter Name="gVar"/> 14 </Input> 15 <Enumeration Type="string">
Progettazione XAL Designer Tool Requisiti Automa XML Schema 1 <Const Value="M1" Desc=""/> 2 </Enumeration> 3 </Action> 4 <Action Id="action" Type="function"> 5 <System Name="f1" Path="../index.php"/> 6 <Input> 7 <Parameter Name="gVar"/> 8 </Input> 9 </Action> 10 </ActionPool> 11 <States> 12 <State Interactive="false" Id="S2" IdAction="action" IdMetric="metric"/> 13 <State Interactive="false" Id="S1" IdAction="action" IdMetric="metric"/> 14 </States> 15 <Transitions> 16 <Transition IdInputState="S1" IdOutputState="S2" MetricValue="M1"> 17 <ClockConstraint ClockExp="cVar <= 1min"/> 18 </Transition> 19 </Transitions> 20 <InitialState IdState="S1"/> 21 <FinalStates> 22 <FinalState IdState="S2"/> 23 </FinalStates> 24 </Automa>
Progettazione XAL Designer Tool Requisiti Automa XML Schema I Descrizione degli elementi principali: GlobalState: definisce le variabili globali dell applicazione XAL. Clocks: definisce le variabili di tempo (clock variables) utilizzate per esprimere i vincoli temporali ActionPool: definisce le azioni e metriche che in seguito vengono associate agli stati. In particolare un azione/metrica può corrispondere alla chiamata di una funzione, un metodo o un webservice. States: definisce gli stati che costituiscono l automa temporale. Per ogni stato vengono specificati: id dell azione id della metrica interattivo, cioè l azione associata allo stato richiede un input da parte dell utente
Progettazione XAL Designer Tool Requisiti Automa XML Schema II Transactions: definisce le transizioni tra stati. Per ogni transizione viene specificato: stato di partenza stato di destinazione simbolo (MetricValue) eventuali vincoli temporali che se presenti devono essere soddisfatti per poter procedere con la transizione InitialState: definisce lo stato iniziale FinalStates: definisce gli stati finali
Progettazione XAL Designer Tool Schema UML automatonproperties
Progettazione XAL Designer Tool Schema UML component
Sviluppo Outline 1 Introduzione 2 Obiettivi del progetto 3 XAL - Una breve introduzione 4 Progettazione Struttura del sito web Componente SpazioStage Requisiti Schema ER Schema UML XAL Designer Tool Requisiti Schema UML 5 Sviluppo 6 Conclusioni 7 Riferimenti bibliografici
Sviluppo Introduzione Componente Joomla [1] Un componente è un applicazione che si integra con il CMS Joomla e si occupa generalmente di: di gestire delle informazioni presenti nel database (back-end) visualizzare in modo personalizzabile tali informazioni all utente finale e/o acquisire informazioni da quest ultimo (front-end) Componenti e MVC Attualmente i componenti Joomla sono sviluppati seguendo il design pattern MVC (Model - View - Controller). In Joomla il pattern MVC è implementato usando tre classi: JModel, JController [5], JView
Sviluppo Model View Controller
Sviluppo Struttura di un componente Un componente Joomla è costituito da: un entry point uno (più) controller uno o più modelli una o più viste un file xml contente le informazioni per l installazione
Sviluppo Entry Point Joomla carica il componente in base al valore del parametro option inviato tramite GET o POST. Es. index.php?option=com_spaziostage Ciò prova il caricamento del file spaziostage.php, il punto di accesso dell applicazione Il nome dell entry point e del componente devono coincidere! Compito dell entry point è di invocare il controller richiesto
Sviluppo spaziostage.php 1 <?php 2 //Joomla security: no direct access 3 defined( _JEXEC ) or die( Restricted access ); 4 5 // Require the base controller 6 require_once( JPATH_COMPONENT.DS. controller.php ); 7 8 // Require specific controller if requested 9 if($controller = JRequest::getWord( controller )) { 10 $path = JPATH_COMPONENT.DS. controllers.ds.$controller..php ; 11 if (file_exists($path)) { 12 require_once $path; 13 } else { 14 $controller = ; 15 } 16 } 17 18 // Create the controller 19 $classname = SpaziostageController.$controller; 20 $controller = new $classname( ); 21 22 // Perform the Request task 23 $controller->execute( JRequest::getVar( task ) );
Sviluppo
Sviluppo Alcune note sul codice JRequest: fornisce un interfaccia per accedere alle variabili ricevute con la richiesta HTTP (GET, POST e cookie). Vediamo alcuni metodi: getword(): ritorna il valore di una variabile consentendo solo i caratteri [A-Za-z_] getvar(): ritorna il valore di una variabile senza effettuare alcun filtraggio getint() getfloat()... Nota: il filtraggio del valore delle variabile aiuta a prevenire attacchi di tipo Cross Site Scripting (XSS) [6]
Sviluppo Controllore Ha il compito di invocare una vista associando ad essa dati richiesti al modello in base alla richiesta (variabile GET/POST task) pervenuta. Estende JController Ad ogni task corrisponde un metodo Se task non è definito di default viene invocato il metodo display()
Sviluppo Alcune note sul codice... JController getmodel($_entity): istanzia un oggetto della classe <Nome componente>model<entity>, es. SpazioStageModelUniversity, dopo aver incluso il file <directory del componente>/models/<entity>.php, es.../com_spaziostage/models/university.php. [5] JRequest::checkToken() or die( Invalid Token ): unito a JHTML::_( form.token ) inserito all interno di un form contribuisce a prevenire attacchi di tipo CSRF (Cross Site Request Forgery [2]), ossia l esecuzione di richieste HTTP non autorizzate.
Sviluppo Alcune note sul codice... JView assignref(<nome variabile>, <valore>): aggiunge dinamicamente un attributo di nome <nome variabile> con valore <valore> all istanza di JView.
Sviluppo Modello Rappresenta un entità Si avvale della classe JTable per gestire le operazioni di inserimento/modifica/cancellazione di una tupla quando l entità ha come chiave primaria un identificatore numerico Per interrogazione/comandi SQL che coinvolgano più tabelle è necessario ricorrere alle classe JDatabase.
Sviluppo JTable [4] Se l entità che vogliamo gestire ha un identificatore numerico come chiave primaria si può creare la relativa JTable in pochi semplici passi. <?php defined( _JEXEC ) or die(); class Table<Nome Tabella> extends JTable { var $id = null; /* altri attributi... */ }?> function construct(&$db) { parent:: construct( <nome tabella>, <identificatore>, $db ); } JTable internamente si avvale della classe JDatabase [3]
Sviluppo JTable I metodi principali sono: bind(<dati POST/GET>): assegna i valori delle variabili ricevute mediante POST/GET con gli attributi dell istanza di JTable aventi gli stessi nomi. check(): esegue la validazione degli attributi store(): esegue il comando SQL di insert/update specifico per la tabella delete(): esegue il comando SQL di delete specifico per la tabella
Sviluppo JDatabase Ottenere un istanza di JDatabase: $db = & JFactory::getDBO() Eseguire una query: $db->setquery($query) $result = $db->loadobjectlist() Ritorna una lista di oggetti PHP i cui attributi coincidono con gli attributi dell entità Eseguire un comando SQL(insert, update, delete): $db->setquery($sqlcommand) $db->query() Prevenire SQL Injection: $query = SELECT * FROM TABLE WHERE stringfield =. $db-
Sviluppo JModel Vediamo ora alcuni metodi di una generica implementazione di JModel che utilizzando JTable e JDatabase. getdata(): ritorna una tupla come oggetto PHP (stdclass) di entità se id è stato definito altrimenti ritorna un oggetto PHP avente come attributi gli attributi di entità inzializzati a valori di default. store(): invoca il metodo bind() della JTable corrispondente all entità per ottenere i dati quindi: id =0 allora esegue un comando di INSERT altrimenti un comando di UPDATE. remove(): cancella una o più tuple relative a entità. getall(): ritorna limit-record a partire da limitstart. Usato per la paginazione.
Sviluppo JModel getpagination(): ritorna l oggetto JPagination che gestisce la paginazione delle tuple relative a entità.
Sviluppo View Gestisce la visualizzazione/richiesta di dati all utente Estende la classe JView Deve rispettare la seguente regola di naming: <Nome componente>view<nov vista>. Es. SpazioStageViewUniversity Riceve i dati da visualizzare dal controllore mediante l utilizzo del metodo assignref Per la visualizzazione vera e propria invoca un template Template Una vista può avere associati uno o più template. Il template gestisce la visualizzazione vera e propria dei dati.
Sviluppo
Sviluppo
Sviluppo XML di installazione Ogni componente Joomla deve avere un file XML di installazione avente lo stesso nome del componente Es. spaziostage.xml Gli elementi principali sono: name: definisce il nome del componente files: elenca tutti i file che realizzano il front-end del componente languages: consente di definire file per la lingua relativi al componente installfile: consente di impostare uno script php per eseguire alcune operazioni particolari in fase di installazione uninstallfile: analogo ma in fase di disinstallazione
Sviluppo XML di installazione Gli elementi principali sono: install: queries: consente di specificare dei comandi SQL da eseguire in fase di installazione uninstall: analogo di install ma in fase di disinstallazione admin: sezione relativa alle risorse del componente relative al back-end menu: definisce il nome del componente nel menù del backend files: elenca tutti i files che realizzano il back-end del componente
Sviluppo spaziostage.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <install type="component" version="1.5.0"> 3 <name>spaziostage</name> 4 <files> 5 <filename>controller.php</filename> 6... 7 </files> 8 <languages> 9 <language tag="it-it">it IT.com_spaziostage.ini</language> 10 </languages> 11 12 <installfile>install.spaziostage.php</installfile> 13 <uninstallfile>uninstall.spaziostage.php</uninstallfile> 14 15 <install> 16 <queries> 17 <query> 18 CREATE TABLE # spaziostage_company ( 19 id int(11) unsigned NOT NULL auto_increment, 20 name varchar(255) NOT NULL default, 21 website text, 22... 23 </query> 24...
Sviluppo spaziostage.xml 1 </queries> 2 </install> 3 4 <administration> 5 <menu>spazio Stage</menu> 6 <files folder="admin"> 7 <filename>index.php</filename> 8... 9 <filename>models/stage.php</filename> 10... 11 <filename>views/stage/view.html.php</filename> 12 <filename>views/stage/tmpl/default.php</filename> 13 <filename>views/stage/tmpl/default_form.php</filename> 14... 15 </files> 16 </administration> 17 </install>
Conclusioni Conclusioni
Riferimenti bibliografici Riferimenti bibliografici I staalanden dannystaple, mjaz. Developing a model-view-controller component. http://docs.joomla.org/developing_a_ Model-View-Controller\_Component_-_Part_1. Joomla! Documentation. How to add csrf anti-spoofing to forms. http://docs.joomla.org/how_to_add_csrf_anti-spoofing_ to_forms. Joomla! Documentation. How to use the database classes in your script. http://docs.joomla.org/how_to_use_the_database_ classes_in_your_script.
Riferimenti bibliografici Riferimenti bibliografici II Joomla! Documentation. How to use the jtable class. http://docs.joomla.org/how_to_use_the_jtable_class. Joomla! API Reference. Jcontroller. http://api.joomla.org/joomla-framework/application/ JController.html. Wikipedia. Cross-site scripting. http://en.wikipedia.org/wiki/cross-site_scripting.