Changeset 31406 in spip-zone


Ignore:
Timestamp:
Sep 8, 2009, 1:34:03 AM (10 years ago)
Author:
kent1@…
Message:

Un début de gestion fine des autorisations ...

Ne devrait pas casser à priori les anciennes méthodes...

On ajoute la possibilité de les configurer par CFG, la méthode des define précédente est toujours fonctionnelle...

Location:
_plugins_/tickets
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/tickets/inc/tickets_autoriser.php

    r30696 r31406  
    11<?php
     2
     3/**
     4 * Fonction pour le pipeline, n'a rien a effectuer
     5 *
     6 * @return
     7 */
     8function tickets_autoriser(){}
     9
    210// Renvoie la liste des auteurs ou des statuts autorises pour une action donnee
    3 function definir_autorisations_tickets($action){
    4         $aut = NULL;
    5                
     11function definir_autorisations_tickets($action,$utiliser_defaut){
     12        $aut = null;
     13
    614        switch(strtolower($action))
    715        {
    816                case 'ecrire':
    9                         $define = (defined('_TICKETS_AUTORISATION_ECRIRE')) ? _TICKETS_AUTORISATION_ECRIRE : '0minirezo';
     17                        $define = (defined('_TICKETS_AUTORISATION_ECRIRE')) ? _TICKETS_AUTORISATION_ECRIRE : ($utiliser_defaut ? '0minirezo':'');
    1018                        break;
    1119                case 'notifier':
    12                         $define = (defined('_TICKETS_AUTORISATION_NOTIFIER')) ? _TICKETS_AUTORISATION_NOTIFIER : '1comite';
     20                        $define = (defined('_TICKETS_AUTORISATION_NOTIFIER')) ? _TICKETS_AUTORISATION_NOTIFIER : ($utiliser_defaut ? '1comite':'');
    1321                        break;
    1422                case 'assigner':
    15                         $define = (defined('_TICKETS_AUTORISATION_ASSIGNER')) ? _TICKETS_AUTORISATION_ASSIGNER : '0minirezo';
     23                        $define = (defined('_TICKETS_AUTORISATION_ASSIGNER')) ? _TICKETS_AUTORISATION_ASSIGNER : ($utiliser_defaut ? '0minirezo':'');
    1624                        break;
    1725                case 'commenter':
    18                         $define = (defined('_TICKETS_AUTORISATION_COMMENTER')) ? _TICKETS_AUTORISATION_COMMENTER : '1comite';
     26                        $define = (defined('_TICKETS_AUTORISATION_COMMENTER')) ? _TICKETS_AUTORISATION_COMMENTER : ($utiliser_defaut ? '1comite':'');
     27                        break;
     28                case 'modifier':
     29                        $define = (defined('_TICKETS_AUTORISATION_MODIFIER')) ? _TICKETS_AUTORISATION_MODIFIER : ($utiliser_defaut ? '0minirezo':'');
    1930                        break;
    2031                default:
    21                         $define = '0minirezo';
     32                        $define = $utiliser_defaut ? '0minirezo' : '';
    2233                        break;
    2334        }
     
    3243        else
    3344                $aut['auteur'] = $liste;
    34        
     45
    3546        return $aut;
    3647}
    3748
    38 // fonction pour le pipeline, n'a rien a effectuer
    39 function tickets_autoriser(){}
    40 
    41 // Autorisation de creation ou modification des tickets
    4249function autoriser_ticket_ecrire_dist($faire, $type, $id, $qui, $opt){
    43         $aut = FALSE;
    44 
    45         $liste = definir_autorisations_tickets('ecrire');
    46         if ($liste['statut'])
    47                 $aut = in_array($qui['statut'], $liste['statut']);
    48         else if ($liste['auteur'])
    49                 $aut = in_array($qui['id_auteur'], $liste['auteur']);
    50        
    51         return $aut;
     50        $autorise = false;
     51        $utiliser_defaut = true;
     52
     53        if(autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt)){
     54                return autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt);
     55        }
     56        // Utilisation du CFG si possible
     57        if(function_exists('lire_config')){
     58                $type = lire_config('tickets/autorisations/ecrire_type', 'webmestre');
     59                switch($type) {
     60                        case 'webmestre':
     61                                // Webmestres uniquement
     62                                $autorise = tickets_verifier_webmestre($qui);
     63                                break;
     64                        case 'par_statut':
     65                                // Traitement spécifique pour la valeur 'tous'
     66                                if(in_array('tous',lire_config('tickets/autorisations/ecrire_statuts',array()))){
     67                                        return true;
     68                                }
     69                                // Autorisation par statut
     70                                $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/ecrire_statuts',array()));
     71                                break;
     72                        case 'par_auteur':
     73                                // Autorisation par id d'auteurs
     74                                $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/ecrire_auteurs',array()));
     75                                break;
     76                }
     77                if($autorise == true){
     78                        return $autorise;
     79                }
     80        }
     81
     82        if($type){
     83                $utiliser_defaut = false;
     84        }
     85
     86        // Si pas de CFG ou pas autorise dans le cfg => on teste les define
     87        $liste = definir_autorisations_tickets('ecrire',$utiliser_defaut);
     88        if ($liste['statut'])
     89                $autorise = in_array($qui['statut'], $liste['statut']);
     90        else if ($liste['auteur'])
     91                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     92
     93        return $autorise;
    5294}
    5395
    5496// Autorisation de notification des tickets
    5597function autoriser_ticket_assigner_dist($faire, $type, $id, $qui, $opt){
    56         $aut = FALSE;
    57 
    58         $liste = definir_autorisations_tickets('assigner');
    59         if ($liste['statut'])
    60                 $aut = in_array($qui['statut'], $liste['statut']);
    61         else if ($liste['auteur'])
    62                 $aut = in_array($qui['id_auteur'], $liste['auteur']);
    63        
    64         return $aut;
     98        $autorise = false;
     99        $utiliser_defaut = true;
     100
     101        if(autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt)){
     102                return autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt);
     103        }
     104        // Utilisation du CFG si possible
     105        if(function_exists('lire_config')){
     106                $type = lire_config('tickets/autorisations/assigner_type', 'webmestre');
     107                switch($type) {
     108                        case 'webmestre':
     109                                // Webmestres uniquement
     110                                $autorise = tickets_verifier_webmestre($qui);
     111                                break;
     112                        case 'par_statut':
     113                                // Traitement spécifique pour la valeur 'tous'
     114                                if(in_array('tous',lire_config('tickets/autorisations/assigner_statuts',array()))){
     115                                        return true;
     116                                }
     117                                // Autorisation par statut
     118                                $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/assigner_statuts',array()));
     119                                break;
     120                        case 'par_auteur':
     121                                // Autorisation par id d'auteurs
     122                                $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/assigner_auteurs',array()));
     123                                break;
     124                }
     125                if($autorise == true){
     126                        return $autorise;
     127                }
     128        }
     129
     130        if($type){
     131                $utiliser_defaut = false;
     132        }
     133
     134        $liste = definir_autorisations_tickets('assigner',$utiliser_defaut);
     135        if ($liste['statut'])
     136                $autorise = in_array($qui['statut'], $liste['statut']);
     137        else if ($liste['auteur'])
     138                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     139
     140        return $autorise;
    65141}
    66142
    67143// Autorisation de notification des tickets
    68144function autoriser_ticket_commenter_dist($faire, $type, $id, $qui, $opt){
    69         $aut = FALSE;
    70 
    71         $liste = definir_autorisations_tickets('commenter');
    72         if ($liste['statut'])
    73                 $aut = in_array($qui['statut'], $liste['statut']);
    74         else if ($liste['auteur'])
    75                 $aut = in_array($qui['id_auteur'], $liste['auteur']);
    76        
    77         return $aut;
     145        $autorise = false;
     146        $utiliser_defaut = true;
     147
     148        if(autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt)){
     149                return autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt);
     150        }
     151        // Utilisation du CFG si possible
     152        if(function_exists('lire_config')){
     153                $type = lire_config('tickets/autorisations/commenter_type', 'webmestre');
     154                switch($type) {
     155                        case 'webmestre':
     156                                // Webmestres uniquement
     157                                $autorise = tickets_verifier_webmestre($qui);
     158                                break;
     159                        case 'par_statut':
     160                                // Traitement spécifique pour la valeur 'tous'
     161                                if(in_array('tous',lire_config('tickets/autorisations/commenter_statuts',array()))){
     162                                        return true;
     163                                }
     164                                // Autorisation par statut
     165                                $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/commenter_statuts',array()));
     166                                break;
     167                        case 'par_auteur':
     168                                // Autorisation par id d'auteurs
     169                                $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/commenter_auteurs',array()));
     170                                break;
     171                }
     172                if($autorise == true){
     173                        return $autorise;
     174                }
     175        }
     176
     177        if($type){
     178                $utiliser_defaut = false;
     179        }
     180
     181        $liste = definir_autorisations_tickets('commenter',$utiliser_defaut);
     182        if ($liste['statut'])
     183                $autorise = in_array($qui['statut'], $liste['statut']);
     184        else if ($liste['auteur'])
     185                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     186
     187        return $autorise;
     188}
     189
     190// Autorisation de modification des tickets
     191function autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt){
     192        $autorise = false;
     193        $utiliser_defaut = true;
     194
     195        // Si l'auteur en question est l'auteur assigné au ticket,
     196        // il peut modifier le ticket
     197        $id_assigne = sql_getfetsel('id_assigne','spip_tickets','id_ticket='.intval($id));
     198        if($id_assigne=$qui['id_auteur']){
     199                return true;
     200        }
     201        // Utilisation du CFG si possible
     202        if(function_exists('lire_config')){
     203                $type = lire_config('tickets/autorisations/modifier_type', 'webmestre');
     204                switch($type) {
     205                        case 'webmestre':
     206                                // Webmestres uniquement
     207                                $autorise = tickets_verifier_webmestre($qui);
     208                                break;
     209                        case 'par_statut':
     210                                // Traitement spécifique pour la valeur 'tous'
     211                                if(in_array('tous',lire_config('tickets/autorisations/modifier_statuts',array()))){
     212                                        return true;
     213                                }
     214                                // Autorisation par statut
     215                                $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/modifier_statuts',array()));
     216                                break;
     217                        case 'par_auteur':
     218                                // Autorisation par id d'auteurs
     219                                $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/modifier_auteurs',array()));
     220                                break;
     221                }
     222                if($autorise == true){
     223                        return $autorise;
     224                }
     225        }
     226
     227        // Si pas de configuration CFG, on utilise des valeurs par défaut
     228        if($type){
     229                $utiliser_defaut = false;
     230        }
     231
     232        // Si $utiliser_defaut = true, on utilisera les valeurs par défaut
     233        // Sinon on ajoute la possibilité de régler par define
     234        $liste = definir_autorisations_tickets('modifier',$utiliser_defaut);
     235        if ($liste['statut'])
     236                $autorise = in_array($qui['statut'], $liste['statut']);
     237        else if ($liste['auteur'])
     238                $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     239
     240        return $autorise;
     241}
     242
     243function tickets_verifier_webmestre($qui){
     244        $webmestre =  false;
     245        $webmestre = in_array($qui['id_auteur'],explode(':', _ID_WEBMESTRES));
     246        if(!$webmestre && ($qui['webmestre']=='oui')){
     247                $webmestre =  true;
     248        }
     249        return $webmestres;
    78250}
    79251?>
  • _plugins_/tickets/lang/tickets_fr.php

    r31393 r31406  
    1616
    1717        // C
     18        'cfg_descr_tickets' => 'Configuration du plugin Tickets pour SPIP',
     19        'cfg_lgd_autorisation_assigner' => 'Assigner les tickets',
     20        'cfg_lgd_autorisation_ecrire' => '&Eacute;crire les tickets',
     21        'cfg_lgd_autorisation_modifier' => 'Modifier les tickets',
     22        'cfg_lgd_autorisation_commenter' => 'Commenter les tickets',
     23        'cfg_form_tickets_autorisations' => 'Configuration des autorisations',
     24        'cfg_inf_type_autorisation' => 'Si vous choisissez par statut ou par auteur, il vous sera demand&eacute; ci-dessous votre s&eacute;lection de statuts ou d\'auteurs.',
     25        'cfg_lbl_type_autorisation' => 'M&eacute;thode d\'autorisation',
     26        'cfg_lbl_autorisation_webmestre' => 'Autoriser les webmestres uniquement',
     27        'cfg_lbl_autorisation_statuts' => 'Autoriser par statut d\'auteurs',
     28        'cfg_lbl_autorisation_auteurs' => 'Autoriser par liste d\'auteurs',
     29        'cfg_lbl_statuts_auteurs' => 'Statuts possibles',
     30        'cfg_lbl_liste_auteurs' => 'Auteurs du site',
     31        'cfg_titre_tickets' => 'Tickets',
     32
    1833        'champ_assigner' => 'Assigner &agrave;',
    1934        'champ_composant' => 'Composant',
  • _plugins_/tickets/plugin.xml

    r31387 r31406  
    1010        <icon>imgs/logo-bugs.png</icon>
    1111
    12         <version>1.6</version>
     12        <version>1.61</version>
    1313        <version_base>0.6</version_base>
    1414        <etat>stable</etat>
     
    6767        <!-- pour les boucles pour des "selections" de saisies, je suis vraiment sincerement desole -->
    6868        <necessite id="spip_bonux" version="[1.8;]" />
     69        <utilise id="cfg" version="[1.14.1;]" />
    6970</plugin>
Note: See TracChangeset for help on using the changeset viewer.