From 4d80705bbd0f7f338387e37d0bfd3908c5deee31 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Fri, 4 Nov 2005 13:24:43 +0000 Subject: [PATCH] Menage dans la validation des forums pour : - permettre la surcharge dans les scripts ecrire/forum et ecrire/forum_admin - evacuer de inc.php le code presque jamais execute (passer par le redirect de iframe) - en profiter pour corriger le bug du chgt de statut des breves par iframe L'existence d'un script forum et d'un fichier inc_forum qui n'a rien a voir est genante (d'ailleurs le scripts aurait du s'appeler forumS.php). Je m'en suis sorti en deportant le code sur le clone forum_admin.php, et c'est forum.php qui devient la coquille vide, mais le nommage est troublant. On arrangera ca lors de l'abandon des .php3 --- ecrire/articles_forum.php3 | 3 +- ecrire/forum.php3 | 83 +------------------- ecrire/forum_admin.php3 | 19 ++++- ecrire/iframe_action.php3 | 28 ++++--- ecrire/inc.php3 | 8 -- ecrire/inc_articles.php | 1 - ecrire/inc_breves.php | 16 ++++ ecrire/inc_controle_forum.php | 4 +- ecrire/inc_forum.php3 | 143 ++++++++-------------------------- ecrire/inc_presentation.php3 | 10 +-- 10 files changed, 90 insertions(+), 225 deletions(-) diff --git a/ecrire/articles_forum.php3 b/ecrire/articles_forum.php3 index d0e1ac2501..0892eaa3f1 100644 --- a/ecrire/articles_forum.php3 +++ b/ecrire/articles_forum.php3 @@ -107,7 +107,6 @@ echo "<A HREF='articles_forum.php3?id_article=$id_article&debut=$i&page=$page'>. echo "</div>"; - $mots_cles_forums = lire_meta("mots_cles_forums"); if ($connect_statut == "0minirezo") { @@ -118,7 +117,7 @@ if ($connect_statut == "0minirezo") { AND pied.statut IN ('publie', 'off', 'prop') AND thread.id_thread=pied.id_forum GROUP BY id_thread - ORDER BY date DESC LIMIT $pack OFFSET $debut"; + ORDER BY date DESC LIMIT $debut, $pack"; $result_forum = spip_query($query_forum); afficher_forum($result_forum, $forum_retour, $id_article); } diff --git a/ecrire/forum.php3 b/ecrire/forum.php3 index 452d5eef63..d1196468fe 100644 --- a/ecrire/forum.php3 +++ b/ecrire/forum.php3 @@ -10,85 +10,6 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ - -include ("inc.php3"); - -// cette page gere les deux types de forums ; forum_admin.php3 n'est qu'une coquille vide -if ($admin=='oui') { - debut_page(_T('titre_page_forum'), "redacteurs", "privadm"); - $statutforum = 'privadm'; - $logo = "forum-admin-24.gif"; - $urlforum = 'forum_admin.php3'; -} else { - debut_page(_T('titre_forum'), "redacteurs", "forum-interne"); - $statutforum = 'privrac'; - $logo = "forum-interne-24.gif"; - $urlforum = 'forum.php3'; -} - -debut_gauche(); - - -// -// Raccourcis -// -/* - debut_raccourcis(); - // rien - fin_raccourcis(); -*/ - - -debut_droite(); - -if ($admin=='oui') - gros_titre(_T('titre_cadre_forum_administrateur')); -else - gros_titre(_T('titre_cadre_forum_interne')); - -if ($admin == 'oui' AND $connect_statut != "0minirezo") { - echo _T('avis_non_acces_page'); - exit; -} - -echo "<div class='serif2'>"; - -if (!$debut) $debut = 0; - -$query_forum = "SELECT COUNT(*) AS cnt FROM spip_forum WHERE statut='$statutforum' AND id_parent=0"; -$result_forum = spip_query($query_forum); -$total = 0; -if ($row = spip_fetch_array($result_forum)) $total = $row['cnt']; - -if ($total > 10) { - echo "<p>"; - for ($i = 0; $i < $total; $i = $i + 10){ - if ($i > 0) echo " | "; - if ($i == $debut) - echo "<FONT SIZE=3><B>$i</B></FONT>"; - else - echo "<A HREF='$urlforum?debut=$i'>$i</A>"; - } -} - - - -echo "<p><div align='center'>"; -icone (_T('icone_poster_message'), "forum_envoi.php3?statut=$statutforum&adresse_retour=$urlforum&titre_message=".urlencode(filtrer_entites(_T('texte_nouveau_message'))), $logo, "creer.gif"); -echo "</div>"; - - -echo "<P align='left'>"; - -$query_forum="SELECT * FROM spip_forum WHERE statut='$statutforum' AND id_parent=0 ORDER BY date_heure DESC LIMIT 10 OFFSET $debut"; -$result_forum=spip_query($query_forum); - -afficher_forum($result_forum,$urlforum); - -echo "</div>"; - - -fin_page(); - + // obsolete, mais assurer le service pour les vieux liens +include ("forum_admin.php3"); ?> - diff --git a/ecrire/forum_admin.php3 b/ecrire/forum_admin.php3 index 20776c0203..bc67d96ff8 100644 --- a/ecrire/forum_admin.php3 +++ b/ecrire/forum_admin.php3 @@ -10,9 +10,22 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +include ("inc.php3"); -$admin = 'oui'; -include ('forum.php3'); +// prendre $var_* comme variables pour eviter les conflits avec les http_vars -?> +$var_nom = "forum_admin"; +$var_f = find_in_path('inc_' . $var_nom . '.php'); + +if ($var_f) + include($var_f); +elseif (file_exists($var_f = (_DIR_INCLUDE . 'inc_' . $var_nom . '.php'))) + include($var_f); +if (function_exists($var_nom)) + $var_nom($debut, $admin); +elseif (function_exists($var_f = $var_nom . "_dist")) + $var_f($debut, $admin); +else + spip_log("fonction $var_nom indisponible"); +?> diff --git a/ecrire/iframe_action.php3 b/ecrire/iframe_action.php3 index 3129e262fb..b027cf4b17 100644 --- a/ecrire/iframe_action.php3 +++ b/ecrire/iframe_action.php3 @@ -13,19 +13,23 @@ include ("inc_version.php3"); include_ecrire("inc_auth.php3"); -@header("Cache-Control: no-store, no-cache, must-revalidate"); -echo ""; - if ($id && ($connect_statut == "0minirezo")) { - $nom = "inc_" . $action . ".php"; - $f = find_in_path($nom); - if ($f) - include($f); - elseif (file_exists($f = (_DIR_INCLUDE . $nom))) - include($f); - $nom = 'changer_statut_' . $action; - if (function_exists($nom)) - $nom($id, $statut); + $var_f = find_in_path('inc_' . $action . '.php'); + if ($var_f) + include($var_f); + elseif (is_readable($var_f = (_DIR_INCLUDE . 'inc_' . $action . '.php'))) + include($var_f); + else spip_log("pas de fichier $var_f"); + $var_nom = 'changer_statut_' . $action; + if (function_exists($var_nom)) + $var_nom($id, $statut); + else spip_log("fonction $var_nom indisponible dans $var_f"); } + +if (!$redirect) + header("Cache-Control: no-store, no-cache, must-revalidate"); +else + header("Location: " . urldecode($redirect)); + ?> diff --git a/ecrire/inc.php3 b/ecrire/inc.php3 index c452022c48..42d311c297 100644 --- a/ecrire/inc.php3 +++ b/ecrire/inc.php3 @@ -216,12 +216,4 @@ function tester_rubrique_vide($id_rubrique) { $cookie_admin = $_COOKIE['spip_admin']; - -// Modifs forum -if ($controle_forum AND $id_controle_forum) { - controler_statut_forum($controle_forum, $id_controle_forum); - if ($redirect) - redirige_par_entete($redirect); -} - ?> diff --git a/ecrire/inc_articles.php b/ecrire/inc_articles.php index fe93aa41eb..7893203f9a 100644 --- a/ecrire/inc_articles.php +++ b/ecrire/inc_articles.php @@ -468,7 +468,6 @@ meme_rubrique_articles($id_rubrique, $id_article, $options); function changer_statut_articles($id_article, $statut) { - spip_log("arti $id_article, $statut"); $result = spip_query("SELECT statut FROM spip_articles WHERE id_article=$id_article"); if ($row = spip_fetch_array($result)) { diff --git a/ecrire/inc_breves.php b/ecrire/inc_breves.php index ccef1583fc..a7083a5c24 100644 --- a/ecrire/inc_breves.php +++ b/ecrire/inc_breves.php @@ -42,6 +42,22 @@ function enfant_breves($leparent){ } } +function changer_statut_breves($id_breve, $statut) +{ + $query = "SELECT statut FROM spip_breves WHERE id_breve=$id_breve"; + $result = spip_query($query); + if ($row = spip_fetch_array($result)) { + $statut_ancien = $row['statut']; + } + + if ($statut != $statut_ancien) { + $query = "UPDATE spip_breves SET date_heure=NOW(), statut='$statut' WHERE id_breve=$id_breve"; + $result = spip_query($query); + + include_ecrire("inc_rubriques.php3"); + calculer_rubriques(); + } +} function breves_dist() { diff --git a/ecrire/inc_controle_forum.php b/ecrire/inc_controle_forum.php index e7e5f37dd6..e3693e57d5 100644 --- a/ecrire/inc_controle_forum.php +++ b/ecrire/inc_controle_forum.php @@ -91,14 +91,14 @@ SELECT * FROM spip_breves WHERE id_breve='$forum_id_breve'")); $retour = forum_parent($forum_id_parent); if ($retour) return $retour; else return array('pref' => _T('info_message'), - 'url' => 'forum_admin.php3', + 'url' => 'forum_admin.php3?admin=admin', 'titre' => _T('info_forum_administrateur')); } else { $retour = forum_parent($forum_id_parent); if ($retour) return $retour; else return array('pref' => _T('info_message'), - 'url' => 'forum.php3', + 'url' => 'forum_admin.php3', 'titre' => _T('info_forum_interne')); } } diff --git a/ecrire/inc_forum.php3 b/ecrire/inc_forum.php3 index e1b9abf619..50205a71aa 100644 --- a/ecrire/inc_forum.php3 +++ b/ecrire/inc_forum.php3 @@ -16,93 +16,19 @@ if (defined("_ECRIRE_INC_FORUM")) return; define("_ECRIRE_INC_FORUM", "1"); - -// -// Suppression de forums -// -function changer_statut_forum($id_forum, $statut) { - $result = spip_query("SELECT * FROM spip_forum WHERE id_forum=$id_forum"); - - if (!($row = spip_fetch_array($result))) - return; - - $id_parent = $row['id_parent']; - - // invalider les pages comportant ce forum - include_ecrire('inc_invalideur.php3'); - $index_forum = calcul_index_forum($row['id_article'], $row['id_breve'], $row['id_rubrique'], $row['id_syndic']); - suivre_invalideur("id='id_forum/$index_forum'"); - - // Signaler au moteur de recherche qu'il faut reindexer le thread - if ($id_parent) { - include_ecrire('inc_index.php3'); - marquer_indexer ('forum', $id_parent); - } - - // changer le statut de toute l'arborescence dependant de ce message - $id_messages = array($id_forum); - while ($id_messages) { - $id_messages = join(',', $id_messages); - $query_forum = "UPDATE spip_forum SET statut='$statut' - WHERE id_forum IN ($id_messages)"; - $result_forum = spip_query($query_forum); - $query_forum = "SELECT id_forum FROM spip_forum - WHERE id_parent IN ($id_messages)"; - $result_forum = spip_query($query_forum); - unset($id_messages); - while ($row = spip_fetch_array($result_forum)) - $id_messages[] = $row['id_forum']; - } -} - -function controler_statut_forum ($controle_forum, $id_controle_forum) { - // Verifier qu'on a le droit d'agir sur ce forum - global $connect_toutes_rubriques, $connect_statut; - $ok = ($connect_statut == "0minirezo" AND $connect_toutes_rubriques); - if (!$ok) return; - - // Que faut-il faire ? - switch($controle_forum) { - case 'supp_forum': - $statut = 'off'; - break; - case 'supp_forum_priv': - $statut = 'privoff'; - break; - case 'valid_forum': - $statut = 'publie'; - break; - // nb : les forums prives (privrac ou prive), une fois effaces - // (privoff), ne sont pas revalidables ; le forum d'admin (privadm) - // n'est pas effacable - } - changer_statut_forum($id_controle_forum, $statut); - return $statut; -} - -// Installer un bouton de moderation dans l'espace prive -function controle_cache_forum($action, $id, $texte, $fond, $fonction, $but='') { - $link = new Link(); - - $link->addvar('controle_forum', $action); - $link->addvar('id_controle_forum', $id); - $link = $link->geturl() . "#id$id"; - - if ($but) - $link = $but . "&retour=ecrire/" . urlencode($link); - - return icone($texte, - $link, - $fond, - $fonction, - "right", - 'non'); -} - // tous les boutons de controle d'un forum +// nb : les forums prives (privrac ou prive), une fois effaces +// (privoff), ne sont pas revalidables ; le forum d'admin (privadm) +// n'est pas effacable + function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref, $forum_ip) { $controle = ''; + $link = new Link(); + $link = $link->geturl() . "#id$id_forum"; + $ulink = urlencode($link); + $action = "iframe_action.php3?action=forum_admin&id=$id_forum"; + // selection du logo et des boutons correspondant a l'etat du forum switch ($forum_stat) { # forum sous un article dans l'espace prive @@ -110,7 +36,7 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref $logo = "forum-interne-24.gif"; $valider = false; $valider_repondre = false; - $supprimer = 'supp_forum_priv'; + $supprimer = 'privoff'; break; # forum des administrateurs case "privadmin": @@ -132,7 +58,7 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref $logo = "forum-interne-24.gif"; $valider = false; $valider_repondre = false; - $supprimer = 'supp_forum_priv'; + $supprimer = 'privoff'; break; # forum publie sur le site public @@ -140,57 +66,52 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref $logo = "forum-public-24.gif"; $valider = false; $valider_repondre = false; - $supprimer = 'supp_forum'; + $supprimer = 'off'; break; # forum supprime sur le site public case "off": $logo = "forum-public-24.gif"; - $valider = 'valid_forum'; + $valider = 'publie'; $valider_repondre = false; $supprimer = false; - $message = "<BR><FONT COLOR='red'><B>"._T('info_message_supprime')." $forum_ip</B></FONT>"; + $controle = "<br /><FONT COLOR='red'><B>"._T('info_message_supprime')." $forum_ip</B></FONT>"; if($forum_id_auteur) - $message .= " - <A HREF='auteurs_edit.php3?id_auteur=" + $controle .= " - <A HREF='auteurs_edit.php3?id_auteur=" .$forum_id_auteur."'>" ._T('lien_voir_auteur'). "</A>"; break; # forum propose (a moderer) sur le site public case "prop": $logo = "forum-public-24.gif"; - $valider = 'valid_forum'; + $valider = 'publie'; $valider_repondre = true; - $supprimer = 'supp_forum'; + $supprimer = 'off'; break; default: return; } - if ($message) - $controle .= $message; - if ($supprimer) - $controle .= controle_cache_forum($supprimer, - $id_forum, - _T('icone_supprimer_message'), + $controle .= icone(_T('icone_supprimer_message'), + $action ."&statut=$supprimer&redirect=$link", $logo, - "supprimer.gif"); + "supprimer.gif", 'right', 'non'); if ($valider) - $controle .= controle_cache_forum($valider, - $id_forum, - _T('icone_valider_message'), + $controle .= icone(_T('icone_valider_message'), + $action ."&statut=$valider&redirect=$link", $logo, - "creer.gif"); + "creer.gif", 'right', 'non'); if ($valider_repondre) { - $controle .= controle_cache_forum($valider, - $id_forum, - _T('icone_valider_message') . " & " . - _T('lien_repondre_message'), - $logo, - "creer.gif", - "../forum.php3?$ref&id_forum=$id_forum" - ); + $retour = urlencode("../forum.php3?$ref&id_forum=$id_forum&retour=" . + urlencode(_DIR_RESTREINT_ABS . $link)); + $controle .= icone(_T('icone_valider_message') + . " & " . + _T('lien_repondre_message'), + $action ."&statut=$valider&redirect=$retour", + $logo, + "creer.gif", 'right', 'non'); } return $controle; @@ -300,7 +221,7 @@ function generer_url_forum_dist($id_forum, $show_thread=false) { return generer_url_site($id)."#forum$id_forum"; break; default: - return "forum.php3?id_forum=".$id_forum; + return "forum_admin.php3?id_forum=".$id_forum; } } diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3 index a61698b373..5e7bb5b4bb 100644 --- a/ecrire/inc_presentation.php3 +++ b/ecrire/inc_presentation.php3 @@ -1619,7 +1619,7 @@ function afficher_messages($titre_table, $query_message, $afficher_auteurs = tru // Afficher les forums // -function afficher_forum($request, $adresse_retour, $controle_id_article = 0) { +function afficher_forum($request, $adresse_retour, $controle_id_article = false) { global $debut; static $compteur_forum; static $nb_forum; @@ -1740,7 +1740,7 @@ function afficher_forum($request, $adresse_retour, $controle_id_article = 0) { } // boutons de moderation - if ($controle_id_article && is_int($controle_id_article)) + if ($controle_id_article && is_numeric($controle_id_article)) echo boutons_controle_forum($id_forum, $statut, $id_auteur, "id_article=$controle_id_article", $ip); echo safehtml(justifier(propre($texte))); @@ -2375,7 +2375,7 @@ if ($spip_display == "4") { echo "<ul>"; echo "<li><a href=\"index.php3\">"._T('icone_a_suivre')."</a>"; echo "<li><a href=\"naviguer.php3\">"._T('icone_edition_site')."</a>"; - echo "<li><a href=\"forum.php3\">"._T('titre_forum')."</a>"; + echo "<li><a href=\"forum_admin.php3\">"._T('titre_forum')."</a>"; echo "<li><a href=\"auteurs.php3\">"._T('icone_auteurs')."</a>"; echo "<li><a href=\"$adresse_site/\">"._T('icone_visiter_site')."</a>"; echo "</ul>"; @@ -2397,7 +2397,7 @@ else { icone_bandeau_principal (_T('icone_a_suivre'), "index.php3", "asuivre-48.png", "asuivre", $rubrique, "", "asuivre", $sous_rubrique); icone_bandeau_principal (_T('icone_edition_site'), "naviguer.php3", "documents-48$spip_lang_rtl.png", "documents", $rubrique, "", "rubriques", $sous_rubrique); - icone_bandeau_principal (_T('titre_forum'), "forum.php3", "messagerie-48.png", "redacteurs", $rubrique, "", "forum-interne", $sous_rubrique); + icone_bandeau_principal (_T('titre_forum'), "forum_admin.php3", "messagerie-48.png", "redacteurs", $rubrique, "", "forum-interne", $sous_rubrique); icone_bandeau_principal (_T('icone_auteurs'), "auteurs.php3", "redacteurs-48.png", "auteurs", $rubrique, "", "redacteurs", $sous_rubrique); if ($connect_statut == "0minirezo" AND lire_meta("activer_statistiques") != 'non') { //bandeau_barre_verticale(); @@ -2500,7 +2500,7 @@ else { } echo "<div class='$class' id='bandeauredacteurs' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n"; - if (lire_meta('forum_prive_admin') == 'oui') icone_bandeau_secondaire (_T('icone_forum_administrateur'), "forum_admin.php3", "forum-admin-24.gif", "privadm", $sous_rubrique); + if (lire_meta('forum_prive_admin') == 'oui') icone_bandeau_secondaire (_T('icone_forum_administrateur'), "forum_admin.php3?admin=admin", "forum-admin-24.gif", "privadm", $sous_rubrique); icone_bandeau_secondaire (_T('icone_suivi_forums'), "controle_forum.php3", "suivi-forum-24.gif", "forum-controle", $sous_rubrique); icone_bandeau_secondaire (_T('icone_suivi_pettions'), "controle_petition.php3", "suivi-petition-24.gif", "suivi-petition", $sous_rubrique); -- GitLab