source: spip-zone/_plugins_/contacts_et_organisations/trunk/contacts_pipelines.php @ 84783

Last change on this file since 84783 was 84783, checked in by teddy.spip@…, 7 years ago

On passe les fins de ligne à LF comme recommandé sur la zone. Fichiers en Unix.
Up de z

  • Property svn:executable set to *
File size: 6.6 KB
Line 
1<?php
2
3/**
4 * Utilisations de pipelines
5 *
6 * @plugin Contacts & Organisations pour Spip 3.0
7 * @license GPL (c) 2009 - 2013
8 * @author Cyril Marion, Matthieu Marcillaud, Rastapopoulos
9 *
10 * @package SPIP\Contacts\Pipelines
11**/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15/**
16 * Ajoute un fil d'ariane sur les auteurs définis comme contacts ou organisation
17 *
18 * @pipeline affiche_hierarchie
19 *
20 * @param array $flux
21 *     Données du pipeline
22 * @return array
23 *     Données du pipeline
24 */
25function contacts_affiche_hierarchie($flux)
26{
27        if ($flux['args']['objet'] == 'auteur'
28          and isset($flux["args"]["id_auteur"])
29          and $id = $flux["args"]["id_auteur"]) {
30                if (lire_config('contacts_et_organisations/associer_aux_auteurs')) {
31                        $id = intval($flux['args']['id_objet']);
32                        // cherchons un contact
33                        if ($id_contact = sql_getfetsel('id_contact', 'spip_contacts', 'id_auteur ='.$id)) {
34                                $flux['data'] = recuperer_fond('prive/squelettes/hierarchie/contact', array('id_contact'=>$id_contact)) . '<br />' . $flux['data'];
35                        // sinon une organisation
36                        } elseif ($id_organisation = sql_getfetsel('id_organisation', 'spip_organisations', 'id_auteur ='.$id)) {
37                                $flux['data'] = recuperer_fond('prive/squelettes/hierarchie/organisation', array('id_organisation'=>$id_organisation)) . '<br />' . $flux['data'];
38                        }
39                }
40        }
41
42        return $flux;
43}
44
45
46/**
47 * Utilisation du pipeline afficher_contenu_objet
48 *
49 * - Insertion dans la vue des auteurs des informations relatives aux
50 *   contacts et organisations
51 * - Insertion sur les rubriques du choix des organisations
52 *
53 * @pipeline afficher_contenu_objet
54 *
55 * @param array $flux
56 *     Données du pipeline
57 * @return array
58 *     Données du pipeline
59 */
60function contacts_afficher_contenu_objet($flux) {
61        include_spip('inc/config');
62
63        if ($flux['args']['type'] == 'auteur') {
64                if (lire_config('contacts_et_organisations/associer_aux_auteurs') and
65                        lire_config('contacts_et_organisations/afficher_infos_sur_auteurs')) {
66
67                        $id = intval($flux['args']['id_objet']);
68
69                        // informations sur le contact et ses liens
70                        if ($id_contact = sql_getfetsel('id_contact', 'spip_contacts', 'id_auteur ='.$id))
71                        {
72                                $infos = recuperer_fond('prive/squelettes/contenu/contact_sur_auteur', array('id_contact' => $id_contact));
73                                $flux['data'] .= $infos;
74                        }
75                        // informations sur l'organisation et ses liens
76                        elseif ($id_organisation = sql_getfetsel('id_organisation', 'spip_organisations', 'id_auteur ='.$id))
77                        {
78                                $infos = recuperer_fond('prive/squelettes/contenu/organisation_sur_auteur', array('id_organisation' => $id_organisation));
79                                $flux['data'] .= $infos;
80                        }
81                }
82        }
83
84        // Ajouter un bloc de liaison avec les organisations sur les objets configurés pour ça
85        if ($table = table_objet_sql($flux['args']['type']) and in_array($table, lire_config('contacts_et_organisations/lier_organisations_objets', array()))) {
86                $id = $flux['args']['id_objet'];
87                $infos = recuperer_fond('prive/objets/editer/liens', array(
88                        'table_source'=>'organisations',
89                        'objet'=>$flux['args']['type'],
90                        'id_objet'=>$id,
91                        'editable'=>autoriser('associerorganisation', $flux['args']['type'], $id) ? 'oui':'non'
92                ));
93                $flux['data'] .= $infos;
94        }
95
96        // Ajouter un bloc de liaison avec les contacts sur les objets configurés pour ça
97        if ($table = table_objet_sql($flux['args']['type']) and in_array($table, lire_config('contacts_et_organisations/lier_contacts_objets', array()))) {
98                $id = $flux['args']['id_objet'];
99                $infos = recuperer_fond('prive/objets/editer/liens', array(
100                        'table_source'=>'contacts',
101                        'objet'=>$flux['args']['type'],
102                        'id_objet'=>$id,
103                        'editable'=>autoriser('associercontact', $flux['args']['type'], $id) ? 'oui':'non'
104                ));
105                $flux['data'] .= $infos;
106        }
107
108        return $flux;
109}
110
111
112
113/**
114 * Utilisation du pipeline affiche gauche
115 *
116 * - Affichage du formulaire de choix Contact/Organisation
117 *   dans la colonne de vue d'un auteur
118 *
119 * @pipeline affiche_gauche
120 *
121 * @param array $flux
122 *     Données du pipeline
123 * @return array
124 *     Données du pipeline
125**/
126function contacts_affiche_gauche($flux){
127        if ($flux['args']['exec'] == 'auteur'){
128                if (lire_config('contacts_et_organisations/associer_aux_auteurs')) {
129                        $flux['data'] .= recuperer_fond('prive/squelettes/extra/selecteur_contacts_organisations', array(
130                                'id_auteur' => $flux['args']['id_auteur']
131                        ));
132                }
133        }
134
135        return $flux;
136}
137
138
139
140/**
141 * Ajoute une feuille de style pour la v-card
142 *
143 * @pipeline insert_head_css
144 *
145 * @param string $flux
146 *     Code HTML de chargement des CSS
147 * @return string
148 *     Code HTML de chargement des CSS
149**/
150function contacts_insert_head_css($flux){
151        $flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path('contacts.css').'" media="all" />';
152        return $flux;
153}
154
155
156
157
158/**
159 * Optimiser la base (suppression des contacts et organisations dont les auteurs liés ont disparu)
160 *
161 * Si la configuration du plugin indique que la suppression d'un auteur entraîne la suppression
162 * de la fiche de contact, alors on supprime effectivement ce contact.
163 *
164 * @param array $flux
165 * @return array
166 */
167function contacts_optimiser_base_disparus($flux){
168
169        // supprimer un contact associé à un auteur disparu si demandé dans la configuration
170        include_spip('inc/config');
171        if (lire_config('contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts')) {
172                $n = 0;
173
174                # supprimer les contacts dont les auteurs ont disparu
175                $res = sql_select(
176                        "contacts.id_contact",
177                        "spip_contacts AS contacts
178                                LEFT JOIN spip_auteurs AS auteurs
179                                ON contacts.id_auteur=auteurs.id_auteur",
180                        array(
181                                "auteurs.id_auteur IS NULL",
182                                "contacts.id_auteur > 0"
183                        )
184                );
185
186                while ($row = sql_fetch($res)) {
187                        $id_contact = $row['id_contact'];
188                        sql_delete("spip_contacts_liens", "id_contact=" . sql_quote($id_contact));
189                        sql_delete("spip_contacts", "id_contact=" . sql_quote($id_contact));
190                        sql_delete("spip_organisations_contacts", "id_contact=" . sql_quote($id_contact));
191                        $n++;
192                }
193
194                # supprimer les organisations dont les auteurs ont disparu
195                $res = sql_select(
196                        "organisations.id_organisation",
197                        "spip_organisations AS organisations
198                                LEFT JOIN spip_auteurs AS auteurs
199                                ON organisations.id_auteur=auteurs.id_auteur",
200                        array(
201                                "auteurs.id_auteur IS NULL",
202                                "organisations.id_auteur > 0"
203                        )
204                );
205
206                while ($row = sql_fetch($res)) {
207                        $id_organisation = $row['id_organisation'];
208                        sql_delete("spip_organisations_liens", "id_organisation=" . sql_quote($id_organisation));
209                        sql_delete("spip_organisations", "id_organisation=" . sql_quote($id_organisation));
210                        sql_delete("spip_organisations_contacts", "id_organisation=" . sql_quote($id_organisation));
211                        $n++;
212                }
213
214                $flux['data'] += $n;
215        }
216
217        return $flux;
218}
219
220?>
Note: See TracBrowser for help on using the repository browser.