Changeset 106280 in spip-zone


Ignore:
Timestamp:
Sep 14, 2017, 1:54:09 PM (3 years ago)
Author:
kent1@…
Message:

En cas d'utilisation de CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES avec plusieurs domaines possible (sites de tests, dev, intranet de publication...), il faut transformer l'url trouvée en url de l'instance ($mauvaise_url_reelle) sur laquelle on se trouve (url_de_base()) pour que urls_decoder_url trouve l'url au final

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/correction_liens_internes/trunk/correction_liens_internes_pipelines.php

    r106099 r106280  
    88
    99function correction_liens_internes_pre_edition($flux){
    10     if ($flux['args']['action'] == "modifier") {
    11         foreach ($flux['data'] as $champ => $valeur)
    12             $flux['data'][$champ] = correction_liens_internes_correction($valeur);
    13     }
    14     return $flux;
     10        if ($flux['args']['action'] == 'modifier') {
     11                foreach ($flux['data'] as $champ => $valeur) {
     12                        $flux['data'][$champ] = correction_liens_internes_correction($valeur);
     13                }
     14        }
     15        return $flux;
    1516}
    1617function correction_liens_internes_correction_url_prive($mauvaise_url,$composants_url){
     
    2728                $objet=$exec;
    2829                $id_objet = $args["id_".$objet];
    29         }       
     30        }
    3031        return array($objet,$id_objet,$ancre);
    3132}
    3233
    33 function correction_liens_internes_correction_url_public($mauvaise_url,$composants_url){
     34function correction_liens_internes_correction_url_public($mauvaise_url, $composants_url) {
    3435        // Pour le cas où on a copié-collé une URL depuis espace public.
    35         $ancre = isset($composants_url['fragment']) ? '#' . $composants_url['fragment'] : '';   
     36        $ancre = isset($composants_url['fragment']) ? '#' . $composants_url['fragment'] : '';
     37
    3638        list($fond, $contexte) = urls_decoder_url($mauvaise_url);
     39
    3740        if(
    38                 ($objet = isset($contexte['type']) ? $contexte['type'] : $fond) &&
    39                 ($id_objet = $contexte[id_table_objet($objet)])
    40         );
    41         else {
    42             // on tente de reconnaitre les formats simples...
    43             parse_str($composants_url["query"], $composants_url);
    44             if (($objet = $composants_url[_SPIP_PAGE]) && ($id_objet = $composants_url[id_table_objet($objet)]));
    45             else {
    46                 list($composants_url, $objet) = nettoyer_url_page(str_replace(url_de_base(), '', $mauvaise_url), $composants_url);
    47                 $id_objet = $composants_url[id_table_objet($objet)];
    48             }
     41                                        ($objet = isset($contexte['type']) ? $contexte['type'] : $fond) &&
     42                                        ($id_objet = $contexte[id_table_objet($objet)])
     43                                        );
     44        else {
     45                // on tente de reconnaitre les formats simples...
     46                parse_str($composants_url["query"], $composants_url);
     47                if (($objet = $composants_url[_SPIP_PAGE]) && ($id_objet = $composants_url[id_table_objet($objet)]));
     48                else {
     49                        list($composants_url, $objet) = nettoyer_url_page(str_replace(url_de_base(), '', $mauvaise_url), $composants_url);
     50                        $id_objet = $composants_url[id_table_objet($objet)];
     51                }
    4952        }
    5053        return array($objet,$id_objet,$ancre);
    5154}
    5255function correction_liens_internes_correction($texte){
    53     // pas de liens, on s'en va...
    54     if(!is_string($texte) || strpos($texte, '->') === false) return $texte;
     56        // pas de liens, on s'en va...
     57        if (!is_string($texte) || strpos($texte, '->') === false) {
     58                return $texte;
     59        }
    5560
    56     // alias historiques
    57     static $racc = array('article' => '', 'auteur' => 'aut', 'rubrique' => 'rub', 'breve' => 'br');
     61        // alias historiques
     62        static $racc = array('article' => '', 'auteur' => 'aut', 'rubrique' => 'rub', 'breve' => 'br');
    5863
    59     // traiter d'autre domaines ?
    60     if($domaines = correction_liens_internes_autres_domaines()) {
    61         $domaines = array_unique(array_merge(array(url_de_base()), $domaines));
    62         // array_walk($domaines, function(&$v) { $v = preg_quote($v); });
    63         array_walk($domaines, create_function('&$v', '$v = preg_quote($v, "#");'));
    64         $url_site = '(?:' . join('|',$domaines) . ')';
    65     } else {
    66         $url_site = preg_quote(url_de_base());
    67     }
     64        // traiter d'autre domaines ?
     65        if ($domaines = correction_liens_internes_autres_domaines()) {
     66                $domaines_origine = $domaines;
     67                $domaines = array_unique(array_merge(array(url_de_base()), $domaines));
     68                // array_walk($domaines, function(&$v) { $v = preg_quote($v); });
     69                array_walk($domaines, create_function('&$v', '$v = preg_quote($v, "#");'));
     70                $url_site = '(?:' . join('|',$domaines) . ')';
     71        } else {
     72                $domaines_origine = array(url_de_base());
     73                $url_site = preg_quote(url_de_base());
     74        }
    6875
    69     // on repère les mauvaises URLs
    70     $match = array(); $objet = ''; $id_objet = 0;
    71     preg_match_all("#\[.*->($url_site.*)\]#U", $texte, $match, PREG_SET_ORDER);
    72     include_spip("inc/urls");
    73     foreach($match as $lien){
    74         $mauvais_raccourci = $lien[0];
    75         $mauvaise_url = $lien[1];
    76         $composants_url =  parse_url($mauvaise_url);   
     76        // on repère les mauvaises URLs
     77        $match = array();
     78        $objet = '';
     79        $id_objet = 0;
     80        preg_match_all("#\[.*->($url_site.*)\]#U", $texte, $match, PREG_SET_ORDER);
     81        include_spip("inc/urls");
    7782
    78         // Url copiée depuis le privé ou depuis le public?
    79         if (strrpos($composants_url['path'],_DIR_RESTREINT_ABS)!=False){
    80                 list ($objet, $id_objet,$ancre) = correction_liens_internes_correction_url_prive($mauvaise_url,$composants_url);
    81 
     83        foreach($match as $lien) {
     84                $mauvais_raccourci = $lien[0];
     85                $mauvaise_url = $lien[1];
     86                $mauvaise_url_reelle = str_replace($domaines_origine, url_de_base(), $mauvaise_url);
     87                $composants_url = parse_url($mauvaise_url_reelle);
     88                // Url copiée depuis le privé ou depuis le public?
     89                if (strrpos($composants_url['path'],_DIR_RESTREINT_ABS)!=False){
     90                        list ($objet, $id_objet,$ancre) = correction_liens_internes_correction_url_prive($mauvaise_url,$composants_url);
     91                }
     92                else{
     93                        list ($objet, $id_objet,$ancre) = correction_liens_internes_correction_url_public($mauvaise_url_reelle,$composants_url);
     94                }
     95                if($objet && $id_objet){
     96                        if(isset($racc[$objet])){
     97                                $objet = $racc[$objet];
     98                        }
     99                        $bonne_url  = $objet . $id_objet . $ancre;
     100                        $bon_raccourci = str_replace($mauvaise_url, $bonne_url, $mauvais_raccourci);
     101                        $texte = str_replace($mauvais_raccourci, $bon_raccourci, $texte);
     102                        spip_log(self() . (_request('self')?' / '._request('self'):'')  //pour crayons notamment...
     103                                                        . " : $mauvais_raccourci => $bon_raccourci", 'liens_internes.' . _LOG_AVERTISSEMENT);
     104                }
    82105        }
    83         else{
    84                 list ($objet, $id_objet,$ancre) = correction_liens_internes_correction_url_public($mauvaise_url,$composants_url);
    85         }
    86         if($objet && $id_objet){
    87                 if(isset($racc[$objet])){
    88                         $objet = $racc[$objet];
    89                 }
    90                 $bonne_url  = $objet . $id_objet . $ancre;
    91                 $bon_raccourci = str_replace($mauvaise_url, $bonne_url, $mauvais_raccourci);
    92                 $texte = str_replace($mauvais_raccourci, $bon_raccourci, $texte);
    93                 spip_log(self() . (_request('self')?' / '._request('self'):'')  //pour crayons notamment...
    94                         . " : $mauvais_raccourci => $bon_raccourci", 'liens_internes.' . _LOG_AVERTISSEMENT);
    95         }
    96     }
    97     return $texte;
     106        return $texte;
    98107}
    99108
    100109function correction_liens_internes_autres_domaines() {
    101     // si la constante est définie, prendre en compte les domaines déclarés
    102     $autres_domaines = defined('CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES')
    103         ? preg_split('#([\s,|])+#i', CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES) : array();
    104     // si le plugin multidomaine est actif, prendre en compte tous les domaines déclarés
    105     if(test_plugin_actif('multidomaines')) {
    106         $config_multi = lire_config('multidomaines');
    107         foreach($config_multi as $key => $value) {
    108             if(preg_match('#editer_url#', $key) && $value) {
    109                 $autres_domaines[] = $value;
    110             }
    111         }
    112     }
    113     // mettre en forme les domaines
    114     foreach($autres_domaines as $i=>$v) {
    115         // ajouter un slash final si nécessaire
    116         if(substr($v, -1) != '/') $autres_domaines[$i] = $v . '/';
    117         // ajouter http:// par défaut si pas de scheme
    118         $infos = parse_url($v);
    119         if(!$infos['scheme']) $autres_domaines[$i] = 'http://'  .$v;
    120     }
    121     return $autres_domaines;
     110        // si la constante est définie, prendre en compte les domaines déclarés
     111        $autres_domaines = defined('CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES')
     112        ? preg_split('#([\s,|])+#i', CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES) : array();
     113
     114        // si le plugin multidomaine est actif, prendre en compte tous les domaines déclarés
     115        if (test_plugin_actif('multidomaines')) {
     116                $config_multi = lire_config('multidomaines');
     117                foreach($config_multi as $key => $value) {
     118                        if(preg_match('#editer_url#', $key) && $value) {
     119                                $autres_domaines[] = $value;
     120                        }
     121                }
     122        }
     123        // mettre en forme les domaines
     124        foreach($autres_domaines as $i => $v) {
     125                // ajouter un slash final si nécessaire
     126                if(substr($v, -1) != '/') {
     127                        $autres_domaines[$i] = $v . '/';
     128                }
     129                // ajouter http:// par défaut si pas de scheme
     130                $infos = parse_url($v);
     131                if(!$infos['scheme']) {
     132                        $autres_domaines[$i] = 'http://'  .$v;
     133                }
     134        }
     135        return $autres_domaines;
    122136}
    123 
    124 ?>
Note: See TracChangeset for help on using the changeset viewer.