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
*
* @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;
}
}

View file

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

View file

@ -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
@ -27,7 +32,7 @@ function gamumail_TabClient($objet, $id_objet, $champ){
/**
* fonction appelée en fin de gamumail_charger_dist()
*
* $valeurs = array(
* @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);

View file

@ -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 ...)
* $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 '<br>$sujet: '.$sujet.'<br>$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');

View file

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