data(); return $data->get_session_user(); } function set_etat($etat, $valid_status = true){ if(($this->etat = $this->valid_etat($etat)) !== false){ if(!$valid_status || $this->status_ok($this->etat, false)){ return $this->etat; } else $this->erreur("Vous n'avez pas le statut requis pour effectuer cette action"); } else $this->erreur("etat invalide"); return false; } function valid_etat($etat){ $_etat = array(); $_etat["mod"] = ""; $_etat["controller"] = ""; $_etat["action"] = ""; if(is_array($etat)){ $_etat["mod"] = isset($etat["mod"]) ? $etat["mod"] : ""; $_etat["controller"] = isset($etat["controller"]) ? $etat["controller"] : ""; $_etat["action"] = isset($etat["action"]) ? $etat["action"] : ""; } else{ $etat = explode("/", $etat); foreach($etat as $etat_item){ if($etat_item){ if(!$_etat["mod"]) $_etat["mod"] = $etat_item; else{ if(!$_etat["controller"]) $_etat["controller"] = $etat_item; else{ if(!$_etat["action"]) $_etat["action"] = $etat_item; break; } } } } } if(!$_etat["mod"]){ $_etat["mod"] = "index"; $_etat["controller"] = "index"; $_etat["action"] = "index"; } else{ if(!$_etat["controller"]){ $_etat["controller"] = "index"; $_etat["action"] = "index"; } else{ if(!$_etat["action"]) $_etat["action"] = "index"; } } if( is_array($_etat) && count($_etat) == 3 && isset($_etat["mod"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["mod"]) && isset($_etat["controller"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["controller"]) && isset($_etat["action"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["action"]) ){ return $_etat; } return false; } function etat_is_valid(){ return $this->valid_etat($this->etat); } function status_ok($etat, $CHECK_FORMAT = true){ $data = $this->data(); if($CHECK_FORMAT) $etat = $this->valid_etat($etat); if($etat === false){ $this->erreur("etat invalide"); return false; } if(($user_status = $data->get_user_status()) === false){ $this->erreur("Impossible de lire les roles de l'utilisateur courant"); return false; } if(!$user_status){ $this->erreur("L'utilisateur courant n'a aucun role"); return false; } if( ( $action_status = $data->get_action_status( $etat["mod"], $etat["controller"], $etat["action"] ) ) === false ){ $this->erreur("Impossible de lire les status des actions en base"); return false; } foreach($user_status as $id_role){ $OK = $this->config("default_allow"); $action = $etat["mod"]; if(isset($action_status[$action])){ $OK = (isset($action_status[$action][0]) && $action_status[$action][0]) || (isset($action_status[$action][$id_role]) && $action_status[$action][$id_role]); } if(!$OK){ $action = $etat["mod"]."/".$etat["controller"]; if(isset($action_status[$action])){ $OK = (isset($action_status[$action][0]) && $action_status[$action][0]) || (isset($action_status[$action][$id_role]) && $action_status[$action][$id_role]); } } if(!$OK){ $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"]; if(isset($action_status[$action])){ $OK = (isset($action_status[$action][0]) && $action_status[$action][0]) || (isset($action_status[$action][$id_role]) && $action_status[$action][$id_role]); } } if($OK) break; } return $OK; } function run($etat, $valid_status = true, $params = array(), $method = "GET"){ if($this->set_etat($etat, $valid_status)){ $controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php"; if($this->app_file_exists($controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php", "DESC")){ if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php"); if(!class_exists($controller_class = "mw_".$this->etat("mod")."_".$this->etat("controller"))){ require $this->app_file($controller_file, "DESC"); } if(class_exists($controller_class)){ $controller = new $controller_class(); $action_method = $this->etat("action"); if(method_exists($controller, $action_method)){ foreach($params as $key => $value){ switch(strtolower($method)){ case "get": $_GET[$this->param($key)] = $value; break; case "post": $_POST[$key] = $value; break; default: break; } } if(($controller_validate = $controller->validate($this)) === true){ if(($controller_prepare_inputs = $controller->prepare_inputs($this)) === true){ $controller->$action_method($this); } else $this->erreur($controller_prepare_inputs); } else $this->erreur($controller_validate); } else $this->erreur("Impossible de trouver l'action ".$this->etat("action")); } else $this->erreur("Impossible d'instancier le controleur ".$this->etat("controller")); } else $this->erreur("Impossible de trouver le controleur ".$this->etat("controller")." pour le module ".$this->etat("mod")); } else $this->erreur("Impossible d'effectuer cette action"); } function etat($name){ return $this->etat[$name]; } function check_stop(){ return $this->etat("mod") == "reponses"; } function get_mod($mod_name){ if($etat = $this->valid_etat($mod_name)){ if($this->app_file_exists($controller_file = "mods/".$etat["mod"]."/".$etat["controller"].".php")){ if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php"); if(!class_exists($controller_class = "mw_".$etat["mod"]."_".$etat["controller"])){ require $this->app_file($controller_file); } if(class_exists($controller_class)){ return new $controller_class(); } } } return false; } } ?>