amélioration du système de remplacements @@truc_a_remplacer@@ pour permettre à Gamumail de fournir des remplacement génériques (via inc/gamumail_remplacements.php). Passage de la doc intégrée des remplacements via ['remplacements_gamumail'] pour permettre à chaque plugin de fournir la doc de ses remplacements

This commit is contained in:
cy_altern 2021-04-25 21:44:48 +02:00
parent 17ba9f097a
commit ec5dcd9fe8
7 changed files with 87 additions and 7 deletions

View file

@ -46,9 +46,15 @@ ex de fichier :
* gamumail/SLUG_fichier.html -> à la fin du formulaire * gamumail/SLUG_fichier.html -> à la fin du formulaire
### aide à la rédaction du contenu: ### aide à la rédaction du contenu:
- le fichier **gamumail/remplacement_slugs.html** (surchargeable donc) s'affiche en bas de la page de configuration des modèles **inclure/gamumail_config.html** - le fichier **gamumail/remplacement_slugs.html** s'affiche en bas de la page de configuration des modèles **inclure/gamumail_config.html**
et du formulaire d'envoi **formulaires/gamumail.html** : il permet de lister les remplacements effectués pour **tous les modèles** et du formulaire d'envoi **formulaires/gamumail.html** : il permet de lister les remplacements effectués pour **tous les modèles** qui sont :
(= ceux fournis par le pipeline **remplacement_slugs**, cf ci-dessous) - les génériques fournis par Gamumail par la fonction `inc_gamumail_remplacements_dist()` du fichier `inc/gamumail_remplacements.php`
- ceux fournis par les plugins via le pipeline **remplacement_slugs** (cf ci-dessous)
- pour documenter les remplacements (pied de la page gamumail_config.html), chaque plugin doit renseigner ses remplacements dans l'array global `$GLOBALS['remplacements_gamumail']`
Exemple dans un fichier `prefixe_fonctions.php` :
```php
$GLOBALS['remplacements_gamumail']['@@num_facture@@'] = 'numéro de la facture';
```
- une page de test des slugs est fournie à l'URL **...?page=test_slug&slug=mail_libre&dest=27** - une page de test des slugs est fournie à l'URL **...?page=test_slug&slug=mail_libre&dest=27**
### exemple de page d'envoi de mail en choisissant un slug parmi ceux existant : ### exemple de page d'envoi de mail en choisissant un slug parmi ceux existant :

View file

