X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=mw%2Fapp%2Fmods%2Fadmin%2Fusers.php;h=302096ba85c21492415952e3a3215de5eb9e9206;hb=568c721d53fb84b5e9b3facb2addccaf6deb35f9;hp=12f3e561cfae5f792ea3f5e81e57ab5776bbafb1;hpb=36ed114046cbe3d72a3589230e9f306a54fcc79d;p=mtweb diff --git a/mw/app/mods/admin/users.php b/mw/app/mods/admin/users.php index 12f3e56..302096b 100644 --- a/mw/app/mods/admin/users.php +++ b/mw/app/mods/admin/users.php @@ -2,98 +2,122 @@ class mw_admin_users extends mw_mod{ - var $status; + var $roles; function validate(&$env){ $data = $env->data(); - if(($this->status = $data->status()) === false) return "impossible de lire la liste des statuts"; + if(($this->roles = $data->roles()) === false) return "impossible de lire la liste des statuts"; return true; } + // ------------------------------------------------------------------------------------ + // utilisateurs + // + function index(&$env){ $data = $env->data(); + if($this->roles) $env->set_out("roles", $this->roles); + else{ + $env->erreur("impossible de lire la liste des roles"); + 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 + isset($_GET[$env->param("role")]) ? $_GET[$env->param("role")] : 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"); } function add(&$env){ $data = $env->data(); - if($this->status){ - $env->set_out("status", $this->status); - $env->set_out("user", array("status" => $data->creation_default_status())); + if($this->roles){ + $env->set_out("roles", $this->roles); + $user = array( + "login" => "", + "email" => "", + "roles" => 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 ".$_POST["login"]." a été ajouté" - ); - } - else $env->erreur("Impossible d'ajouter l'utilisateur"); - } + $user["login"] = $_POST["login"]; + } + else{ + $env->message("merci de préciser un login"); + $VALID = false; + } + if(($exists = $data->user($_POST["login"])) !== false){ + if($exists){ + $env->message("ce login existe déjà"); + $VALID = false; + } + } + else{ + $env->erreur("impossible de savoir si cet login existe déjà"); + 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["roles"] = array(); + foreach($_POST as $key => $value){ + if(substr($key, 0, 5) == "role_"){ + $id_role = substr($key, 5); + if(preg_match("/^[0-9]+$/", $id_role)){ + $user["roles"][] = $id_role; } - else $env->message("ce login existe déjà"); } - else $env->erreur("impossible de savoir si cet login existe déjà"); } - else $env->message("merci de préciser un login"); + if($VALID){ + if( + $data->add_user( + $user["login"], + $user["password"], + $user["email"], + $user["roles"] + ) + ){ + $env->redirect( + $env->url("admin/users/edit", array("id" => $user["login"])), + "l'utilisateur ".$_POST["login"]." a été ajouté" + ); + } + else $env->erreur("Impossible d'ajouter l'utilisateur"); + } } + $env->set_out("user", $user); } - else $env->erreur("impossible de lire la liste des status"); + else $env->erreur("impossible de lire la liste des roles"); } function edit(&$env){ $data = $env->data(); - if($this->status){ - $env->set_out("status", $this->status); - if($env->set_out("user", $data->user($_GET[$env->param("id")]))){ + if($this->roles){ + $env->set_out("roles", $this->roles); + 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; } @@ -106,28 +130,39 @@ $env->message("la confirmation du mot de passe est incorrecte"); $VALID = false; } + if($VALID) $user["password"] = md5($_POST["password"]); + } + $user["roles"] = array(); + foreach($_POST as $key => $value){ + if(substr($key, 0, 5) == "role_"){ + $id_role = substr($key, 5); + if(preg_match("/^[0-9]+$/", $id_role) && isset($this->roles[$id_role])){ + $user["roles"][] = $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["roles"] ) ) $env->redirect( - $env->url("admin/users"), - "l'utilisateur ".$login." a été modifié" + $env->url("admin/users/edit", array("id" => $user["login"])), + "l'utilisateur a été modifié" ); else $env->erreur("Impossible de mettre à 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 la liste des status"); + else $env->erreur("impossible de lire la liste des roles"); } function del(&$env){ @@ -143,6 +178,146 @@ 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 été enregistrée" + ); + } + + function roles(&$env){ + $data = $env->data(); + $roles = $data->roles(); + $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ôle a été enregistré" + ); + } + 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ôle a été enregistré" + ); + } + 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_roles = array(); + $als = array(); + foreach($_POST as $key => $value){ + if(substr($key, 0, 7) == "module_" && ($action = substr($key, 7))) $action_roles[$action] = $role["id"]; + elseif(substr($key, 0, 11) == "controleur_" && ($action = substr($key, 11))) $action_roles[$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_roles[$value] = $role["id"]; + } + } + foreach($action_roles 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ôle ont été enregistré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ôle a été effacé" + ); + } + 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