+ // ------------------------------------------------------------------------------------
+ // 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->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ô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_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ô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");
+ }
+