Valider 5375c701 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

On commence à s'insérer dans le formulaire d'ajout de documents de SPIP.

Ça permet de valider le concept.

Et ça necessite qu'on puisse se brancher avant 'verifier' pour remplir $_FILES
avant l'action prévue par le formulaire d'origine.
J'ai ajouté un pipeline 'pre_veriifer' pour l'instant. On verra par la suite.

Il y a quelques soucis avec la recréation de $_FILES actuellement.
Il serait bien de savoir si le champ est unique ou multiple pour recréer $_FILES[champ].
parent 0668cf02
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -214,7 +214,6 @@ plusieurs entrées pour chaque clés :
    )



## Todo

### JS
+91 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -91,6 +91,9 @@ function bigup_get_bigup($flux) {
 * @return array
**/
function bigup_formulaire_charger($flux) {
	if (in_array($flux['args']['form'], ['joindre_document'])) {
		$flux['data']['_rechercher_uploads'] = true;
	}

	if (empty($flux['data']['_rechercher_uploads'])) {
		return $flux;
@@ -101,9 +104,31 @@ function bigup_formulaire_charger($flux) {
		$flux['data']['_fichiers'] = $fichiers;
	}

	if (empty($flux['data']['_hidden'])) {
		$flux['data']['_hidden'] = '';
	}
	$flux['data']['_hidden'] .= '<input type="hidden" name="bigup_retrouver_fichiers" value="1" />';

	return $flux;
}

/**
 * Branchement avant vérifications
 *
 * On remet $_FILES avec les fichiers présents pour ce formulaire,
 * et avant que la fonction verifier native du formulaire soit utilisée,
 * de sorte qu'elle ait accès à $_FILES rempli.
 *
 * @param array $flux
 * @return array
 */
function bigup_formulaire_pre_verifier($flux) {
	if (_request('bigup_retrouver_fichiers')) {
		$bigup = bigup_get_bigup($flux);
		$bigup->reinserer_fichiers();
	}
	return $flux;
}

/**
 * Branchement sur verifier
@@ -129,3 +154,69 @@ function bigup_formulaire_verifier($flux) {

	return $flux;
}


/**
 * Utiliser Bigup sur le formulaire d'ajout de documents du plugin Medias
 *
 * @param array $flux
 * @return array
 **/
function bigup_formulaire_fond($flux) {
	if (in_array($flux['args']['form'], ['joindre_document'])) {
		$flux['data'] = bigup_inserer_classe_css($flux['data'], 'fichier_upload', $flux['args']['contexte']);
	}
	return $flux;
}

/**
 * Ajouter la classe CSS bigup sur certains champs input files d'un formulaire
 *
 * @param string $formulaire
 *     Contenu du formulaire
 * @param string|string[] $champs
 *     Nom du ou des champs concernés
 * @param array $contexte
 *     Le contexte doit fournir au moins 'form' et 'formulaire_args'
 */
function bigup_inserer_classe_css($formulaire, $champs, $contexte) {
	if (!$champs) {
		return $formulaire;
	}
	if (!is_array($champs)) {
		$champs = [$champs];
	}

	if (empty($contexte['form']) or empty($contexte['formulaire_args'])) {
		return $formulaire;
	}

	include_spip('bigup_fonctions');
	$bigup_class = 'bigup';

	foreach ($champs as $champ) {
		$regexp = '#<input(?:[^>]*)name\s*=\s*[\"\']{1}' . $champ . '(?:\[\])?[\"\']{1}(?:[^>]*)/>#Uims';
		if (preg_match($regexp, $formulaire, $regs)) {
			$input = $new = $regs[0];

			$new = str_replace('class="', 'class="' . $bigup_class . ' ', $new);
			$new = str_replace('class=\'', 'class=\'' . $bigup_class . ' ', $new);

			$token = calculer_balise_BIGUP_TOKEN($champ, $contexte['form'], $contexte['formulaire_args']);
			$new = str_replace('/>', ' data-token="' . $token . '" />', $new);

			$fichiers = '';
			if (!empty($contexte['_fichiers'][$champ])) {
				$fichiers = recuperer_fond(
					'saisies/inc-bigup_liste_fichiers',
					array(
						'nom' => $champ,
						'fichiers' => $contexte['_fichiers'][$champ]
					)
				);
			}
			$formulaire = str_replace($input, $fichiers . $new, $formulaire);
		}
	}
	return $formulaire;
}
 No newline at end of file
+1 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -557,6 +557,7 @@ class Bigup {
			'tmp_name' => $chemin,
			'size' => filesize($chemin),
			'type' => finfo_file($finfo, $chemin),
			'error' => 0, // hum
		];
		return $desc;
	}
+11 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -31,13 +31,23 @@ $.fn.bigup = function() {
			return valeur ? valeur : defaut;
		}

		// Enlève une arcre sur une URL
		var enlever_ancre = function(url) {
			p = url.indexOf('#');
			if (p!=-1) {
				ancre = url.substring(p);
				url = url.substring(0,p);
			}
			return url;
		}

		var bigup = new Bigup(
			{
				form: $form,
				input: $input,
				formulaire_action: $form.find('input[name=formulaire_action]').val(),
				formulaire_action_args: $form.find('input[name=formulaire_action_args]').val(),
				target: $form.attr('action'),
				target: enlever_ancre($form.attr('action')),
				token: $input.data('token'),
				name: $input.attr('name').replace(/\\[\\]$/, ""), // Note : \[\] est déjà un échappement SPIP !
				multiple: multiple,
+2 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,6 +24,8 @@
	<pipeline nom="insert_head_css" inclure="bigup_pipelines.php" />
	<pipeline nom="jquery_plugins" inclure="bigup_pipelines.php" />
	<pipeline nom="formulaire_charger" inclure="bigup_pipelines.php" />
	<pipeline nom="formulaire_fond" inclure="bigup_pipelines.php" />
	<pipeline nom="formulaire_pre_verifier" inclure="bigup_pipelines.php" />
	<pipeline nom="formulaire_verifier" inclure="bigup_pipelines.php" />

	<necessite nom="saisies"  compatibilite="[2.5.0;]" />
Chargement en cours