From 42b8f6d92de185ebcaab191f63f91cef866b13c7 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 16 Jan 2006 14:29:43 +0000
Subject: [PATCH] replacement de ecrire/iframe_action.php par
 ./sip_action?action=instituer, pour changer le statut de qqch de manire plus
 rapide (pas de chargement de preferences) et plus sure (controle l'action,
 plutot que le demandeur qui n'etait d'ailleurs pas toujours bien controle)

---
 .gitattributes                       |   1 +
 ecrire/inc_articles.php              |  22 -----
 ecrire/inc_breves.php                |  19 -----
 ecrire/inc_forum.php3                |  14 ++--
 ecrire/inc_forum_admin.php           |  46 -----------
 ecrire/inc_minipres.php              |  26 ------
 ecrire/inc_presentation.php3         |   6 +-
 ecrire/inc_session.php3              |   9 +-
 ecrire/inc_spip_action_instituer.php | 118 +++++++++++++++++++++++++++
 ecrire/inc_upgrade.php               |   5 +-
 10 files changed, 137 insertions(+), 129 deletions(-)
 create mode 100644 ecrire/inc_spip_action_instituer.php

diff --git a/.gitattributes b/.gitattributes
index c7fe1fea62..0e2ac8d53d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -319,6 +319,7 @@ ecrire/inc_sites_tous.php -text
 ecrire/inc_spip_action_autoriser.php -text
 ecrire/inc_spip_action_ical.php -text
 ecrire/inc_spip_action_iconifier.php -text
+ecrire/inc_spip_action_instituer.php -text
 ecrire/inc_spip_action_joindre.php -text
 ecrire/inc_spip_action_purger.php -text
 ecrire/inc_spip_action_redirect.php -text
diff --git a/ecrire/inc_articles.php b/ecrire/inc_articles.php
index aa3de94da7..07b6961d76 100644
--- a/ecrire/inc_articles.php
+++ b/ecrire/inc_articles.php
@@ -506,28 +506,6 @@ function   comparer_statut_articles($id_article, $statut_nouv, $statut_article,
 	return $ok_nouveau_statut ;
 }
 
-function changer_statut_articles($id_article, $statut)
-{
-	global $connect_toutes_rubriques;
-
-	$id_article = intval($id_article);
-	$result = spip_query("SELECT statut,id_rubrique FROM spip_articles WHERE id_article=$id_article");
-
-	if ($row = spip_fetch_array($result)) {
-		$id_rubrique= $row['id_rubrique'];
-		$statut_ancien = $row['statut'];
-		}
-
-	if (($statut != $statut_ancien) AND 
-	    ($connect_toutes_rubriques OR acces_rubrique($id_rubrique))) {
-		spip_query("UPDATE spip_articles SET statut='$statut', date=NOW() WHERE id_article=$id_article");			
-		include_ecrire("inc_rubriques");
-		include_ecrire('inc_texte');
-		calculer_rubriques();
-
-		cron_articles($id_article, $statut, $statut_ancien);
-	}
-}
 
 function cron_articles($id_article, $statut, $statut_ancien)
 {
diff --git a/ecrire/inc_breves.php b/ecrire/inc_breves.php
index d105659462..73cea0c188 100644
--- a/ecrire/inc_breves.php
+++ b/ecrire/inc_breves.php
@@ -49,25 +49,6 @@ function enfant_breves($leparent){
 	}
 }
 
-function changer_statut_breves($id_breve, $statut)
-{
-	$id_breve = intval($id_breve);
-	$query = "SELECT statut FROM spip_breves WHERE id_breve=$id_breve";
-	$result = spip_query($query);
-	if ($row = spip_fetch_array($result)) {
-		$id_rubrique= $row['id_rubrique'];
-		$statut_ancien = $row['statut'];
-		}
-
-	if (($statut != $statut_ancien) AND 
-	    ($connect_toutes_rubriques OR acces_rubrique($id_rubrique))) {
-		spip_query("UPDATE spip_breves SET date_heure=NOW(), statut='$statut' WHERE id_breve=$id_breve");
-
-		include_ecrire("inc_rubriques");
-		calculer_rubriques();
-	}
-}
-
 function breves_dist()
 {
 	global $connect_statut,$id_breve, $statut, $id_rubrique;
diff --git a/ecrire/inc_forum.php3 b/ecrire/inc_forum.php3
index 1fc4e7b5a7..65e7ab7853 100644
--- a/ecrire/inc_forum.php3
+++ b/ecrire/inc_forum.php3
@@ -85,25 +85,23 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref
 	}
 
 	$link = new Link();
