3 class mw_env_run extends mw_env{
9 return $data->get_session_user();
12 function set_etat($etat, $valid_role = true){
13 if(($this->etat = $this->valid_etat($etat)) !== false){
14 if(!$valid_role || $this->action_allowed($this->etat, false)){
17 else $this->erreur("Vous n'avez pas le role requis pour effectuer cette action");
19 else $this->erreur("etat invalide");
23 function valid_etat($etat){
26 $_etat["controller"] = "";
27 $_etat["action"] = "";
29 $_etat["mod"] = isset($etat["mod"]) ? $etat["mod"] : "";
30 $_etat["controller"] = isset($etat["controller"]) ? $etat["controller"] : "";
31 $_etat["action"] = isset($etat["action"]) ? $etat["action"] : "";
34 $etat = explode("/", $etat);
35 foreach($etat as $etat_item){
37 if(!$_etat["mod"]) $_etat["mod"] = $etat_item;
39 if(!$_etat["controller"]) $_etat["controller"] = $etat_item;
41 if(!$_etat["action"]) $_etat["action"] = $etat_item;
49 $_etat["mod"] = "index";
50 $_etat["controller"] = "index";
51 $_etat["action"] = "index";
54 if(!$_etat["controller"]){
55 $_etat["controller"] = "index";
56 $_etat["action"] = "index";
59 if(!$_etat["action"]) $_etat["action"] = "index";
65 && isset($_etat["mod"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["mod"])
66 && isset($_etat["controller"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["controller"])
67 && isset($_etat["action"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["action"])
74 function etat_is_valid(){
75 return $this->valid_etat($this->etat);
78 function action_allowed($etat, $CHECK_FORMAT = true){
79 $data = $this->data();
80 if($CHECK_FORMAT) $etat = $this->valid_etat($etat);
82 $this->erreur("etat invalide");
85 if(($user_roles = $data->get_user_roles()) === false){
86 $this->erreur("Impossible de lire les roles de l'utilisateur courant");
90 $this->erreur("L'utilisateur courant n'a aucun role");
95 $action_roles = $data->get_action_roles(
102 $this->erreur("Impossible de lire les roles des actions en base");
105 foreach($user_roles as $id_role){
106 $OK = $this->config("default_allow");
107 $action = $etat["mod"];
108 if(isset($action_roles[$action])){
110 (isset($action_roles[$action][0]) && $action_roles[$action][0])
111 || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
114 $action = $etat["mod"]."/".$etat["controller"];
115 if(isset($action_roles[$action])){
117 (isset($action_roles[$action][0]) && $action_roles[$action][0])
118 || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
122 $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"];
123 if(isset($action_roles[$action])){
125 (isset($action_roles[$action][0]) && $action_roles[$action][0])
126 || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
134 function run($etat, $valid_role = true, $params = array(), $method = "GET"){
135 if($this->set_etat($etat, $valid_role)){
136 $controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php";
137 if($this->app_file_exists($controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php", "DESC")){
138 if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php");
139 if(!class_exists($controller_class = "mw_".$this->etat("mod")."_".$this->etat("controller"))){
140 require $this->app_file($controller_file, "DESC");
142 if(class_exists($controller_class)){
143 $controller = new $controller_class();
144 $action_method = $this->etat("action");
145 if(method_exists($controller, $action_method)){
146 foreach($params as $key => $value){
147 switch(strtolower($method)){
148 case "get": $_GET[$this->param($key)] = $value; break;
149 case "post": $_POST[$key] = $value; break;
153 if(($controller_validate = $controller->validate($this)) === true){
154 if(($controller_prepare_inputs = $controller->prepare_inputs($this)) === true){
155 $controller->$action_method($this);
157 else $this->erreur($controller_prepare_inputs);
159 else $this->erreur($controller_validate);
161 else $this->erreur("Impossible de trouver l'action ".$this->etat("action"));
163 else $this->erreur("Impossible d'instancier le controleur ".$this->etat("controller"));
165 else $this->erreur("Impossible de trouver le controleur ".$this->etat("controller")." pour le module ".$this->etat("mod"));
167 else $this->erreur("Impossible d'effectuer cette action");
170 function etat($name){
171 return $this->etat[$name];
174 function check_stop(){
175 return $this->etat("mod") == "reponses";
178 function get_mod($mod_name){
179 if($etat = $this->valid_etat($mod_name)){
180 if($this->app_file_exists($controller_file = "mods/".$etat["mod"]."/".$etat["controller"].".php")){
181 if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php");
182 if(!class_exists($controller_class = "mw_".$etat["mod"]."_".$etat["controller"])){
183 require $this->app_file($controller_file);
185 if(class_exists($controller_class)){
186 return new $controller_class();