Changeset 49186 in spip-zone


Ignore:
Timestamp:
Jun 29, 2011, 11:52:54 PM (10 years ago)
Author:
jluc@…
Message:

on ne peut pas utiliser corrige_liens_publics en filtre car les liens sont interceptés et gérés par le compteur de clic, c'est donc à la sortir de l'url de la table qu'on intervient, avec une fonction corrige_lien plus simple qui ne travaille que sur un lien.

+ amélioration encore pour les liens en visu format texte

Location:
_plugins_/spip-lettres
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-lettres/spip-lettres-200/classes/abonne.php

    r48782 r49186  
    234234
    235235                        if ($redirection)
    236                                 return $redirection;
     236                                return corrige_lien($redirection);
    237237                        else
    238238                                return $GLOBALS['meta']['adresse_site'];
  • _plugins_/spip-lettres/spip-lettres-200/lettres_fonctions.php

    r49185 r49186  
    107107                        $url = sql_fetch($verification_clic);
    108108                        $redirection = $url['url'];
    109                 } else {
     109                } else
    110110                        $redirection = $GLOBALS['meta']['adresse_site'];
    111                 }
    112                 return $redirection;
     111                return corrige_lien($redirection);
    113112        }
    114113       
     114
     115        function corrige_lien ($url) {
     116                $replace = array(
     117                        'articles' => 'article',
     118                        'naviguer' => 'rubrique',
     119                        'breves' => 'breve',
     120                        'mots_edit' => 'mot',
     121                        'sites_tous' => 'site',
     122                );
     123                foreach ($replace as $key => $value)
     124                        $url = str_ireplace ("/ecrire/?exec=$key&", "/spip.php?page=$value&", $url);
     125                return $url;
     126        }
    115127       
    116128        if(!function_exists('str_split')) {
     
    159171// et le lien clicable à la suite, entre parenthèse.
    160172// Si le texte du lien est déjà une url ou y ressemble fort, on ne met que l'url
     173// Si c'est une url relative, on ajoute l'adresse du site
    161174        function prepare_format_texte_lien($matches) {
    162175                if ((strpos(ltrim($matches[2]), 'http:')===0)
    163176                        or (strpos(ltrim($matches[2]), 'www.')===0))
    164177                        return $matches[1];
    165                 else return $matches[2]." [ ".$matches[1]." ]";
     178                if (strpos(ltrim($matches[1]),'/')===0)
     179                         $matches[1] =  $GLOBALS['meta']['adresse_site'].$matches[1];
     180                return $matches[2]." [ ".$matches[1]." ]";
    166181        };
    167182        function prepare_format_texte ($html) {
     
    169184                return textebrut (preg_replace_callback ($pat, 'prepare_format_texte_lien', $html));
    170185        };
    171        
    172         /**
    173  * Filtre copié depuis spip-listes http://zone.spip.org/trac/spip-zone/changeset/49179
    174  * author: paladin@...
    175  * Corrige le bug de spip2 (corrigé dans spip3) qui fait que liens [ xxx->n] calculés dans le privé
    176  * (comme les lettres le sont au  moment de leur envoi) pointent vers l'adresse privée au lieu de publique
    177  * J'y ajoute une fonction corrige_liens_publics, à utiliser de préférence dans SPIP2 pour corriger les liens,
    178  * et qui est redéfinie dans la version pour SPIP 3, de manière à ce que les squelettes ne corrigent plus,
    179  * sans devoir être immédiatement corrigés, eux, lors du portage du site sous spip3.
    180  * 
    181  * Commentaire d'origine :
    182  *
    183  * Un filtre pour transformer les URLs relatives
    184  * à l'espace privé en URLs pour espace public.
    185  * A appliquer au conteneur, dans le patron,
    186  * du style : [(#TEXTE|liens_publics)]
    187  * @version CP-20110629
    188  * @example [(#TEXTE|liens_publics)]
    189  * @see http://www.spip.net/fr_article3377.html
    190  * @param string $texte
    191  * @return string
    192  */
    193 function corrige_liens_publics ($texte) {
    194         return liens_publics ($texte);
    195 }
    196 function liens_publics ($texte)
    197 {
    198         $url_site = $GLOBALS['meta']['adresse_site'];
    199        
    200         $replace = array(
    201                 'articles' => 'article',
    202                 'naviguer' => 'rubrique',
    203                 'breves' => 'breve',
    204                 'mots_edit' => 'mot',
    205                 'sites_tous' => 'site',
    206         );
    207        
    208         foreach ($replace as $key => $value)
    209         {
    210                 if (preg_match_all(',(<a[[:space:]]+[^<>]*href=["\']?' . $url_site . ')'
    211                                                    . '/ecrire/\?exec=(' . $key . ')'
    212                                                    . '([^<>]*>),imsS',
    213                                                 $texte,
    214                                                 $liens,
    215                                                 PREG_SET_ORDER))
    216                 {
    217                         foreach ($liens as $lien)
    218                         {
    219                                 $to = $lien[1] . '/?page=' . $value . $lien[3];
    220                                 $texte = str_ireplace($lien[0], $to, $texte);
    221                         }
    222                 }
    223         }
    224         return ($texte);
    225 }
    226186?>
  • _plugins_/spip-lettres/trunk/lettres_fonctions.php

    r49185 r49186  
    159159// et le lien clicable à la suite, entre parenthèse.
    160160// Si le texte du lien est déjà une url ou y ressemble fort, on ne met que l'url
     161// Si c'est une url relative, on ajoute l'adresse du site avant
    161162        function prepare_format_texte_lien($matches) {
    162163                if ((strpos(ltrim($matches[2]), 'http:')===0)
    163164                        or (strpos(ltrim($matches[2]), 'www.')===0))
    164165                        return $matches[1];
    165                 else return $matches[2]." [ ".$matches[1]." ]";
     166                if (strpos(ltrim($matches[1]),'/')===0)
     167                         $matches[1] =  $GLOBALS['meta']['adresse_site'].$matches[1];
     168                return $matches[2]." [ ".$matches[1]." ]";
    166169        };
    167170        function prepare_format_texte ($html) {
     
    169172                return textebrut (preg_replace_callback ($pat, 'prepare_format_texte_lien', $html));
    170173        };
    171        
    172         /**
    173  * Filtre copié depuis spip-listes http://zone.spip.org/trac/spip-zone/changeset/49179
    174  * author: paladin@...
    175  * Corrige le bug de spip2 (corrigé dans spip3) qui fait que liens [ xxx->n] calculés dans le privé
    176  * (comme les lettres le sont au  moment de leur envoi) pointent vers l'adresse privée au lieu de publique
    177  * J(JLuc)'y ajoute une fonction corrige_liens_publics, à utiliser de préférence dans SPIP2 pour corriger les liens,
    178  * et qui est redéfinie dans la version pour SPIP 3, de manière à ce que les squelettes ne corrigent plus,
    179  * sans devoir être immédiatement corrigés, eux, lors du portage du site sous spip3.
    180  * 
    181  * Commentaire d'origine :
    182  *
    183  * Un filtre pour transformer les URLs relatives
    184  * à l'espace privé en URLs pour espace public.
    185  * A appliquer au conteneur, dans le patron,
    186  * du style : [(#TEXTE|liens_publics)]
    187  * @version CP-20110629
    188  * @example [(#TEXTE|liens_publics)]
    189  * @see http://www.spip.net/fr_article3377.html
    190  * @param string $texte
    191  * @return string
    192  */
    193  // pour compatibilité des squelettes : ne fait plus rien dans spip3, retirer des squelettes
    194 function corrige_liens_publics ($texte) {
    195         return $texte;
    196 }
    197 function liens_publics ($texte)
    198 {
    199         $url_site = $GLOBALS['meta']['adresse_site'];
    200        
    201         $replace = array(
    202                         'articles' => 'article',
    203                         'naviguer' => 'rubrique',
    204                         'breves' => 'breve',
    205                         'mots_edit' => 'mot',
    206                         'sites_tous' => 'site',
    207         );
    208        
    209         foreach ($replace as $key => $value)
    210         {
    211                         if (preg_match_all(',(<a[[:space:]]+[^<>]*href=["\']?' . $url_site . ')'
    212                                                                                            . '/ecrire/\?exec=(' . $key . ')'
    213                                                                                            . '([^<>]*>),imsS',
    214                                                                                         $texte,
    215                                                                                         $liens,
    216                                                                                         PREG_SET_ORDER))
    217                         {
    218                                         foreach ($liens as $lien)
    219                                         {
    220                                                         $to = $lien[1] . '/?page=' . $value . $lien[3];
    221                                                         $texte = str_ireplace($lien[0], $to, $texte);
    222                                         }
    223                         }
    224         }
    225         return ($texte);
    226 }
     174
    227175?>
Note: See TracChangeset for help on using the changeset viewer.