Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.5 KiB

<?php
/***************************************************************************\
* SPIP, Système de publication pour l'internet *
* *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
define('URLS_PAGE_EXEMPLE', 'spip.php?article12');
####### modifications possibles dans ecrire/mes_options
# on peut indiquer '.html' pour faire joli
define('_terminaison_urls_page', '');
# ci-dessous, ce qu'on veut ou presque (de preference pas de '/')
# attention toutefois seuls '' et '=' figurent dans les modes de compatibilite
define('_separateur_urls_page', '');
# on peut indiquer '' si on a installe le .htaccess
define('_debut_urls_page', get_spip_script('./') . '?');
#######
// https://code.spip.net/@_generer_url_page
function _generer_url_page($type, $id, $args = '', $ancre = '') {
if ($generer_url_externe = charger_fonction("generer_url_$type", 'urls', true)) {
$url = $generer_url_externe($id, $args, $ancre);
if (null != $url) {
return $url;
}
}
$url = _debut_urls_page . $type . _separateur_urls_page
. $id . _terminaison_urls_page;
if ($args) {
$args = strpos($url, '?') ? "&$args" : "?$args";
}
return _DIR_RACINE . $url . $args . ($ancre ? "#$ancre" : '');
}
// retrouve le fond et les parametres d'une URL abregee
// le contexte deja existant est fourni dans args sous forme de tableau ou query string
// https://code.spip.net/@urls_page_dist
function urls_page_dist($i, &$entite, $args = '', $ancre = '') {
if (is_numeric($i)) {
Co-existence de plusieurs {{{type_urls}}} au cours du même processus. La fabrication des URL publiques des entités a toujours été modulable, mais pas dans un même processus, ce qui posait deux limitations: - la production de ces URLs publiques à partir de l'espace privé oblige à passer par un script de redirection, couteux, obscur et peu extensible; - dans le cas du multi-site, impossible d'avoir autant de nommages différents que de sites, les fonctions produisant les URLs portant le même nom dans tous les système de nommage. Cette restriction est à présent levée, apparamment sans problème de compatibilité: Les fonctions {{{generer_url_{article, auteur, breve, mot, rubique, site} }}} sont déclarées obsolètes et remplacées par: {{{ function generer_url_entite($id='', $entite='', $args='', $ancre='', prive='', $type='') }}} un appel comme {{{ generer_url_article(id, arg, ancre) }}} s'écrit à présent {{{{ generer_url_entite(id, 'article', arg, ancre) }}}. Cette transformation étant prise en charge par {{{vieilles_def.php}}}, tandis que le code de SPIP a déjà évacué ces appels. Le 5e argument permet de forcer la production d'une URL de lecture alors qu'on est dans l'espace d'écriture et inversement. Le 6e argument permet de forcer l'utilisation d'un jeu d'URL différent de celui spécifié par la meta {{{type_urls}}}. Ces argument rend superflu la fonction {{{charger_generer_url}}} qui disparait complètement. La fonction {{{generer_url_entite}}} ne fait que lire le fichier X ainsi spécifier puis passe la main soit aux fonctions {{{generer_url_ecrire_article}}} etc dans le cas des URLs en écriture, soit sinon à la fonction {{{urls_}}}X{{{_dist}}}. Celle-ci a un double rôle: si son deuxième argument est numérique (ou une chaîne interprétable ainsi) elle produit l'URL de l'entité SQL ainsi désignée, à sa manière (propre, arbo, html...); si son deuxième argument est une chaîne, c'est une URL à partir de laquelle la fonction retrouve la table SQL et le numéro de l'entité (comme auparavant). Pour ceux qui ont des jeux de fonctions {{{generer_url_...}}} personnels, il est normalement pas nécessaire de le réécrire pour en disposer, mais c'est préférable pour qu'il puisse co-exister avec les autres au besoin. A noter qu'on ne peut actuellement faire co-exister Propre et Arbo car elles déclarent le même pipeline ({{{creer_chaine_url}}}), il faudrait revoir ce code. Je laisse en test un moment avant de basculer sur la branche 2, d'autant qu'il faudrait statuer sur le fichier {{{tourner}}} qui au bord du fork.
14 years ago
return _generer_url_page($entite, $i, $args, $ancre);
}
Co-existence de plusieurs {{{type_urls}}} au cours du même processus. La fabrication des URL publiques des entités a toujours été modulable, mais pas dans un même processus, ce qui posait deux limitations: - la production de ces URLs publiques à partir de l'espace privé oblige à passer par un script de redirection, couteux, obscur et peu extensible; - dans le cas du multi-site, impossible d'avoir autant de nommages différents que de sites, les fonctions produisant les URLs portant le même nom dans tous les système de nommage. Cette restriction est à présent levée, apparamment sans problème de compatibilité: Les fonctions {{{generer_url_{article, auteur, breve, mot, rubique, site} }}} sont déclarées obsolètes et remplacées par: {{{ function generer_url_entite($id='', $entite='', $args='', $ancre='', prive='', $type='') }}} un appel comme {{{ generer_url_article(id, arg, ancre) }}} s'écrit à présent {{{{ generer_url_entite(id, 'article', arg, ancre) }}}. Cette transformation étant prise en charge par {{{vieilles_def.php}}}, tandis que le code de SPIP a déjà évacué ces appels. Le 5e argument permet de forcer la production d'une URL de lecture alors qu'on est dans l'espace d'écriture et inversement. Le 6e argument permet de forcer l'utilisation d'un jeu d'URL différent de celui spécifié par la meta {{{type_urls}}}. Ces argument rend superflu la fonction {{{charger_generer_url}}} qui disparait complètement. La fonction {{{generer_url_entite}}} ne fait que lire le fichier X ainsi spécifier puis passe la main soit aux fonctions {{{generer_url_ecrire_article}}} etc dans le cas des URLs en écriture, soit sinon à la fonction {{{urls_}}}X{{{_dist}}}. Celle-ci a un double rôle: si son deuxième argument est numérique (ou une chaîne interprétable ainsi) elle produit l'URL de l'entité SQL ainsi désignée, à sa manière (propre, arbo, html...); si son deuxième argument est une chaîne, c'est une URL à partir de laquelle la fonction retrouve la table SQL et le numéro de l'entité (comme auparavant). Pour ceux qui ont des jeux de fonctions {{{generer_url_...}}} personnels, il est normalement pas nécessaire de le réécrire pour en disposer, mais c'est préférable pour qu'il puisse co-exister avec les autres au besoin. A noter qu'on ne peut actuellement faire co-exister Propre et Arbo car elles déclarent le même pipeline ({{{creer_chaine_url}}}), il faudrait revoir ce code. Je laisse en test un moment avant de basculer sur la branche 2, d'autant qu'il faudrait statuer sur le fichier {{{tourner}}} qui au bord du fork.
14 years ago
// traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23
if ($GLOBALS['profondeur_url'] > 0 and $entite == 'sommaire') {
return array(array(), '404');
}
Co-existence de plusieurs {{{type_urls}}} au cours du même processus. La fabrication des URL publiques des entités a toujours été modulable, mais pas dans un même processus, ce qui posait deux limitations: - la production de ces URLs publiques à partir de l'espace privé oblige à passer par un script de redirection, couteux, obscur et peu extensible; - dans le cas du multi-site, impossible d'avoir autant de nommages différents que de sites, les fonctions produisant les URLs portant le même nom dans tous les système de nommage. Cette restriction est à présent levée, apparamment sans problème de compatibilité: Les fonctions {{{generer_url_{article, auteur, breve, mot, rubique, site} }}} sont déclarées obsolètes et remplacées par: {{{ function generer_url_entite($id='', $entite='', $args='', $ancre='', prive='', $type='') }}} un appel comme {{{ generer_url_article(id, arg, ancre) }}} s'écrit à présent {{{{ generer_url_entite(id, 'article', arg, ancre) }}}. Cette transformation étant prise en charge par {{{vieilles_def.php}}}, tandis que le code de SPIP a déjà évacué ces appels. Le 5e argument permet de forcer la production d'une URL de lecture alors qu'on est dans l'espace d'écriture et inversement. Le 6e argument permet de forcer l'utilisation d'un jeu d'URL différent de celui spécifié par la meta {{{type_urls}}}. Ces argument rend superflu la fonction {{{charger_generer_url}}} qui disparait complètement. La fonction {{{generer_url_entite}}} ne fait que lire le fichier X ainsi spécifier puis passe la main soit aux fonctions {{{generer_url_ecrire_article}}} etc dans le cas des URLs en écriture, soit sinon à la fonction {{{urls_}}}X{{{_dist}}}. Celle-ci a un double rôle: si son deuxième argument est numérique (ou une chaîne interprétable ainsi) elle produit l'URL de l'entité SQL ainsi désignée, à sa manière (propre, arbo, html...); si son deuxième argument est une chaîne, c'est une URL à partir de laquelle la fonction retrouve la table SQL et le numéro de l'entité (comme auparavant). Pour ceux qui ont des jeux de fonctions {{{generer_url_...}}} personnels, il est normalement pas nécessaire de le réécrire pour en disposer, mais c'est préférable pour qu'il puisse co-exister avec les autres au besoin. A noter qu'on ne peut actuellement faire co-exister Propre et Arbo car elles déclarent le même pipeline ({{{creer_chaine_url}}}), il faudrait revoir ce code. Je laisse en test un moment avant de basculer sur la branche 2, d'autant qu'il faudrait statuer sur le fichier {{{tourner}}} qui au bord du fork.
14 years ago
// voir s'il faut recuperer le id_* implicite et les &debut_xx;
if (is_array($args)) {
$contexte = $args;
} else {
parse_str($args, $contexte);
}
include_spip('inc/urls');
$r = nettoyer_url_page($i, $contexte);
if ($r) {
array_pop($r); // nettoyer_url_page renvoie un argument de plus inutile ici
return $r;
}
/*
* Le bloc qui suit sert a faciliter les transitions depuis
* le mode 'urls-propres' vers les modes 'urls-standard' et 'url-html'
* Il est inutile de le recopier si vous personnalisez vos URLs
* et votre .htaccess
*/
// Si on est revenu en mode html, mais c'est une ancienne url_propre
// on ne redirige pas, on assume le nouveau contexte (si possible)
$url = $i;
$url_propre = isset($url)
? $url
: (isset($_SERVER['REDIRECT_url_propre'])
? $_SERVER['REDIRECT_url_propre']
: (isset($_ENV['url_propre'])
? $_ENV['url_propre']
: ''
));
if ($url_propre) {
if ($GLOBALS['profondeur_url'] <= 0) {
$urls_anciennes = charger_fonction('propres', 'urls', true);
} else {
$urls_anciennes = charger_fonction('arbo', 'urls', true);
}
return $urls_anciennes ? $urls_anciennes($url_propre, $entite, $contexte) : '';
}
/* Fin du bloc compatibilite url-propres */
}