verification des droits en ecriture
[mtweb] / mw / mw_app.php
index 9af31bc..e666add 100644 (file)
@@ -9,10 +9,10 @@
     var $config;
     var $bdd;
     var $error;
-    var $DO_SETUP;
+    var $DO_INSTALL;
 
-    function mw_app($path_file, $DO_SETUP = false){
-      $this->DO_SETUP = $DO_SETUP;
+    function mw_app($path_file, $DO_INSTALL = false){
+      $this->DO_INSTALL = $DO_INSTALL;
       $this->path_file = $path_file;
       $this->pathes = array();
       $this->config_file = "";
       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) return true;
-      if($this->DO_SETUP) $this->setup();
-      return $this->get_error();
+      if(!$this->config_file){
+        if($this->DO_INSTALL){
+          $this->install();
+          exit;
+        }
+        return $this->get_error();
+      }
+      $env = $this->env();
+      if(($res = $env->data_upgrade_required()) === true){
+        $this->upgrade();
+        exit;
+      }
+      else{
+        if($res !== false){
+          $this->error($res);
+          return $this->get_error();
+        }
+      }
+      return true;
     }
 
     function init_pathes(){
-      if(($n = strpos($_SERVER["REQUEST_URI"], "?")) !== false){
-        $_SERVER["REQUEST_URI"] = substr($_SERVER["REQUEST_URI"], 0, $n);
+      $REQUEST_URI = $_SERVER["REQUEST_URI"];
+      if(($n = strpos($REQUEST_URI, "?")) !== false){
+        $REQUEST_URI = substr($REQUEST_URI, 0, $n);
       }
-      $web_path = explode("/", preg_replace('#/+#','/',$_SERVER["REQUEST_URI"]));
+      $web_path = explode("/", preg_replace('#/+#','/',$REQUEST_URI));
       $this->pathes["web"] = "";
       for($i = 0; $i < count($web_path) - 1; $i++) $this->pathes["web"] .= $web_path[$i]."/";
       if(
         $this->error("dossier content introuvable");
         return false;
       }
-      if(!is_writable($this->pathes["content"])){
+      if(
+            !is_writable($this->pathes["content"])
+        ||  !is_writable($this->pathes["content"]."config")
+        ||  !is_writable($this->pathes["content"]."data")
+      ){
         $this->error("Php ne peut pas ecrire dans le dossier content");
         return false;
       }
         }
       }
       else{
-        if(!$this->DO_SETUP){
+        if(!$this->DO_INSTALL){
           $this->error("fichier config.php manquant");
           return false;
         }
       $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();
+      if(($res = $env->init_data_upgrades()) !== true){
+        $this->error("impossible de lire les upgrades. ".$res);
+        return false;
+      }
       return true;
     }
 
       return true;
     }
   
+    function run_mod($mod_name, $valid_role = true){
+      $env = $this->env();
+      $etat = false;
+      if(isset($_GET[$env->param("e")])){
+        $etat = $env->valid_etat($_GET[$env->param("e")]);
+        if(!$etat || ($etat["mod"] != $mod_name)){
+          $etat = false;
+        }
+      }
+      if(!$etat){
+        $etat = $env->valid_etat($mod_name);
+      }
+      if(!$etat) return false;
+      $env->run($etat, array(), $valid_role);
+      return true;
+    }
+
+    function install(){
+      if($this->run_mod("install", false)){
+        $this->display();
+      }
+    }
+
+    function upgrade(){
+      if($this->run_mod("upgrade", false)){
+        $this->display();
+      }
+    }
+
     function display(){
       $env = $this->env();
       if($env->etat_is_valid()){
       }
     }
 
-    function setup(){
-      $env = $this->env();
-      $etat = isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : "install";
-      $env->run($etat, array(), false);
-      $this->display();
-      exit;
-    }
-
     function error($content){
       $this->error = $content;
     }