Changeset 125392 in spip-zone
- Timestamp:
- Aug 9, 2020, 12:32:29 PM (8 months ago)
- Location:
- _plugins_/declarerparent/branches/table_lien
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/declarerparent/branches/table_lien
- Property subgit:lock:c75d45078602e9e10e89419ebad9d4b3456e188e deleted
-
Property
subgit:lock:7348de1f29fabc7071636a1ba64a6d1466b9c987
set to
2020-08-09T14:38:13.384
-
_plugins_/declarerparent/branches/table_lien/base/objets_parents.php
r125341 r125392 15 15 * 'type' => 'organisation', 16 16 * 'champ' => 'id_organisation', 17 * 'parent_lien' => array( 18 * 'table' => 'spip_organisations_liens', 19 * 'source' => array('champ' => 'id_objet', 'champ_type' => 'objet'), 20 * 'condition' => 'role="parent"', 21 * ) 17 * 'table' => 'spip_organisations_liens', 18 * 'table_condition' => 'role="parent"', 19 * 'source_champ' => 'id_objet', 20 * 'champ_type' => 'objet' 22 21 * ); 23 22 * ``` 24 23 * 25 * La table de liens est forcément de structure (id_organisation, objet, id_objet, role).26 24 * 27 25 * @api … … 62 60 $condition_objet_invalide = false; 63 61 $where = array(); 64 if (!isset($_parent_methode[' parent_lien'])) {62 if (!isset($_parent_methode['table'])) { 65 63 // Le parent est stocké dans la même table que l'objet source : 66 64 // -- toutes les conditions s'appliquent à la table source. … … 88 86 // la requête sur la table qui accueille le parent. 89 87 if (!$condition_objet_invalide) { 90 $table = $_parent_methode[' parent_lien']['table'];91 // --On construit les conditions en fonction de l'identification de l'objet source88 $table = $_parent_methode['table']; 89 // On construit les conditions en fonction de l'identification de l'objet source 92 90 $where = array(); 93 if (isset($_parent_methode['parent_lien']['source']['champ'])) { 94 $where[] = "{$_parent_methode['parent_lien']['source']['champ']} = $id_objet"; 95 } 96 if (isset($_parent_methode['parent_lien']['source']['champ_type'])) { 97 $where[] = "{$_parent_methode['parent_lien']['source']['champ_type']} = " . sql_quote($objet); 91 // -- si le champ_source de l'id n'est pas précisé c'est qu'il est déjà connu et donc que c'est 92 // le même que celui de l'objet source. 93 $where[] = isset($_parent_methode['source_champ']) 94 ? "{$_parent_methode['source_champ']} = $id_objet" 95 : "${cle_objet} = $id_objet"; 96 if (isset($_parent_methode['source_champ_type'])) { 97 $where[] = "{$_parent_methode['source_champ_type']} = " . sql_quote($objet); 98 98 } 99 99 // -- Condition supplémentaire sur la détection du parent 100 if (isset($_parent_methode[' parent_lien']['condition'])) {101 $where[] = $_parent_methode[' parent_lien']['condition'];100 if (isset($_parent_methode['table_condition'])) { 101 $where[] = $_parent_methode['table_condition']; 102 102 } 103 103 } … … 167 167 168 168 // On parcourt tous les types d'enfants trouvés 169 foreach ($enfants_methodes as $objet_enfant => $_methode s_parent) {170 foreach ($_methodes_parent as $_methode_parent) {171 // On construit les conditions d'identification du parent172 $where = array();173 // -- L'identifiant du parent174 if (isset($_methode_parent['champ'])) {175 $where[] = $_methode_parent['champ'] . ' = ' . $id_objet;176 }177 // -- Si le parent est variable178 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 conditions183 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émentaire189 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 }169 foreach ($enfants_methodes as $objet_enfant => $_methode_parent) { 170 // On construit les conditions d'identification du parent 171 $where = array(); 172 // -- L'identifiant du parent 173 if (isset($_methode_parent['champ'])) { 174 $where[] = $_methode_parent['champ'] . ' = ' . $id_objet; 175 } 176 // -- Si le parent est variable 177 if (isset($_methode_parent['champ_type'])) { 178 $where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet); 179 } 180 181 // On détermine la table, le champ id des enfants et on complète éventuellement les conditions 182 if (!isset($_methode_parent['table'])) { 183 // Les enfants sont stockés dans la même table que l'objet parent : 184 $table_enfant = table_objet_sql($objet_enfant); 185 $cle_objet_enfant = id_table_objet($objet_enfant); 186 187 // S'il y a une condition supplémentaire 188 if (isset($_methode_parent['condition'])) { 189 $where[] = $_methode_parent['condition']; 190 } 191 } else { 192 // Les enfants sont stockés dans une table différente de l'objet parent. 193 $table_enfant = $_methode_parent['table']; 194 $cle_objet_enfant = isset($_methode_parent['source_champ']) 195 ? $_methode_parent['source_champ'] 196 : id_table_objet($objet_enfant); 197 198 // S'il y a une condition supplémentaire 199 if (isset($_methode_parent['table_condition'])) { 200 $where[] = $_methode_parent['table_condition']; 201 } 202 } 203 204 // On lance la requête 205 if ($ids = sql_allfetsel($cle_objet_enfant, $table_enfant, $where)) { 206 $ids = array_map('reset', $ids); 207 $enfants[$objet_enfant] = isset($enfants[$objet_enfant]) 208 ? array_merge($enfants[$objet_enfant], $ids) 209 : $ids; 210 210 } 211 211 } … … 246 246 // Si on trouve bien la description de cet objet 247 247 if ($infos = lister_tables_objets_sql($table)) { 248 // S'il y a une description explicite de parent, c'est prioritaire249 248 if (isset($infos['parent']) and is_array($infos['parent'])) { 249 // S'il y a une description explicite de parent, c'est prioritaire 250 // -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau 251 // de description 250 252 if (!isset($infos['parent'][0])) { 251 253 $parents[$objet] = array($infos['parent']); … … 253 255 $parents[$objet] = $infos['parent']; 254 256 } 255 } 256 // Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique 257 elseif (isset($infos['field']['id_rubrique'])) { 257 } elseif (isset($infos['field']['id_rubrique'])) { 258 // Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique 258 259 $parents[$objet] = array(array('type' => 'rubrique', 'champ' => 'id_rubrique')); 259 } 260 // Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même 261 elseif (isset($infos['field']['id_parent'])) { 260 } elseif (isset($infos['field']['id_parent'])) { 261 // Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même 262 262 $parents[$objet] = array(array('type' => $objet, 'champ' => 'id_parent')); 263 263 } 264 //~ // Sinon on cherche s'il y a objet et id_objet dans la table, ce qui signifie que le parent peut-être n'importe quel objet265 //~ // comme c'est le cas pour les forums de premier niveau266 //~ elseif (isset($infos['field']['objet']) and isset($infos['field']['id_objet'])) {267 //~ $parents[$objet] = array(array('champ_type' => 'objet', 'champ' => 'id_objet'));268 //~ }269 264 } 270 265 }
Note: See TracChangeset
for help on using the changeset viewer.