Valider 2d900540 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Ajouter pleine_largeur sur les champs input du formulaire d'ajout de document, c'est plus joli.

PHPDoc également un peu.
parent 562ace02
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+60 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -180,8 +180,21 @@ function bigup_medias_formulaire_fond($flux) {
}

/**
 * Sur certains champs input files d'un formulaire, ajouter le token, les fichiers déjà présents
 * et la classe css bigup.
 * Préparer les champs input d'un formulaire déjà existant
 *
 * Permet d'ajouter à un ou plusieurs champs de type 'file' d'un formulaire
 * dont on reçoit le code HTML et le contexte les éléments nécessaires
 * pour utiliser Bigup dessus.
 *
 * Pour les noms de champs indiqués, on ajoute :
 *
 * - la classe CSS 'bigup'
 * - le token
 * - l'attribut multiple, si le name se termine par `[]`
 * - la liste des fichiers déjà uploadés pour ce formulaire
 * - la classe CSS 'pleine_largeur' sur le conteneur .editer.
 *
 * Le tableau d'option permet de modifier certains comportements.
 *
 * @param string $formulaire
 *     Contenu du formulaire
@@ -189,10 +202,18 @@ function bigup_medias_formulaire_fond($flux) {
 *     Nom du ou des champs concernés
 * @param array $contexte
 *     Le contexte doit fournir au moins 'form' et 'formulaire_args'
 * @param string $input_class
 *     Classe CSS à ajouter aux input file concernés
 * @param string $options {
 *     @var string $input_class
 *         Classe CSS à ajouter aux input file concernés.
 *         Par défaut 'bigup'
 *     @var string $editer_class
 *         Classe CSS à ajouter au conteneur .editer
 *         Par défaut 'pleine_largeur'
 * }
 * @return string
 *     Contenu du formulaire modifié
 */
function bigup_preparer_input_file($formulaire, $champs, $contexte, $input_class = 'bigup') {
function bigup_preparer_input_file($formulaire, $champs, $contexte, $options = []) {
	if (!$champs) {
		return $formulaire;
	}
@@ -204,6 +225,12 @@ function bigup_preparer_input_file($formulaire, $champs, $contexte, $input_class
		return $formulaire;
	}

	// Intégrer les options par défaut.
	$options = $options + [
		'input_class' => 'bigup',
		'editer_class' => 'pleine_largeur',
	];

	include_spip('bigup_fonctions');

	foreach ($champs as $champ) {
@@ -223,8 +250,10 @@ function bigup_preparer_input_file($formulaire, $champs, $contexte, $input_class
			$input = $new = $regs[0];

			// Ajouter la classe CSS demandée
			$new = str_replace('class="', 'class="' . $input_class . ' ', $new);
			$new = str_replace('class=\'', 'class=\'' . $input_class . ' ', $new);
			if ($options['input_class']) {
				$new = str_replace('class="', 'class="' . $options['input_class'] . ' ', $new);
				$new = str_replace('class=\'', 'class=\'' . $options['input_class'] . ' ', $new);
			}

			// Ajouter le token
			$token = calculer_balise_BIGUP_TOKEN($champ, $contexte['form'], $contexte['formulaire_args']);
@@ -247,6 +276,30 @@ function bigup_preparer_input_file($formulaire, $champs, $contexte, $input_class
				);
			}
			$formulaire = str_replace($input, $fichiers . $new, $formulaire);

			// Ajouter une classe sur le conteneur
			if ($options['editer_class']) {
				// <div class="editer editer_{champ}" mais pas "editer editer_{champ}_qqc"
				$regexp =
					'#<div '
					. '(?:[^>]*)'                  // du contenu sans >
					. 'class\s*=\s*[\"\']{1}'      // class=" ou class='
					. '(?:[^\"\']*)'               // pas de ' ou "
					. 'editer editer_' . $champ
					. '(?:(\s+[^\"\']*)?)'         // (espace suivi de pas de ' ou ")
					. '[\"\']{1}'                  // " ou '
					. '#Uims';

				if (preg_match($regexp, $formulaire, $regs)) {
					$div = $new = $regs[0];
					$new = str_replace(
						'editer editer_' . $champ,
						'editer editer_' . $champ . ' ' . $options['editer_class'],
						$new
					);
					$formulaire = str_replace($div, $new, $formulaire);
				}
			}
		}
	}
	return $formulaire;