source: spip-zone/_plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_api_courrier.php @ 48446

Last change on this file since 48446 was 48446, checked in by paladin@…, 10 years ago

compacter l'en-tete de lien html

  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 18.4 KB
Line 
1<?php
2/**
3 * Fonctions consacrees au traitement du contenu du courrier et tampon :
4 *      - filtres, convertisseurs texte, charset, etc.
5 *
6 * Toutes les fonctions ici ont un nom commencant pas 'spiplistes_courrier'
7 * Voir {@link spiplistes_upgrade_base()} base/spiplistes_upgrade.php pour
8 *  definitions et descriptions des tables
9 *
10 * @package spiplistes
11 */
12 // $LastChangedRevision: 48446 $
13 // $LastChangedBy: paladin@quesaco.org $
14 // $LastChangedDate: 2011-06-03 08:14:53 +0000 (Fri, 03 Jun 2011) $
15
16/******************************************************************************************/
17/* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information     */
18/* par email pour SPIP. http://bloog.net/spip-listes                                      */
19/* Copyright (C) 2004 Vincent CARON  v.caron<at>laposte.net                               */
20/*                                                                                        */
21/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
22/* de la Licence Publique Generale GNU publiee par la Free Software Foundation            */
23/* (version 2).                                                                           */
24/*                                                                                        */
25/* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE,       */
26/* ni explicite ni implicite, y compris les garanties de commercialisation ou             */
27/* d'adaptation dans un but specifique. Reportez-vous a la Licence Publique Generale GNU  */
28/* pour plus de details.                                                                  */
29/*                                                                                        */
30/* Vous devez avoir recu une copie de la Licence Publique Generale GNU                    */
31/* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la                  */
32/* Free Software Foundation,                                                              */
33/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis.                   */
34/******************************************************************************************/
35
36if (!defined('_ECRIRE_INC_VERSION')) return;
37
38/**
39 * passe propre() sur un texte puis nettoye les trucs rajoutes par spip sur du html
40 * ca s'utilise pour afficher un courrier dans l espace prive
41 * on l'applique au courrier avant de confirmer l'envoi
42 * @return string
43 * @deprecated
44 */
45function spiplistes_courrier_propre ($texte) {
46        //spiplistes_debug_log ('spiplistes_courrier_propre()');
47        static $adresse_site;
48        if (!$adresse_site) { $adresse_site = $GLOBALS['meta']['adresse_site']; }
49        static $style_rev = '__STYLE__';
50       
51        if (preg_match ('@<style[^>]*>[^<]*</style>@'
52                                                          , $texte
53                                                          , $style_reg
54                                                          )
55                > 0
56        ) {
57               
58        }
59       
60        if (isset($style_reg[0])) {
61                $style_str = $style_reg[0].'<!-- hole -->';
62        }
63        else {
64                $style_str = '';
65        }
66        $texte = preg_replace ('@<style[^>]*>[^<]*</style>@', $style_rev, $texte);
67       
68        //passer propre si y'a pas de html (balises fermantes)
69        if (!preg_match ('@</?('._BALISES_BLOCS.')[>[:space:]]@iS', $texte))
70        {
71                $texte = propre($texte); // pb: enleve aussi <style>...
72        }
73        //nettoyer les spip class truc en trop
74        $texte = spiplistes_courrier_propre_bloog ($texte); 
75       
76        // remettre en place les styles
77        $texte = str_replace ($style_rev, $style_str, $texte);
78       
79        //les liens avec double debut #URL_SITE_SPIP/#URL_ARTICLE
80        $texte = preg_replace (
81                                '@'
82                                . $adresse_site
83                                        . '/'
84                                        . $adresse_site
85                                        . '@'
86                                , $adresse_site
87                                , $texte
88                                );
89        $texte = spiplistes_liens_absolus ($texte);
90       
91        return ($texte);
92}
93
94
95
96/**
97 * Enleve les enluminures Spip pour la bloogletter
98 * Vincent CARON
99 * @return string
100 * @todo revoir certaines regles (<p><p></p></p> mal corrigé)
101 */
102function spiplistes_courrier_propre_bloog($texte) {
103       
104        static $eol = PHP_EOL;
105       
106        spiplistes_debug_log ("spiplistes_courrier_propre_bloog()");
107
108        // eliminer les paragraphes vides
109        $texte = preg_replace ('@<p class="spip">\s*</p>@i', '', $texte);
110       
111        // limiter les tabulations verticales
112        $texte = preg_replace ('@\v{3,}@', $eol, $texte);
113       
114       
115        // div imbrique dans un p
116        $texte = preg_replace ('@<p class="spip">\s*<div([^>]*)>@i', '<div\\2>' , $texte);
117        $texte = preg_replace ('@</div>\s*</p>@i' , '</div>' , $texte);
118       
119        // style imbrique dans un p
120        $texte = preg_replace ('@<p class="spip">\s*<style([^>]*)>@i', '<style>' , $texte);
121        $texte = preg_replace ('@</style>\s*</p>@i', '</style>', $texte);
122       
123       
124        // h3 imbrique dans un p
125        $texte = preg_replace ('@<p class="spip">\s*<h3 class="spip">@i', '<h3>', $texte);
126        $texte = preg_replace ('@</h3>\s*</p>@i', '</h3>', $texte);
127       
128        // h2 imbrique dans un p
129        $texte = preg_replace ('@<p class="spip">\s*<h2>@i', '<h2>' , $texte);
130        $texte = preg_replace ('@</h2>\s*</p>@i', '</h2>' , $texte);
131       
132        // h1 imbrique dans un p
133        $texte = preg_replace ('@<p class="spip">\s*<h1>@i', '<h1>' , $texte);
134        $texte = preg_replace ('@</h1>\s*</p>@i' , '</h1>' , $texte);
135       
136        // tableaux imbriques dans p
137        $texte = preg_replace ('@<p class="spip">\s*<table@i' , '<table' , $texte);
138        $texte = preg_replace ('@</table>\s*</p>@i' , '</table>' , $texte);
139       
140        // TD imbriques dans p
141        $texte = preg_replace ('@<p class="spip">\s*</td@i' , '</td' , $texte);
142       
143        // p imbriques dans p
144        $texte = preg_replace ('@<p class="spip">\s*<p@i' , '<p' , $texte);
145       
146        // DIV imbriques dans p
147        $texte = preg_replace ('@<p class="spip">\s*<div@i' , '<div' , $texte);
148        $texte = preg_replace ('@</div>\s*</p>@i' , '</div>' , $texte);
149       
150        // correction url ?
151        $texte = preg_replace ('@\.php3&nbsp;\?@', '.php3?', $texte);
152        $texte = preg_replace ('@\.php&nbsp;\?@', '.php?', $texte);
153       
154        return ($texte);
155} 
156
157
158/**
159 * Compacter le code HTML du courrier
160 * @version CP-20110603
161 * @param string $texte
162 * @staticvar array $pattern
163 * @staticvar array $replace
164 * @return string
165 */
166function spiplistes_html_compacte ($texte) {
167       
168        static $pattern, $replace;
169       
170        if (!$pattern)
171        {
172                $array = array( // supprimer
173                        '@^[ \t]+@m' => ''      //  les espaces debut de ligne
174                        , '@[ \t]+$@m' => ''    //  en fin de ligne
175                        , '@[ \t]+@' => ' '     //  en double                           
176                        , '/\n\s*\n/' => "\n" // les lignes vides
177                );
178                $pattern = array_keys ($array);
179                $replace = array_values ($array);
180        }
181       
182        $texte = trim ($texte);
183       
184        $texte = preg_replace ($pattern, $replace, $texte);
185       
186        return ($texte);
187}
188
189/**
190 * titre : spiplistes_courrier_version_texte
191 * d'apres Clever Mail (-> NHoizey), mais en mieux.
192 */
193/**
194 * @param string $in, contenu html du courrier a envoyer
195 * @return string, version texte seul (ascii) du courrier
196 */
197function spiplistes_courrier_version_texte($in) {
198
199        $eol = PHP_EOL;
200       
201        // Nettoyage des liens des notes de bas de page
202        $out = preg_replace("@<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>@"
203                                                , "\\3", $in);
204       
205        // Supprimer tous les liens internes
206        $patterns = array("/\<a href=['\"]#(.*?)['\"][^>]*>(.*?)<\/a>/ims");
207        $replacements = array("\\2");
208        $out = preg_replace($patterns,$replacements, $out);
209       
210        // Supprime feuille style
211        $out = preg_replace("/<style[^>]*>[^<]*<\/style>/", '', $out);
212       
213        // les puces
214        // @see http://www.spip.net/fr_article1825.html
215        if (isset($GLOBALS['puce'])) {
216                $out = str_replace($GLOBALS['puce'], $eol.'-', $out);
217        }
218       
219        // Remplace tous les liens     
220        $patterns = array("/\<a href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims");
221        $replacements = array("\\2 (\\1)");
222        $out = preg_replace($patterns,$replacements, $out);
223       
224        $_traits = str_repeat('-', 40);
225        $_points = str_repeat('.', 20);
226       
227        $out = preg_replace('/<h1[^>]*>/', '_SAUT__SAUT_'.$_traits.'_SAUT_', $out);
228        $out = str_replace('</h1>', '_SAUT__SAUT_'.$_traits.'_SAUT__SAUT_', $out);
229        $out = preg_replace('/<h2[^>]*>/', '_SAUT__SAUT_'.$_points.' ', $out);
230        $out = str_replace('</h2>', ' '.$_points.'_SAUT__SAUT_', $out);
231        $out = preg_replace('/<h3[^>]*>/', '_SAUT__SAUT_*', $out);
232        $out = str_replace('</h3>', '*_SAUT__SAUT_', $out);
233       
234        // Les notes de bas de page
235        $out = str_replace('<p class="spip_note">', $eol, $out);
236        $out = preg_replace('/<sup>([0-9]+)<\/sup>/', '[\\1]', $out);
237       
238        // etrange parfum de regex dans un str_replace ?
239        // @todo: a verifier
240        //$out = str_replace('<p[^>]*>', $eol.$eol, $out);
241       
242        //$out = str_replace('<br /><img class=\'spip_puce\' src=\'puce.gif\' alt=\'-\' border=\'0\'>', "\n".'-', $out);
243        $out = preg_replace('/<li[^>]>/', $eol.'-', $out);
244        //$out = str_replace('<li>', "\n".'-', $out);
245       
246       
247        // accentuation du gras -
248        // <b>texte</b> -> *texte*
249        $out = preg_replace('/<b[^>|r]*>/','*' ,$out);
250        $out = str_replace ('</b>','*' ,$out);
251       
252        // accentuation du gras -
253        // <strong>texte</strong> -> *texte*
254        $out = preg_replace('/<strong[^>]*>/','*' ,$out);
255        $out = str_replace ('</strong>','*' ,$out);
256       
257       
258        // accentuation de l'italique
259        // <i>texte</i> -> *texte*
260        $out = preg_replace('/<i[^>|mg]*>/','*' ,$out);
261        $out = str_replace ('</i>', '*', $out);
262       
263        $out = str_replace('&oelig;', 'oe', $out);
264        $out = str_replace('&nbsp;', ' ', $out);
265        $out = filtrer_entites($out);
266       
267        //attention, trop brutal pour les logs irc <@RealET>
268        $out = supprimer_tags($out);
269       
270        $out = str_replace('\x0B', '', $out); 
271        $out = str_replace("\t", '', $out) ;
272        $out = preg_replace('/[ ]{3,}/', '', $out);
273       
274        // espace en debut de ligne
275        $out = preg_replace("/(\r\n|\n|\r)[ ]+/m", $eol, $out);
276       
277        // Bring down number of empty lines to 2 max
278        // sauts de ligne >= 3 reduits a 2
279        $out = preg_replace("/(\r\n|\n|\r){3,}/m", $eol.$eol, $out);
280       
281        //retablir les saut de ligne
282        //Réduire les > 3 à 3
283        $out = preg_replace('/(_SAUT_){4,}/m', '_SAUT__SAUT__SAUT_', $out);
284        $out = str_replace('_SAUT_', $eol, $out);
285       
286        //saut de lignes en debut et fin de texte
287        $out = $eol.$eol.trim($out).$eol.$eol;
288       
289        // Faire des lignes de 75 caracteres maximum
290        $out = wordwrap($out);
291       
292        return $out;
293
294} // end spiplistes_courrier_version_texte()
295
296/**
297 * Ajouter les abonnes d'une liste a un envoi
298 * @param int $id_courrier reference d'un envoi
299 * @param int $id_liste reference d'une liste
300 * @param int $id_auteur
301 * @return bool
302 */
303function spiplistes_courrier_remplir_queue_envois ($id_courrier, $id_liste, $id_auteur = 0) {
304       
305        $id_courrier = intval($id_courrier);
306        $id_liste = intval($id_liste);
307       
308        spiplistes_debug_log("API: remplir courrier: #$id_courrier, liste: #$id_liste, auteur: #$id_auteur");
309       
310        if($id_courrier > 0) {
311       
312                $statut_q = sql_quote('a_envoyer');
313                $id_courrier_q = sql_quote($id_courrier);
314                $sql_valeurs = "";
315       
316                if($id_liste > 0) {
317                        // prendre la liste des abonnes a cette liste
318                        $ids_abos = spiplistes_listes_liste_abo_ids($id_liste);
319                        if(count($ids_abos))
320                        {
321                                $sql_where_q = "(".implode(",", array_map("sql_quote", $ids_abos)).")";
322                                $sql_result = sql_select('id_auteur', 'spip_auteurs', "id_auteur IN $sql_where_q", ''
323                                        , array('id_auteur'));
324                                $ids_auteurs = array();
325                                while($row = sql_fetch($sql_result)) {
326                                        $ids_auteurs[] = intval($row['id_auteur']);
327                                }
328                                foreach($ids_abos as $ii) {
329                                        // l'auteur n'existe plus, le desabonner !
330                                        if(!in_array($ii, $ids_auteurs)) {
331                                                spiplistes_abonnements_auteur_desabonner($ii, 'toutes');
332                                        }
333                                }
334                                if(count($ids_auteurs) > 0) {
335                                        // remplir la queue d'envois
336                                        foreach($ids_auteurs as $ii) {
337                                                $sql_valeurs .= "(".sql_quote($ii).",$id_courrier_q, $statut_q, NOW()),";
338                                        }
339                                        $sql_valeurs = rtrim($sql_valeurs, ",");                       
340                                }
341                        }
342                }
343                else if(($id_auteur = intval($id_auteur)) > 0) {
344                        // envoi mail test
345                        $sql_valeurs = "(".sql_quote($id_auteur).",$id_courrier_q, $statut_q, NOW())";
346                }
347                if(!empty($sql_valeurs)) {
348                        sql_insert(
349                                'spip_auteurs_courriers'
350                                ,       "("
351                                        . "id_auteur,id_courrier,statut,maj"
352                                        . ")"
353                                ,       $sql_valeurs
354                        );
355                        $nb_etiquettes = spiplistes_courriers_en_queue_compter(
356                                array(
357                                        "id_courrier=".sql_quote($id_courrier)
358                                        , "statut=".sql_quote('a_envoyer')
359                                )
360                        );
361                        if($nb_etiquettes && ($id_liste > 0)) {
362                                spiplistes_courrier_modifier(
363                                        $id_courrier
364                                        , array('total_abonnes' => sql_quote($nb_etiquettes))
365                                        );
366                        }
367                        return(true);
368                }
369        }
370        else {
371                spiplistes_debug_log("ERR: spiplistes_courrier_remplir_queue_envois($id_courrier, $id_liste, $id_auteur) valeur nulle ?");
372        }
373        return (false);
374}
375
376/**
377 * Modifier un courrier
378 * @return true ou false
379 * @param $id_courrier
380 * @param $sql_set_array les valeurs à modifier. ex.: array('col1' => 'val1')
381 * @param $quote si true, les valeurs seront quote' par sql_updateq
382 */
383function spiplistes_courrier_modifier ($id_courrier, $sql_set_array, $quote = true) {
384        $id_courrier = intval($id_courrier);
385        $sql_update = $quote ? "sql_updateq" : "sql_update";
386        $result = 
387                ($id_courrier > 0)
388                ?
389                        $sql_update(
390                                "spip_courriers"
391                                , $sql_set_array
392                                , 'id_courrier='.sql_quote($id_courrier).' LIMIT 1'
393                        )
394                : false
395                ;
396        return($result);
397}
398
399//CP-20080509: changer le statut d'un courrier
400function spiplistes_courrier_statut_modifier ($id_courrier, $new_statut) {
401        return(spiplistes_courrier_modifier($id_courrier, array('statut' => $new_statut)));
402}
403
404// CP-20080329
405function spiplistes_courrier_supprimer_queue_envois ($sql_where_key, $sql_where_value) {
406        $sql_where = $sql_where_key."=".sql_quote($sql_where_value);
407        switch($sql_where_key) {
408                case 'id_courrier':
409                        $result = sql_delete("spip_auteurs_courriers", $sql_where);
410                        break;
411                case 'statut':
412                        if(spiplistes_spip_est_inferieur_193()) { 
413                                $result = sql_delete("spip_auteurs_courriers"
414                                        , "id_courrier IN (SELECT id_courrier FROM spip_courriers WHERE $sql_where)"); 
415                        } else {
416                                // Sur les precieux conseils de MM :
417                                // passer la requete en 2 etapes pour assurer portabilite sql
418                                $selection =
419                                        sql_select("id_courrier", "spip_courriers", $sql_where,'','','','','',false);
420                                $result = sql_delete("spip_auteurs_courriers", "id_courrier IN ($selection)");
421                        }
422                        break;
423        }
424        return($result);
425}
426
427function spiplistes_courrier_attacher_documents($id_courrier, $id_temp) {
428        if(($id_courrier > 0) && ($id_temp < 0)) {
429                return(
430                        sql_updateq(
431                                'spip_documents_liens'
432                                , array('id_objet' => sql_quote($id_courrier))
433                                , 'id_objet='.sql_quote($id_temp).' AND objet='.sql_quote('courrier')
434                ));
435        }
436        return(false);
437}
438
439// CP-20080329
440function spiplistes_courrier_supprimer ($sql_where_key, $sql_where_value) {
441        return(sql_delete("spip_courriers", $sql_where_key."=".sql_quote($sql_where_value)));
442}
443//CP-20080519
444function spiplistes_courriers_premier ($id_courrier, $sql_select_array) {
445        return(sql_fetsel($sql_select_array, 'spip_courriers', "id_courrier=".sql_quote($id_courrier), '', '', 1));
446}
447
448// renvoie id_auteur du courier (CP-20071018)
449function spiplistes_courrier_id_auteur_get ($id_courrier) {
450        if(($id_courrier = intval($id_courrier)) > 0) {
451                if($sql_result = sql_select('id_auteur', 'spip_courriers', "id_courrier=".sql_quote($id_courrier), '', '', 1)) {
452                        if($row = spip_fetch_array($sql_result)) {
453                                return($row['id_auteur']);
454                        }
455                }
456        }
457        return(false);
458}
459
460//CP-20080509: renvoie somme des abonnes en cours d envoi
461function spiplistes_courriers_total_abonnes ($id_courrier = 0) {
462        $id_courrier = intval($id_courrier);
463        $sql_where = "statut=".sql_quote(_SPIPLISTES_COURRIER_STATUT_ENCOURS);
464        if($id_courrier > 0) {
465                $sql_where .= " AND id_courrier=".sql_quote($id_courrier);
466        }
467        return(
468                sql_getfetsel(
469                        'SUM(total_abonnes)'
470                        , 'spip_courriers'
471                        , $sql_where
472                )
473        );
474}
475
476/**
477 * Assembler/calculer un patron
478 * @version CP-20081124
479 * @param $string patron  nom du patron
480 * @param array $contexte
481 * @param bool $ignorer
482 * @return array le resultat html et texte seul dans un tableau
483 */
484function spiplistes_courriers_assembler_patron ($path_patron, $contexte, $ignorer = false) {
485
486        if ($ignorer) {
487                $result = array('', '');
488        }
489        else {
490                $result = spiplistes_assembler_patron($path_patron, $contexte);
491        }
492       
493        return($result);
494}
495
496
497/**
498 * Calculer une balise a-la-SPIP pour le titre d'un courrier.
499 * Pour le moment, uniquement #DATE et 2 filtres sont autorises
500 * @version CP-20110203 Reecriture.
501 *   Possibilites plusieurs #DATE, avec ou sans parametres
502 * @param $titre string
503 * @return le titre calcule'
504 */
505function spiplistes_calculer_balise_titre ($titre) {
506
507        static $i_envelop = array('a', 'b', 'c', 'd');
508       
509        $now = $date = date('Y-m-d H:i:s');
510
511        // longue comme un jour sans pain
512        $pattern = '='
513                // rechercher le bracket de gauche
514                . '(?P<a>\[)'
515                // le texte entre le bracket et la parenthese
516                . '(?P<texte_avant>[^\(]*)'
517                // la parenthese
518                . '(?P<b>\()?\s*'
519                // la balise DATE
520                . '(?P<balise>#DATE)'
521                // le ou les filtres de la balise
522                . '(?P<filtres>(\s*\|\s*\w+\s*'
523                        // les parametres du filtre
524                        . '(?P<params>(\{[^\}]*})?)'
525                . ')*)\s*'
526                // la parenthese de droite
527                . '(?P<c>\))?'
528                // le texte entre la parenthese et le bracket
529                . '(?P<texte_apres>[^\]]*)'
530                // le bracket de droite
531                . '(?P<d>\])'
532                . '='
533                ;
534               
535        $recherche = array();
536        $remplace = array();
537       
538        if($nres = intval(preg_match_all($pattern, $titre, $matches))) {
539
540                for($ii = 0; $ii < $nres; $ii++)
541                {
542                                       
543                        $envelop = '';
544                       
545                        foreach($i_envelop as $aa) {
546                                $envelop .= (isset($matches[$aa][$ii])) ? $matches[$aa][$ii] : '';
547                               
548                        }
549                       
550                        // balise avec filtres
551                        if($envelop == '[()]')
552                        {
553                                $date = $now;
554                               
555                                $filtres = trim($matches['filtres'][$ii]);
556                               
557                                $params = trim($matches['params'][$ii]);
558                                $params = strlen($params) ? trim($params, '’\'{}') : '';
559                                       
560                                $filtres = explode('|', $filtres);
561                               
562                                foreach($filtres as $ce_filtre)
563                                {
564                                        $ce_filtre = trim($ce_filtre);
565                                        if(strlen($ce_filtre))
566                                        {
567                                                $filtre = $ce_filtre;
568                                               
569                                                // tout les filtres demandent parametre
570                                                // mais si ajout d'autres plus tard...
571                                                //
572                                                $params = false;
573                                                if(($pos = strpos($ce_filtre, '{')) !== false)
574                                                {
575                                                        $filtre = substr($ce_filtre, 0, $pos);
576                                                       
577                                                        $params = substr($ce_filtre, $pos);
578                                                        $params = strlen($params) ? trim($params, '’\'{}') : '';
579                                                }
580                                                switch($filtre) {
581                                                        case 'affdate':
582                                                                $v = $params;
583                                                                $v = preg_replace('=[^dDjlNSwzWFmMntLoYyaABgGhHiseIOPTZcrU\: \-]=', '', $v);
584                                                                $date = date($v);
585                                                                break;
586                                                        case 'plus':
587                                                                $v = intval($params);
588                                                                $date = plus($date, $v);
589                                                                break;
590                                                        case 'jour':
591                                                        case 'mois':
592                                                        case 'annee':
593                                                        case 'nom_mois':
594                                                        case 'ucfirst':
595                                                        case 'saison':
596                                                                $date = $filtre($date);
597                                                                break;
598                                                }
599                                        }
600                                                       
601                                }
602
603                                $recherche[] = $pattern;
604                                $remplace[] = $matches['texte_avant'][$ii] . $date . $matches['texte_apres'][$ii];
605                        }
606                }
607               
608                if(count($remplace))
609                {
610                        // remplacer les balises avec filtres
611                        $titre = preg_replace($recherche, $remplace, $titre, 1);
612                }
613               
614                // reste des balises sans filtre ?
615                if(strpos($titre, $s = '#DATE') !== false)
616                {
617                        $titre = str_replace($s, $now, $titre);
618                }
619        }
620        return($titre);
621}
Note: See TracBrowser for help on using the repository browser.