X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Frubriques.php;fp=www%2Fecrire%2Finc%2Frubriques.php;h=0d0cd5c8b9434d6006d0edea2b5667b5c4a4fdd0;hp=e6ab01ef9be58634fc7f9df49b31d2fe6db28546;hb=b97874b04ea8ca43d21b7ef7309feff8ef0e4a07;hpb=92c7d7f7bccb9629bb7c81b9582b56b61c3f8ec9 diff --git a/www/ecrire/inc/rubriques.php b/www/ecrire/inc/rubriques.php index e6ab01e..0d0cd5c 100644 --- a/www/ecrire/inc/rubriques.php +++ b/www/ecrire/inc/rubriques.php @@ -613,32 +613,40 @@ function inc_calcul_hierarchie_in_dist($id, $tout=true) { // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN if (!is_array($id)) $id = explode(',',$id); $id = join(',', array_map('intval', $id)); - if (isset($b[$id])) - return $b[$id]; - // Notre branche commence par la rubrique de depart si $tout=true - $hier = $tout?$id:""; + if (isset($b[$id])) { + // Notre branche commence par la rubrique de depart si $tout=true + return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : ""; + } + + $hier = ""; // On ajoute une generation (les filles de la generation precedente) // jusqu'a epuisement, en se protegeant des references circulaires + $ids_nouveaux_parents = $id; $maxiter = 10000; while ($maxiter-- AND $parents = sql_allfetsel( 'id_parent', 'spip_rubriques', - sql_in('id_rubrique', $id) ." AND ". sql_in('id_parent',$hier,'NOT') + sql_in('id_rubrique', $ids_nouveaux_parents) ." AND ". sql_in('id_parent',$hier,'NOT') )) { - $id = join(',', array_map('reset', $parents)); - $hier = $id.(strlen($hier)?','.$hier:''); + $ids_nouveaux_parents = join(',', array_map('reset', $parents)); + $hier = $ids_nouveaux_parents.(strlen($hier)?','.$hier:''); } # securite pour ne pas plomber la conso memoire sur les sites prolifiques - if (strlen($hier)<10000) + if (strlen($hier)<10000) { $b[$id] = $hier; + } + + // Notre branche commence par la rubrique de depart si $tout=true + $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier; return $hier; } + /** * Calcule la date du prochain article post-daté *