source: spip-zone/_plugins_/trad-lang/trunk/tradlang_autoriser.php @ 120875

Last change on this file since 120875 was 97004, checked in by kent1@…, 5 years ago

PSR SPIP

File size: 9.8 KB
Line 
1<?php
2/**
3 * Trad-lang v2
4 * Plugin SPIP de traduction de fichiers de langue
5 * © Florent Jugla, Fil, kent1
6 *
7 * Fichier des autorisations spécifiques du plugin
8 *
9 * @package SPIP\Tradlang\Autorisations
10 */
11
12
13if (!defined('_ECRIRE_INC_VERSION')) {
14        return;
15}
16
17/**
18 * Fonction pour le pipeline, n'a rien a effectuer
19 *
20 * @return
21 */
22function tradlang_autoriser() {
23}
24
25/**
26 * Renvoie la liste des auteurs ou des statuts autorises pour une action donnee
27 *
28 * @param string $action
29 *              L'action que l'on souhaite faire
30 * @param boolean $utiliser_defaut [optional]
31 * @return array, boolean
32 */
33function definir_autorisations_tradlang($action, $utiliser_defaut = true) {
34        $aut = null;
35
36        switch (strtolower($action)) {
37                case 'configurer':
38                        $define = (defined('_TRADLANG_AUTORISATION_CONFIGURER')) ? _TRADLANG_AUTORISATION_CONFIGURER : false;
39                        break;
40                case 'modifier':
41                        $define = (defined('_TRADLANG_AUTORISATION_MODIFIER')) ? _TRADLANG_AUTORISATION_MODIFIER : '0minirezo';
42                        break;
43                case 'voir':
44                        $define = (defined('_TRADLANG_AUTORISATION_VOIR')) ? _TRADLANG_AUTORISATION_VOIR : false;
45                        break;
46        }
47
48        if ($define) {
49                $liste = explode(':', $define);
50                if (in_array('webmestre', $liste)) {
51                        $aut['auteur'] = explode(':', _ID_WEBMESTRES);
52                } elseif (in_array('0minirezo', $liste)) {
53                        $aut['statut'] = array('0minirezo');
54                } elseif (in_array('1comite', $liste)) {
55                        $aut['statut'] = array('0minirezo', '1comite');
56                } else {
57                        $aut['auteur'] = $liste;
58                }
59                return $aut;
60        }
61
62        return false;
63}
64
65/**
66 * Autorisation de configurer et d'administrer trad-lang
67 * Permet de :
68 * - importer un nouveau module de langue
69 * - créer une nouvelle version dans une langue
70 * - synchroniser les fichiers de langue avec la base
71 * - traduire des locutions
72 *
73 * @param string $faire
74 * @param string $type
75 * @param int $id
76 * @param array $qui
77 * @param array $opt
78 * @return boolean
79 */
80function autoriser_tradlang_configurer_dist($faire, $type, $id, $qui, $opt) {
81        $autorise = false;
82        $utiliser_defaut = true;
83
84        if (!function_exists('lire_config')) {
85                include_spip('inc/config');
86        }
87
88        $type = lire_config('tradlang/autorisations/configurer_type');
89        if ($type) {
90                switch ($type) {
91                        case 'webmestre':
92                                // Webmestres uniquement
93                                $autorise = ($qui['webmestre']=='oui');
94                                break;
95                        case 'par_statut':
96                                // Traitement spécifique pour la valeur 'tous'
97                                if (in_array('tous', lire_config('tradlang/autorisations/configurer_statuts', array('0minirezo')))) {
98                                        return true;
99                                }
100                                // Autorisation par statut
101                                $autorise = in_array($qui['statut'], lire_config('tradlang/autorisations/configurer_statuts', array()));
102                                break;
103                        case 'par_auteur':
104                                // Autorisation par id d'auteurs
105                                $autorise = in_array($qui['id_auteur'], lire_config('tradlang/autorisations/configurer_auteurs', array()));
106                                break;
107                }
108                if ($autorise == true) {
109                        return $autorise;
110                }
111                $utiliser_defaut = false;
112        }
113
114        /**
115         * Si pas de CFG ou pas autorise dans le cfg => on teste les define
116         */
117        $liste = definir_autorisations_tradlang('configurer', $utiliser_defaut);
118        if ($liste) {
119                if ($liste['statut']) {
120                        $autorise = in_array($qui['statut'], $liste['statut']);
121                } elseif ($liste['auteur']) {
122                        $autorise = in_array($qui['id_auteur'], $liste['auteur']);
123                }
124                return $autorise;
125        } else {
126                /**
127                 * Si vraiment on n'a rien, on utilise une fonction par défaut
128                 */
129                return autoriser('configurer', 'lang');
130        }
131}
132
133/**
134 * Autorisation de modification des locution dans tradlang
135 *
136 * @param string $faire
137 * @param string $type
138 * @param int $id
139 * @param array $qui
140 * @param array $opt
141 * @return boolean
142 */
143function autoriser_tradlang_modifier_dist($faire, $type, $id, $qui, $opt) {
144        $autorise = false;
145        $utiliser_defaut = true;
146
147        if ($qui['webmestre'] == 'oui') {
148                return true;
149        }
150        /**
151         * Retourner false si c'est une chaîne de la langue mère
152         */
153        if (intval($id) > 0) {
154                $infos_chaine = sql_fetsel('lang,module', 'spip_tradlangs', 'id_tradlang = ' . intval($id));
155                $lang_mere = sql_getfetsel('lang_mere', 'spip_tradlang_modules', 'module = ' . sql_quote($infos_chaine['module']));
156                if ($infos_chaine['lang'] == $lang_mere) {
157                        return false;
158                }
159        }
160
161        /**
162         * Si on est autoriser à configurer tradlang, on est autorisé à modifier la chaîne
163         */
164        if (autoriser_tradlang_configurer_dist($faire, $type, $id, $qui, $opt)) {
165                return autoriser_tradlang_configurer_dist($faire, $type, $id, $qui, $opt);
166        }
167
168        if (!function_exists('lire_config')) {
169                include_spip('inc/config');
170        }
171
172        $type = lire_config('tradlang/modifier_type');
173        if ($type) {
174                switch ($type) {
175                        case 'webmestre':
176                                // Webmestres uniquement
177                                $autorise = ($qui['webmestre']=='oui');
178                                break;
179                        case 'par_statut':
180                                // Traitement spécifique pour la valeur 'tous'
181                                if (in_array('tous', lire_config('tradlang/modifier_statuts', array()))) {
182                                        return true;
183                                }
184                                // Autorisation par statut
185                                $autorise = in_array($qui['statut'], lire_config('tradlang/modifier_statuts', array('0minirezo')));
186                                break;
187                        case 'par_auteur':
188                                // Autorisation par id d'auteurs
189                                $autorise = in_array($qui['id_auteur'], lire_config('tradlang/modifier_auteurs', array()));
190                                break;
191                }
192                if ($autorise == true) {
193                        return $autorise;
194                }
195
196                $utiliser_defaut = false;
197        }
198
199        // Si $utiliser_defaut = true, on utilisera les valeurs par défaut
200        // Sinon on ajoute la possibilité de régler par define
201        $liste = definir_autorisations_tradlang('modifier', $utiliser_defaut);
202        if ($liste['statut']) {
203                $autorise = in_array($qui['statut'], $liste['statut']);
204        } elseif ($liste['auteur']) {
205                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
206        }
207        return $autorise;
208}
209
210/**
211 * Autorisation de modification des modules dans tradlang
212 * Utilisée aussi par le crayon d'édition multiple
213 *
214 * @param string $faire
215 * @param string $type
216 * @param int $id
217 * @param array $qui
218 * @param array $opt
219 * @return boolean
220 */
221function autoriser_tradlangmodule_modifier_dist($faire, $type, $id, $qui, $opt) {
222        $autorise = false;
223        $utiliser_defaut = true;
224
225        /**
226         * Si on est autoriser à configurer tradlang, on est autorisé à modifier la chaîne
227         */
228        if (autoriser_tradlang_configurer_dist($faire, $type, $id, $qui, $opt)) {
229                return autoriser_tradlang_configurer_dist($faire, $type, $id, $qui, $opt);
230        }
231
232        if (!function_exists('lire_config')) {
233                include_spip('inc/config');
234        }
235
236        $type = lire_config('tradlang/modifier_type');
237        if ($type) {
238                switch ($type) {
239                        case 'webmestre':
240                                // Webmestres uniquement
241                                $autorise = ($qui['webmestre']=='oui');
242                                break;
243                        case 'par_statut':
244                                // Traitement spécifique pour la valeur 'tous'
245                                if (in_array('tous', lire_config('tradlang/modifier_statuts', array()))) {
246                                        return true;
247                                }
248                                // Autorisation par statut
249                                $autorise = in_array($qui['statut'], lire_config('tradlang/modifier_statuts', array('0minirezo')));
250                                break;
251                        case 'par_auteur':
252                                // Autorisation par id d'auteurs
253                                $autorise = in_array($qui['id_auteur'], lire_config('tradlang/modifier_auteurs', array()));
254                                break;
255                }
256                if ($autorise == true) {
257                        return $autorise;
258                }
259
260                $utiliser_defaut = false;
261        }
262
263        // Si $utiliser_defaut = true, on utilisera les valeurs par défaut
264        // Sinon on ajoute la possibilité de régler par define
265        $liste = definir_autorisations_tradlang('modifier', $utiliser_defaut);
266        if ($liste['statut']) {
267                $autorise = in_array($qui['statut'], $liste['statut']);
268        } elseif ($liste['auteur']) {
269                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
270        }
271        return $autorise;
272}
273
274/**
275 * Autorisation de voir l'interface de tradlang
276 *
277 * @param string $faire
278 * @param string $type
279 * @param int $id
280 * @param array $qui
281 * @param array $opt
282 * @return boolean
283 */
284function autoriser_tradlang_voir_dist($faire, $type, $id, $qui, $opt) {
285        $autorise = false;
286        $utiliser_defaut = true;
287
288        if (autoriser_tradlang_modifier_dist($faire, $type, $id, $qui, $opt)) {
289                return autoriser_tradlang_modifier_dist($faire, $type, $id, $qui, $opt);
290        }
291
292        if (!function_exists('lire_config')) {
293                include_spip('inc/config');
294        }
295
296        $type = lire_config('tradlang/voir_type');
297        if ($type) {
298                switch ($type) {
299                        case 'webmestre':
300                                // Webmestres uniquement
301                                $autorise = ($qui['webmestre']=='oui');
302                                break;
303                        case 'par_statut':
304                                // Traitement spécifique pour la valeur 'tous'
305                                if (in_array('tous', lire_config('tradlang/voir_statuts', array()))) {
306                                        return true;
307                                }
308                                // Autorisation par statut
309                                $autorise = in_array($qui['statut'], lire_config('tradlang/voir_statuts', array('0minirezo', '1comite')));
310                                break;
311                        case 'par_auteur':
312                                // Autorisation par id d'auteurs
313                                $autorise = in_array($qui['id_auteur'], lire_config('tradlang/voir_auteurs', array()));
314                                break;
315                }
316                if ($autorise == true) {
317                        return $autorise;
318                }
319
320                $utiliser_defaut = false;
321        }
322
323        /**
324         * Si pas de CFG ou pas autorise dans le cfg => on teste les define
325         */
326        $liste = definir_autorisations_tradlang('voir', $utiliser_defaut);
327        if ($liste) {
328                if ($liste['statut']) {
329                        $autorise = in_array($qui['statut'], $liste['statut']);
330                } elseif ($liste['auteur']) {
331                        $autorise = in_array($qui['id_auteur'], $liste['auteur']);
332                }
333                return $autorise;
334        } else {
335                /**
336                 * Si vraiment on n'a rien, on utilise une fonction par défaut
337                 */
338                return autoriser('voir', 'lang');
339        }
340}
341
342/**
343 * Autorisation à créer un module de langue
344 * Renvoit false, pour l'instant on force l'usage de salvatore
345 *
346 * @param string $faire
347 * @param string $type
348 * @param int $id
349 * @param array $qui
350 * @param array $opt
351 * @return boolean false
352 */
353function autoriser_tradlangmodule_creer_dist($faire, $type, $id, $qui, $opt) {
354        return false;
355}
356
357/**
358 * Autorisation à créer une chaine de langue
359 * Renvoit false, pour l'instant on force l'usage de salvatore
360 *
361 * @param string $faire
362 * @param string $type
363 * @param int $id
364 * @param array $qui
365 * @param array $opt
366 * @return boolean false
367 */
368function autoriser_tradlang_creer_dist($faire, $type, $id, $qui, $opt) {
369        return false;
370}
Note: See TracBrowser for help on using the repository browser.