Relazione Trimestrale finale alla Image Now - Dettagliata

13
Relazione Trimestrale dell'attività svolta presso la ditta Image Now Studio di Macerata – 5 Febbraio – 5 Maggio 2007 In questi primi 3 mesi di attività, si è proceduto allo studio del php e del codice dei vari componenti, moduli e mambots di joomla, in modo da creare ex-novo o, se fosse stato sufficiente, attuare modifiche a componenti già esistenti che rispondessero alle esigenze dei vari clienti della ditta. Analizzeremo in dettaglio i casi affrontati. Per il primo cliente, si aveva la necessità di adottare un componente per la gestione di progetti aziendali tramite joomla, dopo una ricerca iniziale la scelta è caduta sul componente Hydra (pagina di riferimento http://www.hydramanager.com ) , che però non corrispondeva pienamente a tutte le caratteristiche richieste, che erano: Possibilità di limitare il numero di registrazioni degli utenti del sito Registrazione sincronizzata di utenti su hydra e joomla (di default non avveniva, bisognava importare manualmente in hydra gli utenti che si registravano in joomla) Possibilità di aggiungere utenti solo da parte dell'amministratore, e non da parte degli utenti stessi Cancellazione sincronizzata fra hydra e joomla (cancellando un utente da hydra automaticamente questo sarebbe stato cancellato anche da quelli di joomla) Per rispondere a queste richieste, si è proceduto nel seguente modo. Per limitare il numero di registrazioni di utenti al sito del cliente, si è scritto un mambot apposito, in cui si poteva indicare dall'amministrazione di joomla il numero massimo di utenti che potevano registrarsi, dopodichè all'utente appariva una schermata di errore di “massimo numero di utenti registrati raggiunto”. (Vedi Fig.1) Figura 1: Il messaggio di errore in caso di numero massimo di utenti raggiunto Il Mambot è stato chiamato Registration Limit, di seguito i 2 file che lo compongono, uno che definisce l'interfaccia nell'amministrazione di joomla, e l'altro col codice php che esegue il controllo sul database, ricavando il valore del numero di utenti registrati dalla tabella di Joomla jos_users. Codice file mosreglimt.xml: <?xml version="1.0" encoding="iso-8859-1"?> <mosinstall version="1.0.0" type="mambot" group="system"> <name>MosRegLimit</name> <license>GPL</license> <author>Luca Mengoni</author> <authorEmail>[email protected]</authorEmail>

Transcript of Relazione Trimestrale finale alla Image Now - Dettagliata

Page 1: Relazione Trimestrale finale alla Image Now - Dettagliata

Relazione Trimestrale dell'attività svolta presso la dittaImage Now Studio di Macerata – 5 Febbraio – 5 Maggio 2007

