From ba095b08359412060c79a8f29685bd73cb218367 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Fri, 15 Apr 2011 08:50:37 +0000
Subject: [PATCH] =?UTF-8?q?Unification=20de=20l'API=20editer=5Fxxx=20des?=
 =?UTF-8?q?=20objets=20:=20on=20renomme=20de=20fa=C3=A7on=20coh=C3=A9rente?=
 =?UTF-8?q?=20pour=20tous=20les=20objets=20xxx=5Finserer=20xxx=5Fmodifier?=
 =?UTF-8?q?=20xxx=5Finstituer?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Les points d'entrée de l'API sont donc
action_editer_xxx pour le traitement global d'un post
xxx_inserer et xxx_modifier pour les operations elementaires

xxx_instituer n'est pas un point d'entree et ne devrait pas etre appelee en direct : il faut passer par xxx_modifier.

Le fichier inc/modifier contenait de façon centralisee des fonctions
revision_xxx pour les objets historiques de SPIP (essentiellement utilisées par les crayons)
Cette construction centralisée n'est pas facilement extensible. On evacue donc chaque fonction dans le action/edtier_xxx de l'objet concerné, et on propose en remplacement un point d'entrée unique
revision_objet($objet,$id,$c)
qui va dispatcher vers la fonction xxx_modifier de l'objet, ou a defaut la fonction generique objet_modifier de
 action/editer_objet. Les fonctions revision_xxx sont par ailleurs dépréciées.

Les anciennes fonctions insert&set sont toujours definies et renvoie vers la fonction a nommage conventionnel, pour eviter trop de rupture de compatibilité
---
 action/ajouter_documents.php       |  2 +-
 action/copier_local.php            |  2 +-
 action/editer_document.php         | 67 ++++++++++++++++++------------
 action/supprimer_document.php      |  2 +-
 formulaires/illustrer_document.php |  2 +-
 formulaires/joindre_document.php   |  2 +-
 6 files changed, 46 insertions(+), 31 deletions(-)

diff --git a/action/ajouter_documents.php b/action/ajouter_documents.php
index 8cbf139f..6a085a53 100644
--- a/action/ajouter_documents.php
+++ b/action/ajouter_documents.php
@@ -188,7 +188,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
 	if (!$id_document)
 		return _T('medias:erreur_insertion_document_base',array('fichier'=>"<em>".$file['name']."</em>"));
 	
-	document_set($id_document,$champs);
+	document_modifier($id_document,$champs);
 
 	// permettre aux plugins de faire des modifs a l'ajout initial
 	// ex EXIF qui tourne les images si necessaire
