From f18776a2ea7ebe13d68af82c1f4afc488e783fc8 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Fri, 25 Aug 2006 22:45:38 +0000
Subject: [PATCH] API: action/editer_article se satisfait grosso modo de ce
 qu'on lui envoie : id_article+titre => il ne change que le titre ;
 id_article+id_rubrique => il ne change que la rubrique, etc. // reste a
 regler le cas des liens de traduction, qui est plein de code mort

---
 ecrire/action/editer_article.php | 72 +++++++++++++++++++-------------
 ecrire/exec/articles_edit.php    |  6 ---
 2 files changed, 43 insertions(+), 35 deletions(-)

diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php
index cc45a0b69c..ecdc6e6842 100644
--- a/ecrire/action/editer_article.php
+++ b/ecrire/action/editer_article.php
@@ -21,21 +21,14 @@ function action_editer_article_dist() {
 	$var_f();
 
 	$arg = _request('arg');
-	$lier_trad = _request('lier_trad');
-
-	// Avec l'Ajax parfois id_rubrique vaut 0... ne pas l'accepter
-	if (!$id_rubrique = intval(_request('id_parent'))) {
-		$row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 ORDER by 0+titre,titre LIMIT 1"));
-		$id_rubrique = $row['id_rubrique'];
-	}
 
 	if (!$id_article = intval($arg)) {
 		if ($arg != 'oui') redirige_par_entete('./');
-		$id_article = insert_article($id_rubrique);
+		$id_article = insert_article();
 	} 
 	  
 	// Enregistre l'envoi dans la BD
-	$err = articles_set($id_article, $id_rubrique, $lier_trad, $arg=='oui');
+	$err = articles_set($id_article, $arg=='oui', _request('lier_trad'));
 
 	$redirect = parametre_url(urldecode(_request('redirect')),
 		'id_article', $id_article, '&') . ($err ? '&trad_err=1' : '');
@@ -44,10 +37,17 @@ function action_editer_article_dist() {
 }
 
 // http://doc.spip.org/@insert_article
-function insert_article($id_rubrique)
-{
+function insert_article() {
 	include_spip('base/abstract_sql');
-	$id_auteur =  _request('id_auteur');
+	$id_auteur = _request('id_auteur');
+
+
+	// Si id_rubrique vaut 0 ou n'est pas definie, creer l'article
+	// dans la premiere rubrique racine
+	if (!$id_rubrique = intval(_request('id_parent'))) {
+		$row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 ORDER by 0+titre,titre LIMIT 1"));
+		$id_rubrique = $row['id_rubrique'];
+	}
 
 	$row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
 
@@ -63,16 +63,16 @@ function insert_article($id_rubrique)
 }
 
 // http://doc.spip.org/@articles_set
-function articles_set($id_article, $id_rubrique, $lier_trad, $new)
-{
+function articles_set($id_article, $new, $lier_trad) {
 	include_spip('inc/filtres');
 	include_spip('inc/rubriques');
 
 	// si editer_article='oui', on modifie le contenu
 	if (_request('editer_article') == 'oui') {
-		revisions_articles($id_article, $id_rubrique, $new);
+		revisions_articles($id_article, $new);
 	}
 
+	// Un lien de trad a prendre en compte
 	if ($lier_trad)
 		$err = article_referent($id_article, $lier_trad);
 
@@ -80,9 +80,8 @@ function articles_set($id_article, $id_rubrique, $lier_trad, $new)
 }
 
 // http://doc.spip.org/@revisions_articles
-function revisions_articles ($id_article, $id_rubrique, $new) {
-{
-	global $flag_revisions, $champs_extra;
+function revisions_articles ($id_article, $new) {
+	global $flag_revisions;
 
 	$id_auteur = _request('id_auteur');
 
@@ -101,6 +100,20 @@ function revisions_articles ($id_article, $id_rubrique, $new) {
 		}
 	}
 
+	// Verifier que la rubrique demandee existe et est differente
+	// de la rubrique actuelle
+	if ($id_rubrique = intval(_request('id_parent'))
+	AND spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_rubrique=$id_rubrique"))
+	AND !spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_article AND id_rubrique!=$id_rubrique"))) {
+		$champs['id_rubrique'] = $id_rubrique;
+	}
+
+	// recuperer les extras
+	if ($GLOBALS['champs_extra']) {
+		include_spip('inc/extra');
+		$champs['extra'] = extra_recup_saisie("articles", _request('id_secteur'));
+	}
+
 	// Stockage des versions : creer une premier version si non-existante
 	if (($GLOBALS['meta']["articles_versions"]=='oui') && $flag_revisions) {
 		include_spip('inc/revisions');
@@ -119,16 +132,11 @@ function revisions_articles ($id_article, $id_rubrique, $new) {
 		}
 	}
 
-	if ($champs_extra) {
-		include_spip('inc/extra');
-		$champs_extra = extra_recup_saisie("articles", _request('id_secteur'));
-	}
-
 	$update = '';
 	foreach ($champs as $champ => $val)
 		$update .= $champ . '=' . spip_abstract_quote($val).', ';
 
-	spip_query("UPDATE spip_articles SET id_rubrique=$id_rubrique, $update date_modif=NOW() " . ($champs_extra ? (", extra = " . spip_abstract_quote($champs_extra)) : '') . " WHERE id_article=$id_article");
+	spip_query("UPDATE spip_articles SET $update date_modif=NOW() WHERE id_article=$id_article");
 
 	// Stockage des versions
 	if (($GLOBALS['meta']["articles_versions"]=='oui') && $flag_revisions) {
@@ -144,9 +152,12 @@ function revisions_articles ($id_article, $id_rubrique, $new) {
 	}
 
 
-	// Changer la langue heritee
-	if ($id_rubrique != _request('id_rubrique_old')) {
+	// Si on deplace l'article
+	// - propager les secteurs
+	// - changer sa langue (si heritee)
+	if (isset($champ['id_rubrique'])) {
 		propager_les_secteurs();
+
 		$row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_articles WHERE id_article=$id_article"));
 		$langue_old = $row['lang'];
 		$langue_choisie_old = $row['langue_choisie'];
@@ -178,9 +189,12 @@ function revisions_articles ($id_article, $id_rubrique, $new) {
 		marquer_indexer('spip_articles', $id_article);
 	}
 
-	// Recalculer les rubriques (statuts et dates)
-	calculer_rubriques();
- }
+	// Recalculer les rubriques (statuts et dates) si l'on deplace
+	// un article publie
+	if ($statut == 'publie'
+	AND isset($champ['id_rubrique'])) {
+		calculer_rubriques();
+	}
 }
 
 
diff --git a/ecrire/exec/articles_edit.php b/ecrire/exec/articles_edit.php
index f4dd9c9934..cd7e3e2e34 100644
--- a/ecrire/exec/articles_edit.php
+++ b/ecrire/exec/articles_edit.php
@@ -206,8 +206,6 @@ function formulaire_articles_edit($row, $lier_trad, $new, $champs_article) {
 
 		fin_cadre_couleur(true) .
 	
-		($new ? '' : "\n<input type='hidden' name='id_rubrique_old' value='$id_rubrique'>") .
-
 		((($options == "avancees" AND $articles_descriptif) OR strlen($descriptif))?
 		 ("\n<P><B>" ._T('texte_descriptif_rapide') ."</B>" .
 		  aide ("artdesc") .
@@ -240,10 +238,6 @@ function formulaire_articles_edit($row, $lier_trad, $new, $champs_article) {
 
 		(!$champs_extra ? '': extra_saisie($extra, 'articles', $id_secteur, false)) .
 
-		(!$date ? '' : ("\n<input type='hidden' name='date' value=\"$date\" size='40'><P>")) .
-
-		(!$new ? '' : ("\n<input type='hidden' name='statut_nouv' value=\"prepa\" SIZE='40' /><p>")) .
-
 		"<div align='right'><input class='fondo' type='submit' value='" . _T('bouton_enregistrer') . "'></div>";
 
 	return
-- 
GitLab