In questi primi 3 mesi di attività, si è proceduto allo studio del php e del codice dei vari componenti, moduli e mambots di joomla, in modo da creare ex-novo o, se fosse stato sufficiente, attuare modifiche a componenti già esistenti che rispondessero alle esigenze dei vari clienti della ditta. Analizzeremo in dettaglio i casi affrontati.Per il primo cliente, si aveva la necessità di adottare un componente per la gestione di progetti aziendali tramite joomla, dopo una ricerca iniziale la scelta è caduta sul componente Hydra (pagina di riferimento http://www.hydramanager.com) , che però non corrispondeva pienamente a tutte le caratteristiche richieste, che erano:

● Possibilità di limitare il numero di registrazioni degli utenti del sito● Registrazione sincronizzata di utenti su hydra e joomla (di default non avveniva, bisognava

importare manualmente in hydra gli utenti che si registravano in joomla)● Possibilità di aggiungere utenti solo da parte dell'amministratore, e non da parte degli utenti

stessi● Cancellazione sincronizzata fra hydra e joomla (cancellando un utente da hydra

automaticamente questo sarebbe stato cancellato anche da quelli di joomla)

Per rispondere a queste richieste, si è proceduto nel seguente modo.Per limitare il numero di registrazioni di utenti al sito del cliente, si è scritto un mambot apposito, in cui si poteva indicare dall'amministrazione di joomla il numero massimo di utenti che potevano registrarsi, dopodichè all'utente appariva una schermata di errore di “massimo numero di utenti registrati raggiunto”. (Vedi Fig.1)

Figura 1: Il messaggio di errore in caso di numero massimo di utenti raggiunto

Il Mambot è stato chiamato Registration Limit, di seguito i 2 file che lo compongono, uno che definisce l'interfaccia nell'amministrazione di joomla, e l'altro col codice php che esegue il controllo sul database, ricavando il valore del numero di utenti registrati dalla tabella di Joomla jos_users.

Codice file mosreglimt.xml:

<?xml version="1.0" encoding="iso-8859-1"?><mosinstall version="1.0.0" type="mambot" group="system">

<name>MosRegLimit</name><license>GPL</license><author>Luca Mengoni</author><authorEmail>[email protected]</authorEmail>

Page 2: Relazione Trimestrale finale alla Image Now - Dettagliata

<authorUrl>http://www.lucamengoni.com</authorUrl><creationDate>2007-02-12</creationDate><copyright>(C) 2007 Luca Mengoni</copyright><version>1.0</version><description><![CDATA[

<b>RegistrationLimit</b> vi permette di definire il numero massimo di utenti che possono registrarsi.

<p>&copy; 2007 by Luca Mengoni &ndash; tutti i diritti riservati</p><a href="http://www.lucamengoni.com">http://www.lucamengoni.com</a>]]>

</description><files>

<filename mambot="mosreglimit">mosreglimit.php</filename></files> <params>

<param name="maxreguser" type="text" label="Numero massimo di utenti che possono registrarsi al sito" description="Inserite il numero massimo di utenti che possono registrarsi al sito."/>

<param name="maxregusermsg" type="text" default="Spiacente, è stato raggiunto il numero massimo di utenti che possono registrarsi" label="Messaggio di errore quando si raggiunge il numero massimo di utenti registrati al sito" description="Testo da mostrare quando è stato raggiunto il numero massimo di registrazioni consentite."/>

</params></mosinstall>

Questo è il file mosreglimit.php , con commenti:

<?php

/*

RegistrationLimit 1.0 vi permette di definire il numero massimo di utenti che si possono registrare.© 2007 Luca Mengonihttp://www.lucamengoni.com*/

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$_MAMBOTS->registerFunction( 'onStart', 'botRegLimit' );

function botRegLimit() {// Prima controllo se c'è qualcosa da fare$option = strtolower (strval( mosGetParam( $_REQUEST, 'option' ) ) );$task = strtolower (strval( mosGetParam( $_REQUEST, 'task' ) ) );if(!in_array($option, array('com_registration', 'com_comprofiler')) || $task!

='saveregistration') return true;

global $database;

// carica i parametri dal mambot mosreglimit, definiti nel file xml$query = "SELECT params FROM #__mambots WHERE element = 'mosreglimit' AND

Page 3: Relazione Trimestrale finale alla Image Now - Dettagliata

folder = 'system'";// assegna alla variabile database il valore di $query$database->setQuery( $query );// carica il mambot$database->loadObject($mambot); $botParams = new mosParameters( $mambot->params );

// la query che ritorna il numero di utenti attualmente registrati, chiamiamo la variabile $numuser

$sql = "SELECT COUNT('id') FROM `#__users`";$database->setQuery( $sql );$numuser = $database->loadResult($sql);$botParams = new mosParameters( $mambot->params );// definisce il messaggio di errore

$msg = $botParams->def('maxregusermsg');// assegna a $maxreguser il valore impostato nel file xml

$maxreguser = $botParams->get('maxreguser');if ($numuser >= $maxreguser) {mosErrorAlert($msg);}

}?>

Ecco la schermata della gestione del mambot Registration Limit:Su parametri si può indicare il numero massimo di utenti che si possono registrare e personalizzare il messaggio di errore che si vuole far visualizzare nel frontend del sito

