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

Last change on this file since 71950 was 71950, checked in by cedric@…, 8 years ago

gerer le cas d'appel a autoriser_voir sans id, qui est utilise pour savoir quels statuts d'article un auteur est autorise a voir en general. Evite une requete sql foireuse (TheMoye?)

File size: 6.2 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 $opts
21 * @return unknown
22 */
23function autoriser_zone_administrer($faire,$quoi,$id,$qui,$opts){
24        if ($qui['statut']=='0minirezo' AND !$qui['restreint'])
25                return true;
26        return false;
27}
28
29/**
30 * Autorisation a affecter les zones a un auteur
31 * si un id_zone passe dans opts, cela concerne plus particulierement le droit d'affecter cette zone
32 *
33 * @param unknown_type $faire
34 * @param unknown_type $qui
35 * @param unknown_type $id
36 * @param unknown_type $qui
37 * @param unknown_type $opts
38 * @return unknown
39 */
40function autoriser_auteur_affecterzones_dist($faire,$quoi,$id,$qui,$opts){
41        if (!autoriser('modifier','auteur',$id)) return false;
42        if ($qui['statut']=='0minirezo' AND !$qui['restreint'])
43                return true;
44        # les non admin ne peuvent pas s'administrer eux meme pour eviter les erreurs
45        if ($id == $qui['id_auteur']) return false;
46        # les non admin ne peuvent affecter que les zones dont ils font partie
47        include_spip('inc/accesrestreint');
48        if ($opts['id_zone']
49          AND accesrestreint_test_appartenance_zone_auteur($opts['id_zone'], $qui['id_auteur']))
50          return true;
51 return false;
52}
53
54if(!function_exists('autoriser_rubrique_voir')) {
55function autoriser_rubrique_voir($faire, $type, $id, $qui, $opt) {
56        include_spip('inc/accesrestreint');
57        static $rub_exclues;
58        $publique = isset($opt['publique'])?$opt['publique']:!test_espace_prive();
59        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
60        if (!isset($rub_exclues[$id_auteur][$publique]) || !is_array($rub_exclues[$id_auteur][$publique])) {
61                $rub_exclues[$id_auteur][$publique] = accesrestreint_liste_rubriques_exclues($publique,$id_auteur);
62                $rub_exclues[$id_auteur][$publique] = array_flip($rub_exclues[$id_auteur][$publique]);
63        }
64        return !isset($rub_exclues[$id_auteur][$publique][$id]);
65}
66}
67if(!function_exists('autoriser_article_voir')) {
68function autoriser_article_voir($faire, $type, $id, $qui, $opt) {
69        if (!$id){
70                if ($qui['statut'] == '0minirezo') return true;
71                if (isset($opt['statut'])){
72                        $statut = $opt['statut'];
73                        if (in_array($statut, array('prop', 'publie')))
74                                return true;
75                }
76                return false;
77        }
78
79        include_spip('public/quete');
80        if (!$id_rubrique = $opt['id_rubrique']){
81                $article = quete_parent_lang('spip_articles',$id);
82                $id_rubrique = $article['id_rubrique'];
83        }
84        if (autoriser_rubrique_voir('voir','rubrique',$id_rubrique,$qui,$opt)){
85                if ($qui['statut'] == '0minirezo') return true;
86                // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit
87                $r = sql_getfetsel("statut", "spip_articles", "id_article=".sql_quote($id));
88                include_spip('inc/auth'); // pour auteurs_article si espace public
89                return
90                        in_array($r, array('prop', 'publie'))
91                        OR auteurs_article($id, "id_auteur=".$qui['id_auteur']);
92        }
93        return false;
94}
95}
96if(!function_exists('autoriser_breve_voir')) {
97function autoriser_breve_voir($faire, $type, $id, $qui, $opt) {
98        include_spip('public/quete');
99        if (!$id_rubrique = $opt['id_rubrique']){
100                $breve = quete_parent_lang('spip_breves',$id);
101                $id_rubrique = $breve['id_rubrique'];
102        }
103        return autoriser_rubrique_voir('voir','rubrique',$id_rubrique,$qui,$opt);
104}
105}
106if(!function_exists('autoriser_site_voir')) {
107function autoriser_site_voir($faire, $type, $id, $qui, $opt) {
108        include_spip('public/quete');
109        if (!$id_rubrique = $opt['id_rubrique']){
110                $site = quete_parent_lang('spip_syndic',$id);
111                $id_rubrique = $site['id_rubrique'];
112        }
113        return autoriser_rubrique_voir('voir','rubrique',$id_rubrique,$qui,$opt);
114}
115}
116if(!function_exists('autoriser_evenement_voir')) {
117function autoriser_evenement_voir($faire, $type, $id, $qui, $opt) {
118        static $evenements_statut;
119        $publique = isset($opt['publique'])?$opt['publique']:!test_espace_prive();
120        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
121        if (!isset($evenements_statut[$id_auteur][$publique][$id])){
122                $id_article = sql_getfetsel('id_article','spip_evenements','id_evenement='.intval($id));
123                $evenements_statut[$id_auteur][$publique][$id] = autoriser_article_voir('voir', 'article', $id_article, $qui, $opt);
124        }
125        return $evenements_statut[$id_auteur][$publique][$id];
126}
127}
128
129if(!function_exists('autoriser_document_voir')) {
130function autoriser_document_voir($faire, $type, $id, $qui, $opt) {
131        include_spip('public/accesrestreint');
132        static $documents_statut = array();
133        static $where = array();
134        $publique = isset($opt['publique'])?$opt['publique']:!test_espace_prive();
135        $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
136        if (!isset($documents_statut[$id_auteur][$publique][$id])){
137
138                // il faut hacker la meta "creer_htaccess" le temps du calcul de l'autorisation car le core
139                $clean_meta = false;
140                if (isset($GLOBALS['meta']["accesrestreint_proteger_documents"]) AND $GLOBALS['meta']["accesrestreint_proteger_documents"]=='oui'){
141                        if (!isset($GLOBALS['meta']["creer_htaccess"]) OR $GLOBALS['meta']["creer_htaccess"] != 'oui'){
142                                $GLOBALS['meta']["creer_htaccess"] = 'oui';
143                                $clean_meta = true;
144                        }
145                }
146
147                if (!$id)
148                        $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
149                else {
150                        if (!isset($where[$publique])){
151                                $where[$publique] = accesrestreint_documents_accessibles_where('id_document', $publique?"true":"false");
152                                // inclure avant le eval, pour que les fonctions soient bien definies
153                                include_spip('inc/accesrestreint');
154                                $where[$publique] = eval("return ".$where[$publique].";");
155                        }
156                        $documents_statut[$id_auteur][$publique][$id] = sql_getfetsel('id_document','spip_documents',array('id_document='.intval($id),$where[$publique]));
157                        if ($documents_statut[$id_auteur][$publique][$id])
158                                $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
159                }
160
161                if ($clean_meta){
162                        unset($GLOBALS['meta']["creer_htaccess"]);
163                }
164
165        }
166        return $documents_statut[$id_auteur][$publique][$id];
167}
168}
169
170?>
Note: See TracBrowser for help on using the repository browser.