Changeset 111953 in spip-zone


Ignore:
Timestamp:
Oct 11, 2018, 8:34:42 AM (4 days ago)
Author:
tcharlss@…
Message:

Fix urls arbos multidomaines : ça générait bien des urls sans le 1er segment (celui du secteur), mais il n'y avait rien pour les décoder, du coup le contexte renvoyé n'était pas le bon. Rustine faite dans l'urgence, à tester.

Location:
_plugins_/multidomaines/branches/nettoyage
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/multidomaines/branches/nettoyage/paquet.xml

    r111952 r111953  
    22        prefix="multidomaines"
    33        categorie="maintenance"
    4         version="3.1.8"
     4        version="3.1.9"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
  • _plugins_/multidomaines/branches/nettoyage/urls/arbo_multidomaines.php

    r110673 r111953  
    11<?php
    2 
    3 /***************************************************************************\
    4  *  SPIP, Systeme de publication pour l'internet                           *
    5  *                                                                         *
    6  *  Copyright (c) 2001-2018                                                *
    7  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    8  *                                                                         *
    9  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
    10  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
    11 \***************************************************************************/
    12 
     2/**
     3 * URLs arborescentes multidomaines
     4 *
     5 * Identique aux URLs arbo de base, mais supprime le segment correspondant au secteur des domaines
     6 *
     7 * Les différences avec urls/arbo.php sont précédées de commentaires [Multidomaines]
     8 *
     9 */
    1310if (!defined('_ECRIRE_INC_VERSION')) {
    1411        return;
     
    726723        } // qu'est-ce qu'il veut ???
    727724
    728 
    729725        include_spip('base/abstract_sql'); // chercher dans la table des URLS
    730726
     
    741737        if (strlen($url_propre) and !preg_match(',^[^/]*[.]php,', $url_propre)) {
    742738                $parents_vus = array();
     739
     740                // [Multidomaines]
     741                // Si on se trouve dans un des domaines configurés, ajouter son URL au début
     742                // afin de détecter le bon secteur quand on parse les segments
     743                $url_propre_originale = $url_propre;
     744                $host = $_SERVER['HTTP_HOST'];
     745                include_spip('inc/config');
     746                if (is_array($cfg_multi = lire_config('multidomaines', array()))) {
     747                        foreach($cfg_multi as $id_rubrique_multi => $v) {
     748                                // Si c'est bien un domaine, retrouver son URL
     749                                $composants_url_multi = parse_url($v['url']);
     750                                if (
     751                                        $composants_url_multi['host'] === $host
     752                                        and $url_domaine = sql_getfetsel(
     753                                                'url',
     754                                                'spip_urls',
     755                                                array(
     756                                                        'type=' . sql_quote('rubrique'),
     757                                                        'id_objet=' . intval($id_rubrique_multi),
     758                                                ),
     759                                                '', // groupby
     760                                                'date DESC',
     761                                                '0,1'
     762                                        )
     763                                ) {
     764                                        $url_propre = $url_domaine . '/' . $url_propre;
     765                                        $GLOBALS['profondeur_url'] =+ 1;
     766                                        break;
     767                                }
     768                        }
     769                } else {
     770                        $cfg_multi = array(); // éviter des notices après
     771                }
    743772
    744773                // recuperer tous les objets de larbo xxx/article/yyy/mot/zzzz
     
    869898                                }
    870899                        } else {
     900
     901                                // [Multidomaines]
     902                                // Retirer le segment du domaine (le 1er)
     903                                foreach ($url_arbo_new as $k => $o) {
     904                                        if ($url_domaine) {
     905                                                $url_arbo_new[$k]['segment'] = array_splice($url_arbo_new[$k]['segment'], 1);
     906                                        }
     907                                }
     908
    871909                                foreach ($url_arbo_new as $k => $o) {
    872910                                        $c = array( 'langue' => $langue );
     
    889927                                        }
    890928                                }
    891                                 if ($url_arbo_new !== $url_propre) {
    892                                         //var_dump($url_arbo_new,$url_propre);
     929                                if ($url_arbo_new !== $url_propre_originale) {
    893930                                        $url_redirect = _debut_urls_arbo
    894931                                                . $url_arbo_new
    895932                                                . url_arbo_multidomaines_terminaison($entite)
    896933                                                . ($args?"?$args":'');
    897                                         // en absolue, car assembler ne gere pas ce cas particulier
    898                                         include_spip('inc/filtres_mini');
    899                                         $url_redirect = url_absolue($url_redirect);
    900                                 }
    901                         }
     934
     935                                        // [Multidomaines] Pour mettre la redirection en absolu, ne pas utiliser url_absolue().
     936                                        // Il faut tenir compte du domaine dans lequel se trouve l'objet.
     937                                        // (Ne fonctionne que si l'objet a un champ id_secteur. Sinon on pourrait remonter récursivement, mais bon...).
     938                                        $cle_objet_redirect = id_table_objet($entite);
     939                                        if (isset($contexte[$cle_objet_redirect])) {
     940                                                // Retrouver le secteur
     941                                                $table_redirect = table_objet_sql($entite);
     942                                                $id_secteur_redirect = @sql_getfetsel(
     943                                                        'id_secteur',
     944                                                        $table_redirect,
     945                                                        $cle_objet_redirect . '=' . $contexte[$cle_objet_redirect]
     946                                                );
     947                                                // Soit c'est dans un domaine
     948                                                if (in_array($id_secteur_redirect, $cfg_multi)) {
     949                                                        $url_redirect = rtrim($cfg_multi[$id_secteur_redirect]['url'], '/') . '/' . $url_redirect;
     950                                                // Soit dans le site de base
     951                                                } else {
     952                                                        $url_redirect = rtrim($GLOBALS['meta']['adresse_site'], '/') . '/' . $url_redirect;
     953                                                }
     954                                        } else {
     955                                                // en absolue, car assembler ne gere pas ce cas particulier
     956                                                include_spip('inc/filtres_mini');
     957                                                $url_redirect = url_absolue($url_redirect);
     958                                        }
     959                                }
     960                        }
     961                }
     962
     963                // [Multidomaines]
     964                // Si on est dans un domaine, une fois la redirection générée,
     965                // remettre la profondeur initiale
     966                if ($url_domaine) {
     967                        $GLOBALS['profondeur_url'] =- 1;
    902968                }
    903969
     
    908974                        $urls_anciennes = charger_fonction('propres', 'urls');
    909975
    910                         return $urls_anciennes($url_propre, $entite, $contexte);
     976                        return $urls_anciennes($url_propre_originale, $entite, $contexte);
    911977                }
    912978        }
     
    927993        }
    928994
     995        //var_dump($contexte, $entite, $url_redirect);
     996        //die();
     997
    929998        return array($contexte, $entite, $url_redirect, null);
    930999}
Note: See TracChangeset for help on using the changeset viewer.