Joomla.it Forum

Componenti per Joomla! => Gestione Form => : bigham 30 Sep 2010, 20:48:25

: Chronoform, eliminare record dalla tabella dopo l'invio della mail
: bigham 30 Sep 2010, 20:48:25
Per evitare problemi con il D.lgs. n. 196 del 30 giugno 2003 (“Codice in materia di protezione dei dati personali”) e sucecssivamente con il DPS (Documento Programmatico sulla Sicurezza) della mia Associazione no-profit volevo evitare di lasciare nel database i record, contenenti dati personali, registrati attraverso un form creato con Chronoform.

Il form serve per l'invio di una mail (con allegato) contenente dati personali (cognome, nome, data e luogo di nascita, ecc)  per l'iscrizione all'associazione e utilizza il plugin "Email validator" per verificare l'effettiva esistenza dell'indirizzo email.
Per far funzionare tutto questo è necessario memorizzare i dati del form in una tabella del database creata attraverso Chronoform stesso.

Per eliminare il record memorizzato nella tabella dopo l'invio della mail inserite questo codice nella sezione On Submit code - after sending email: che trovate nella scheda Form Code del form:

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

$query "DELETE FROM `#__chronoforms_".$MyForm->formrow->name."` WHERE `uid` = '".JRequest::getVar('uid')."'";
        
$db->setQuery$query );
$result $db->query();
?>


Sembra che funzioni!  ;D ;D ;D
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: vales 01 Oct 2010, 19:35:27
Mi sembra una buona soluzione.

Tieni conto però che se hai dei dati sensibili nell'allegato devi eliminare anche quello, così dormi tranquillo.
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: bigham 01 Oct 2010, 22:20:25
Bravo vales!!

Era il passaggio successivo, dammi tempo e ci arrivo!  ;D ;D ;D
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: sudoku 01 Oct 2010, 23:27:23
Azz non basta più "SHUTDOWN -s -t 01" ?  ;D

Ottimo big grazie come sempre.

P.S. @vales: ancora attendo voucher su Monaco per venerdì....Azz di azienda....
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: bigham 02 Oct 2010, 13:28:07
Ariecchime!!!

Trovata una soluzione per eliminare anche l'allegato dopo l'invio della mail, ma si può migliorare.

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 (sfruttando un hack di vales ;)):
:
<?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.

Ciao!!!  ;D ;D
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: pierpobaby 09 Feb 2012, 22:26:29
mi vergogno un pò a chiedere, perchè non so proprio niente di php, ma ho messo il codice paro paro com'era riportato e non funziona (sicuramente è ovvio il perchè) ma non so cosa devo eventualmente sostituire con quello che ho nel mio form...c'è qualcuno così paziente da spiegarmelo?
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: pierpobaby 09 Feb 2012, 22:33:02
Spiego a che mi serve:
siccome ho creato un form con vari checkbox che mi permette di mostrare in frontend il menu del giorno, vorrei si vedesse solo il risultato del ultima scelta, mentre attualmente mi mostra tutte le scelte che ho fatto ogni volta che compilo un form.
vi sarei veramente grato.
colgo l'occasione per ringraziare Vales per la sua bellissima guida su come utilizzare chronoforms e chronoconnectivity insieme.
se serve si trova a questo link:
http://www.joomla.it/articoli-della-community/3796-chronofrms-e-chronoconnectivity-lunione-fa-la-forza.html
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: vales 10 Feb 2012, 00:22:37
Considerato che chronoforms v3 è dedicato a Joomla 1.5 consiglio di fare riferimento a questa nuova guida per la versione v4 e le nuove versioni di joomla 1.7-2.5

http://www.joomla.it/articoli-community-16-e-17-tab/5327-guida-2-joomla-17-e-chronoforms-interagire-con-il-database.html (http://www.joomla.it/articoli-community-16-e-17-tab/5327-guida-2-joomla-17-e-chronoforms-interagire-con-il-database.html)
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: pierpobaby 10 Feb 2012, 11:24:43
purtroppo il sito del mio cliente è allocato su un hosting che mi crea problemi di connessione al db, ho dovuto mettere mano all'htaccess per attivare le opzioni seo, con googlemaps mi andava in tilt e addirittura non ho potuto attivare il plugin mootools upgrade! Tutti gli errori sembrerebbero indicare php 4 , ma nel pannello di controllo mi risulta la versione 5.2.17...di conseguenza sto usando joomla! 1.5.23 e relativi componenti (che era già installata con tanto di template). scusa se sono andato OT, era giusto per spiegare la mia triste situazione..,.
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: vales 10 Feb 2012, 18:10:29
Mi sembra di capire che tutti i giorni registri un menù del giorno ?

Se è così realizza uno pseudo form, cioè un form senza campi da inserire e inviare, che mostra solo i campi dell'ultimo record della tabella associata al form di inserimento e sei a posto.
: Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
: pierpobaby 11 Feb 2012, 09:13:16
Grazie, Vales
Il mio cliente però, vorrebe inviare una email col menu a tutti gli utenti registrati al sito, oltre a vederlo sul sito.
io ho risolto leggendo bene la tua guida, in fondo il problema (visualizzare solo il risultato dell'ultimo form) era risolvibile
da pannello di controllo del componente...
spiego a chi ne avesse bisogno:
da "connections management->Connection View Settings->list limit" ho scritto semplicemente il numero di risultati da visualizzare, sempre su connections management->Query Related Settings" ho ordinato i risultati (mi serviva sempre l'ultimo, quindi ho scritto "cf_id DESC" )
 ;) ;)