Valider fbc15376 rédigé par Maïeul's avatar Maïeul Validation de Gitea
Parcourir les fichiers

Il existait un pipeline `formidable_affiche_resume_reponse`, utilisé

uniquement par le plugin `formidable_quizz`, actuellement non maintenu
et non publié.

Ce pipeline n'était pas générique, car le remplacement des `@@` ne
concerne pas que l'affichage résumé des réponses, mais aussi en
différent endroit (message de retour par exemple).

On créé deux pipelines plus générique :
- `formidable_pre_raccourcis_arobases`
- `formidable_post_raccourcis_arobases`

On supprime donc le pipeline `formidable_affiche_resume_reponse`.

On simplifie par ailleurs la signature de la fonction
`formidable_raccourcis_arobases_2_valeurs_champs()`.
1. En supprimant les deux derniers arguments passés par références (`$valeurs` et
`$valeurs_libellees`).
La seule raison de ce passage par référence, qui n'était utilisé sur
toute la zone que dans **UN** appel à la fonction, était précisement
de passer les valeurs libellées en arguments du pipeline `formidable_affiche_resume_reponse`. Puisqu'on supprime ce pipeline, plus besoin de ces valeurs.
2. On regroupe tout les paramètres en troisième arguments, dans
$options, tout en assurant une rétrocompatibilité (pas d'autre usage de
`formidable_raccourcis_arobases_2_valeurs_champs()` sur la zone, mais j'ai
du code perso qui l'utilise, et il n'est pas impossible que d'autres
fassent de même.
3. On ajoute une option `'contexte'` pour indiquer le contexte d'appel
de `formidable_raccourcis_arobases_2_valeurs_champs`, ce qui permet de
remplacer utilement le pipeline `formidable_affiche_resume_reponse`.
parent 0f17828a
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+13 −20
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -180,27 +180,20 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null,
	}

	$valeurs = array();
	$chaine = formidable_raccourcis_arobases_2_valeurs_champs($modele_resume, $saisies, false, '', $source = 'base', $id_formulaires_reponse, $id_formulaire, $valeurs, $valeurs_libellees);

	// Pour compatibilité historique : remplacer les clés dans $valeurs_libellees pour mettre un arobase autour
	if (is_array($valeurs_libellees)) {
		foreach ($valeurs_libellees as $cle => $val) {
			unset($valeurs_libellees[$cle]);
			$valeurs_libellees["@$cle@"] = $val;
		}
	}
	return pipeline(
		'formidable_affiche_resume_reponse',
		array(
			'args' => array(
				'id_formulaire' => $id_formulaire,
	$chaine = formidable_raccourcis_arobases_2_valeurs_champs(
		$modele_resume,
		$saisies,
		[
			'brut' => false,
			'sans_reponse' => '',
			'source' => 'base',
			'id_formulaires_reponse' => $id_formulaires_reponse,
				'modele_resume' => $modele_resume,
				'valeurs' => $valeurs_libellees,
			),
			'data' => $chaine,
		)
			'id_formulaire' => $id_formulaire,
			'contexte' => 'affiche_resumer_reponse'
		]
	);

	return $chaine;
}

/**
+5 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -466,8 +466,11 @@ function formulaires_formidable_traiter_dist($id, $valeurs = [], $options_appel
			formidable_raccourcis_arobases_2_valeurs_champs(
				wrap(trim(propre($formulaire['message_retour'])),'<div class="message_retour_defaut">'),
				$saisies,
				false,
				''
				[
					'sans_reponse' => '',
					'contexte' => 'message_retour',
					'id_formulaire' => $id_formulaire
				]
			)
		);
	}
+79 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -489,26 +489,67 @@ function formidable_scramble($login, $id_form) {
 * par la valeur saisie.
 * @param string $chaine la chaîne à transformer
 * @param array $saisies la liste des saisies du formulaire
 * @param bool|string $brut=false, pour indiquer si on veut utiliser les valeurs brutes;
 * @param string|bool $sans_reponse chaine à afficher si pas de réponse. Si true, prend la chaîne par défaut
 * @param string $source 'request' pour prendre dans _request(); 'base' pour prendre dans une réponse enregistrée en base
 * @param int|string $id_formulaires_reponse le cas échéant le numéro de réponse en base
 * @param int|string $id_formulaire le cas échéant le numéro du formulaire en base
 * @param array &$valeurs un tableau clé/valeur listant les valeurs que prenne les @. Passage par référence
 * @param array &$valeurs_libelles un tableau clé/valeur listant les valeurs libéllées que prenne les @. Passage par référence
 * @param array $options
 *	- 'brut' bool mettre à true pour indiquer si on veut utiliser les valeurs brutes;
 *  - 'sans_reponse' string indiquant la chaîne 'sans_reponse', mettre à true pour chaine par défaut
 *	- 'source' : 'request' (défaut) pour prendre dans `_request()?; 'base' pour prendre dans une réponse enregistrée en base
 *  - 'id_formulaires_reponse' : le cas échéant le numéro de réponse en base
 *  - 'id_formulaire' : le cas échéant le numéro du formulaire en base
 *  - 'contexte' : le contexte d'appel (ex. 'affiche_resume_reponse')
 * @param string|bool deprecated_sans_reponse
 * @param string deprecated_source
 * @param int|string deprecated_id_formulaires_reponse
 * @param int|string deprecated_id_formulaire
 * @return string la chaîne transformée
 */
