From fa0fb146a27a9a6502bcae2914ebfc3062c761fe Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Tue, 17 May 2011 14:32:48 +0000 Subject: [PATCH] =?UTF-8?q?Crit=C3=A8res=20{noeud}=20et=20{feuilles}=20uti?= =?UTF-8?q?lisables=20sur=20les=20tables=20arborescentes=20par=20un=20id?= =?UTF-8?q?=5Fparent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Trouver toutes les objets qui ont des enfants (les noeuds de l'arbre) * {noeud} * {!noeud} retourne les feuilles * * Trouver toutes les objets qui n'ont pas d'enfants (les feuilles de l'arbre) * {feuille} * {!feuille} retourne les noeuds --- ecrire/public/criteres.php | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index ca26dde09f..4948fca8aa 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -1602,4 +1602,56 @@ function critere_POUR_tableau_dist($idb, &$boucles, $crit) { $command[\'sourcemode\'] = \'table\';'; } + +/** + * Trouver toutes les objets qui ont des enfants (les noeuds de l'arbre) + * {noeud} + * {!noeud} retourne les feuilles + * + * @global array $exceptions_des_tables + * @param string $idb + * @param array $boucles + * @param <type> $crit + */ +function critere_noeud_dist($idb, &$boucles, $crit) { + global $exceptions_des_tables; + $not = $crit->not; + $boucle = &$boucles[$idb]; + $primary = $boucle->primary; + + if (!$primary OR strpos($primary,',')) { + erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), "BOUCLE$idb"); + return; + } + $table = $boucle->type_requete; + $table_sql = table_objet_sql(objet_type($table)); + + $id_parent = isset($exceptions_des_tables[$boucle->id_table]['id_parent']) ? + $exceptions_des_tables[$boucle->id_table]['id_parent'] : + 'id_parent'; + + $in = "IN"; + $where= array("'IN'", "'$boucle->id_table." . "$primary'","'('.sql_get_select('$id_parent', '$table_sql').')'"); + if ($not) + $where = array("'NOT'",$where); + + $boucle->where[]= $where; +} + +/** + * Trouver toutes les objets qui n'ont pas d'enfants (les feuilles de l'arbre) + * {feuille} + * {!feuille} retourne les noeuds + * + * @global array $exceptions_des_tables + * @param string $idb + * @param array $boucles + * @param <type> $crit + */ +function critere_feuille_dist($idb, &$boucles, $crit) { + $not = $crit->not; + $crit->not = $not ? false:true; + critere_noeud_dist($idb,$boucles,$crit); + $crit->not = $not; +} ?> \ No newline at end of file -- GitLab