3
* $Horde: horde/admin/user.php,v 1.47.10.2 2005/02/08 19:38:36 chuck Exp $
5
* Copyright 1999-2005 Chuck Hagenbuch <chuck@horde.org>
7
* See the enclosed file COPYING for license information (LGPL). If you
8
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
11
@define('HORDE_BASE', dirname(__FILE__) . '/..');
12
require_once HORDE_BASE . '/lib/base.php';
13
require_once 'Horde/Menu.php';
14
require_once 'Horde/Form.php';
15
require_once 'Horde/Variables.php';
16
require_once 'Horde/Form/Renderer.php';
17
require_once 'Horde/Variables.php';
19
if (!Auth::isAdmin()) {
20
Horde::fatal('Forbidden.', __FILE__, __LINE__);
22
$auth = &Auth::singleton($conf['auth']['driver']);
24
if ($conf['signup']['approve']) {
25
require_once 'Horde/Auth/Signup.php';
26
$signup = &Auth_Signup::singleton();
29
$vars = &Variables::getDefaultVariables();
30
$addForm = &new Horde_Form($vars, _("Add a new user:"), 'adduser');
31
$addForm->setButtons(_("Add user"), _("Reset"));
33
$vars->set('form', 'add');
34
$addForm->addHidden('', 'form', 'text', true, true);
35
$addForm->addVariable(_("Username"), 'user_name', 'text', true);
36
$addForm->addVariable(_("Password"), 'password', 'passwordconfirm', false, false, _("type the password twice to confirm"));
38
/* Use hooks get any extra fields for new accounts. */
39
$extra = Horde::callHook('_horde_hook_signup_getextra');
40
if (!is_a($extra, 'PEAR_Error') && !empty($extra)) {
41
foreach ($extra as $field_name => $field) {
42
$readonly = isset($field['readonly']) ? $field['readonly'] : null;
43
$desc = isset($field['desc']) ? $field['desc'] : null;
44
$field_params = isset($field['params']) ? $field['params'] : array();
46
$addForm->addVariable($field['label'], 'extra[' . $field_name . ']', $field['type'], $field['required'], $readonly, $desc, $field_params);
51
// Process forms. Use Util::getPost() instead of Util::getFormData()
52
// for a lot of the data because we want to actively ignore GET data
53
// in some cases - adding/modifying users - as a security precaution.
54
switch (Util::getFormData('form')) {
56
$addForm->validate($vars);
58
if ($addForm->isValid() && $vars->get('formname') == 'adduser') {
59
$addForm->getInfo($vars, $info);
61
if (empty($info['user_name'])) {
62
$notification->push(_("You must specify the username to add."), 'horde.error');
65
$credentials = array('password' => $info['password']);
66
if (isset($info['extra'])) {
67
foreach ($info['extra'] as $field => $value) {
68
$credentials[$field] = $value;
72
if (is_a($ret = $auth->addUser($info['user_name'], $credentials), 'PEAR_Error')) {
73
$notification->push(sprintf(_("There was a problem adding '%s' to the system: %s"), $info['user_name'], $ret->getMessage()), 'horde.error');
75
if (isset($info['extra'])) {
76
$result = Horde::callHook('_horde_hook_signup_addextra',
77
array($info['user_name'], $info['extra']));
78
if (is_a($result, 'PEAR_Error')) {
79
$notification->push(sprintf(_("Added '%s' to the system, but could not add additional signup information: %s."), $info['user_name'], $result->getMessage()), 'horde.warning');
82
if (Util::getFormData('removeQueuedSignup')) {
83
$signup->removeQueuedSignup($info['user_name']);
85
$notification->push(sprintf(_("Successfully added '%s' to the system."), $info['user_name']), 'horde.success');
86
$addForm->unsetVars($vars);
93
$f_user_name = Util::getFormData('user_name');
98
$f_user_name = Util::getFormData('user_name');
99
if (empty($f_user_name)) {
100
$notification->push(_("You must specify a username to remove."), 'horde.message');
101
} elseif (Util::getFormData('submit') !== _("Cancel")) {
102
if (is_a($result = $auth->removeUser($f_user_name), 'PEAR_Error')) {
103
$notification->push(sprintf(_("There was a problem removing '%s' from the system: ") . $result->getMessage(), $f_user_name), 'horde.error');
105
$notification->push(sprintf(_("Successfully removed '%s' from the system."), $f_user_name), 'horde.success');
108
$vars->remove('user_name');
112
$f_user_name = Util::getFormData('user_name');
117
$f_user_name = Util::getFormData('user_name');
118
if (empty($f_user_name)) {
119
$notification->push(_("You must specify a username to clear out."), 'horde.message');
120
} elseif (Util::getFormData('submit') !== _("Cancel")) {
121
if (is_a($result = $auth->removeUserData($f_user_name), 'PEAR_Error')) {
122
$notification->push(sprintf(_("There was a problem clearing data for user '%s' from the system: ") . $result->getMessage(), $f_user_name), 'horde.error');
124
$notification->push(sprintf(_("Successfully cleared data for user '%s' from the system."), $f_user_name), 'horde.success');
127
$vars->remove('user_name');
131
$f_user_name = Util::getFormData('user_name');
136
$user_name_1 = Util::getPost('user_name');
137
$user_name_2 = Util::getPost('user_name2', $user_name_1);
138
$fullname = Util::getPost('user_fullname');
139
$email = Util::getPost('user_email');
141
if ($auth->hasCapability('update')) {
142
$user_pass_1 = Util::getPost('user_pass_1');
143
$user_pass_2 = Util::getPost('user_pass_2');
145
if (empty($user_name_1)) {
146
$notification->push(_("You must specify the username to update."), 'horde.error');
147
} elseif (empty($user_pass_1) || empty($user_pass_2)) {
148
// Don't update, but don't complain.
149
} elseif ($user_pass_1 != $user_pass_2) {
150
$notification->push(_("Passwords must match."), 'horde.error');
152
$result = $auth->updateUser($user_name_1,
154
array('password' => $user_pass_1));
158
if (isset($result) && is_a($result, 'PEAR_Error')) {
159
$notification->push(sprintf(_("There was a problem updating '%s': %s"),
160
$user_name_1, $result->getMessage()), 'horde.error');
162
require_once 'Horde/Identity.php';
163
$identity = &Identity::singleton('none', $user_name_1);
164
$identity->setValue('fullname', $fullname);
165
$identity->setValue('from_addr', $email);
168
$notification->push(sprintf(_("Successfully updated '%s'"),
169
$user_name_2), 'horde.success');
171
$vars->remove('user_name');
175
$thisSignup = $signup->getQueuedSignup(Util::getFormData('user_name'));
176
$info = $thisSignup->getData();
178
$vars->set('password',
179
array('original' => $info['password'],
180
'confirm' => $info['password']));
181
unset($info['password']);
182
$vars->set('extra', $info);
184
$vars->set('removeQueuedSignup', true);
185
$addForm->addHidden('', 'removeQueuedSignup', 'boolean', true);
188
case 'removequeued_f':
189
$f_user_name = Util::getFormData('user_name');
190
$removequeued_form = true;
194
$result = $signup->removeQueuedSignup(Util::getFormData('user_name'));
195
if (is_a($result, 'PEAR_Error')) {
196
$notification->push($result);
198
$notification->push(sprintf(_("The signup request for %s has been removed."), Util::getFormData('user_name')));
204
$title = _("User Administration");
205
require HORDE_TEMPLATES . '/common-header.inc';
206
require HORDE_TEMPLATES . '/admin/common-header.inc';
207
$notification->notify(array('listeners' => 'status'));
209
if (isset($update_form) && $auth->hasCapability('list')) {
210
require_once 'Horde/Identity.php';
211
$identity = &Identity::singleton('none', $f_user_name);
212
require HORDE_TEMPLATES . '/admin/user/update.inc';
213
} elseif (isset($remove_form) && $auth->hasCapability('list') && $auth->hasCapability('remove')) {
214
require HORDE_TEMPLATES . '/admin/user/remove.inc';
215
} elseif (isset($clear_form)) {
216
require HORDE_TEMPLATES . '/admin/user/clear.inc';
217
} elseif (isset($removequeued_form)) {
218
require HORDE_TEMPLATES . '/admin/user/removequeued.inc';
219
} elseif ($auth->hasCapability('add')) {
220
require HORDE_TEMPLATES . '/admin/user/add.inc';
221
if ($conf['signup']['approve']) {
222
require HORDE_TEMPLATES . '/admin/user/approve.inc';
225
require HORDE_TEMPLATES . '/admin/user/noadd.inc';
228
if ($auth->hasCapability('list')) {
230
/* If we aren't supplied with a page number, default to page 0. */
231
$page = Util::getFormData('page', 0);
232
$search_pattern = Util::getFormData('search_pattern', '');
234
$users = $auth->listUsers();
235
if (is_a($users, 'PEAR_Error')) {
236
Horde::fatal($users, __FILE__, __LINE__);
239
/* Returns only users that match the specified pattern. */
240
require_once 'Horde/Array.php';
241
$users = preg_grep('/' . $search_pattern . '/', $users);
244
require_once 'Horde/UI/Pager.php';
245
$viewurl = Util::addParameter('admin/user.php', 'search_pattern', $search_pattern);
247
$numitem = count($users);
250
$min = $page * $perpage;
251
while ($min > $numitem) {
253
$min = $page * $perpage;
255
$max = $min + $perpage;
257
$start = ($page * $perpage) + 1;
258
$end = min($numitem, $start + $perpage - 1);
260
require HORDE_TEMPLATES . '/admin/user/list.inc';
262
require HORDE_TEMPLATES . '/admin/user/nolist.inc';
265
require HORDE_TEMPLATES . '/common-footer.inc';