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

Last change on this file since 114309 was 114309, checked in by pierrekuhn82@…, 7 months ago

Version 0.10.23 : Mise en page du code pour le rendre plus lisible.

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