Valider f0f4067c rédigé par Eric Lupinacci's avatar Eric Lupinacci
Parcourir les fichiers

On change le comportement du critère id_? en gardant la compatibilité avec les cas existants:

- on ne cherche que les champs id_xxxx et c'est uniquement la fonction de calcul du critère qui fait le travail et on rajoute id_secteur si un id_rubrique existe.
- on ne permet plus l'injection d'autres types de champs : le pipeline lister_champs_selection_conditionnelle devient exclure_id_conditionnel dont l'objectif n'est que de lister les id à exclure du critère.
parent f513be03
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -91,7 +91,7 @@
	<pipeline nom="insert_head" action="" />
	<pipeline nom="insert_head_css" action="" />
	<pipeline nom="jquery_plugins" action="" />
	<pipeline nom="lister_champs_selection_conditionnelle" action="" />
	<pipeline nom="exclure_id_conditionnel" action="" />
	<pipeline nom="lister_tables_noerase" action="" />
	<pipeline nom="lister_tables_noexport" action="" />
	<pipeline nom="lister_tables_noimport" action="" />
+17 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1599,7 +1599,7 @@ function critere_id__dist($idb, &$boucles, $crit) {
	/** @var Boucle $boucle */
	$boucle = $boucles[$idb];

	$champs = lister_champs_selection_conditionnelle(
	$champs = lister_champs_id_conditionnel(
		$boucle->show['table'],
		$boucle->show,
		$boucle->sql_serveur
@@ -1639,7 +1639,7 @@ function critere_id__dist($idb, &$boucles, $crit) {
 * @param string $serveur Connecteur sql a utiliser
 * @return array Liste de nom de champs (tel que id_article, id_mot, id_parent ...)
 */
function lister_champs_selection_conditionnelle($table, $desc = null, $serveur = '') {
function lister_champs_id_conditionnel($table, $desc = null, $serveur = '') {
	// calculer la description de la table
	if (!is_array($desc)) {
		$desc = description_table($table, $serveur);
@@ -1658,6 +1658,14 @@ function lister_champs_selection_conditionnelle($table, $desc = null, $serveur =
		}
	);

	// Si le champ id_rubrique appartient à la liste et si id_secteur n'est pas inclus on le rajoute.
	if (
		in_array('id_rubrique', $champs)
		and !in_array('id_secteur', $champs)
	) {
		$champs[] = 'id_secteur';
	}

	// On ne fera pas mieux pour les tables d’un autre serveur
	if ($serveur) {
		return $champs;
@@ -1689,17 +1697,21 @@ function lister_champs_selection_conditionnelle($table, $desc = null, $serveur =
		}
	}
	$champs = array_values(array_unique($champs));
	$champs = pipeline(
		'lister_champs_selection_conditionnelle',

	// Exclusions de certains id
	$exclusions = pipeline(
		'exclure_id_conditionnel',
		array(
			'args' => array(
				'table' => $table,
				'id_table_objet' => $primary,
				'associable' => $associable,
			),
			'data' => $champs,
			'data' => array(),
		)
	);
	$champs = array_diff($champs, $exclusions);

	return $champs;
}