Changeset 50067 in spip-zone


Ignore:
Timestamp:
Jul 29, 2011, 12:11:52 PM (10 years ago)
Author:
marcimat@…
Message:

Ajout d'une fonction pour permettre de savoir si un auteur peut voir une rubrique, quelque soit la visibilité de la rubrique dans la zone (publique, privée, aucune ou les deux).

L'auteur a une liaison, en quelque sorte avec la rubrique. La fonction renvoie false si la rubrique fait partie d'une zone dont ne fait pas partie l'auteur.

[(#ID_AUTEUR|accesrestreint_auteur_lie_a_rubrique{#ID_RUBRIQUE})]

Location:
_plugins_/acces_restreint
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/acces_restreint/acces_restreint_fonctions.php

    r49957 r50067  
    200200        return $rubs[$_publique] = array();
    201201}
     202
     203/**
     204 * Un auteur donné fait il partie d'une zone permettant de voir telle rubrique.
     205 * Renvoie true, si l'auteur peut voir la rubrique,
     206 * quelquesoit la visibilité des rubriques de la zone
     207 *
     208 * @param int $id_auteur        Identifiant de l'auteur
     209 * @param int $id_rubrique      Identifiant de la rubrique
     210 * @return bool L'auteur fait partie de la rubrique.
     211**/
     212function accesrestreint_auteur_lie_a_rubrique($id_auteur, $id_rubrique) {
     213        if (!$id_auteur)   return false;
     214        if (!$id_rubrique) return false;
     215        // $auteur[3][8] : l'auteur 3 ne peut pas voir la rubrique 8
     216        static $auteurs = array();
     217        if (!isset($auteurs[$id_auteur])) {
     218                $auteurs[$id_auteur] = array();
     219
     220                include_spip('inc/acces_restreint');
     221                $auteurs[$id_auteur] = array_flip(accesrestreint_liste_rubriques_exclues(true, $id_auteur, true));
     222        }
     223       
     224        // si la rubrique est presente, c'est qu'on ne peut pas la voir !
     225        if (isset($auteurs[$id_auteur][$id_rubrique])) {
     226                return false;
     227        }
     228       
     229        return true;
     230       
     231}
     232
     233
    202234?>
  • _plugins_/acces_restreint/inc/acces_restreint.php

    r46261 r50067  
    153153 * d'ou le recours a $GLOBALS['accesrestreint_zones_autorisees']
    154154 *
    155  * @param bool $publique
    156  * @param int $id_auteur
    157  * @return array
    158  */
    159 function accesrestreint_liste_rubriques_exclues($publique=true, $id_auteur=NULL) {
     155 * @param bool $publique Sélectionner les rubriques interdites dans l'espace public (true) ou privé (false)
     156 * @param int $id_auteur Identifiant de l'auteur
     157 * @param bool $quelquesoit_visibilite Si true, on ne s'occupe pas de savoir si une zone est restreinte sur le prive ou sur le public.
     158 * @return array
     159 */
     160function accesrestreint_liste_rubriques_exclues($publique=true, $id_auteur=NULL, $quelquesoit_visibilite = false) {
    160161        // cache static
    161162        static $liste_rub_exclues = array();
    162163        static $liste_rub_inclues = array();
     164        if ($quelquesoit_visibilite) { $publique = 'tout'; }
    163165       
    164166        $id_auteur = is_null($id_auteur)?$GLOBALS['visiteur_session']['id_auteur']:$id_auteur;
     
    167169                $where = array();
    168170                // Ne selectionner que les zones pertinentes
    169                 if ($publique)
    170                         $where[] = "publique='oui'";
    171                 else
    172                         $where[] = "privee='oui'";
     171                if (!$quelquesoit_visibilite) {
     172                        if ($publique)
     173                                $where[] = "publique='oui'";
     174                        else
     175                                $where[] = "privee='oui'";
     176                }
    173177
    174178                // Si le visiteur est autorise sur certaines zones publiques,
     
    209213                        $where = array();
    210214                        // Ne selectionner que les zones pertinentes
    211                         if ($publique)
    212                                 $where[] = "publique='oui'";
    213                         else
    214                                 $where[] = "privee='oui'";
     215                        if (!$quelquesoit_visibilite) {
     216                                if ($publique)
     217                                        $where[] = "publique='oui'";
     218                                else
     219                                        $where[] = "privee='oui'";
     220                        }
    215221
    216222                        // Calcul des rubriques dans des zones autorisees
     
    238244                        array_intersect($final_liste_rub_exclues,$liste_rub_inclues[$id_auteur][$publique]));
    239245        }
     246
    240247        return $final_liste_rub_exclues;
    241248}
  • _plugins_/acces_restreint/plugin.xml

    r49957 r50067  
    66        <auteur>[cedric.morin@yterium.com->http://www.yterium.net]</auteur>
    77        <licence>GPL &#169; 2007-2008</licence>
    8         <version>3.2.0</version>
     8        <version>3.3.0</version>
    99        <version_base>0.3.0.2</version_base>
    1010        <etat>stable</etat>
Note: See TracChangeset for help on using the changeset viewer.