source: spip-zone/_plugins_/en_travaux/trunk/entravaux_options.php @ 48993

Last change on this file since 48993 was 48993, checked in by cedric@…, 10 years ago

modification du fonctionnement du plugin :
au lieu de stocker le verrou dans la base, on le stocke via un fichier sur le filesystem, dans local/
La meta n'est qu'un cache qui permet d'eviter les acces disques.
Cela permet de ne pas perdre la protection du plugin si jamais on importe une nouvelle base sur un site en travaux.

File size: 4.1 KB
Line 
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 */
15function 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 */
25function 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 * A-t-on active les travaux oui ou non ?
33 * @return bool
34 */
35function is_entravaux(){
36        // upgrade sauvage ?
37        if (isset($GLOBALS['meta']['entravaux_id_auteur'])){include_spip('entravaux_install');entravaux_poser_verrou("accesferme");effacer_meta('entravaux_id_auteur');}
38        return entravaux_check_verrou("accesferme");
39}
40
41if (is_entravaux()){
42        include_spip('inc/autoriser');
43
44        // dans le site public
45        // si auteur pas autorise : placer sur un cache dedie
46        // si auteur autorise, desactiver le cache :
47        // il voit le site, mais pas de cache car il travaille dessus !
48        if (!test_espace_prive()){
49                if (!autoriser('travaux')){
50                        $GLOBALS['marqueur'].= ":en_travaux";
51                }
52                else {
53                        // desactiver le cache sauf si inhibe par define
54                        if (!defined('_ENTRAVAUX_GARDER_CACHE'))
55                                define('_NO_CACHE',1);
56                }
57        }
58        else {
59                if (!in_array(_request('action'),array('logout'))
60                ){
61                        if (!autoriser('travaux')){
62                                spip_initialisation_suite();
63                                $travaux = recuperer_fond("inclure/entravaux",array());
64                                // fallback : le fond renvoie parfois du vide ...
65                                if (!strlen($travaux)){
66                                        @define('_SPIP_SCRIPT','spip.php');
67                                        echo "Acces interdit (en travaux) <a href='"
68                                        .generer_url_action('logout',"logout=public",false,true)
69                                        ."'>Deconnexion</a>";
70                                }
71                                else
72                                        echo $travaux;
73                                die();
74                        }
75                }
76        }
77}
78
79/**
80 * Pipeline styliser pour rerouter tous les fonds vers en_travaux
81 * sauf si l'auteur connecte est celui qui a active le plugin
82 *
83 * @param array $flux
84 * @return array
85 */
86function entravaux_styliser($flux){
87        if (is_entravaux()){
88                include_spip('inc/autoriser');
89                if (!autoriser('travaux')
90                        AND !in_array(
91                                    $flux['args']['fond'],
92                                                // les pages exceptions
93                              array('login_sos','robots.txt','spip_pass',
94                              )
95                            )
96                        // et on laisse passer modeles et formulaires,
97                        // qui ne peuvent etre inclus ou appeles que legitimement
98                  AND strncmp($flux['args']['fond'],'modeles/',8)!=0
99                  AND strncmp($flux['args']['fond'],'formulaires/',12)!=0){
100                        $fond = trouver_fond('inclure/entravaux','',true);
101                        $flux['data'] = $fond['fond'];
102                }
103        }
104        return $flux;
105}
106
107
108/**
109 * Afficher une icone de travaux sur tout le site public pour que le webmestre n'oublie pas
110 * de retablir le site
111 *
112 * @param string $flux
113 */
114function entravaux_affichage_final($flux){
115        if (is_entravaux()
116                AND !test_espace_prive()
117                AND $GLOBALS['html']
118                AND !_AJAX){
119                include_spip('inc/filtres'); // pour http_img_pack
120                $x = '<div id="icone_travaux" style="
121                padding-right: 5px;
122                padding-top: 2px;
123                padding-bottom: 5px;
124                position: absolute;
125                left: 26px;
126                top: 26px;
127                ">'
128                . http_img_pack(chemin_image('entravaux-64.png'), _T('entravaux:en_travaux'), '', _T('entravaux:en_travaux'))
129                . '</div>';
130                if (!$pos = strpos($flux, '</body>'))
131                        $pos = strlen($flux);
132                $flux = substr_replace($flux, $x, $pos, 0);
133        }
134        return $flux;
135}
136
137/**
138 * Afficher une notice sur l'accueil de ecrire
139 * @param array $flux
140 * @return array
141 */
142function entravaux_affiche_milieu($flux){
143        if (is_entravaux()){
144                if ($flux['args']['exec']=='accueil'){
145                        $notice = recuperer_fond('inclure/entravaux_notice_ecrire',array());
146                        if (strlen(trim($notice)))
147                                $flux['data'] =  $notice . $flux['data'];
148                }
149        }
150        if ($flux['args']['exec']=='configurer_identite'){
151                $flux['data'] .= recuperer_fond('prive/squelettes/contenu/configurer_entravaux',array());
152        }
153        return $flux;
154}
155
156?>
Note: See TracBrowser for help on using the repository browser.