Si è passati poi a modificare il componente per sincronizzare la registrazione degli utenti fra le tabelle degli utenti hydra e quelli di joomla Per fare in modo che quando un utente si registri vengano aggiunti i valori anche nelle tabelle di jos_hydra_users oltre che jos_users, aggiungo al file registration.php la funzione modificata importUsers e la chiamo subito dopo la saveregistration() riga 40 di registration.php

Il valore del campo id di Jos_Users corrisponde al valore del campo jid di Jos_Hydra_Users

function importUsers(){

Page 4: Relazione Trimestrale finale alla Image Now - Dettagliata

global $database;

$sql = 'SELECT MAX(`id`) FROM `jos_users`';$database->setQuery($sql);$jid = $database->loadresult($sql);$query = "INSERT INTO #__hydra_users VALUES ('','$jid','0')";$database->setQuery($query);$database->query();

}

Richiamata subito dopo il Saveregistration, salva correttamente il nuovo utente registrato nella tabella hydra_users.

Inserito il collegamento sul menù utente per vedere e modificare il profilo utente, il link è index.php?option=com_user&task=UserDetails

Per non visualizzare più la voce importa utenti sul pannello di controllo di Hydra, ho commentato la riga 114 del file controlpanel_right.html.php nella directory administrator\components\com_hydra\html

Commentata anche la riga 115 del file controlpanel_right.html.php nella cartella administrator/components/com_hydra_html , in modo da non far più comparire il tasto elimina utente nel pannello di gestione utenti di Hydra.

Aggiunta poi la possibilità, quando eliminiamo un utente hydra, di rimuoverlo automaticamente anche dalla tabella degli utenti di joomla.Ecco il codice funzionante:

// get the joomla users $query = "SELECT jid FROM #__hydra_users WHERE id IN ($cids)"; $database->setQuery($query); $joomla_users = implode(",", $database->loadResultArray());

// delete user$query = "DELETE FROM #__hydra_users WHERE id IN ($cids)"; $database->setQuery($query); $database->query();

// delete joomla users $query = "DELETE FROM #__users WHERE id IN ($joomla_users)"; $database->setQuery($query); $database->query();

Il cliente aveva anche l'esigenza di aggiungere nuovi utenti dal frontend, senza passare per il pannello amministrativo del backend, in modo da poterli aggiungere successivamente agli utenti assegnati a un determinato progetto hydraSi è proceduto alla creazione nel menù utente di un link alla voce di registrazione del modulo login di joomla predefinito, e successivamente modificato questo modulo in modo da non rendere più visibile il link alla registrazione. Accesso a Hydra e alla voce di registrazione nuovi utenti solo ad utenti di livello special (quindi solo gli amministratori potranno vedere queste 2 voci).

Page 5: Relazione Trimestrale finale alla Image Now - Dettagliata

Il mambot e le modifiche al componente Hydra sono prima stati testati in locale, poi implementati nel sito www.s2badv.com . Ecco alcune schermate esplicative del lavoro portato a conclusione:

Inserimento utenti da parte dell'amministratore

L'interfaccia di Hydra Modificata per il sito S2badv.com

La gestione utenti di Hydra

Page 6: Relazione Trimestrale finale alla Image Now - Dettagliata

E quella di joomla

Come si può vedere, le due tabelle sono sincronizzate con gli stessi utenti.

Andiamo ora ad analizzare un'altra personalizzazione effettuata su commissione di un altro cliente, l'università degli studi di macerata, nel suo sito www.masterpa.it.Questi aveva la necessità di un componente per la gestione del calendario delle lezioni del master, che rendesse possibile la stampa degli eventi divisi per i diversi moduli che componevano il programma, la scelta è caduta sul componente di joomla di nome Jevents.Questi presentava però un bug che non permetteva la corretta stampa del calendario, allora si è proceduto a modificare il codice del componente in modo da permettere questa stampa.Si è proceduto duplicando 3 file del componente (events.php, events.html.php e events.class.php) e mettendoli nella cartella com_events2,dopo averli modificati. E' stata successivamente linkata l'icona di stampa alla popup che appare quando si selezionano le categorie, ecco il codice:

