maidireJoomla.it

Esperienze nel mondo di Joomla e dei CMS

logo_maidirejoomla
Home Estensioni Chronoform: come eliminare un allegato dopo l'invio della mail
Chronoform: come eliminare un allegato dopo l'invio della mail PDF Stampa E-mail
Sabato 02 Ottobre 2010 19:26

In questo articolo avevo descritto come eliminare il record contenente i dati del form che Chronoform registra dopo l'invio degli stessi via email.

La motivazione principale era il non volersi impelagare nelle regole che il D.lgs n. 196 del 30 giugno 2003 (“Codice in materia di protezione dei dati personali”) impone per chi gestisce dati personali/sensibili con sistemi informatici.

Resta però il problema di come eliminare l'eventuale allegato che viene inviato insieme alla mail. Chronoform infatti memorizza i file che si allegano ad un form (e quindi ad una mail) in una cartella sul disco del server, precisamente /components/com_chronocontact/uploads/nome_form.

Sul forum di Chronoengine è riportato un unico post con questa possibile soluzione:


<?php
$MyForm =& CFChronoForm::getInstance('formname');
$MyUploads =& CFUploads::getInstance($MyForm->formrow->id);
$MyUploads->deleteUploads();
?>

Questo codice sfrutta la funzione (sarebbe più corretto chiamarla "metodo"  ;)) deleteUploads() per cancellare tutti gli allegati contenuti nella cartella di upload di Chronoform. La funzione è contenuta nel file chronoformuploads.php.

A me questo codice non funziona, forse per un problema di permessi su cartelle (755) e file (644). Purtroppo la funzione non restituisce nessun messaggio di errore, semplicemente i file nella cartella uploads/nome_form sono sempre al loro posto.

Ho provato un'altra soluzione con questo codice:


<?php
 global $mainframe;
 $db=& JFactory::getDBO();

 // ricava il percorso dove sono depositati gli allegati
 $uploadpath = $MyForm->formparams('uploadpath',    JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'uploads'.DS.$MyForm->formrow->name.DS);
 
 // legge dalla tabella collegata al form il nome del file allegato
 // attenzione! sostituire al post di tx_allegato il nome del campo della vostra tabella
 // destinato a contenere il nome del file allegato
 $query = "SELECT `tx_allegato` FROM `#__chronoforms_".$MyForm->formrow->name."` WHERE `uid` = '".JRequest::getVar('uid')."'";
 $db->setQuery( $query );
 $all=$db->loadRow();
 $allegato=trim($all[0]);
 $this_attachments[0] = $uploadpath.$allegato;

 // cancella il file allegato (eventualmente restituisce un messaggio di errore)
 if(!JFile::delete($this_attachments[0], 'NULL')){
 JError::raiseWarning(100, 'Non posso cancellare l\'allegato');
 }

 // elimina dalla tabella collegata al form il record contenente i dati del form
 $query = "DELETE FROM `#__chronoforms_".$MyForm->formrow->name."` WHERE `uid` = '".JRequest::getVar('uid')."'";
 $db->setQuery( $query );
 $result = $db->query();

?>


Il codice è abbastanza commentato da essere comprensibile.

Unico difetto è che nella query che legge il nome del file allegato dalla tabella collegata al form bisogna indicare il nome del campo che contiene il nome dell'allegato.

Il codice sopra descritto va inserito nella sezione On Submit code - after sending email: che trovate nella scheda Form Code del form.

 

Pubblicità