1 | <?php |
---|
2 | /* |
---|
3 | * Plugin En Travaux |
---|
4 | * (c) 2006-2009 Arnaud Ventre, Cedric Morin |
---|
5 | * Distribue sous licence GPL |
---|
6 | * |
---|
7 | */ |
---|
8 | |
---|
9 | #var_dump($GLOBALS['meta']['entravaux_id_auteur']); |
---|
10 | |
---|
11 | /** |
---|
12 | * Autoriser a voir le site en travaux : par defaut tous les webmestre |
---|
13 | * @return mixed |
---|
14 | */ |
---|
15 | function autoriser_travaux_dist(){ return autoriser('webmestre'); } |
---|
16 | |
---|
17 | /** |
---|
18 | * Verifier un verrou fichier pose dans local/entravaux_xxx.lock |
---|
19 | * pour ne pas qu'il saute si on importe une base |
---|
20 | * La meta n'est qu'un cache qu'on met a jour si pas dispo. |
---|
21 | * @param string $nom |
---|
22 | * @param bool $force |
---|
23 | * @return bool |
---|
24 | */ |
---|
25 | function entravaux_check_verrou($nom, $force=false){ |
---|
26 | if (!isset($GLOBALS['meta'][$m='entravaux_'.$nom]) OR $force){ |
---|
27 | ecrire_meta($m,file_exists(_DIR_VAR.$m.".lock")?"oui":"non",'non'); |
---|
28 | } |
---|
29 | return $GLOBALS['meta'][$m]=="oui"; // si oui : verrou pose |
---|
30 | } |
---|
31 | |
---|
32 | /** |
---|
33 | * A-t-on active les travaux oui ou non ? |
---|
34 | * @return bool |
---|
35 | */ |
---|
36 | function is_entravaux(){ |
---|
37 | // upgrade sauvage ? |
---|
38 | include_spip('entravaux_administrations'); |
---|
39 | if (isset($GLOBALS['meta']['entravaux_id_auteur'])){include_spip('entravaux_install');entravaux_poser_verrou("accesferme");effacer_meta('entravaux_id_auteur');} |
---|
40 | if (defined('_ENTRAVAUX_IP_EXCEPTIONS') AND in_array($GLOBALS['ip'],explode(',',_ENTRAVAUX_IP_EXCEPTIONS))) return false; |
---|
41 | return entravaux_check_verrou("accesferme"); |
---|
42 | } |
---|
43 | |
---|
44 | if (is_entravaux()){ |
---|
45 | include_spip('inc/autoriser'); |
---|
46 | |
---|
47 | // dans le site public |
---|
48 | // si auteur pas autorise : placer sur un cache dedie |
---|
49 | // si auteur autorise, desactiver le cache : |
---|
50 | // il voit le site, mais pas de cache car il travaille dessus ! |
---|
51 | if (!test_espace_prive()){ |
---|
52 | if (!autoriser('travaux')){ |
---|
53 | $GLOBALS['marqueur'].= ":en_travaux"; |
---|
54 | } |
---|
55 | else { |
---|
56 | // desactiver le cache sauf si inhibe par define |
---|
57 | if (!defined('_ENTRAVAUX_GARDER_CACHE')) |
---|
58 | define('_NO_CACHE',1); |
---|
59 | } |
---|
60 | } |
---|
61 | // si espace prive : die avec page travaux |
---|
62 | // sauf si pas loge => redirection |
---|
63 | else { |
---|
64 | if ( |
---|
65 | !in_array(_request('action'),array('logout')) |
---|
66 | AND !in_array(_request('exec'),array('install')) |
---|
67 | ){ |
---|
68 | if (!autoriser('travaux')){ |
---|
69 | spip_initialisation_suite(); |
---|
70 | // si on est loge : die() avec travaux |
---|
71 | if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur'] != ''){ |
---|
72 | $travaux = recuperer_fond("inclure/entravaux",array()); |
---|
73 | // fallback : le fond renvoie parfois du vide ... |
---|
74 | if (!strlen($travaux)){ |
---|
75 | @define('_SPIP_SCRIPT','spip.php'); |
---|
76 | echo "Acces interdit (en travaux) <a href='" |
---|
77 | .generer_url_action('logout',"logout=public",false,true) |
---|
78 | ."'>Deconnexion</a>"; |
---|
79 | } |
---|
80 | else |
---|
81 | echo $travaux; |
---|
82 | die(); |
---|
83 | } |
---|
84 | // sinon retour sur login_sos |
---|
85 | else { |
---|
86 | $redirect = parametre_url(generer_url_public('login_sos'),'url',self(),'&'); |
---|
87 | include_spip('inc/headers'); |
---|
88 | redirige_par_entete($redirect); |
---|
89 | } |
---|
90 | } |
---|
91 | } |
---|
92 | } |
---|
93 | } |
---|
94 | |
---|
95 | /** |
---|
96 | * Pipeline styliser pour rerouter tous les fonds vers en_travaux |
---|
97 | * sauf si l'auteur connecte est celui qui a active le plugin |
---|
98 | * |
---|
99 | * @param array $flux |
---|
100 | * @return array |
---|
101 | */ |
---|
102 | function entravaux_styliser($flux){ |
---|
103 | if (is_entravaux()){ |
---|
104 | include_spip('inc/autoriser'); |
---|
105 | // les pages exceptions |
---|
106 | $pages_ok = array('login_sos','robots.txt','spip_pass','favicon.ico','informer_auteur'); |
---|
107 | // des squelettes autorisés configurables via mes_options |
---|
108 | if (defined('_SKEL_HORS_TRAVAUX')) $skels_ok = explode(',',_SKEL_HORS_TRAVAUX); |
---|
109 | else $skels_ok = array(); |
---|
110 | if (!autoriser('travaux') |
---|
111 | AND !in_array($flux['args']['fond'],$pages_ok) |
---|
112 | AND !in_array($flux['args']['fond'],$skels_ok) |
---|
113 | AND !in_array($flux['args']['contexte'][_SPIP_PAGE],$pages_ok) |
---|
114 | // et on laisse passer modeles et formulaires, |
---|
115 | // qui ne peuvent etre inclus ou appeles que legitimement |
---|
116 | AND strpos($flux['args']['fond'],'/')===false){ |
---|
117 | $fond = trouver_fond('inclure/entravaux','',true); |
---|
118 | $flux['data'] = $fond['fond']; |
---|
119 | } |
---|
120 | } |
---|
121 | return $flux; |
---|
122 | } |
---|
123 | |
---|
124 | |
---|
125 | /** |
---|
126 | * Afficher une icone de travaux sur tout le site public pour que le webmestre n'oublie pas |
---|
127 | * de retablir le site |
---|
128 | * |
---|
129 | * @param string $flux |
---|
130 | * @return string |
---|
131 | */ |
---|
132 | function entravaux_affichage_final($flux){ |
---|
133 | if (is_entravaux() |
---|
134 | AND !test_espace_prive() |
---|
135 | AND $GLOBALS['html'] |
---|
136 | AND !_AJAX){ |
---|
137 | include_spip('inc/filtres'); // pour http_img_pack |
---|
138 | $x = '<div id="icone_travaux" style=" |
---|
139 | position: fixed; |
---|
140 | left: 40px; |
---|
141 | top: 40px; |
---|
142 | ">' |
---|
143 | . http_img_pack(chemin_image('entravaux-64.png'), _T('entravaux:en_travaux'), '', _T('entravaux:en_travaux')) |
---|
144 | . '</div>'; |
---|
145 | if (!$pos = strpos($flux, '</body>')) |
---|
146 | $pos = strlen($flux); |
---|
147 | $flux = substr_replace($flux, $x, $pos, 0); |
---|
148 | } |
---|
149 | return $flux; |
---|
150 | } |
---|
151 | |
---|
152 | /** |
---|
153 | * Afficher une notice sur l'accueil de ecrire |
---|
154 | * @param array $flux |
---|
155 | * @return array |
---|
156 | */ |
---|
157 | function entravaux_affiche_milieu($flux){ |
---|
158 | if (is_entravaux()){ |
---|
159 | if ($flux['args']['exec']=='accueil'){ |
---|
160 | $notice = recuperer_fond('inclure/entravaux_notice_ecrire',array()); |
---|
161 | if (strlen(trim($notice))) |
---|
162 | $flux['data'] = $notice . $flux['data']; |
---|
163 | } |
---|
164 | } |
---|
165 | if ($flux['args']['exec']=='configurer_identite'){ |
---|
166 | $flux['data'] .= recuperer_fond('prive/squelettes/contenu/configurer_entravaux',array()); |
---|
167 | } |
---|
168 | return $flux; |
---|
169 | } |
---|
170 | |
---|
171 | ?> |
---|