[PLUGINS] ~acces_restreint 3.3.5-->3.3.8
[ptitvelo/web/www.git] / www / plugins / accesrestreint_3_5 / inc / accesrestreint_documents.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 * on essaye de poser un htaccess rewrite global sur IMG/
12 * si fonctionne on gardera des ulrs de document permanente
13 * si ne fonctionne pas on se rabat sur creer_htaccess du core
14 * qui pose un deny sur chaque sous repertoire de IMG/
15 *
16 * http://doc.spip.org/@gerer_htaccess
17 *
18 * @param bool $active
19 * @return bool
20 */
21 function accesrestreint_gerer_htaccess($active = true) {
22 if (!$active){
23 spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME);
24 effacer_meta("creer_htaccess");
25 // effacer les xx/.htaccess crees eventuellement par le core
26 include_spip("inc/acces");
27 gerer_htaccess();
28 return false;
29 }
30 else {
31 $rewrite = <<<rewrite
32 RewriteEngine On
33 RewriteCond %{QUERY_STRING} ^(\d+/[\da-f]+)$
34 RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint&arg=%1/$0 [skip=100]
35 RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint&arg=0/0/$0 [skip=100]
36 rewrite;
37
38 // On cherche si le dossier racine a un RewriteBase plus long que "/"
39 if (file_exists(_DIR_RACINE._ACCESS_FILE_NAME)){
40 $ht = '';
41 lire_fichier(_DIR_RACINE._ACCESS_FILE_NAME, $ht);
42 if ($ht and preg_match('|^RewriteBase\s+/.+$|m', $ht, $rewritebase)){
43 $rewritebase = rtrim(trim($rewritebase[0]), '/').'/'._NOM_PERMANENTS_ACCESSIBLES;
44 $rewrite = $rewritebase."\n".$rewrite;
45 }
46 }
47
48 ecrire_fichier(_DIR_IMG . _ACCESS_FILE_NAME,$rewrite);
49 // verifier sur l'url de test
50 include_spip('inc/distant');
51 $url_test = url_absolue(_DIR_IMG . "test/.test?0/1");
52 $test = recuperer_page($url_test);
53 // si l'url de test renvoie bien "OK" alors rewrite rule fonctionne et on peut baser la protection de document sur ce shema
54 if ($test == "OK") {
55 effacer_meta("creer_htaccess"); // securite, et permet de generer des urls permanentes
56 }
57 else {
58 // sinon on se rabat sur un deny et on generera des urls moches
59 spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME);
60 ecrire_meta("creer_htaccess","oui");
61 }
62 // dans tous les cas on passe par gerer_htaccess pour enlever ou mettre les .htaccess dans les sous rep
63 include_spip("inc/acces");
64 gerer_htaccess();
65
66 return true;
67 }
68 }