diff --git a/formulaires/gamumail.php b/formulaires/gamumail.php index 5dce83f..6ae9016 100644 --- a/formulaires/gamumail.php +++ b/formulaires/gamumail.php @@ -8,21 +8,25 @@ include_spip('inc/filtres'); * formulaire générique pour envoyer des mails avec pieces attachés * * @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 $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 array $options * @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 = []; - if (intval($auteur)) { - $Tmails[] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($auteur)); - } elseif (is_string($auteur)) { - if (email_valide($auteur)) { - $Tmails[] = $auteur; + $destinataires = explode(',', $destinataires); + foreach ($destinataires as $dest) { + if (is_numeric($dest)) { + if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) { + $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)) { - $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)) { - $valeurs = $f($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); + $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } 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(); //champs obligatoire foreach (array ('pour', 'sujet', 'texte') as $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)) { - $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)) { - $erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect); + $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } 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('classes/facteur'); @@ -112,14 +145,25 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T $cc = explode(',', $cc); $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 = []; 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)) { - $options = $f($options, $auteur, $Tclient, $Tpdf); + $options = $f($options, $destinataires, $Tclient, $Tpdf); } // les documents joints @@ -198,17 +242,17 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T ]; 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)) { - $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/'); - $ok = $envoyer_mail($pour, $sujet, $corps); + $ok = $envoyer_mail($Tmails, $sujet, $corps); if (!$ok) { - spip_log("Erreur d'envoi du mail : ","roc_mail"); - spip_log($corps,"roc"); + spip_log("Erreur d'envoi du mail : ","gamumail"); + spip_log($corps,"gamumail"); $retour['message_erreur'] = _T("gamumail:erreur_envoi_mail"); } else { $retour['message_ok'] = _T('gamumail:mail_envoye'); @@ -227,9 +271,3 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T return $retour; } - -function gamumail_supprimer_si_vide($v){ - if (!empty($v)) { - return $v; - } -} diff --git a/gamumail/html_header.html b/gamumail/html_header.html index b8757ff..4a2c04a 100644 --- a/gamumail/html_header.html +++ b/gamumail/html_header.html @@ -7,6 +7,6 @@
- [(#LOGO_SITE_SPIP|image_reduire{200})] + []

diff --git a/gamumail_fonctions.php b/gamumail_fonctions.php index 2530586..5f513e4 100644 --- a/gamumail_fonctions.php +++ b/gamumail_fonctions.php @@ -17,6 +17,11 @@ function gamumail_TabClient($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 @@ -25,9 +30,9 @@ function gamumail_TabClient($objet, $id_objet, $champ){ **/ /** - * fonction appelée en fin de gamumail_charger_dist() - * - * $valeurs = array( + * fonction appelée en fin de gamumail_charger_dist() + * + * @return $valeurs = array( * "slug" => $slug, * 'sujet' => $gamuMail['sujet'], * 'texte' => $gamuMail['texte'], @@ -40,10 +45,8 @@ function gamumail_TabClient($objet, $id_objet, $champ){ * '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; } @@ -54,7 +57,7 @@ function gamumail_charger_dist($valeurs, $options, $slug, $auteur, $Tclient, $Tp * @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; } @@ -63,7 +66,7 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $auteur, $Tclient, $T * fonctions appelée en fin de gamumail_traiter_dist() * * @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 $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 @@ -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 = str_replace('@@truc_a_remplacer@@', 'le machin qui remplace', $html); diff --git a/inc/envoyer_gamumail.php b/inc/envoyer_gamumail.php index 0e17911..8a22a01 100644 --- a/inc/envoyer_gamumail.php +++ b/inc/envoyer_gamumail.php @@ -7,11 +7,13 @@ if (!defined('_ECRIRE_INC_VERSION')){ * fonction pour préparer et envoyer un mail basé sur un slug gamumail * * @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 où...) + * $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('classes/facteur'); @@ -26,8 +28,8 @@ function envoyer_gamumail($slug, $destinataires, $options = []) { // contenu $res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"'); if ($res) { - $sujet = $res('sujet'); - $html = propre($res('texte')); + $sujet = $res['sujet']; + $html = propre($res['texte']); $texte = facteur_mail_html2text($html); $id_docs = $res['id_docs']; } @@ -37,32 +39,43 @@ function envoyer_gamumail($slug, $destinataires, $options = []) { } // destinataires - $pour = explode(',', $destinataires); - $cc = explode(',', lire_config('gamumail/mail_cc')); - $cci = explode(',', lire_config('gamumail/mail_cci')); + $destinataires = explode(',', $destinataires); + $pour = array(); + 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 if (count($pour) > 1) { $cci = array_unique(array_merge($cci, $pour)); $pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))]; } - // docs attachés - function entier($val) { - return is_integer($val); - } - $Tid_doc = array_filter(explode(',', $id_docs), 'entier'); - //$Tpdfs_ok = _request('Tpdfs_ok'); - + // documents joints $pieces_jointes = []; -/* - if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { - $options = $f($options, $auteur, $Tclient, $Tpdf); + + // filtrage des id_docs attachés au slug (ici on ne veut que des id_docs valides) + $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)) { - $options = $f($options, $auteur, $Tclient, $Tpdf); - } -*/ - // les documents joints + // récup des paramètres des fichiers à attacher if (!empty($Tid_doc)) { foreach ($Tid_doc as $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']; if ($Tdocument['titre']) { $nom_fichier = $Tdocument['titre'] .".".$extension; - } else { + } + else { $nom_fichier = basename($Tdocument['fichier']); } $type_mime = bigup_get_mime_type_extension($extension); @@ -84,6 +98,14 @@ function envoyer_gamumail($slug, $destinataires, $options = []) { } /* // 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 = []; if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) { if (array_key_exists('fichier', $Tpdf)) { @@ -136,7 +158,6 @@ function envoyer_gamumail($slug, $destinataires, $options = []) { 'cci' => $cci, 'pieces_jointes' => $pieces_jointes ]; - if ($f = charger_fonction('traiter', 'gamumail', true)) { $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); } + // si debug on affiche sans envoyer le mail + if ($options['debug']) { + echo '$pour : '; + var_dump($pour); + echo '
$sujet: '.$sujet.'
$corps : '; + var_dump($corps); + die; + } + $envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $ok = $envoyer_mail($pour, $sujet, $corps); if (!$ok) { spip_log("Erreur d'envoi du mail : ","gamumail"); - spip_log($corps,"roc"); + spip_log($corps,"gamumail"); $retour['message_erreur'] = _T("gamumail:erreur_envoi_mail"); } else { $retour['message_ok'] = _T('gamumail:mail_envoye'); @@ -167,4 +197,4 @@ function envoyer_gamumail($slug, $destinataires, $options = []) { */ return $retour; -} \ No newline at end of file +} diff --git a/lang/gamumail_fr.php b/lang/gamumail_fr.php index 0b0fbd3..64f80bf 100644 --- a/lang/gamumail_fr.php +++ b/lang/gamumail_fr.php @@ -30,9 +30,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_aucun_gamumail' => 'Aucun gamumail', 'info_gamumails_auteur' => 'Les gamumails de cet auteur', 'info_nb_gamumails' => '@nb@ gamumails', + 'id_destinataires_sans_mails' => 'Les id_auteur @ids_erreur@ n\'ont pas d\'adresse mail', //MM "mail_envoye" => "Votre message a bien été envoyé", + 'mails_destinataires_en_erreur' => 'Les destinataires @mails_erreur@ ne sont pas des adresses mails valides', // P 'pas_de_slug' => 'Pas de slug avec cet identifiant',