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',