6b23503e0125c0580087c5d1d8fb53ce53ccdd9b
[mtweb] / mw / app / controllers / admin / users.php
1 <?php
2
3   class mw_admin_users extends mw_controller{
4
5     var $roles;
6
7     function validate(){
8       $env = $this->env();
9       $data = $env->data();
10       if(($this->roles = $data->roles()) === false) return "impossible de lire la liste des roles";
11       return true;
12     }
13
14     function index(){
15       $env = $this->env();
16       $data = $env->data();
17       if($this->roles) $env->set_out("roles", $this->roles);
18       else{
19         $env->erreur("impossible de lire la liste des roles");
20         return;
21       }
22       if(
23         ( $users = $data->users(
24             isset($_GET[$env->param("start")]) ? $_GET[$env->param("start")] : 0,
25             isset($_GET[$env->param("alpha")]) ? $_GET[$env->param("alpha")] : null,
26             isset($_GET[$env->param("role")]) ? $_GET[$env->param("role")] : null
27           )
28         ) !== false
29       ){
30         $env->set_out("users", $users);
31       }
32       else $env->erreur("impossible de lire la liste des utilisateurs");
33     }
34
35     function add(){
36       $env = $this->env();
37       $data = $env->data();
38       if(!$this->roles){
39         $env->erreur("impossible de lire la liste des roles");
40         return;
41       }
42       $user = $env->get_model(
43         "users",
44         array(
45           "login" => "",
46           "email" => ""
47         )
48       );
49       $user->set_roles(array());
50       if($_POST){
51         $roles = array();
52         foreach($_POST as $key => $value){
53           if(substr($key, 0, 5) == "role_"){
54             $id_role = substr($key, 5);
55             if(preg_match("/^[0-9]+$/", $id_role) && isset($this->roles[$id_role])){
56               $roles[] = $id_role;
57             }
58           }
59         }
60         $user->set_roles($roles);
61         $user->set_email($_POST["email"]);
62         $user->set_login($_POST["login"]);
63         $user->set_password($_POST["password"]);
64         $valid = $user->valid();
65         foreach($valid["messages"] as $message) $env->message($message);
66         if(!$env->messages()){
67           if(($exists = $data->user($user->get_login())) === false){
68             $env->erreur("impossible de savoir si ce login existe d&eacute;j&agrave;");
69             return;
70           }
71           if($exists){
72             $env->message("ce login existe d&eacute;j&agrave;");
73           }
74           if($_POST["password"] !== $_POST["password_confirm"]){
75             $env->message("la confirmation du mot de passe est incorrecte");
76           }
77         }
78         if(!$env->messages()){
79           if(!$user->insert()){
80             $env->erreur("Impossible d'ajouter l'utilisateur");
81             return;
82           }
83           $env->redirect(
84             $env->url("admin/users/edit", array("id" => $user->get_login())),
85             "l'utilisateur a &eacute;t&eacute; ajout&eacute;"
86           );
87         }
88       }
89       $env->set_out("roles", $this->roles);
90       $env->set_out("user", $user->get_values());
91     }
92
93     function edit(){
94       $env = $this->env();
95       if(!$this->roles){
96         $env->erreur("impossible de lire la liste des roles");
97         return;
98       }
99       $user = $env->get_model("users");
100       if(!$user->load("login", $_GET[$env->param("id")])){
101         $env->erreur("impossible de lire les informations de l'utilisateur");
102         return;
103       }
104       if($_POST){
105         $roles = array();
106         foreach($_POST as $key => $value){
107           if(substr($key, 0, 5) == "role_"){
108             $id_role = substr($key, 5);
109             if(preg_match("/^[0-9]+$/", $id_role) && isset($this->roles[$id_role])){
110               $roles[] = $id_role;
111             }
112           }
113         }
114         $user->set_roles($roles);
115         $user->set_email($_POST["email"]);
116         if(isset($_POST["change_password"]) && $_POST["change_password"]){
117           if(!$_POST["password"]){
118             $env->message("merci de preciser un mot de passe");
119           }
120           if($_POST["password"] != $_POST["password_confirm"]){
121             $env->message("la confirmation du mot de passe est incorrecte");
122           }
123           if(!$env->messages()) $user->set_password($_POST["password"]);
124         }
125         $valid = $user->valid();
126         foreach($valid["messages"] as $message) $env->message($message);
127         if(!$env->messages()){
128           if($user->update("id", $user->get_id())){
129             $env->redirect(
130               $env->url("admin/users/edit", array("id" => $user->get_login())),
131               "l'utilisateur a &eacute;t&eacute; modifi&eacute;"
132             );
133           }
134           else $env->erreur("Impossible de mettre &agrave; jour l'utilisateur");
135         }
136       }
137       $env->set_out("roles", $this->roles);
138       $env->set_out("user", $user->get_values());
139     }
140
141     function del(){
142       $env = $this->env();
143       $user = $env->get_model("users");
144       if(!$user->load("login", $_GET[$env->param("id")])){
145         $env->erreur("impossible de lire les informations de l'utilisateur");
146         return;
147       }
148       if(!$user->delete("login", $user->get_login())){
149         $env->erreur("Impossible de supprimer l'utilisateur");
150         return;
151       }
152       $env->redirect(
153         $env->url("admin/users"),
154         "l'utilisateur a &eacute;t&eacute; supprim&eacute;"
155       );
156     }
157
158   }
159
160 ?>