DO_INSTALL = $DO_INSTALL; $this->path_file = $path_file; $this->pathes = array(); $this->config_file = ""; $this->config = array(); $this->bdd = array(); $this->error = false; } public function set_env(&$env){ $this->env =& $env; } public function env(){ return $this->env; } public function param($name){ if(!isset($this->env)) return false; return $this->env->param($name); } public 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; } public 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( !file_exists($this->pathes["content"]) || !is_dir($this->pathes["content"]) ){ $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; } public 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_INSTALL){ $this->error("fichier config.php manquant"); return false; } } return true; } public 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->load_plugins(); $env->load_config($this->bdd, $this->config); $env->load_data(); $env->load_sgbd(); $env->plugins_loaded(); $env->load_versions(); $env->load_data_upgrades(); $env->init(); $env->init_plugins(); return true; } public function run($etat = "", $params = array(), $valid_role = true){ $env = $this->env(); if(!is_callable(array($env, "run"))) return false; $env->run($etat); return true; } public 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; } public function install(){ if($this->run_mod("install", false)){ $this->display(); } } public function upgrade(){ $env = $this->env(); $data = $env->data(); $data->load_session(); if($this->run_mod("upgrade", false)){ $this->display(); } } public function display(){ $env = $this->env(); if($env->etat_is_valid()){ $template = $env->get_template(); $layout = $env->init_layout(); $template->render_layout($layout); } } public function error($content){ $this->error = $content; } public function get_error(){ return isset($this->error) && $this->error ? $this->error : false; } }