-	$link = $link->geturl() . "#id$id_forum";
-	$ulink = urlencode($link);
+	$link = _DIR_RESTREINT_ABS . $link->geturl() . "#id$id_forum";
 
 	if ($supprimer)
-		$controle .= icone(_T('icone_supprimer_message'), generer_url_ecrire('iframe_action', "action=forum_admin&id=$id_forum&statut=$supprimer&redirect=$ulink"),
+	  $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer', "forum $id_forum $supprimer", $link),
 			$logo,
 			"supprimer.gif", 'right', 'non');
 
 	if ($valider)
-		$controle .= icone(_T('icone_valider_message'), generer_url_ecrire('iframe_action', "action=forum_admin&id=$id_forum&statut=$valider&redirect=$ulink"),
+		$controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer', "forum $id_forum $valider", $link),
 			$logo,
 			"creer.gif", 'right', 'non');
 
 	if ($valider_repondre) {
 
-	  $redirect =  urlencode(generer_url_public('forum', "$ref&id_forum=$id_forum&retour=" . urlencode(_DIR_RESTREINT_ABS . $link), true));
-	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_url_ecrire('iframe_action', "action=forum_admin&id=$id_forum&statut=$valider&redirect=$redirect"),
-				   $logo,
-				   "creer.gif", 'right', 'non');
+	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer', "forum $id_forum $valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=" . urlencode($link), true)),
+			     $logo,
+			     "creer.gif", 'right', 'non');
 	}
 
 	return $controle;
diff --git a/ecrire/inc_forum_admin.php b/ecrire/inc_forum_admin.php
index e40ca06b94..c2a7950aaa 100644
--- a/ecrire/inc_forum_admin.php
+++ b/ecrire/inc_forum_admin.php
@@ -90,50 +90,4 @@ function forum_admin_dist()
 
   fin_page();
 }
-
-
-//
-// Suppression de forums 
-//
-
-# fonction invoquee par calcul dans iframe_action
-# Elle n'a rien a faire ici en fait, et devra migrer en inc_forum
-# quand on abandonnera les .php 3
-
-function changer_statut_forum_admin($id_forum, $statut) {
-	$id_forum = intval($id_forum);
-	$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');
-	include_ecrire('inc_forum');
-	$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');
-		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'];
-	}
-}
-
 ?>
diff --git a/ecrire/inc_minipres.php b/ecrire/inc_minipres.php
index a7736661ed..00e6bf8d5d 100644
--- a/ecrire/inc_minipres.php
+++ b/ecrire/inc_minipres.php
@@ -110,32 +110,6 @@ function info_dist() {
 	if ($connect_statut == '0minirezo') phpinfo();
 }
 
