Changeset 125252 in spip-zone


Ignore:
Timestamp:
Jun 19, 2020, 5:29:23 PM (7 months ago)
Author:
Eric Lupinacci
Message:

Mettre au point la recherche des enfants en y incluant le cas des tables de liens.

Location:
_plugins_/declarerparent/branches/table_lien
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/declarerparent/branches/table_lien

    • Property subgit:lock:f6706d8eed94273a98be8f6b852d95a63e856d55 deleted
    • Property subgit:lock:140eb589ea763d025cd550ffc3cd47336cc18dbc set to 2020-06-19T19:29:35.309
  • _plugins_/declarerparent/branches/table_lien/base/objets_parents.php

    r125251 r125252  
    167167               
    168168                // On parcourt tous les types d'enfants trouvés
    169                 foreach ($enfants_methodes as $objet_enfant => $methode) {
    170                         $table_enfant = table_objet_sql($objet_enfant);
    171                         $cle_objet_enfant = id_table_objet($objet_enfant);
    172                        
    173                         $where = array();
    174                         // L'identifiant du parent
    175                         if (isset($methode['champ'])) {
    176                                 $where[] = $methode['champ'] . ' = ' . $id_objet;
    177                         }
    178                         // Si le parent est variable
    179                         if (isset($methode['champ_type'])) {
    180                                 $where[] = $methode['champ_type'] . ' = ' . sql_quote($objet);
    181                         }
    182                         // S'il y a une condition supplémentaire
    183                         if (isset($methode['condition'])) {
    184                                 $where[] = $methode['condition'];
    185                         }
    186                        
    187                         // On lance la requête
    188                         if ($ids = sql_allfetsel($cle_objet_enfant, $table_enfant, $where)) {
    189                                 $ids = array_map('reset', $ids);
    190                                 $enfants[$objet_enfant] = $ids;
     169                foreach ($enfants_methodes as $objet_enfant => $_methodes_parent) {
     170                        foreach ($_methodes_parent as $_methode_parent) {
     171                                // On construit les conditions d'identification du parent
     172                                $where = array();
     173                                // -- L'identifiant du parent
     174                                if (isset($_methode_parent['champ'])) {
     175                                        $where[] = $_methode_parent['champ'] . ' = ' . $id_objet;
     176                                }
     177                                // -- Si le parent est variable
     178                                if (isset($_methode_parent['champ_type'])) {
     179                                        $where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet);
     180                                }
     181
     182                                // On détermine la table, le champ id des enfants et on complète éventuellement les conditions
     183                                if (!isset($_methode_parent['parent_lien'])) {
     184                                        // Les enfants sont stockés dans la même table que l'objet parent :
     185                                        $table_enfant = table_objet_sql($objet_enfant);
     186                                        $cle_objet_enfant = id_table_objet($objet_enfant);
     187
     188                                        // S'il y a une condition supplémentaire
     189                                        if (isset($_methode_parent['condition'])) {
     190                                                $where[] = $_methode_parent['condition'];
     191                                        }
     192                                } else {
     193                                        // Les enfants sont stockés dans une table différente de l'objet parent.
     194                                        $table_enfant = $_methode_parent['parent_lien']['table'];
     195                                        $cle_objet_enfant = $_methode_parent['parent_lien']['source']['champ'];
     196
     197                                        // S'il y a une condition supplémentaire
     198                                        if (isset($_methode_parent['parent_lien']['condition'])) {
     199                                                $where[] = $_methode_parent['parent_lien']['condition'];
     200                                        }
     201                                }
     202
     203                                // On lance la requête
     204                                if ($ids = sql_allfetsel($cle_objet_enfant, $table_enfant, $where)) {
     205                                        $ids = array_map('reset', $ids);
     206                                        $enfants[$objet_enfant] = isset($enfants[$objet_enfant])
     207                                                ? array_merge($enfants[$objet_enfant], $ids)
     208                                                : $ids;
     209                                }
    191210                        }
    192211                }
     
    283302                                                // Si le type du parent est fixe et directement l'objet demandé
    284303                                                if (isset($_parent_methode['type']) and isset($_parent_methode['champ']) and $_parent_methode['type'] == $objet) {
    285                                                         $enfants[$objet][$objet_enfant] = $_parent_methode;
     304                                                        $enfants[$objet][$objet_enfant][] = $_parent_methode;
    286305                                                }
    287306                                                // Si le type est variable, alors l'objet demandé peut forcément être parent
    288307                                                elseif (isset($_parent_methode['champ_type']) and isset($_parent_methode['champ'])) {
    289                                                         $enfants[$objet][$objet_enfant] = $_parent_methode;
     308                                                        $enfants[$objet][$objet_enfant][] = $_parent_methode;
    290309                                                }
    291310                                        }
Note: See TracChangeset for help on using the changeset viewer.