[PLUGINS] +acces restreint
[ptitvelo/web/www.git] / www / plugins / accesrestreint_3_5 / accesrestreint_pipelines.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
11 /**
12 * Ajouter la boite des zones sur la fiche auteur
13 *
14 * @param string $flux
15 * @return string
16 */
17 function accesrestreint_affiche_milieu($flux){
18 if ($e = trouver_objet_exec($flux['args']['exec'])
19 AND $e['type'] == 'auteur'
20 AND $e['edition'] == false) {
21
22 $id_auteur = $flux['args']['id_auteur'];
23
24 $ins = recuperer_fond('prive/squelettes/inclure/acces_auteur',array('id_auteur'=>$id_auteur));
25 if (($p = strpos($flux['data'],"<!--affiche_milieu-->")) !== false)
26 $flux['data'] = substr_replace($flux['data'],$ins,$p,0);
27 else
28 $flux['data'] .= $ins;
29
30 }
31 return $flux;
32 }
33
34 /**
35 * Ajouter la boite des zones sur la fiche de rubrique
36 *
37 * @param string $flux
38 * @return string
39 */
40 function accesrestreint_affiche_gauche($flux) {
41 if ($e = trouver_objet_exec($flux['args']['exec'])
42 AND $e['type'] == 'rubrique'
43 AND $e['edition'] == false
44 AND $id_rubrique = $flux['args']['id_rubrique']){
45 if (autoriser('administrer', 'zone', 0)) {
46 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/acces_rubrique', array('id_rubrique'=>$id_rubrique));
47 }
48 }
49 return $flux;
50 }
51
52 /**
53 * Detecter les demande d'acces aux pages restreintes
54 * et re-orienter vers une 401 si necessaire
55 *
56 * @param array $contexte
57 * @return array
58 */
59 function accesrestreint_page_indisponible($contexte){
60 if ($contexte['status']=='404'){
61 $objet = "";
62 if (isset($contexte['type'])) $objet = $contexte['type'];
63 elseif (isset($contexte['type-page'])) $objet = $contexte['type-page'];
64 elseif(isset($contexte['fond_erreur'])) {
65 include_spip('inc/urls');
66 define('_DEFINIR_CONTEXTE_TYPE_PAGE',true);
67 $c2 = $contexte;
68 list($fond2,$c2,$url_redirect) = urls_decoder_url(nettoyer_uri(),$contexte['fond_erreur'],$c2,true);
69 $objet = $c2['type-page'];
70 }
71 if ($objet){
72 $table_sql = table_objet_sql($objet);
73 $id_table_objet = id_table_objet($objet);
74 if ($id = intval($contexte[$id_table_objet])){
75
76 $publie = true;
77 if (include_spip("base/objets")
78 AND function_exists("objet_test_si_publie")){
79 $publie = objet_test_si_publie($objet,$id);
80 }
81 else {
82 $trouver_table = charger_fonction('trouver_table','base');
83 $desc = $trouver_table($table_sql);
84 if (isset($desc['field']['statut'])){
85 $statut = sql_getfetsel('statut', $table_sql, "$id_table_objet=".intval($id));
86 if ($statut!='publie')
87 $publie = false;
88 }
89 }
90
91 include_spip('inc/autoriser');
92 if ($publie AND !autoriser('voir',$objet,$id)){
93 // c'est un contenu restreint
94 $contexte['status'] = '401';
95 $contexte['code'] = '401 Unauthorized';
96 $contexte['fond'] = '401';
97 $contexte['erreur'] = _T('accesrestreint:info_acces_restreint');
98 $contexte['cible'] = self();
99 if (!isset($contexte['objet'])){
100 $contexte['objet'] = $objet;
101 $contexte['id_objet'] = $id;
102 }
103 }
104 }
105 }
106 }
107 return $contexte;
108 }
109
110 ?>