Changeset 114309 in spip-zone for _plugins_/autorite


Ignore:
Timestamp:
Mar 3, 2019, 10:30:12 AM (8 months ago)
Author:
pierrekuhn82@…
Message:

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

Location:
_plugins_/autorite/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/autorite/trunk/inc/autoriser.php

    r114308 r114309  
    1313
    1414// Compatibilite 1.92 : on a besoin de sql_fetch
    15 if (isset($GLOBALS['spip_version_code']) and $GLOBALS['spip_version_code'] < '1.93'
    16 and $f = charger_fonction('compat_autorite', 'inc'))
    17     $f(array('sql_fetch','sql_count'));
    18 
     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}
    1921
    2022//
    2123// Les DEFINE
    2224//
    23 
    2425if (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     }
     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        }
    3738}
    3839
    3940if (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     }
     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        }
    5051}
    5152
    5253if (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);
     54        if (defined('_ADMINS_RESTREINTS')) {
     55                $autorite_erreurs[] = 'ignorer_admins_restreints';
     56        } else {
     57                define('_ADMINS_RESTREINTS', false);
     58        }
    5759}
    5860
     
    6264// si ca n'a pas ete fait et que l'on est dans une version ancienne de spip
    6365// definir _ID_WEBMESTRES
    64 if (!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
     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
    6973}
    7074
     
    7983
    8084if (isset($GLOBALS['autorite']['espace_publieur'])) {
    81 if (!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';
     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        }
    108113}
    109114
     
    112117##
    113118if (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';
     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        }
    144150}
    145151
     
    149155##
    150156if (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';
     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        }
    189196}
    190197
     
    193200## autoriser_article_modifier
    194201##
    195 if (isset($GLOBALS['autorite']['auteur_mod_article'])
    196 or isset($GLOBALS['autorite']['espace_wiki'])
    197 or isset($GLOBALS['autorite']['espace_wiki_motsclef'])
    198 or isset($GLOBALS['autorite']['redacteur_mod_article'])
    199 or false // autre possibilite de surcharge ?
    200 ) {
    201 if (!function_exists('autoriser_article_modifier')) {
    202 function 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             isset($GLOBALS['autorite']['auteur_mod_article']) and $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             isset($GLOBALS['autorite']['redacteur_mod_article']) and $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 }
    253 if (!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';
     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        }
    260269}
    261270
     
    264273## autoriser_rubrique_publierdans
    265274##
    266 if (isset($GLOBALS['autorite']['espace_wiki'])
    267 or isset($GLOBALS['autorite']['publierdans'])
    268 or false // autre possibilite de surcharge ?
    269 ) {
    270 if (!function_exists('autoriser_rubrique_publierdans')) {
    271 function 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';
     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        }
    350362}
    351363
     
    354366## autoriser_rubrique_creerrubriquedans
    355367##
    356 if (isset($GLOBALS['autorite']['interdire_creer_secteur'])
    357 or isset($GLOBALS['autorite']['interdire_creer_sousrub'])
    358 or false // autre possibilite de surcharge ?
    359 ) {
    360 if (!function_exists('autoriser_rubrique_creerrubriquedans')) {
    361 function 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';
     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        }
    379393}
    380394
     
    384398## autoriser_auteur_modifier
    385399##
    386 if (isset($GLOBALS['autorite']['auteur_mod_email'])
    387 or false // autre possibilite de surcharge ?
    388 ) {
    389 if (!function_exists('autoriser_auteur_modifier')) {
    390 function 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';
     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        }
    398414}
    399415
     
    403419##
    404420if (!function_exists('autoriser_modererforum')) {
    405 function 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 }
     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        }
    420437}
    421438
     
    424441##
    425442if (!function_exists('autoriser_modererpetition')) {
    426 function 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 }
     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        }
    440458}
    441459
     
    443461## autoriser_voirstats
    444462##
    445 if (isset($GLOBALS['autorite']['redacteurs_lire_stats'])
    446 or false // autre possibilite de surcharge ?
    447 ) {
    448 if (!function_exists('autoriser_voirstats')) {
    449 function 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';
     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        }
    457477}
    458478
     
    464484## autoriser_groupemots_modifier
    465485##
    466 if (isset($GLOBALS['autorite']['editer_mots'])
    467 or false // autre possibilite de surcharge ?
    468 ) {
    469 if (!function_exists('autoriser_groupemots_modifier')) {
    470 function 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';
     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        }
    497520}
    498521
     
    502525## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
    503526##
    504 if (isset($GLOBALS['autorite']['editer_forums'])
    505 or false // autre possibilite de surcharge ?
    506 ) {
    507 if (!function_exists('autoriser_forum_modifier')) {
    508 function 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';
     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        }
    569596}
    570597
     
    574601## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
    575602##
    576 if (isset($GLOBALS['autorite']['editer_signatures'])
    577 or false // autre possibilite de surcharge ?
    578 ) {
    579 if (!function_exists('autoriser_signature_modifier')) {
    580 function 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';
     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        }
    603635}
    604636
     
    607639## autoriser_configurer (pages de configuration)
    608640##
    609 if (isset($GLOBALS['autorite']['configurer'])
    610 or isset($GLOBALS['autorite']['configurer_plugin'])
    611 ) {
    612 if (!function_exists('autoriser_configurer')) {
    613 function 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';
     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        }
    633667}
    634668
     
    636670## autoriser_sauvegarder (faire un backup partiel ou complet)
    637671##
    638 if (isset($GLOBALS['autorite']['sauvegarder'])
    639 or false // autre possibilite de surcharge ?
    640 ) {
    641 if (!function_exists('autoriser_sauvegarder')) {
    642 function 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';
     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        }
    662700}
    663701
     
    665703## autoriser_detruire (vider la base de donnees)
    666704##
    667 if (isset($GLOBALS['autorite']['detruire'])
    668 or false // autre possibilite de surcharge ?
    669 ) {
    670 if (!function_exists('autoriser_detruire')) {
    671 function 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';
     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        }
    684726}
    685727
     
    687729## autoriser_ecrire
    688730##
    689 if (isset($GLOBALS['autorite']['redacteurs_ecrire'])
    690 or false // autre possibilite de surcharge ?
    691 ) {
    692 if (!function_exists('autoriser_ecrire')) {
    693 function 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 
    703 if ($autorite_erreurs) { $GLOBALS['autorite_erreurs'] = $autorite_erreurs;}
    704 
    705 
    706 ?>
     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}
  • _plugins_/autorite/trunk/paquet.xml

    r113701 r114309  
    22        prefix="autorite"
    33        categorie="auteur"
    4         version="0.10.22"
     4        version="0.10.23"
    55        etat="stable"
    66        compatibilite="[1.9.2;3.2.*]"
  • _plugins_/autorite/trunk/plugin.xml

    r113701 r114309  
    2020        <auteur>Fil, James, Superyms</auteur>
    2121        <licence>GNU/LGPL</licence>
    22         <version>0.10.22</version>
     22        <version>0.10.23</version>
    2323        <etat>stable</etat>
    2424        <description>
Note: See TracChangeset for help on using the changeset viewer.