Changeset 81643 in spip-zone


Ignore:
Timestamp:
Mar 28, 2014, 11:12:28 AM (5 years ago)
Author:
cedric@…
Message:

BugFix? sur les collisions d'URLs propres/arbo qui continuait même après être revenu en URL propre car le décodage des anciennes URLs arbo génére de nouvelles URLs arbos :

Quand on decode une url arbo qui est en fait une ancienne URL car on a changé de schema d'URL, il ne faut pas regenerer de nouveaux segments arbo mais rediriger directement vers l'URL dans le nouveau schema.
Pour cela on se base sur le nom de la fonction qui appelle urls_arbo_dist : si c'est urls_xx et pas urls_decoder_url : c'est un appel de compatibilité depuis un autre schema.

Location:
_core_/branches/spip-3.0/plugins/urls_etendues
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _core_/branches/spip-3.0/plugins/urls_etendues/paquet.xml

    r81377 r81643  
    22        prefix="urls"
    33        categorie="statistique"
    4         version="1.4.17"
     4        version="1.4.18"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
  • _core_/branches/spip-3.0/plugins/urls_etendues/urls/arbo.php

    r79785 r81643  
    597597
    598598                if (count($url_arbo_new)){
    599                         foreach($url_arbo_new as $k=>$o)
    600                                 if ($s = declarer_url_arbo($o['objet'],$o['id_objet']))
    601                                         $url_arbo_new[$k] = $s;
    602                                 else
    603                                         $url_arbo_new[$k] = implode('/',$o['segment']);
    604                         $url_arbo_new = ltrim(implode('/',$url_arbo_new),'/');
    605                        
    606                         if ($url_arbo_new!==$url_propre){
    607                                 $url_redirect = $url_arbo_new;
     599                        $caller = debug_backtrace();
     600                        $caller = $caller[1]['function'];
     601                        // si on est appele par un autre module d'url c'est du decodage d'une ancienne URL
     602                        // ne pas regenerer des segments arbo, mais rediriger vers la nouvelle URL
     603                        // dans la nouvelle forme
     604                        if (strncmp($caller,"urls_",5)==0 AND $caller!=="urls_decoder_url"){
    608605                                // en absolue, car assembler ne gere pas ce cas particulier
    609606                                include_spip('inc/filtres_mini');
    610                                 $url_redirect = url_absolue($url_redirect);
     607                                $col_id = id_table_objet($entite);
     608                                $url_new = generer_url_entite($contexte[$col_id],$entite);
     609                                // securite contre redirection infinie
     610                                if ($url_new!==$url_propre)
     611                                        $url_redirect = url_absolue($url_new);
     612                        }
     613                        else {
     614                                foreach($url_arbo_new as $k=>$o)
     615                                        if ($s = declarer_url_arbo($o['objet'],$o['id_objet']))
     616                                                $url_arbo_new[$k] = $s;
     617                                        else
     618                                                $url_arbo_new[$k] = implode('/',$o['segment']);
     619                                $url_arbo_new = ltrim(implode('/',$url_arbo_new),'/');
     620
     621                                if ($url_arbo_new!==$url_propre){
     622                                        $url_redirect = $url_arbo_new;
     623                                        // en absolue, car assembler ne gere pas ce cas particulier
     624                                        include_spip('inc/filtres_mini');
     625                                        $url_redirect = url_absolue($url_redirect);
     626                                }
    611627                        }
    612628                }
Note: See TracChangeset for help on using the changeset viewer.