Browse Source

Amelioration de la fonction de test des mails : selection d'un article plus pertinente + option piece jointe pour pouvoir tester avec et sans

pull/13/head
Cerdic 8 months ago
parent
commit
cd535dfc96
  1. 2
      emails/test_email_html.html
  2. 2
      emails/test_email_texte.html
  3. 11
      formulaires/tester_facteur.html
  4. 51
      formulaires/tester_facteur.php
  5. 1
      lang/facteur_fr.php

2
emails/test_email_html.html

@ -4,7 +4,7 @@
<p><:facteur:version_html:></p>
<BOUCLE_art(ARTICLES){texte==<img}{0,1}>
<BOUCLE_art(ARTICLES){id_article}>
[(#TEXTE|image_reduire{550,0})]
<hr />
[(#NOTES|image_reduire{550,0})]

2
emails/test_email_texte.html

@ -3,7 +3,7 @@
<:facteur:version_texte:>
<BOUCLE_art(ARTICLES){texte==<img}{0,1}>
<BOUCLE_art(ARTICLES){id_article}>
[(#TEXTE|textebrut)]
</BOUCLE_art>
<BOUCLE_art2(ARTICLES){0,1}>

11
formulaires/tester_facteur.html

@ -22,6 +22,17 @@
<span class='erreur_message'>(#GET{erreurs})</span>
]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" placeholder="<:facteur:label_email_test_from_placeholder|attribut_html:>" [(#HTML5|et{#GET{obli}})required='required']/>
</div>
#SET{name,email_test_piece_jointe}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[
<span class='erreur_message'>(#GET{erreurs})</span>
]<div class="choix">
#SET{val,0}
<input type="hidden" name="#GET{name}" value="#GET{val}" />
#SET{val,1}
<input type="checkbox" name="#GET{name}" class="checkbox" id="#GET{name}_#GET{val}" value="#GET{val}" aria-describedby="#GET{name}_explication" [(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
<label for="#GET{name}_#GET{val}"><:facteur:label_email_test_avec_piece_jointe:></label>
</div>
</div>
#SET{name,email_test_important}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[
<span class='erreur_message'>(#GET{erreurs})</span>

51
formulaires/tester_facteur.php

@ -65,6 +65,9 @@ function formulaires_tester_facteur_traiter_dist() {
if ($from = _request('email_test_from')) {
$options['from'] = $from;
}
if (_request('email_test_piece_jointe')) {
$options['piece_jointe'] = true;
}
if (_request('email_test_important')) {
$options['important'] = true;
}
@ -106,26 +109,43 @@ function facteur_envoyer_mail_test($destinataire, $titre, &$message_html, $optio
$piece_jointe = array();
if (test_plugin_actif('medias')) {
if (test_plugin_actif('medias') and !empty($options['piece_jointe'])) {
include_spip('inc/documents');
// trouver une piece jointe dans les documents si possible, la plus legere possible, c'est juste pour le principe
$docs = sql_allfetsel('*', 'spip_documents', 'media='.sql_quote('file').' AND distant='.sql_quote('non').' AND brise=0','', 'taille', '0,10');
foreach ($docs as $doc) {
$file = get_spip_doc($doc['fichier']);
if (file_exists($file)) {
$mime = sql_getfetsel('mime_type', 'spip_types_documents', 'extension='.sql_quote($doc['extension']));
$piece_jointe = array(
'chemin' => $file,
'nom' => $doc['titre'] ? $doc['titre'] : basename($doc['fichier']),
'mime' => $mime,
);
break;
// mais de preference un pdf car ça trig moins les antispam qu'un fichier office par exemple
foreach (['pdf', '%'] as $ext) {
$docs = sql_allfetsel('*', 'spip_documents', 'extension LIKE ' . sql_quote($ext) . ' AND media='.sql_quote('file').' AND distant='.sql_quote('non').' AND brise=0','', 'taille', '0,10');
foreach ($docs as $doc) {
$file = get_spip_doc($doc['fichier']);
if (file_exists($file)) {
$mime = sql_getfetsel('mime_type', 'spip_types_documents', 'extension='.sql_quote($doc['extension']));
$piece_jointe = array(
'chemin' => $file,
'nom' => $doc['titre'] ? $doc['titre'] : basename($doc['fichier']),
'mime' => $mime,
);
break 2;
}
}
}
unset($options['piece_jointe']);
}
$message_html = recuperer_fond('emails/test_email_html', array('piece_jointe' => $piece_jointe));
$message_texte = recuperer_fond('emails/test_email_texte', array('piece_jointe' => $piece_jointe));
// trouver un article, de preference dans la langue du site, avec une image jointe
foreach ([$GLOBALS['meta']['langue_site'], '%'] as $lang) {
foreach (['%<img%', '%<emb%', '%<doc%', '%'] as $modele){
if ($modele === '%' and $lang !== '%') {
continue;
}
$id_article = sql_getfetsel('id_article', 'spip_articles', "statut='publie' AND lang LIKE ".sql_quote($lang). " AND texte LIKE ".sql_quote($modele), '', 'LENGTH(texte) DESC,id_article', '0,1');
if ($id_article) {
break 2;
}
}
}
$message_html = recuperer_fond('emails/test_email_html', array('piece_jointe' => $piece_jointe, 'id_article' => $id_article));
$message_texte = recuperer_fond('emails/test_email_texte', array('piece_jointe' => $piece_jointe, 'id_article' => $id_article));
$corps = array(
'html' => $message_html,
'texte' => $message_texte,
@ -140,6 +160,9 @@ function facteur_envoyer_mail_test($destinataire, $titre, &$message_html, $optio
$corps = array_merge($options, $corps);
}
// prefixer le titre par la date, c'est utile quand on debug et teste de nombreuses fois...
$titre = "[".date('Y-m-d H:i:s').'] ' . $titre;
// passer par envoyer_mail pour bien passer par les pipeline et avoir tous les logs
$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
try {

1
lang/facteur_fr.php

@ -63,6 +63,7 @@ Vérifiez votre fichier <tt>mes_options.php</tt>',
'info_envois_forces_vers_email' => 'Tous les envois sont forcés vers l’adresse <b>@email@</b> par la constante <tt>_TEST_EMAIL_DEST</tt>',
// L
'label_email_test_avec_piece_jointe' => 'Avec une pièce jointe',
'label_email_test_from' => 'Expéditeur',
'label_email_test_from_placeholder' => 'from@example.org (optionnel)',
'label_email_test_important' => 'Cet email est important',

Loading…
Cancel
Save