From 80cfdf992fc0c4fe882b73f62584a01dfd226511 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Mon, 8 May 2017 07:33:08 +0000
Subject: [PATCH] Suite de r104308 et r104309 : on retablit le fonctionnement
 iso de inc-upload_document.html qui determine lui meme avec son env les
 methodes d'upload via filtre medias_lister_methodes_upload et pipeline
 medias_methodes_upload Ainsi on conserve la compat complete avec les versions
 anterieures de SPIP, tout en beneficiant de l'extensibilite des methodes
 d'upload

---
 formulaires/illustrer_document.php   | 11 ---------
 formulaires/inc-upload_document.html |  7 +++---
 formulaires/joindre_document.php     | 17 -------------
 medias_fonctions.php                 | 36 ++++++++++++++++++++++++++++
 4 files changed, 40 insertions(+), 31 deletions(-)

diff --git a/formulaires/illustrer_document.php b/formulaires/illustrer_document.php
index fa9e407c..c45a7198 100644
--- a/formulaires/illustrer_document.php
+++ b/formulaires/illustrer_document.php
@@ -31,17 +31,6 @@ function formulaires_illustrer_document_charger_dist($id_document) {
 	$valeurs['id_vignette'] = $vignette['id_document'];
 	$valeurs['_pipeline'] = array('editer_contenu_objet', array('type' => 'illustrer_document', 'id' => $id_document));
 
-	// méthodes d'upload disponibles
-	$valeurs['_methodes_upload'] = array();
-	$valeurs['_methodes_upload']['upload'] = array('label_lien'=>_T('medias:bouton_download_local'),'label_bouton'=>_T('bouton_upload'));
-	$valeurs['_methodes_upload']['distant'] = array('label_lien'=>_T('medias:bouton_download_sur_le_web'),'label_bouton'=>_T('bouton_choisir'));
-
-	// pipeline pour les méthodes d'upload
-	$valeurs['_methodes_upload'] = pipeline('medias_methodes_upload', array(
-		'args' => array('objet' => 'document', 'id_objet' => $id_document),
-		'data' => $valeurs['_methodes_upload']
-	));
-
 	return $valeurs;
 }
 
diff --git a/formulaires/inc-upload_document.html b/formulaires/inc-upload_document.html
index 13c9e3bf..66ad5345 100644
--- a/formulaires/inc-upload_document.html
+++ b/formulaires/inc-upload_document.html
@@ -6,9 +6,10 @@
 [(#ENV{joindre_distant}|oui)#SET{methode,distant}]
 [(#ENV{joindre_ftp}|oui)#SET{methode,ftp}]
 
-<div id="defaultsubmit#GET{domid}" class="none">DEFAULT</div>
+#SET{methodes_upload,#ENV**|medias_lister_methodes_upload}
 
-<BOUCLE_methodes(DATA){source tableau,#ENV{_methodes_upload}}>
+<div id="defaultsubmit#GET{domid}" class="none">DEFAULT</div>
+<BOUCLE_methodes(DATA){source tableau,#GET{methodes_upload}}>
 	#SET{methode_upload,#CLE}
 	<div class='joindre_mode#GET{domid}[(#GET{methode}|=={#CLE}|non)none-js]' id='joindre_#CLE#GET{domid}'>
 
@@ -17,7 +18,7 @@
 		<div class='sourceup'>
 			[(#SET{cpt,1})]
 			<:medias:bouton_download_depuis:>
-			<BOUCLE_methodes_liens(DATA){source tableau,#ENV{_methodes_upload}}>
+			<BOUCLE_methodes_liens(DATA){source tableau,#GET{methodes_upload}}>
 				[(#GET{cpt}|>{1}|oui)
 					[(#VAL{'|'})]
 				]
diff --git a/formulaires/joindre_document.php b/formulaires/joindre_document.php
index 95c76faa..caa48cac 100644
--- a/formulaires/joindre_document.php
+++ b/formulaires/joindre_document.php
@@ -83,23 +83,6 @@ function formulaires_joindre_document_charger_dist(
 	$valeurs = array();
 	$mode = joindre_determiner_mode($mode, $id_document, $objet);
 
-	// méthodes d'upload disponibles
-	$valeurs['_methodes_upload'] = array();
-	$valeurs['_methodes_upload']['upload'] = array('label_lien'=>_T('medias:bouton_download_local'),'label_bouton'=>_T('bouton_upload'));
-	if($proposer_media && !empty($objet) && $id_objet != 0){
-		$valeurs['_methodes_upload']['mediatheque'] = array('label_lien'=>_T('medias:bouton_download_par_mediatheque'),'label_bouton'=>_T('medias:bouton_attacher_document'));
-	}
-	if($proposer_ftp) {
-		$valeurs['_methodes_upload']['ftp'] = array('label_lien'=>_T('medias:bouton_download_par_ftp'),'label_bouton'=>_T('bouton_choisir'));
-	}
-	$valeurs['_methodes_upload']['distant'] = array('label_lien'=>_T('medias:bouton_download_sur_le_web'),'label_bouton'=>_T('bouton_choisir'));
-
-
-	// pipeline pour les méthodes d'upload
-	$valeurs['_methodes_upload'] = pipeline('medias_methodes_upload', array(
-		'args' => array('objet' => $objet, 'id_objet' => $id_objet), 
-		'data' => $valeurs['_methodes_upload']
-	));
 
 	$valeurs['id'] = $id_document;
 	$valeurs['_mode'] = $mode;
diff --git a/medias_fonctions.php b/medias_fonctions.php
index e2b69850..6710704c 100644
--- a/medias_fonctions.php
+++ b/medias_fonctions.php
@@ -284,3 +284,39 @@ function filtre_vignette_dist($extension = 'defaut', $get_chemin = false) {
 	// retourne une balise <img ... />
 	return $balise_img($fichier);
 }
+
+/**
+ * Determiner les methodes upload en fonction du env de inc-upload_document
+ *
+ * @param string|array $env
+ * @return array
+ */
+function medias_lister_methodes_upload($env) {
+	if (is_string($env)) {
+		$env = unserialize($env);
+	}
+
+	$methodes = array();
+	// méthodes d'upload disponibles
+	$methodes = array();
+	$methodes['upload'] = array('label_lien'=>_T('medias:bouton_download_local'),'label_bouton'=>_T('bouton_upload'));
+
+	if((isset($env['mediatheque']) and $env['mediatheque'])){
+		$methodes['mediatheque'] = array('label_lien'=>_T('medias:bouton_download_par_mediatheque'),'label_bouton'=>_T('medias:bouton_attacher_document'));
+	}
+	
+	if((isset($env['proposer_ftp']) and $env['proposer_ftp'])){
+		$methodes['ftp'] = array('label_lien'=>_T('medias:bouton_download_par_ftp'),'label_bouton'=>_T('bouton_choisir'));
+	}
+	$methodes['distant'] = array('label_lien'=>_T('medias:bouton_download_sur_le_web'),'label_bouton'=>_T('bouton_choisir'));
+
+	// pipeline pour les méthodes d'upload
+	$methodes = pipeline('medias_methodes_upload',
+		array(
+			'args' => array('objet' => $env['objet'], 'id_objet' => $env['id_objet']),
+			'data' => $methodes
+		)
+	);
+
+	return $methodes;
+}
\ No newline at end of file
-- 
GitLab