module config et role webmaster
[mtweb] / mw / app / mods / config / roles.php
diff --git a/mw/app/mods/config/roles.php b/mw/app/mods/config/roles.php
new file mode 100644 (file)
index 0000000..16774cb
--- /dev/null
@@ -0,0 +1,150 @@
+<?php
+
+  class mw_config_roles extends mw_mod{
+
+    var $roles;
+
+    function validate(&$env){
+      $data = $env->data();
+      if(($this->roles = $data->roles()) === false) return "impossible de lire la liste des roles";
+      return true;
+    }
+
+    function index(&$env){
+      $data = $env->data();
+      $roles = $this->roles;
+      $id_role = isset($_GET[$env->param("id")]) && $_GET[$env->param("id")] ? $_GET[$env->param("id")] : 0;
+      if(!isset($roles) || $roles === false){
+        $env->erreur("impossible de lire la liste des roles");
+        return;
+      }
+      if(($actions = $data->get_actions($id_role)) === false){
+        $env->erreur("impossible de lire la liste des droits d'acces");
+        return;
+      }
+      $env->set_out("roles", $roles);
+      $env->set_out("id_role", $id_role);
+      $env->set_out("actions", $actions);
+    }
+
+    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("config/roles"),
+        "la configuration default_allow a &eacute;t&eacute; enregistr&eacute;e"
+      );
+    }
+
+    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("config/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("config/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_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("config/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("config/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