Ignore:
Timestamp:
Dec 13, 2015, 11:58:52 AM (5 years ago)
Author:
cedric@…
Message:

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/urls_etendues/urls/arbo.php

    r93427 r93629  
    1111\***************************************************************************/
    1212
    13 if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
     13if (!defined("_ECRIRE_INC_VERSION")) {
     14        return;
     15} // securiser
    1416
    1517# donner un exemple d'url pour le formulaire de choix
     
    2931 * "sous-repertoire", vous devrez aussi editer la ligne "RewriteBase" ce fichier.
    3032 * Les URLs definies seront alors redirigees vers les fichiers de SPIP.
    31  * 
     33 *
    3234 * Choisissez "arbo" dans les pages de configuration d'URL
    3335 *
    3436 * SPIP calculera alors ses liens sous la forme "Mon-titre-d-article".
    3537 * Variantes :
    36  * 
     38 *
    3739 * Terminaison :
    3840 * les terminaisons ne *sont pas* stockees en base, elles servent juste
     
    4042 * pour avoir des url terminant par html
    4143 * define ('_terminaison_urls_arbo', '.html');
    42  * 
     44 *
    4345 * pour preciser des terminaisons particulieres pour certains types
    4446 * $GLOBALS['url_arbo_terminaisons']=array(
     
    4749 * 'groupe' => '/',
    4850 * 'defaut' => '.html');
    49  * 
     51 *
    5052 * pour avoir des url numeriques (id) du type 12/5/4/article/23
    5153 * define ('_URLS_ARBO_MIN',255);
    52  * 
    53  * 
     54 *
     55 *
    5456 * pour conserver la casse des titres dans les url
    5557 * define ('_url_arbo_minuscules',0);
    56  * 
    57  * pour choisir le caractere de separation titre-id en cas de doublon 
     58 *
     59 * pour choisir le caractere de separation titre-id en cas de doublon
    5860 * (ne pas utiliser '/')
    5961 * define ('_url_arbo_sep_id','-');
    60  * 
     62 *
    6163 * pour modifier la hierarchie apparente dans la constitution des urls
    6264 * ex pour que les mots soient classes par groupes
    6365 * $GLOBALS['url_arbo_parents']=array(
    64  *                        'article'=>array('id_rubrique','rubrique'),
    65  *                        'rubrique'=>array('id_parent','rubrique'),
    66  *                        'breve'=>array('id_rubrique','rubrique'),
    67  *                        'site'=>array('id_rubrique','rubrique'),
    68  *                              'mot'=>array('id_groupe','groupes_mot'));
    69  * 
     66 *        'article'=>array('id_rubrique','rubrique'),
     67 *        'rubrique'=>array('id_parent','rubrique'),
     68 *        'breve'=>array('id_rubrique','rubrique'),
     69 *        'site'=>array('id_rubrique','rubrique'),
     70 *        'mot'=>array('id_groupe','groupes_mot'));
     71 *
    7072 * pour personaliser les types
    7173 * $GLOBALS['url_arbo_types']=array(
     
    7476 * 'mot'=>'tags'
    7577 * );
    76  * 
     78 *
    7779 */
    7880
    7981include_spip('inc/xcache');
    8082if (!function_exists('Cache')) {
    81         function Cache(){return null;}
    82 }
    83 
    84 $config_urls_arbo = isset($GLOBALS['meta']['urls_arbo'])?unserialize($GLOBALS['meta']['urls_arbo']):array();
    85 if (!defined('_debut_urls_arbo')) define('_debut_urls_arbo', '');
    86 if (!defined('_terminaison_urls_arbo')) define('_terminaison_urls_arbo', '');
     83        function Cache() { return null; }
     84}
     85
     86$config_urls_arbo = isset($GLOBALS['meta']['urls_arbo']) ? unserialize($GLOBALS['meta']['urls_arbo']) : array();
     87if (!defined('_debut_urls_arbo')) {
     88        define('_debut_urls_arbo', '');
     89}
     90if (!defined('_terminaison_urls_arbo')) {
     91        define('_terminaison_urls_arbo', '');
     92}
    8793// pour choisir le caractere de separation titre-id en cas de doublon
    8894// (ne pas utiliser '/')
    89 if (!defined('_url_arbo_sep_id')) define('_url_arbo_sep_id',isset($config_urls_arbo['url_arbo_sep_id'])?$config_urls_arbo['url_arbo_sep_id']:'-');
     95if (!defined('_url_arbo_sep_id')) {
     96        define('_url_arbo_sep_id', isset($config_urls_arbo['url_arbo_sep_id']) ? $config_urls_arbo['url_arbo_sep_id'] : '-');
     97}
    9098// option pour tout passer en minuscules
    91 if (!defined('_url_arbo_minuscules')) define('_url_arbo_minuscules',isset($config_urls_arbo['url_arbo_minuscules'])?$config_urls_arbo['url_arbo_minuscules']:1);
    92 if (!defined('_URLS_ARBO_MAX')) define('_URLS_ARBO_MAX', isset($config_urls_arbo['URLS_ARBO_MAX'])?$config_urls_arbo['URLS_ARBO_MAX']:80);
    93 if (!defined('_URLS_ARBO_MIN')) define('_URLS_ARBO_MIN', isset($config_urls_arbo['URLS_ARBO_MIN'])?$config_urls_arbo['URLS_ARBO_MIN']:3);
    94 
    95 if (!defined('_url_sep_id')) define('_url_sep_id',_url_arbo_sep_id);
     99if (!defined('_url_arbo_minuscules')) {
     100        define('_url_arbo_minuscules', isset($config_urls_arbo['url_arbo_minuscules']) ? $config_urls_arbo['url_arbo_minuscules'] : 1);
     101}
     102if (!defined('_URLS_ARBO_MAX')) {
     103        define('_URLS_ARBO_MAX', isset($config_urls_arbo['URLS_ARBO_MAX']) ? $config_urls_arbo['URLS_ARBO_MAX'] : 80);
     104}
     105if (!defined('_URLS_ARBO_MIN')) {
     106        define('_URLS_ARBO_MIN', isset($config_urls_arbo['URLS_ARBO_MIN']) ? $config_urls_arbo['URLS_ARBO_MIN'] : 3);
     107}
     108
     109if (!defined('_url_sep_id')) {
     110        define('_url_sep_id', _url_arbo_sep_id);
     111}
    96112
    97113// Ces chaines servaient de marqueurs a l'epoque ou les URL propres devaient
     
    102118
    103119#define('_MARQUEUR_URL', serialize(array('rubrique1' => '-', 'rubrique2' => '-', 'breve1' => '+', 'breve2' => '+', 'site1' => '@', 'site2' => '@', 'auteur1' => '_', 'auteur2' => '_', 'mot1' => '+-', 'mot2' => '-+')));
    104 if (!defined('_MARQUEUR_URL')) define('_MARQUEUR_URL', false);
     120if (!defined('_MARQUEUR_URL')) {
     121        define('_MARQUEUR_URL', false);
     122}
    105123
    106124/**
     
    110128 * @return string
    111129 */
    112 function url_arbo_parent($type){
     130function url_arbo_parent($type) {
    113131        static $parents = null;
    114         if (is_null($parents)){
     132        if (is_null($parents)) {
    115133                $parents = array(
    116                           'article'=>array('id_rubrique','rubrique'),
    117                           'rubrique'=>array('id_parent','rubrique'),
    118                           'breve'=>array('id_rubrique','rubrique'),
    119                           'site'=>array('id_rubrique','rubrique'));
    120                 if (isset($GLOBALS['url_arbo_parents']) AND !isset($_REQUEST['url_arbo_parents'])){
    121                         $parents = array_merge($parents,$GLOBALS['url_arbo_parents']);
    122                 }                         
    123         }
    124         return (isset($parents[$type])?$parents[$type]:'');
     134                        'article' => array('id_rubrique', 'rubrique'),
     135                        'rubrique' => array('id_parent', 'rubrique'),
     136                        'breve' => array('id_rubrique', 'rubrique'),
     137                        'site' => array('id_rubrique', 'rubrique')
     138                );
     139                if (isset($GLOBALS['url_arbo_parents']) AND !isset($_REQUEST['url_arbo_parents'])) {
     140                        $parents = array_merge($parents, $GLOBALS['url_arbo_parents']);
     141                }
     142        }
     143
     144        return (isset($parents[$type]) ? $parents[$type] : '');
    125145}
    126146
     
    133153 * @return string
    134154 */
    135 function url_arbo_terminaison($type){
     155function url_arbo_terminaison($type) {
    136156        static $terminaison_types = null;
    137         if ($terminaison_types==null){
    138                 $terminaison_types = array('rubrique' => '/','mot' => '','defaut' => defined('_terminaison_urls_arbo')?_terminaison_urls_arbo:'.html');
    139                 if (isset($GLOBALS['url_arbo_terminaisons']))
    140                         $terminaison_types = array_merge($terminaison_types,$GLOBALS['url_arbo_terminaisons']);
     157        if ($terminaison_types == null) {
     158                $terminaison_types = array(
     159                        'rubrique' => '/',
     160                        'mot' => '',
     161                        'defaut' => defined('_terminaison_urls_arbo') ? _terminaison_urls_arbo : '.html'
     162                );
     163                if (isset($GLOBALS['url_arbo_terminaisons'])) {
     164                        $terminaison_types = array_merge($terminaison_types, $GLOBALS['url_arbo_terminaisons']);
     165                }
    141166        }
    142167        // si c'est un appel avec type='' c'est pour avoir la liste des terminaisons
    143         if (!$type)
     168        if (!$type) {
    144169                return array_unique(array_values($terminaison_types));
    145         if (isset($terminaison_types[$type]))
     170        }
     171        if (isset($terminaison_types[$type])) {
    146172                return $terminaison_types[$type];
    147         elseif (isset($terminaison_types['defaut']))
     173        } elseif (isset($terminaison_types['defaut'])) {
    148174                return $terminaison_types['defaut'];
     175        }
     176
    149177        return "";
    150178}
     
    158186 * @return array|string
    159187 */
    160 function url_arbo_type($type){
     188function url_arbo_type($type) {
    161189        static $synonymes_types = null;
    162         if (!$synonymes_types){
    163                 $synonymes_types = array('rubrique'=>'');
    164                 if (isset($GLOBALS['url_arbo_types']) AND is_array($GLOBALS['url_arbo_types']))
    165                         $synonymes_types = array_merge($synonymes_types,$GLOBALS['url_arbo_types']);
     190        if (!$synonymes_types) {
     191                $synonymes_types = array('rubrique' => '');
     192                if (isset($GLOBALS['url_arbo_types']) AND is_array($GLOBALS['url_arbo_types'])) {
     193                        $synonymes_types = array_merge($synonymes_types, $GLOBALS['url_arbo_types']);
     194                }
    166195        }
    167196        // si c'est un appel avec type='' c'est pour avoir la liste inversee des synonymes
    168         if (!$type)
     197        if (!$type) {
    169198                return array_flip($synonymes_types);
    170         return
    171             ($t=(isset($synonymes_types[$type])?$synonymes_types[$type]:$type))  // le type ou son synonyme
    172           . ($t?'/':''); // le / eventuel pour separer, si le synonyme n'est pas vide
     199        }
     200
     201        return
     202                ($t = (isset($synonymes_types[$type]) ? $synonymes_types[$type] : $type))  // le type ou son synonyme
     203                . ($t ? '/' : ''); // le / eventuel pour separer, si le synonyme n'est pas vide
    173204}
    174205
     
    191222
    192223        include_spip('action/editer_url');
    193         if (!$url = url_nettoyer($objet['titre'],_URLS_ARBO_MAX,_URLS_ARBO_MIN,'-',_url_arbo_minuscules?'strtolower':''))
     224        if (!$url = url_nettoyer($objet['titre'], _URLS_ARBO_MAX, _URLS_ARBO_MIN, '-',
     225                _url_arbo_minuscules ? 'strtolower' : '')
     226        ) {
    194227                $url = $objet['id_objet'];
    195        
     228        }
     229
    196230        $x['data'] =
    197                   url_arbo_type($objet['type']) // le type ou son synonyme
    198           . $url; // le titre
     231                url_arbo_type($objet['type']) // le type ou son synonyme
     232                . $url; // le titre
    199233
    200234        return $x;
     
    211245 * @return string
    212246 */
    213 function declarer_url_arbo_rec($url, $type, $parent, $type_parent){
    214         if (is_null($parent)){
     247function declarer_url_arbo_rec($url, $type, $parent, $type_parent) {
     248        if (is_null($parent)) {
    215249                return $url;
    216250        }
    217251        // Si pas de parent ou si son URL est vide, on ne renvoit que l'URL de l'objet en court
    218         if ($parent==0 or !($url_parent = declarer_url_arbo($type_parent?$type_parent:'rubrique',$parent))){
    219                 return rtrim($url,'/');
    220         }
    221         // Sinon on renvoit l'URL de l'objet concaténée avec celle du parent
     252        if ($parent == 0 or !($url_parent = declarer_url_arbo($type_parent ? $type_parent : 'rubrique', $parent))) {
     253                return rtrim($url, '/');
     254        } // Sinon on renvoit l'URL de l'objet concaténée avec celle du parent
    222255        else {
    223                 return rtrim($url_parent,'/') . '/' . rtrim($url,'/');
     256                return rtrim($url_parent, '/') . '/' . rtrim($url, '/');
    224257        }
    225258}
     
    228261 * Renseigner les infos les plus recentes de l'url d'un objet
    229262 * et de quoi la (re)construire si besoin
     263 *
    230264 * @param string $type
    231265 * @param int $id_objet
    232266 * @return bool|null|array
    233267 */
    234 function renseigner_url_arbo($type, $id_objet){
     268function renseigner_url_arbo($type, $id_objet) {
    235269        $urls = array();
    236270        $trouver_table = charger_fonction('trouver_table', 'base');
    237271        $desc = $trouver_table(table_objet($type));
    238272        $table = $desc['table'];
    239         $col_id =  @$desc['key']["PRIMARY KEY"];
    240         if (!$col_id) return false; // Quand $type ne reference pas une table
     273        $col_id = @$desc['key']["PRIMARY KEY"];
     274        if (!$col_id) {
     275                return false;
     276        } // Quand $type ne reference pas une table
    241277        $id_objet = intval($id_objet);
    242278
    243279        $champ_titre = $desc['titre'] ? $desc['titre'] : 'titre';
    244        
     280
    245281        // parent
    246282        $champ_parent = url_arbo_parent($type);
    247283        $sel_parent = ', 0 as parent';
    248284        $order_by_parent = "";
    249         if ($champ_parent){
    250                 $sel_parent = ", O.".reset($champ_parent).' as parent';
     285        if ($champ_parent) {
     286                $sel_parent = ", O." . reset($champ_parent) . ' as parent';
    251287                // trouver l'url qui matche le parent en premier
    252                 $order_by_parent = "O.".reset($champ_parent)."=U.id_parent DESC, ";
     288                $order_by_parent = "O." . reset($champ_parent) . "=U.id_parent DESC, ";
    253289        }
    254290        //  Recuperer une URL propre correspondant a l'objet.
    255291        $row = sql_fetsel("U.url, U.date, U.id_parent, U.perma, $champ_titre $sel_parent",
    256                                                                                 "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)",
    257                                                                                 "O.$col_id=$id_objet",
    258                                                                                 '',
    259                                                                                 $order_by_parent.'U.perma DESC, U.date DESC', 1);
    260         if ($row){
     292                "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)",
     293                "O.$col_id=$id_objet",
     294                '',
     295                $order_by_parent . 'U.perma DESC, U.date DESC', 1);
     296        if ($row) {
    261297                $urls[$type][$id_objet] = $row;
    262                 $urls[$type][$id_objet]['type_parent'] = $champ_parent?end($champ_parent):'';
    263         }
    264         return isset($urls[$type][$id_objet])?$urls[$type][$id_objet]:null;
     298                $urls[$type][$id_objet]['type_parent'] = $champ_parent ? end($champ_parent) : '';
     299        }
     300
     301        return isset($urls[$type][$id_objet]) ? $urls[$type][$id_objet] : null;
    265302}
    266303
     
    275312 */
    276313function declarer_url_arbo($type, $id_objet) {
    277         static $urls=array();
     314        static $urls = array();
    278315        // utiliser un cache memoire pour aller plus vite
    279         if(!is_null($C=Cache())) return$C;
    280        
     316        if (!is_null($C = Cache())) {
     317                return $C;
     318        }
     319
    281320        // Se contenter de cette URL si elle existe ;
    282321        // sauf si on invoque par "voir en ligne" avec droit de modifier l'url
     
    286325        // qui requetent en base
    287326        $modifier_url = (defined('_VAR_URLS') AND _VAR_URLS);
    288        
     327
    289328        if (!isset($urls[$type][$id_objet]) OR $modifier_url) {
    290                 $r = renseigner_url_arbo($type,$id_objet);
     329                $r = renseigner_url_arbo($type, $id_objet);
    291330                // Quand $type ne reference pas une table
    292                 if ($r===false)
     331                if ($r === false) {
    293332                        return false;
    294 
    295                 if (!is_null($r))
     333                }
     334
     335                if (!is_null($r)) {
    296336                        $urls[$type][$id_objet] = $r;
    297         }
    298 
    299         if (!isset($urls[$type][$id_objet])) return ""; # objet inexistant
     337                }
     338        }
     339
     340        if (!isset($urls[$type][$id_objet])) {
     341                return "";
     342        } # objet inexistant
    300343
    301344        $url_propre = $urls[$type][$id_objet]['url'];
     
    305348        // et (permanente ou pas de demande de modif)
    306349        if (!is_null($url_propre)
    307           AND $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent']
    308           AND ($urls[$type][$id_objet]['perma'] OR !$modifier_url))
    309                 return declarer_url_arbo_rec($url_propre,$type,
    310                   isset($urls[$type][$id_objet]['parent'])?$urls[$type][$id_objet]['parent']:0,
    311                   isset($urls[$type][$id_objet]['type_parent'])?$urls[$type][$id_objet]['type_parent']:null);
     350                AND $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent']
     351                AND ($urls[$type][$id_objet]['perma'] OR !$modifier_url)
     352        ) {
     353                return declarer_url_arbo_rec($url_propre, $type,
     354                        isset($urls[$type][$id_objet]['parent']) ? $urls[$type][$id_objet]['parent'] : 0,
     355                        isset($urls[$type][$id_objet]['type_parent']) ? $urls[$type][$id_objet]['type_parent'] : null);
     356        }
    312357
    313358        // Si URL inconnue ou maj forcee sur une url non permanente, recreer une url
     
    327372                include_spip('inc/urls');
    328373                $objets = urls_liste_objets();
    329                 if (preg_match(',^('.$objets.')[0-9]*$,', $url, $r)
    330                 AND $r[1] != $type)
    331                         $url = $url._url_arbo_sep_id.$id_objet;
     374                if (preg_match(',^(' . $objets . ')[0-9]*$,', $url, $r)
     375                        AND $r[1] != $type
     376                ) {
     377                        $url = $url . _url_arbo_sep_id . $id_objet;
     378                }
    332379        }
    333380
     
    335382        // Pas de changement d'url ni de parent
    336383        if ($url == $url_propre
    337           AND $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent'])
    338                 return declarer_url_arbo_rec($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']);
     384                AND $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent']
     385        ) {
     386                return declarer_url_arbo_rec($url_propre, $type, $urls[$type][$id_objet]['parent'],
     387                        $urls[$type][$id_objet]['type_parent']);
     388        }
    339389
    340390        // verifier l'autorisation, maintenant qu'on est sur qu'on va agir
     
    348398                AND $url_propre
    349399                // on essaye pas de regenerer une url en -xxx (suffixe id anti collision)
    350                 AND $url != preg_replace('/'.preg_quote(_url_propres_sep_id,'/').'.*/', '', $url_propre))
     400                AND $url != preg_replace('/' . preg_quote(_url_propres_sep_id, '/') . '.*/', '', $url_propre)
     401        ) {
    351402                $confirmer = true;
    352         else
     403        } else {
    353404                $confirmer = false;
     405        }
    354406
    355407        if ($confirmer AND !_request('ok')) {
     
    357409        }
    358410
    359         $set = array('url' => $url, 'type' => $type, 'id_objet' => $id_objet, 'id_parent'=>$urls[$type][$id_objet]['parent'],'perma'=>intval($urls[$type][$id_objet]['perma']));
     411        $set = array(
     412                'url' => $url,
     413                'type' => $type,
     414                'id_objet' => $id_objet,
     415                'id_parent' => $urls[$type][$id_objet]['parent'],
     416                'perma' => intval($urls[$type][$id_objet]['perma'])
     417        );
    360418        include_spip('action/editer_url');
    361         if (url_insert($set,$confirmer,_url_arbo_sep_id)){
     419        if (url_insert($set, $confirmer, _url_arbo_sep_id)) {
    362420                $urls[$type][$id_objet]['url'] = $set['url'];
    363421                $urls[$type][$id_objet]['id_parent'] = $set['id_parent'];
    364         }
    365         else {
     422        } else {
    366423                // l'insertion a echoue,
    367424                //serveur out ? retourner au mieux
    368                 $urls[$type][$id_objet]['url']=$url_propre;
    369         }
    370 
    371         return declarer_url_arbo_rec($urls[$type][$id_objet]['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']);
     425                $urls[$type][$id_objet]['url'] = $url_propre;
     426        }
     427
     428        return declarer_url_arbo_rec($urls[$type][$id_objet]['url'], $type, $urls[$type][$id_objet]['parent'],
     429                $urls[$type][$id_objet]['type_parent']);
    372430}
    373431
     
    385443function _generer_url_arbo($type, $id, $args = '', $ancre = '') {
    386444
    387         if ($generer_url_externe = charger_fonction("generer_url_$type",'urls',true)) {
     445        if ($generer_url_externe = charger_fonction("generer_url_$type", 'urls', true)) {
    388446                $url = $generer_url_externe($id, $args, $ancre);
    389                 if (NULL != $url) return $url;
     447                if (null != $url) {
     448                        return $url;
     449                }
    390450        }
    391451
     
    393453        $propre = declarer_url_arbo($type, $id);
    394454
    395         if ($propre === false) return ''; // objet inconnu. raccourci ?
     455        if ($propre === false) {
     456                return '';
     457        } // objet inconnu. raccourci ?
    396458
    397459        if ($propre) {
    398460                $url = _debut_urls_arbo
    399                         . rtrim($propre,'/')
     461                        . rtrim($propre, '/')
    400462                        . url_arbo_terminaison($type);
    401463        } else {
     
    404466                include_spip('base/connect_sql');
    405467                $id_type = id_table_objet($type);
    406                 $url = get_spip_script('./')."?"._SPIP_PAGE."=$type&$id_type=$id";
     468                $url = get_spip_script('./') . "?" . _SPIP_PAGE . "=$type&$id_type=$id";
    407469        }
    408470
    409471        // Ajouter les args
    410         if ($args)
    411                 $url .= ((strpos($url, '?')===false) ? '?' : '&') . $args;
     472        if ($args) {
     473                $url .= ((strpos($url, '?') === false) ? '?' : '&') . $args;
     474        }
    412475
    413476        // Ajouter l'ancre
    414         if ($ancre)
     477        if ($ancre) {
    415478                $url .= "#$ancre";
     479        }
    416480
    417481        return _DIR_RACINE . $url;
     
    433497 */
    434498function urls_arbo_dist($i, $entite, $args = '', $ancre = '') {
    435         if (is_numeric($i))
     499        if (is_numeric($i)) {
    436500                return _generer_url_arbo($entite, $i, $args, $ancre);
     501        }
    437502
    438503        // traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23
    439         if ($GLOBALS['profondeur_url']>0 AND $entite=='sommaire'){
     504        if ($GLOBALS['profondeur_url'] > 0 AND $entite == 'sommaire') {
    440505                $entite = 'type_urls';
    441506        }
    442507
    443508        // recuperer les &debut_xx;
    444         if (is_array($args))
     509        if (is_array($args)) {
    445510                $contexte = $args;
    446         else
    447                 parse_str($args,$contexte);
     511        } else {
     512                parse_str($args, $contexte);
     513        }
    448514
    449515        $url = $i;
     
    453519        // Migration depuis anciennes URLs ?
    454520        // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23
    455         if ($GLOBALS['profondeur_url']<=0
    456         AND $_SERVER['REQUEST_METHOD'] != 'POST') {
     521        if ($GLOBALS['profondeur_url'] <= 0
     522                AND $_SERVER['REQUEST_METHOD'] != 'POST'
     523        ) {
    457524                include_spip('inc/urls');
    458525                $r = nettoyer_url_page($i, $contexte);
    459526                if ($r) {
    460                         list($contexte, $type,,, $suite) = $r;
     527                        list($contexte, $type, , , $suite) = $r;
    461528                        $_id = id_table_objet($type);
    462529                        $id_objet = $contexte[$_id];
    463530                        $url_propre = generer_url_entite($id_objet, $type);
    464531                        if (strlen($url_propre)
    465                         AND !strstr($url,$url_propre)) {
    466                                 list(,$hash) = array_pad(explode('#', $url_propre), 2, null);
     532                                AND !strstr($url, $url_propre)
     533                        ) {
     534                                list(, $hash) = array_pad(explode('#', $url_propre), 2, null);
    467535                                $args = array();
    468                                 foreach(array_filter(explode('&', $suite)) as $fragment) {
    469                                         if ($fragment != "$_id=$id_objet")
     536                                foreach (array_filter(explode('&', $suite)) as $fragment) {
     537                                        if ($fragment != "$_id=$id_objet") {
    470538                                                $args[] = $fragment;
     539                                        }
    471540                                }
    472                                 $url_redirect = generer_url_entite($id_objet, $type, join('&',array_filter($args)), $hash);
     541                                $url_redirect = generer_url_entite($id_objet, $type, join('&', array_filter($args)), $hash);
    473542
    474543                                return array($contexte, $type, $url_redirect, $type);
     
    483552        // Mode Query-String ?
    484553        if (!$url_propre
    485         AND preg_match(',[?]([^=/?&]+)(&.*)?$,', $url, $r)) {
     554                AND preg_match(',[?]([^=/?&]+)(&.*)?$,', $url, $r)
     555        ) {
    486556                $url_propre = $r[1];
    487557        }
    488558
    489559        if (!$url_propre
    490           OR $url_propre==_DIR_RESTREINT_ABS
    491           OR $url_propre==_SPIP_SCRIPT) return; // qu'est-ce qu'il veut ???
     560                OR $url_propre == _DIR_RESTREINT_ABS
     561                OR $url_propre == _SPIP_SCRIPT
     562        ) {
     563                return;
     564        } // qu'est-ce qu'il veut ???
    492565
    493566
     
    498571
    499572        // Compatibilite avec .htm/.html et autres terminaisons
    500         $t = array_diff(array_unique(array_merge(array('.html','.htm','/'),url_arbo_terminaison(''))),array(''));
    501         if (count($t))
     573        $t = array_diff(array_unique(array_merge(array('.html', '.htm', '/'), url_arbo_terminaison(''))), array(''));
     574        if (count($t)) {
    502575                $url_propre = preg_replace('{('
    503                   .implode('|',array_map('preg_quote',$t)).')$}i', '', $url_propre);
    504 
    505         if (strlen($url_propre) AND !preg_match(',^[^/]*[.]php,',$url_propre)){
     576                        . implode('|', array_map('preg_quote', $t)) . ')$}i', '', $url_propre);
     577        }
     578
     579        if (strlen($url_propre) AND !preg_match(',^[^/]*[.]php,', $url_propre)) {
    506580                $parents_vus = array();
    507                
     581
    508582                // recuperer tous les objets de larbo xxx/article/yyy/mot/zzzz
    509583                // on parcourt les segments de gauche a droite
    510584                // pour pouvoir contextualiser un segment par son parent
    511                 $url_arbo = explode('/',$url_propre);
     585                $url_arbo = explode('/', $url_propre);
    512586                $url_arbo_new = array();
    513587                $dernier_parent_vu = false;
    514588                $objet_segments = 0;
    515                 while (count($url_arbo)>0){
    516                         $type=null;
    517                         if (count($url_arbo)>1)
     589                while (count($url_arbo) > 0) {
     590                        $type = null;
     591                        if (count($url_arbo) > 1) {
    518592                                $type = array_shift($url_arbo);
     593                        }
    519594                        $url_segment = array_shift($url_arbo);
    520595                        // Rechercher le segment de candidat
     
    522597                        // prefixer le segment recherche avec ce contexte
    523598                        $cp = "0"; // par defaut : parent racine, id=0
    524                         if ($dernier_parent_vu)
     599                        if ($dernier_parent_vu) {
    525600                                $cp = $parents_vus[$dernier_parent_vu];
     601                        }
    526602                        // d'abord recherche avec prefixe parent, en une requete car aucun risque de colision
    527                         $row=sql_fetsel('id_objet, type, url',
    528                                                                                         'spip_urls',
    529                                                                                         is_null($type)
    530                                                                                                 ? "url=".sql_quote($url_segment, '', 'TEXT')
    531                                                                                                 : sql_in('url',array("$type/$url_segment",$type)),
    532                                                                                         '',
    533                                                                                         // en priorite celui qui a le bon parent et les deux segments
    534                                                                                         // puis le bon parent avec 1 segment
    535                                                                                         // puis un parent indefini (le 0 de preference) et les deux segments
    536                                                                                         // puis un parent indefini (le 0 de preference) et 1 segment
    537                                                                                         (intval($cp)?"id_parent=".intval($cp)." DESC, ":"id_parent>=0 DESC, ")."segments DESC, id_parent"
     603                        $row = sql_fetsel('id_objet, type, url',
     604                                'spip_urls',
     605                                is_null($type)
     606                                        ? "url=" . sql_quote($url_segment, '', 'TEXT')
     607                                        : sql_in('url', array("$type/$url_segment", $type)),
     608                                '',
     609                                // en priorite celui qui a le bon parent et les deux segments
     610                                // puis le bon parent avec 1 segment
     611                                // puis un parent indefini (le 0 de preference) et les deux segments
     612                                // puis un parent indefini (le 0 de preference) et 1 segment
     613                                (intval($cp) ? "id_parent=" . intval($cp) . " DESC, " : "id_parent>=0 DESC, ") . "segments DESC, id_parent"
    538614                        );
    539                         if ($row){
    540                                 if (!is_null($type) AND $row['url']==$type){
    541                                         array_unshift($url_arbo,$url_segment);
     615                        if ($row) {
     616                                if (!is_null($type) AND $row['url'] == $type) {
     617                                        array_unshift($url_arbo, $url_segment);
    542618                                        $url_segment = $type;
    543619                                        $type = null;
     
    545621                                $type = $row['type'];
    546622                                $col_id = id_table_objet($type);
    547                                
     623
    548624                                // le plus a droite l'emporte pour des objets presents plusieurs fois dans l'url (ie rubrique)
    549625                                $contexte[$col_id] = $row['id_objet'];
    550626
    551627                                $type_parent = '';
    552                                 if ($p = url_arbo_parent($type))
    553                                         $type_parent=end($p);
     628                                if ($p = url_arbo_parent($type)) {
     629                                        $type_parent = end($p);
     630                                }
    554631                                // l'entite la plus a droite l'emporte, si le type de son parent a ete vu
    555632                                // sinon c'est un segment contextuel supplementaire a ignorer
    556633                                // ex : rub1/article/art1/mot1 : il faut ignorer le mot1, la vrai url est celle de l'article
    557634                                if (!$entite
    558                                   OR $dernier_parent_vu == $type_parent){
    559                                         if ($objet_segments==0)
     635                                        OR $dernier_parent_vu == $type_parent
     636                                ) {
     637                                        if ($objet_segments == 0) {
    560638                                                $entite = $type;
    561                                 }
    562                                 // sinon on change d'objet concerne
    563                                 else{
     639                                        }
     640                                } // sinon on change d'objet concerne
     641                                else {
    564642                                        $objet_segments++;
    565643                                }
     
    571649                                // on note le dernier parent vu de chaque type
    572650                                $parents_vus[$dernier_parent_vu = $type] = $row['id_objet'];
    573                         }
    574                         else {
     651                        } else {
    575652                                // un segment est inconnu
    576                                 if ($entite=='' OR $entite=='type_urls') {
     653                                if ($entite == '' OR $entite == 'type_urls') {
    577654                                        // on genere une 404 comme il faut si on ne sait pas ou aller
    578                                         return array(array(),'404');
     655                                        return array(array(), '404');
    579656                                }
    580657                                // ici on a bien reconnu un segment en amont, mais le segment en cours est inconnu
     
    582659                                // mais de fait l'url entiere est inconnu : 404 aussi
    583660                                // mais conserver le contexte qui peut contenir un fond d'ou venait peut etre $entite (reecriture urls)
    584                                 return array($contexte,'404');
     661                                return array($contexte, '404');
    585662                        }
    586663                }
    587664
    588                 if (count($url_arbo_new)){
     665                if (count($url_arbo_new)) {
    589666                        $caller = debug_backtrace();
    590667                        $caller = $caller[1]['function'];
     
    592669                        // ne pas regenerer des segments arbo, mais rediriger vers la nouvelle URL
    593670                        // dans la nouvelle forme
    594                         if (strncmp($caller,"urls_",5)==0 AND $caller!=="urls_decoder_url"){
     671                        if (strncmp($caller, "urls_", 5) == 0 AND $caller !== "urls_decoder_url") {
    595672                                // en absolue, car assembler ne gere pas ce cas particulier
    596673                                include_spip('inc/filtres_mini');
    597674                                $col_id = id_table_objet($entite);
    598                                 $url_new = generer_url_entite($contexte[$col_id],$entite);
     675                                $url_new = generer_url_entite($contexte[$col_id], $entite);
    599676                                // securite contre redirection infinie
    600                                 if ($url_new!==$url_propre
    601                                         AND rtrim($url_new,"/")!==rtrim($url_propre,"/"))
     677                                if ($url_new !== $url_propre
     678                                        AND rtrim($url_new, "/") !== rtrim($url_propre, "/")
     679                                ) {
    602680                                        $url_redirect = url_absolue($url_new);
    603                         }
    604                         else {
    605                                 foreach($url_arbo_new as $k=>$o)
    606                                         if ($s = declarer_url_arbo($o['objet'],$o['id_objet']))
     681                                }
     682                        } else {
     683                                foreach ($url_arbo_new as $k => $o) {
     684                                        if ($s = declarer_url_arbo($o['objet'], $o['id_objet'])) {
    607685                                                $url_arbo_new[$k] = $s;
    608                                         else
    609                                                 $url_arbo_new[$k] = implode('/',$o['segment']);
    610                                 $url_arbo_new = ltrim(implode('/',$url_arbo_new),'/');
    611 
    612                                 if ($url_arbo_new!==$url_propre){
     686                                        } else {
     687                                                $url_arbo_new[$k] = implode('/', $o['segment']);
     688                                        }
     689                                }
     690                                $url_arbo_new = ltrim(implode('/', $url_arbo_new), '/');
     691
     692                                if ($url_arbo_new !== $url_propre) {
    613693                                        $url_redirect = $url_arbo_new;
    614694                                        // en absolue, car assembler ne gere pas ce cas particulier
     
    620700
    621701                // gerer le retour depuis des urls propres
    622                 if (($entite=='' OR $entite=='type_urls')
    623                 AND $GLOBALS['profondeur_url']<=0){
    624                         $urls_anciennes = charger_fonction('propres','urls');
     702                if (($entite == '' OR $entite == 'type_urls')
     703                        AND $GLOBALS['profondeur_url'] <= 0
     704                ) {
     705                        $urls_anciennes = charger_fonction('propres', 'urls');
     706
    625707                        return $urls_anciennes($url_propre, $entite, $contexte);
    626708                }
    627709        }
    628         if ($entite=='' OR $entite=='type_urls' /* compat .htaccess 2.0 */) {
    629                 if ($type)
    630                         $entite = objet_type ($type);
    631                 else {
     710        if ($entite == '' OR $entite == 'type_urls' /* compat .htaccess 2.0 */) {
     711                if ($type) {
     712                        $entite = objet_type($type);
     713                } else {
    632714                        // Si ca ressemble a une URL d'objet, ce n'est pas la home
    633715                        // et on provoque un 404
     
    638720                }
    639721        }
    640         define('_SET_HTML_BASE',1);
     722        define('_SET_HTML_BASE', 1);
    641723
    642724        return array($contexte, $entite, $url_redirect, null);
Note: See TracChangeset for help on using the changeset viewer.