verification de la version
[mtweb] / mw / mw_app.php
index 86978c2..990d7a7 100644 (file)
@@ -3,6 +3,23 @@
   class mw_app{
 
     var $env;
+    var $path_file;
+    var $pathes;
+    var $config_file;
+    var $config;
+    var $bdd;
+    var $error;
+    var $DO_SETUP;
+
+    function mw_app($path_file, $DO_SETUP = false){
+      $this->DO_SETUP = $DO_SETUP;
+      $this->path_file = $path_file;
+      $this->pathes = array();
+      $this->config_file = "";
+      $this->config = array();
+      $this->bdd = array();
+      $this->error = false;
+    }
 
     function set_env(&$env){
       $this->env =& $env;
       return $this->env;
     }
 
-    function init($config_file){
-      require $config_file;
-      $PATHES["mw_dir"] .= $PATHES["mw_dir"] && substr($PATHES["mw_dir"], -1) != "/" ? "/" : "";
-      $PATHES["mw_path"] .= $PATHES["mw_path"] && substr($PATHES["mw_path"], -1) != "/" ? "/" : "";
-      if(!isset($CONFIG)) $CONFIG = array();
-      $env = false;
-      $this->set_env($env);
+    function param($name){
+      if(!isset($this->env)) return false;
+      return $this->env->param($name);
+    }
+
+    function init(){
+      if(!$this->init_pathes()) return $this->get_error();
+      if(!$this->init_config()) return $this->get_error();
+      if(!$this->init_env()) return $this->get_error();
+      if(!$this->config_file){
+        if($this->DO_SETUP){
+          $this->setup();
+          exit;
+        }
+        return $this->get_error();
+      }
+      $env = $this->env();
+      if(!$env->version("mtweb")){
+        $this->error("impossible de lire la version du code");
+        return $this->get_error();
+      }
+      $data = $env->data();
+      if($data->version("mtweb") != $env->version("mtweb")){
+        $this->upgrade();
+        exit;
+      }
+      return true;
+    }
+
+    function init_pathes(){
+      if(($n = strpos($_SERVER["REQUEST_URI"], "?")) !== false){
+        $_SERVER["REQUEST_URI"] = substr($_SERVER["REQUEST_URI"], 0, $n);
+      }
+      $web_path = explode("/", preg_replace('#/+#','/',$_SERVER["REQUEST_URI"]));
+      $this->pathes["web"] = "";
+      for($i = 0; $i < count($web_path) - 1; $i++) $this->pathes["web"] .= $web_path[$i]."/";
       if(
-            ($sxml_class_file = (file_exists($PATHES["mw_dir"]."libs/sxml.php") ? $PATHES["mw_dir"]."libs/sxml.php" : ""))
-        &&  ($empty_class_file = (file_exists($PATHES["mw_dir"]."libs/empty_class.php") ? $PATHES["mw_dir"]."libs/empty_class.php" : ""))
-        &&  ($env_class_file = (file_exists($PATHES["mw_dir"]."env/mw_env.php") ? $PATHES["mw_dir"]."env/mw_env.php" : ""))
+            !$this->path_file
+        ||  !file_exists($this->path_file)
       ){
-        require $sxml_class_file;
-        require $empty_class_file;
-        require $env_class_file;
-        $env = new mw_env(true);
-        $this->set_env($env);
-        $env->load_modules($PATHES["mw_dir"], "env/modules/");
-        $env->set_config_file($config_file);
-        $env->set_PATHES($PATHES);
-        $env->init_plugins();
-        $env->load_config($bdd, $CONFIG);
-        $env->init();
-      }
-      return $this->env();
-    }
-
-    function run($etat = ""){
+        $this->error("le fichier des chemins est introuvable");
+        return false;
+      }
+      require $this->path_file;
+      if(
+            !isset($PATHES)
+        ||  !is_array($PATHES)
+      ){
+        $this->error("variable PATHES non defini");
+        return false;
+      }
+      foreach($PATHES as $path_name => $path_value){
+        $this->pathes[$path_name] = $path_value;
+        $this->pathes[$path_name] .= $path_value && substr($path_value, -1) != "/" ? "/" : "";
+      }
+      if(
+            !isset($this->pathes["mw_dir"])
+        ||  !isset($this->pathes["mw_path"])
+        ||  !isset($this->pathes["content"])
+      ){
+        $this->error("variable PATHES incomplete");
+        return false;
+      }
+      if(
+            !file_exists($this->pathes["content"])
+        ||  !is_dir($this->pathes["content"])
+      ){
+        $this->error("dossier content introuvable");
+        return false;
+      }
+      if(!is_writable($this->pathes["content"])){
+        $this->error("Php ne peut pas ecrire dans le dossier content");
+        return false;
+      }
+      return true;
+    }
+
+    function init_config(){
+      if(file_exists($config_file = $this->pathes["content"]."config/config.php")){
+        $this->config_file = $config_file;
+        require_once $this->config_file;
+        if(
+              isset($CONFIG)
+          &&  is_array($CONFIG)
+        ){
+          foreach($CONFIG as $config_name => $config_value){
+            $this->config[$config_name] = $config_value;
+          }
+        }
+        if(
+              isset($bdd)
+          &&  is_array($bdd)
+        ){
+          foreach($bdd as $bdd_key => $bdd_value){
+            $this->bdd[$bdd_key] = $bdd_value;
+          }
+        }
+      }
+      else{
+        if(!$this->DO_SETUP){
+          $this->error("fichier config.php manquant");
+          return false;
+        }
+      }
+      return true;
+    }
+
+    function init_env(){
+      if(
+            !($sxml_class_file = (file_exists($this->pathes["mw_dir"]."libs/sxml.php") ? $this->pathes["mw_dir"]."libs/sxml.php" : ""))
+        ||  !($empty_class_file = (file_exists($this->pathes["mw_dir"]."libs/empty_class.php") ? $this->pathes["mw_dir"]."libs/empty_class.php" : ""))
+        ||  !($env_class_file = (file_exists($this->pathes["mw_dir"]."env/mw_env.php") ? $this->pathes["mw_dir"]."env/mw_env.php" : ""))
+      ){
+        $this->error("des fichiers sont introuvables. impossible d'initialiser l'environnement");
+        return false;
+      }
+      if(!class_exists("sxml")) require_once $sxml_class_file;
+      if(!class_exists("empty_class")) require_once $empty_class_file;
+      if(!class_exists("mw_env")) require_once $env_class_file;
+      if(
+            !class_exists("sxml")
+        ||  !class_exists("empty_class")
+        ||  !class_exists("mw_env")
+      ){
+        $this->error("des classes sont introuvables. impossible d'initialiser l'environnement");
+        return false;
+      }
+      $env = new mw_env(true);
+      $this->set_env($env);
+      $env->load_modules($this->pathes["mw_dir"], "env/modules/");
+      $env->set_config_file($this->config_file);
+      $env->set_PATHES($this->pathes);
+      $env->init_plugins();
+      $env->load_versions();
+      $env->load_config($this->bdd, $this->config);
+      $env->init();
+      return true;
+    }
+
+    function run($etat = "", $params = array(), $valid_role = true){
       $env = $this->env();
-      $etat = ($etat === false ? false : ($etat ? $etat : (isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : "")));
-      if($etat !== false) $env->run($etat);
+      if(!is_callable(array($env, "run"))) return false;
+      $env->run($etat);
+      return true;
     }
   
     function display(){
       }
     }
 
-  }
+    function setup(){
+      $env = $this->env();
+      $etat = isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : "install";
+      $env->run($etat, array(), false);
+      $this->display();
+    }
+
+    function upgrade(){
+      debug("la base de données doit être mise à jour");
+    }
+
+    function error($content){
+      $this->error = $content;
+    }
 
-?>
\ No newline at end of file
+    function get_error(){
+      return isset($this->error) && $this->error ? $this->error : false;
+    }
+
+  }