Changeset 100045 in spip-zone for _plugins_/fabrique


Ignore:
Timestamp:
Oct 21, 2016, 4:15:22 PM (3 years ago)
Author:
marcimat@…
Message:

Lors de la création des critères {id_xx ?} ajouter d'éventuels critères {yy_liens.id_yy}
si d'autres objets déclarent se lier à XX également déclaré dans la Fabrique.
Cela fonctionne donc si X et Y sont déclarés dans le même formulaire de Fabrique.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fabrique/trunk/fabrique_fonctions.php

    r100013 r100045  
    788788 * sous forme d'une écriture de critère, tel que `{id_parent?}{id_documentation?}`
    789789 *
    790  * Cela ne concerne pas les champs speciaux (id_rubrique, id_secteur, id_trad)
    791  * qui ne seront pas inclus.
     790 * Les champs indirects `{B_liens.id_B ?}` sont aussi ajoutés s'ils sont déclarés
     791 * dans la Fabrique en même temps.
    792792 *
    793793 * @param array $objet
     
    800800function criteres_champs_id($objet, $objets) {
    801801        $ids = array();
     802
     803        // parenté directe sur Rubrique ?
    802804        if (champ_present($objet, 'id_rubrique')) {
    803805                $ids[] = 'id_rubrique';
     
    806808                $ids[] = 'id_secteur';
    807809        }
     810
     811        // parenté directe sur un autre objet ?
    808812        if (option_presente($objet, 'liaison_directe') and $_id = fabrique_id_table_objet($objet['liaison_directe'], $objets)) {
    809813                $ids[] = $_id;
     
    816820                }
    817821        }
     822
     823        // Liaisons indirectes via table de liens déclarée dans la Fabrique ?
     824        // D'autres objets peuvent avoir une table de liens et demander à être lié sur cet objet.
     825        // On ajoute leurs champs de liaison.
     826        foreach ($objets as $autre_objet) {
     827                if ($autre_objet !== $objet) {
     828                        if (options_presentes($autre_objet, array('table_liens', 'vue_liens'))) {
     829                                if (in_array($objet['table'], $autre_objet['vue_liens'])) {
     830                                        $ids[] = $autre_objet['objet'] . '_liens.' . $autre_objet['id_objet'];
     831                                }
     832                        }
     833                }
     834        }
     835
    818836        if (!$ids) {
    819837                return "";
Note: See TracChangeset for help on using the changeset viewer.