ef2ab228a9bf5c9a88b3467f0a8b4a6078666066
[gnucomo.git] / src / web / users.php
1 <?php 
2
3 /**************************************************************************
4 **  (c) Copyright 2003, Andromeda Technology & Automation
5 ** This is free software; you can redistribute it and/or modify it under the
6 ** terms of the GNU General Public License, see the file COPYING.
7 ***************************************************************************
8 ** MODULE INFORMATION *
9 ***********************
10 **      FILE NAME      : users.php
11 **      SYSTEM NAME    : Gnucomo - Gnu Computer Monitoring
12 **      VERSION NUMBER : $Revision: 1.4 $
13 **
14 **  DESCRIPTION      :  User Administration page.
15 **                      Input parameters: action (POST) : empty, 'Create'
16 **                                 username (POST) : name of the user to create or remove
17 **
18 **  EXPORTED OBJECTS : 
19 **  LOCAL    OBJECTS : 
20 **  MODULES  USED    :
21 ***************************************************************************
22 **  ADMINISTRATIVE INFORMATION *
23 ********************************
24 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
25 **      CREATION DATE   : Dec 04, 2002
26 **      LAST UPDATE     : Feb 14, 2003
27 **      MODIFICATIONS   : 
28 **************************************************************************/
29
30 /*****************************
31    $Log: users.php,v $
32    Revision 1.4  2004-01-10 20:03:02  arjen
33    *** empty log message ***
34
35    Revision 1.3  2003/02/21 08:44:19  arjen
36    Add a new user and make him/her a member of a group.
37    Change of passwords added.
38
39    Revision 1.2  2003/02/13 09:01:29  arjen
40    All web interface pages use the page class.
41
42 ******************************/
43
44 // RCSID = "$Id: users.php,v 1.4 2004-01-10 20:03:02 arjen Exp $";
45
46 ini_set('include_path', '.:./classes:../phpclasses');
47
48 require_once('page.class.php');
49
50 function clientscripts()
51 {
52
53 ?>
54 <script language='JavaScript'>
55 function CheckCreate(f)
56 {
57    if (f.username.value == "")
58    {
59       alert("You must supply a username");
60       return false;
61    }
62    if (f.passwd.value == "")
63    {
64       alert("You must supply a password");
65       return false;
66    }
67    if (f.passwd.value != f.pwverify.value)
68    {
69       alert("Passwords don't match");
70       return false;
71    }
72    return true;
73 }
74
75 function CheckRemove(f)
76 {
77    var message = "Are you sure you want to remove user ";
78    message += f.username.value;
79    message += " ?";
80
81    return confirm(message);
82 }
83
84 function CheckPW(f)
85 {
86    if (f.passwd.value == "")
87    {
88       alert("You must supply a password");
89       return false;
90    }
91    if (f.passwd.value != f.pwverify.value)
92    {
93       alert("Passwords don't match");
94       return false;
95    }
96    return true;
97 }
98 </script>
99
100 <?php
101 }
102
103 class user_page extends page
104 {
105
106    function Body()
107    {
108
109    if (isset($_POST['action']) && $_POST['action'] == 'Create' && !empty($_POST['username']))
110    {
111       $query = "CREATE USER " . $_POST['username'] . " PASSWORD '"
112                       . $_POST['passwd'] . "' IN GROUP " . $_POST['group'];
113       if (pg_exec($this->database, $query) == FALSE &&
114                   strstr(pg_errormessage($this->database), "already exists") == false)
115       {
116          echo "You can not create a new user: " . pg_errormessage($this->database) . ".<br>";
117       }
118       else
119       {
120          pg_exec($this->database, "INSERT INTO usr (username, security_level) VALUES ('"
121                      . $_POST['username'] . "','" . $_POST['seclevel'] . "')");
122       }
123    }
124
125    if (isset($_POST['action']) && $_POST['action'] == 'Remove' && !empty($_POST['username']))
126    {
127       pg_exec($this->database, "DELETE FROM usr WHERE username='" . $_POST['username'] . "'");
128       pg_exec($this->database, "DROP USER " . $_POST['username']);
129    }
130
131    if (isset($_POST['action']) && $_POST['action'] == 'Change Password')
132    {
133       pg_exec($this->database, "ALTER USER " . $_SESSION['username'] .
134                                " PASSWORD '" . $_POST['passwd'] . "'");
135    }
136
137    if (isset($_GET['username']))
138    {
139       echo "<h1>Detailed information for user " . $_GET['username'] . "</h1><br>\n";
140
141       if (isset($_POST['action']) && $_POST['action'] == 'Save Changes')
142       {
143          $qry = "UPDATE usr SET display_name='" . $_POST['dspname'] . "'";
144          $qry .= ", email='" . $_POST['email'] . "'";
145          $qry .= ", security_level='" . $_POST['seclevel'] . "'";
146          $qry .= " WHERE username='" . $_GET['username'] . "'";
147
148          pg_exec($this->database, $qry);
149       }
150       $res = pg_exec($this->database, "SELECT * from usr
151                                        WHERE username='" . $_GET['username'] . "'");
152       $usr = pg_fetch_object($res, 0);
153
154       echo "<form action='users.php?username=" . $usr->username . "' method='POST'>";
155       echo "<table>";
156
157       echo "<tr><td>Display name</td><td><input name='dspname' type='text' value='";
158       echo $usr->display_name . "'></td></tr>";
159       echo "<tr><td>Email address</td><td><input name='email' type='text' value='";
160       echo $usr->email . "'></td></tr>";
161
162       echo "<tr><td>Security level</td><td><select name='seclevel'>";
163       for ($seclevel = 1; $seclevel < 6; $seclevel++)
164       {
165          echo "<option value='$seclevel'";
166          if ($seclevel == $usr->security_level)
167          {
168             echo " selected='true'";
169          }
170          echo ">$seclevel</option>\n";
171       }
172       echo "</select></td></tr>";
173       echo "</table>";
174       echo "<input type='submit' name='action' value='Save Changes'>";
175       echo "</form>";
176    }
177    else
178    {
179    echo "<h1>User Administration</h1><hr>";
180    $res = pg_exec($this->database, "SELECT username, display_name, email, security_level
181                                     FROM usr ORDER BY username");
182
183    echo "<table>";
184    $usr = 0;
185    while ($usr < pg_numrows($res))
186    {
187       $u = pg_fetch_object($res, $usr);
188       ?>
189       <tr><td align='center'><a href='users.php?username=<?php echo $u->username ?>'><img src='user.png'></a><br>
190              <b><?php echo $u->username ?></b>
191       </td><td>
192          <?php echo $u->display_name ?>
193       </td><td>
194          <?php echo $u->email ?>
195       </td><td>
196          Sec. Level <?php echo $u->security_level ?>
197       </td><td>
198           <?php if ($_SESSION['username'] != $u->username)
199           {
200           ?>
201           <form action='users.php' method='post' onSubmit='return CheckRemove(this)'>
202               <input type='hidden' name='username' value='<?php echo $u->username ?>'>
203               <input type='submit' name='action' value='Remove'>
204           </form>
205           <?php
206           }
207           ?>
208       </td></tr>
209       <?php
210       $usr++;
211    }
212    echo "</table>";
213
214 ?>
215
216 <h2>Create new user:</h2>
217 <p>
218
219 <form action='users.php' method='post' onSubmit='return CheckCreate(this)'>
220 User name: <input name='username' type='text'>
221 Group: <select name='group'>
222 <option value='view'>View</option>
223 <option value='ops'>Operator</option>
224 <option value='admin'>Admin</option>
225 </select>
226 Security level: <select name='seclevel'>
227 <option value='1'>1</option>
228 <option value='2'>2</option>
229 <option value='3'>3</option>
230 <option value='4'>4</option>
231 <option value='5'>5</option>
232 </select>
233 <br>
234 Password: <input type='password' name='passwd'>
235 Verify password: <input type='password' name='pwverify'>
236 <br>
237 <input type='submit' name='action' value='Create'>
238 </form>
239 </p>
240
241 <h2>Change your password:</h2>
242 <form action='users.php' method='post' onSubmit='return CheckPW(this)'>
243 New Password: <input type='password' name='passwd'>
244 Verify password: <input type='password' name='pwverify'>
245 <br>
246 <input type='submit' name='action' value='Change Password'>
247 </form>
248 <?php
249    }
250    }
251 }
252
253 $page = new user_page("Gnucomo User Administration");
254
255 $page->Showpage();
256
257 ?>