Casella da flaggare "Invia email" quando si crea o modifica un record

Salve Eugenio,

esiste la possibilità di inserire una casella da flaggare a fine scheda che al momento di salvare permette l'invio di un'email a un determinato utente avvisandolo che è stato creato o modificato un record a lui attribuito?


Mi spiego meglio:

quando inserisco o lavoro una pratica (quindi la modifico) avrei bisogno di poter avvisare l'agente commerciale proprietario di quella pratica (contratto) che un record è stato creato o che un record precedentemente creato ha subito degli aggiornamenti.
 

eugenio

Administrator
Staff member
Salve,
ci sono due modi:

1) Quello più semplice è utilizzare in config.php i parametri:
$enable_update_notice_email_sending
$enable_insert_notice_email_sending

che permettono di inviare ad una serie di indirizzi predefiniti (sempre gli stessi però) una mail all'inserimento o modifica di un record

2) Il secondo prevede l'utilizzo di un after_insert o after_update hook sulla tabella che le interessa, in questo caso però dovrà scrivere qualche riga di codice PHP che si occupi di inviare la mail alla persona giusta.

Saluti,
 
Nel primo caso è possibile inserire indirizzi email senza limite? Perché abbiamo un centinaio di agenti.
Nel secondo caso invece esiste da qualche parte una guida? Anche generica intendo.
 

eugenio

Administrator
Staff member
Nel primo caso si possono inserire infiniti indirizzi email nel campo TO, CC, BCC; l'unico problema che può avere inviando la stessa mail a tanti indirizzi è il rischio che venga rilevata come spam dai filtri antispam.

Riguardo al secondo caso, nel file /include/custom_functions.php c'è un esempio di after insert hook, dadabik_send_notice_after_accounts_insert, molto simile al suo caso (dopo l'inserimento di un record, invia ad un indirizzo una mail di avvertimento). Non esiste una guida alla scrittura di una funzione hook nel senso che in una funzione hook può scrivere più o meno ciò che vuole in PHP.

Saluti,
 
Per il momento, essendo la più semplice, ho optato per la prima soluzione:

il problema però viene fuori dal fatto che chi riceve l'email (in questo caso tutti gli agenti e tutte le agenzie) vedrà tutti i dati in chiaro della pratica, inoltre anche alcuni dati del database (nome del database e nome utente del database). Questo è un problema per noi perché trattando dati sensibili andremmo in contro a delle sanzioni.

Quindi mi chiedo: come posso modificare l'email che viene inviata?

Mi basterebbe che l'email che ricevono contenga solo alcuni dati.


Faccio un esempio;

Mittente - GESTIONALE DADABIK (oscurando il nome utente del database)

Oggetto - NUOVO INSERIMENTO/AGGIORNAMENTO ESEGUITO (oscurando nome database e nome tabella)

Corpo del messaggio - ID:, AGENTE:, AGENZIA:, (solo questi dati)


Esempio dell'email in arrivo:

Da: DADABIK
A: mario.rossi@gmail.com

Oggetto: NUOVO INSERIMENTO ESEGUITO (oppure) NUOVO AGGIORNAMENTO ESEGUITO


Dettagli del record
----------------------------------------------------------


ID: 15

AGENTE: MARIO ROSSI

AGENZIA: NEW AGENCY SOLUTIONS


----------------------------------------------------------
Powered by DaDaBIK - http://www.dadabik.org/


Inoltre, è possibile inserire una casella da flaggare solo nel caso in cui si voglia che un'email sia inviata?
Questo perché a volte modifichiamo una pratica ma non c'è bisogno di avvisare l'agente/agenzia.


La prego di volermi aiutare.


Grazie.
 

eugenio

Administrator
Staff member
Se vuole mandare email personalizzate l'unico modo è l'utilizzo di after_insert o after_update hook, la soluzione che prevede l'utilizzo di $enable_update_notice_email_sending è invece esattamente come descritta: invia una mail con i dettagli del record e non prevede personalizzazioni. I campi che vengono inseriti nella mail sono quelli per cui l'utente corrente ha il permesso "details".

