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

Last change on this file since 99749 was 99749, checked in by cedric@…, 3 years ago

Suppression de la table spip_organisations_contacts et basculement sur spip_organisations_liens. Suppression de la dependance au plugin editer_liens_simples

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