if ($task == "view_cat" ){global $mosConfig_live_site, $hide_js, $pop, $catidsIn, $catid;if (isset($catidsIn) && $catidsIn!="NONE") $cids =

"&amp;catids=$catidsIn";else $cids = ""; // link used by print button$print_link = $mosConfig_live_site. "/index2.php?

option=com_events2&task=view_cat&offset=1&catid=$catid;";

Il link porta alla pagina duplicata di events, in cui è stata tolta la parte per selezionare le categorie, e nel file events2.html.php è stato aggiunto il link per la stampa tramite javascript, ecco il codice

<a href="#" onclick="javascript:window.print();"> <img src="<?php echo $mosConfig_live_site;?>/images/M_images/printButton.png" align="middle" name="image" border="0" alt="<?php echo _CMN_PRINT;?>" /> </a>

In questo modo, cliccando sull'iconcina della stampante che appare nella popup con i risultati della query di selezione categorie, stampa correttamente. E' stata poi aggiunta la visualizzazione della descrizione quando si inserisce un evento nel calendario, tolti i link al dettaglio della notizia in modo che non apparisse più la finestra di pop-up, messo il titolo in grassetto, data e descrizione in carattere piccolo, e tolto il limite di caratteri dalla visualizzazione della descrizione,anche la stampa funziona correttamente. Modificati i file events.html.php, events.php, events2.php, events.css.css . Ecco le schermate del calendario

Page 7: Relazione Trimestrale finale alla Image Now - Dettagliata

modificato funzionante:

Il calendario completo del master, con possibilità di scegliere le categorie e la visione degli eventi dettagliata

Page 8: Relazione Trimestrale finale alla Image Now - Dettagliata

L'anteprima di stampa del calendario completo

Vediamo ora la terza personalizzazione e modifiche effettuate per conto di un altro cliente, www.apindustria.org.Si aveva necessità di un componente per inserire le offerte di lavoro da parte delle aziende e curriculum da parte degli utenti. Ogni annuncio doveva avere un codice identificativo, il curriculum poter essere agganciato al codice dell'annuncio, oppure inserito direttamente nel database, messo a disposizione delle aziende. Queste dovevano poter scegliere fra i diversi curriculum in base a fasce di età ,al codice annuncio (vedere solo gli annunci che rispondono al loro codice), all'area di competenza (es.amministrativo, tecnico, commerciale), e alle lingue straniere conosciute.Inizialmente la scelta è caduta sul componente Jobline associato ad un altro componente, Dbquery, successivamente si è passati invece a Fabrik.E' importante che nella tabella dove l'utente inserisce il curriculum ci sia anche la data di inserzione del curriculum, perchè dopo 6 mesi, tramite un file php scritto appositamente, i vecchi curriculum dovevano essere cancellati dal database e chi li aveva inviati riceve notifica via mail, venendo invitato a inviarne una versione aggiornata.Per prima cosa sono state create 2 nuove tabelle nel sito di nome jos_jl_cv, in cui memorizzare i dati dei curriculum , e jos_jl_jobposting , per la memorizzazione delle offerte di lavoro inviate.

Struttura della tabella `jos_jl_cv`

Page 9: Relazione Trimestrale finale alla Image Now - Dettagliata

CREATE TABLE `jos_jl_cv` ( `id` int(11) unsigned NOT NULL auto_increment, `created` date NOT NULL default '0000-00-00', `name` varchar(50) NOT NULL default '', `surname` varchar(50) NOT NULL default '', `address` varchar(255) NOT NULL default '', `zipcode` varchar(10) NOT NULL default '', `city` varchar(70) NOT NULL default '', `province` varchar(50) NOT NULL default '', `age` tinyint(5) NOT NULL default '0', `homephone` varchar(255) NOT NULL default '', `cellphone` varchar(255) NOT NULL default '', `email` varchar(255) NOT NULL default '', `baseknowledge` varchar(255) NOT NULL default '', `workexperience` varchar(255) NOT NULL default '', PRIMARY KEY (`id`)

)

Create le seguenti voci di menù , collegate alle due tabelle, che permettono le operazioni richieste :

● Elenco curriculum : mostra un elenco dei curriculum inviati tramite form, con link alla visualizzazione dettagliata del curriculum, e menù a tendina per la ricerca in base alle fasce di età , area di competenza e codice di riferimento offerta di lavoro. Permette alle aziende di visualizzare i curricula inviati.

● Invia curriculum : appare una form coi campi di interesse del candidato, che sono il codice offerta di lavoro per la quale ci si applica, i dati anagrafici,l'area di compenteza , lingue conosciute, telefono, e-mail, istruzione, corsi di aggiornamento, esperienza professionale, conoscenze informatiche, altre competenze e capacità. Quando qualcuno invia un curriculum , arriva una notifica via mail ad Apindustria.

● Elenco offerte di lavoro: mostra un elenco delle offerte di lavoro inserite dalle aziende, con link in ogni offerta alla possibilità di inserire un curriculum per l'offerta. In ogni offerta sono presenti il codice di riferimento, la data di inserimento, il titolo, la società, la descrizione dell'offerta, livello di istruzione richiesto, gli altri requisiti richiesti, e i dati per contattare la società. Pubblico e riservato a tutti i navigatori del sito apindustria.

● Inserisci offerta di lavoro: form per permettere alle aziende registrate su apindustria di inviare nuove offerte di lavoro.

● Cancella vecchi curriculum: collegamento al file deletecv.php, con accesso ad esso solo agli amministratori del sito, permette di effettuare la pulizia sulla tabella dei curriculum eliminando quelli più vecchi di 6 mesi e inviando la notifica automatica agli utenti che li avevano precedentemente inviati ad apindustria.

Vediamo il codice del file deletecv.php :

<?php // Set flag that this is a parent filedefine( '_VALID_MOS', 1 );include_once( 'globals.php' );require_once( 'configuration.php' );require_once( 'includes/joomla.php' );global $database;

$email_from_address = '[email protected]';$email_from_display_name = 'Image Now Studio';$sql = 'SELECT email FROM `jos_jl_cv` WHERE (curdate( ) - created) >=180';

Page 10: Relazione Trimestrale finale alla Image Now - Dettagliata

$database->setquery($sql);$email_recipient_address = $database->loadRowList();$subject = 'Cancellazione Curriculum dal database';$text = "Siamo spiacenti di comunicarle che abbiamo provveduto a cancellare il suo curriculum dal nostro database,in quanto ormai obsoleto.La invitiamo ad inviarcene uno aggiornato. Distinti Saluti";for($i = 0, $n = count($email_recipient_address); $i < $n; $i++) {mosMail ($email_from_address, $email_from_display_name, $email_recipient_address[$i], $subject, $text );}$text = sprintf( $text );echo "mail sent to: $email_recipient_address<br/>";

$sql = 'DELETE FROM `jos_jl_cv` WHERE (curdate( ) - created) >=180';$database->setquery($sql);$database->query();echo "curriculum obsoleti cancellati";?>

Recupera dalla tabella jos_jl_cv la data di inserimento curriculum, la confronta con 180 giorni, se è maggiore, prepara un'email che viene spedita all'email di chi ha inserito il curriculum scaduto, e cancella il curriculum.Ecco le schermate del componente personalizzato per le esigenze di Apindustria.

La schermata della gestione dell'elenco dei curricula inviati, con possibilità per l'amministratore di modifica e cancellazione diretta.

Page 11: Relazione Trimestrale finale alla Image Now - Dettagliata

Il form per l'inserimento del curriculum

Page 12: Relazione Trimestrale finale alla Image Now - Dettagliata

L'elenco delle offerte di lavoro

Il form per l'invio dell'offerta di lavoro

Page 13: Relazione Trimestrale finale alla Image Now - Dettagliata

E' stata aggiunta anche la possibilità di eseguire ricerche per fasce di età , e di inviare il curriculum per una specifica offerta di lavoro, cliccando su un apposito link che memorizza il codice dell'offerta per la quale ci si applica. Nel secondo trimestre si continuerà il lavoro di creazione e modifica componenti di Joomla per adattarli alle esigenze dei clienti della ditta.

Macerata li 04 Maggio 2007

Il Borsista

Firma del Tutor