Changeset 125251 in spip-zone
- Timestamp:
- Jun 19, 2020, 1:47:14 PM (7 months ago)
- Location:
- _plugins_/declarerparent/branches/table_lien
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/declarerparent/branches/table_lien
- Property subgit:lock:cc891f6bcffef0523ba12c459d087f99dce8068b deleted
-
Property
subgit:lock:f6706d8eed94273a98be8f6b852d95a63e856d55
set to
2020-06-19T15:47:41.793
-
_plugins_/declarerparent/branches/table_lien/base/objets_parents.php
r125250 r125251 12 12 * comme : 13 13 * ``` 14 * $tables['spip_auteurs']['parent'] = array( 15 * 'type' => 'organisation', 16 * 'champ' => 'id_organisation', 17 * 'table_lien' => 'spip_organisations_liens', 18 * 'role_lien' => 'parent' 19 * ); 14 * $tables['spip_auteurs']['parent'] = array( 15 * 'type' => 'organisation', 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 * ) 22 * ); 20 23 * ``` 21 24 * … … 37 40 if ($parent_methodes = type_objet_info_parent($objet)) { 38 41 42 // On identifie les informations sur l'objet source dont on cherche le parent. 39 43 include_spip('base/abstract_sql'); 40 44 $table_objet = table_objet_sql($objet); … … 43 47 44 48 // On teste chacun méthode dans l'ordre, et dès qu'on a trouvé un parent on s'arrête 45 foreach ($parent_methodes as $ parent_methode) {49 foreach ($parent_methodes as $_parent_methode) { 46 50 // Champ identifiant le parent (id et éventuellement le type) 51 // -- cette identification ne dépend pas du fait que le parent soit stocké dans une table de différente 52 // de celle de l'objet source 47 53 $select = array(); 48 if (isset($parent_methode['champ'])) { 49 $select[] = $parent_methode['champ']; 50 } 51 if (isset($parent_methode['champ_type'])) { 52 $select[] = $parent_methode['champ_type']; 53 } 54 55 // Détermination de la table et de la condition. 56 // - Si le parent est connu via une table de lien alors il faut adapter la table et le where 57 $role = ''; 58 if (isset($parent_methode['table_lien'])) { 59 $table = $parent_methode['table_lien']; 60 $role = isset($parent_methode['role_lien']) ? $parent_methode['role_lien'] : 'parent'; 61 $where = array( 62 'objet = ' . sql_quote($objet), 63 "id_objet = $id_objet", 64 'role = ' . sql_quote($role) 65 ); 66 } else { 54 if (isset($_parent_methode['champ'])) { 55 $select[] = $_parent_methode['champ']; 56 } 57 if (isset($_parent_methode['champ_type'])) { 58 $select[] = $_parent_methode['champ_type']; 59 } 60 61 // Détermination de la table du parent et des conditions sur l'objet source et le parent. 62 $condition_objet_invalide = false; 63 $where = array(); 64 if (!isset($_parent_methode['parent_lien'])) { 65 // Le parent est stocké dans la même table que l'objet source : 66 // -- toutes les conditions s'appliquent à la table source. 67 67 $table = $table_objet; 68 68 $where = array("$cle_objet = $id_objet"); 69 } 70 71 // - Condition supplémentaire sur la détection du parent 72 if (isset($parent_methode['condition'])) { 73 $where[] = $parent_methode['condition']; 74 } 75 76 // On lance la requête 77 if ($ligne = sql_fetsel($select, $table, $where)) { 78 69 // -- Condition supplémentaire sur la détection du parent 70 if (isset($_parent_methode['condition'])) { 71 $where[] = $_parent_methode['condition']; 72 } 73 } else { 74 // Le parent est stocké dans une table différente de l'objet source. 75 // -- on vérifie d'emblée si il y a une condition sur l'objet source et si celle-ci est vérifiée 76 // Si non, on peut arrêter le traitement. 77 if (isset($_parent_methode['condition'])) { 78 $where = array( 79 "$cle_objet = $id_objet", 80 $_parent_methode['condition'] 81 ); 82 if (!sql_countsel($table_objet, $where)) { 83 $condition_objet_invalide = true; 84 } 85 } 86 87 // Si pas de condition sur l'objet source ou que la condition est vérifiée, on peut construire 88 // la requête sur la table qui accueille le parent. 89 if (!$condition_objet_invalide) { 90 $table = $_parent_methode['parent_lien']['table']; 91 // -- On construit les conditions en fonction de l'identification de l'objet source 92 $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); 98 } 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']; 102 } 103 } 104 } 105 106 // On lance la requête de récupération du parent 107 if ( 108 !$condition_objet_invalide 109 and $where 110 and ($ligne = sql_fetsel($select, $table, $where)) 111 ) { 79 112 // Si le type est fixe 80 if (isset($ parent_methode['type'])) {113 if (isset($_parent_methode['type'])) { 81 114 $parent = array( 82 'objet' => $ parent_methode['type'],83 'id_objet' => intval($ligne[$ parent_methode['champ']]),84 'champ' => $ parent_methode['champ'],115 'objet' => $_parent_methode['type'], 116 'id_objet' => intval($ligne[$_parent_methode['champ']]), 117 'champ' => $_parent_methode['champ'], 85 118 ); 86 119 } 87 elseif (isset($ parent_methode['champ_type'])) {120 elseif (isset($_parent_methode['champ_type'])) { 88 121 $parent = array( 89 'objet' => $ligne[$ parent_methode['champ_type']],90 'id_objet' => intval($ligne[$ parent_methode['champ']]),91 'champ' => $ parent_methode['champ'],92 'champ_type' => $ parent_methode['champ_type'],122 'objet' => $ligne[$_parent_methode['champ_type']], 123 'id_objet' => intval($ligne[$_parent_methode['champ']]), 124 'champ' => $_parent_methode['champ'], 125 'champ_type' => $_parent_methode['champ_type'], 93 126 ); 94 127 } 95 96 if ($parent) { 97 // Si on passe par une table de liens 98 if (isset($parent_methode['table_lien'])) { 99 $parent['table_lien'] = $parent_methode['table_lien']; 100 $parent['role_lien'] = $role; 101 } 102 break; 103 } 128 break; 104 129 } 105 130 } … … 204 229 // S'il y a une description explicite de parent, c'est prioritaire 205 230 if (isset($infos['parent']) and is_array($infos['parent'])) { 206 if ( count($infos['parent']) === count($infos['parent'], COUNT_RECURSIVE)) {231 if (!isset($infos['parent'][0])) { 207 232 $parents[$objet] = array($infos['parent']); 208 233 } else { … … 253 278 if ($parent_methodes = type_objet_info_parent($objet_enfant)) { 254 279 // On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé 255 foreach ($parent_methodes as $ parent_methode) {280 foreach ($parent_methodes as $_parent_methode) { 256 281 // Si la méthode qu'on teste n'exclut pas le parent demandé 257 if (!isset($ parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) {282 if (!isset($_parent_methode['exclus']) or !in_array($objet, $_parent_methode['exclus'])) { 258 283 // Si le type du parent est fixe et directement l'objet demandé 259 if (isset($ parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) {260 $enfants[$objet][$objet_enfant] = $ parent_methode;284 if (isset($_parent_methode['type']) and isset($_parent_methode['champ']) and $_parent_methode['type'] == $objet) { 285 $enfants[$objet][$objet_enfant] = $_parent_methode; 261 286 } 262 287 // Si le type est variable, alors l'objet demandé peut forcément être parent 263 elseif (isset($ parent_methode['champ_type']) and isset($parent_methode['champ'])) {264 $enfants[$objet][$objet_enfant] = $ parent_methode;288 elseif (isset($_parent_methode['champ_type']) and isset($_parent_methode['champ'])) { 289 $enfants[$objet][$objet_enfant] = $_parent_methode; 265 290 } 266 291 }
Note: See TracChangeset
for help on using the changeset viewer.