Una cosa su cui può intervenire facilmente sono i comandi "mail_custom" in index.php: ne troverà due, può rimuovere il riferimento a $db_name se non vuole inviare il nome del db. Il nome utente del db invece non viene inviato.

Saluti,
 
Nel campo "Da:" di chi riceve l'email c'è il mio nome utente del database, forse prende questo dato dal file config.php ($user)?

Es.: Da: nomeutente-database@nomedeldominio.com


Le dispiace farmi la correzione in modo che non commetta errori?

mail_custom($to_addresses, $db_name.' - '.$table_name.' - '.$normal_messages_ar['new_insert_executed'], $insert_notice_email, $additional_headers);

mail_custom($to_addresses, $db_name.' - '.$table_name.' - '.$normal_messages_ar['new_update_executed'], $update_notice_email, $additional_headers);

Una curiosità, togliendo anche la parte "$table_name" chi riceve l'email non visualizza il nome della tavola in causa giusto?


Ho notato che nel file custom_functions ci sono dei riferimenti all'email, ma a questo punto credo siano legati alle modalità after_insert e after_update hook.
 

eugenio

Administrator
Staff member
Buongiorno,
Il fatto che ci sia il nome utente come mittente è un caso, o meglio, dipende da come è impostato il suo servizio di hosting per l'invio di mail tramite funzione mail() di php. DaDaBIK non imposta il campo "FROM" quindi viene utilizzato quello di default. Chieda eventualmente dettagli al suo fornitore di hosting.

Se non vuole ne' db name ne' tabella ' sufficiente rimuovere quella parte:

mail_custom($to_addresses, $normal_messages_ar['new_insert_executed'], $insert_notice_email, $additional_headers);

Sì, quello che ha visto in custom_functions.php è probabilmente l'esempio che le citavo alcuni post indietro.
 
Buon pomeriggio Eugenio,

riprendo questo post in quanto vorrei sapere, oltre a quello di cui abbiamo già parlato, se è possibile inserire nella scheda una casella "flaggabile" che al momento di salvare, qualora fosse selezionata, faccia partire l'email, in caso contrario no.
 

eugenio

Administrator
Staff member
Buongiorno,
se ha adottato la prima soluzione no, non c'è un modo automatico per farlo.

Se ha adottato la seconda soluzione il modo più semplice è:
- aggiungere un campo alla tabella (es. send_mail_contact)
- dichiararlo come campo select_single_radio in dadabik, con valori possibili yes oppure no
- nel suo codice controllare se $_POST_2['send_mail_contact'] è uguale a 'yes', in quel caso mandare mail altrimenti no

Saluti,
 
Grazie Eugenio,

ho fatto quanto ha detto e ho risolto, l'unica cosa che non ho capito bene è il terzo punto:
- nel suo codice controllare se $_POST_2['send_mail_contact'] è uguale a 'yes', in quel caso mandare mail altrimenti no

Potrebbe spiegarmelo più dettagliatamente per favore?


Per quanto riguarda la seconda soluzione, dopo aver selezionato "Sì", come faccio a dire al gestionale di inviare l'email all'agente presente in quella scheda? Ad ogni nuova scheda viene selezionato da noi l'agente da un menù a cascata che a sua volta prende i nominativi dalla tabella agenti nella quale appunto è presente una colonna "indirizzo_email" con l'indirizzo email dell'agente di riferimento.
 

eugenio

Administrator
Staff member
Salve,
Intendevo semplicemente un

if ($_POST_2['send_mail_contact'] === 'yes'){

... manda mail

}

Riguardo all'indirizzo, deve recuperarlo attraverso una query SQL partendo dall'id dell'agente che sarà immagino in una variabile
$_POST_2['id_agente'] o qualcosa di simile. Attenzione che se il campo id_agente e' disabilitato non riceverà il dato.

Saluti,
 

eugenio

