Changeset 57270 in spip-zone


Ignore:
Timestamp:
Jan 17, 2012, 9:22:42 AM (8 years ago)
Author:
marcimat@…
Message:

désindentation et suppression de str_split, puisque SPIP 3 nécessite PHP 5

File:
1 edited

Legend:

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

    r51624 r57270  
    22
    33
    4         /**
    5          * SPIP-Lettres
    6          *
    7          * Copyright (c) 2006-2009
    8          * Agence Artégo http://www.artego.fr
    9          * 
    10          * Ce programme est un logiciel libre distribue sous licence GNU/GPLv3.
    11          * Pour plus de details voir http://www.gnu.org/licenses/gpl-3.0.html
    12          * 
    13          **/
    14 
    15         include_spip('inc/lettres_filtres');
    16         include_spip('classes/lettre');
    17         include_spip('inc/lettres_pipelines');
    18         include_spip('public/lettres_balises');
    19         include_spip('public/lettres_boucles');
    20         include_spip('facteur_fonctions');
    21                
    22         function lettres_verifier_validite_email($email) {
    23                 include_spip('inc/filtres');
    24                 return email_valide($email);
    25         }
    26 
    27         function lettres_tester_parmi_desabonnes($email) {
    28                 $test = sql_countsel('spip_desabonnes', 'email='.sql_quote($email));
    29                 return $test;
    30         }
    31 
    32 
    33         function calculer_url_lettre($id_lettre, $texte, $ancre) {
    34                 $lien = generer_url_lettre($id_lettre).$ancre;
    35                 if (!$texte) {
    36                         $texte = sql_getfetsel('titre', 'spip_lettres', 'id_lettre='.intval($id_lettre));
     4/**
     5 * SPIP-Lettres
     6 *
     7 * Copyright (c) 2006-2009
     8 * Agence Artégo http://www.artego.fr
     9 * 
     10 * Ce programme est un logiciel libre distribue sous licence GNU/GPLv3.
     11 * Pour plus de details voir http://www.gnu.org/licenses/gpl-3.0.html
     12 * 
     13 **/
     14
     15include_spip('inc/lettres_filtres');
     16include_spip('classes/lettre');
     17include_spip('inc/lettres_pipelines');
     18include_spip('public/lettres_balises');
     19include_spip('public/lettres_boucles');
     20include_spip('facteur_fonctions');
     21       
     22function lettres_verifier_validite_email($email) {
     23        include_spip('inc/filtres');
     24        return email_valide($email);
     25}
     26
     27function lettres_tester_parmi_desabonnes($email) {
     28        $test = sql_countsel('spip_desabonnes', 'email='.sql_quote($email));
     29        return $test;
     30}
     31
     32
     33function calculer_url_lettre($id_lettre, $texte, $ancre) {
     34        $lien = generer_url_lettre($id_lettre).$ancre;
     35        if (!$texte) {
     36                $texte = sql_getfetsel('titre', 'spip_lettres', 'id_lettre='.intval($id_lettre));
     37        }
     38        return array($lien, 'spip_in', $texte);
     39}
     40
     41
     42function generer_url_lettre($id_lettre, $format='', $preview=false) {
     43        if ($preview)
     44                $var_mode = '&var_mode=preview';
     45        if (!empty($format))
     46                $chaine_format = '&format='.$format;
     47        return generer_url_public('lettre', 'id_lettre='.$id_lettre.$chaine_format.$var_mode);
     48}
     49
     50
     51function lettres_recuperer_toutes_les_rubriques_parentes($id_rubrique) {
     52        $rubriques = array();
     53        $rubriques[] = $id_rubrique;
     54        while (1) {
     55                $id_parent = lettres_recuperer_la_rubrique_parente($id_rubrique);
     56                $rubriques[] = $id_parent;
     57                $id_rubrique = $id_parent;
     58                if (!$id_parent)
     59                        break;
     60        }
     61        return $rubriques;
     62}
     63
     64
     65function lettres_recuperer_la_rubrique_parente($id_rubrique) {
     66        if ($id_rubrique)
     67                $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
     68        return intval($id_parent);
     69}
     70
     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]%%
     75function lettres_remplacer_raccourci($raccourci, $valeur, $texte) {
     76        $texte = str_replace(' !', '!', $texte);
     77        $texte = str_replace(' !', '!', $texte);
     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);
    37107                }
    38                 return array($lien, 'spip_in', $texte);
    39         }
    40 
    41 
    42         function generer_url_lettre($id_lettre, $format='', $preview=false) {
    43                 if ($preview)
    44                         $var_mode = '&var_mode=preview';
    45                 if (!empty($format))
    46                         $chaine_format = '&format='.$format;
    47                 return generer_url_public('lettre', 'id_lettre='.$id_lettre.$chaine_format.$var_mode);
    48         }
    49 
    50 
    51         function lettres_recuperer_toutes_les_rubriques_parentes($id_rubrique) {
    52                 $rubriques = array();
    53                 $rubriques[] = $id_rubrique;
    54                 while (1) {
    55                         $id_parent = lettres_recuperer_la_rubrique_parente($id_rubrique);
    56                         $rubriques[] = $id_parent;
    57                         $id_rubrique = $id_parent;
    58                         if (!$id_parent)
    59                                 break;
     108        }
     109
     110        if (preg_match_all($motif_complexe, $texte, $regs, PREG_SET_ORDER)) {
     111                foreach ($regs as $r) {
     112                        $sinon = $r[1];
     113                        $cherche = $r[0];
     114                        if (!empty($valeur))
     115                                $remplace = $valeur;
     116                        else
     117                                $remplace = $sinon;
     118                        $texte = str_replace($cherche, $remplace, $texte);
    60119                }
    61                 return $rubriques;
    62         }
    63 
    64 
    65         function lettres_recuperer_la_rubrique_parente($id_rubrique) {
    66                 if ($id_rubrique)
    67                         $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
    68                 return intval($id_parent);
    69         }
    70 
    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]%%
    75         function lettres_remplacer_raccourci($raccourci, $valeur, $texte) {
    76                 $texte = str_replace(' !', '!', $texte);
    77                 $texte = str_replace(' !', '!', $texte);
    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                         }
     120        }
     121        if (preg_match_all($motif_simple, $texte, $regs, PREG_SET_ORDER)) {
     122                foreach ($regs as $r) {
     123                        $cherche = $r[0];
     124                        $remplace = $valeur;
     125                        $texte = str_replace ($cherche, $remplace, $texte);
    108126                }
    109 
    110                 if (preg_match_all($motif_complexe, $texte, $regs, PREG_SET_ORDER)) {
    111                         foreach ($regs as $r) {
    112                                 $sinon = $r[1];
    113                                 $cherche = $r[0];
    114                                 if (!empty($valeur))
    115                                         $remplace = $valeur;
    116                                 else
    117                                         $remplace = $sinon;
    118                                 $texte = str_replace($cherche, $remplace, $texte);
    119                         }
    120                 }
    121                 if (preg_match_all($motif_simple, $texte, $regs, PREG_SET_ORDER)) {
    122                         foreach ($regs as $r) {
    123                                 $cherche = $r[0];
    124                                 $remplace = $valeur;
    125                                 $texte = str_replace ($cherche, $remplace, $texte);
    126                         }
    127                 }
    128                 return $texte;
    129         }
    130 
    131 
    132         function lettres_rubrique_autorisee($id_rubrique) {
    133                 return sql_countsel('spip_themes', 'id_rubrique='.intval($id_rubrique));
    134         }
    135 
    136 
    137         function redirection_clic($id_clic) {
    138                 $verification_clic = sql_select('url', 'spip_clics', 'id_clic='.intval($id_clic));
    139                 if (sql_count($verification_clic) == 1) {
    140                         $url = sql_fetch($verification_clic);
    141                         $redirection = $url['url'];
    142                 } else {
    143                         $redirection = $GLOBALS['meta']['adresse_site'];
    144                 }
    145                 return $redirection;
    146         }
    147        
    148        
    149         if(!function_exists('str_split')) {
    150                 function str_split($text, $split = 1) {
    151                         $array = array();
    152                         for ($i = 0; $i < strlen($text);) {
    153                                 $array[] = substr($text, $i, $split);
    154                                 $i+= $split;
    155                         }
    156                         return $array;
    157                 }
    158         }
    159        
     127        }
     128        return $texte;
     129}
     130
     131
     132function lettres_rubrique_autorisee($id_rubrique) {
     133        return sql_countsel('spip_themes', 'id_rubrique='.intval($id_rubrique));
     134}
     135
     136
     137function redirection_clic($id_clic) {
     138        $verification_clic = sql_select('url', 'spip_clics', 'id_clic='.intval($id_clic));
     139        if (sql_count($verification_clic) == 1) {
     140                $url = sql_fetch($verification_clic);
     141                $redirection = $url['url'];
     142        } else {
     143                $redirection = $GLOBALS['meta']['adresse_site'];
     144        }
     145        return $redirection;
     146}
     147
     148
    160149//
    161150// thèmes et thème par défaut, pour le privé et les squelettes
    162151//
    163         function lettres_un_seul_theme() {
    164                 return sql_countsel ("spip_themes") == 1;
    165         }       
    166         function lettres_nombre_themes() {
    167                 return sql_countsel ("spip_themes");
    168         }
    169        
    170         // id de la rubrique ou -1 si il n'y a pas de thème par défaut
    171         function lettres_rubrique_theme_par_defaut () {
    172                 if (lettres_un_seul_theme())
    173                         return sql_getfetsel ("id_rubrique", "spip_themes");
    174                 else return $GLOBALS['meta']['spip_lettres_abonnement_par_defaut'];     
    175         };
    176 
    177         // titre du thème par défaut
    178         function lettres_titre_theme_par_defaut () {
    179                 if ($GLOBALS['meta']['spip_lettres_abonnement_par_defaut'] > 0)
    180                         return sql_getfetsel ("TH.titre", "spip_themes AS TH LEFT JOIN spip_rubriques AS RUB ON RUB.id_rubrique=TH.id_rubrique", "RUB.id_rubrique=".$GLOBALS['meta']['spip_lettres_abonnement_par_defaut']);
    181                 else if ($GLOBALS['meta']['spip_lettres_abonnement_par_defaut'] == -1)
    182                         return _T('lettresprive:aucun_theme_selectionne');
    183                 else
    184                         return _T('lettres:tout_le_site');
    185         };
    186        
    187         function styler_pournavigateur ($html) {
    188                 return str_replace ('pouremail', 'invisiblepournavigateur', $html);
    189         };
     152function lettres_un_seul_theme() {
     153        return sql_countsel ("spip_themes") == 1;
     154}
     155
     156function lettres_nombre_themes() {
     157        return sql_countsel ("spip_themes");
     158}
     159
     160// id de la rubrique ou -1 si il n'y a pas de thème par défaut
     161function lettres_rubrique_theme_par_defaut () {
     162        if (lettres_un_seul_theme())
     163                return sql_getfetsel ("id_rubrique", "spip_themes");
     164        else return $GLOBALS['meta']['spip_lettres_abonnement_par_defaut'];     
     165};
     166
     167// titre du thème par défaut
     168function lettres_titre_theme_par_defaut () {
     169        if ($GLOBALS['meta']['spip_lettres_abonnement_par_defaut'] > 0)
     170                return sql_getfetsel ("TH.titre", "spip_themes AS TH LEFT JOIN spip_rubriques AS RUB ON RUB.id_rubrique=TH.id_rubrique", "RUB.id_rubrique=".$GLOBALS['meta']['spip_lettres_abonnement_par_defaut']);
     171        else if ($GLOBALS['meta']['spip_lettres_abonnement_par_defaut'] == -1)
     172                return _T('lettresprive:aucun_theme_selectionne');
     173        else
     174                return _T('lettres:tout_le_site');
     175};
     176
     177function styler_pournavigateur ($html) {
     178        return str_replace ('pouremail', 'invisiblepournavigateur', $html);
     179};
    190180
    191181// pour le format texte les liens html sont transformés de manière à avoir à la fois le texte
     
    193183// Si le texte du lien est déjà une url ou y ressemble fort, on ne met que l'url
    194184// Si c'est une url relative, on ajoute l'adresse du site avant
    195         function prepare_format_texte_lien($matches) {
    196                 if ((strpos(ltrim($matches[2]), 'http:')===0)
    197                         or (strpos(ltrim($matches[2]), 'www.')===0))
    198                         return $matches[1];
    199                 if (strpos(ltrim($matches[1]),'/')===0)
    200                          $matches[1] =  $GLOBALS['meta']['adresse_site'].$matches[1];
    201                 return $matches[2]." [ ".$matches[1]." ]";
    202         };
    203         function prepare_format_texte ($html) {
    204                 $pat = "!<a[^>]+href\s*=\s*['\"]([^'\"]*)['\"][^>]*>([^<]*)<\/a>!i";
    205                 return textebrut (preg_replace_callback ($pat, 'prepare_format_texte_lien', $html));
    206         };
     185function prepare_format_texte_lien($matches) {
     186        if ((strpos(ltrim($matches[2]), 'http:')===0)
     187                or (strpos(ltrim($matches[2]), 'www.')===0))
     188                return $matches[1];
     189        if (strpos(ltrim($matches[1]),'/')===0)
     190                 $matches[1] =  $GLOBALS['meta']['adresse_site'].$matches[1];
     191        return $matches[2]." [ ".$matches[1]." ]";
     192};
     193
     194
     195function prepare_format_texte ($html) {
     196        $pat = "!<a[^>]+href\s*=\s*['\"]([^'\"]*)['\"][^>]*>([^<]*)<\/a>!i";
     197        return textebrut (preg_replace_callback ($pat, 'prepare_format_texte_lien', $html));
     198};
    207199
    208200?>
Note: See TracChangeset for help on using the changeset viewer.