verification de la version
[mtweb] / mw / mw_app.php
1 <?php
2
3   class mw_app{
4
5     var $env;
6     var $path_file;
7     var $pathes;
8     var $config_file;
9     var $config;
10     var $bdd;
11     var $error;
12     var $DO_SETUP;
13
14     function mw_app($path_file, $DO_SETUP = false){
15       $this->DO_SETUP = $DO_SETUP;
16       $this->path_file = $path_file;
17       $this->pathes = array();
18       $this->config_file = "";
19       $this->config = array();
20       $this->bdd = array();
21       $this->error = false;
22     }
23
24     function set_env(&$env){
25       $this->env =& $env;
26     }
27
28     function env(){
29       return $this->env;
30     }
31
32     function param($name){
33       if(!isset($this->env)) return false;
34       return $this->env->param($name);
35     }
36
37     function init(){
38       if(!$this->init_pathes()) return $this->get_error();
39       if(!$this->init_config()) return $this->get_error();
40       if(!$this->init_env()) return $this->get_error();
41       if(!$this->config_file){
42         if($this->DO_SETUP){
43           $this->setup();
44           exit;
45         }
46         return $this->get_error();
47       }
48       $env = $this->env();
49       if(!$env->version("mtweb")){
50         $this->error("impossible de lire la version du code");
51         return $this->get_error();
52       }
53       $data = $env->data();
54       if($data->version("mtweb") != $env->version("mtweb")){
55         $this->upgrade();
56         exit;
57       }
58       return true;
59     }
60
61     function init_pathes(){
62       if(($n = strpos($_SERVER["REQUEST_URI"], "?")) !== false){
63         $_SERVER["REQUEST_URI"] = substr($_SERVER["REQUEST_URI"], 0, $n);
64       }
65       $web_path = explode("/", preg_replace('#/+#','/',$_SERVER["REQUEST_URI"]));
66       $this->pathes["web"] = "";
67       for($i = 0; $i < count($web_path) - 1; $i++) $this->pathes["web"] .= $web_path[$i]."/";
68       if(
69             !$this->path_file
70         ||  !file_exists($this->path_file)
71       ){
72         $this->error("le fichier des chemins est introuvable");
73         return false;
74       }
75       require $this->path_file;
76       if(
77             !isset($PATHES)
78         ||  !is_array($PATHES)
79       ){
80         $this->error("variable PATHES non defini");
81         return false;
82       }
83       foreach($PATHES as $path_name => $path_value){
84         $this->pathes[$path_name] = $path_value;
85         $this->pathes[$path_name] .= $path_value && substr($path_value, -1) != "/" ? "/" : "";
86       }
87       if(
88             !isset($this->pathes["mw_dir"])
89         ||  !isset($this->pathes["mw_path"])
90         ||  !isset($this->pathes["content"])
91       ){
92         $this->error("variable PATHES incomplete");
93         return false;
94       }
95       if(
96             !file_exists($this->pathes["content"])
97         ||  !is_dir($this->pathes["content"])
98       ){
99         $this->error("dossier content introuvable");
100         return false;
101       }
102       if(!is_writable($this->pathes["content"])){
103         $this->error("Php ne peut pas ecrire dans le dossier content");
104         return false;
105       }
106       return true;
107     }
108
109     function init_config(){
110       if(file_exists($config_file = $this->pathes["content"]."config/config.php")){
111         $this->config_file = $config_file;
112         require_once $this->config_file;
113         if(
114               isset($CONFIG)
115           &&  is_array($CONFIG)
116         ){
117           foreach($CONFIG as $config_name => $config_value){
118             $this->config[$config_name] = $config_value;
119           }
120         }
121         if(
122               isset($bdd)
123           &&  is_array($bdd)
124         ){
125           foreach($bdd as $bdd_key => $bdd_value){
126             $this->bdd[$bdd_key] = $bdd_value;
127           }
128         }
129       }
130       else{
131         if(!$this->DO_SETUP){
132           $this->error("fichier config.php manquant");
133           return false;
134         }
135       }
136       return true;
137     }
138
139     function init_env(){
140       if(
141             !($sxml_class_file = (file_exists($this->pathes["mw_dir"]."libs/sxml.php") ? $this->pathes["mw_dir"]."libs/sxml.php" : ""))
142         ||  !($empty_class_file = (file_exists($this->pathes["mw_dir"]."libs/empty_class.php") ? $this->pathes["mw_dir"]."libs/empty_class.php" : ""))
143         ||  !($env_class_file = (file_exists($this->pathes["mw_dir"]."env/mw_env.php") ? $this->pathes["mw_dir"]."env/mw_env.php" : ""))
144       ){
145         $this->error("des fichiers sont introuvables. impossible d'initialiser l'environnement");
146         return false;
147       }
148       if(!class_exists("sxml")) require_once $sxml_class_file;
149       if(!class_exists("empty_class")) require_once $empty_class_file;
150       if(!class_exists("mw_env")) require_once $env_class_file;
151       if(
152             !class_exists("sxml")
153         ||  !class_exists("empty_class")
154         ||  !class_exists("mw_env")
155       ){
156         $this->error("des classes sont introuvables. impossible d'initialiser l'environnement");
157         return false;
158       }
159       $env = new mw_env(true);
160       $this->set_env($env);
161       $env->load_modules($this->pathes["mw_dir"], "env/modules/");
162       $env->set_config_file($this->config_file);
163       $env->set_PATHES($this->pathes);
164       $env->init_plugins();
165       $env->load_versions();
166       $env->load_config($this->bdd, $this->config);
167       $env->init();
168       return true;
169     }
170
171     function run($etat = "", $params = array(), $valid_role = true){
172       $env = $this->env();
173       if(!is_callable(array($env, "run"))) return false;
174       $env->run($etat);
175       return true;
176     }
177   
178     function display(){
179       $env = $this->env();
180       if($env->etat_is_valid()){
181         $template = $env->get_template();
182         $layout = $env->init_layout();
183         $template->render_layout($layout);
184       }
185     }
186
187     function setup(){
188       $env = $this->env();
189       $etat = isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : "install";
190       $env->run($etat, array(), false);
191       $this->display();
192     }
193
194     function upgrade(){
195       debug("la base de données doit être mise à jour");
196     }
197
198     function error($content){
199       $this->error = $content;
200     }
201
202     function get_error(){
203       return isset($this->error) && $this->error ? $this->error : false;
204     }
205
206   }