passage dans l'array des PDFs générés à attacher au mail

This commit is contained in:
clem 2020-09-12 23:09:49 +02:00
parent 147bc80a76
commit cb96f9f1b1
8 changed files with 100 additions and 60 deletions

View file

@ -59,7 +59,6 @@
.tag-editor ::-ms-clear { .tag-editor ::-ms-clear {
display: none; display: none;
} }
/* tag style */ /* tag style */
.tag-editor .tag-editor-tag { .tag-editor .tag-editor-tag {
/*padding-left: 5px; color: #46799b; background: #e0eaf1; white-space: nowrap;*/ /*padding-left: 5px; color: #46799b; background: #e0eaf1; white-space: nowrap;*/
@ -72,7 +71,6 @@
cursor: pointer; cursor: pointer;
border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px;
} }
/* delete icon */ /* delete icon */
/*.tag-editor .tag-editor-delete { background: #e0eaf1; cursor: pointer; border-radius: 0 2px 2px 0; padding-left: 3px; padding-right: 4px; }*/ /*.tag-editor .tag-editor-delete { background: #e0eaf1; cursor: pointer; border-radius: 0 2px 2px 0; padding-left: 3px; padding-right: 4px; }*/
.tag-editor .tag-editor-delete { .tag-editor .tag-editor-delete {
@ -101,7 +99,6 @@
visibility: hidden; visibility: hidden;
cursor: text; cursor: text;
} }
.tag-editor .tag-editor-tag.active { .tag-editor .tag-editor-tag.active {
background: none !important; background: none !important;
} }
@ -163,31 +160,38 @@
.editer_pour label { .editer_pour label {
width: 50px; width: 50px;
} }
.editer_cc { .editer_cc {
display: flex; display: flex;
} }
.editer_cc label { .editer_cc label {
width: 50px; width: 50px;
} }
.editer_cci { .editer_cci {
display: flex; display: flex;
} }
.editer_cci label { .editer_cci label {
width: 50px; width: 50px;
} }
.reponse_formulaire { .reponse_formulaire {
padding: 1rem; padding: 1rem;
margin-bottom: 2rem; margin-bottom: 2rem;
font-weight: bold; font-weight: bold;
} }
.reponse_formulaire_erreur { .reponse_formulaire_erreur, .editer .erreur_message {
background-color: #f7d1d1; background-color: #f7d1d1;
border: solid 2px #f00; border: solid 2px #f00;
display: block;
} }
.reponse_formulaire_ok { .reponse_formulaire_ok {
background-color: #c4ecd6; background-color: #c4ecd6;
border: solid 2px #080; border: solid 2px #080;
} }
.remplacements_slugs {
margin-top: 3rem;
}
.formulaire_gamumail .boutons {
margin-top: 3rem;
}
.formulaire_gamumail .btn {
font-size: 3rem;
}

View file

