fonction envoyer_gamumail OK (y compris docs attachés). Intégration des en tant que mix id_auteurs et mails séparés par des virgules dans le CVT gamumail.

This commit is contained in:
clem 2020-08-21 02:01:15 +02:00
parent 28e73628ae
commit f0221e8221
5 changed files with 138 additions and 65 deletions

View file

@ -8,21 +8,25 @@ include_spip('inc/filtres');
* formulaire générique pour envoyer des mails avec pieces attachés * formulaire générique pour envoyer des mails avec pieces attachés
* *
* @param string $slug modele du mail a charger * @param string $slug modele du mail a charger
* @param int|string $auteur id_auteur ou email du destinataire * @param string $destinataires = adresses mails et id_auteurs séparées par ,
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
* @param array $Tclient []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] * @param array $Tclient []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
* @param array $Tpdf []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] * @param array $Tpdf []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
* @param string $redirect * @param string $redirect
* @param array $options * @param array $options
* @return array $valeurs * @return array $valeurs
*/ */
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
$Tmails = []; $Tmails = [];
if (intval($auteur)) { $destinataires = explode(',', $destinataires);
$Tmails[] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($auteur)); foreach ($destinataires as $dest) {
} elseif (is_string($auteur)) { if (is_numeric($dest)) {
if (email_valide($auteur)) { if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
$Tmails[] = $auteur; $Tmails[] = $mail;
}
}
elseif (email_valide($dest)) {
$Tmails[] = $dest;
} }
} }
@ -65,35 +69,64 @@ function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $T
); );
if ($f = charger_fonction('charger', 'gamumail', true)) { if ($f = charger_fonction('charger', 'gamumail', true)) {
$valeurs = $f($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
if ($f = charger_fonction($slug . '_charger', 'gamumail', true)) { if ($f = charger_fonction($slug . '_charger', 'gamumail', true)) {
$valeurs = $f($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
return $valeurs; return $valeurs;
} }
function formulaires_gamumail_verifier_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{ function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
$erreurs = array(); $erreurs = array();
//champs obligatoire //champs obligatoire
foreach (array ('pour', 'sujet', 'texte') as $obligatoire) { foreach (array ('pour', 'sujet', 'texte') as $obligatoire) {
if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire'; if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire';
} }
// le slug est il OK ?
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
$erreurs['message_erreur'] = _T("gamumail:erreur_format_slug");
}
$res = sql_fetsel('slug', 'spip_gamumails', 'slug = "'.$slug.'"');
if (!$res) {
$erreurs['message_erreur'] = _T("gamumail:pas_de_slug");
}
// vérif des destinataires
$Tid_erreur = $Tmails_erreur = [];
$pour = explode(',', _request('pour'));
foreach ($pour as $dest) {
if (is_numeric($dest)) {
if (!$mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
$Tid_erreur[] = $dest;
}
}
elseif (!email_valide($dest)) {
$Tmails_erreur[] = $dest;
}
}
$erreurs['pour'] = '';
if (count($Tid_erreur)) {
$erreurs['pour'] .= _T("gamumail:id_destinataires_sans_mails", ['ids_erreur' => join(', ', $Tid_erreur)]).' ';
}
if (count($Tmails_erreur)) {
$erreurs['pour'] .= _T("gamumail:mails_destinataires_en_erreur", ['mails_erreur' => join(', ', $Tmails_erreur)]);
}
// surcharges
if ($f = charger_fonction('verifier', 'gamumail', true)) { if ($f = charger_fonction('verifier', 'gamumail', true)) {
$erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) { if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) {
$erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
return $erreurs; return $erreurs;
} }
function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
include_spip('inc/texte'); include_spip('inc/texte');
include_spip('classes/facteur'); include_spip('classes/facteur');
@ -112,14 +145,25 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
$cc = explode(',', $cc); $cc = explode(',', $cc);
$cci = explode(',', $cci); $cci = explode(',', $cci);
$Tmails = [];
foreach ($pour as $dest) {
if (is_numeric($dest)) {
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
$Tmails[] = $mail;
}
}
elseif (email_valide($dest)) {
$Tmails[] = $dest;
}
}
$pieces_jointes = []; $pieces_jointes = [];
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
$options = $f($options, $auteur, $Tclient, $Tpdf); $options = $f($options, $destinataires, $Tclient, $Tpdf);
} }
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) { if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
$options = $f($options, $auteur, $Tclient, $Tpdf); $options = $f($options, $destinataires, $Tclient, $Tpdf);
} }
// les documents joints // les documents joints
@ -198,17 +242,17 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
]; ];
if ($f = charger_fonction('traiter', 'gamumail', true)) { if ($f = charger_fonction('traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $Tmails, $Tclient, $Tpdf, $redirect);
} }
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) { if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $Tmails, $Tclient, $Tpdf, $redirect);
} }
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
$ok = $envoyer_mail($pour, $sujet, $corps); $ok = $envoyer_mail($Tmails, $sujet, $corps);
if (!$ok) { if (!$ok) {
spip_log("Erreur d'envoi du mail : ","roc_mail"); spip_log("Erreur d'envoi du mail : ","gamumail");
spip_log($corps,"roc"); spip_log($corps,"gamumail");
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail"); $retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
} else { } else {
$retour['message_ok'] = _T('gamumail:mail_envoye'); $retour['message_ok'] = _T('gamumail:mail_envoye');
@ -227,9 +271,3 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
return $retour; return $retour;
} }
function gamumail_supprimer_si_vide($v){
if (!empty($v)) {
return $v;
}
}