Administrator
Staff member
Buongiorno
non capisco la domanda, in realtà non ho fatto riferimento a nessun file in particolare, se deve scrivere codice PHP per un hook lo deve inserire nel file custom_functions.php come tutto il resto del codice custom.
 
Grazie Eugenio,

non avevo capito bene quindi. Lei si adopera anche a crearle questo tipo di modifiche? Come posso avere un preventivo per la realizzazione di quanto sopra richiesto?
 

eugenio

Administrator
Staff member
Buongiorno,
il modo ufficiale per chiedere un preventivo è utilizzare il form contatti che trova sul sito. In questo periodo tuttavia non riuscirei ad occuparmene.

Consideri però che nel suo caso si tratta di un lavoro molto semplice, se ha già implementato la seconda soluzione proposta all'inizio della discussione (non mi è chiaro se l'ha fatto), il controllo sulla casella di invio mail si implementa con due righe di codice, quel:

if ($_POST_2['send_mail_contact'] === 'yes'){

mail(.....)

}

di cui le scrivevo prima.
 
Buongiorno Eugenio,

purtroppo no, non avevo usato la seconda soluzione e quindi non saprei proprio da dove cominciare.

Questo è l'esempio di hook a cui lei fa riferimento:

-----------------------------

$hooks['accounts']['insert']['after'] = 'dadabik_send_notice_after_accounts_insert';

function dadabik_send_notice_after_accounts_insert($id_account)
{
global $conn;

// get the name from the ID
$sql = "SELECT name_account FROM accounts WHERE id_account = :id_account";

$res_prepare = prepare_db($conn, $sql);

$res_bind = bind_param_db($res_prepare, ':id_account', $id_account);

$res = execute_prepared_db($res_prepare,0);

$row = fetch_row_db($res_prepare)

mail ('john@mysite.com', 'New account inserted', 'A new account ('.$row['name_account'].') has been added.');

}

-----------------------------


Io ho la tabella agenti con la colonna id_agente e la colonna indirizzo_email.

Devo inviare un'email sia alla creazione di una nuova pratica sia alla modifica di una pratica già esistente se la casella flaggabile che ho creato in precedenza (invia_email) è flaggata su "Sì". Dunque dovrei creare due hooks differenti simili all'esempio da lei indicato?
 

eugenio

Administrator
Staff member
Sì, sarebbero due hook diversi, uno per "after insert" e l'altro per "after update". In realtà può impostare per entrambi la stessa funzione perché comunque deve fare la stessa cosa.

Il contenuto della funzione è in effetti simile a quello di esempio, ma nel suo caso dovrà andarsi a recuperare tramite SQL l'email dell'agente sulla base dell'agente contenuto nella pratica (nell'esempio si faceva altro, si selezionava il nome dell'account, da aggiungere al corpo della mail) e gestire la parte della casella flaggabile. Per fare questo è necessario avere un minimo di conoscenza di SQL e PHP.
 
Buongiorno Eugenio,

provo a mostrarle una bozza:

------------------------------------

$hooks['accounts']['insert']['after'] = 'dadabik_send_notice_after_accounts_insert'; (questo è solo un riferimento, giusto?)

function dadabik_send_notice_after_dossier_insert($id_agente)
{
global $conn;

// get the name from the ID
$sql = "SELECT indirizzo_email FROM agenti WHERE id_account = :id_agente";

$res_prepare = prepare_db($conn, $sql);

$res_bind = bind_param_db($res_prepare, ':id_agente', $id_agente);

$res = execute_prepared_db($res_prepare,0);

$row = fetch_row_db($res_prepare)

if ($_POST_2['invia_email'] === 'Sì'){

mail ('john@mysite.com', 'Pratica aggiornata', 'La pratica di ('.$row['nome_agente'].') `è stata aggiornata.');

}

In rosso ho modificato in base ai miei dati.
In blu invece è dove non saprai cosa fare.

Ci sono altri valori che dovrei prendere in considerazione e/o che dovrei cambiare in base ai miei dati in questa bozza?
Potrebbe dirmi se è giusto e/o cosa devo cambiare? Grazie.
 
Top