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.

355 lines
12 KiB

<?php
18 years ago
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
18 years ago
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
if (!function_exists('generer_url_article')) { // si la place n'est pas prise
include_spip('base/abstract_sql');
/*
- Comment utiliser ce jeu d'URLs ?
Recopiez le fichier "htaccess.txt" du repertoire de base du site SPIP sous
le sous le nom ".htaccess" (attention a ne pas ecraser d'autres reglages
que vous pourriez avoir mis dans ce fichier) ; si votre site est en
"sous-repertoire", vous devrez aussi editer la ligne "RewriteBase" ce fichier.
Les URLs definies seront alors redirigees vers les fichiers de SPIP.
Definissez ensuite dans ecrire/mes_options.php :
< ?php $type_urls = 'propres'; ? >
SPIP calculera alors ses liens sous la forme "Mon-titre-d-article".
Variante 'propres2' :
< ?php $type_urls = 'propres2'; ? >
ajoutera '.html' aux adresses generees : "Mon-titre-d-article.html"
Variante 'qs' (experimentale) : ce systeme fonctionne en "Query-String",
c'est-a-dire sans utilisation de .htaccess ; les adresses sont de la forme
"/?Mon-titre-d-article"
< ?php $type_urls = 'qs'; ? >
*/
define ('_terminaison_urls_propres', '');
define ('_debut_urls_propres', '');
// Ces chaines servaient de marqueurs a l'epoque ou les URL propres devaient
// indiquer la table ou les chercher (articles, auteurs etc),
// et elles etaient retirees par les preg_match dans la fonction ci-dessous.
// Elles sont a present definies a "" pour avoir des URL plus jolies
// mais les preg_match restent necessaires pour gerer les anciens signets.
/*
define ('_marqueur_rubrique', '-');
define ('_marqueur_auteur', '_');
define ('_marqueur_breve', '+');
define ('_marqueur_site', '@');
define ('_marqueur_mot_d', '+-');
define ('_marqueur_mot_f', '-+');
*/
define ('_marqueur_rubrique', '');
define ('_marqueur_auteur', '');
define ('_marqueur_breve', '');
define ('_marqueur_site', '');
define ('_marqueur_mot_d', '');
define ('_marqueur_mot_f', '');
// Retire les marqueurs de type dans une URL propre ancienne maniere
function retirer_marqueurs_url_propre($url_propre)
{
if (preg_match(',^\+\-(.*?)\-\+$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^-(.*?)-?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^\+(.*?)\+?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^_(.*?)_?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) {
return $regs[1];
}
// les articles n'ont pas de marqueur
return $url_propre;
}
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
// http://doc.spip.org/@_generer_url_propre
function _generer_url_propre($type, $id_objet) {
$table = "spip_".table_objet($type);
$col_id = id_table_objet($type);
// Auteurs : on prend le nom
if ($type == 'auteur')
$champ_titre = 'nom AS titre';
else if ($type == 'site' OR $type=='syndic')
$champ_titre = 'nom_site AS titre';
else
$champ_titre = 'titre';
// Mots-cles : pas de champ statut
if ($type == 'mot')
$statut = "'publie' as statut";
else
$statut = 'O.statut';
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
// Recuperer une URL propre correspondant a l'objet.
$row = sql_fetsel("U.url, U.maj, $statut, O.$champ_titre", "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)", "O.$col_id=$id_objet", '', 'U.maj DESC', 1);
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
if (!$row) return ""; # objet inexistant
$url_propre = $row['url'];
// Se contenter de cette URL si
// elle existe et qu'on n'est pas un admin invoquant spip_redirect.
if ($url_propre AND
(_request('action') != 'redirect' OR
$GLOBALS['auteur_session']['statut'] != '0minirezo'))
return $url_propre;
// Sinon, creer une URL
include_spip('inc/filtres');
$url = translitteration(corriger_caracteres(
supprimer_tags(supprimer_numero(extraire_multi($row['titre'])))
));
$url = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $url);
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
// S'il reste trop de caracteres non latins, ou trop peu
// de caracteres latins, utiliser l'id a la place
if (preg_match(",([^a-zA-Z0-9 ].*){5},", $url, $r)
OR strlen($url)<3) {
$url = $type.$id_objet;
}
else {
$mots = preg_split(",[^a-zA-Z0-9]+,", $url);
$url = '';
foreach ($mots as $mot) {
if (!$mot) continue;
$url2 = $url.'-'.$mot;
if (strlen($url2) > 35) {
break;
}
$url = $url2;
}
$url = substr($url, 1);
//echo "$url<br>";
if (strlen($url) < 2) $url = $type.$id_objet;
}
// Eviter de tamponner les URLs a l'ancienne (cas d'un article
// intitule "auteur2")
if ($type == 'article'
AND preg_match(',^(article|breve|rubrique|mot|auteur)[0-9]+$,', $url))
$url = $url.','.$id_objet;
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
// Le redirect n'<EFBFBD>tait pas du a un chgt de titre. Rien de neuf.
if ($url == $url_propre) return $url;
$set = array('url' => $url, 'type' => $type, 'id_objet' => $id_objet);
// Si l'insertion echoue, c'est une violation d'unicite.
// Soit c'est un Come Back d'une ancienne url propre de l'objet
// Soit c'est un vrai conflit. Rajouter l'ID jusqu'a ce que ca passe,
// mais se casser avant que ca ne casse.
while (!sql_insertq('spip_urls', $set)) {
$where = "U.type='$type' AND U.id_objet=$id_objet AND url=" ._q($set['url']);
if (sql_countsel('spip_urls AS U', $where)) {
sql_update('spip_urls AS U', array('maj' => 'NOW()'), $where);
spip_log("reordonne $type $id_objet");
return $set['url'];
}
$set['url'] .= ','.$id_objet;
if (strlen($set['url']) > 200)
return $url_propre; //serveur out ? retourner au mieux
}
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
spip_log("Creation de l'url propre '" . $set['url'] . "' pour $col_id=$id_objet");
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
return $set['url'];
}
// http://doc.spip.org/@generer_url_article
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_article($id_article, $args='', $ancre='') {
$url = _generer_url_propre('article', $id_article);
if ($url)
$url = _debut_urls_propres . $url . _terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=article&id_article=$id_article" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_rubrique
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_rubrique($id_rubrique, $args='', $ancre='') {
$url = _generer_url_propre('rubrique', $id_rubrique);
if ($url)
$url = _debut_urls_propres . _marqueur_rubrique . $url._marqueur_rubrique._terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=rubrique&id_rubrique=$id_rubrique" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_breve
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_breve($id_breve, $args='', $ancre='') {
$url = _generer_url_propre('breve', $id_breve);
if ($url)
$url = _debut_urls_propres . _marqueur_breve . $url._marqueur_breve._terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=breve&id_breve=$id_breve" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_forum
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_forum($id_forum, $args='', $ancre='') {
include_spip('inc/forum');
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
return generer_url_forum_dist($id_forum, $args, $ancre);
}
// http://doc.spip.org/@generer_url_mot
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_mot($id_mot, $args='', $ancre='') {
$url = _generer_url_propre('mot', $id_mot);
if ($url)
$url = _debut_urls_propres . _marqueur_mot_d . $url._marqueur_mot_f._terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=mot&id_mot=$id_mot" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_auteur
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_auteur($id_auteur, $args='', $ancre='') {
$url = _generer_url_propre('auteur', $id_auteur);
if ($url)
$url = _debut_urls_propres . _marqueur_auteur . $url._marqueur_auteur._terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=auteur&id_auteur=$id_auteur" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_site
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_site($id_syndic, $args='', $ancre='') {
$url = _generer_url_propre('site', $id_syndic);
if ($url)
$url = _debut_urls_propres . _marqueur_site . $url._marqueur_site._terminaison_urls_propres
. (!$args ? ''
: (((strpos(_debut_urls_propres, '?')===false) ? '?' : '&') . $args));
else
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
$url = get_spip_script('./')."?page=site&id_syndic=$id_syndic" . ($args ? "&$args" : '');
if ($ancre) $url .= "#$ancre";
return $url;
}
// http://doc.spip.org/@generer_url_document
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_document($id_document, $args='', $ancre='') {
include_spip('inc/documents');
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
return generer_url_document_dist($id_document, $args, $ancre);
}
// retrouve le fond et les parametres d'une URL propre
function urls_propres_dist(&$fond, $url) {
global $contexte;
$id_objet = $type = 0;
// Migration depuis anciennes URLs ?
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
if (preg_match(
',(^|/)(article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html)'
.'([?&].*)?$,', $url, $regs)
) {
$type = $regs[3];
$id_table_objet = id_table_objet($type);
$id_objet = intval($GLOBALS[$id_table_objet]);
}
/* Compatibilite urls-page */
else if (preg_match(
',[?/&](article|breve|rubrique|mot|auteur|site)[=]?([0-9]+),',
$url, $regs)) {
$type = $regs[1];
$id_objet = $regs[2];
}
}
if ($id_objet) {
$func = "generer_url_$type";
$url_propre = $func($id_objet);
if (strlen($url_propre)
AND !strstr($url,$url_propre)) {
include_spip('inc/headers');
http_status(301);
// recuperer les arguments supplementaires (&debut_xxx=...)
$reste = preg_replace('/^&/','?',
preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5]));
$reste .= preg_replace('/&/','?',
preg_replace('/[?&]'.$type.'[=]?'.$id_objet.'/','',
substr($url, strpos($url,'?'))));
redirige_par_entete("$url_propre$reste");
}
}
/* Fin compatibilite anciennes urls */
// Chercher les valeurs d'environnement qui indiquent l'url-propre
if (isset($_SERVER['REDIRECT_url_propre']))
$url_propre = $_SERVER['REDIRECT_url_propre'];
16 years ago
elseif (isset($_ENV['url_propre']))
$url_propre = $_ENV['url_propre'];
17 years ago
else {
$url = substr($url, strrpos($url, '/') + 1);
$url_propre = preg_replace(',[?].*,', '', $url);
}
// Mode Query-String ?
if (!$url_propre
AND preg_match(',([?])([^=/?&]+)(&.*)?$,', $GLOBALS['REQUEST_URI'], $r)) {
$url_propre = $r[2];
}
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
if (!$url_propre) return;
// Compatilibite avec propres2
$url_propre = preg_replace(',\.html$,i', '', $url_propre);
// Compatibilite avec les anciennes URL propres
$url_propre = retirer_marqueurs_url_propre($url_propre);
$row = sql_fetch(spip_query("SELECT id_objet, type FROM spip_urls WHERE url=" . _q($url_propre)));
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
if ($row) {
$type = $row['type'];
Nouvelles URLs propres. Le système d'URL propres de SPIP avait certaines limitations et reposait sur une implémentation spécifique à MySQL. Puisqu'il était nécessaire de les réécrire pour finaliser le portage de SPIP en PostGres, on en profite pour lever une de leur limitations: SPIP mémorise à présent toutes les URL propres ayant été associéés à un objet depuis sa publication. Comme auparavant, une URL propre d'un objet publié est créée le plus souvent lorsque qu'une page qui la référence est visualisée dans l'espace public. Comme auparavant, il est nécessaire qu'un administrateur clique sur "voir en ligne" ou "prévisualiser" pour provoquer un nouveau calcul. En revanche, ce nouveau calcul interviendra systématiquement (plus besoin de dépublier puis republier), et s'il fournit une URL différente, elle n'écrasera pas l'ancienne, mais viendra s'ajouter comme URL la plus récemment introduite. Lors des appels ultérieurs de la fonction de génération d'URL associée, elle sera donc choisi prioritairement. Au cas où une nouvelle modification produit un calcul d'URL retombant sur une ancienne URL propre, la date d'introduction de celle-ci est actualisée afin qu'elle redevienne prioritaire, ce qui permet de respecter la contrainte d'unicité et d'éviter aux indécis de remplir cette table par leurs begaiements. Ces nouvelles URL profitent du travail pionnier entamé par Toggg sur spip_zonesous le nom d'[http://zone.spip.org/trac/spip-zone/browser/_plugins_/_dev_/urls_libres URLS libres]. L'implémentation en est toutefois différente, afin de satisafaire aux besoins de PostGres. Aussi, elles sont gérées par une table ayant ces valeurs comme clé primaire, ce qui devrait accélérer leur recherche, et permet d'évacuer le dernier verrou spécifique à MySQL. Remarque: au moment de la mise à jour avec cette nouvelle implémentation, les URLs propre courament dans la base seront recopiées dans la nouvelle table, sans aucune perte.
16 years ago
$col_id = id_table_objet($type);
$contexte[$col_id] = $row['id_objet'];
}
if ($type AND ($adapter_le_fond OR $fond='type_urls')) {
$fond = ($type == 'syndic') ? 'site' : $type;
}
}
} // function_exists
?>