Changeset 51624 in spip-zone


Ignore:
Timestamp:
Sep 19, 2011, 10:37:02 PM (8 years ago)
Author:
jluc@…
Message:

Permettre une personnalisation poussée des lettres : introduction des filtres "à la spip 1.7" (cad : sans paramètres)
En plus des %%CHAMP%% et %%CHAMP|sinon%% historiques, les raccourcis suivants sont désormais traités dans les textes des lettres : %%[texte avant (#CHAMP|filtre ou valeur sinon) texte apres]%%

C'est surtout utile avec l'API delivrer_hors_abo qui peut passer de nombreux %%champs%% aux lettres.

Pour l'instant, les filtres ne peuvent pas recevoir de paramètre et il ne peut y avoir de chaînage des filtres (au besoin, il suffit d'en définir un composé)

Location:
_plugins_/spip-lettres
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-lettres/branches/spip-lettres-4/lettres_fonctions.php

    r49186 r51624  
    7070
    7171
     72        // Traiter les raccourcis au moment de l'envoi, pour plus grande personnalisation du mail
     73        // %%CHAMP%%
     74        // %%CHAMP|texte sinon%%
     75        // %%[texte avant(#CHAMP|filtre ou valeur sinon) texte après]%%
    7276        function lettres_remplacer_raccourci($raccourci, $valeur, $texte) {
    7377                $texte = str_replace(' !', '!', $texte);
    7478                $texte = str_replace(' !', '!', $texte);
    75                 $motif_complexe = '`%%'.strtoupper($raccourci).'\|([^%]+)%%`';
    76                 $motif_simple = '`%%'.strtoupper($raccourci).'%%`';
     79               
     80                $$raccourci = strtoupper($raccourci);
     81               
     82                // i: insensible à la casse, s : capturer les fins de lignes. U : ungreedy
     83                $motif_simple = "`%%$raccourci%%`i";
     84                $motif_complexe = "`%%$raccourci\|([^%]+)%%`i";
     85                $motif_calcul = "`%%\[(.*)\(#$raccourci(\|.*)\)(.*)\]%%`isU";
     86
     87                if (preg_match_all($motif_calcul, $texte, $regs, PREG_SET_ORDER)) {
     88                        foreach ($regs as $r) {
     89                                $avant = $r[1];
     90                                $pipe = $r[2];
     91
     92                                $apres = $r[3];
     93                                $cherche = $r[0];
     94                               
     95                                if ($pipe) {
     96                                        $filtre = trim($sinon=substr($pipe,1));
     97                                        if (function_exists($filtre))
     98                                                $remplace = $filtre($valeur);
     99                                        else
     100                                                $remplace = ($valeur ? $valeur : $sinon); // homogénéïté avec motif_complexe, surtout utile pour faire un sinon alors qu'il n'y a pas d'arguments pour les filtres
     101                                }
     102                                else
     103                                        $remplace = $valeur;
     104
     105                                if ($remplace)
     106                                        $texte = str_replace($cherche, $avant.$remplace.$apres, $texte);
     107                                else $texte = str_replace($cherche, "", $texte);
     108                        }
     109                }
     110
    77111                if (preg_match_all($motif_complexe, $texte, $regs, PREG_SET_ORDER)) {
    78112                        foreach ($regs as $r) {
     
    90124                                $cherche = $r[0];
    91125                                $remplace = $valeur;
    92                                 $texte = str_replace($cherche, $remplace, $texte);
     126                                $texte = str_replace ($cherche, $remplace, $texte);
    93127                        }
    94128                }
     
    96130        }
    97131
    98 
     132       
    99133        function lettres_rubrique_autorisee($id_rubrique) {
    100134                return sql_countsel('spip_themes', 'id_rubrique='.intval($id_rubrique));
  • _plugins_/spip-lettres/branches/spip-lettres-4/plugin.xml

    r51578 r51624  
    33        <nom>SPIP-Lettres</nom>
    44        <auteur>[Art&#233;go->http://www.artego.fr], Cedric Morin [->www.yterium.net]</auteur>
    5         <version>4.6.0</version>
     5        <version>4.7.0</version>
    66        <version_base>4.4</version_base>
    77        <etat>dev</etat>
  • _plugins_/spip-lettres/trunk/lettres_fonctions.php

    r49186 r51624  
    6969        }
    7070
    71 
     71        // Traiter les raccourcis au moment de l'envoi, pour plus grande personnalisation du mail
     72        // %%CHAMP%%
     73        // %%CHAMP|texte sinon%%
     74        // %%[texte avant(#CHAMP|filtre ou valeur sinon) texte après]%%
    7275        function lettres_remplacer_raccourci($raccourci, $valeur, $texte) {
    7376                $texte = str_replace('&nbsp;!', '!', $texte);
    7477                $texte = str_replace(' !', '!', $texte);
    75                 $motif_complexe = '`%%'.strtoupper($raccourci).'\|([^%]+)%%`';
    76                 $motif_simple = '`%%'.strtoupper($raccourci).'%%`';
     78               
     79                $$raccourci = strtoupper($raccourci);
     80               
     81                // i: insensible à la casse, s : capturer les fins de lignes. U : ungreedy
     82                $motif_simple = "`%%$raccourci%%`i";
     83                $motif_complexe = "`%%$raccourci\|([^%]+)%%`i";
     84                $motif_calcul = "`%%\[(.*)\(#$raccourci(\|.*)\)(.*)\]%%`isU";
     85
     86                if (preg_match_all($motif_calcul, $texte, $regs, PREG_SET_ORDER)) {
     87                        foreach ($regs as $r) {
     88                                $avant = $r[1];
     89                                $pipe = $r[2];
     90
     91                                $apres = $r[3];
     92                                $cherche = $r[0];
     93                               
     94                                if ($pipe) {
     95                                        $filtre = trim($sinon=substr($pipe,1));
     96                                        if (function_exists($filtre))
     97                                                $remplace = $filtre($valeur);
     98                                        else
     99                                                $remplace = ($valeur ? $valeur : $sinon); // homogénéïté avec motif_complexe, surtout utile pour faire un sinon alors qu'il n'y a pas d'arguments pour les filtres
     100                                }
     101                                else
     102                                        $remplace = $valeur;
     103
     104                                if ($remplace)
     105                                        $texte = str_replace($cherche, $avant.$remplace.$apres, $texte);
     106                                else $texte = str_replace($cherche, "", $texte);
     107                        }
     108                }
     109
    77110                if (preg_match_all($motif_complexe, $texte, $regs, PREG_SET_ORDER)) {
    78111                        foreach ($regs as $r) {
     
    90123                                $cherche = $r[0];
    91124                                $remplace = $valeur;
    92                                 $texte = str_replace($cherche, $remplace, $texte);
     125                                $texte = str_replace ($cherche, $remplace, $texte);
    93126                        }
    94127                }
  • _plugins_/spip-lettres/trunk/plugin.xml

    r51239 r51624  
    33        <nom>SPIP-Lettres</nom>
    44        <auteur>[Art&#233;go->http://www.artego.fr], Cedric Morin [->www.yterium.net]</auteur>
    5         <version>5.5.16</version>
     5        <version>5.6</version>
    66        <version_base>5.4</version_base>
    77        <etat>dev</etat>
Note: See TracChangeset for help on using the changeset viewer.