Changeset 44102 in spip-zone


Ignore:
Timestamp:
Feb 3, 2011, 12:01:25 PM (9 years ago)
Author:
paladin@…
Message:

reecriture du calculateur de titre de courrier. Correction bug dans le cas d un date Y-W + possibilite de mettre pusieurs fois cette balise dans le titre du courrier

Location:
_plugins_/spip-listes/spip-listes_1_9_3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_api_courrier.php

    r43264 r44102  
    495495 * @return le titre calcule'
    496496 * @param $titre string
     497 *
     498 * CP-20110203
     499 * Reecriture
     500 * Possibilites plusieurs #DATE, avec ou sans parametres
    497501 */
    498502function spiplistes_calculer_balise_titre ($titre) {
    499503
    500         // longue comme un jour sans pain
    501         $pattern = "=((?P<a>\[)?(?P<texte_avant>[^(\[]*)(?P<b>\()?\s*(?P<balise>#DATE)(?P<filtres>(\s*\|\s*\w+\s*{?\s*\'?\w+\'?\s*}?)*)\s*(?P<c>\))?(?P<texte_apres>[^(\]]*)(?P<d>\])?)=";
    502        
    503         if (preg_match($pattern, $titre, $match)) {
     504        static $i_envelop = array('a', 'b', 'c', 'd');
     505       
     506        $now = $date = date('Y-m-d H:i:s');
     507
     508        // longue comme un jour sans pain
     509        $pattern = '='
     510                // rechercher le bracket de gauche
     511                . '(?P<a>\[)'
     512                // le texte entre le bracket et la parenthese
     513                . '(?P<texte_avant>[^\(]*)'
     514                // la parenthese
     515                . '(?P<b>\()?\s*'
     516                // la balise DATE
     517                . '(?P<balise>#DATE)'
     518                // le ou les filtres de la balise
     519                . '(?P<filtres>(\s*\|\s*\w+\s*'
     520                        // les parametres du filtre
     521                        . '(?P<params>(\{[^\}]*})?)'
     522                . ')*)\s*'
     523                // la parenthese de droite
     524                . '(?P<c>\))?'
     525                // le texte entre la parenthese et le bracket
     526                . '(?P<texte_apres>[^\]]*)'
     527                // le bracket de droite
     528                . '(?P<d>\])'
     529                . '='
     530                ;
    504531               
    505                 if($match['balise'] == "#DATE") {
     532        $recherche = array();
     533        $remplace = array();
     534       
     535        if($nres = intval(preg_match_all($pattern, $titre, $matches))) {
     536
     537                for($ii = 0; $ii < $nres; $ii++)
     538                {
     539                                       
     540                        $envelop = '';
    506541                       
    507                         $date = date('Y-m-d H:i:s');
    508                        
    509                         $texte_avant = isset($match['texte_avant']) ? $match['texte_avant'] : "";
    510                         $texte_apres = isset($match['texte_apres']) ? $match['texte_apres'] : "";
    511 
    512                         $envelop = "";
    513                         foreach(array('a', 'b', 'c', 'd') as $ii) {
    514                                 $envelop .= (isset($match[$ii])) ? $match[$ii] : "";
     542                        foreach($i_envelop as $aa) {
     543                                $envelop .= (isset($matches[$aa][$ii])) ? $matches[$aa][$ii] : '';
     544                               
    515545                        }
    516546                       
    517                         if($envelop == "[()]") {
    518                                 $filtres = explode('|', $match['filtres']);
    519                                 foreach($filtres as $filtre) {
    520                                         $filtre = trim($filtre);
    521                                         if(preg_match("=(\w+)\s*(\{)?\s*(\'?\w*\'?)?\s*(\})?=", $filtre, $match)) {
    522                                                 switch($match[1]) {
     547                        // balise avec filtres
     548                        if($envelop == '[()]')
     549                        {
     550                                $date = $now;
     551                               
     552                                $filtres = trim($matches['filtres'][$ii]);
     553                               
     554                                $params = trim($matches['params'][$ii]);
     555                                $params = strlen($params) ? trim($params, '’\'{}') : '';
     556                                       
     557                                $filtres = explode('|', $filtres);
     558                               
     559                                foreach($filtres as $ce_filtre)
     560                                {
     561                                        $ce_filtre = trim($ce_filtre);
     562                                        if(strlen($ce_filtre))
     563                                        {
     564                                                $filtre = $ce_filtre;
     565                                               
     566                                                // tout les filtres demandent parametre
     567                                                // mais si ajout d'autres plus tard...
     568                                                //
     569                                                $params = false;
     570                                                if(($pos = strpos($ce_filtre, '{')) !== false)
     571                                                {
     572                                                        $filtre = substr($ce_filtre, 0, $pos);
     573                                                       
     574                                                        $params = substr($ce_filtre, $pos);
     575                                                        $params = strlen($params) ? trim($params, '’\'{}') : '';
     576                                                }
     577                                                switch($filtre) {
    523578                                                        case 'affdate':
    524                                                                 $v = $match[3];
    525                                                                 $v = preg_replace("=[^dDjlNSwzWFmMntLoYyaABgGhHiseIOPTZcrU\: \-]=", "", $v);
     579                                                                $v = $params;
     580                                                                $v = preg_replace('=[^dDjlNSwzWFmMntLoYyaABgGhHiseIOPTZcrU\: \-]=', '', $v);
    526581                                                                $date = date($v);
    527582                                                                break;
    528583                                                        case 'plus':
    529                                                                 $v = intval($match[3]);
    530                                                                 $date += $v;
     584                                                                $v = intval($params);
     585                                                                $date = plus($date, $v);
    531586                                                                break;
    532587                                                }
    533588                                        }
     589                                                       
    534590                                }
     591
     592                                $recherche[] = $pattern;
     593                                $remplace[] = $matches['texte_avant'][$ii] . $date . $matches['texte_apres'][$ii];
    535594                        }
    536                        
    537                         $titre = preg_replace($pattern, $texte_avant.$date.$texte_apres, $titre);
     595                }
     596               
     597                if(count($remplace))
     598                {
     599                        // remplacer les balises avec filtres
     600                        $titre = preg_replace($recherche, $remplace, $titre, 1);
     601                }
     602               
     603                // reste des balises sans filtre ?
     604                if(strpos($titre, $s = '#DATE') !== false)
     605                {
     606                        $titre = str_replace($s, $now, $titre);
    538607                }
    539608        }
    540609        return($titre);
    541610}
    542 
    543 ?>
  • _plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_meleuse.php

    r43474 r44102  
    154154                                $$key = intval($$key);
    155155                        }
     156                       
    156157                        $objet_html = filtrer_entites(typo(spiplistes_calculer_balise_titre(extraire_multi($titre))));
    157158                        $page_html = stripslashes($texte);
  • _plugins_/spip-listes/spip-listes_1_9_3/plugin.xml

    r43845 r44102  
    88        <nom><multi>[fr]SPIP-Listes[en]SPIP-Lists[ar]&#1604;&#1608;&#1575;&#1574;&#1581; SPIP[es]SPIP-Listes</multi></nom>
    99        <auteur>BoOz@rezo.net</auteur>
    10         <version>2.0160</version>
     10        <version>2.0161</version>
    1111        <version_base>1.98</version_base>
    1212        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.