roles multiples possible par user, administrables
[mtweb] / mw / app / mods / admin / users.php
index 12f3e56..95dfed0 100644 (file)
       return true;
     }
 
+    // ------------------------------------------------------------------------------------
+    //                                                                         utilisateurs
+    //
+
     function index(&$env){
       $data = $env->data();
+      if($this->status) $env->set_out("status", $this->status);
+      else{
+        $env->erreur("impossible de lire la liste des status");
+        return;
+      }
       if(
-        $env->set_out(
-          "users",
-          $data->users(
+        ( $users = $data->users(
             isset($_GET[$env->param("start")]) ? $_GET[$env->param("start")] : 0,
             isset($_GET[$env->param("alpha")]) ? $_GET[$env->param("alpha")] : null,
             isset($_GET[$env->param("status")]) ? $_GET[$env->param("status")] : null
           )
         ) !== false
       ){
-        if($this->status){
-          $env->set_out("status", $this->status);
-        }
-        else $env->erreur("impossible de lire la liste des status");
+        $env->set_out("users", $users);
       }
       else $env->erreur("impossible de lire la liste des utilisateurs");
     }
       $data = $env->data();
       if($this->status){
         $env->set_out("status", $this->status);
-        $env->set_out("user", array("status" => $data->creation_default_status()));
+        $user = array(
+          "login" => "",
+          "email" => "",
+          "status" => array()
+        );
         if($_POST){
-          $env->set_out("user", $_POST);
+          $VALID = true;
           if($_POST["login"]){
-            if(($exists = $data->user($_POST["login"])) !== false){
-              if(!$exists){
-                $VALID = true;
-                if(!$_POST["email"]){
-                  $env->message("merci de preciser un email");
-                  $VALID = false;
-                }
-                if(!$_POST["password"]){
-                  $env->message("merci de preciser un mot de passe");
-                  $VALID = false;
-                }
-                if($_POST["password"] != $_POST["password_confirm"]){
-                  $env->message("la confirmation du mot de passe est incorrecte");
-                  $VALID = false;
-                }
-                if($VALID){
-                  if(
-                    $data->add_user(
-                      $_POST["login"],
-                      md5($_POST["password"]),
-                      $_POST["email"],
-                      $_POST["status"]
-                    )
-                  ){
-                    $env->redirect(
-                      $env->url("admin/users"),
-                      "l'utilisateur <strong>".$_POST["login"]."</strong> a &eacute;t&eacute; ajout&eacute;"
-                    );
-                  }
-                  else $env->erreur("Impossible d'ajouter l'utilisateur");
-                }
+            $user["login"] = $_POST["login"];
+          }
+          else{
+            $env->message("merci de pr&eacute;ciser un login");
+            $VALID = false;
+          }
+          if(($exists = $data->user($_POST["login"])) !== false){
+            if($exists){
+              $env->message("ce login existe d&eacute;j&agrave;");
+              $VALID = false;
+            }
+          }
+          else{
+            $env->erreur("impossible de savoir si cet login existe d&eacute;j&agrave;");
+            return;
+          }
+          if($_POST["email"]) $user["email"] = $_POST["email"];
+          else{
+            $env->message("merci de preciser un email");
+            $VALID = false;
+          }
+          if($_POST["password"]){
+            if($_POST["password"] == $_POST["password_confirm"]) $user["password"] = md5($_POST["password"]);
+            else{
+              $env->message("la confirmation du mot de passe est incorrecte");
+              $VALID = false;
+            }
+          }
+          else{
+            $env->message("merci de preciser un mot de passe");
+            $VALID = false;
+          }
+          $user["status"] = array();
+          foreach($_POST as $key => $value){
+            if(substr($key, 0, 7) == "status_"){
+              $id_role = substr($key, 7);
+              if(preg_match("/^[0-9]+$/", $id_role)){
+                $user["status"][] = $id_role;
               }
-              else $env->message("ce login existe d&eacute;j&agrave;");
             }
-            else $env->erreur("impossible de savoir si cet login existe d&eacute;j&agrave;");
           }
-          else $env->message("merci de pr&eacute;ciser un login");
+          if($VALID){
+            if(
+              $data->add_user(
+                $user["login"],
+                $user["password"],
+                $user["email"],
+                $user["status"]
+              )
+            ){
+              $env->redirect(
+                $env->url("admin/users/edit", array("id" => $user["login"])),
+                "l'utilisateur <strong>".$_POST["login"]."</strong> a &eacute;t&eacute; ajout&eacute;"
+              );
+            }
+            else $env->erreur("Impossible d'ajouter l'utilisateur");
+          }
         }
+        $env->set_out("user", $user);
       }
       else $env->erreur("impossible de lire la liste des status");
     }
       $data = $env->data();
       if($this->status){
         $env->set_out("status", $this->status);
-        if($env->set_out("user", $data->user($_GET[$env->param("id")]))){
+        if($user = $data->user($_GET[$env->param("id")])){
           if($_POST){
-            $user = $env->out("user");
-            $id = $user["id"];
-            $login = $user["login"];
-            $password = $user["password"];
-            $_POST["login"] = $login;
-            $env->set_out("user", $_POST);
             $VALID = true;
-            if(!$_POST["email"]){
+            if($_POST["email"]) $user["email"] = $_POST["email"];
+            else{
               $env->message("merci de preciser un email");
               $VALID = false;
             }
                 $env->message("la confirmation du mot de passe est incorrecte");
                 $VALID = false;
               }
+              if($VALID) $user["password"] = md5($_POST["password"]);
+            }
+            $user["status"] = array();
+            foreach($_POST as $key => $value){
+              if(substr($key, 0, 7) == "status_"){
+                $id_role = substr($key, 7);
+                if(preg_match("/^[0-9]+$/", $id_role) && isset($this->status[$id_role])){
+                  $user["status"][] = $id_role;
+                }
+              }
             }
             if($VALID){
               if(
                 $data->set_user(
-                  $id,
-                  $login,
-                  isset($_POST["change_password"]) && $_POST["change_password"] ? md5($_POST["password"]) : $password,
-                  $_POST["email"],
-                  $_POST["status"]
+                  $user["id"],
+                  $user["login"],
+                  $user["password"],
+                  $user["email"],
+                  $user["status"]
                 )
               )
               $env->redirect(
-                $env->url("admin/users"),
-                "l'utilisateur <strong>".$login."</strong> a &eacute;t&eacute; modifi&eacute;"
+                $env->url("admin/users/edit", array("id" => $user["login"])),
+                "l'utilisateur a &eacute;t&eacute; modifi&eacute;"
               );
               else $env->erreur("Impossible de mettre &agrave; jour l'utilisateur");
             }
           }
+          $env->set_out("user", $user);
         }
         else $env->erreur("Impossible de lire les informations de cet utilisateur");
       }
       else $env->erreur("Impossible de lire les informations de cet utilisateur");
     }
 
+    // ------------------------------------------------------------------------------------
+    //                                                                                roles
+    //
+
+    function set_default_allow(&$env){
+      $default_allow = $_GET[$env->param("id")];
+      if(!isset($default_allow) || ($default_allow !== "0" && $default_allow !== "1")){
+        $env->erreur("parametre default_allow invalide");
+        return;
+      }
+      $data = $env->data();
+      if(!$data->set_config("default_allow", $default_allow)){
+        $env->erreur("impossible de mettre a jour la configuration default_allow");
+        return;
+      }
+      $env->redirect(
+        $env->url("admin/users/roles"),
+        "la configuration default_allow a &eacute;t&eacute; enregistr&eacute;e"
+      );
+    }
+
+    function roles(&$env){
+      $data = $env->data();
+      $roles = $data->status();
+      $id_role = isset($_GET[$env->param("id")]) && $_GET[$env->param("id")] ? $_GET[$env->param("id")] : 0;
+      $env->set_out("id_role", $id_role);
+      if(!isset($roles) || $roles === false){
+        $env->erreur("impossible de lire la liste des roles");
+        return;
+      }
+      $env->set_out("roles", $roles);
+      if(($actions = $data->get_actions($id_role)) === false){
+        $env->erreur("impossible de lire la liste des droits d'acces");
+        return;
+      }
+      $env->set_out("actions", $actions);
+
+    }
+
+    function add_role(&$env){
+      $data = $env->data();
+      $role = array(
+        "nom" => "",
+        "intitule" => ""
+      );
+      if($_POST){
+        if(!($role["nom"] = $_POST["nom"])) $env->message("merci de preciser un nom");
+        if(!($role["intitule"] = $_POST["intitule"])) $env->message("merci de preciser un intitule");
+        if(!$env->messages()){
+          if(($id_role = $data->add_role($role["nom"], $role["intitule"])) !== false){
+            $env->redirect(
+              $env->url("admin/users/roles", array("id" => $id_role)),
+              "le r&ocirc;le a &eacute;t&eacute; enregistr&eacute;"
+            );
+          }
+          else $env->erreur("impossible d'enregistrer les informations du role");
+        }
+      }
+      $env->set_out("role", $role);
+    }
+
+    function edit_role(&$env){
+      $data = $env->data();
+      if(!isset($_GET[$env->param("id")]) || !($role = $data->get_role($_GET[$env->param("id")]))){
+        $env->erreur("impossible de lire les informations du role");
+        return;
+      }
+      if($_POST){
+        if(!($role["nom"] = $_POST["nom"])) $env->message("merci de preciser un nom");
+        if(!($role["intitule"] = $_POST["intitule"])) $env->message("merci de preciser un intitule");
+        if(!$env->messages()){
+          if($data->set_role($role["id"], $role["nom"], $role["intitule"])){
+            $env->redirect(
+              $env->url("admin/users/roles", array("id" => $role["id"])),
+              "le r&ocirc;le a &eacute;t&eacute; enregistr&eacute;"
+            );
+          }
+          else $env->erreur("impossible d'enregistrer les informations du role");
+        }
+      }
+      $env->set_out("role", $role);
+    }
+
+    function save_role(&$env){
+      $data = $env->data();
+      if(!($role = $data->get_role($_POST["id_role"]))){
+        $env->erreur("impossible de lire les informations du role");
+        return;
+      }
+      if(!$data->clear_role_actions($role["id"])){
+        $env->erreur("impossible de supprimer les actions du role");
+        return;
+      }
+      $action_status = array();
+      $als = array();
+      foreach($_POST as $key => $value){
+        if(substr($key, 0, 7) == "module_" && ($action = substr($key, 7))) $action_status[$action] = $role["id"];
+        elseif(substr($key, 0, 11) == "controleur_" && ($action = substr($key, 11))) $action_status[$action] = $role["id"];
+        elseif(substr($key, 0, 3) == "al_" && ($al_index = substr($key, 3))) $als[] = $al_index;
+      }
+      foreach($als as $al_index){
+        $al_prefix = "action_".$al_index."_";
+        $al_prefix_length = strlen($al_prefix);
+        foreach($_POST as $key => $value){
+          if(substr($key, 0, $al_prefix_length) == $al_prefix) $action_status[$value] = $role["id"];
+        }
+      }
+      foreach($action_status as $action => $id_role){
+        if(!$data->add_role_action($id_role, $action)){
+          $env->erreur("impossible d'enregistrer les actions du role");
+          return;
+        }
+      }
+      $env->redirect(
+        $env->url("admin/users/roles", array("id" => $role["id"])),
+        "les actions du r&ocirc;le ont &eacute;t&eacute; enregistr&eacute;es"
+      );
+    }
+
+    function del_role(&$env){
+      $data = $env->data();
+      if(!isset($_GET[$env->param("id")]) || !($role = $data->get_role($_GET[$env->param("id")]))){
+        $env->erreur("impossible de lire les informations du role");
+        return;
+      }
+      if($data->clear_role_actions($role["id"])){
+        if($data->clear_role_users($role["id"])){
+          if($data->del_role($role["id"])){
+            $env->redirect(
+              $env->url("admin/users/roles"),
+              "le r&ocirc;le a &eacute;t&eacute; effac&eacute;"
+            );
+          }
+          else $env->erreur("impossible de supprimer le role");
+        }
+        else $env->erreur("impossible de supprimer le role aux utilisateurs");
+      }
+      else $env->erreur("impossible de supprimer les actions du role");
+    }
+
   }
 
 ?>
\ No newline at end of file