quelques ajouts / corrections
[mtweb] / mw / env / modules / mw_env_run.php
index 51b6330..d4b63ab 100644 (file)
@@ -9,12 +9,12 @@
       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");