Browse Source

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.
issue_admin_css
Eric Lupinacci 3 years ago
parent
commit
f0f4067ccb
  1. 2
      ecrire/paquet.xml
  2. 22
      ecrire/public/criteres.php

2
ecrire/paquet.xml

@ -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="" />

22
ecrire/public/criteres.php

@ -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;
}

Loading…
Cancel
Save