Back to top

Autore Topic: Chronoform, eliminare record dalla tabella dopo l'invio della mail  (Letto 5352 volte)

Offline bigham

  • Global Moderator
  • Instancabile
  • ********
  • Post: 3662
  • Sesso: Maschio
  • Contagiato dalla Joomlaite :)
    • Mostra profilo
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:

Codice: [Seleziona]
<?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
« Ultima modifica: 02 Ott 2010, 18:29:15 da bigham »
Ci sono più cose in cielo e in terra, Orazio, di quante ne sogni la tua filosofia.

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #1 il: 01 Ott 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.
« Ultima modifica: 02 Ott 2010, 18:29:25 da bigham »
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline bigham

  • Global Moderator
  • Instancabile
  • ********
  • Post: 3662
  • Sesso: Maschio
  • Contagiato dalla Joomlaite :)
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #2 il: 01 Ott 2010, 22:20:25 »
Bravo vales!!

Era il passaggio successivo, dammi tempo e ci arrivo!  ;D ;D ;D
« Ultima modifica: 02 Ott 2010, 18:29:42 da bigham »
Ci sono più cose in cielo e in terra, Orazio, di quante ne sogni la tua filosofia.

Offline sudoku

  • Global Moderator
  • Instancabile
  • *****
  • Post: 4077
  • Sesso: Maschio
  • Non serve essere alti. basta essere all'altezza
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #3 il: 01 Ott 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....
« Ultima modifica: 02 Ott 2010, 18:29:55 da bigham »
Joomla non è una soluzione, é un metodo
http://www.BreezingTest.altervista.org

Offline bigham

  • Global Moderator
  • Instancabile
  • ********
  • Post: 3662
  • Sesso: Maschio
  • Contagiato dalla Joomlaite :)
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #4 il: 02 Ott 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:
Codice: [Seleziona]
<?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 ;)):
Codice: [Seleziona]
<?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
« Ultima modifica: 02 Ott 2010, 18:30:07 da bigham »
Ci sono più cose in cielo e in terra, Orazio, di quante ne sogni la tua filosofia.

Offline pierpobaby

  • Esploratore
  • **
  • Post: 50
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #5 il: 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?

Offline pierpobaby

  • Esploratore
  • **
  • Post: 50
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #6 il: 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

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #7 il: 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
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline pierpobaby

  • Esploratore
  • **
  • Post: 50
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #8 il: 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..,.

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #9 il: 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.
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline pierpobaby

  • Esploratore
  • **
  • Post: 50
    • Mostra profilo
Re:Chronoform, eliminare record dalla tabella dopo l'invio della mail
« Risposta #10 il: 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" )
 ;) ;)

 



Web Design Bolzano Kreatif