-
-// normalement il faudrait definir inc_iframe_action.php, mais pour mettre juste ca:
-
-function iframe_action_dist()
-{
-	global $connect_statut, $id, $action, $statut, $redirect;
-	if ($id && ($connect_statut == "0minirezo")) {
-
-		$var_f = find_in_path('inc_' . $action);
-		if ($var_f) 
-		  include($var_f);
-		else
-		  include_ecrire('inc_' . $action);
-
-		$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));
-}
-
 // Afficher le bouton "preview" dans l'espace public
 function afficher_bouton_preview() {
 		$x = _T('previsualisation');
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 71c88caf87..d8fa1e72e6 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -672,7 +672,7 @@ function afficher_script_statut($id, $type, $n, $img, $statut, $title, $act)
   return http_href_img("javascript:selec_statut('$id', '$type', -1, '" .
 		      _DIR_IMG_PACK . $img .
 		      "', '" .
-		       generer_url_ecrire('iframe_action', "action=$type"."s&id=$id&statut=$statut",false,true) .
+		       generer_action_auteur('instituer', "$type $id $statut") .
 		      "');",
 		      $img,
 			"title=\"".$title."\"",
@@ -3259,8 +3259,8 @@ function debloquer_article($arg, $texte)
 {
 	$lien = new Link;
 	$lien->addVar('debloquer_article', $arg);
-	$lien = urlencode($lien->getUrl());
-	return "<a href='" . generer_url_ecrire('iframe_action', "action=articles_page&id=$arg&redirect=$lien") .
+	$lien = (_DIR_RESTREINT_ABS . $lien->getUrl());
+	return "<a href='" . generer_action_auteur('instituer', "collaboration $arg", $lien) .
 	  "' title='" .
 	  addslashes($texte) .
 	  "'>$texte&nbsp;" .
diff --git a/ecrire/inc_session.php3 b/ecrire/inc_session.php3
index 265465a1d5..37d8bcf96e 100644
--- a/ecrire/inc_session.php3
+++ b/ecrire/inc_session.php3
@@ -10,7 +10,7 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-//
+
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_ecrire ("inc_meta");
@@ -279,4 +279,11 @@ function verifier_action_auteur($action, $valeur, $id_auteur = 0) {
 	return false;
 }
 
+function generer_action_auteur($action, $arg, $redirect="", $no_entites=false)
+{
+	global $connect_id_auteur;
+	$hash = calculer_action_auteur("$action $arg");
+	if ($redirect) $redirect = "&redirect=" . urlencode($redirect);
+	return generer_url_public("spip_action.php", "action=$action&arg=$arg&id_auteur=$connect_id_auteur&hash=$hash$redirect", $no_entites);
+}
 ?>
diff --git a/ecrire/inc_spip_action_instituer.php b/ecrire/inc_spip_action_instituer.php
new file mode 100644
index 0000000000..60afeddcc2
--- /dev/null
+++ b/ecrire/inc_spip_action_instituer.php
@@ -0,0 +1,118 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_ecrire("inc_session");
+
+function spip_action_instituer_dist()
+{
+	global $arg, $action, $hash, $id_auteur;
+
+  if (!verifier_action_auteur("$action $arg", $hash, $id_auteur))
+	spip_log("spip_action: $action $arg interdit a $id_auteur");
+  else {
+    ereg("^([^ ]*) (.*)$", $arg, $r);
+    $var_nom = 'instituer_' . $r[1];
+    if (function_exists($var_nom))
+      $var_nom($r[2]);
+    else spip_log("spip_action_$action: $arg incompris");
+  }
+}
+
+function instituer_collaboration($debloquer_article)
+{
+        global $id_auteur;
+        if ($debloquer_article) {
+                if ($debloquer_article <> 'tous')
+                        $where_id = "AND id_article=".intval($debloquer_article);
+                $query = "UPDATE spip_articles SET auteur_modif='0' WHERE auteur_modif=$id_auteur $where_id";
+                spip_query ($query);
+        }
+}
+
+function instituer_forum($arg) {
+	list($id_forum, $statut) = split(' ', $arg);
+	$id_forum = intval($id_forum);
+	$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');
+	include_ecrire('inc_forum');
+	$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');
+		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 instituer_article($arg)
+{	list($id_article, $statut) = split(' ', $arg);
+
+	$id_article = intval($id_article);
+	$result = spip_query("SELECT statut FROM spip_articles WHERE id_article=$id_article");
+
+	if ($row = spip_fetch_array($result)) {
+		$statut_ancien = $row['statut'];
+		}
+
+	if ($statut != $statut_ancien) {
+		spip_query("UPDATE spip_articles SET statut='$statut', date=NOW() WHERE id_article=$id_article");			
+		include_ecrire("inc_rubriques");
+		include_ecrire('inc_texte');
+		calculer_rubriques();
+
+		cron_articles($id_article, $statut, $statut_ancien);
+	}
+}
+
+
+function instituer_breve($arg)
+{	list($id_breve, $statut) = split(' ', $arg);
+
+	$id_breve = intval($id_breve);
+	$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) {
+		spip_query("UPDATE spip_breves SET date_heure=NOW(), statut='$statut' WHERE id_breve=$id_breve");
+
+		include_ecrire("inc_rubriques");
+		calculer_rubriques();
+	}
+}
+?>
diff --git a/ecrire/inc_upgrade.php b/ecrire/inc_upgrade.php
index c6cb583ce9..699cf27592 100644
--- a/ecrire/inc_upgrade.php
+++ b/ecrire/inc_upgrade.php
@@ -82,10 +82,7 @@ function upgrade_dist()
   fin_admin($upgrade_titre);
 
   if ($ok) {
-	$action = 'purger';
-	$arg = 'cache';
-	$hash = calculer_action_auteur("$action $arg");
-	redirige_par_entete(generer_url_public("spip_action.php"), "?action=$action&id_auteur=$connect_id_auteur&hash=$hash&redirect=" .  _DIR_RESTREINT_ABS);
+	redirige_par_entete(generer_action_auteur('purger', 'cache', _DIR_RESTREINT_ABS, true));
   }
   else {
 	echo _T('alerte_maj_impossible', array('version' => $spip_version));
-- 
GitLab