source: spip-zone/_plugins_/autorite/trunk/inc/autoriser.php @ 113701

Last change on this file since 113701 was 113701, checked in by cedric@…, 20 months ago

r113492 corrigeait des indefinies mais en changeant aussi le resultat si la globale valait false par exemple

File size: 24.4 KB
Line 
1<?php
2
3// Ceci est une surcharge de inc/autoriser.php
4//
5// Voir le fichier fonds/cfg_autorite.html pour la definition des reglages
6// et bien sur "ecrire/?exec=cfg&cfg=autorite"
7
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10if (!defined('_DEBUG_AUTORISER')) define('_DEBUG_AUTORISER', false);
11$GLOBALS['autorite'] = @unserialize($GLOBALS['meta']['autorite']);
12$autorite_erreurs = array();
13
14// Compatibilite 1.92 : on a besoin de sql_fetch
15if (isset($GLOBALS['spip_version_code']) and $GLOBALS['spip_version_code'] < '1.93'
16and $f = charger_fonction('compat_autorite', 'inc'))
17    $f(array('sql_fetch','sql_count'));
18
19
20//
21// Les DEFINE
22//
23
24if (isset($GLOBALS['autorite']['statut_auteur_creation'])) {
25    if (defined('_STATUT_AUTEUR_CREATION'))
26        $autorite_erreurs[] = 'statut_auteur_creation';
27    else {
28        switch($GLOBALS['autorite']['statut_auteur_creation']) {
29            case 'visiteur':
30                if (!defined('_STATUT_AUTEUR_CREATION')) define('_STATUT_AUTEUR_CREATION', '6forum');
31            case 'redacteur':
32                if (!defined('_STATUT_AUTEUR_CREATION')) define('_STATUT_AUTEUR_CREATION', '1comite');
33            case 'admin':
34                if (!defined('_STATUT_AUTEUR_CREATION')) define('_STATUT_AUTEUR_CREATION', '0minirezo');
35        }
36    }
37}
38
39if (isset($GLOBALS['autorite']['statut_auteur_rubrique'])) {
40    if (defined('_STATUT_AUTEUR_RUBRIQUE'))
41        $autorite_erreurs[] = 'statut_auteur_rubrique';
42    else {
43        switch($GLOBALS['autorite']['statut_auteur_rubrique']) {
44            case '1':
45                if (!defined('_STATUT_AUTEUR_RUBRIQUE')) define('_STATUT_AUTEUR_RUBRIQUE', '0minirezo,1comite');
46            case '2':
47                if (!defined('_STATUT_AUTEUR_RUBRIQUE')) define('_STATUT_AUTEUR_RUBRIQUE', '0minirezo,1comite,6forum');
48        }
49    }
50}
51
52if (isset($GLOBALS['autorite']['statut_ignorer_admins_restreints']) and $GLOBALS['autorite']['statut_ignorer_admins_restreints'] == 'oui') {
53    if (defined('_ADMINS_RESTREINTS'))
54        $autorite_erreurs[] = 'ignorer_admins_restreints';
55    else
56        define('_ADMINS_RESTREINTS', false);
57}
58
59
60// Charger les versions *_dist des fonctions
61include_once _DIR_RESTREINT.'inc/autoriser.php';
62// si ca n'a pas ete fait et que l'on est dans une version ancienne de spip
63// definir _ID_WEBMESTRES
64if (!defined('_ID_WEBMESTRES')
65    and include_spip('inc/plugin')
66    and (!function_exists('spip_version_compare') or
67    spip_version_compare($GLOBALS['spip_version_branche'],"2.1.0-rc","<"))) {
68    define ('_ID_WEBMESTRES', '1'); // '1:5:90' a regler dans mes_options
69}
70
71
72//
73// Les FONCTIONS
74//
75
76##
77## une fonction qui gere les droits publieurs
78##
79
80if (isset($GLOBALS['autorite']['espace_publieur'])) {
81if (!function_exists('autorisation_publie_visiteur')) {
82    function autorisation_publie_visiteur($qui, $id_secteur) {
83        // espace publieur est un array(secteur1, secteur2), ou un id_secteur
84        if (
85            (is_array($GLOBALS['autorite']['espace_publieur'])
86            and !in_array($id_secteur,$GLOBALS['autorite']['espace_publieur']))
87        and
88            $id_secteur != $GLOBALS['autorite']['espace_publieur']
89        )
90            return false;
91
92        switch($qui['statut']) {
93            case '0minirezo':
94                break;
95            case '1comite':
96                if (isset($GLOBALS['autorite']['espace_publieur_redacteurs']))
97                return true;
98                break;
99            case '6forum':
100                if (isset($GLOBALS['autorite']['espace_publieur_visiteurs']))
101                return true;
102                break;
103        }
104        return false;
105    }
106    } else
107        $autorite_erreurs[] = 'autorisation_publie_visiteur';
108}
109
110##
111## une fonction qui gere les droits wiki
112##
113if (isset($GLOBALS['autorite']['espace_wiki'])) {
114    if (!function_exists('autorisation_wiki_visiteur')) {
115    function autorisation_wiki_visiteur($qui, $id_secteur) {
116        // espace_wiki est un array(secteur1, secteur2), ou un id_secteur
117        if (
118            (is_array($GLOBALS['autorite']['espace_wiki'])
119            and !in_array($id_secteur,$GLOBALS['autorite']['espace_wiki']))
120        and
121            $id_secteur != $GLOBALS['autorite']['espace_wiki']
122        )
123            return false;
124
125        switch($qui['statut']) {
126            case '0minirezo':
127            case '1comite':
128                if (isset($GLOBALS['autorite']['espace_wiki_redacteurs']))
129                    return true;
130                break;
131            case '6forum':
132                if (isset($GLOBALS['autorite']['espace_wiki_visiteurs']))
133                    return true;
134                break;
135            default:
136                if (isset($GLOBALS['autorite']['espace_wiki_anonyme']))
137                    return true;
138                break;
139        }
140        return false;
141    }
142    } else
143        $autorite_erreurs[] = 'autorisation_wiki_visiteur';
144}
145
146
147##
148## une fonction qui gere les droits wiki par mot clef
149##
150if (isset($GLOBALS['autorite']['espace_wiki_motsclef'])) {
151    if (!function_exists('autorisation_wiki_motsclef_visiteur')) {
152    function autorisation_wiki_motsclef_visiteur($qui, $id_article) {
153
154        //determine les mots clef affectés à l'article
155        if (intval($GLOBALS['spip_version_branche'])<3)
156          $s = spip_query("SELECT id_mot FROM spip_mots_articles WHERE id_article=".$id_article);
157        else
158          $s = spip_query("SELECT id_mot FROM spip_mots_liens WHERE objet='article' AND id_objet=".$id_article);
159
160        //obtient la liste des mots clefs affectés à l'article
161        while ( $r = sql_fetch($s) ) {
162            $array_mot[] = $r['id_mot'];
163        }
164
165        //aucun mot clef d'affecter à  l'article, rien à faire
166        if (is_null($array_mot))
167            return false;
168
169        //vérification que l'article possède un mot clef correspondant au staut du visiteur
170        switch($qui['statut']) {
171            case '0minirezo':
172            case '1comite':
173                if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_redacteurs'],$array_mot))
174                    return true;
175                break;
176            case '6forum':
177                if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_visiteurs'],$array_mot))
178                    return true;
179                break;
180            default:
181                if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_anonyme'],$array_mot))
182                    return true;
183                break;
184        }
185        return false;
186    }
187    } else
188        $autorite_erreurs[] = 'autorisation_wiki_motsclef_visiteur';
189}
190
191
192##
193## autoriser_article_modifier
194##
195if (isset($GLOBALS['autorite']['auteur_mod_article'])
196or isset($GLOBALS['autorite']['espace_wiki'])
197or isset($GLOBALS['autorite']['espace_wiki_motsclef'])
198or isset($GLOBALS['autorite']['redacteur_mod_article'])
199or false // autre possibilite de surcharge ?
200) {
201if (!function_exists('autoriser_article_modifier')) {
202function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
203    if (isset($GLOBALS['spip_version_branche']) and intval($GLOBALS['spip_version_branche'])<3)
204        $auteurs_articles = "spip_auteurs_articles WHERE id_article=";
205    else
206        $auteurs_articles = "spip_auteurs_liens WHERE objet='article' AND id_objet=";
207
208    $s = spip_query(
209    "SELECT id_rubrique,id_secteur,statut FROM spip_articles WHERE id_article="._q($id));
210    $r = sql_fetch($s);
211    include_spip('inc/auth');
212    if (!isset($GLOBALS['autorite']['espace_publieur']))
213    $a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt);
214    else {
215    if (!in_array($qui['statut'],array('1comite', '6forum')))
216    $a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt);
217    }
218    return
219        $a
220        or (
221            // Cas du wiki, on appelle la fonction qui verifie les droits wiki
222            isset($GLOBALS['autorite']['espace_wiki']) and $GLOBALS['autorite']['espace_wiki']
223            and autorisation_wiki_visiteur($qui, $r['id_secteur'])
224        )
225        or (
226            // Cas du wiki par mot clefs, on appelle la fonction qui verifie les droits wiki
227            isset($GLOBALS['autorite']['espace_wiki_motsclef']) and $GLOBALS['autorite']['espace_wiki_motsclef']
228            and autorisation_wiki_motsclef_visiteur($qui, _q($id))
229        )
230        or (
231            // auteur autorise a modifier son article
232            // (sauf si l'article est refuse ou l'auteur mis a la poubelle)
233            $GLOBALS['autorite']['auteur_mod_article']
234            and in_array($qui['statut'],
235                array('0minirezo', '1comite', '6forum'))
236            and in_array($r['statut'],
237                array('publie', 'prop', 'prepa', 'poubelle'))
238            and sql_fetch(spip_query("SELECT * FROM $auteurs_articles".intval($id)." AND id_auteur=".intval($qui['id_auteur'])))
239        )
240        or (
241            // un redacteur peut-il modifier un article propose ?
242            $GLOBALS['autorite']['redacteur_mod_article']
243            and in_array($qui['statut'], array('0minirezo', '1comite'))
244            and $r['statut']=='prop'
245        )
246        or (
247            // un auteur peut modifier son propre article lorsqu'il est proposé ou en cours de rédaction
248            in_array($qui['statut'], array('0minirezo', '1comite'))
249            and in_array($r['statut'], array('prop','prepa'))
250            and auteurs_article($id, "id_auteur=".$qui['id_auteur'])
251        );
252}
253if (!function_exists('autoriser_rubrique_creerarticledans')) {
254    function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {
255        return autoriser_voir_dist($faire, $type, $id, $qui, $opt);
256    }
257}
258} else
259    $autorite_erreurs[] = 'autoriser_article_modifier';
260}
261
262
263##
264## autoriser_rubrique_publierdans
265##
266if (isset($GLOBALS['autorite']['espace_wiki'])
267or isset($GLOBALS['autorite']['publierdans'])
268or false // autre possibilite de surcharge ?
269) {
270if (!function_exists('autoriser_rubrique_publierdans')) {
271function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt) {
272
273    // Si on est deja autorise en standard, dire 'OK'
274    if (!isset($GLOBALS['autorite']['publierdans'])
275        && autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt))
276            return true;
277
278    // Verifions qui a le droit
279    // 1 : webmestre
280    // 2 : admin complet
281    // 4 : admin restreint
282    // 8 : redacteur
283    // cas du redacteur : attention, il faut verifier
284    // aussi qu'il est l'auteur de l'objet publie...
285
286    if (($GLOBALS['autorite']['publierdans'] & 1)
287        && autoriser('webmestre', $type, $id, $qui, $opt))
288            return true;
289    if (($GLOBALS['autorite']['publierdans'] & 2)
290        && ($qui['statut'] == '0minirezo')
291        && (!$qui['restreint']))
292            return true;
293    if (($GLOBALS['autorite']['publierdans'] & 4)
294        && ($qui['statut'] == '0minirezo')
295        && ($qui['restreint'] AND $id AND in_array($id, $qui['restreint'])))
296            return true;
297    // Vérifier que le rédacteur·trice est bien l'auteur·e de l'objet
298    if (($GLOBALS['autorite']['publierdans'] & 8)
299        && ($qui['statut'] == '1comite')) {
300
301        // qui demande le changement de statut ?
302        $id_auteur  = $qui['id_auteur'];
303
304        // changement pour quel type d'objet?
305        $objet = _request('exec');
306        $cle_primaire = id_table_objet($objet);
307        $id_objet = _request($cle_primaire);
308       
309        //  qui est l'auteur de l'objet ?
310        $id_auteur_objet = sql_getfetsel('id_auteur', 'spip_auteurs_liens', "objet =".sql_quote($objet)." AND id_objet =".intval($id_objet));
311
312        // on peut vérifier maintenant…
313        if ($id_auteur == $id_auteur_objet) {
314            return true;
315        }
316    }
317    // Sinon, verifier si la rubrique est ouverte aux publieurs
318    // et si on est bien enregistre
319    if (isset($GLOBALS['autorite']['espace_publieur'])) {
320        $s = spip_query(
321        "SELECT id_secteur FROM spip_rubriques WHERE id_rubrique="._q($id));
322        $r = sql_fetch($s);
323
324        if (autorisation_publie_visiteur($qui, $r['id_secteur'])
325        and ($qui['statut'])
326        )
327            return true;
328
329    }
330    // Sinon, verifier si la rubrique est wiki
331    // et si on est bien enregistre (sauf cas de creation anonyme explicitement autorisee)
332    if (isset($GLOBALS['autorite']['espace_wiki'])) {
333        $s = spip_query(
334        "SELECT id_secteur FROM spip_rubriques WHERE id_rubrique="._q($id));
335        $r = sql_fetch($s);
336
337        if (autorisation_wiki_visiteur($qui, $r['id_secteur'])
338        and (
339            isset($GLOBALS['autorite']['espace_wiki_rubrique_anonyme'])
340            or $qui['statut']
341        ))
342            return true;
343    }
344
345    // par defaut, NIET
346    return false;
347}
348} else
349    $autorite_erreurs[] = 'autoriser_rubrique_publierdans';
350}
351
352
353##
354## autoriser_rubrique_creerrubriquedans
355##
356if (isset($GLOBALS['autorite']['interdire_creer_secteur'])
357or isset($GLOBALS['autorite']['interdire_creer_sousrub'])
358or false // autre possibilite de surcharge ?
359) {
360if (!function_exists('autoriser_rubrique_creerrubriquedans')) {
361function autoriser_rubrique_creerrubriquedans($faire, $type, $id, $qui, $opt) {
362    if ($id == 0
363    and isset($GLOBALS['autorite']['interdire_creer_secteur']))
364        return
365            $GLOBALS['autorite']['interdire_creer_rub_sauf_webmestre']
366            and autoriser('webmestre');
367
368    if ($id != 0
369    and isset($GLOBALS['autorite']['interdire_creer_sousrub']))
370        return
371            $GLOBALS['autorite']['interdire_creer_rub_sauf_webmestre']
372            and autoriser('webmestre');
373
374    return
375        autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt);
376}
377} else
378    $autorite_erreurs[] = 'autoriser_rubrique_creerrubriquedans';
379}
380
381
382
383##
384## autoriser_auteur_modifier
385##
386if (isset($GLOBALS['autorite']['auteur_mod_email'])
387or false // autre possibilite de surcharge ?
388) {
389if (!function_exists('autoriser_auteur_modifier')) {
390function autoriser_auteur_modifier($faire, $type, $id, $qui, $opt) {
391    if (isset($GLOBALS['autorite']['auteur_mod_email'])) {
392        unset($opt['email']);
393    }
394    return autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt);
395}
396} else
397    $autorite_erreurs[] = 'autoriser_auteur_modifier';
398}
399
400
401##
402## autoriser_modererforum
403##
404if (!function_exists('autoriser_modererforum')) {
405function autoriser_modererforum($faire, $type, $id, $qui, $opt) {
406    if (intval($GLOBALS['spip_version_branche'])<3)
407        $auteurs_articles = "spip_auteurs_articles WHERE id_article=";
408    else
409        $auteurs_articles = "spip_auteurs_liens WHERE objet='article' AND id_objet=";
410
411    return
412        ($qui['statut']=='0minirezo')
413        or  (
414            $GLOBALS['autorite']['auteur_modere_forum']
415            and $type == 'article'
416            and in_array($qui['statut'], array('0minirezo', '1comite'))
417            and sql_fetch(spip_query("SELECT * FROM $auteurs_articles".intval($id)." AND id_auteur=".intval($qui['id_auteur'])))
418        );
419}
420}
421
422##
423## autoriser_modererpetition
424##
425if (!function_exists('autoriser_modererpetition')) {
426function autoriser_modererpetition($faire, $type, $id, $qui, $opt) {
427    if (isset($GLOBALS['spip_version_branche']) and intval($GLOBALS['spip_version_branche'])<3)
428        $auteurs_articles = "spip_auteurs_articles WHERE id_article=";
429    else
430        $auteurs_articles = "spip_auteurs_liens WHERE objet='article' AND id_objet=";
431    return
432        ($qui['statut']=='0minirezo')
433        or  (
434            $GLOBALS['autorite']['auteur_modere_petition']
435            and $type == 'article'
436            and in_array($qui['statut'], array('0minirezo', '1comite'))
437            and sql_fetch(spip_query("SELECT * FROM $auteurs_articles".intval($id)." AND id_auteur=".intval($qui['id_auteur'])))
438        );
439}
440}
441
442##
443## autoriser_voirstats
444##
445if (isset($GLOBALS['autorite']['redacteurs_lire_stats'])
446or false // autre possibilite de surcharge ?
447) {
448if (!function_exists('autoriser_voirstats')) {
449function autoriser_voirstats($faire, $type, $id, $qui, $opt) {
450    return
451        $GLOBALS['autorite']['redacteurs_lire_stats']
452            ? in_array($qui['statut'], array('0minirezo', '1comite'))
453            : $qui['statut'] == '0minirezo';
454}
455} else
456    $autorite_erreurs[] = 'autoriser_voirstats';
457}
458
459
460// Autoriser a modifier un groupe de mots $id
461// y compris en ajoutant/modifiant les mots lui appartenant
462// https://code.spip.net/@autoriser_groupemots_modifier
463##
464## autoriser_groupemots_modifier
465##
466if (isset($GLOBALS['autorite']['editer_mots'])
467or false // autre possibilite de surcharge ?
468) {
469if (!function_exists('autoriser_groupemots_modifier')) {
470function autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt) {
471    return (
472        $qui['statut'] == '0minirezo'
473        and (
474            !$qui['restreint']
475            or
476            $GLOBALS['autorite']['editer_mots'] >= 1
477        )
478    ) or (
479        $qui['statut'] == '1comite'
480        and $GLOBALS['autorite']['editer_mots'] >= 2
481    );
482}
483    # signaler un risque de bug avec un autoriser_mot_modifier personnalise
484    if (function_exists('autoriser_mot_modifier'))
485        $autorite_erreurs[] = 'autoriser_mot_modifier';
486
487// la config d'autorite sur le groupe de mot doit être idem sur les mots
488    function autoriser_mot_modifier($faire, $type, $id, $qui, $opt) {
489        return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
490    }
491    function autoriser_mot_creer($faire, $type, $id, $qui, $opt) {
492        return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
493    }
494
495} else
496    $autorite_erreurs[] = 'autoriser_groupemots_modifier';
497}
498
499##
500## Modifier un forum ?
501## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
502## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
503##
504if (isset($GLOBALS['autorite']['editer_forums'])
505or false // autre possibilite de surcharge ?
506) {
507if (!function_exists('autoriser_forum_modifier')) {
508function autoriser_forum_modifier($faire, $type, $id, $qui, $opt) {
509
510    // Le webmestre
511    if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums'] >= 1
512    and autoriser('webmestre', $type, $id, $qui, $opt))
513        return true;
514
515    // Les admins
516    if (
517        isset($GLOBALS['autorite']['editer_forums'])
518        and $GLOBALS['autorite']['editer_forums'] >= 2
519        and $qui['statut'] == '0minirezo'
520        and !$qui['restreint']
521    )
522        return true;
523
524
525
526    // Les admins restreint pour les articles attachés à une rubrique dont ils sont admins
527    if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums'] >= 2 and $qui['statut'] == '0minirezo') {
528          $id=intval($id); // ?
529          if (isset($GLOBALS['spip_version_branche']) and intval($GLOBALS['spip_version_branche']) < 3 ){
530          $id_rubrique = sql_getfetsel("id_rubrique", "spip_forum", "id_forum=$id");
531          if (!$id_rubrique and ($id_article = sql_getfetsel("id_article", "spip_forum", "id_forum=$id") ))
532              $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_article");
533          if (!$id_rubrique and ($id_breve = sql_getfetsel("id_breve", "spip_forum", "id_forum=$id")))
534              $id_rubrique = sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_breve");
535          } else {
536              $objet = sql_getfetsel("objet", "spip_forum", "id_forum=$id");
537              $id_objet = sql_getfetsel("id_objet", "spip_forum", "id_forum=$id AND objet='$objet'");
538              if ($objet == "rubrique")
539              $id_rubrique=$id_objet;
540              else if ($objet == "article")
541              $id_rubrique=sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_objet");
542              else if ($objet == "breve")
543              $id_rubrique=sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_objet");
544          }
545          return ($id_rubrique and in_array ($id_rubrique, $qui['restreint']));
546    }
547
548
549
550    // L'auteur du message (enregistre')
551    // 2 = avec une periode de grace d'une heure
552    // 3 = ad vitam
553    if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums'] >= 3
554    and isset($qui['id_auteur'])) {
555        $q = "SELECT id_forum FROM spip_forum WHERE id_forum="._q($id)." AND id_auteur="._q($qui['id_auteur']);
556        if ($GLOBALS['autorite']['editer_forums'] == 3)
557            $q .= " AND date_heure > DATE_SUB(NOW(), INTERVAL 1 HOUR)";
558        $s = spip_query($q);
559        if (sql_count($s))
560            return true;
561    }
562
563    // par defaut
564    return autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt);
565
566}
567} else
568    $autorite_erreurs[] = 'autoriser_forum_modifier';
569}
570
571##
572## Modifier une signature ?
573## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
574## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
575##
576if (isset($GLOBALS['autorite']['editer_signatures'])
577or false // autre possibilite de surcharge ?
578) {
579if (!function_exists('autoriser_signature_modifier')) {
580function autoriser_signature_modifier($faire, $type, $id, $qui, $opt) {
581
582    // Le webmestre
583    if (isset($GLOBALS['autorite']['editer_signatures']) and $GLOBALS['autorite']['editer_signatures'] >= 1
584    and autoriser('webmestre', $type, $id, $qui, $opt)) {
585        return true;
586    }
587
588    // Les admins
589    if (
590        isset($GLOBALS['autorite']['editer_signatures'])
591        and $GLOBALS['autorite']['editer_signatures'] >= 2
592        and $qui['statut'] == '0minirezo'
593        and !$qui['restreint']
594    ) {
595        return true;
596    }
597
598    // par defaut
599    return autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt);
600}
601} else
602    $autorite_erreurs[] = 'autoriser_signature_modifier';
603}
604
605
606##
607## autoriser_configurer (pages de configuration)
608##
609if (isset($GLOBALS['autorite']['configurer'])
610or isset($GLOBALS['autorite']['configurer_plugin'])
611) {
612if (!function_exists('autoriser_configurer')) {
613function autoriser_configurer($faire, $type, $id, $qui, $opt) {
614    // TODO:
615    // cas particulier : configurer les plugins doit etre bloque
616    // en mode 'webmestre', sinon on pourrait desactiver autorite.
617    // mais comment faire pour ne pas bloquer quelqu'un qui installe
618    // ce plugin alors qu'il est id_auteur > 1 ?
619    if (in_array($type, array('plugins', 'admin_plugin'))) {
620        if (isset($GLOBALS['autorite']['configurer_plugin']) and $GLOBALS['autorite']['configurer_plugin'] == 'webmestre') {
621            return autoriser('webmestre');
622        }
623    }
624
625    if (isset($GLOBALS['autorite']['configurer']) and $GLOBALS['autorite']['configurer'] == 'webmestre') {
626        return autoriser('webmestre');
627    } else {
628        return autoriser('x'); // autorisation par defaut
629    }
630}
631} else
632    $autorite_erreurs[] = 'autoriser_configurer';
633}
634
635##
636## autoriser_sauvegarder (faire un backup partiel ou complet)
637##
638if (isset($GLOBALS['autorite']['sauvegarder'])
639or false // autre possibilite de surcharge ?
640) {
641if (!function_exists('autoriser_sauvegarder')) {
642function autoriser_sauvegarder($faire, $type, $id, $qui, $opt) {
643
644    if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder'] == 'webmestre')
645        return autoriser('webmestre');
646
647    // admins y compris restreints
648    if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder'] == 'minirezo')
649        return
650            $qui['statut'] == '0minirezo';
651
652    // version normale
653    if (isset($GLOBALS['autorite']['sauvegarder']) and ($GLOBALS['autorite']['sauvegarder'] == ''
654        or $GLOBALS['autorite']['sauvegarder'] == 'admin') # jusque v0.7 de ce plugin
655    )
656        return
657            $qui['statut'] == '0minirezo'
658            and !$qui['restreint'];
659}
660} else
661    $autorite_erreurs[] = 'autoriser_sauvegarder';
662}
663
664##
665## autoriser_detruire (vider la base de donnees)
666##
667if (isset($GLOBALS['autorite']['detruire'])
668or false // autre possibilite de surcharge ?
669) {
670if (!function_exists('autoriser_detruire')) {
671function autoriser_detruire($faire, $type, $id, $qui, $opt) {
672
673    if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire'] == 'webmestre')
674        return autoriser('webmestre');
675
676    if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire'] == 'non')
677        return false;
678
679    // Par defaut, idem configuration
680    return autoriser('configurer');
681}
682} else
683    $autorite_erreurs[] = 'autoriser_detruire';
684}
685
686##
687## autoriser_ecrire
688##
689if (isset($GLOBALS['autorite']['redacteurs_ecrire'])
690or false // autre possibilite de surcharge ?
691) {
692if (!function_exists('autoriser_ecrire')) {
693function autoriser_ecrire($faire, $type, $id, $qui, $opt) {
694    return
695        isset($GLOBALS['autorite']['redacteurs_ecrire'])
696            ? $qui['statut'] == '0minirezo'
697            : in_array($qui['statut'], array('0minirezo', '1comite'));
698}
699} else
700    $autorite_erreurs[] = 'autoriser_ecrire';
701}
702
703if ($autorite_erreurs) { $GLOBALS['autorite_erreurs'] = $autorite_erreurs;}
704
705
706?>
Note: See TracBrowser for help on using the repository browser.