3 class mw_env_run extends mw_env{
9 if(!($data = $this->data())) return array();
10 return $data->get_session_user();
13 function set_etat($etat, $valid_role = true){
14 if(($this->etat = $this->valid_etat($etat)) !== false){
15 if(!$valid_role || $this->action_allowed($this->etat, false)){
20 $this->erreur("Vous n'avez pas le role requis pour effectuer cette action");
21 $this->call_observers("action_permission_denied", array("etat" => $etat));
24 else $this->erreur("etat invalide");
28 function valid_etat($etat){
35 $_etat["mod"] = isset($etat["mod"]) ? $etat["mod"] : "";
36 $_etat["controller"] = isset($etat["controller"]) ? $etat["controller"] : "";
37 $_etat["action"] = isset($etat["action"]) ? $etat["action"] : "";
40 $etat = explode("/", $etat);
41 foreach($etat as $etat_item){
43 if(!$_etat["mod"]) $_etat["mod"] = $etat_item;
45 if(!$_etat["controller"]) $_etat["controller"] = $etat_item;
47 if(!$_etat["action"]) $_etat["action"] = $etat_item;
55 $_etat["mod"] = "index";
56 $_etat["controller"] = "index";
57 $_etat["action"] = "index";
60 if(!$_etat["controller"]){
61 $_etat["controller"] = "index";
62 $_etat["action"] = "index";
65 if(!$_etat["action"]) $_etat["action"] = "index";
71 && isset($_etat["mod"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["mod"])
72 && isset($_etat["controller"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["controller"])
73 && isset($_etat["action"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["action"])
80 function etat_is_valid(){
81 return $this->valid_etat($this->etat);
84 function action_allowed($etat, $CHECK_FORMAT = true){
85 if(!$this->bdd("sgbd")) return false;
86 $data = $this->data();
87 if($CHECK_FORMAT) $etat = $this->valid_etat($etat);
89 $this->erreur("etat invalide");
92 if(($user_roles = $data->get_user_roles()) === false){
93 $this->erreur("Impossible de lire les roles de l'utilisateur courant");
97 $this->erreur("L'utilisateur courant n'a aucun role");
102 $action_roles = $data->get_action_roles(
109 $this->erreur("Impossible de lire les roles des actions en base");
112 foreach($user_roles as $id_role){
113 $OK = $this->config("default_allow");
114 $action = $etat["mod"];
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]);
121 $action = $etat["mod"]."/".$etat["controller"];
122 if(isset($action_roles[$action])){
124 (isset($action_roles[$action][0]) && $action_roles[$action][0])
125 || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
129 $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"];
130 if(isset($action_roles[$action])){
132 (isset($action_roles[$action][0]) && $action_roles[$action][0])
133 || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
141 function run($etat, $params = array(), $valid_role = true){
142 if($this->set_etat($etat, $valid_role)){
143 if($controller = $this->get_controller($this->etat("mod")."/".$this->etat("controller"))){
144 $action_method = $this->etat("action");
145 if(method_exists($controller, $action_method)){
146 foreach($params as $params_method => $values){
147 foreach($values as $key => $value){
148 switch(strtolower($params_method)){
150 $_GET[$this->param($key)] = $value;
153 $_POST[$key] = $value;
158 if(($controller_validate = $controller->validate()) === true){
159 if(($controller_prepare_inputs = $controller->prepare_inputs()) === true){
160 $etat_before = $this->etat;
161 $this->call_observers("before_action");
162 $controller->$action_method($this);
163 $etat_after = $this->etat;
164 $this->etat = $etat_before;
165 $this->call_observers("after_action");
166 $this->etat = $etat_after;
168 else $this->erreur($controller_prepare_inputs);
170 else $this->erreur($controller_validate);
172 else $this->erreur("Impossible de trouver l'action ".$this->etat("action"));
174 else $this->erreur("Impossible d'instancier le controleur ".$this->etat("controller"));
178 function is_running($etat){
181 if(isset($etat["mod"])){
182 $_etat["mod"] = $etat["mod"];
183 if(isset($etat["controller"])){
184 $_etat["controller"] = $etat["controller"];
185 if(isset($etat["action"])) $_etat["action"] = $etat["action"];
190 $etat = explode("/", $etat);
191 foreach($etat as $etat_item){
193 if(!isset($_etat["mod"])) $_etat["mod"] = $etat_item;
195 if(!isset($_etat["controller"])) $_etat["controller"] = $etat_item;
197 if(!isset($_etat["action"])) $_etat["action"] = $etat_item;
205 if($IS_RUNNING && isset($_etat["mod"])) $IS_RUNNING = ($_etat["mod"] == $this->etat("mod"));
206 if($IS_RUNNING && isset($_etat["controller"])) $IS_RUNNING = ($_etat["controller"] == $this->etat("controller"));
207 if($IS_RUNNING && isset($_etat["action"])) $IS_RUNNING = ($_etat["action"] == $this->etat("action"));
211 function etat($name = null){
212 if(!isset($name)) return $this->etat;
213 return $this->etat[$name];
216 function get_controller($controller_path){
217 if($etat = $this->valid_etat($controller_path)){
218 if(!isset($this->controllers)) $this->controllers = array();
219 if(!isset($this->controllers[$etat["mod"]])) $this->controllers[$etat["mod"]] = array();
220 if(!isset($this->controllers[$etat["mod"]][$etat["controller"]])){
221 $controller_class = "mw_".$etat["mod"]."_".$etat["controller"];
222 if(!class_exists($controller_class)){
223 $controller_file = "controllers/".$etat["mod"]."/".$etat["controller"].".php";
224 if($this->app_file_exists($controller_file, "DESC")){
225 require_once $this->app_file($controller_file, "DESC");
227 if(!class_exists($controller_class)) return false;
229 $this->controllers[$etat["mod"]][$etat["controller"]] = new $controller_class();
230 $this->controllers[$etat["mod"]][$etat["controller"]]->set_env($this);
232 return $this->controllers[$etat["mod"]][$etat["controller"]];
243 function set_env(&$env){
255 function prepare_inputs(){