return $data->get_session_user();
}
- function set_etat($etat, $valid_status = true){
+ function set_etat($etat, $valid_role = true){
if(($this->etat = $this->valid_etat($etat)) !== false){
- if(!$valid_status || $this->status_ok($this->etat, false)){
+ if(!$valid_role || $this->action_allowed($this->etat, false)){
return $this->etat;
}
- else $this->erreur("Vous n'avez pas le statut requis pour effectuer cette action");
+ else $this->erreur("Vous n'avez pas le role requis pour effectuer cette action");
}
else $this->erreur("etat invalide");
return false;
return $this->valid_etat($this->etat);
}
- function status_ok($etat, $CHECK_FORMAT = true){
- $OK = $this->config("default_allow");
+ function action_allowed($etat, $CHECK_FORMAT = true){
$data = $this->data();
if($CHECK_FORMAT) $etat = $this->valid_etat($etat);
- if($etat !== false){
- if(($user_status = $data->get_user_status()) !== false){
- if(
- (
- $action_status = $data->get_action_status(
- $etat["mod"],
- $etat["controller"],
- $etat["action"]
- )
- ) !== false
- ){
- $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][$user_status]) && $action_status[$action][$user_status]);
- }
- else{
- $action = $etat["mod"]."/".$etat["controller"];
- if(isset($action_status[$action])){
- $OK =
- (isset($action_status[$action][0]) && $action_status[$action][0])
- || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]);
- }
- else{
- $action = $etat["mod"];
- if(isset($action_status[$action])){
- $OK =
- (isset($action_status[$action][0]) && $action_status[$action][0])
- || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]);
- }
- }
- }
+ if($etat === false){
+ $this->erreur("etat invalide");
+ return false;
+ }
+ if(($user_roles = $data->get_user_roles()) === false){
+ $this->erreur("Impossible de lire les roles de l'utilisateur courant");
+ return false;
+ }
+ if(!$user_roles){
+ $this->erreur("L'utilisateur courant n'a aucun role");
+ return false;
+ }
+ if(
+ (
+ $action_roles = $data->get_action_roles(
+ $etat["mod"],
+ $etat["controller"],
+ $etat["action"]
+ )
+ ) === false
+ ){
+ $this->erreur("Impossible de lire les roles des actions en base");
+ return false;
+ }
+ foreach($user_roles as $id_role){
+ $OK = $this->config("default_allow");
+ $action = $etat["mod"];
+ if(isset($action_roles[$action])){
+ $OK =
+ (isset($action_roles[$action][0]) && $action_roles[$action][0])
+ || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
+ }
+ if(!$OK){
+ $action = $etat["mod"]."/".$etat["controller"];
+ if(isset($action_roles[$action])){
+ $OK =
+ (isset($action_roles[$action][0]) && $action_roles[$action][0])
+ || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
+ }
+ }
+ if(!$OK){
+ $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"];
+ if(isset($action_roles[$action])){
+ $OK =
+ (isset($action_roles[$action][0]) && $action_roles[$action][0])
+ || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]);
}
- else $this->erreur("Impossible de lire les status des actions en base");
}
- else $this->erreur("Impossible de lire le statut de l'utilisateur courant");
+ if($OK) break;
}
- else $this->erreur("etat invalide");
return $OK;
}
- function run($etat, $valid_status = true, $params = array(), $method = "GET"){
- if($this->set_etat($etat, $valid_status)){
+ function run($etat, $valid_role = true, $params = array(), $method = "GET"){
+ if($this->set_etat($etat, $valid_role)){
$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(($controller_validate = $controller->validate($this)) === true){
if(($controller_prepare_inputs = $controller->prepare_inputs($this)) === true){
+ $etat_before = $this->etat;
+ $this->call_observers("before_action");
$controller->$action_method($this);
+ $etat_after = $this->etat;
+ $this->etat = $etat_before;
+ $this->call_observers("after_action");
+ $this->etat = $etat_after;
}
else $this->erreur($controller_prepare_inputs);
}
else $this->erreur("Impossible d'effectuer cette action");
}
- function etat($name){
+ function is_running($etat){
+ if($etat = $this->valid_etat($etat)){
+ return
+ ($etat["mod"] == $this->etat("mod"))
+ && ($etat["controller"] == $this->etat("controller"))
+ && ($etat["action"] == $this->etat("action"));
+ }
+ return false;
+ }
+
+ function etat($name = null){
+ if(!isset($name)) return $this->etat;
return $this->etat[$name];
}