[PLUGINS] +en_travaux
[ptitvelo/web/www.git] / www / plugins / en_travaux / entravaux_options.php
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 ($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 if (!autoriser('travaux')
108 AND !in_array($flux['args']['fond'],$pages_ok)
109 AND !in_array($flux['args']['contexte'][_SPIP_PAGE],$pages_ok)
110 // et on laisse passer modeles et formulaires,
111 // qui ne peuvent etre inclus ou appeles que legitimement
112 AND strpos($flux['args']['fond'],'/')===false){
113 $fond = trouver_fond('inclure/entravaux','',true);
114 $flux['data'] = $fond['fond'];
115 }
116 }
117 return $flux;
118 }
119
120
121 /**
122 * Afficher une icone de travaux sur tout le site public pour que le webmestre n'oublie pas
123 * de retablir le site
124 *
125 * @param string $flux
126 * @return string
127 */
128 function entravaux_affichage_final($flux){
129 if (is_entravaux()
130 AND !test_espace_prive()
131 AND $GLOBALS['html']
132 AND !_AJAX){
133 include_spip('inc/filtres'); // pour http_img_pack
134 $x = '<div id="icone_travaux" style="
135 position: fixed;
136 left: 40px;
137 top: 40px;
138 ">'
139 . http_img_pack(chemin_image('entravaux-64.png'), _T('entravaux:en_travaux'), '', _T('entravaux:en_travaux'))
140 . '</div>';
141 if (!$pos = strpos($flux, '</body>'))
142 $pos = strlen($flux);
143 $flux = substr_replace($flux, $x, $pos, 0);
144 }
145 return $flux;
146 }
147
148 /**
149 * Afficher une notice sur l'accueil de ecrire
150 * @param array $flux
151 * @return array
152 */
153 function entravaux_affiche_milieu($flux){
154 if (is_entravaux()){
155 if ($flux['args']['exec']=='accueil'){
156 $notice = recuperer_fond('inclure/entravaux_notice_ecrire',array());
157 if (strlen(trim($notice)))
158 $flux['data'] = $notice . $flux['data'];
159 }
160 }
161 if ($flux['args']['exec']=='configurer_identite'){
162 $flux['data'] .= recuperer_fond('prive/squelettes/contenu/configurer_entravaux',array());
163 }
164 return $flux;
165 }
166
167 ?>