source: spip-zone/_plugins_/interface_traduction_objets/trunk/interface_traduction_objets_pipelines.php

Last change on this file was 119646, checked in by abelass@…, 7 weeks ago

compatible spip3.3

File size: 7.4 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Interface de traduction pour objets
4 *
5 * @plugin     Interface de traduction pour objets
6 * @copyright  2019 - 2020
7 * @author     Rainer Müller
8 * @licence    GNU/GPL
9 * @package    SPIP\Interface_traduction_objets\Pipelines
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16/**
17 * Permet de compléter ou modifier le résultat de la compilation d’un squelette donné.
18 *
19 * @param array $flux
20 *   Les données du pipeline
21 *
22 * @return array
23 *   Les données du pipeline
24 */
25function interface_traduction_objets_recuperer_fond($flux) {
26        $contexte = $flux['args']['contexte'];
27        $fond = $flux['args']['fond'];
28
29        // Enlever le lien traduction dans le formulaire traduire
30        if ($fond == 'formulaires/traduire') {
31                $flux['data']['texte'] = preg_replace('/(<div\sclass="new_trad)([^<]|<.+>.*<\/.+>)+(<\/div>)/i', '', $flux['data']['texte']);
32        }
33
34        //Insertion des onglets de langue
35        if (strpos($fond, 'prive/squelettes/contenu/') !== false and
36                $objet = _request('exec') and
37                $objet_exec = trouver_objet_exec($objet) and
38                $table_objet = $objet_exec['table_objet_sql'] and
39                $trouver_table = charger_fonction('trouver_table', 'base') and
40                $desc = $trouver_table($table_objet) and
41                isset($desc['field']['lang']) and
42                isset($desc['field']['id_trad']) and
43                isset($desc['field']['langue_choisie']) and
44                $id_table_objet = $objet_exec['id_table_objet'] and
45                $id_objet = $contexte[$id_table_objet] and
46                $fond == 'prive/squelettes/contenu/' . $objet and
47                $config = explode(',' ,$GLOBALS['meta']['desactiver_interface_traduction']) and
48                !in_array($table_objet, $config)
49        ) {
50                $langues_dispos = explode(',', $GLOBALS['meta']['langues_multilingue']);
51                $select = ['id_trad', 'lang', $id_table_objet];
52
53                $id_parent_table = '';
54                if (isset($desc['field']['id_rubrique'])) {
55                        if ($objet != 'rubrique') {
56                                $id_parent_table = 'id_rubrique';
57                        }
58                        else {
59                                $id_parent_table = 'id_parent';
60                        }
61                        $select[] = $id_parent_table;
62                }
63
64                $donnees_objet = sql_fetsel(
65                        $select,
66                        $table_objet,
67                        $id_table_objet . '=' . $contexte[$id_table_objet]);
68
69                $lang_objet = $donnees_objet['lang'];
70                $id_trad = $donnees_objet['id_trad'];
71                $langues_traduites = [];
72
73                if ($id_trad > 0) {
74                        $langues_traduites[$lang_objet] = $id_objet;
75                        $traductions = sql_allfetsel(
76                                'lang,' . $id_table_objet,
77                                $table_objet,
78                                'id_trad=' . $id_trad . ' AND ' . $id_table_objet . '!=' . $id_objet);
79
80                        foreach ($traductions AS $traduction) {
81                                $langues_traduites[$traduction['lang']] = $traduction[$id_table_objet];
82                        }
83                }
84                else {
85                        $id_trad = $id_objet;
86                }
87
88                $contexte['objet'] = $objet;
89                $contexte['id_objet'] = $id_objet;
90
91                // Si secteur par langue, on établit l'id_parent.
92                if (test_plugin_actif('secteur_langue')) {
93                        $contexte['id_parent'] = isset($donnees_objet['id_rubrique']) ?
94                                $donnees_objet['id_rubrique'] :
95                                (isset($donnees_objet['id_parent']) ? $donnees_objet['id_parent'] : '');
96                }
97                $contexte['id_table_objet'] = $id_table_objet;
98                $contexte['langues_dispos'] = $langues_dispos;
99                $contexte['lang_objet'] = $lang_objet;
100                $contexte['id_trad'] = $id_trad;
101                $contexte['langues_traduites'] = $langues_traduites;
102
103
104                $barre_langue = recuperer_fond("prive/inclure/barre_traductions_objet", $contexte, array('ajax' => true));
105                $flux['data']['texte'] = str_replace('</h1>', '</h1>' . $barre_langue, $flux['data']['texte']);
106        }
107
108        // Liste compacte des objets traduits
109        if ($exec = _request('exec') and
110                $exec != 'recherche' and
111                strpos($fond, 'prive/objets/liste/') !== false and
112                $segments = explode('/', $fond) and
113                $objets = $segments[3] and
114                $objet = objet_type($objets) and
115                $exec != $objet and
116                $table_objet_sql = table_objet_sql($objet) and
117                $id_table_objet = id_table_objet($objet) and
118                $tables_spip = lister_tables_spip() and
119                isset($tables_spip[$table_objet_sql]) and
120                $trouver_table = charger_fonction('trouver_table', 'base') and
121                $desc = $trouver_table($table_objet_sql) and
122                isset($desc['field']['lang']) and
123                isset($desc['field']['id_trad']) and
124                isset($desc['field']['langue_choisie']) and
125                $config = explode(',' ,$GLOBALS['meta']['desactiver_liste_compacte']) and
126                !in_array($table_objet_sql, $config)) {
127
128                // Détermine si la liste est de type sections.
129                if (test_plugin_actif('secteur_langue') and isset($contexte['id_rubrique'])) {
130                        $contexte['type'] = 'sections';
131                }
132
133                // S'il existe un squelette compacte pour l'objet on le prend.
134                if (find_in_path('prive/objets/liste/compacte/' . $objets . '.html')) {
135                        $liste_compacte = recuperer_fond('prive/objets/liste/compacte/' . $objets, $contexte, ['ajax'=>'oui']);
136                }
137                // Sinon on prend le générique.
138                else {
139                        $contexte['objets'] = $objets;
140                        $contexte['objet'] = $objet;
141                        $contexte['table_objet_sql'] = $table_objet_sql;
142                        $contexte['id_table_objet'] = $id_table_objet;
143                        $contexte['champs'] = $desc['field'];
144                        $contexte['voir'] = _request('voir');
145
146
147                        /*
148                        * Affichage de champs supplémentaires
149                        */
150
151                        // Les auteurs liés s'il y en a en moins un.
152                        $auteur = sql_getfetsel('id_auteur', 'spip_auteurs_liens', 'objet LIKE' . sql_quote($objet));
153                        if ($auteur) {
154                                $contexte['champ_auteur'] = TRUE;
155                        }
156
157                        // Existence d'un champ date.
158                        $champ_date = '';
159                        if (isset($desc['date']) and $desc['date']) {
160                                $champ_date = $desc['date'];
161                        } elseif (isset($desc['field']['date'])) {
162                                $champ_date = 'date';
163                        }
164                        if ($champ_date) {
165                                $contexte['champ_date'] = $champ_date;
166                        }
167
168                        // Existence d'un champ rang.
169                        if (isset($desc['field']['rang'])) {
170                                $contexte['champ_rang'] = 'rang';
171                        }
172
173                        $liste_compacte = recuperer_fond('prive/objets/liste/objets_compacte', $contexte, ['ajax'=>'oui']);
174                }
175                $flux['texte'] = $liste_compacte;
176        }
177
178        return $flux;
179}
180
181/**
182 * Ajoute des contenus dans la partie <head> des pages de l’espace privé. Il fonctionne comme le pipeline insert_head.
183 *
184 * @param array $flux
185 *   Les données du pipeline
186 *
187 * @return array
188 *   Les données du pipeline
189 */
190function interface_traduction_objets_header_prive($flux) {
191        $flux .= '<link rel="stylesheet" href="' . find_in_path('css/interface_traduction_objets_styles.css') . '" type="text/css" media="all" />';
192
193        return $flux;
194}
195
196/*Ajoute la langue de traduction dans le chargement du formulaire edition*/
197function interface_traduction_objets_formulaire_charger($flux) {
198        $form = $flux['args']['form'];
199        $segments = explode('_', $form);
200
201        if ($segments[0] == 'editer' and
202                _request('new') == 'oui') {
203
204                if (!$flux['data']['lang_dest'] = _request('lang_dest') and $id_parent = _request('id_parent')) {
205                        $flux['data']['lang_dest'] = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . $id_parent);
206                }
207
208                        // pour afficher la liste des trad sur la base de l'id_trad en base
209                if (isset($flux['data']['lang_dest'])) {
210                        $flux['data']['_hidden'] .= '<input type="hidden" name="lang_dest" value="' . $flux['data']['lang_dest'] . '"/>';
211                }
212        }
213
214        if ($form == 'traduire') {
215                // Rendre le changement de la langue possible aunsi que le changement de la référence des traductions
216                $flux['data']['_langue'] = $flux['data']['langue'];
217                $flux['data']['editable'] = TRUE;
218        }
219
220
221        return $flux;
222}
223
224/*Prise en compte de la langue de traduction dans le traitement du formulaire d'édition d'un objet*/
225function interface_traduction_objets_pre_insertion($flux) {
226        if ($lang = _request('lang_dest')) {
227                $flux['data']['lang'] = $lang;
228                $flux['data']['langue_choisie'] = 'oui';
229                if (_request('lier_trad')) {
230                        $flux['data']['id_trad'] = _request('lier_trad');
231                }
232        }
233        return $flux;
234}
Note: See TracBrowser for help on using the repository browser.