diff --git a/action/copier_local.php b/action/copier_local.php
index ff0f6648..8c962d7e 100644
--- a/action/copier_local.php
+++ b/action/copier_local.php
@@ -68,7 +68,7 @@ function action_copier_local_post($id_document) {
 		
 		// ajouter l'origine du document aux credits
 		include_spip('action/editer_document');
-		document_set($id_document,array('credits'=>($row['credits']?$row['credits'].', ':'').$source));
+		document_modifier($id_document,array('credits'=>($row['credits']?$row['credits'].', ':'').$source));
 		return true;
 		
 	} else {
diff --git a/action/editer_document.php b/action/editer_document.php
index 3488f7bd..43b72554 100644
--- a/action/editer_document.php
+++ b/action/editer_document.php
@@ -18,34 +18,24 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
  *
  * @return unknown
  */
-function action_editer_document_dist() {
+function action_editer_document_dist($arg=null) {
 
-	$securiser_action = charger_fonction('securiser_action', 'inc');
-	$arg = $securiser_action();
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
 
 	// Envoi depuis le formulaire de creation d'un document
 	if (!$id_document = intval($arg)) {
-		$id_document = insert_document();
+		$id_document = document_inserer();
 	}
 
-	if ($id_document = intval($id_document)) {
-		document_set($id_document);
-	}
-	// Erreur
-	else{
-		include_spip('inc/headers');
-		redirige_url_ecrire();
-	}
+	if (!$id_document)
+		return array(0,''); // erreur
 
-	if (_request('redirect')) {
-		$redirect = parametre_url(urldecode(_request('redirect')),
-			'id_document', $id_document, '&');
-			
-		include_spip('inc/headers');
-		redirige_par_entete($redirect);
-	}
-	else 
-		return array($id_document,'');
+	$err = document_modifier($id_document);
+
+	return array($id_document,$err);
 }
 
 /**
@@ -53,7 +43,7 @@ function action_editer_document_dist() {
  *
  * @return unknown
  */
-function insert_document() {
+function document_inserer() {
 
 	$champs = array(
 		'statut' => 'prop',
@@ -70,7 +60,16 @@ function insert_document() {
 		)
 	);
 	$id_document = sql_insertq("spip_documents", $champs);
-	
+	pipeline('post_insertion',
+		array(
+			'args' => array(
+				'table' => 'spip_documents',
+				'id_objet' => $id_document
+			),
+			'data' => $champs
+		)
+	);
+
 	return $id_document;
 }
 
@@ -82,7 +81,7 @@ function insert_document() {
  * @param int $id_document
  * @param array $set
  */
-function document_set ($id_document, $set=false) {
+function document_modifier($id_document, $set=false) {
 
 	include_spip('inc/modifier');
 	// champs normaux
@@ -129,7 +128,7 @@ function document_set ($id_document, $set=false) {
 	// Changer le statut du document ?
 	// le statut n'est jamais fixe manuellement mais decoule de celui des objets lies
 	$champs = collecter_requests(array('parents','ajouts_parents'),array(),$set);
-	if(instituer_document($id_document,$champs)) {
+	if(document_instituer($id_document,$champs)) {
 
 		//
 		// Post-modifications
@@ -149,7 +148,7 @@ function document_set ($id_document, $set=false) {
  *
  * @param int $id_document
  */
-function instituer_document($id_document,$champs=array()){
+function document_instituer($id_document,$champs=array()){
 	
 	$statut=isset($champs['statut'])?$champs['statut']:null;
 	$date_publication = isset($champs['date_publication'])?$champs['date_publication']:null;
@@ -257,4 +256,20 @@ function medias_revision_document_parents($id_document, $parents=null, $ajout=fa
 	objet_associer(array('document'=>$id_document),$objets_parents);
 
 }
+
+
+// obsoletes
+function insert_document() {
+	return document_inserer();
+}
+function document_set($id_document, $set=false) {
+	return document_modifier($id_document, $set);
+}
+function instituer_document($id_document,$champs=array()){
+	return document_instituer($id_document,$champs);
+}
+function revision_document($id_document, $c=false) {
+	return document_modifier($id_document,$c);
+}
+
 ?>
diff --git a/action/supprimer_document.php b/action/supprimer_document.php
index c606d199..a7b8ff20 100644
--- a/action/supprimer_document.php
+++ b/action/supprimer_document.php
@@ -27,7 +27,7 @@ function action_supprimer_document_dist($id_document=0) {
 	// si c'etait une vignette, modifier le document source !
 	if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette='.intval($id_document))){
 		include_spip('action/editer_document');
-		document_set($source,array("id_vignette" => 0));
+		document_modifier($source,array("id_vignette" => 0));
 	}
 
 	include_spip('inc/documents');
diff --git a/formulaires/illustrer_document.php b/formulaires/illustrer_document.php
index 5dee1135..adcb1577 100644
--- a/formulaires/illustrer_document.php
+++ b/formulaires/illustrer_document.php
@@ -67,7 +67,7 @@ function formulaires_illustrer_document_traiter_dist($id_document){
 		if (is_int(reset($ajoute))){
 			$id_vignette = reset($ajoute);
 			include_spip('action/editer_document');
-			document_set($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
+			document_modifier($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
 			$res['message_ok'] = _T('medias:document_installe_succes');
 		}
 		else
diff --git a/formulaires/joindre_document.php b/formulaires/joindre_document.php
index e80524d2..cf40fc7a 100644
--- a/formulaires/joindre_document.php
+++ b/formulaires/joindre_document.php
@@ -153,7 +153,7 @@ function formulaires_joindre_document_traiter_dist($id_document='new',$id_objet=
 			// lier le parent en plus
 			$champs = array('ajout_parents' => array("$objet|$id_objet"));
 			include_spip('action/editer_document');
-			document_set($refdoc_joindre,$champs);
+			document_modifier($refdoc_joindre,$champs);
 			set_request('refdoc_joindre',''); // vider la saisie
 			$ancre = $refdoc_joindre;
 			$sel[] = $refdoc_joindre;
-- 
GitLab