function formidable_raccourcis_arobases_2_valeurs_champs($chaine, $saisies, $brut = false, $sans_reponse = true, $source = 'request', $id_formulaires_reponse = 0, $id_formulaire = 0, &$valeurs = array(), &$valeurs_libellees = array()) {
function formidable_raccourcis_arobases_2_valeurs_champs(string $chaine, array $saisies, $options = [], $deprecated_sans_reponse = true, $deprecated_source = 'request', $deprecated_id_formulaires_reponse = 0, $deprecated_id_formulaire = 0): string {

	// Retrocompatibilité
	if (!is_array($options)) {
		$options = [
			'brut' => $options,
			'source' => $deprecated_source,
			'sans_reponse' => $deprecated_sans_reponse,
			'id_formulaires_reponse' => $deprecated_id_formulaires_reponse,
			'id_formulaire' => $deprecated_id_formulaire
		];
	}

	// Initialiser les options par défaut
	$brut = $options['brut'] ?? false;
	$sans_reponse = $options['sans_reponse'] ?? true;
	$source = $options['source'] ?? 'request';
	$id_formulaires_reponse = $options['id_formulaires_reponse'] ?? 0;
	$id_formulaire = $options['id_formulaire'] ?? 0;
	$contexte = $options['contexte'] ?? '';


	if ($source == 'request') {
		list($valeurs, $valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies, $sans_reponse);
	}
	elseif ($source == 'base' and $id_formulaires_reponse and $id_formulaire) {
	} elseif ($source == 'base' and $id_formulaires_reponse and $id_formulaire) {
		$saisies = saisies_lister_par_nom($saisies, false);
		foreach ($saisies as $nom => $saisie) {
			$valeurs[$nom] = formidable_nettoyer_saisie_vue(saisies_tableau2chaine(calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, '', 'brut', $sans_reponse)));
			$valeurs_libellees[$nom] =  formidable_nettoyer_saisie_vue(calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, '', 'valeur_uniquement', $sans_reponse));
		}
	}

	$chaine = pipeline('formidable_pre_raccourcis_arobases',
		[
			'data' => $chaine,
			'args' => [
				'saisies' => $saisies,
				'brut' => $brut,
				'sans_reponse' => $sans_reponse,
				'source' => $source,
				'id_formulaires_reponse' => $id_formulaires_reponse,
				'id_formulaire' => $id_formulaire,
				'contexte' => $contexte,
				'valeurs' => $valeurs,
				'valeurs_libellees' => $valeurs_libellees
			]
		]
	);
	$a_remplacer = array();
	if (preg_match_all('/@[\w]+@/', $chaine, $match)) {
		$a_remplacer = $match[0];
@@ -526,16 +567,40 @@ function formidable_raccourcis_arobases_2_valeurs_champs($chaine, $saisies, $bru
				$a_remplacer = array_intersect_key($valeurs_libellees, $a_remplacer);
			}
		}

		$a_remplacer = array_merge($a_remplacer,array('nom_site_spip' => lire_config('nom_site')));
		if (strpos($chaine,'@message_retour@') !== false) {// test pour éviter recurrence infinie
			$message_retour = sql_getfetsel('message_retour', 'spip_formulaires', "id_formulaire=$id_formulaire");
			$message_retour = formidable_raccourcis_arobases_2_valeurs_champs($message_retour, $saisies, $brut, $sans_reponse, $source, $id_formulaires_reponse, $id_formulaire);
			$message_retour = formidable_raccourcis_arobases_2_valeurs_champs(
				$message_retour,
				$saisies,
				[
					'brut' => $brut,
					'sans_reponse' => $sans_reponse,
					'source' => $source,
				]
			);
			$a_remplacer = array_merge($a_remplacer,array('message_retour' => $message_retour));
		}
	}
	$a_remplacer = array_map('trim', $a_remplacer);
	return trim(_L($chaine, $a_remplacer));
	$chaine = trim(_L($chaine, $a_remplacer));
	$chaine = pipeline('formidable_post_raccourcis_arobases',
		[
			'data' => $chaine,
			'args' => [
				'saisies' => $saisies,
				'brut' => $brut,
				'sans_reponse' => $sans_reponse,
				'source' => $source,
				'id_formulaires_reponse' => $id_formulaires_reponse,
				'id_formulaire' => $id_formulaire,
				'contexte' => $contexte,
				'valeurs' => $valeurs,
				'valeurs_libellees' => $valeurs_libellees
			]
		]
	);
	return $chaine;
}
/**
 * Récupère l'ensemble des valeurs postée dans un formulaires
@@ -591,6 +656,7 @@ function formidable_tableau_valeurs_saisies($saisies, $sans_reponse = true) {
	return array($valeurs, $valeurs_libellees);
}


/**
 * Retourne la valeur "scrambelisée" de la variable PHP d'identification.
 * pour les deux variables proposés par formidable, recherche directement dans $_SERVER
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -17,12 +17,13 @@

	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>

	<pipeline nom="formidable_affiche_resume_reponse" action="" />
	<pipeline nom="formidable_parametres_accuse" action="" />
	<pipeline nom="formidable_exporter_formulaire_reponses_titres" action="" />
	<pipeline nom="formidable_exporter_formulaire_reponses_reponse" action="" />
	<pipeline nom="formidable_traiter_email_destinataires" action="" />
	<pipeline nom="formidable_traitements" inclure="formidable_pipelines.php" />
	<pipeline nom="formidable_pre_raccourcis_arobases" action="" />
	<pipeline nom="formidable_post_raccourcis_arobases" action="" />

	<pipeline nom="autoriser" inclure="formidable_autorisations.php" />
	<pipeline nom="declarer_tables_objets_sql" inclure="base/formidable_tables.php" />
+19 −11
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -149,8 +149,10 @@ function traiter_email_dist($args, $retours) {
			$nom_envoyeur = formidable_raccourcis_arobases_2_valeurs_champs(
				$options['champ_nom'],
				$saisies,
				false,
				''
				[
					'sans_reponse' => '',
					'contexte' => 'traiter_email_nom_envoyeur'
				]
			);
		}
		if (!isset($nom_envoyeur) or !$nom_envoyeur) {
@@ -162,8 +164,11 @@ function traiter_email_dist($args, $retours) {
			$sujet = formidable_raccourcis_arobases_2_valeurs_champs(
				$options['champ_sujet'],
				$saisies,
				$options['champ_sujet_valeurs_brutes'],
				''
				[
					'brut' => $options['champ_sujet_valeurs_brutes'],
					'sans_reponse' => '',
					'contexte' => 'traiter_email_sujet'
				]
			);
		}
		if (!isset($sujet) or !$sujet) {
@@ -250,8 +255,10 @@ function traiter_email_dist($args, $retours) {
				$sujet_accuse = formidable_raccourcis_arobases_2_valeurs_champs(
					$options['sujet_accuse'],
					$saisies,
					false,
					''
					[
						'sans_reponse' => '',
						'contexte' => 'traiter_email_sujet_accuse'
					]
				);
			}
			if (!isset($sujet_accuse) or !$sujet_accuse) {
@@ -277,11 +284,12 @@ function traiter_email_dist($args, $retours) {
				'message_retour' => formidable_raccourcis_arobases_2_valeurs_champs(
					$options['texte_accuse'] ? $options['texte_accuse'] : $formulaire['message_retour'],
					$saisies,
					false,
					'',
					'request',
					0,
					$id_formulaire),
					[
						'sans_reponse' => '',
						'id_formulaire' => $id_formulaire,
						'contexte' => 'traiter_email_accuse_message_retour'
					],
				),
				'traitements' => $traitements,
				'saisies' => $options['masquer_valeurs_accuse'] ? array() : $saisies_fond_notification,
				'valeurs' => $options['masquer_valeurs_accuse'] ? array() : $valeurs