source: spip-zone/_plugins_/acces_restreint/trunk/inc/accesrestreint_autoriser.php @ 81449

Last change on this file since 81449 was 81449, checked in by rastapopoulos@…, 7 years ago

Indentations, espacements, accolades pour mieux lire.
Et transformation de "opt" en "options" pour mieux lire aussi.

File size: 7.8 KB
Line 
1<?php
2/**
3 * Plugin Acces Restreint 3.0 pour Spip 2.0
4 * Licence GPL (c) 2006-2008 Cedric Morin
5 *
6 */
7
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10/* pour que le pipeline ne rale pas ! */
11function accesrestreint_autoriser(){}
12
13/**
14 * Autorisation a administrer les zones
15 *
16 * @param unknown_type $faire
17 * @param unknown_type $quoi
18 * @param unknown_type $id
19 * @param unknown_type $qui
20 * @param unknown_type $options
21 * @return unknown
22 */
23function autoriser_zone_administrer($faire, $quoi, $id, $qui, $options){
24        // Les admins complets uniquement
25        if ($qui['statut']=='0minirezo' AND !$qui['restreint']) {
26                return true;
27        }
28       
29        return false;
30}
31
32/**
33 * Autorisation a affecter les zones a un auteur
34 * si un id_zone passe dans options, cela concerne plus particulierement le droit d'affecter cette zone
35 *
36 * @param unknown_type $faire
37 * @param unknown_type $qui
38 * @param unknown_type $id
39 * @param unknown_type $qui
40 * @param unknown_type $options
41 * @return unknown
42 */
43function autoriser_auteur_affecterzones_dist($faire, $quoi, $id, $qui, $options){
44        // Si on ne peut pas modifier l'auteur, c'est fichu
45        if (!autoriser('modifier', 'auteur', $id)) {
46                return false;
47        }
48       
49        // Les admins complets
50        if ($qui['statut'] == '0minirezo' AND !$qui['restreint']) {
51                return true;
52        }
53       
54        // Les non-admins complets ne peuvent pas s'administrer eux-meme pour éviter les erreurs
55        if ($id == $qui['id_auteur']) {
56                return false;
57        }
58       
59        // Si on parle d'une zone précise,
60        // les non-admins complets ne peuvent affecter que les zones dont ils font partie
61        include_spip('inc/accesrestreint');
62        if (
63                $options['id_zone']
64                and accesrestreint_test_appartenance_zone_auteur($options['id_zone'], $qui['id_auteur'])
65        ) {
66                return true;
67        }
68       
69        return false;
70}
71
72/*
73 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'une rubrique, si pas déjà définie
74 */
75if(!function_exists('autoriser_rubrique_voir')) {
76function autoriser_rubrique_voir($faire, $type, $id, $qui, $options) {
77        include_spip('inc/accesrestreint');
78        static $rub_exclues;
79       
80        $publique = isset($options['publique']) ? $options['publique'] : !test_espace_prive();
81        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
82       
83        if (!isset($rub_exclues[$id_auteur][$publique]) || !is_array($rub_exclues[$id_auteur][$publique])) {
84                $rub_exclues[$id_auteur][$publique] = accesrestreint_liste_rubriques_exclues($publique,$id_auteur);
85                $rub_exclues[$id_auteur][$publique] = array_flip($rub_exclues[$id_auteur][$publique]);
86        }
87       
88        return !isset($rub_exclues[$id_auteur][$publique][$id]);
89}
90}
91
92/*
93 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'un article, si pas déjà définie
94 */
95if(!function_exists('autoriser_article_voir')) {
96function autoriser_article_voir($faire, $type, $id, $qui, $options) {
97        // Si on ne demande pas un article précis
98        if (!$id) {
99                // Les admins peuvent par défaut tout voir
100                if ($qui['statut'] == '0minirezo') {
101                        return true;
102                }
103                // Les autres peuvent voir ce qui est publié ou proposé
104                if (isset($options['statut'])) {
105                        $statut = $options['statut'];
106                        if (in_array($statut, array('prop', 'publie'))) {
107                                return true;
108                        }
109                }
110                return false;
111        }
112
113        include_spip('public/quete');
114       
115        // Si on ne connait pas déjà la rubrique, on la cherche suivant l'article
116        if (!isset($options['id_rubrique']) or !$id_rubrique = $options['id_rubrique']) {
117                $article = quete_parent_lang('spip_articles', $id);
118                $id_rubrique = $article['id_rubrique'];
119        }
120       
121        // On ne continue que si on peut déjà voir la rubrique parente
122        if (autoriser_rubrique_voir('voir', 'rubrique', $id_rubrique, $qui, $options)){
123                // Si c'est bon, les admins peuvent tout voir
124                if ($qui['statut'] == '0minirezo'){
125                        return true;
126                }
127               
128                // Pour les autres, on ne peut pas voir un article 'prepa' ou 'poubelle' dont on n'est pas auteur
129                $r = sql_getfetsel('statut', 'spip_articles', 'id_article='.sql_quote($id));
130                include_spip('inc/auth'); // pour auteurs_article si espace public
131                return
132                        in_array($r, array('prop', 'publie'))
133                        or auteurs_article($id, "id_auteur=".$qui['id_auteur']);
134        }
135       
136        return false;
137}
138}
139
140/*
141 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'une brève, si pas déjà définie
142 */
143if(!function_exists('autoriser_breve_voir')) {
144function autoriser_breve_voir($faire, $type, $id, $qui, $options) {
145        include_spip('public/quete');
146       
147        if (!$id_rubrique = $options['id_rubrique']){
148                $breve = quete_parent_lang('spip_breves', $id);
149                $id_rubrique = $breve['id_rubrique'];
150        }
151       
152        return autoriser_rubrique_voir('voir', 'rubrique', $id_rubrique, $qui, $options);
153}
154}
155
156/*
157 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'un site, si pas déjà définie
158 */
159if(!function_exists('autoriser_site_voir')) {
160function autoriser_site_voir($faire, $type, $id, $qui, $options) {
161        include_spip('public/quete');
162       
163        if (!$id_rubrique = $options['id_rubrique']){
164                $site = quete_parent_lang('spip_syndic', $id);
165                $id_rubrique = $site['id_rubrique'];
166        }
167       
168        return autoriser_rubrique_voir('voir', 'rubrique', $id_rubrique, $qui, $options);
169}
170}
171
172/*
173 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'un événement, si pas déjà définie
174 */
175if(!function_exists('autoriser_evenement_voir')) {
176function autoriser_evenement_voir($faire, $type, $id, $qui, $options) {
177        static $evenements_statut;
178       
179        $publique = isset($options['publique']) ? $options['publique'] : !test_espace_prive();
180        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
181       
182        if (!isset($evenements_statut[$id_auteur][$publique][$id])){
183                $id_article = sql_getfetsel('id_article', 'spip_evenements', 'id_evenement='.intval($id));
184                $evenements_statut[$id_auteur][$publique][$id] = autoriser_article_voir('voir', 'article', $id_article, $qui, $options);
185        }
186       
187        return $evenements_statut[$id_auteur][$publique][$id];
188}
189}
190
191/*
192 * Surcharge (sans _dist) de la fonction d'autorisation de vue d'un document, si pas déjà définie
193 */
194if(!function_exists('autoriser_document_voir')) {
195function autoriser_document_voir($faire, $type, $id, $qui, $options) {
196        include_spip('public/accesrestreint');
197        static $documents_statut = array();
198        static $where = array();
199       
200        $publique = isset($options['publique']) ? $options['publique'] : !test_espace_prive();
201        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
202       
203        if (!isset($documents_statut[$id_auteur][$publique][$id])){
204                // il faut hacker la meta "creer_htaccess" le temps du calcul de l'autorisation car le core
205                $clean_meta = false;
206                if (
207                        isset($GLOBALS['meta']["accesrestreint_proteger_documents"])
208                        and $GLOBALS['meta']["accesrestreint_proteger_documents"] == 'oui'
209                ) {
210                        if (!isset($GLOBALS['meta']["creer_htaccess"]) or $GLOBALS['meta']["creer_htaccess"] != 'oui') {
211                                $GLOBALS['meta']["creer_htaccess"] = 'oui';
212                                $clean_meta = true;
213                        }
214                }
215
216                if (!$id) {
217                        $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $options);
218                }
219                else {
220                        if (!isset($where[$publique])) {
221                                $where[$publique] = accesrestreint_documents_accessibles_where('id_document', $publique?"true":"false");
222                                // inclure avant le eval, pour que les fonctions soient bien definies
223                                include_spip('inc/accesrestreint');
224                                // eviter une notice sur $connect inexistant dans eval() qui suit
225                                $connect = '';
226
227                                $where[$publique] = eval("return ".$where[$publique].";");
228                        }
229                       
230                        $documents_statut[$id_auteur][$publique][$id] = sql_getfetsel('id_document','spip_documents',array('id_document='.intval($id),$where[$publique]));
231                       
232                        if ($documents_statut[$id_auteur][$publique][$id]) {
233                                $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $options);
234                        }
235                }
236
237                if ($clean_meta){
238                        unset($GLOBALS['meta']["creer_htaccess"]);
239                }
240        }
241       
242        return $documents_statut[$id_auteur][$publique][$id];
243}
244}
245
246?>
Note: See TracBrowser for help on using the repository browser.