View file

@ -7,6 +7,6 @@
</head> </head>
<body style="background-color:rgb(255, 255, 255)"> <body style="background-color:rgb(255, 255, 255)">
<div class="mail"> <div class="mail">
[(#LOGO_SITE_SPIP|image_reduire{200})] [<img src="(#LOGO_SITE_SPIP|image_reduire{200}|extraire_attribut{src}|url_absolue)" >]
<br> <br>
<br> <br>

View file

@ -17,6 +17,11 @@ function gamumail_TabClient($objet, $id_objet, $champ){
return compact('objet', 'id_objet', 'champ'); return compact('objet', 'id_objet', 'champ');
} }
function gamumail_supprimer_si_vide($v){
if (!empty($v)) {
return $v;
}
}
/** /**
* modèles pour surcharge des fonctions du CVT gamumail * modèles pour surcharge des fonctions du CVT gamumail
@ -25,9 +30,9 @@ function gamumail_TabClient($objet, $id_objet, $champ){
**/ **/
/** /**
* fonction appelée en fin de gamumail_charger_dist() * fonction appelée en fin de gamumail_charger_dist()
* *
* $valeurs = array( * @return $valeurs = array(
* "slug" => $slug, * "slug" => $slug,
* 'sujet' => $gamuMail['sujet'], * 'sujet' => $gamuMail['sujet'],
* 'texte' => $gamuMail['texte'], * 'texte' => $gamuMail['texte'],
@ -40,10 +45,8 @@ function gamumail_TabClient($objet, $id_objet, $champ){
* 'options' => $options * 'options' => $options
* ); * );
* *
* @return array $valeurs
*
**/ **/
function gamumail_charger_dist($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect) { function gamumail_charger_dist($valeurs, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect='') {
return $valeurs; return $valeurs;
} }
@ -54,7 +57,7 @@ function gamumail_charger_dist($valeurs, $options, $slug, $auteur, $Tclient, $Tp
* @return array $erreurs * @return array $erreurs
* *
**/ **/
function gamumail_verifier_dist($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect) { function gamumail_verifier_dist($erreurs, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect='') {
return $erreurs; return $erreurs;
} }
@ -63,7 +66,7 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $auteur, $Tclient, $T
* fonctions appelée en fin de gamumail_traiter_dist() * fonctions appelée en fin de gamumail_traiter_dist()
* *
* @param string $slug modele du mail a charger * @param string $slug modele du mail a charger
* @param int|string $auteur id_auteur ou email du destinataire * @param string $destinataires = adresses mails et id_auteurs séparées par ,
* @param array $Tclient [] ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] * @param array $Tclient [] ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
* @param array $Tpdf [] ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] * @param array $Tpdf [] ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
* @param string $redirect * @param string $redirect
@ -78,7 +81,7 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $auteur, $Tclient, $T
* ]; * ];
* *
**/ **/
function gamumail_traiter_dist($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect) { function gamumail_traiter_dist($corps, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect) {
$html = $corps['html']; $html = $corps['html'];
$html = str_replace('@@truc_a_remplacer@@', 'le machin qui remplace', $html); $html = str_replace('@@truc_a_remplacer@@', 'le machin qui remplace', $html);

View file

@ -7,11 +7,13 @@ if (!defined('_ECRIRE_INC_VERSION')){
* fonction pour préparer et envoyer un mail basé sur un slug gamumail * fonction pour préparer et envoyer un mail basé sur un slug gamumail
* *
* @param string $slug * @param string $slug
* @param string $destinataires (éventuellement plusieurs adresses séparées par ,) * @param string $destinataires = adresses mails et id_auteur séparées par ,
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
* @param array $options (au cas ...) * @param array $options (au cas ...)
* $options['debug' => true] pour afficher le $corps final sans envoyer le mail
* *
**/ **/
function envoyer_gamumail($slug, $destinataires, $options = []) { function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
include_spip('inc/texte'); include_spip('inc/texte');
include_spip('classes/facteur'); include_spip('classes/facteur');
@ -26,8 +28,8 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
// contenu // contenu
$res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"'); $res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"');
if ($res) { if ($res) {
$sujet = $res('sujet'); $sujet = $res['sujet'];
$html = propre($res('texte')); $html = propre($res['texte']);
$texte = facteur_mail_html2text($html); $texte = facteur_mail_html2text($html);
$id_docs = $res['id_docs']; $id_docs = $res['id_docs'];
} }
@ -37,32 +39,43 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
} }
// destinataires // destinataires
$pour = explode(',', $destinataires); $destinataires = explode(',', $destinataires);
$cc = explode(',', lire_config('gamumail/mail_cc')); $pour = array();
$cci = explode(',', lire_config('gamumail/mail_cci')); foreach ($destinataires as $dest) {
if (is_numeric($dest)) {
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
$pour[] = $mail;
}
}
elseif (email_valide($dest)) {
$pour[] = $dest;
}
}
function test_vide($elem) {
return ($elem != NULL AND $elem != '');
}
$cc = array_filter(explode(',', lire_config('gamumail/mail_cc')), 'test_vide');
$cci = array_filter(explode(',', lire_config('gamumail/mail_cci')), 'test_vide');
// si on a plusieurs destinataires, les passer en cci et mettre le compte expéditeur du site en to // si on a plusieurs destinataires, les passer en cci et mettre le compte expéditeur du site en to
if (count($pour) > 1) { if (count($pour) > 1) {
$cci = array_unique(array_merge($cci, $pour)); $cci = array_unique(array_merge($cci, $pour));
$pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))]; $pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))];
} }
// docs attachés // documents joints
function entier($val) {
return is_integer($val);
}
$Tid_doc = array_filter(explode(',', $id_docs), 'entier');
//$Tpdfs_ok = _request('Tpdfs_ok');
$pieces_jointes = []; $pieces_jointes = [];
/*
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { // filtrage des id_docs attachés au slug (ici on ne veut que des id_docs valides)
$options = $f($options, $auteur, $Tclient, $Tpdf); $Tid_doc = [];
$id_docs = array_filter(explode(',', $id_docs), 'is_numeric');
foreach ($id_docs as $doc) {
if ($res = sql_getfetsel('id_document', 'spip_documents', 'id_document='.$doc)) {
$Tid_doc[] = $doc;
}
} }
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) { // récup des paramètres des fichiers à attacher
$options = $f($options, $auteur, $Tclient, $Tpdf);
}
*/
// les documents joints
if (!empty($Tid_doc)) { if (!empty($Tid_doc)) {
foreach ($Tid_doc as $id_document) { foreach ($Tid_doc as $id_document) {
$Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document)); $Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document));
@ -70,7 +83,8 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
$extension = $Tdocument['extension']; $extension = $Tdocument['extension'];
if ($Tdocument['titre']) { if ($Tdocument['titre']) {
$nom_fichier = $Tdocument['titre'] .".".$extension; $nom_fichier = $Tdocument['titre'] .".".$extension;
} else { }
else {
$nom_fichier = basename($Tdocument['fichier']); $nom_fichier = basename($Tdocument['fichier']);
} }
$type_mime = bigup_get_mime_type_extension($extension); $type_mime = bigup_get_mime_type_extension($extension);
@ -84,6 +98,14 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
} }
/* /*
// les pdfs // les pdfs
$Tpdfs_ok = _request('Tpdfs_ok');
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
$options = $f($options, $auteur, $Tclient, $Tpdf);
}
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
$options = $f($options, $auteur, $Tclient, $Tpdf);
}
$Tpdf_dell = []; $Tpdf_dell = [];
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) { if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
if (array_key_exists('fichier', $Tpdf)) { if (array_key_exists('fichier', $Tpdf)) {
@ -136,7 +158,6 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
'cci' => $cci, 'cci' => $cci,
'pieces_jointes' => $pieces_jointes 'pieces_jointes' => $pieces_jointes
]; ];
if ($f = charger_fonction('traiter', 'gamumail', true)) { if ($f = charger_fonction('traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
} }
@ -144,11 +165,20 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
} }
// si debug on affiche sans envoyer le mail
if ($options['debug']) {
echo '$pour : ';
var_dump($pour);
echo '<br>$sujet: '.$sujet.'<br>$corps : ';
var_dump($corps);
die;
}
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
$ok = $envoyer_mail($pour, $sujet, $corps); $ok = $envoyer_mail($pour, $sujet, $corps);
if (!$ok) { if (!$ok) {
spip_log("Erreur d'envoi du mail : ","gamumail"); spip_log("Erreur d'envoi du mail : ","gamumail");
spip_log($corps,"roc"); spip_log($corps,"gamumail");
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail"); $retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
} else { } else {
$retour['message_ok'] = _T('gamumail:mail_envoye'); $retour['message_ok'] = _T('gamumail:mail_envoye');
@ -167,4 +197,4 @@ function envoyer_gamumail($slug, $destinataires, $options = []) {
*/ */
return $retour; return $retour;
} }

View file

@ -30,9 +30,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_aucun_gamumail' => 'Aucun gamumail', 'info_aucun_gamumail' => 'Aucun gamumail',
'info_gamumails_auteur' => 'Les gamumails de cet auteur', 'info_gamumails_auteur' => 'Les gamumails de cet auteur',
'info_nb_gamumails' => '@nb@ gamumails', 'info_nb_gamumails' => '@nb@ gamumails',
'id_destinataires_sans_mails' => 'Les id_auteur @ids_erreur@ n\'ont pas d\'adresse mail',
//MM //MM
"mail_envoye" => "Votre message a bien été envoyé", "mail_envoye" => "Votre message a bien été envoyé",
'mails_destinataires_en_erreur' => 'Les destinataires @mails_erreur@ ne sont pas des adresses mails valides',
// P // P
'pas_de_slug' => 'Pas de slug avec cet identifiant', 'pas_de_slug' => 'Pas de slug avec cet identifiant',