From 4ef25a1ef8e6c6ff9aa0de276451e496b3deda31 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Fri, 4 Feb 2011 23:12:30 +0000
Subject: [PATCH] report de r44142 generaliser le cas derogatoire du
 mode=vignette pour permettre a des plugins d'ajouter des documents avec
 d'autres modes Il suffit de fournir une fonction surchargeable
 inc_verifier_document_mode_xxx_dist() pour que celle ci soit appelee au
 chargement d'un document dans le mode xxx

---
 .gitattributes                          |  1 +
 action/ajouter_documents.php            | 16 +++++-----------
 inc/verifier_document_mode_vignette.php | 24 ++++++++++++++++++++++++
 plugin.xml                              |  2 +-
 4 files changed, 31 insertions(+), 12 deletions(-)
 create mode 100644 inc/verifier_document_mode_vignette.php

diff --git a/.gitattributes b/.gitattributes
index ef6d1803..96d2cd57 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -59,6 +59,7 @@ inc/getdocument.php -text
 inc/joindre_document.php -text
 inc/marquer_doublons_doc.php -text
 inc/renseigner_document.php -text
+inc/verifier_document_mode_vignette.php -text
 inc/vignette.php -text
 javascript/jquery.MultiFile.js -text
 javascript/medias_edit.js -text
diff --git a/action/ajouter_documents.php b/action/ajouter_documents.php
index 4b01e12f..1fc398dd 100644
--- a/action/ajouter_documents.php
+++ b/action/ajouter_documents.php
@@ -91,7 +91,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
 	$mode = ((isset($file['mode']) AND $file['mode'])?$file['mode']:$mode);
 
 	include_spip('inc/modifier');
-	if (isset($file['distant']) AND $file['distant'] AND $mode=='vignette') {
+	if (isset($file['distant']) AND $file['distant'] AND !in_array($mode,array('choix','auto','image','document'))) {
 		include_spip('inc/distant');
 		$file['tmp_name'] = _DIR_RACINE . copie_locale($source);
 		$source = $file['tmp_name'];
@@ -146,7 +146,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
 		$champs = array_merge($champs,$infos);
 
 		// Si mode == 'choix', fixer le mode image/document
-		if ($mode == 'choix' OR !in_array($mode, array('vignette', 'image', 'document'))) {
+		if (in_array($mode,array('choix','auto'))) {
 			$choisir_mode_document = charger_fonction('choisir_mode_document','inc');
 			$mode = $choisir_mode_document($champs, $champs['inclus'] == 'image', $objet);
 		}
@@ -179,7 +179,6 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
 
 	include_spip('action/editer_document');
 	// Installer le document dans la base
-	// attention piege semantique : les images s'installent en mode 'vignette'
 	if (!$id_document){
 		$id_document = insert_document();
 		spip_log ("ajout du document ".$file['tmp_name']." ".$file['name']."  (M '$mode' T '$objet' L '$id_objet' D '$id_document')");
@@ -360,15 +359,10 @@ function verifier_taille_document_acceptable($infos){
 							'hauteur_vignette' => $infos['hauteur']))
 				));
 	}
-	
-	// Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
-	if ($infos['mode'] == 'vignette') {
-		if ($infos['inclus'] != 'image')
-			return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier'])); #SVG
 
-		if (!($infos['largeur'] OR $infos['hauteur']))
-			return _T('medias:erreur_upload_vignette',array('nom'=>$infos['fichier']));
-	}
+  // verifier en fonction du mode si une fonction est proposee
+	if ($verifier_document_mode = charger_fonction("verifier_document_mode_".$infos['mode'],"inc",true))
+		return $verifier_document_mode($infos);
 
 	return true;
 }
diff --git a/inc/verifier_document_mode_vignette.php b/inc/verifier_document_mode_vignette.php
new file mode 100644
index 00000000..83176528
--- /dev/null
+++ b/inc/verifier_document_mode_vignette.php
@@ -0,0 +1,24 @@
+<?php
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2010                                                *
+ *  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;
+
+function inc_verifier_document_mode_vignette_dist($infos){
+
+	// Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
+	if ($infos['inclus'] != 'image')
+		return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier'])); #SVG
+
+	if (!($infos['largeur'] OR $infos['hauteur']))
+		return _T('medias:erreur_upload_vignette',array('nom'=>$infos['fichier']));
+
+	return true;
+}
\ No newline at end of file
diff --git a/plugin.xml b/plugin.xml
index 82ca0d92..40d3ac89 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -2,7 +2,7 @@
 	<nom>Medias</nom>
 	<auteur>Collectif SPIP, Cedric Morin &amp; Romy Duhem-Verdiere pour la mediatheque</auteur>
 	<icon>images/portfolio-64.png</icon>
-	<version>1.6.0</version>
+	<version>2.0.0</version>
 	<version_base>0.11.0</version_base>
 	<etat>dev</etat>
 	<description>Gestion des medias de SPIP</description>
-- 
GitLab