@ -6,7 +6,9 @@
<div class="remplacements_slugs"> <div class="remplacements_slugs">
<h3 class="spip"><:gamumail:remplacements_disponibles:></h3> <h3 class="spip"><:gamumail:remplacements_disponibles:></h3>
<ul class=""> <ul class="">
<li><strong>@@exemple_chaine@@</strong> : remplacement de la chaine</li> <BOUCLE_remplace(DATA){source tableau, #VAL|afficher_remplacements}>
<li><strong>[(#CLE)]</strong> : [(#VALEUR)]</li>
</BOUCLE_remplace>
</ul> </ul>
<em><:gamumail:avertissement_remplacements:></em> <em><:gamumail:avertissement_remplacements:></em>
</div> </div>

View file

@ -90,7 +90,6 @@ function gamumail_verifier_dist($erreurs, $options, $slug, $destinataires='', $T
function gamumail_traiter_dist($corps, $options, $slug, $destinataires='') { function gamumail_traiter_dist($corps, $options, $slug, $destinataires='') {
$html = $corps['html']; $html = $corps['html'];
$html = gamumail_remplacer_modele($html, '@@truc_a_remplacer@@', 'le machin qui remplace');
include_spip('classes/facteur'); include_spip('classes/facteur');
$texte = facteur_mail_html2text($html); $texte = facteur_mail_html2text($html);
$corps['html'] = $html; $corps['html'] = $html;
@ -99,7 +98,6 @@ function gamumail_traiter_dist($corps, $options, $slug, $destinataires='') {
return $corps; return $corps;
} }
function gamumail_remplacer_modele($modele, $val, $texte){ function gamumail_remplacer_modele($modele, $val, $texte){
if ($texte and $modele and $val) { if ($texte and $modele and $val) {
return str_replace('@@'.$modele.'@@', $val, $texte); return str_replace('@@'.$modele.'@@', $val, $texte);
@ -107,3 +105,21 @@ function gamumail_remplacer_modele($modele, $val, $texte){
return $texte; return $texte;
} }
/**
* pour la doc fournie par inclure/remplacements_slugs.html
* $GLOBALS['remplacements_gamumail'] est l'array global des remplacements dans les slugs (sera complété avec les remplacements des plugins)
* de la forme : ['@@truc_a_remplacer_1@@' => 'le machin qui remplace 1', '@@truc_a_remplacer_2@@' => _T('gamumail:chaine_de_langue_2')...];
*
**/
$GLOBALS['remplacements_gamumail'] = [
'@@nom@@' => _T('gamumail:nom'),
'@@url_site@@' => _T('gamumail:url_site'),
'@@url_raz_passe@@' => _T('gamumail:url_raz_passe'),
];
/**
* le filtre pour retourner l'array des remplacements
**/
function afficher_remplacements() {
return $GLOBALS['remplacements_gamumail'];
}

View file

@ -20,3 +20,4 @@ function crayons_determine_input_mode_type_gamumail($type, $champ, $sqltype) {
return in_array($champ, $Ttextarea) ? 'texte' : 'ligne'; return in_array($champ, $Ttextarea) ? 'texte' : 'ligne';
} }

View file

@ -171,7 +171,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
} }
$html = $html_header . $html . $html_footer; $html = $html_header . $html . $html_footer;
// pipeline pour les traitement du contenu des slugs spécifiques de chaque plugins // pipeline pour les remplacements du contenu des slugs spécifiques de chaque plugins
$args = $options; $args = $options;
$args['slug'] = $slug; $args['slug'] = $slug;
$args['destinataires'] = $pour; $args['destinataires'] = $pour;
@ -179,6 +179,11 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
'args' => $args, 'args' => $args,
'data' => $html 'data' => $html
)); ));
// traitement des remplacements génériques fournis par Gamumail
$remplacement_generiques = charger_fonction('gamumail_remplacements', 'inc');
$html = $remplacement_generiques($args, $html);
$texte = facteur_mail_html2text($html); $texte = facteur_mail_html2text($html);
$corps = [ $corps = [
@ -209,6 +214,7 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
echo '<br>$corps : '; echo '<br>$corps : ';
var_dump($corps); var_dump($corps);
$ok = true; $ok = true;
exit;
} }
else { else {
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');

View file

@ -0,0 +1,42 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* fonction pour les remplacements génériques fournis par gamumail
*
* @param array $args = ['slug' => $slug, 'destinataires' => $pour, [$options]]
* @param string $data = $html
*
* @return $html
*
**/
function inc_gamumail_remplacements_dist($args, $html) {
/**
* @@nom@@ => Prenom Nom | Nom (gère la présence/absence du champ prenom dans spip_auteurs)
**/
$nom = sql_getfetsel('nom', 'spip_auteurs', 'email='.sql_quote($args['destinataires'][0]));
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('spip_auteurs');
if (array_key_exists('prenom', $desc['field'])
and $prenom = sql_getfetsel('prenom', 'spip_auteurs', 'email='.sql_quote($args['destinataires'][0]))) {
$nom = $prenom.' '.$nom;
}
$html = gamumail_remplacer_modele('nom', ucwords($nom), $html);
/**
* @@url_site@@ => URL du site
**/
$url_site = lire_config('adresse_site');
$html = gamumail_remplacer_modele('url_site', $url_site, $html);
/**
* @@url_raz_passe@@ => URL de la page de récupération de mot de passe
**/
$html = gamumail_remplacer_modele('url_raz_passe', $url_site.'?page=spip_pass', $html);
return $html;
}

View file

@ -62,6 +62,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'modele_masquer' => 'Masquer le modèle', 'modele_masquer' => 'Masquer le modèle',
'modele_afficher' => 'Afficher le modèle', 'modele_afficher' => 'Afficher le modèle',
// N
'nom' => 'Prénom Nom du destinataire (ou Nom si pas de champ "prenom")',
// O // O
'objet' => 'Objet', 'objet' => 'Objet',
@ -93,6 +96,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'titre_logo_gamumail' => 'Logo de ce gamumail', 'titre_logo_gamumail' => 'Logo de ce gamumail',
'titre_objets_lies_gamumail' => 'Liés à ce gamumail', 'titre_objets_lies_gamumail' => 'Liés à ce gamumail',
// U
'url_site' => 'URL du site',
'url_raz_passe' => 'URL de la page de récupération de mot de passe',
// V // V
'visibilite_public' => 'Disponible dans la liste des modèles', 'visibilite_public' => 'Disponible dans la liste des modèles',
); );