[PLUGINS] +acces restreint
[ptitvelo/web/www.git] / www / plugins / accesrestreint_3_5 / inc / accesrestreint_autoriser.php
1 <?php
2 /**
3 * Plugin Acces Restreint 3.0 pour Spip 2.0
4 * Licence GPL (c) 2006-2008 Cedric Morin
5 *
6 */
7
8 if (!defined("_ECRIRE_INC_VERSION")) return;
9
10 /* pour que le pipeline ne rale pas ! */
11 function 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 */
23 function 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 */
40 function 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
54 if(!function_exists('autoriser_rubrique_voir')) {
55 function 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 }
67 if(!function_exists('autoriser_article_voir')) {
68 function 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 (!isset($opt['id_rubrique']) OR !$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 }
96 if(!function_exists('autoriser_breve_voir')) {
97 function 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 }
106 if(!function_exists('autoriser_site_voir')) {
107 function 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 }
116 if(!function_exists('autoriser_evenement_voir')) {
117 function 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
129 if(!function_exists('autoriser_document_voir')) {
130 function 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 // eviter une notice sur $connect inexistant dans eval() qui suit
155 $connect = '';
156
157 $where[$publique] = eval("return ".$where[$publique].";");
158 }
159 $documents_statut[$id_auteur][$publique][$id] = sql_getfetsel('id_document','spip_documents',array('id_document='.intval($id),$where[$publique]));
160 if ($documents_statut[$id_auteur][$publique][$id])
161 $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
162 }
163
164 if ($clean_meta){
165 unset($GLOBALS['meta']["creer_htaccess"]);
166 }
167
168 }
169 return $documents_statut[$id_auteur][$publique][$id];
170 }
171 }
172
173 ?>