Your IP : 216.73.216.186


Current Path : /home/pressec/www/presselib/coup-de-pouce/mw/
Upload File :
Current File : /home/pressec/www/presselib/coup-de-pouce/mw/mw_app.php

<?php

  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;
    }

    function env(){
      return $this->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(
            !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;
    }

    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;
    }

    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();
      $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();
      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()){
        $template = $env->get_template();
        $layout = $env->init_layout();
        $template->render_layout($layout);
      }
    }

    function error($content){
      $this->error = $content;
    }

    function get_error(){
      return isset($this->error) && $this->error ? $this->error : false;
    }

  }