diff --git a/.gitattributes b/.gitattributes index ceea1bfe8bd41ed51c48edbfabffd100d7968e9f..2c912b2c0337bc7b2e187b86c78b4765d2eab963 100644 --- a/.gitattributes +++ b/.gitattributes @@ -91,7 +91,6 @@ ecrire/action/logout.php -text ecrire/action/petitionner.php -text ecrire/action/poster_forum_prive.php -text ecrire/action/purger.php -text -ecrire/action/redirect.php -text ecrire/action/referencer_traduction.php -text ecrire/action/regler_moderation.php -text ecrire/action/reorganiser.php -text diff --git a/dist/forum.html b/dist/forum.html index e183c8d689572665c1fbb74f6bdea289b1c4dd3b..0a5008b92c433e0b468e38008f9a062059fc37b5 100644 --- a/dist/forum.html +++ b/dist/forum.html @@ -45,7 +45,7 @@ <BOUCLE_ariane_site(HIERARCHIE) {id_rubrique}> > <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a> </BOUCLE_ariane_site> - > <a href="[(#ID_SYNDIC|generer_url_site)]">[(#TITRE|couper{80})]</a> + > <a href="[(#ID_SYNDIC|generer_url_entite{'site'})]">[(#TITRE|couper{80})]</a> </BOUCLE_contexte_site> <//B_contexte_site> @@ -94,7 +94,7 @@ </BOUCLE_rubrique> <BOUCLE_syndic(SITES) {id_syndic}> - <h3><a href="[(#ID_SYNDIC|generer_url_site)]">#NOM_SITE</a></h3> + <h3><a href="[(#ID_SYNDIC|generer_url_entite{'site'})]">#NOM_SITE</a></h3> [<div class="texte">(#DESCRIPTIF)</div>] </BOUCLE_syndic> diff --git a/dist/mot.html b/dist/mot.html index b29709ca6db673b20ccb1e0d8a1c7e2c87aad459..b340f6b914ab113f3fa8754bad3cfe934cc0d186 100644 --- a/dist/mot.html +++ b/dist/mot.html @@ -86,9 +86,9 @@ <div class="menu"> <h2><:sites_web:></h2> <ul> - <BOUCLE_sites(SITES) {id_mot} {par nom_site}> - <li><a href="[(#ID_SYNDIC|generer_url_site)]">#NOM_SITE</a></li> - </BOUCLE_sites> + <BOUCLE_sites(SITES) {id_mot} {par nom_site}><li> + <a href="[(#ID_SYNDIC|generer_url_entite{site})]">#NOM_SITE</a> + </li></BOUCLE_sites> </ul> </div> </B_sites> diff --git a/dist/plan.html b/dist/plan.html index 06abb76c3049436944cdbea2d8f3854b9e897850..c7d302e831c0db14bd8969a715670a1ea7eaeb26 100644 --- a/dist/plan.html +++ b/dist/plan.html @@ -72,9 +72,9 @@ <B_sites> <h3><:sites_web:></h3> <ul> - <BOUCLE_sites(SITES) {id_secteur} {par nom_site}> - <li><a href="[(#ID_SYNDIC|generer_url_site)]">#NOM_SITE</a></li> - </BOUCLE_sites> + <BOUCLE_sites(SITES) {id_secteur} {par nom_site}><li> + <a href="[(#ID_SYNDIC|generer_url_entite{site})]">#NOM_SITE</a> + </li></BOUCLE_sites> </ul> </B_sites> diff --git a/dist/recherche.html b/dist/recherche.html index e98a351d45170c5788e9a2bbbd621037c175735d..b0c8e0917f92982baa8565dc664c27a80dbc4bdc 100644 --- a/dist/recherche.html +++ b/dist/recherche.html @@ -100,9 +100,9 @@ #ANCRE_PAGINATION <h2><:sites_web:> (#GRAND_TOTAL)</h2> <ul> - <BOUCLE_sites(SITES) {recherche} {par points}{inverse} {pagination 5}> - <li><a href="[(#ID_SYNDIC|generer_url_site)]">#NOM_SITE</a></li> - </BOUCLE_sites> + <BOUCLE_sites(SITES) {recherche} {par points}{inverse} {pagination 5}><li> + <a href="[(#ID_SYNDIC|generer_url_entite{site})]">#NOM_SITE</a> + </li></BOUCLE_sites> </ul> [<p class="pagination">(#PAGINATION)</p>] </div> diff --git a/dist/rubrique.html b/dist/rubrique.html index 55e0504ddf656a0c97255a7d9a98718cb57bfec9..b1908e8269b44a0b6bf87a0f054dc9c19f9e80c3 100644 --- a/dist/rubrique.html +++ b/dist/rubrique.html @@ -120,7 +120,7 @@ href="[(#URL_PAGE{backend})]<BOUCLE_URLMOT(MOTS){id_rubrique}>&id_mot[]=#ID_ <h2><:sur_web:></h2> <ul> <BOUCLE_sites(SITES) {id_rubrique} {par nom_site}> - <li><a href="[(#ID_SYNDIC|generer_url_site)]">#NOM_SITE</a> + <li><a href="[(#ID_SYNDIC|generer_url_entite{site})]">#NOM_SITE</a> <B_syndic> <ul> <BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic} {age<180} {par date}{inverse} {0,3}> diff --git a/dist/site.html b/dist/site.html index 71b2f09ae00f701c8616f9a993cf793e9defa1c9..67357ce1e57809f0dd17967421192d41daa3b6c2 100644 --- a/dist/site.html +++ b/dist/site.html @@ -75,7 +75,7 @@ <h2><:sites_web:></h2> <ul> <BOUCLE_sites(SITES) {par nom_site} {pagination 20}> - <li><a href="[(#ID_SYNDIC|generer_url_site)]"[ class="(#EXPOSE)"]>#NOM_SITE</a></li> + <li><a href="[(#ID_SYNDIC|generer_url_entite{site})]"[ class="(#EXPOSE)"]>#NOM_SITE</a></li> </BOUCLE_sites> </ul> [<p class="pagination">(#PAGINATION)</p>] diff --git a/ecrire/action/editer_signatures.php b/ecrire/action/editer_signatures.php index ac451cf462a590007275765cbd3d341d1b377c05..3fc4f1d6349d452dc0925701a0abfda3bf591353 100644 --- a/ecrire/action/editer_signatures.php +++ b/ecrire/action/editer_signatures.php @@ -44,9 +44,8 @@ function action_editer_signatures_post($r) include_spip('balise/formulaire_signature'); include_spip('inc/texte'); - charger_generer_url(); $id_article = $row['id_article']; - $url = $GLOBALS['meta']['adresse_site'] . '/' . generer_url_article($id_article); + $url = $GLOBALS['meta']['adresse_site'] . '/' . generer_url_entite($id_article, 'article'); if (signature_a_confirmer($id_article, $url, $row['nom_email'], $row['ad_email'], $row['nom_site'], $row['url_site'], $row['message'], $row['lang'], $row['statut'])) sql_update("spip_signatures", array("date_time" => 'NOW()'), "id_signature=$id"); $id = 0; @@ -57,8 +56,7 @@ function action_editer_signatures_post($r) // Invalider les pages ayant trait aux petitions if ($id) { include_spip('inc/invalideur'); - $id_article = sql_fetsel("id_article", "spip_signatures", "id_signature=$id"); - $id_article = $id_article['id_article']; + $id_article = sql_getfetsel("id_article", "spip_signatures", "id_signature=$id"); suivre_invalideur("id='varia/pet$id_article'"); } diff --git a/ecrire/action/redirect.php b/ecrire/action/redirect.php deleted file mode 100644 index 092ffaafbfc54de1b2457599f08db44b0a302d98..0000000000000000000000000000000000000000 --- a/ecrire/action/redirect.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2008 * - * 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. * -\***************************************************************************/ - -// pour rediriger vers l'URL canonique de l'article, -// en indiquant recalcul et previsu - -if (!defined("_ECRIRE_INC_VERSION")) return; - -// http://doc.spip.org/@action_redirect_dist -function action_redirect_dist() -{ - global $redirect; - $redirect = _request('redirect'); - - $suite =''; - if ($mode = _request('var_mode')) $suite = "var_mode=$mode"; - if ($connect = _request('connect')) { - $suite .= ($suite ? '&' : '') . "connect=$connect"; - $GLOBALS['type_urls'] = 'propres'; - } - - #charger les url du public - charger_generer_url(false); - - if ($id_article = intval(_request('id_article'))) { - $r = generer_url_article($id_article,$suite,_request('ancre')); - } - else if ($id_breve = intval(_request('id_breve'))) { - $r = generer_url_breve($id_breve,$suite,_request('ancre')); - } - else if ($id_forum = intval(_request('id_forum'))) { - $r = generer_url_forum($id_forum,$suite,_request('ancre')); - } - else if ($id_rubrique = intval(_request('id_rubrique'))) { - $r = generer_url_rubrique($id_rubrique,$suite,_request('ancre')); - } - else if ($id_mot = intval(_request('id_mot'))) { - $r = generer_url_mot($id_mot,$suite,_request('ancre')); - } - else if ($id_auteur = intval(_request('id_auteur'))) { - $r = generer_url_auteur($id_auteur,$suite,_request('ancre')); - } - else if ($id_syndic = intval(_request('id_syndic')) OR $id_syndic = intval(_request('id_site'))) { - $r = generer_url_site($id_syndic,$suite,_request('ancre')); - } - -// Ne pas masquer cette eventuelle erreur (aide a detecter des lignes vides -// dans inc-urls ou mes_fonctions/mes_options) - else $redirect = _DIR_RESTREINT; - - // si c'est un url calcule, on l'encode car spip va ensuite le decoder - // avant de faire le header(location) - if (isset($r)) - $redirect = rawurlencode($r); - -// Compatibilite avec l'ancienne interface a un seul argument des generer_url_ - if ($mode AND !strpos($redirect, 'var_mode')) { - $sep = (strpos($redirect,'?') !== false) ? '&' : '?'; - if (strpos($redirect,'#')) - $redirect = str_replace('#', "$sep$suite#", $redirect); - else $redirect .= "$sep$suite"; - } -} -?> diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php index d369bbc492cdf673578b3b008f2b891ca35986fd..83affcfc08b379c0555e6a0389a28f9c8f1a227c 100644 --- a/ecrire/balise/formulaire_forum.php +++ b/ecrire/balise/formulaire_forum.php @@ -15,10 +15,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; #securite include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/forum'); -include_spip('base/abstract_sql'); -spip_connect(); - -charger_generer_url(); /*******************************/ /* GESTION DU FORMULAIRE FORUM */ diff --git a/ecrire/balise/logo_.php b/ecrire/balise/logo_.php index e7dcb76a64fc0b25e83a9c6bccc5316c57563bcd..b479e9c8f3546a7561a27aee986a3afe0bc64233 100644 --- a/ecrire/balise/logo_.php +++ b/ecrire/balise/logo_.php @@ -92,7 +92,7 @@ function balise_LOGO__dist ($p) { // 1. filtre |lien if ($flag_lien_auto AND !$lien) - $code_lien = '($lien = generer_url_'.$type_objet.'('.$_id_objet.')) ? $lien : ""'; + $code_lien = '($lien = generer_url_entite('.$_id_objet . ',"' . $type_objet .'")) ? $lien : ""'; // 2. lien indique en clair (avec des balises : imprimer#ID_ARTICLE.html) else if ($lien) { $code_lien = "'".texte_script(trim($lien))."'"; diff --git a/ecrire/balise/url_.php b/ecrire/balise/url_.php index fa8a2705e82649660cb532fdf41e63e330b950bb..9bae4465a9d692d7ccde13ab9619e63ae46960f1 100644 --- a/ecrire/balise/url_.php +++ b/ecrire/balise/url_.php @@ -12,17 +12,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -// Les balises URL_$type sont generiques, sauf qq cas particuliers: -// elles produisent un appel a generer_url_$type(id-courant) -// grace a la fonction ci-dessous +// Les balises URL_$type sont generiques, sauf qq cas particuliers. // Si ces balises sont utilisees pour la base locale, -// producttion des appels aux fonctions generer_url parametrees par $type_urls +// production des appels a generer_url_entite(id-courant, type_urls) // Si la base est externe et non geree par SPIP // on retourne NULL pour provoquer leur interpretation comme champ SQL normal. // Si la base est externe et sous SPIP, // on produit l'URL de l'objet si c'est une piece jointe // ou sinon l'URL du site local applique sur l'objet externe // ce qui permet de le voir a travers les squelettes du site local +// Pour bien faire, il faudrait recuperer le choix du type-url distant // http://doc.spip.org/@generer_generer_url function generer_generer_url($type, $p) @@ -33,8 +32,8 @@ function generer_generer_url($type, $p) if ($s = $p->id_boucle) $s = $p->boucles[$s]->sql_serveur; - if (!$s AND function_exists("generer_url_$type")) - return "generer_url_$type($_id)"; + if (!$s) + return "generer_url_entite($_id, '$type')"; elseif (!$GLOBALS['connexions'][$s]['spip_connect_version']) { return NULL; } else { diff --git a/ecrire/exec/articles_page.php b/ecrire/exec/articles_page.php index 10a1495e22f5b2b9cceeb128422fb5eef5051787..e5ad7e433736656b4486c4541753127c183f3a8d 100644 --- a/ecrire/exec/articles_page.php +++ b/ecrire/exec/articles_page.php @@ -13,7 +13,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); -charger_generer_url(); // http://doc.spip.org/@exec_articles_page_dist function exec_articles_page_dist() diff --git a/ecrire/exec/breves.php b/ecrire/exec/breves.php index c6b7279c459735f91d8e6435aad14bda40f7cbe0..125ce532599745975e79d52a6a0e5a00efc897cc 100644 --- a/ecrire/exec/breves.php +++ b/ecrire/exec/breves.php @@ -19,7 +19,6 @@ function exec_breves_dist() { global $spip_lang_left, $spip_lang_right; - charger_generer_url(); pipeline('exec_init',array('args'=>array('exec'=>'breves'),'data'=>'')); $commencer_page = charger_fonction('commencer_page', 'inc'); diff --git a/ecrire/exec/controle_forum.php b/ecrire/exec/controle_forum.php index b4bd5b96443ee03c668b7d9dc2535f33c45c3d2c..a284f6165c2f47cd66fcf233b8a1f7b7f94d8185 100644 --- a/ecrire/exec/controle_forum.php +++ b/ecrire/exec/controle_forum.php @@ -13,10 +13,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); -charger_generer_url(); include_spip('inc/forum'); - // http://doc.spip.org/@forum_parent function forum_parent($id_forum) { $row=sql_fetsel("*", "spip_forum", "id_forum=$id_forum AND statut != 'redac'"); @@ -43,7 +41,7 @@ function forum_parent($id_forum) { } else { $ancre = "forum$id_forum" ; return array('pref' => _T('lien_reponse_article'), - 'url' => generer_url_article($id_article,'',$ancre), + 'url' => generer_url_entite($id_article,'article', '',$ancre), 'type' => 'id_article', 'valeur' => $id_article, 'titre' => $titre, @@ -55,7 +53,7 @@ function forum_parent($id_forum) { $id_rubrique = $row['id_rubrique']; $titre = $row['titre']; return array('pref' => _T('lien_reponse_rubrique'), - 'url' => generer_url_rubrique($id_rubrique), + 'url' => generer_url_entite($id_rubrique,'rubrique'), 'type' => 'id_rubrique', 'valeur' => $id_rubrique, 'titre' => $titre); @@ -84,7 +82,7 @@ function forum_parent($id_forum) { 'titre' => $titre); } else { return array('pref' => _T('lien_reponse_breve_2'), - 'url' => generer_url_breve($id_breve), + 'url' => generer_url_entite($id_breve, 'breve'), 'type' => 'id_breve', 'valeur' => $id_breve, 'titre' => $titre); diff --git a/ecrire/exec/controle_petition.php b/ecrire/exec/controle_petition.php index 465c8a881e9f6a599f60e8c75ebda39d3dfb47e6..9f5d7c07e2fa8bb2c15330d98a985428f753c129 100644 --- a/ecrire/exec/controle_petition.php +++ b/ecrire/exec/controle_petition.php @@ -110,10 +110,9 @@ function controle_petition_page($id_article, $titre, $ong, $statut, $corps) echo bouton_spip_rss('signatures'); if ($id_article) { + $h = generer_url_entite($id_article,'article'); echo "<a href='", - (($statut == 'publie') ? - generer_url_action('redirect', "id_article=$id_article") : - generer_url_ecrire('articles', "id_article=$id_article")), + $h, "'>", typo($titre), "</a>", diff --git a/ecrire/exec/forum.php b/ecrire/exec/forum.php index fe91a17f17a7112bb1fa469419ca708d87249838..e5163a5331b27a0ccba1d086f724dad915c5af85 100644 --- a/ecrire/exec/forum.php +++ b/ecrire/exec/forum.php @@ -13,7 +13,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); -charger_generer_url(); // http://doc.spip.org/@exec_forum_dist function exec_forum_dist() diff --git a/ecrire/exec/message.php b/ecrire/exec/message.php index 0d532e3012b38ceae8064b45f5a09981637ed1f0..d72c661437631186bb7b244811a6a30b7520bbfe 100644 --- a/ecrire/exec/message.php +++ b/ecrire/exec/message.php @@ -13,7 +13,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); -include_spip('base/abstract_sql'); include_spip('inc/mots'); // http://doc.spip.org/@exec_message_dist @@ -41,7 +40,6 @@ function exec_message_args($id_message, $forcer_dest, $cherche_auteur) include_spip('inc/headers'); redirige_par_entete(redirige_action_auteur("editer_message","$id_message/:$connect_id_auteur", 'message', "id_message=$id_message", true)); } - charger_generer_url(); exec_affiche_message_dist($id_message, $cherche_auteur, $forcer_dest); } } diff --git a/ecrire/inc/afficher_objets.php b/ecrire/inc/afficher_objets.php index 23e9545effffd7e1591c58aac584af95d0993b3a..2d109bf96d5d0c0834e4456f0cb9cf9bfea7be7a 100644 --- a/ecrire/inc/afficher_objets.php +++ b/ecrire/inc/afficher_objets.php @@ -27,7 +27,7 @@ function lien_editer_objet($type,$key,$id){ // http://doc.spip.org/@lien_voir_objet function lien_voir_objet($type,$key,$id){ - if ($type == 'document') return generer_url_document($id); + if ($type == 'document') return generer_url_entite($id, 'document'); $exec = array('article'=>'articles','breve'=>'breves_voir','rubrique'=>'naviguer','mot'=>'mots_edit', 'signature'=>'controle_petition'); $exec = isset($exec[$type])?$exec[$type]:$type . "s"; return generer_url_ecrire($exec,"$key=$id"); diff --git a/ecrire/inc/agenda.php b/ecrire/inc/agenda.php index 6a6e796e53841fb60883c9406625b1df5c2c6d9a..ed594890967f05d84d8a6d70602ddbb0c196cf39 100644 --- a/ecrire/inc/agenda.php +++ b/ecrire/inc/agenda.php @@ -14,7 +14,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/layer'); include_spip('inc/texte'); // inclut inc_filtre -charger_generer_url(); // Typographie generale des calendriers de 3 type: jour/semaine/mois(ou plus) @@ -1351,6 +1350,7 @@ function quete_calendrier_jour($annee,$mois,$jour) { // http://doc.spip.org/@quete_calendrier_interval function quete_calendrier_interval($limites) { + include_spip('inc/urls'); list($avant, $apres) = $limites; $evt = array(); quete_calendrier_interval_articles($avant, $apres, $evt); @@ -1369,7 +1369,7 @@ function quete_calendrier_interval_forums($limites, &$evenements) { if (autoriser('voir','forum',$id)) $evenements[$amj][]= array( - 'URL' => generer_url_forum($id), + 'URL' => generer_url_entite('forum', $id), 'CATEGORIES' => 'calendrier-couleur7', 'SUMMARY' => $row['titre'], 'DTSTART' => date_ical($row['date_heure'])); diff --git a/ecrire/inc/documenter.php b/ecrire/inc/documenter.php index 0d608dfa722d6141338b5cd57eb9ad90c951d561..0eee3119a4ad9d8e96049017f9abaca9af4c5685 100644 --- a/ecrire/inc/documenter.php +++ b/ecrire/inc/documenter.php @@ -75,7 +75,6 @@ function documenter_bloc($id, $res, $s, $script, $ancre, $tous, $type) // http://doc.spip.org/@documenter_boucle function documenter_boucle($documents, $type, $ancre, &$tous_autorises, $appelant, $opt=array()) { - charger_generer_url(); // la derniere case d'une rangee $bord_droit = ($ancre == 'portfolio' ? 2 : 1); $case = 0; diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php index eaaa62c63c9a231e358340c1ead05fedc3ed3a2c..1e614060ab47d0afb4afbf1dc66c2d6feb150171 100644 --- a/ecrire/inc/documents.php +++ b/ecrire/inc/documents.php @@ -339,7 +339,6 @@ function est_inclus($id_document) { function afficher_case_document($id_document, $id, $script, $type, $deplier=false) { global $spip_lang_right; - charger_generer_url(); $document = sql_fetsel("docs.id_document, docs.id_vignette,docs.extension,docs.titre,docs.descriptif,docs.fichier,docs.largeur,docs.hauteur,docs.taille,docs.mode,docs.distant, docs.date, L.vu", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document", "L.id_objet=".intval($id)." AND objet=".sql_quote($type)." AND L.id_document=".sql_quote($id_document)); if (!$document) return ""; @@ -348,7 +347,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals $extension = $document['extension']; $titre = $document['titre']; $descriptif = $document['descriptif']; - $url = generer_url_document($id_document); + $url = generer_url_entite($id_document, 'document'); $fichier = $document['fichier']; $largeur = $document['largeur']; $hauteur = $document['hauteur']; diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php index ec518218e494a48db52f60f7fd63f737d919f693..ce9ed5b4c58bd1fd33bc7a862df38f21e3bdd27a 100644 --- a/ecrire/inc/forum.php +++ b/ecrire/inc/forum.php @@ -319,7 +319,7 @@ function racine_forum($id_forum){ // On ne devrait jamais arriver ici, mais prevoir des cas de forums // poses sur autre chose que les objets prevus... spip_log("erreur racine_forum $id_forum"); - return false; + return array(); } @@ -327,32 +327,36 @@ function racine_forum($id_forum){ function parent_forum($id_forum) { if (!$id_forum = intval($id_forum)) return; $row = sql_fetsel("id_parent, id_rubrique, id_article, id_breve, id_syndic", "spip_forum", "id_forum=".$id_forum); - if($row) { - if($row['id_parent']) return array('forum', $row['id_parent']); - if($row['id_rubrique']) return array('rubrique', $row['id_rubrique']); - if($row['id_article']) return array('article', $row['id_article']); - if($row['id_breve']) return array('breve', $row['id_breve']); - if($row['id_syndic']) return array('site', $row['id_syndic']); - } + if(!$row) return array(); + if($row['id_parent']) return array('forum', $row['id_parent']); + if($row['id_article']) return array('article', $row['id_article']); + if($row['id_breve']) return array('breve', $row['id_breve']); + if($row['id_rubrique']) return array('rubrique', $row['id_rubrique']); + if($row['id_syndic']) return array('site', $row['id_syndic']); } // http://doc.spip.org/@generer_url_forum_dist function generer_url_forum_dist($id_forum, $args='', $ancre='') { - if (!$id_forum) return ''; - list($type, $id, $id_thread) = racine_forum($id_forum); - if (!$ancre) $ancre = "forum$id_forum"; - if (function_exists($f = 'generer_url_'.$type)) - return $f($id, $args, $ancre); + if ($id_forum = intval($id_forum)) { + list($type, $id,) = racine_forum($id_forum); + if ($type) { + if (!$ancre) $ancre = "forum$id_forum"; + return generer_url_entite($id, $type, $args, $ancre); + } + } + return ''; } // http://doc.spip.org/@generer_url_forum_parent function generer_url_forum_parent($id_forum) { - if (!$id_forum = intval($id_forum)) return; - list($type, $id) = parent_forum($id_forum); - if (function_exists($f = 'generer_url_'.$type)) - return $f($id); + if ($id_forum = intval($id_forum)) { + list($type, $id) = parent_forum($id_forum); + if ($type) + return generer_url_entite($id, $type); + } + return ''; } diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php index e37c82df77384c0206c5c00d766bb37df7a893cd..f9e0abe827067e194ef9fad35756b77be5255843 100644 --- a/ecrire/inc/forum_insert.php +++ b/ecrire/inc/forum_insert.php @@ -13,16 +13,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/forum'); include_spip('inc/filtres'); -include_spip('base/abstract_sql'); include_spip('inc/actions'); -spip_connect(); - // Ce fichier est inclus lorsqu'on appelle un script de l'espace public // avec une variable d'URL nommee confirmer_forum // Voir commentaires dans balise/formulaire_forum - // http://doc.spip.org/@controler_forum_abo function controler_forum_abo($retour) { @@ -107,17 +103,16 @@ function inc_forum_insert_dist($force_statut = NULL) { # retour a calculer (cf. inc-formulaire_forum) if ($retour_forum == '!') { // on calcule a priori l'adresse de retour {en cas d'echec du POST} - charger_generer_url(_DIR_RACINE !== ''); if ($id_forum>0) - $retour_forum = generer_url_forum($id_forum); + $retour_forum = generer_url_entite($id_forum, 'forum'); elseif ($id_article) - $retour_forum = generer_url_article($id_article); + $retour_forum = generer_url_entite($id_article, 'article'); elseif ($id_breve) - $retour_forum = generer_url_breve($id_breve); + $retour_forum = generer_url_entite($id_breve, 'breve'); elseif ($id_syndic) - $retour_forum = generer_url_site($id_syndic); + $retour_forum = generer_url_entite($id_syndic, 'site'); elseif ($id_rubrique) # toujours en dernier - $retour_forum = generer_url_rubrique($id_rubrique); + $retour_forum = generer_url_entite($id_rubrique, 'rubrique'); $retour_forum = str_replace('&','&',$retour_forum); // mais la veritable adresse de retour sera calculee apres insertion @@ -237,7 +232,6 @@ function inc_forum_insert_dist($force_statut = NULL) { // dans le cas des forums moderes a posteriori, ce qui n'est // pas plus mal. - charger_generer_url(); - return generer_url_forum($id_message); + return generer_url_entite($id_message, 'forum'); } ?> diff --git a/ecrire/inc/lien.php b/ecrire/inc/lien.php index a48aaf33e10c42069abf6aa791eb4c53a58b7c10..cbb871d04a20301841688a6f62411b8a7f55a867 100644 --- a/ecrire/inc/lien.php +++ b/ecrire/inc/lien.php @@ -12,6 +12,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +// Calcul des raccourcis +// Idealement generer_url_entite delegue au jeu 'type_urls' qui les gere +// Par souci de compatibilite on teste toujours l'existence des fonctions +// generer_url_<RACCOURCI> et generer_url_<RACCOURCI>_dist + // http://doc.spip.org/@inc_lien_dist function inc_lien_dist($type,$id,$args,$ancre,$texte='',$pour='url',$connect='') { if ($connect) { @@ -20,12 +25,12 @@ function inc_lien_dist($type,$id,$args,$ancre,$texte='',$pour='url',$connect='') . "?"._SPIP_PAGE."=$type&$id_type=$id&connect=$connect" . (!$args ? '' : "&$args"); } else { - charger_generer_url(); $g = 'generer_url_' . $type; if (function_exists($g) OR function_exists($g .= '_dist')) - $res = $g($id, $args, $ancre); - - if (!$res) return false; + $g = $g($id, $args, $ancre); + if (!$g) $g = generer_url_entite($id, $type, $args, $ancre); + if (!$g) return false; + $res = $g; } if ($pour == 'url') return array($res); $g = 'calculer_url_' . $type; diff --git a/ecrire/inc/notifications.php b/ecrire/inc/notifications.php index b5b392eef2317428413cfdf89ff6677702d56153..09315a05e55e74efe69c9dd502b760b010ada0b5 100644 --- a/ecrire/inc/notifications.php +++ b/ecrire/inc/notifications.php @@ -92,9 +92,7 @@ function notifier_publication_article($id_article) { $l = lang_select($row['lang']); - // URL de l'article - charger_generer_url(false); - $url = url_absolue(_DIR_RACINE.generer_url_article($id_article, '','', 'publie')); + $url = url_absolue(_DIR_RACINE.generer_url_entite($id_article, 'article')); $titre = nettoyer_titre_email($row['titre']); @@ -156,47 +154,47 @@ function email_notification_forum ($t, $email) { if (NULL !== ($l = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email)))) $l = lang_select($l); - - charger_generer_url(); + $url = ''; + $id_forum = $t['id_forum']; if ($t['statut'] == 'prop') # forum modere { - $url = generer_url_ecrire('controle_forum', "debut_id_forum=".$t['id_forum']); + $url = generer_url_ecrire('controle_forum', "debut_id_forum=".$id_forum); } else if ($t['statut'] == 'prive') # forum prive { if ($t['id_article']) - $url = generer_url_ecrire('articles', 'id_article='.$t['id_article']).'#id'.$t['id_forum']; + $url = generer_url_ecrire('articles', 'id_article='.$t['id_article']).'#id'.$id_forum; else if ($t['id_breve']) - $url = generer_url_ecrire('breves_voir', 'id_breve='.$t['id_breve']).'#id'.$t['id_forum']; + $url = generer_url_ecrire('breves_voir', 'id_breve='.$t['id_breve']).'#id'.$id_forum; else if ($t['id_syndic']) - $url = generer_url_ecrire('sites', 'id_syndic='.$t['id_syndic']).'#id'.$t['id_forum']; + $url = generer_url_ecrire('sites', 'id_syndic='.$t['id_syndic']).'#id'.$id_forum; } else if ($t['statut'] == 'privrac') # forum general { - $url = generer_url_ecrire('forum').'#id'.$t['id_forum']; + $url = generer_url_ecrire('forum').'#id'.$id_forum; } else if ($t['statut'] == 'privadm') # forum des admins { - $url = generer_url_ecrire('forum_admin').'#id'.$t['id_forum']; - } - else if (function_exists('generer_url_forum')) { - $url = generer_url_forum($t['id_forum']); + $url = generer_url_ecrire('forum_admin').'#id'.$id_forum; } else { - spip_log('inc-urls personnalise : ajoutez generer_url_forum() !'); if ($t['id_article']) - $url = generer_url_article($t['id_article']).'#'.$t['id_forum']; - else - $url = './'; - } + $url = generer_url_entite($t['id_article'], 'article','', 'id'.$id_forum); + else if ($t['id_breve']) + $url = generer_url_entite($t['id_breve'], 'breve', '', 'id'.$id_forum); + else if ($t['id_syndic']) + $url = generer_url_entite($t['id_syndic'], 'site', '', '#id'.$id_forum); + } + if (!$url) { + spip_log("forum $id_forum sans referent"); + $url = './'; + } if ($t['id_article']) { - $article = sql_fetsel("titre", "spip_articles", "id_article=".sql_quote($t['id_article'])); - $titre = textebrut(typo($article['titre'])); + $titre = textebrut(typo(sql_getfetsel("titre", "spip_articles", "id_article=".sql_quote($t['id_article'])))); } if ($t['id_message']) { - $message = sql_fetsel("titre", "spip_messages", "id_message=".sql_quote($t['id_message'])); - $titre = textebrut(typo($message['titre'])); + $titre = textebrut(typo(sql_getfetsel("titre", "spip_messages", "id_message=".sql_quote($t['id_message'])))); } $sujet = "[" . diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php index 4b29169e254042b72111fccc4a49a45d82b875c7..8715cc79ee2ad5dc94a9efe8c442c33cb6b76ed7 100644 --- a/ecrire/inc/presentation.php +++ b/ecrire/inc/presentation.php @@ -1276,9 +1276,11 @@ function voir_en_ligne ($type, $id, $statut=false, $image='racine-24.gif', $af = else return ''; - return - $inline ? icone_inline($message, generer_url_action('redirect', "id_$type=$id&var_mode=$en_ligne"), $image, "rien.gif", $GLOBALS['spip_lang_left']) : - icone_horizontale($message, generer_url_action('redirect', "id_$type=$id&var_mode=$en_ligne"), $image, "rien.gif",$af); + $h = generer_url_entite($id, $type, "var_mode=$en_ligne", '', false); + + return $inline + ? icone_inline($message, $h, $image, "rien.gif", $GLOBALS['spip_lang_left']) + : icone_horizontale($message, $h, $image, "rien.gif",$af); } diff --git a/ecrire/inc/referenceurs.php b/ecrire/inc/referenceurs.php index 8dc5a2fdca97a598600ebe3a869f5427e7caa85b..4b72b3ddec862a9532a337de9662f451943e2d2a 100644 --- a/ecrire/inc/referenceurs.php +++ b/ecrire/inc/referenceurs.php @@ -239,18 +239,19 @@ function stats_show_keywords($kw_referer, $kw_referer_host) { // // http://doc.spip.org/@referes function referes($referermd5, $serveur='') { - $refarts = sql_select('J2.id_article, J2.titre', 'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article', "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(NOW(), INTERVAL 2 DAY))", '', "titre",'','',$serveur); + $retarts = sql_allfetsel('J2.id_article, J2.titre', 'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article', "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(NOW(), INTERVAL 2 DAY))", '', "titre",'','',$serveur); - $retarts = array(); - while ($rowart = sql_fetch($refarts,$serveur)) { - $id_article = $rowart['id_article']; - $titre_article = $rowart['titre']; - $retarts[] = "<a href='".generer_url_article($id_article)."'><i>".typo($titre_article)."</i></a>"; + foreach ($retarts as $k => $rowart) { + $titre = typo($rowart['titre']); + $url = generer_url_entite($rowart['id_article'], 'article'); + $retarts[$k] = "<a href='$url'><i>$titre</i></a>"; } - $r = ""; - if (count($retarts) > 1) $r = '<br />→ '.join(',<br />→ ',$retarts); - if (count($retarts) == 1) $r = '<br />→ '.$retarts[0]; - return $r; + + if (count($retarts) > 1) + return '<br />→ '.join(',<br />→ ',$retarts); + if (count($retarts) == 1) + return '<br />→ '. array_shift($retarts); + return ''; } diff --git a/ecrire/inc/signatures.php b/ecrire/inc/signatures.php index f700ef0ec4e479ec919d2396e12b2ece6ade4826..9031a8fe720a78c805220289d70d950fc43cd724 100644 --- a/ecrire/inc/signatures.php +++ b/ecrire/inc/signatures.php @@ -15,12 +15,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@message_de_signature function message_de_signature($row) { - return propre(echapper_tags($row['message'])); + return propre(echapper_tags($row['message'])); } // http://doc.spip.org/@inc_signatures_dist function inc_signatures_dist($script, $id, $debut, $pas, $where, $order, $type='') { - charger_generer_url(); if ($id) { $args = "id_article=$id&"; @@ -110,16 +109,14 @@ function signatures_edit($script, $id, $debut, $row, $type) { $res .= message_de_signature($row); if (!$id) { - if ($r = sql_fetsel("titre, id_rubrique, statut", "spip_articles", "id_article=$id_article")) { + if ($r = sql_fetsel("titre, id_rubrique", "spip_articles", "id_article=$id_article")) { $id_rubrique = $r['id_rubrique']; - $publie = ($r['statut'] == 'publie'); $titre_a = $r['titre']; $titre_r = supprimer_numero(sql_getfetsel("titre", "spip_rubriques", "id_rubrique=$id_rubrique")); $href = generer_url_ecrire('naviguer', "id_rubrique=" . $id_rubrique); + $h2 = generer_url_entite($id_article, 'article','','',true); $res .= "<br class='nettoyeur' /><a title='$id_article' href='" - . ($publie ? - generer_url_action('redirect', "id_article=$id_article") : - generer_url_ecrire('articles', "id_article=$id_article")) + . $h2 . "'>" . typo($titre_a) . "</a><a style='float: $spip_lang_right; color: black; padding-$spip_lang_left: 4px;' href='$href' title='$id_rubrique'>" diff --git a/ecrire/inc/tourner.php b/ecrire/inc/tourner.php index 00da3308b9826ebba79f2cb0d691012b43a872b0..feeec6bb9870a68de5799f6c6ab35beca65537bd 100644 --- a/ecrire/inc/tourner.php +++ b/ecrire/inc/tourner.php @@ -37,8 +37,7 @@ function inc_tourner_dist($id_document, $document, $script, $flag, $type) if (isset($document['url'])) $url = $document['url']; else { - charger_generer_url(); - $url = generer_url_document($id_document); + $url = generer_url_entite($id_document, 'document'); } $res = ''; diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php index 7228d10fad1795c18e6b9d90ad9c349fbf7c1fe7..217726372d9b578814a966b360f9259cd04020f7 100644 --- a/ecrire/inc/urls.php +++ b/ecrire/inc/urls.php @@ -23,8 +23,7 @@ function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='', $conn } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'article', $suite, $ancre, false)); } else return generer_url_ecrire('articles', $a) . ($ancre ? "#$ancre" : ''); } @@ -36,8 +35,7 @@ function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='', $con } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'rubrique', $suite, $ancre, false)); } else return generer_url_ecrire('naviguer',$a) . ($ancre ? "#$ancre" : ''); } @@ -49,8 +47,7 @@ function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='', $connec } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'breve', $suite, $ancre, false)); } else return generer_url_ecrire('breves_voir',$a) . ($ancre ? "#$ancre" : ''); } @@ -59,8 +56,7 @@ function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='', $connect= $a = "id_mot=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'mot', $suite, $ancre, false)); } else return generer_url_ecrire('mots_edit',$a) . ($ancre ? "#$ancre" : ''); } @@ -69,8 +65,7 @@ function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='', $connect $a = "id_syndic=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'site', $suite, $ancre, false)); } else return generer_url_ecrire('sites',$a) . ($ancre ? "#$ancre" : ''); } @@ -79,8 +74,7 @@ function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $conne $a = "id_auteur=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'auteur', $suite, $ancre, false)); } else return generer_url_ecrire('auteur_infos',$a) . ($ancre ? "#$ancre" : ''); } @@ -92,10 +86,8 @@ function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='', $connec } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - if (strlen($ancre)) $a .= "&ancre=" . $ancre; - return generer_url_action('redirect', $a); + return url_absolue(_DIR_RACINE . generer_url_entite($id, 'forum', $suite, $ancre, false)); } else return generer_url_ecrire('controle_forum', "debut_id_forum=$id"); - } // http://doc.spip.org/@generer_url_ecrire_document @@ -109,50 +101,4 @@ function generer_url_ecrire_statistiques($id_article) { return generer_url_ecrire('statistiques_visites', "id_article=$id_article"); } -// en cas de chargement a partir de l'espace de redac, rabattre la production -// des URL publiques vers les URL privees en cas d'item non publies - -if (!_DIR_RESTREINT) { - - if (!function_exists('generer_url_article')) { -// http://doc.spip.org/@generer_url_article - function generer_url_article($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_article($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_rubrique')) { -// http://doc.spip.org/@generer_url_rubrique - function generer_url_rubrique($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_rubrique($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_breve')) { -// http://doc.spip.org/@generer_url_breve - function generer_url_breve($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_breve($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_mot')) { -// http://doc.spip.org/@generer_url_mot - function generer_url_mot($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_mot($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_site')) { -// http://doc.spip.org/@generer_url_site - function generer_url_site($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_site($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_auteur')) { -// http://doc.spip.org/@generer_url_auteur - function generer_url_auteur($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_auteur($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_forum')) { -// http://doc.spip.org/@generer_url_forum - function generer_url_forum($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_forum($id, $args, $ancre, $stat);} - } - if (!function_exists('generer_url_document')) { -// http://doc.spip.org/@generer_url_document - function generer_url_document($id, $args='', $ancre='', $stat='') - { return generer_url_ecrire_document($id, $args, $ancre, $stat);} - } - } ?> diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index d998f564182ce5737594bf7956cc4b3a23e0e509..cdb2537604c78da4667b5c48b54935e2ba570ffd 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -715,28 +715,41 @@ function autoriser_sans_cookie($nom) return in_array($nom, $autsanscookie); } -// Cette fonction charge le bon fichier d'urls selon qu'on est dans l'espace -// public ou prive -// http://doc.spip.org/@charger_generer_url -function charger_generer_url($prive=NULL) { - static $ok; - if ($prive===null) - $prive = test_espace_prive(); - - // espace prive - if ($prive) - include_spip('inc/urls'); - - // espace public - else { - if ($ok++) return; # fichier deja charge - - if ($GLOBALS['type_urls'] == 'page' - AND $GLOBALS['meta']['type_urls']) - $GLOBALS['type_urls'] = $GLOBALS['meta']['type_urls']; +// Fonction codant et decodant les URLS des objets SQL mis en page par SPIP +// $id = numero de la cle primaire si nombre, URL a decoder si pas numerique +// $entite = surnom de la table SQL (donne acces au nom de cle primaire) +// $args = query_string a placer apres cle=$id&.... +// $ancre = ancre a mettre a la fin de l'URL a produire +// $prive = vrai s'il faut produire l'URL d'edition, celle de lecture sinon +// $type = fichier dans le repertoire ecrire/urls determinant l'apparence + +function generer_url_entite($id='', $entite='', $args='', $ancre='', $prive=NULL, $type=NULL) +{ + if ($prive === NULL) $prive = test_espace_prive(); - include_spip('urls/'.$GLOBALS['type_urls']); + if ($prive) { + include_spip('inc/urls'); + $f = 'generer_url_ecrire_' . $entite; + return !function_exists($f) ? '' : $f($id, $args, $ancre); + } else { + if ($type === NULL) { + $type = ($GLOBALS['type_urls'] === 'page' + AND $GLOBALS['meta']['type_urls']) + ? $GLOBALS['meta']['type_urls'] + : $GLOBALS['type_urls']; // pour SPIP <2 + } + $f = charger_fonction($type, 'urls', true); + // si $entite='', on veut la fonction de passage URL ==> id + if (!$entite) return $f; + // sinon on veut effectuer le passage id ==> URL + $res = !$f ? '' : $f($entite, $id, $args, $ancre); + if ($res) return $res; + // compat SPIP < 2 : generer_url non generique, juste les std + if (function_exists($f = 'generer_url_' . $entite)) + return $f($id, $args, $ancre); } + spip_log("generer_url_entite: entite $entite inconnue dans $type"); + return ''; } // Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php index 47c6b33f133c2d75b3c99283d8534fc2abf0d8f9..aa3674547d8bb0e67595d0108a55a5175b3e6333 100644 --- a/ecrire/inc/vieilles_defs.php +++ b/ecrire/inc/vieilles_defs.php @@ -883,6 +883,27 @@ onkeyup=\'storeCaret(this);\' ondblclick=\'storeCaret(this);\'>$texte</textarea>"; }', + 'generer_url_article' => '($id, $args="", $ancre="") + { return generer_url_entite($id, "article", $args, $ancre);}', + + 'generer_url_rubrique' => '($id, $args="", $ancre="") + { return generer_url_entite($id, "rubrique", $args, $ancre);}', + + 'generer_url_breve' => '($id, $args="", $ancre="") + { return generer_url_entite($id, "breve", $args, $ancre);}', + + 'generer_url_mot' => '($id, $args="", $ancre="") + { return generer_url_entite($id, "mot", $args, $ancre);}', + + 'generer_url_site' => '($id, $args="", $ancre="") + { return generer_url_entite($id, "site", $args, $ancre);}', + + 'generer_url_auteur' => '($id, $args="", $ancre="") + { return generer_url_entite($id,"auteur", $args, $ancre);}', + + 'charger_generer_url' => '($prive=NULL) { + generer_url_entite("", "", "", "", $prive);}' + ) as $f => $def) { if (!function_exists($f)) { eval("function $f$def"); @@ -902,4 +923,5 @@ function article_select($id_article, $id_rubrique=0, $lier_trad=0, $id_version=0 return $article_select($id_article,$id_rubrique,$lier_trad,$id_version); } + ?> \ No newline at end of file diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php index fe9b5cf958721c6eb2b9eb9fff5aba0f4db04ab5..baa7baea5b6d8bce0470e95716f05d956aeeedd6 100644 --- a/ecrire/public/composer.php +++ b/ecrire/public/composer.php @@ -404,9 +404,9 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier if ($id_vignette) { $vignette = sql_fetsel('fichier','spip_documents',("id_document = $id_vignette"), '','','','',$connect); if (@file_exists(get_spip_doc($vignette['fichier']))) - $logo = generer_url_document($id_vignette); + $logo = generer_url_entite($id_vignette, 'document'); } else if ($mode == 'vignette') { - $logo = generer_url_document($id_document); + $logo = generer_url_entite($id_vignette, 'document'); if (!@file_exists($logo)) $logo = ''; } diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php index 72837c4077b48cc2c2ff4a5ed176c9fb3444ba3a..314b63105569a55b582616b5dcd3ad838cda776e 100644 --- a/ecrire/public/parametrer.php +++ b/ecrire/public/parametrer.php @@ -262,11 +262,8 @@ function quete_meta($nom, $serveur) { function public_parametrer_dist($fond, $local='', $cache='', $connect='') { // verifier que la fonction assembler est bien chargee (cf. #608) $assembler = charger_fonction('assembler', 'public'); - // et toujours charger les fonctions de generation d'URL. - if ($GLOBALS['type_urls'] == 'page' - AND $GLOBALS['meta']['type_urls']) - $GLOBALS['type_urls'] = $GLOBALS['meta']['type_urls']; - $renommer_urls= charger_fonction($GLOBALS['type_urls'], 'urls', true); + // charger la fonction de passage d'URL a id et reciproquement + $renommer_urls = generer_url_entite(); // distinguer le premier appel des appels par inclusion if (!is_array($local)) { include_spip('inc/filtres'); // pour normaliser_date @@ -280,7 +277,6 @@ function public_parametrer_dist($fond, $local='', $cache='', $connect='') { $GLOBALS['contexte'] = calculer_contexte(); if (!$renommer_urls) { // compatibilite <= 1.9.2 - charger_generer_url(); if (function_exists('recuperer_parametres_url')) $renommer_urls = 'recuperer_parametres_url'; } diff --git a/ecrire/urls/arbo.php b/ecrire/urls/arbo.php index 0a122498a3a2cae940a2a630b661d3247e139241..ec89259125088c373659fc75da610d83ea953450 100644 --- a/ecrire/urls/arbo.php +++ b/ecrire/urls/arbo.php @@ -11,15 +11,12 @@ \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser -if (!function_exists('generer_url_article')) { // si la place n'est pas prise // TODO: une interface permettant de verifier qu'on veut effectivment modifier // une adresse existante define('CONFIRMER_MODIFIER_URL', false); -include_spip('base/abstract_sql'); - /** * - Comment utiliser ce jeu d'URLs ? * Recopiez le fichier "htaccess.txt" du repertoire de base du site SPIP sous @@ -28,8 +25,8 @@ include_spip('base/abstract_sql'); * "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 = 'arbo'; ? > + * Choisissez "arbo" dans les pages de configuration d'URL + * * SPIP calculera alors ses liens sous la forme "Mon-titre-d-article". * Variantes : * pour avoir des url terminant par html @@ -76,19 +73,6 @@ define ('_url_arbo_minuscules',1); #define('_MARQUEUR_URL', serialize(array('rubrique1' => '-', 'rubrique2' => '-', 'breve1' => '+', 'breve2' => '+', 'site1' => '@', 'site2' => '@', 'auteur1' => '_', 'auteur2' => '_', 'mot1' => '+-', 'mot2' => '-+'))); define('_MARQUEUR_URL', false); -// Retire les marqueurs de type dans une URL propre ancienne maniere - -// http://doc.spip.org/@retirer_marqueurs_url_propre -function retirer_marqueurs_url_propre($url_propre) { - if (preg_match(',^[+][-](.*?)[-][+]$,', $url_propre, $regs)) { - return $regs[1]; - } - else if (preg_match(',^([-+_@])(.*?)\1?$,', $url_propre, $regs)) { - return $regs[2]; - } - // les articles n'ont pas de marqueur - return $url_propre; -} // Pipeline pour creation d'une adresse : il recoit l'url propose par le // precedent, un tableau indiquant le titre de l'objet, son type, son id, @@ -154,32 +138,33 @@ function creer_chaine_url($x) { } // http://doc.spip.org/@_generer_url_arbo -function _generer_url_arbo($url,$type,$parent,$type_parent){ +function declarer_url_arbo_rec($url,$type,$parent,$type_parent){ if (is_null($parent)){ return $url; } elseif($type!='rubrique') { - $url_parent = _generer_url_propre($type_parent?$type_parent:'rubrique',$parent); + $url_parent = declarer_url_arbo($type_parent?$type_parent:'rubrique',$parent); return $url_parent . (substr($url_parent,-1)=='/'?'':'/') .$url; } else{ if($parent==0) return $url.'/'; else - return _generer_url_propre($type_parent?$type_parent:'rubrique',$parent). $url.'/'; + return declarer_url_arbo($type_parent?$type_parent:'rubrique',$parent). $url.'/'; } } -// http://doc.spip.org/@_generer_url_propre -function _generer_url_propre($type, $id_objet) { +function declarer_url_arbo($type, $id_objet) { static $urls=array(); // Se contenter de cette URL si elle existe ; - // sauf si on invoque action=redirect avec droit de modifier l'url - $modifier_url = ( - _request('action') == 'redirect' - AND autoriser('modifierurl', $type, $id_objet) - ); + // sauf si on invoque par "voir en ligne" avec droit de modifier l'url + + $modifier_url = (_request('var_mode') == 'calcul'); + if ($modifier_url) { + include_spip('inc/autoriser'); + $modifier_url = autoriser('modifierurl', $type, $id_objet); + } if (!isset($urls[$type][$id_objet]) OR $modifier_url) { $table = table_objet_sql($type); @@ -217,7 +202,7 @@ function _generer_url_propre($type, $id_objet) { $url_propre = $urls[$type][$id_objet]['url']; if (!is_null($url_propre) AND !$modifier_url) - return _generer_url_arbo($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); // Sinon, creer une URL $url = pipeline('creer_chaine_url', @@ -237,7 +222,7 @@ function _generer_url_propre($type, $id_objet) { // Pas de changement d'url if ($url == $url_propre) - return _generer_url_arbo($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); // Verifier si l'utilisateur veut effectivement changer l'URL if ($modifier_url @@ -288,16 +273,16 @@ function _generer_url_propre($type, $id_objet) { if (sql_countsel('spip_urls AS U', $where .sql_quote($set['url']))) { sql_update('spip_urls AS U', array('date' => 'NOW()'), $where .sql_quote($set['url'])); spip_log("reordonne $type $id_objet"); - return _generer_url_arbo($urls[$type][$id_objet]['url']=$set['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($urls[$type][$id_objet]['url']=$set['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); } else { $set['url'] .= _url_arbo_sep_id.$id_objet; if (strlen($set['url']) > 200) //serveur out ? retourner au mieux - return _generer_url_arbo($urls[$type][$id_objet]['url']=$url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($urls[$type][$id_objet]['url']=$url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); elseif (sql_countsel('spip_urls AS U', $where . sql_quote($set['url']))) { sql_update('spip_urls', array('date' => 'NOW()'), 'url='.sql_quote($set['url'])); - return _generer_url_arbo($urls[$type][$id_objet]['url']=$set['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($urls[$type][$id_objet]['url']=$set['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); } } } while (@sql_insertq('spip_urls', $set) <= 0); @@ -307,22 +292,34 @@ function _generer_url_propre($type, $id_objet) { spip_log("Creation de l'url propre '" . $set['url'] . "' pour $col_id=$id_objet"); $urls[$type][$id_objet]['url'] = $set['url']; - return _generer_url_arbo($urls[$type][$id_objet]['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); + return declarer_url_arbo_rec($urls[$type][$id_objet]['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); } // http://doc.spip.org/@_generer_url_complete -function _generer_url_complete($type, $id, $args='', $ancre='') { +function _generer_url_arbo($type, $id, $args='', $ancre='') { + + if ($type == 'forum') { + include_spip('inc/forum'); + return generer_url_forum_dist($id, $args, $ancre); + } + + if ($type == 'document') { + include_spip('inc/documents'); + return generer_url_document_dist($id, $args, $ancre); + } // Mode propre - if ($propre = _generer_url_propre($type, $id)) { + $propre = declarer_url_arbo($type, $id); + + if ($propre === false) return ''; // objet inconnu. raccourci ? + + if ($propre) { $url = _debut_urls_arbo . $propre . (substr($propre,-1)=='/'?'':_terminaison_urls_arbo); + } else { - } - - // propre ne veut pas ! - else { + // objet connu mais sans possibilite d'URL lisible, revenir au defaut if ($type == 'site') $id_type = 'id_syndic'; else @@ -341,52 +338,16 @@ function _generer_url_complete($type, $id, $args='', $ancre='') { return $url; } -// http://doc.spip.org/@generer_url_article -function generer_url_article($id_article, $args='', $ancre='') { - return _generer_url_complete('article', $id_article, $args, $ancre); -} -// http://doc.spip.org/@generer_url_rubrique -function generer_url_rubrique($id_rubrique, $args='', $ancre='') { - return _generer_url_complete('rubrique', $id_rubrique, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_breve -function generer_url_breve($id_breve, $args='', $ancre='') { - return _generer_url_complete('breve', $id_breve, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_forum -function generer_url_forum($id_forum, $args='', $ancre='') { - include_spip('inc/forum'); - return generer_url_forum_dist($id_forum, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_mot -function generer_url_mot($id_mot, $args='', $ancre='') { - return _generer_url_complete('mot', $id_mot, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_auteur -function generer_url_auteur($id_auteur, $args='', $ancre='') { - return _generer_url_complete('auteur', $id_auteur, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_site -function generer_url_site($id_syndic, $args='', $ancre='') { - return _generer_url_complete('site', $id_syndic, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_document -function generer_url_document($id_document, $args='', $ancre='') { - include_spip('inc/documents'); - return generer_url_document_dist($id_document, $args, $ancre); -} - -// retrouve le fond et les parametres d'une URL propre // http://doc.spip.org/@urls_arbo_dist -function urls_arbo_dist(&$fond, $url) { +function urls_arbo_dist(&$entite, $i, $args='', $ancre='') { global $contexte; + + if (is_numeric($i)) + return _generer_url_arbo($entite, $i, $args, $ancre); + + $url = $i; + $id_objet = $type = 0; // Migration depuis anciennes URLs ? @@ -478,22 +439,22 @@ function urls_arbo_dist(&$fond, $url) { $col_id = id_table_objet($type); $contexte[$col_id] = $row['id_objet']; - if ($type!='rubrique' OR !in_array($fond,array('article','breve','site'))) - $fond = $row['type']; + if ($type!='rubrique' OR !in_array($entite,array('article','breve','site'))) + $entite = $row['type']; if ($type=='rubrique') $url_arbo = array(); } } - if ($fond=='type_urls') { + if ($entite=='type_urls') { if ($type) - $fond = ($type == 'syndic') ? 'site' : $type; + $entite = ($type == 'syndic') ? 'site' : $type; else { - $fond = '404'; + $entite = '404'; $contexte['erreur'] = ''; // qu'afficher ici ? l'url n'existe pas... on ne sait plus dire de quel type d'objet il s'agit } } define('_SET_HTML_BASE',1); } -} // function_exists + ?> diff --git a/ecrire/urls/html.php b/ecrire/urls/html.php index ffa45e360a0290b1d680672828cd085b762b29d2..fcd4f0fcde48051978276252bc9551fadef596a9 100644 --- a/ecrire/urls/html.php +++ b/ecrire/urls/html.php @@ -20,12 +20,10 @@ 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 = 'html'; ? > +Dans les pages de configuration, choisissez 'html' comme type d'url SPIP calculera alors ses liens sous la forme "article123.html". - Note : si le fichier htaccess.txt se revele trop "puissant", car trop generique, et conduit a des problemes (en lien par exemple avec d'autres applications installees dans votre repertoire, a cote de SPIP), vous @@ -34,50 +32,31 @@ pouvez l'editer pour ne conserver que la partie concernant les URLS 'html'. */ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser -if (!function_exists('generer_url_article')) { // si la place n'est pas prise -// http://doc.spip.org/@generer_url_article -function generer_url_article($id_article, $args='', $ancre='') { - return "article$id_article.html" . ($args ? "?$args" : '') . ($ancre ? "#$ancre" : ''); -} +function _generer_url_html($type, $id, $args='', $ancre='') { -// http://doc.spip.org/@generer_url_rubrique -function generer_url_rubrique($id_rubrique, $args='', $ancre='') { - return "rubrique$id_rubrique.html" . ($args ? "?$args" : '') . ($ancre ? "#$ancre" : ''); -} - -// http://doc.spip.org/@generer_url_breve -function generer_url_breve($id_breve, $args='', $ancre='') { - return "breve$id_breve.html" . ($args ? "?$args" : '') .($ancre ? "#$ancre" : ''); -} - -// http://doc.spip.org/@generer_url_mot -function generer_url_mot($id_mot, $args='', $ancre='') { - return "mot$id_mot.html" . ($args ? "?$args" : '') .($ancre ? "#$ancre" : ''); -} - -// http://doc.spip.org/@generer_url_site -function generer_url_site($id_syndic, $args='', $ancre='') { - return "site$id_syndic.html" . ($args ? "?$args" : '') .($ancre ? "#$ancre" : ''); -} + if ($type == 'forum') { + include_spip('inc/forum'); + return generer_url_forum_dist($id, $args, $ancre); + } -// http://doc.spip.org/@generer_url_auteur -function generer_url_auteur($id_auteur, $args='', $ancre='') { - return "auteur$id_auteur.html" . ($args ? "?$args" : '') .($ancre ? "#$ancre" : ''); -} + if ($type == 'document') { + include_spip('inc/documents'); + return generer_url_document_dist($id, $args, $ancre); + } -// http://doc.spip.org/@generer_url_document -function generer_url_document($id_document, $args='', $ancre='') { - include_spip('inc/documents'); - return generer_url_document_dist($id_document, $args, $ancre); + return $type . $id . '.html' . ($args ? "?$args" : '') .($ancre ? "#$ancre" : ''); } - // retrouver les parametres d'une URL dite "html" // http://doc.spip.org/@urls_html_dist -function urls_html_dist(&$fond, $url) { +function urls_html_dist(&$entite, $i, $args='', $ancre='') { global $contexte; + if (is_numeric($i)) + return _generer_url_html($entite, $i, $args, $ancre); + + $url = $i; /* * Le bloc qui suit sert a faciliter les transitions depuis @@ -92,27 +71,16 @@ function urls_html_dist(&$fond, $url) { (isset($_ENV['url_propre']) ? $_ENV['url_propre'] : ''); - if ($url_propre AND preg_match(',^(article|breve|rubrique|mot|auteur|site|type_urls)$,', $fond)) { + if ($url_propre AND preg_match(',^(article|breve|rubrique|mot|auteur|site|type_urls)$,', $entite)) { $url_propre = (preg_replace('/^[_+-]{0,2}(.*?)[_+-]{0,2}(\.html)?$/', '$1', $url_propre)); $r = sql_fetsel("id_objet,type", "spip_urls", "url=" . _q($url_propre)); if ($r) { - $fond = ($r['type'] == 'syndic') ? 'site' : $r['type']; - $contexte[id_table_objet($fond)] = $r['id_objet']; + $entite = ($r['type'] == 'syndic') ? 'site' : $r['type']; + $contexte[id_table_objet($entite)] = $r['id_objet']; } } /* Fin du bloc compatibilite url-propres */ } - -// -// URLs des forums -// - -// http://doc.spip.org/@generer_url_forum -function generer_url_forum($id_forum, $args='', $ancre='') { - include_spip('inc/forum'); - return generer_url_forum_dist($id_forum, $args, $ancre); -} - } ?> diff --git a/ecrire/urls/libres.php b/ecrire/urls/libres.php index 5c05eca543ca2849cf47e53bda22b54ff07e949b..a99f16183b4c5147d5a9ac6cfd45045d68d54b21 100644 --- a/ecrire/urls/libres.php +++ b/ecrire/urls/libres.php @@ -23,12 +23,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser if (!defined('_MARQUEUR_URL')) define('_MARQUEUR_URL', false); -include_once dirname(__FILE__).'/propres.php'; - // http://doc.spip.org/@urls_libres_dist -function urls_libres_dist(&$fond, $url) { - $f = charger_fonction('propres', 'urls', true); - if ($f) $f($fond, $url); +function urls_libres_dist(&$entite, $i, $args='', $ancre='') { + $f = charger_fonction('propres', 'urls'); + return $f($entite, $i, $args, $ancre); } ?> diff --git a/ecrire/urls/page.php b/ecrire/urls/page.php index 35e770eb3ebd959818ad7221f155d6de24a95e55..0e11255d3c22b0f185851f1d97136068a1feb648 100644 --- a/ecrire/urls/page.php +++ b/ecrire/urls/page.php @@ -11,7 +11,6 @@ \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser -if (!function_exists('generer_url_article')) { // si la place n'est pas prise ####### modifications possibles dans ecrire/mes_options # on peut indiquer '.html' pour faire joli @@ -25,66 +24,48 @@ define ('_debut_urls_page', get_spip_script('./').'?'); // http://doc.spip.org/@composer_url_page -function composer_url_page($page,$id, $args='', $ancre='') { - $url = _debut_urls_page . $page . _separateur_urls_page - . $id . _terminaison_urls_page; - if ($args) $args = strpos($url,'?') ? "&$args" : "?$args"; - return $url . $args . ($ancre ? "#$ancre" : ''); -} - -// http://doc.spip.org/@generer_url_article -function generer_url_article($id_article, $args='', $ancre='') { - return composer_url_page('article', $id_article, $args, $ancre); -} +function _generer_url_page($page,$id, $args='', $ancre='') { -// http://doc.spip.org/@generer_url_rubrique -function generer_url_rubrique($id_rubrique, $args='', $ancre='') { - return composer_url_page('rubrique', $id_rubrique, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_breve -function generer_url_breve($id_breve, $args='', $ancre='') { - return composer_url_page('breve', $id_breve, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_mot -function generer_url_mot($id_mot, $args='', $ancre='') { - return composer_url_page('mot', $id_mot, $args, $ancre); -} + if ($type == 'forum') { + include_spip('inc/forum'); + return generer_url_forum_dist($id, $args, $ancre); + } -// http://doc.spip.org/@generer_url_site -function generer_url_site($id_syndic, $args='', $ancre='') { - return composer_url_page('site', $id_syndic, $args, $ancre); -} + if ($type == 'document') { + include_spip('inc/documents'); + return generer_url_document_dist($id, $args, $ancre); + } -// http://doc.spip.org/@generer_url_auteur -function generer_url_auteur($id_auteur, $args='', $ancre='') { - return composer_url_page('auteur', $id_auteur, $args, $ancre); -} + $url = _debut_urls_page . $page . _separateur_urls_page + . $id . _terminaison_urls_page; -// http://doc.spip.org/@generer_url_document -function generer_url_document($id_document, $args='', $ancre='') { - include_spip('inc/documents'); - return generer_url_document_dist($id_document); + if ($args) $args = strpos($url,'?') ? "&$args" : "?$args"; + return $url . $args . ($ancre ? "#$ancre" : ''); } // retrouve le fond et les parametres d'une URL abregee // http://doc.spip.org/@urls_page_dist -function urls_page_dist(&$fond, $url) { +function urls_page_dist(&$entite, $i, $args='', $ancre='') +{ global $contexte; + if (is_numeric($i)) + return _generer_url_page($entite, $i, $args, $ancre); + + $url = $i; + // Ce bloc gere les urls page et la compatibilite avec les "urls standard" - if ($fond=='sommaire'){ + if ($entite=='sommaire'){ if (preg_match( ',^[^?]*[?/](article|rubrique|breve|mot|site|auteur)(?:\.php3?)?.*?([0-9]+),', $url, $regs)) { - $fond = $regs[1]; + $entite = $regs[1]; if ($regs[1] == 'site') { if (!isset($contexte['id_syndic'])) $contexte['id_syndic'] = $regs[2]; } else { - if (!isset($contexte['id_'.$fond])) - $contexte['id_'.$fond] = $regs[2]; + if (!isset($contexte['id_'.$entite])) + $contexte['id_'.$entite] = $regs[2]; } return; @@ -93,13 +74,13 @@ function urls_page_dist(&$fond, $url) { else if (preg_match( ',[?/&](article|breve|rubrique|mot|auteur|site)[=]?([0-9]+),', $url, $regs)) { - $fond = $regs[1]; + $entite = $regs[1]; if ($regs[1] == 'site') { if (!isset($contexte['id_syndic'])) $contexte['id_syndic'] = $regs[2]; } else { - if (!isset($contexte['id_'.$fond])) - $contexte['id_'.$fond] = $regs[2]; + if (!isset($contexte['id_'.$entite])) + $contexte['id_'.$entite] = $regs[2]; } return; } @@ -118,27 +99,16 @@ function urls_page_dist(&$fond, $url) { if ( (isset($_SERVER['REDIRECT_url_propre']) AND $url_propre = $_SERVER['REDIRECT_url_propre']) OR (isset($_ENV['url_propre']) AND $url_propre = $_ENV['url_propre']) - AND preg_match(',^(article|breve|rubrique|mot|auteur|site|type_urls)$,', $fond)) { + AND preg_match(',^(article|breve|rubrique|mot|auteur|site|type_urls)$,', $entite)) { $url_propre = (preg_replace('/^[_+-]{0,2}(.*?)[_+-]{0,2}(\.html)?$/', '$1', $url_propre)); $r = sql_fetsel("id_objet,type", "spip_urls", "url=" . _q($url_propre)); if ($r) { - $fond = ($r['type'] == 'syndic') ? 'site' : $r['type']; - $contexte[id_table_objet($fond)] = $r['id_objet']; + $entite = ($r['type'] == 'syndic') ? 'site' : $r['type']; + $contexte[id_table_objet($entite)] = $r['id_objet']; } } /* Fin du bloc compatibilite url-propres */ } - -// -// URLs des forums -// - -// http://doc.spip.org/@generer_url_forum -function generer_url_forum($id_forum, $args='', $ancre='') { - include_spip('inc/forum'); - return generer_url_forum_dist($id_forum, $args, $ancre); -} - } ?> diff --git a/ecrire/urls/propres.php b/ecrire/urls/propres.php index 0935136666decd6395a648ceaf5905ce80d4b7a7..666ec40ea98ed5e72f455d66fcc5ac5ffe9a1264 100644 --- a/ecrire/urls/propres.php +++ b/ecrire/urls/propres.php @@ -11,15 +11,11 @@ \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser -if (!function_exists('generer_url_article')) { // si la place n'est pas prise - // TODO: une interface permettant de verifier qu'on veut effectivment modifier // une adresse existante define('CONFIRMER_MODIFIER_URL', false); -include_spip('base/abstract_sql'); - /* - Comment utiliser ce jeu d'URLs ? @@ -30,18 +26,17 @@ 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". +Dans les pages de configuration, choisissez 'propres' comme type d'url + +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" +La variante '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'; ? > + "/?Mon-titre-d-article" */ define ('_terminaison_urls_propres', ''); @@ -137,10 +132,15 @@ function creer_chaine_url($x) { } -// http://doc.spip.org/@_generer_url_propre -function _generer_url_propre($type, $id_objet) { - $table = table_objet_sql($type); - $col_id = id_table_objet($type); +// Trouver l'URL associee a la n-ieme cle primaire d'une table SQL + +function declarer_url_propre($type, $id_objet) { + $trouver_table = charger_fonction('trouver_table', 'base'); + $desc = $trouver_table(table_objet($type)); + $table = $desc['table']; + $col_id = @$desc['key']["PRIMARY KEY"]; + if (!$col_id) return false; // Quand $type ne reference pas une table + $id_objet = intval($id_objet); // Auteurs : on prend le nom @@ -151,22 +151,21 @@ function _generer_url_propre($type, $id_objet) { else $champ_titre = 'titre'; - // Recuperer une URL propre correspondant a l'objet. $row = sql_fetsel("U.url, U.date, 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.date DESC', 1); - if (!$row) return ""; # objet inexistant + if (!$row) return ""; # Quand $id_objet n'est pas un numero connu $url_propre = $row['url']; - // Se contenter de cette URL si elle existe ; - // sauf si on invoque action=redirect avec droit de modifier l'url - $modifier_url = ( - _request('action') == 'redirect' - AND autoriser('modifierurl', $type, $id_objet) - ); + // sauf si on invoque par "voir en ligne" avec droit de modifier l'url + $modifier_url = (_request('var_mode') == 'calcul'); + if ($modifier_url) { + include_spip('inc/autoriser'); + $modifier_url = autoriser('modifierurl', $type, $id_objet); + } if ($url_propre AND !$modifier_url) return $url_propre; @@ -259,8 +258,17 @@ function _generer_url_propre($type, $id_objet) { return $set['url']; } -// http://doc.spip.org/@_generer_url_complete -function _generer_url_complete($type, $id, $args='', $ancre='') { +function _generer_url_propre($type, $id, $args='', $ancre='') { + + if ($type == 'forum') { + include_spip('inc/forum'); + return generer_url_forum_dist($id, $args, $ancre); + } + + if ($type == 'document') { + include_spip('inc/documents'); + return generer_url_document_dist($id, $args, $ancre); + } // Mode compatibilite pour conserver la distinction -Rubrique- if (_MARQUEUR_URL) { @@ -272,7 +280,11 @@ function _generer_url_complete($type, $id, $args='', $ancre='') { // fin // Mode propre - if ($propre = _generer_url_propre($type, $id)) { + $propre = declarer_url_propre($type, $id); + + if ($propre === false) return ''; // objet inconnu. raccourci ? + + if ($propre) { $url = _debut_urls_propres . $marqueur1 . $propre @@ -281,10 +293,10 @@ function _generer_url_complete($type, $id, $args='', $ancre='') { // Repositionne l'URL par rapport a la racine du site (#GLOBALS) $url = str_repeat('../', $GLOBALS['profondeur_url']).$url; - } + } else { + + // objet connu mais sans possibilite d'URL lisible, revenir au defaut - // propre ne veut pas ! - else { if ($type == 'site') $id_type = 'id_syndic'; else @@ -303,52 +315,16 @@ function _generer_url_complete($type, $id, $args='', $ancre='') { return $url; } -// http://doc.spip.org/@generer_url_article -function generer_url_article($id_article, $args='', $ancre='') { - return _generer_url_complete('article', $id_article, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_rubrique -function generer_url_rubrique($id_rubrique, $args='', $ancre='') { - return _generer_url_complete('rubrique', $id_rubrique, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_breve -function generer_url_breve($id_breve, $args='', $ancre='') { - return _generer_url_complete('breve', $id_breve, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_forum -function generer_url_forum($id_forum, $args='', $ancre='') { - include_spip('inc/forum'); - return generer_url_forum_dist($id_forum, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_mot -function generer_url_mot($id_mot, $args='', $ancre='') { - return _generer_url_complete('mot', $id_mot, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_auteur -function generer_url_auteur($id_auteur, $args='', $ancre='') { - return _generer_url_complete('auteur', $id_auteur, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_site -function generer_url_site($id_syndic, $args='', $ancre='') { - return _generer_url_complete('site', $id_syndic, $args, $ancre); -} - -// http://doc.spip.org/@generer_url_document -function generer_url_document($id_document, $args='', $ancre='') { - include_spip('inc/documents'); - return generer_url_document_dist($id_document, $args, $ancre); -} - // retrouve le fond et les parametres d'une URL propre +// ou produit une URL propre si on donne un parametre // http://doc.spip.org/@urls_propres_dist -function urls_propres_dist(&$fond, $url) { +function urls_propres_dist(&$entite, $i, $args='', $ancre='') { global $contexte; + + if (is_numeric($i)) + return _generer_url_propre($entite, $i, $args, $ancre); + + $url = $i; $id_objet = $type = 0; // Migration depuis anciennes URLs ? @@ -371,8 +347,7 @@ function urls_propres_dist(&$fond, $url) { } } if ($id_objet) { - $func = "generer_url_$type"; - $url_propre = $func($id_objet); + $url_propre = generer_url_entite($id_objet, $type, $args, $ancre); if (strlen($url_propre) AND !strstr($url,$url_propre)) { include_spip('inc/headers'); @@ -429,17 +404,16 @@ function urls_propres_dist(&$fond, $url) { $col_id = id_table_objet($type); $contexte[$col_id] = $row['id_objet']; - $fond = $row['type']; + $entite = $row['type']; } - if ($fond=='type_urls') { + if ($entite=='type_urls') { if ($type) - $fond = ($type == 'syndic') ? 'site' : $type; + $entite = ($type == 'syndic') ? 'site' : $type; else { - $fond = '404'; + $entite = '404'; $contexte['erreur'] = ''; // qu'afficher ici ? l'url n'existe pas... on ne sait plus dire de quel type d'objet il s'agit } } } -} // function_exists ?> diff --git a/ecrire/urls/propres2.php b/ecrire/urls/propres2.php index 3c4071d36168a1f30d7cf3d2d846bb7f5bb49b39..bcfc80c980599d75bd99142492c4bfd8c662504f 100644 --- a/ecrire/urls/propres2.php +++ b/ecrire/urls/propres2.php @@ -23,12 +23,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser if (!defined('_terminaison_urls_propres')) define ('_terminaison_urls_propres', '.html'); -include_once dirname(__FILE__).'/propres.php'; - // http://doc.spip.org/@urls_propres2_dist -function urls_propres2_dist(&$fond, $url) { - $f = charger_fonction('propres', 'urls', true); - if ($f) $f($fond, $url); +function urls_propres2_dist(&$entite, $i, $args='', $ancre='') { + $f = charger_fonction('propres', 'urls'); + return $f($entite, $i, $args, $ancre); } ?> diff --git a/ecrire/urls/propres_qs.php b/ecrire/urls/propres_qs.php index 3b2d7827a3941026dd3e067e2616dbb0dd6b2cea..ab346f435dfea5c762be36b25ef55171e33eb820 100644 --- a/ecrire/urls/propres_qs.php +++ b/ecrire/urls/propres_qs.php @@ -31,11 +31,9 @@ if (!defined('_terminaison_urls_propres')) define ('_debut_urls_propres', './?'); -include_once dirname(__FILE__).'/propres.php'; - // http://doc.spip.org/@urls_propres_qs_dist -function urls_propres_qs_dist(&$fond, $url) { - $f = charger_fonction('propres', 'urls', true); - if ($f) $f($fond, $url); +function urls_propres_qs_dist(&$entite, $i, $args='', $ancre='') { + $f = charger_fonction('propres', 'urls'); + return $f($entite, $i, $args, $ancre); } ?>