X-Git-Url: http://git.dj3c1t.com/index.cgi?a=blobdiff_plain;f=mw%2Fmw_app.php;h=38d094d86f1c1f1e3c550b52734a740a03ec6f29;hb=af318ad7150a54780f3912d7fbf805c7382b2785;hp=044d711b84d4640c77d724ac2afdad097d5af256;hpb=0df77b6e0e0eee4060e73ca0d6955bf232aa23cc;p=mtweb diff --git a/mw/mw_app.php b/mw/mw_app.php index 044d711..38d094d 100644 --- a/mw/mw_app.php +++ b/mw/mw_app.php @@ -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_INSTALL; + + function mw_app($path_file, $DO_INSTALL = false){ + $this->DO_INSTALL = $DO_INSTALL; + $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; @@ -12,45 +29,195 @@ 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_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(){ + $REQUEST_URI = $_SERVER["REQUEST_URI"]; + if(($n = strpos($REQUEST_URI, "?")) !== false){ + $REQUEST_URI = substr($REQUEST_URI, 0, $n); + } + $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->path_file + || !file_exists($this->path_file) + ){ + $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( - ($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" : "")) + !file_exists($this->pathes["content"]) + || !is_dir($this->pathes["content"]) ){ - 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; + $this->error("dossier content introuvable"); + return false; + } + 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; + } + 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( - class_exists("sxml") - && class_exists("empty_class") - && class_exists("mw_env") + isset($CONFIG) + && is_array($CONFIG) ){ - $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(); + 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_INSTALL){ + $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; } - return $this->env(); + 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(); + $env->loaded_plugins(); + if(($res = $env->init_data_upgrades()) !== true){ + $this->error("impossible de lire les upgrades. ".$res); + return false; + } + 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, $params, $valid_role); + if(!is_callable(array($env, "run"))) return false; + $env->run($etat); + 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(){ + $env = $this->env(); + $data = $env->data(); + $data->load_session(); + if($this->run_mod("upgrade", false)){ + $this->display(); + } + } + function display(){ $env = $this->env(); if($env->etat_is_valid()){ @@ -60,6 +227,12 @@ } } - } + function error($content){ + $this->error = $content; + } -?> \ No newline at end of file + function get_error(){ + return isset($this->error) && $this->error ? $this->error : false; + } + + }