From 182155fd552378cdfd572eb25181f0c83e9bf201 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Fri, 13 May 2005 10:03:50 +0000 Subject: [PATCH] =?UTF-8?q?int=C3=A9gration=20de=20generer=5Furl=5Fsite()?= =?UTF-8?q?=20partout,=20possibilit=C3=A9=20de=20faire=20un=20"preview"=20?= =?UTF-8?q?sur=20les=20sites,=20etc.=20A=20noter=20que=20pour=20afficher?= =?UTF-8?q?=20l'adresse=20de=20la=20page=20qui=20pr=C3=A9snete=20le=20site?= =?UTF-8?q?=20x,=20on=20ne=20peut=20pas=20utiliser=20#URL=5FSITE=20ni=20#U?= =?UTF-8?q?RLSYNDIC,=20car=20ce=20sont=20respectivement=20l'adresse=20r?= =?UTF-8?q?=C3=A9elle=20du=20site=20et=20celle=20de=20son=20backend.=20Il?= =?UTF-8?q?=20faut=20utiliser=20[(#ID=5FSYNDIC|generer=5Furl=5Fsite)]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc_forum.php3 | 3 +++ ecrire/inc_presentation.php3 | 1 + ecrire/inc_texte.php3 | 8 ++++++-- ecrire/inc_urls.php3 | 5 +++++ ecrire/inc_version.php3 | 14 ++++++++++++-- ecrire/sites.php3 | 6 +++++- formulaires/formulaire_admin.html | 4 +++- formulaires/inc-formulaire_admin.php3 | 19 ++++++++++-------- htaccess.txt | 4 ++++ inc-balises.php3 | 6 ++++++ inc-boucles.php3 | 12 +++++++++--- inc-urls-html.php3 | 11 ++++++++--- inc-urls-propres.php3 | 28 ++++++++++++++++++++------- inc-urls-standard.php3 | 11 ++++++++--- spip_redirect.php3 | 3 +++ 15 files changed, 105 insertions(+), 30 deletions(-) diff --git a/ecrire/inc_forum.php3 b/ecrire/inc_forum.php3 index f6021591a5..dabd75d567 100644 --- a/ecrire/inc_forum.php3 +++ b/ecrire/inc_forum.php3 @@ -247,6 +247,9 @@ function generer_url_forum_dist($id_forum, $show_thread=false) { case 'rubrique': return generer_url_rubrique($id)."#forum$id_forum"; break; + case 'site': + return generer_url_site($id)."#forum$id_forum"; + break; default: return "forum.php3?id_forum=".$id_forum; } diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3 index 42c3a9c86d..7facce5dcb 100644 --- a/ecrire/inc_presentation.php3 +++ b/ecrire/inc_presentation.php3 @@ -3116,6 +3116,7 @@ function voir_en_ligne ($type, $id, $statut=false, $image='racine-24.gif') { break; case 'breve': case 'auteur': + case 'site': if ($statut == 'publie') $en_ligne = 'recalcul'; else if ($statut == 'prop') diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index 5e35a5262c..63b0bf75bc 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -617,7 +617,8 @@ function extraire_lien ($regs) { case 'do': $lien_url = generer_url_document($id_lien); if (!$lien_texte) { - $req = "select titre,fichier from spip_documents where id_document=$id_lien"; + $req = "select titre,fichier from spip_documents + WHERE id_document=$id_lien"; $row = @spip_fetch_array(@spip_query($req)); $lien_texte = $row['titre']; if (!$lien_texte) @@ -625,7 +626,10 @@ function extraire_lien ($regs) { } break; case 'si': - $row = @spip_fetch_array(@spip_query("SELECT nom_site,url_site FROM spip_syndic WHERE id_syndic=$id_lien")); + # attention dans le cas des sites le lien pointe non pas sur + # la page locale du site, mais directement sur le site lui-meme + $row = @spip_fetch_array(@spip_query("SELECT nom_site,url_site + FROM spip_syndic WHERE id_syndic=$id_lien")); if ($row) { $lien_url = $row['url_site']; if (!$lien_texte) diff --git a/ecrire/inc_urls.php3 b/ecrire/inc_urls.php3 index d3df38caf9..df9b8e2a28 100644 --- a/ecrire/inc_urls.php3 +++ b/ecrire/inc_urls.php3 @@ -54,6 +54,11 @@ function generer_url_mot($id_mot) { return $url; } +function generer_url_site($id_syndic) { + $url = "../spip_redirect.php3?id_syndic=$id_syndic"; + return $url; +} + function generer_url_auteur($id_auteur) { $url = "../spip_redirect.php3?id_auteur=$id_auteur"; return $url; diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index b2b5b2135a..d31f4f2fc8 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -921,11 +921,21 @@ $spip_lang = $langue_site; // Nommage bizarre des tables d'objets function table_objet($type) { - if ($type == 'syndic' OR $type == 'forum') - return $type; + if ($type == 'site' OR $type == 'syndic') + return 'syndic'; + else if ($type == 'forum') + return 'forum'; else return $type.'s'; } +function id_table_objet($type) { + if ($type == 'site' OR $type == 'syndic') + return 'id_syndic'; + else if ($type == 'forum') + return 'id_forum'; + else + return 'id_'.$type; +} // diff --git a/ecrire/sites.php3 b/ecrire/sites.php3 index b68cb98d2c..c895cb5ec0 100644 --- a/ecrire/sites.php3 +++ b/ecrire/sites.php3 @@ -241,7 +241,11 @@ debut_gauche(); debut_boite_info(); echo "<center>"; echo "<font face='Verdana,Arial,Sans,sans-serif' size=1><b>"._T('titre_site_numero')."</b></font>"; - echo "<br><font face='Verdana,Arial,Sans,sans-serif' size=6><b>$id_syndic</b></font>"; + echo "<br><font face='Verdana,Arial,Sans,sans-serif' size=6><b>$id_syndic</b></font>\n"; + + voir_en_ligne ('site', $id_syndic, $statut); + + echo "</center>"; fin_boite_info(); diff --git a/formulaires/formulaire_admin.html b/formulaires/formulaire_admin.html index c85a899e37..c774754171 100644 --- a/formulaires/formulaire_admin.html +++ b/formulaires/formulaire_admin.html @@ -4,7 +4,9 @@ <li><a href='ecrire/articles.php3?id_article=(#ENV{id_article})' class='spip-admin-boutons'><:admin_modifier_article:> ([(#ENV{id_article})])</a></li>][ <li><a href='ecrire/breves_voir.php3?id_breve=(#ENV{id_breve})' class='spip-admin-boutons'><:admin_modifier_breve:> ([(#ENV{id_breve})])</a></li>][ <li><a href='ecrire/naviguer.php3?id_rubrique=(#ENV{id_rubrique})' class='spip-admin-boutons'><:admin_modifier_rubrique:> ([(#ENV{id_rubrique})])</a></li>][ - <li><a href='ecrire/mots_edit.php3?id_mot=(#ENV{id_mot})' class='spip-admin-boutons'><:admin_modifier_mot:> ([(#ENV{id_mot})])</a></li>][ + <li><a href='ecrire/mots_edit.php3?id_mot=(#ENV{id_mot})' class='spip-admin-boutons'><:admin_modifier_mot:> +([(#ENV{id_mot})])</a></li>][ + <li><a href='ecrire/sites.php3?id_syndic=(#ENV{id_syndic})' class='spip-admin-boutons'><:icone_modifier_site:> ([(#ENV{id_syndic})])</a></li>][ <li><a href='ecrire/auteurs_edit.php3?id_auteur=(#ENV{id_auteur})' class='spip-admin-boutons'><:admin_modifier_auteur:> ([(#ENV{id_auteur})])</a></li>][ <li><a href='(#ENV{ecrire})/' class='spip-admin-boutons'><:espace_prive:></a></li>] <li><a href='[(#ENV{action})]var_mode=recalcul' class='spip-admin-boutons'><:admin_recalculer:>[(#ENV{use_cache})]</a></li>[ diff --git a/formulaires/inc-formulaire_admin.php3 b/formulaires/inc-formulaire_admin.php3 index dd260238f8..77c136da4d 100644 --- a/formulaires/inc-formulaire_admin.php3 +++ b/formulaires/inc-formulaire_admin.php3 @@ -20,7 +20,7 @@ function balise_FORMULAIRE_ADMIN_stat($args, $filtres) { function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { global $var_preview, $use_cache, $forcer_debug; - global $id_article, $id_breve, $id_rubrique, $id_mot, $id_auteur; + global $id_article, $id_breve, $id_rubrique, $id_mot, $id_auteur, $id_syndic; static $dejafait = false; if (!$GLOBALS['spip_admin']) @@ -50,11 +50,12 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { $action = ($action . ((strpos($action, '?') === false) ? '?' : '&')); // Ne pas afficher le bouton 'Modifier ce...' si l'objet n'existe pas - foreach (array('article', 'breve', 'rubrique', 'mot', 'auteur') as $type) { - $id_type = 'id_'.$type; + foreach (array('article', 'breve', 'rubrique', 'mot', 'auteur', 'syndic') as $type) { + $id_type = id_table_objet($type); if (!($$id_type = intval($$id_type) AND $s = spip_query( - "SELECT $id_type FROM spip_${type}s WHERE $id_type=".$$id_type) + "SELECT $id_type FROM spip_".table_objet($type)." + WHERE $id_type=".$$id_type) AND spip_num_rows($s))) $$id_type=0; else { @@ -95,7 +96,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { if ($id_article OR $id_breve) unset ($id_rubrique); // Pas de "modifier ce..." ? -> donner "acces a l'espace prive" - if (!($id_article || $id_rubrique || $id_auteur || $id_breve || $id_mot)) + if (!($id_article || $id_rubrique || $id_auteur || $id_breve || $id_mot || $id_syndic)) $ecrire = 'ecrire'; // Bouton "preview" si l'objet demande existe et est previsualisable @@ -107,10 +108,11 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { )) { if ($objet_affiche == 'article' OR $objet_affiche == 'breve' - OR $objet_affiche == 'rubrique') + OR $objet_affiche == 'rubrique' + OR $objet_affiche == 'syndic') if (spip_num_rows(spip_query( - "SELECT id_$objet_affiche FROM spip_".$objet_affiche."s - WHERE id_$objet_affiche=".${"id_".$objet_affiche}." + "SELECT id_$objet_affiche FROM spip_".table_objet($objet_affiche)." + WHERE ".id_table_objet($objet_affiche)."=".$$id_type." AND statut IN ('prop', 'prive')"))) $preview = 'preview'; } @@ -122,6 +124,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { 'id_auteur' => $id_auteur, 'id_breve' => $id_breve, 'id_mot' => $id_mot, + 'id_syndic' => $id_syndic, 'ecrire' => $ecrire, 'action' => $action, 'preview' => $preview, diff --git a/htaccess.txt b/htaccess.txt index e355aa0055..1465ccd805 100644 --- a/htaccess.txt +++ b/htaccess.txt @@ -74,6 +74,7 @@ RewriteRule ^article([0-9]+)\.html$ article.php3?id_article=$1 [QSA,L] RewriteRule ^breve([0-9]+)\.html$ breve.php3?id_breve=$1 [QSA,L] RewriteRule ^mot([0-9]+)\.html$ mot.php3?id_mot=$1 [QSA,L] RewriteRule ^auteur([0-9]+)\.html$ auteur.php3?id_auteur=$1 [QSA,L] +RewriteRule ^site([0-9]+)\.html$ site.php3?id_syndic=$1 [QSA,L] # Fin compatibilite ### @@ -95,6 +96,9 @@ RewriteRule ^-[^/\.]+-?(\.html)?$ rubrique.php3 [QSA,E=url_propre:$0,L] # les auteurs RewriteRule ^_[^/\.]+_?(\.html)?$ auteur.php3 [QSA,E=url_propre:$0,L] +# Les sites +RewriteRule ^@[^/\.]+@?(\.html)?$ site.php3 [QSA,E=url_propre:$0,L] + # Les articles (en dernier car expression plus "large") RewriteRule ^[^/\.]+(\.html)?$ article.php3 [QSA,E=url_propre:$0,L] diff --git a/inc-balises.php3 b/inc-balises.php3 index 17f9b41d22..39420b68c5 100644 --- a/inc-balises.php3 +++ b/inc-balises.php3 @@ -246,6 +246,12 @@ function balise_URL_MOT_dist($p) { return $p; } +# remarque : URL_SITE ne figure pas ici car c'est une donnee 'brute' +# correspondant a l'URL du site reference ; URL_SYNDIC correspond +# pour sa part a l'adresse de son backend. +# Il n'existe pas de balise pour afficher generer_url_site($id_syndic), +# a part [(#ID_SYNDIC|generer_url_site)] + function balise_URL_FORUM_dist($p) { $p->code = "generer_url_forum(" . champ_sql('id_forum',$p) .")"; diff --git a/inc-boucles.php3 b/inc-boucles.php3 index ff8d231102..33f5ff17c5 100644 --- a/inc-boucles.php3 +++ b/inc-boucles.php3 @@ -220,7 +220,10 @@ function boucle_SYNDICATION_dist($id_boucle, &$boucles) { $boucle = &$boucles[$id_boucle]; $id_table = $boucle->id_table; $boucle->from[] = "spip_syndic AS $id_table"; - $boucle->where[] = "$id_table.statut='publie'"; + if (!$GLOBALS['var_preview']) { + $boucle->where[] = "$id_table.statut='publie'"; + } else + $boucle->where[] = "$id_table.statut IN ('publie','prop')"; return calculer_boucle($id_boucle, $boucles); } @@ -234,8 +237,11 @@ function boucle_SYNDIC_ARTICLES_dist($id_boucle, &$boucles) { $boucle->from[] = "spip_syndic_articles AS $id_table"; $boucle->from[] = "spip_syndic AS syndic"; $boucle->where[] = "$id_table.id_syndic=syndic.id_syndic"; - $boucle->where[] = "$id_table.statut='publie'"; - $boucle->where[] = "syndic.statut='publie'"; + if (!$GLOBALS['var_preview']) { + $boucle->where[] = "$id_table.statut='publie'"; + $boucle->where[] = "syndic.statut='publie'"; + } else + $boucle->where[] = "$id_table.statut IN ('publie','prop')"; $boucle->select[]='syndic.nom_site AS nom_site'; # derogation zarbi $boucle->select[]='syndic.url_site AS url_site'; # idem return calculer_boucle($id_boucle, $boucles); diff --git a/inc-urls-html.php3 b/inc-urls-html.php3 index 3b1e20d216..9bab46b8c7 100644 --- a/inc-urls-html.php3 +++ b/inc-urls-html.php3 @@ -53,6 +53,10 @@ function generer_url_mot($id_mot) { return "mot$id_mot.html"; } +function generer_url_site($id_syndic) { + return "site$id_syndic.html"; +} + function generer_url_auteur($id_auteur) { return "auteur$id_auteur.html"; } @@ -81,13 +85,14 @@ function recuperer_parametres_url($fond, $url) { // on ne redirige pas, on assume le nouveau contexte (si possible) if ($url_propre = $GLOBALS['_SERVER']['REDIRECT_url_propre'] OR $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre'] - AND preg_match(',^(article|breve|rubrique|mot|auteur)$,', $fond)) { + AND preg_match(',^(article|breve|rubrique|mot|auteur|site)$,', $fond)) { $url_propre = preg_replace('/^[_+-]{0,2}(.*?)[_+-]{0,2}(\.html)?$/', '$1', $url_propre); - if ($r = spip_query("SELECT id_$fond AS id FROM spip_".$fond."s + if ($r = spip_query("SELECT ".id_table_objet($fond)." AS id + FROM spip_".table_objet($fond)." WHERE url_propre = '".addslashes($url_propre)."'") AND $t = spip_fetch_array($r)) - $contexte["id_$fond"] = $t['id']; + $contexte[id_table_objet($fond)] = $t['id']; } /* Fin du bloc compatibilite url-propres */ diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3 index 7eb83017ce..0a28a93bc9 100644 --- a/inc-urls-propres.php3 +++ b/inc-urls-propres.php3 @@ -39,12 +39,14 @@ if (!defined('_terminaison_urls_propres')) define ('_terminaison_urls_propres', ''); function _generer_url_propre($type, $id_objet) { - $table = "spip_".$type."s"; - $col_id = "id_".$type; + $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'; @@ -165,6 +167,14 @@ function generer_url_auteur($id_auteur) { return "auteur.php3?id_auteur=$id_auteur"; } +function generer_url_site($id_syndic) { + $url = _generer_url_propre('site', $id_syndic); + if ($url) + return '@'.$url.'@'._terminaison_urls_propres; + else + return "site.php3?id_syndic=$id_syndic"; +} + function generer_url_document($id_document) { if (intval($id_document) <= 0) return ''; @@ -180,9 +190,9 @@ function recuperer_parametres_url($fond, $url) { // Migration depuis anciennes URLs ? if ($GLOBALS['_SERVER']['REQUEST_METHOD'] != 'POST' && -preg_match(',(^|/)((article|breve|rubrique|mot|auteur)(\.php3?|[0-9]+\.html)([?&].*)?)$,', $url, $regs)) { +preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html)([?&].*)?)$,', $url, $regs)) { $type = $regs[3]; - $id_objet = intval($GLOBALS['id_'.$type]); + $id_objet = intval($GLOBALS[$id_table_objet = id_table_objet($type)]); if ($id_objet) { $func = "generer_url_$type"; $url_propre = $func($id_objet); @@ -191,7 +201,7 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur)(\.php3?|[0-9]+\.html)([?& http_status(301); // recuperer les arguments supplementaires (&debut_xxx=...) $reste = preg_replace('/^&/','?', - preg_replace("/[?&]id_$type=$id_objet/",'',$regs[5])); + preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5])); Header("Location: $url_propre$reste"); exit; } @@ -224,14 +234,18 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur)(\.php3?|[0-9]+\.html)([?& $type = 'auteur'; $url_propre = $regs[1]; } + else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) { + $type = 'syndic'; + $url_propre = $regs[1]; + } else { $type = 'article'; preg_match(',^(.*)$,', $url_propre, $regs); $url_propre = $regs[1]; } - $table = "spip_".$type."s"; - $col_id = "id_".$type; + $table = "spip_".table_objet($type); + $col_id = id_table_objet($type); $query = "SELECT $col_id FROM $table WHERE url_propre='".addslashes($url_propre)."'"; $result = spip_query($query); diff --git a/inc-urls-standard.php3 b/inc-urls-standard.php3 index ca9348cdf8..3247d3139e 100644 --- a/inc-urls-standard.php3 +++ b/inc-urls-standard.php3 @@ -31,6 +31,10 @@ function generer_url_mot($id_mot) { return "mot.php3?id_mot=$id_mot"; } +function generer_url_site($id_syndic) { + return "site.php3?id_syndic=$id_syndic"; +} + function generer_url_auteur($id_auteur) { return "auteur.php3?id_auteur=$id_auteur"; } @@ -59,13 +63,14 @@ function recuperer_parametres_url($fond, $url) { // on ne redirige pas, on assume le nouveau contexte (si possible) if ($url_propre = $GLOBALS['_SERVER']['REDIRECT_url_propre'] OR $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre'] - AND preg_match(',^(article|breve|rubrique|mot|auteur)$,', $fond)) { + AND preg_match(',^(article|breve|rubrique|mot|auteur|site)$,', $fond)) { $url_propre = preg_replace('/^[_+-]{0,2}(.*?)[_+-]{0,2}(\.html)?$/', '$1', $url_propre); - if ($r = spip_query("SELECT id_$fond AS id FROM spip_".$fond."s + if ($r = spip_query("SELECT ".id_table_objet($fond)." AS id + FROM spip_".table_objet($fond)." WHERE url_propre = '".addslashes($url_propre)."'") AND $t = spip_fetch_array($r)) - $contexte["id_$fond"] = $t['id']; + $contexte[id_table_objet($fond)] = $t['id']; } /* Fin du bloc compatibilite url-propres */ diff --git a/spip_redirect.php3 b/spip_redirect.php3 index caba9f4b6b..9c885375b1 100644 --- a/spip_redirect.php3 +++ b/spip_redirect.php3 @@ -42,6 +42,9 @@ else if ($id_mot) { else if ($id_auteur) { $url = generer_url_auteur($id_auteur); } +else if ($id_syndic OR $id_syndic = $id_site) { + $url = generer_url_site($id_syndic); +} else { $url = _DIR_RESTREINT_ABS; } -- GitLab