@ -1,6 +1,6 @@
#CACHE{0} #CACHE{0}
<link rel="stylesheet" href="[(#CHEMIN{css/gamumail.css}|timestamp)]" type="text/css" media="screen" charset="utf-8"> <link rel="stylesheet" href="[(#CHEMIN{css/gamumail.css}|timestamp)]" type="text/css" media="screen" charset="utf-8" />
<div class="formulaire_spip formulaire_#FORM"> <div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
@ -91,21 +91,16 @@
</div> </div>
</B_pdf> </B_pdf>
#SET{id_gamumail,0} #SET{name,docs_spip}
#SET{name,Tid_doc} <h2><:gamumail:documents_attaches:></h2>
<BOUCLE_slug(GAMUMAILS){slug}{tout}> #SET{id_gamumail,#ID_GAMUMAIL} </BOUCLE_slug>
<B_doc>
<h2><:gamumail:autres_fichiers_attaches:></h2>
<div class="editer_groupe"> <div class="editer_groupe">
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"} <div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <div class="choix">
<BOUCLE_doc(DOCUMENTS){id_gamumail=#GET{id_gamumail}}> [<span class="erreur_message">(#GET{erreurs})</span>]
<div class="choix"> <label for="#GET{name}"><:gamumail:id_docs_attaches:></label>
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="#ID_DOCUMENT" id="#GET{name}_#ID_DOCUMENT" checked="checked" > <input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" >
<label for="#GET{name}_#ID_DOCUMENT">[(#TITRE|sinon{#FICHIER|basename})]</label> </div>
</div>
</BOUCLE_doc>
</div> </div>
</div> </div>
</B_doc> </B_doc>

View file

@ -57,7 +57,7 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
} }
} }
$gamuMail = sql_fetsel('sujet, texte', 'spip_gamumails', 'slug='.sql_quote($slug)); $gamuMail = sql_fetsel('sujet, texte, id_docs', 'spip_gamumails', 'slug='.sql_quote($slug));
$valeurs = array( $valeurs = array(
"slug" => $slug, "slug" => $slug,
'sujet' => $gamuMail['sujet'], 'sujet' => $gamuMail['sujet'],
@ -67,7 +67,7 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
'cci' => lire_config('gamumail/mail_cci'), 'cci' => lire_config('gamumail/mail_cci'),
'TFichierpdfs' => $TFichierPdf, 'TFichierpdfs' => $TFichierPdf,
'Tpdfs_ok' => [], 'Tpdfs_ok' => [],
'Tid_doc' => [], 'docs_spip' => $gamuMail['id_docs'],
'options' => $options 'options' => $options
); );
@ -117,6 +117,24 @@ function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient
$erreurs['pour'] .= _T("gamumail:mails_destinataires_en_erreur", ['mails_erreur' => join(', ', $Tmails_erreur)]); $erreurs['pour'] .= _T("gamumail:mails_destinataires_en_erreur", ['mails_erreur' => join(', ', $Tmails_erreur)]);
} }
// les id_document attachés sont-ils OK ?
$Tid_docs = [];
if (_request('docs_spip') != '') {
$Tid_docs = explode(',', _request('docs_spip'));
}
if (count($Tid_docs)) {
$Tid_docs_erreurs = [];
foreach($Tid_docs as $id_doc) {
if (intval($id_doc) != $id_doc
OR !sql_getfetsel('id_document', 'spip_documents', 'id_document='.$id_doc)) {
$Tid_docs_erreurs[] = $id_doc;
}
}
if (count($Tid_docs_erreurs)) {
$erreurs['docs_spip'] = _T("gamumail:id_docs_en_erreur", ['id_docs_erreurs' => join(', ', $Tid_docs_erreurs)]);
}
}
// surcharges // surcharges
if ($f = charger_fonction('verifier', 'gamumail', true)) { if ($f = charger_fonction('verifier', 'gamumail', true)) {
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
@ -139,7 +157,7 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
$cci = _request('cci'); $cci = _request('cci');
$sujet = _request('sujet'); $sujet = _request('sujet');
$html = propre(_request('texte')); $html = propre(_request('texte'));
$Tid_doc = _request('Tid_doc'); $docs_spip = _request('docs_spip');
$Tpdfs_ok = _request('Tpdfs_ok'); $Tpdfs_ok = _request('Tpdfs_ok');
$texte = facteur_mail_html2text($html); $texte = facteur_mail_html2text($html);
@ -147,6 +165,8 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
$cc = explode(',', $cc); $cc = explode(',', $cc);
$cci = explode(',', $cci); $cci = explode(',', $cci);
$docs_spip = ($docs_spip != '' ? explode(',', $docs_spip) : []);
$Tmails = []; $Tmails = [];
foreach ($pour as $dest) { foreach ($pour as $dest) {
if (is_numeric($dest)) { if (is_numeric($dest)) {
@ -169,8 +189,8 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
} }
// les documents joints // les documents joints
if (!empty($Tid_doc)) { if (!empty($docs_spip)) {
foreach ($Tid_doc as $id_document) { foreach ($docs_spip 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));
$destination = _DIR_IMG.$Tdocument['fichier']; $destination = _DIR_IMG.$Tdocument['fichier'];
$extension = $Tdocument['extension']; $extension = $Tdocument['extension'];
@ -260,7 +280,7 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
*/ */
// appel d'une éventuelle fonction de traitement du contenu spécifique du slug // appel d'une éventuelle fonction de traitement du contenu spécifique du slug
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) { if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $Tmails, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $Tmails);
} }
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');

View file

@ -72,11 +72,9 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $destinataires='', $T
/** /**
* fonctions appelée en fin de gamumail_traiter_dist() * fonctions appelée en fin de gamumail_traiter_dist()
* *
* @param array $corps[] => cf return
* @param string $slug modele du mail a charger * @param string $slug modele du mail a charger
* @param string $destinataires = adresses mails et id_auteurs séparées par , * @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
* @param array $options * @param array $options
* *
* @return array $corps * @return array $corps
@ -84,11 +82,12 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $destinataires='', $T
* 'html' => $html, * 'html' => $html,
* 'texte' => $texte, * 'texte' => $texte,
* 'cc' => $cc, * 'cc' => $cc,
* 'cci' => $cci * 'cci' => $cci,
* 'pieces_jointes' => $pieces_jointes
* ]; * ];
* *
**/ **/
function gamumail_traiter_dist($corps, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect) { function gamumail_traiter_dist($corps, $options, $slug, $destinataires='') {
$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

@ -3,7 +3,6 @@ if (!defined('_ECRIRE_INC_VERSION')){
return; return;
} }
function inc_charger_pdf_dist($fichier_pdf, $contexte = []){ function inc_charger_pdf_dist($fichier_pdf, $contexte = []){
$login = lire_config('curl_login'); $login = lire_config('curl_login');
$password = lire_config('curl_mdp'); $password = lire_config('curl_mdp');

View file

@ -12,6 +12,13 @@ if (!defined('_ECRIRE_INC_VERSION')){
* @param array $options : * @param array $options :
* $options['debug' => true] pour afficher le $corps final sans envoyer le mail * $options['debug' => true] pour afficher le $corps final sans envoyer le mail
* $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un * $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un
* $options['pdfs' => [...]] array des fichiers PDF générés à attacher dont les éléments peuvent être :
* - soit un nom de squelette PDF
* - soit un array avec 3 éléments (seul le 1er est obligatoire):
* [ 'fichier' => 'squelette_PDF',
* 'contexte' => ['parametre_url_1' => 'valeur_1', 'parametre_url_2' => 'valeur_2', ...]
* 'nom' => 'nom_fichier_attache' ]
* $options['args' => ['param_1' => 'valeur_1, 'param_2' => 'valeur_2', ...]]
* *
**/ **/
function inc_envoyer_gamumail($slug, $destinataires, $options = []) { function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
@ -38,7 +45,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
return $retour; return $retour;
} }
// destinataires // destinataires (id_auteur ou mails) => $pour[] est un array avec les adresses mails valides
if (!is_array($destinataires)) { if (!is_array($destinataires)) {
$destinataires = explode(',', $destinataires); $destinataires = explode(',', $destinataires);
} }
@ -77,7 +84,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
$Tid_doc[] = $doc; $Tid_doc[] = $doc;
} }
} }
// récup des paramètres des fichiers à attacher // récup des paramètres des docs à attacher
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));
@ -98,32 +105,43 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
]; ];
} }
} }
/*
// les pdfs // les pdfs
$Tpdfs_ok = _request('Tpdfs_ok'); if (isset($options['pdfs'])) {
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { $Tpdfs = $options['pdfs'];
$options = $f($options, $auteur, $Tclient, $Tpdf); if (!is_array($Tpdfs)) {
} $Tpdfs = explode(',', $Tpdfs);
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) { }
$options = $f($options, $auteur, $Tclient, $Tpdf); $Tpdfs = array_filter($Tpdfs, function($p) {
} return $p != '';
});
$Tpdf_dell = []; // approximation pour passage dans les fonctions traiter_av_pdf() :
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) { // si plusieurs destinataires dans $pour[], on utilise le premier comme 2ème arg ($auteur)
if (array_key_exists('fichier', $Tpdf)) { if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
$Tpdf = [$Tpdf]; $options = $f($options, $pour[0], [], $Tpdfs);
}
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
$options = $f($options, $pour[0], [], $Tpdfs);
} }
$recup_pdf = charger_fonction('charger_pdf','inc'); $Tpdf_dell = [];
foreach ($Tpdfs_ok as $pdf) { if (!empty($Tpdfs) and is_array($Tpdfs)) {
foreach ($Tpdf as $p) { foreach ($Tpdfs as $pdf) {
if ($p['fichier'] === $pdf) { if (!is_array($pdf)) {
$c = $p['contexte']; $sq_pdf = $pdf;
$nom = $p['nom']; $context = [];
$nom = $pdf;
} }
elseif (array_key_exists('fichier', $pdf)) {
$sq_pdf = $pdf['fichier'];
$context = array_key_exists('context', $pdf) ? $pdf['context'] : [];
$nom = array_key_exists('nom', $pdf) ? $pdf['nom'] : $pdf;
}
else break;
} }
$pdf = $recup_pdf($pdf, $c); $recup_pdf = charger_fonction('charger_pdf','inc');
$pdf = $recup_pdf($sq_pdf, $context);
$nom_fichier = $nom.'.pdf'; $nom_fichier = $nom.'.pdf';
$destination = _DIR_TMP.basename($nom_fichier); $destination = _DIR_TMP.basename($nom_fichier);
$Tpdf_dell[] = $destination; $Tpdf_dell[] = $destination;
@ -136,7 +154,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
]; ];
} }
} }
*/
$html_header = ''; $html_header = '';
if (find_in_path('gamumail/'.$slug .'_html_header.html')) { if (find_in_path('gamumail/'.$slug .'_html_header.html')) {
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options); $html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
@ -156,7 +174,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
// pipeline pour les traitement du contenu des slugs spécifiques de chaque plugins // pipeline pour les traitement du contenu des slugs spécifiques de chaque plugins
$args = $options; $args = $options;
$args['slug'] = $slug; $args['slug'] = $slug;
$args['destinataires'] = $destinataires; $args['destinataires'] = $pour;
$html = pipeline('remplacements_slug', array( $html = pipeline('remplacements_slug', array(
'args' => $args, 'args' => $args,
'data' => $html 'data' => $html
@ -177,7 +195,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
*/ */
// appel d'une éventuelle fonction de traitement du contenu spécifique du slug // appel d'une éventuelle fonction de traitement du contenu spécifique du slug
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) { if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $pour);
} }
// si debug on affiche sans envoyer le mail // si debug on affiche sans envoyer le mail

View file

@ -25,9 +25,9 @@
<div class="bloc_choix_slug"> <div class="bloc_choix_slug">
<h3><:gamumail:choix_slug:></h3> <h3><:gamumail:choix_slug:></h3>
<select id="choix_slug" name="choix_slug"> <select id="choix_slug" name="choix_slug">
<option value=""><:gamumail:choisissez_un_modele:></option> <option value=""[ (#ENV{slug}|non) selected]><:gamumail:choisissez_un_modele:></option>
<BOUCLE_slugs(GAMUMAILS){statut=publie}{par titre}> <BOUCLE_slugs(GAMUMAILS){statut=publie}{par titre}>
<option value="#SLUG"[ (#SLUG|=={#ENV{slug}}|oui) selected="selected"]>#TITRE</option> <option value="#SLUG"[ (#SLUG|=={#ENV{slug}}|oui) selected]>#TITRE</option>
</BOUCLE_slugs> </BOUCLE_slugs>
</select> </select>
</div> </div>

View file

@ -21,6 +21,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'choix_slug' => 'Choix du modèle', 'choix_slug' => 'Choix du modèle',
'contenu_mail' => 'Contenu du mail', 'contenu_mail' => 'Contenu du mail',
// D
'documents_attaches' => 'Documents attachés',
//EE //EE
'envoyer' => 'Envoyer', 'envoyer' => 'Envoyer',
"erreur_envoi_mail" => "Erreur dans l'envoi de votre mail", "erreur_envoi_mail" => "Erreur dans l'envoi de votre mail",
@ -37,6 +40,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'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', 'id_destinataires_sans_mails' => 'Les id_auteur @ids_erreur@ n\'ont pas d\'adresse mail',
'id_docs_attaches' => 'ID documents séparés par une virgule',
'id_docs_en_erreur' => 'Documents en erreur : @id_docs_erreurs@',
//MM //MM
"mail_envoye" => "Votre message a bien été envoyé", "mail_envoye" => "Votre message a bien été envoyé",