source: spip-zone/_plugins_/coordonnees/trunk/coordonnees_pipelines.php @ 70154

Last change on this file since 70154 was 70154, checked in by gildas.cotomale@…, 8 years ago

réécriture de r70109 pour que les plugins SPIP 3 n'aient pas à se déclarer dans un pipeline de plus mais soient pris en compte automatiquement (comme pour les documents et les mots clés)

File size: 3.7 KB
Line 
1<?php
2
3/**
4 * Plugin Coordonnees
5 * Licence GPL (c) 2010 Matthieu Marcillaud
6**/
7
8/**
9 * Informations sur les objets où peut s'appliquer les coordonnees
10 *
11 * @param String $quoi info que l'on veut recuperer (sinon tout le tableau)
12 * @return Array Liste d'objet et quelques définitions (titre, exec)
13**/
14function liste_objets_coordonnees($quoi = '') {
15
16        $liste = lister_tables_objets_sql(); // tableau de donnees de TOUTES les tables...
17        $deliste = array('spip_adresses', 'spip_emails','spip_numeros', 'spip_pays', 'spip_documents', 'spip_messages'); // ...donc on retire ceux du plugin coordonnees ! ...ainsi que ceux de : pays requis (revoir sa declaration pour ne pas avoir a faire ceci), documents (comme pays n'a pas de page de vue) et messages (ca fait etrange, tout comme les mots-cles et groupes de mots-cles...)
18        for($i=0; $i<6; $i++) {
19                // http://stackoverflow.com/questions/12633877/how-to-unset-multiple-variables
20                unset($liste[$deliste[$i]]);
21        } /// @ToDo: on peut passer directement la liste a unset a partir de PHP 4.0.1
22        foreach ($liste as $tab=>$inf) {
23                if (!$liste[$tab]['principale'] OR !$liste[$tab]['editable']) {
24                        // on ne prendra pas en compte les objets non editables...
25                        // (ceci vire donc spip_forum spip_petitions spip_signatures spip_syndic_articles spip_depots spip_plugins spip_paquets etc.)
26                        unset($liste[$tab]);
27                } else {
28                        $type = $liste[$tab]['type'];
29                        $liste[$type] = $liste[$tab]; // le plugin-ci utilise comme cle le type d'objet alors que le tableau renvoye a comme cle le nom de table, donc on recree l'entree...
30                        unset($liste[$tab]); // ...et on supprime l'ancienne entree histoire de ne pas allourdir le tableau en memoire
31                        $liste[$type]['titre'] = _T($liste[$type]['texte_objet']); // on rajoute le titre traduit pour etre affiche par la configuration (je ne sais pas utiliser directement "texte_objet")
32                }
33        }
34
35        if (!$quoi) {
36                return $liste;
37        }
38
39        $listeq = array();
40        foreach ($liste as $c=>$v) {
41                $listeq[$c] = $v[$quoi];
42        }
43        return $listeq;
44}
45
46
47
48/**
49 * Ajout des informations de coordonnées (adresses, mails, numéros)
50 * sur la page de visualisation d'un objet
51**/
52function coordonnees_affiche_milieu($flux) {
53
54        $exec = isset($flux['args']['exec']) ? $flux['args']['exec'] : _request('exec');
55
56
57        $objet_exec = trouver_objet_exec($exec);
58
59        // pas en édition
60        if ($objet_exec['edition']) {
61                return $flux;
62        }
63
64        // recuperation de l'id
65        $_id = $objet_exec['id_table_objet'];
66        // type d'objet
67        $type = $objet_exec['type'];
68        // liste des exec de visualisation pour les objets declares
69        $liste = liste_objets_coordonnees('url_voir');
70
71        if (isset($type) and isset($liste[$type])){
72                // c'est un exec que l'on peut afficher
73                // verifions qu'il est coche dans la conf
74                $conf = unserialize($GLOBALS['meta']['coordonnees']);
75                if (is_array($conf['objets']) AND in_array($type, $conf['objets'])) {
76                        // on doit l'afficher
77                        // seulement si on a un identifiant
78                        if (!isset($_id)) {
79                                $_id = id_table_objet($type);
80                        }
81
82                        if (isset($flux['args'][$_id]) and $id = $flux['args'][$_id]) {
83                                include_spip('inc/presentation');
84                                $contexte = array(
85                                        'objet' => $type,
86                                        'id_objet' => $id,
87                                        'id_adresse' => _request('id_adresse'),
88                                        'id_numero' => _request('id_numero'),
89                                        'id_email' => _request('id_email')
90
91                                );
92                                $flux['data'] .= recuperer_fond('prive/boite/coordonnees', $contexte, array('ajax'=>true));
93                        }
94                }
95        }
96
97        return $flux;
98
99}
100
101
102/**
103 * Ajout de l'objet 'adresse'
104 * à la liste des objets pouvant recevoir des champs extras
105**/
106function coordonnees_objets_extensibles($objets){
107        return array_merge($objets, array(
108                'adresse' => _T('coordonnees:adresses'),
109                'numero' => _T('coordonnees:numeros'),
110                'email' => _T('coordonnees:emails'),
111        ));
112}
113
114?>
Note: See TracBrowser for help on using the repository browser.