source: spip-zone/_plugins_/diogene/diogene/trunk/diogene_autoriser.php @ 97999

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

Nettoyage

File size: 12.9 KB
Line 
1<?php
2/**
3 * Plugin Diogene
4 *
5 * Auteurs :
6 * b_b
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 *
9 * Distribue sous licence GNU/GPL
10 *
11 * Autorisations spécifiques à Diogene
12 *
13 **/
14
15if (!defined('_ECRIRE_INC_VERSION')) {
16        return;
17}
18
19function diogene_autoriser() {
20}
21
22/**
23 * Autorisation à modifier un template de formulaire (Diogene)
24 *
25 * @param unknown_type $faire
26 * @param unknown_type $type
27 * @param unknown_type $id
28 * @param unknown_type $qui
29 * @param unknown_type $opt
30 */
31function autoriser_diogene_modifier_dist($faire, $type, $id, $qui, $opt) {
32        return autoriser('configurer', '', '', $qui, $opt);
33}
34
35/**
36 * Autorisation a modifier le logo d'un template de formulaire (Diogene)
37 *
38 * @param string $faire L'action
39 * @param string $type Le type d'objet
40 * @param int $id L'identifiant numérique de l'objet
41 * @param array $qui Les informations de session de l'auteur
42 * @param array $opt Des options
43 * @return boolean true/false
44 */
45function autoriser_diogene_iconifier_dist($faire, $quoi, $id, $qui, $opts) {
46        return (($qui['statut'] == '0minirezo') and !$qui['restreint']);
47}
48
49/**
50 * Autorisation de creer dans le template
51 *
52 * @param string $faire L'action
53 * @param string $type Le type d'objet
54 * @param int $id L'identifiant numérique de l'objet
55 * @param array $qui Les informations de session de l'auteur
56 * @param array $opt Des options
57 * @return boolean true/false
58 */
59function autoriser_diogene_creerdans_dist($faire, $type, $id, $qui, $opt) {
60        $diogene = sql_fetsel('*', 'spip_diogenes', 'id_diogene = '.intval($id));
61        if ($qui['statut'] != '0minirezo'
62                and $qui['statut']
63                and $qui['statut'] <= $diogene['statut_auteur']) {
64                if (in_array($diogene['objet'], array('article','emballe_media'))
65                        and $diogene['nombre_attente'] > 0) {
66                        $nb_articles = sql_countsel('spip_articles as art LEFT JOIN spip_auteurs_liens as lien ON lien.objet="article" AND art.id_article=lien.id_objet', 'lien.id_auteur='.intval($qui['id_auteur']).' AND art.statut NOT IN ("poubelle","publie","refuse") AND art.id_secteur='.intval($diogene['id_secteur']));
67                        if (intval($nb_articles) >= intval($diogene['nombre_attente'])) {
68                                return false;
69                        }
70                }
71        }
72        return
73                $qui['statut']
74                and $id
75                and ($qui['statut'] <= $diogene['statut_auteur']);
76}
77
78/**
79 * Autorisation d'utiliser dans le template
80 *
81 * @param string $faire L'action
82 * @param string $type Le type d'objet
83 * @param int $id L'identifiant numérique de l'objet
84 * @param array $qui Les informations de session de l'auteur
85 * @param array $opt Des options
86 * @return boolean true/false
87 */
88function autoriser_diogene_utiliser_dist($faire, $type, $id, $qui, $opt) {
89        $diogene = sql_fetsel('*', 'spip_diogenes', 'id_diogene='.intval($id));
90        return
91                $qui['statut']
92                and $id
93                and ($qui['statut'] <= $diogene['statut_auteur']);
94}
95
96/**
97 * Autoriser a creer un article dans la rubrique $id
98 * Surcharge de SPIP
99 *
100 * Changement par rapport à la fonction par défaut :
101 * Si on a le plugin pages, on autorise à publier dans la rubrique 0
102 * Si on est dans un diogene et que l'on a mis un nombre > 0 comme limite d'objet en attente de publication,
103 * on vérifie que l'on n'ai pas atteint cette limite
104 *
105 * @param string $faire L'action
106 * @param string $type Le type d'objet
107 * @param int $id L'identifiant numérique de l'objet
108 * @param array $qui Les informations de session de l'auteur
109 * @param array $opt Des options
110 * @return boolean true/false
111 *
112 * http://doc.spip.org/@autoriser_rubrique_creerarticledans_dist
113 */
114if (!function_exists('autoriser_rubrique_creerarticledans')) {
115        function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {
116                if (_DIR_PLUGIN_PAGES && ($id < 1)) {
117                        return $qui['statut'] && autoriser('voir', 'rubrique', $id);
118                } else {
119                        if ($qui['statut'] != '0minirezo') {
120                                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id));
121                                $nb_attente = sql_getfetsel('nombre_attente', 'spip_diogenes', 'id_secteur='.intval($id_secteur).' AND objet IN ("article","emballe_media")');
122                                if ($nb_attente > 0) {
123                                        $nb_articles = sql_countsel('spip_articles as art LEFT JOIN spip_auteurs_liens as lien ON lien.objet="article" AND art.id_article=lien.id_objet', 'lien.id_auteur='.intval($qui['id_auteur']).' AND art.statut NOT IN ("poubelle","publie","refuse") AND art.id_secteur='.intval($id_secteur));
124                                        if (intval($nb_articles) >= intval($nb_attente)) {
125                                                return false;
126                                        }
127                                }
128                        }
129                        return $qui['statut'] && autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt);
130                }
131        }
132}
133
134/**
135 * Permet de créer un article dans une rubrique
136 * Surcharge de SPIP
137 *
138 * Ne concerne que la création et non la publication
139 * voir : rubrique_creerarticledans_dist() dans ecrire/inc/autoriser
140 *
141 * @param string $faire L'action
142 * @param string $type Le type d'objet
143 * @param int $id L'identifiant numérique de l'objet
144 * @param array $qui Les informations de session de l'auteur
145 * @param array $opt Des options
146 * @return boolean true/false
147 */
148if (!function_exists('autoriser_rubrique_voir')) {
149        function autoriser_rubrique_voir($faire, $type, $id, $qui, $opt) {
150                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id));
151
152                /**
153                 * Cas des pages
154                 */
155                if ($id == '-1') {
156                        $id_secteur = 0;
157                }
158                $statut = sql_getfetsel('statut_auteur', 'spip_diogenes', 'id_secteur='.intval($id_secteur));
159
160                if (!$statut) {
161                        $statut = '0minirezo';
162                }
163
164                return ($qui['statut'] and ($qui['statut'] <= $statut));
165        }
166}
167
168/**
169 * Permet de publier dans une rubrique
170 * Surcharge de SPIP
171 *
172 * Concerne la publication d'articles dans une rubrique
173 * On vérifie que l'auteur à les droits dans le template
174 * voir : autoriser_rubrique_publierdans_dist() dans ecrire/inc/autoriser
175 * voir aussi pour les articles : http://trac.rezo.net/trac/spip/browser/spip/ecrire/action/editer_article.php#L174
176 *
177 * @param string $faire L'action
178 * @param string $type Le type d'objet
179 * @param int $id L'identifiant numérique de l'objet
180 * @param array $qui Les informations de session de l'auteur
181 * @param array $opt Des options
182 * @return boolean true/false
183 */
184if (!function_exists('autoriser_rubrique_publierdans')) {
185        function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt) {
186                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id));
187                if ($id == 0) {
188                        $id_secteur=0;
189                }
190
191                $statut_diogene = sql_getfetsel('statut_auteur_publier', 'spip_diogenes', 'id_secteur='.intval($id_secteur));
192                $statut = $statut_diogene ? $statut_diogene : '0minirezo';
193
194                return ($qui['statut'] and $id
195                        and ($qui['statut'] <= $statut)) or autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt);
196        }
197}
198
199/**
200 * Permet de modifier l'article dont on est l'auteur et que l'on peut publier nous même
201 * Surcharge de SPIP
202 *
203 * On peut modifier un article s'il existe
204 * On peut modifier un article dans tous les cas si on est admin (comme dans SPIP)
205 * On peut modifier un article si on est auteur de l'article dans tous les cas sauf si
206 * on demande de changer le statut à publier et que la configuration du diogène ne le permet pas
207 * (on utilise autoriser_rubrique_publierdans dans ce cas)
208 *
209 * @param string $faire L'action
210 * @param string $type Le type d'objet
211 * @param int $id L'identifiant numérique de l'objet
212 * @param array $qui Les informations de session de l'auteur
213 * @param array $opt Des options
214 * @return boolean true/false
215 */
216if (!function_exists('autoriser_article_modifier')) {
217        function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
218                $r = sql_fetsel('id_secteur,id_rubrique,statut', 'spip_articles', 'id_article='.intval($id));
219                if (!$r) {
220                        return false;
221                }
222
223                return
224                        in_array($qui['statut'], array('0minirezo')) or
225                        (
226                                (autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
227                                and auteurs_article($id, 'id_auteur='.intval($qui['id_auteur'])))
228                                or (
229                                        (!isset($opt['statut']) or $opt['statut']!=='publie')
230                                        and in_array($qui['statut'], array('0minirezo', '1comite'))
231                                        and in_array($r['statut'], array('prop','prepa', 'publie'))
232                                        and auteurs_article($id, 'id_auteur='.$qui['id_auteur'])
233                                )
234                        );
235        }
236}
237
238if (!function_exists('autoriser_article_instituer')) {
239        function autoriser_article_instituer($faire, $type, $id, $qui, $opt) {
240                $statut = sql_getfetsel('statut', 'spip_articles', 'id_article='.intval($id));
241                if (isset($opt['statut']) and $opt['statut'] == $statut) {
242                        return true;
243                }
244                return autoriser_article_modifier($faire, $type, $id, $qui, $opt);
245        }
246}
247/**
248 * Autoriser a creer un site dans la rubrique $id
249 * Surcharge de SPIP : http://doc.spip.org/@autoriser_rubrique_creersitedans_dist
250 *
251 * @param string $faire L'action
252 * @param string $type Le type d'objet
253 * @param int $id L'identifiant numérique de l'objet
254 * @param array $qui Les informations de session de l'auteur
255 * @param array $opt Des options
256 * @return boolean true/false
257 */
258if (!function_exists('autoriser_rubrique_creersitedans')) {
259        function autoriser_rubrique_creersitedans($faire, $type, $id, $qui, $opt) {
260                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id));
261                $statut = sql_getfetsel('statut_auteur', 'spip_diogenes', 'id_secteur='.intval($id_secteur));
262
263                return
264                        $id
265                        and autoriser('voir', 'rubrique', $id)
266                        and $GLOBALS['meta']['activer_sites'] != 'non'
267                        and (($qui['statut'] <= $statut)
268                                or ($qui['statut']=='0minirezo'
269                                        or ($GLOBALS['meta']['proposer_sites'] >= ($qui['statut']=='1comite' ? 1 : 2))
270                                )
271                        );
272        }
273}
274
275/**
276 * Si le plugin champs extras 2 est activé, on utilise une fonction d'autorisation
277 * d'affichage des saisies de champs extras
278 *
279 * Cette fonction vérifie tout d'abord s'il existe un diogène associé au type d'objet en cours et
280 * au secteur en cours et si oui :
281 * -* on vérifie s'il y a une configuration liée aux champs extras sur ce diogène
282 * -* on retourne false s'il est nécessaire de cacher ces champs extras
283 * -* on retourne la fonction de base de cette autorisation dans le cas contraire
284 *
285 * @param string $faire L'action
286 * @param string $type Le type d'objet
287 * @param int $id L'identifiant numérique de l'objet
288 * @param array $qui Les informations de session de l'auteur
289 * @param array $opt Des options
290 * @return boolean true/false
291 */
292if (defined('_DIR_PLUGIN_CEXTRAS') && _DIR_PLUGIN_CEXTRAS) {
293        if (!function_exists('autoriser_modifierextra')) {
294                function autoriser_modifierextra($faire, $quoi, $id, $qui, $opts) {
295                        /**
296                         * On recherche un parent pour trouver le secteur qui nous permettra de trouver le diogene s'il existe
297                         */
298                        if (is_numeric($opts['contexte']['id_parent'])
299                                or is_numeric(_request('id_parent'))
300                                or is_array(_request('parents'))) {
301                                $id_parent = $opts['contexte']['id_parent'] ? $opts['contexte']['id_parent'] : (_request('id_parent') ? _request('id_parent') : table_valeur('0', _request('parents', array())));
302                                if ($opts['type'] == 'article') {
303                                        $objets = array('emballe_media', 'article');
304                                } else {
305                                        $objets = array($opts['type']);
306                                }
307                                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_parent));
308                                $diogene_parent = sql_fetsel('*', 'spip_diogenes', 'id_secteur='.intval($id_secteur).' AND '.sql_in('objet', $objets));
309                                if (is_array(unserialize($diogene_parent['options_complements']))
310                                        and ($complements = unserialize($diogene_parent['options_complements']))
311                                        and is_array(unserialize($complements['cextras_enleves']))) {
312                                        foreach (unserialize($complements['cextras_enleves']) as $enleve) {
313                                                if ($opts['champ'] == $enleve) {
314                                                        return false;
315                                                }
316                                        }
317                                }
318                        }
319                        return autoriser_modifierextra_dist($faire, $quoi, $id, $qui, $opts);
320                }
321        }
322}
323
324/**
325 * Autorisation à traduire un article (spécifique à Diogène)
326 *
327 * Est autorisé à traduire un article :
328 * -* Dans le cas général, un auteur qui a le droit de créer un article dans la même rubrique que
329 * l'article en question;
330 * -* Si on est dans un diogène, on se réfère à la configuration :
331 * -** Par défaut, l'autorisation précedente;
332 * -** Si dans la configuration du template, seulement l'auteur  ou un des auteurs originaux est sélectionné,
333 * on modifie le résultat à la configuration
334 * -** Si dans la configuration du template, aucune traduction possible est sélectionnée, on retourne false;
335 *
336 * On retourne toujours faux si :
337 * -* Uniquement une seule langue dans le site;
338 *
339 * @param unknown_type $faire
340 * @param unknown_type $quoi
341 * @param unknown_type $id
342 * @param unknown_type $qui
343 * @param unknown_type $opts
344 */
345function autoriser_article_traduire_dist($faire, $quoi, $id, $qui, $opts) {
346        $r = sql_fetsel('id_secteur,id_rubrique', 'spip_articles', 'id_article='.sql_quote($id));
347        include_spip('inc/auth'); // pour auteurs_article si espace public
348        return
349                (autoriser('creerarticledans', 'rubrique', $r['id_rubrique'], $qui, $opts)
350                        and in_array($r['statut'], array('prop','prepa', 'publie'))
351                        and auteurs_article($id, 'id_auteur='.$qui['id_auteur'])
352                )
353                or in_array($qui['statut'], array('0minirezo'));
354}
Note: See TracBrowser for help on using the repository browser.