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

Last change on this file since 115819 was 115819, checked in by jluc@…, 3 months ago

à défaut de ne pas diffuser la liste des auteurs avec leurs mails dans le core, on le propose dans autorite - cf https://core.spip.net/issues/3928

File size: 24.2 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
479if (!function_exists ('autoriser_auteurs_voir')) {
480        // semble pas testée par spip mais on s'en sert pour les autres
481        function autoriser_auteurs_voir ($faire, $type, $id, $qui, $opt) {
482                if (isset($GLOBALS['autorite']['redacteurs_voir_auteurs'])
483                        and $GLOBALS['autorite']['redacteurs_voir_auteurs']) {
484                        echo 'val='.$GLOBALS['autorite']['redacteurs_voir_auteurs'].'!<br/>';
485                        return in_array ($qui['statut'], array('0minirezo', '1comite'));
486                } else
487                        return ($qui['statut'] == '0minirezo');
488        }
489} else {
490        $autorite_erreurs[] = 'autoriser_auteurs_voir';
491}
492
493if (!function_exists ('autoriser_auteurs_menu')) {
494        // présenter ou non l'entrée "auteurs" dans le menu
495        function autoriser_auteurs_menu ($faire, $type, $id, $qui, $opt) {
496                return autoriser_auteurs_voir ($faire, $type, $id, $qui, $opt);
497        }
498} else {
499        $autorite_erreurs[] = 'autoriser_auteurs_voir';
500}
501if (!function_exists ('autoriser_auteur_voir')) {
502        // Accès aux fiches d'infos persos des auteurs
503        function autoriser_auteur_voir($faire, $type, $id, $qui, $opt) {
504                return ($qui['id_auteur'] == $id)
505                        or autoriser_auteurs_voir ($faire, $type, $id, $qui, $opt);
506        }
507} else {
508        $autorite_erreurs[] = 'autoriser_auteurs_voir';
509}
510
511// Autoriser a modifier un groupe de mots $id
512// y compris en ajoutant/modifiant les mots lui appartenant
513// https://code.spip.net/@autoriser_groupemots_modifier
514##
515## autoriser_groupemots_modifier
516##
517if (
518        isset($GLOBALS['autorite']['editer_mots'])
519        or false // autre possibilite de surcharge ?
520) {
521        if (!function_exists('autoriser_groupemots_modifier')) {
522                function autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt) {
523                        return (
524                                $qui['statut'] == '0minirezo'
525                                and (
526                                        !$qui['restreint']
527                                        or
528                                        $GLOBALS['autorite']['editer_mots'] >= 1
529                                )
530                        ) or (
531                                $qui['statut'] == '1comite'
532                                and $GLOBALS['autorite']['editer_mots'] >= 2
533                        );
534                }
535                # signaler un risque de bug avec un autoriser_mot_modifier personnalise
536                if (function_exists('autoriser_mot_modifier')) {
537                        $autorite_erreurs[] = 'autoriser_mot_modifier';
538                }
539
540                // la config d'autorite sur le groupe de mot doit être idem sur les mots
541                function autoriser_mot_modifier($faire, $type, $id, $qui, $opt) {
542                        return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
543                }
544                function autoriser_mot_creer($faire, $type, $id, $qui, $opt) {
545                        return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
546                }
547
548        } else {
549                $autorite_erreurs[] = 'autoriser_groupemots_modifier';
550        }
551}
552
553##
554## Modifier un forum ?
555## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
556## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
557##
558if (
559        isset($GLOBALS['autorite']['editer_forums'])
560        or false // autre possibilite de surcharge ?
561) {
562        if (!function_exists('autoriser_forum_modifier')) {
563                function autoriser_forum_modifier($faire, $type, $id, $qui, $opt) {
564
565                        // Le webmestre
566                        if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums'] >= 1
567                        and autoriser('webmestre', $type, $id, $qui, $opt))
568                                return true;
569
570                        // Les admins
571                        if (
572                                isset($GLOBALS['autorite']['editer_forums'])
573                                and $GLOBALS['autorite']['editer_forums'] >= 2
574                                and $qui['statut'] == '0minirezo'
575                                and !$qui['restreint']
576                        ) {
577                                return true;
578                        }
579
580                        // Les admins restreint pour les articles attachés à une rubrique dont ils sont admins
581                        if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums'] >= 2 and $qui['statut'] == '0minirezo') {
582                                  $id=intval($id); // ?
583                                  if (isset($GLOBALS['spip_version_branche']) and intval($GLOBALS['spip_version_branche']) < 3 ){
584                                  $id_rubrique = sql_getfetsel("id_rubrique", "spip_forum", "id_forum=$id");
585                                  if (!$id_rubrique and ($id_article = sql_getfetsel("id_article", "spip_forum", "id_forum=$id") ))
586                                          $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_article");
587                                  if (!$id_rubrique and ($id_breve = sql_getfetsel("id_breve", "spip_forum", "id_forum=$id")))
588                                          $id_rubrique = sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_breve");
589                                  } else {
590                                          $objet = sql_getfetsel("objet", "spip_forum", "id_forum=$id");
591                                          $id_objet = sql_getfetsel("id_objet", "spip_forum", "id_forum=$id AND objet='$objet'");
592                                          if ($objet == "rubrique")
593                                          $id_rubrique=$id_objet;
594                                          else if ($objet == "article")
595                                          $id_rubrique=sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_objet");
596                                          else if ($objet == "breve")
597                                          $id_rubrique=sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_objet");
598                                  }
599                                  return ($id_rubrique and in_array ($id_rubrique, $qui['restreint']));
600                        }
601
602                        // L'auteur du message (enregistre')
603                        // 2 = avec une periode de grace d'une heure
604                        // 3 = ad vitam
605                        if (
606                                isset($GLOBALS['autorite']['editer_forums'])
607                                and $GLOBALS['autorite']['editer_forums'] >= 3
608                                and isset($qui['id_auteur'])
609                        ) {
610                                $q = "SELECT id_forum FROM spip_forum WHERE id_forum="._q($id)." AND id_auteur="._q($qui['id_auteur']);
611                                if ($GLOBALS['autorite']['editer_forums'] == 3) {
612                                        $q .= " AND date_heure > DATE_SUB(NOW(), INTERVAL 1 HOUR)";
613                                }
614                                $s = spip_query($q);
615                                if (sql_count($s)) {
616                                        return true;
617                                }
618                        }
619
620                        // par defaut
621                        return autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt);
622
623                }
624        } else {
625                $autorite_erreurs[] = 'autoriser_forum_modifier';
626        }
627}
628
629##
630## Modifier une signature ?
631## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
632## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
633##
634if (
635        isset($GLOBALS['autorite']['editer_signatures'])
636        or false // autre possibilite de surcharge ?
637) {
638        if (!function_exists('autoriser_signature_modifier')) {
639                function autoriser_signature_modifier($faire, $type, $id, $qui, $opt) {
640
641                        // Le webmestre
642                        if (
643                                isset($GLOBALS['autorite']['editer_signatures'])
644                                and $GLOBALS['autorite']['editer_signatures'] >= 1
645                                and autoriser('webmestre', $type, $id, $qui, $opt)
646                        ) {
647                                return true;
648                        }
649
650                        // Les admins
651                        if (
652                                isset($GLOBALS['autorite']['editer_signatures'])
653                                and $GLOBALS['autorite']['editer_signatures'] >= 2
654                                and $qui['statut'] == '0minirezo'
655                                and !$qui['restreint']
656                        ) {
657                                return true;
658                        }
659
660                        // par defaut
661                        return autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt);
662                }
663        } else {
664                $autorite_erreurs[] = 'autoriser_signature_modifier';
665        }
666}
667
668
669##
670## autoriser_configurer (pages de configuration)
671##
672if (
673        isset($GLOBALS['autorite']['configurer'])
674        or isset($GLOBALS['autorite']['configurer_plugin'])
675) {
676        if (!function_exists('autoriser_configurer')) {
677                function autoriser_configurer($faire, $type, $id, $qui, $opt) {
678                        // TODO:
679                        // cas particulier : configurer les plugins doit etre bloque
680                        // en mode 'webmestre', sinon on pourrait desactiver autorite.
681                        // mais comment faire pour ne pas bloquer quelqu'un qui installe
682                        // ce plugin alors qu'il est id_auteur > 1 ?
683                        if (in_array($type, array('plugins', 'admin_plugin'))) {
684                                if (isset($GLOBALS['autorite']['configurer_plugin']) and $GLOBALS['autorite']['configurer_plugin'] == 'webmestre') {
685                                        return autoriser('webmestre');
686                                }
687                        }
688
689                        if (isset($GLOBALS['autorite']['configurer']) and $GLOBALS['autorite']['configurer'] == 'webmestre') {
690                                return autoriser('webmestre');
691                        } else {
692                                return autoriser('x'); // autorisation par defaut
693                        }
694                }
695        } else {
696                $autorite_erreurs[] = 'autoriser_configurer';
697        }
698}
699
700##
701## autoriser_sauvegarder (faire un backup partiel ou complet)
702##
703if (
704        isset($GLOBALS['autorite']['sauvegarder'])
705        or false // autre possibilite de surcharge ?
706) {
707        if (!function_exists('autoriser_sauvegarder')) {
708                function autoriser_sauvegarder($faire, $type, $id, $qui, $opt) {
709
710                        if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder'] == 'webmestre') {
711                                return autoriser('webmestre');
712                        }
713
714                        // admins y compris restreints
715                        if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder'] == 'minirezo') {
716                                return $qui['statut'] == '0minirezo';
717                        }
718
719                        // version normale
720                        if (
721                                isset($GLOBALS['autorite']['sauvegarder'])
722                                and ($GLOBALS['autorite']['sauvegarder'] == ''
723                                or $GLOBALS['autorite']['sauvegarder'] == 'admin') # jusque v0.7 de ce plugin
724                        ) {
725                                return $qui['statut'] == '0minirezo' and !$qui['restreint'];
726                        }
727                }
728        } else {
729                $autorite_erreurs[] = 'autoriser_sauvegarder';
730        }
731}
732
733##
734## autoriser_detruire (vider la base de donnees)
735##
736if (
737        isset($GLOBALS['autorite']['detruire'])
738        or false // autre possibilite de surcharge ?
739) {
740        if (!function_exists('autoriser_detruire')) {
741                function autoriser_detruire($faire, $type, $id, $qui, $opt) {
742
743                        if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire'] == 'webmestre') {
744                                return autoriser('webmestre');
745                        }
746
747                        if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire'] == 'non') {
748                                return false;
749                        }
750
751                        // Par defaut, idem configuration
752                        return autoriser('configurer');
753                }
754        } else {
755                $autorite_erreurs[] = 'autoriser_detruire';
756        }
757}
758
759##
760## autoriser_ecrire
761##
762if (
763        isset($GLOBALS['autorite']['redacteurs_ecrire'])
764        or false // autre possibilite de surcharge ?
765) {
766        if (!function_exists('autoriser_ecrire')) {
767                function autoriser_ecrire($faire, $type, $id, $qui, $opt) {
768                        return
769                                isset($GLOBALS['autorite']['redacteurs_ecrire'])
770                                        ? $qui['statut'] == '0minirezo'
771                                        : in_array($qui['statut'], array('0minirezo', '1comite'));
772                }
773        } else {
774                $autorite_erreurs[] = 'autoriser_ecrire';
775        }
776}
777
778
779if ($autorite_erreurs) {
780        $GLOBALS['autorite_erreurs'] = $autorite_erreurs;
781}
Note: See TracBrowser for help on using the repository browser.