source: spip-zone/_plugins_/selection_objets/liaison_objets/selection_objet_fonctions.php @ 107832

Last change on this file since 107832 was 107832, checked in by maieul@…, 21 months ago

on va commencer une branche qui renommerait le plugin en liaison d'objet, ce qui est plus cohérent avec ce qu'il fait effectivement

File size: 6.6 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION'))
4        return;
5
6//Applique des filtres sur des champs spéciciques
7function filtrer_champ($data) {
8        include_spip('inc/texte');
9        $exceptions = charger_fonction('exceptions', 'inc');
10        $titres = $exceptions('titre');
11        $titres = array_merge(array(0 => 'titre'), $titres);
12        $propres = array(
13                'descriptif',
14                'texte'
15        );
16        $extraire_multi = array_merge($titres, array(
17                'descriptif',
18                'texte'
19        ));
20        $filtres = array(
21                'extraire_multi' => $extraire_multi,
22                'supprimer_numero' => $titres,
23                'propre' => $propres,
24        );
25
26        foreach ($filtres as $filtre => $champ) {
27                if (is_array($data)) {
28                        if (is_array($champ)) {
29                                foreach ($champ as $c) {
30                                        if ($data[$c])
31                                                $data[$c] = $filtre($data[$c]);
32                                }
33                        }
34                }
35                else
36                        $data = $filtre($data);
37        }
38        return $data;
39
40}
41
42/*Etablit le titre de l'objet*/
43function titre_objet_sel($objet, $contexte) {
44
45        $exceptions = charger_fonction('exceptions', 'inc');
46        $exception_titre = $exceptions('titre');
47        //Les exceptions du titre
48        if (!$titre = $contexte[$exception_titre[$objet]] and isset($contexte['titre']))
49                $titre = $contexte['titre'];
50        if (!$titre) {
51                if ($objet == 'document') {
52                        $f = explode('/', $contexte['fichier']);
53                        $titre = $f[1];
54                }
55                elseif ($objet) {
56                        $table_sql = table_objet_sql($objet);
57                        $tables = lister_tables_objets_sql();
58                        $titre_objet = _T($tables[$table_sql]['texte_objet']);
59                        if (isset($contexte['id_objet']))
60                                $id = $contexte['id_objet'];
61                        if ($objet = 'selection_objet' AND isset($contexte['id_selection_objet']))
62                                $id = $contexte['id_selection_objet'];
63                        $titre = $titre_objet . ' ' . $id;
64                }
65
66        }
67        return $titre;
68}
69
70/* Fournit les champs désirés d'un objet donné */
71function info_objet($objet, $id_objet = '', $champ = '*', $where = array()) {
72        include_spip('inc/filtres');
73        $exceptions = charger_fonction('exceptions', 'inc');
74        $exception_objet = $exceptions();
75        $exception_titre = $exceptions('titre');
76
77        //Les tables non conforme
78        if ($objet) {
79                include_spip('inc/pipelines_ecrire');
80                $ancien_objet = $objet;
81                $e = trouver_objet_exec($objet);
82
83                $objet = $e['type'];
84                $id_table_objet = $e['id_table_objet'];
85                // Pour les récalcitrants
86                if (!$objet) {
87                        $objet = $ancien_objet;
88                        $id_table_objet = 'id_' . $objet;
89                }
90                $table = table_objet_sql($objet);
91
92                if ($id_objet) {
93                        if (!$where)
94                                $where = array($id_table_objet . '=' . $id_objet);
95                        if ($champ == '*') {
96                                $data = sql_fetsel($champ, $table, $where);
97                        }
98                        else {
99                                if (isset($exception_titre[$objet])) {
100                                        $champ = $exception_titre[$objet];
101                                }
102                                $data = sql_getfetsel($champ, $table, $where);
103                        }
104
105                        $data = filtrer_champ($data);
106                }
107                else {
108                        $data = array();
109                        $sql = sql_select($champ, $table, $where);
110                        while ($d = sql_fetch($sql)) {
111
112                                if ($d)
113                                        $data[$d[$id_table_objet]] = filtrer_champ($d);
114                        }
115                }
116        }
117        else
118                $data = array();
119        return $data;
120
121}
122
123/* Fonction qui fournit le lien d'un objet*/
124function url_objet($id_objet, $objet, $titre = '', $url = '') {
125
126        if (!$titre AND !$url) {
127                $objet_sel = sql_fetsel('titre,url', 'spip_selection_objets', 'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet));
128                $url = $objet_sel['url'];
129                $titre = $objet_sel['titre'];
130        }
131
132        if (!$titre)
133                $titre = info_objet($objet, $id_objet, 'titre');
134        if (!$url)
135                $url = generer_url_entite($id_objet, $objet);
136
137        $lien = '<a href="' . $url . '" title="' . $titre . '">' . $titre . '</a>';
138        return $lien;
139}
140
141/*Fournit un tableau avec id_objet=>donnees_objet*/
142function tableau_objet($objet, $id_objet = '', $champs = '*', $where = array(), $filtrer = array(), $array_donnes = true) {
143
144        $d = info_objet($objet, $id_objet, $champs, $where);
145
146        //Les tables non conforme, faudrait inclure une pipeline
147        $exceptions = charger_fonction('exceptions', 'inc');
148        $exception_objet = $exceptions('objet');
149        if ($exception_objet[$objet]) {
150                $objet = $exception_objet[$objet];
151        }
152        $data = array();
153        if (is_array($d)) {
154                foreach ($d as $r) {
155                        //déterminer le titre
156                        if (!$r['titre'])
157                                $r['titre'] = titre_objet_sel($objet, $r);
158                        if (!$filtrer)
159                                $data[$r['id_' . $objet]] = $r;
160                        elseif (is_array($filtrer)) {
161                                $donnees = array();
162                                foreach ($filtrer as $c) {
163                                        if ($r[$c])
164                                                $donnees[$c] = $r[$c];
165                                }
166                                if ($array_donnes)
167                                        $data[$r['id_' . $objet]] = $donnees;
168                                else
169                                        $data[$r['id_' . $objet]] = implode(',', $donnees);
170                        }
171                }
172        }
173        return $data;
174}
175
176/* Assemble les données entre un objet sélectioné et son objet d'origine pour injection dans un modele choisit*/
177function generer_modele($id_objet, $objet = 'article', $fichier = 'modeles_selection_objet/defaut', $env = array(), $where = '') {
178        include_spip('inc/pipelines_ecrire');
179        include_spip('inc/utils');
180
181        //Quelques objets ne sont pas conforme, on adapte
182        $exceptions = charger_fonction('exceptions', 'inc');
183        $exception_objet = $exceptions();
184
185        if ($objet) {
186                $ancien_objet = $objet;
187                $e = trouver_objet_exec($objet);
188                $objet = $e['type'];
189                $id_table_objet = $e['id_table_objet'];
190                // Pour les récalcitrants
191                if (!$objet) {
192                        $objet = $ancien_objet;
193                        $id_table_objet = 'id_' . $objet;
194                }
195                $table = table_objet_sql($objet);
196
197                if (!$where)
198                        $where = $id_table_objet . '=' . $id_objet;
199                if (!$contexte = sql_fetsel('*', $table, $where))
200                        $contexte = array();
201
202        }
203        else
204                $contexte = array();
205
206        //Filtrer les champs vides
207        foreach ($env as $k => $v) {
208                if (!$v)
209                        unset($env[$k]);
210        }
211
212        if (!$cont = calculer_contexte())
213                $cont = array();
214        if (is_array($env))
215                $contexte = array_merge($cont, $contexte, $env);
216
217        $contexte['objet'] = $objet;
218        $contexte['id_objet'] = $id_objet;
219
220        //déterminer le titre
221        if (!$contexte['titre'])
222                $contexte['titre'] = titre_objet_sel($objet, $contexte);
223
224        //Les exceptions du titre
225        if (!$exception_titre[$objet]) {
226                $contexte['champ_titre'] = 'titre';
227        }
228        else {
229                $contexte['champ_titre'] = $exception_objet['titre'][$objet];
230        }
231
232        //Chercher le logo correpsondant
233        //Si il y a un logo Selection Objet
234        $chercher_logo = charger_fonction('chercher_logo', 'inc');
235        $logo = $chercher_logo($contexte['id_selection_objet'], 'id_selection_objet', 'on');
236        $contexte['logo_objet'] = $logo[0];
237        //sinon le logo de l'objet sélectionné
238        if (!$contexte['logo_objet']) {
239                $_id_objet = id_table_objet($objet);
240                $logo = $chercher_logo($id_objet, $_id_objet, 'on');
241                $contexte['logo_objet'] = $logo[0];
242        }
243        $fond = recuperer_fond($fichier, $contexte);
244
245        return $fond;
246}
247
248//donnele nom du type de lien
249function nom_type($type, $objet) {
250        include_spip('inc/config');
251        if (!$types = lire_config('selection_objet/type_liens_' . $objet, array()))
252                $types = lire_config('selection_objet/type_liens', array());
253
254        if (!$nom = _T($types[$type]))
255                $nom = $type;
256
257        return $nom;
258}
Note: See TracBrowser for help on using the repository browser.