~ubuntu-branches/ubuntu/saucy/horde3/saucy

« back to all changes in this revision

Viewing changes to admin/user.php

  • Committer: Bazaar Package Importer
  • Author(s): Ola Lundqvist
  • Date: 2005-05-04 23:08:08 UTC
  • Revision ID: james.westby@ubuntu.com-20050504230808-p4hf3hk28o3v7wir
Tags: upstream-3.0.4
ImportĀ upstreamĀ versionĀ 3.0.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * $Horde: horde/admin/user.php,v 1.47.10.2 2005/02/08 19:38:36 chuck Exp $
 
4
 *
 
5
 * Copyright 1999-2005 Chuck Hagenbuch <chuck@horde.org>
 
6
 *
 
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.
 
9
 */
 
10
 
 
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';
 
18
 
 
19
if (!Auth::isAdmin()) {
 
20
    Horde::fatal('Forbidden.', __FILE__, __LINE__);
 
21
}
 
22
$auth = &Auth::singleton($conf['auth']['driver']);
 
23
 
 
24
if ($conf['signup']['approve']) {
 
25
    require_once 'Horde/Auth/Signup.php';
 
26
    $signup = &Auth_Signup::singleton();
 
27
}
 
28
 
 
29
$vars = &Variables::getDefaultVariables();
 
30
$addForm = &new Horde_Form($vars, _("Add a new user:"), 'adduser');
 
31
$addForm->setButtons(_("Add user"), _("Reset"));
 
32
 
 
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"));
 
37
 
 
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();
 
45
 
 
46
        $addForm->addVariable($field['label'], 'extra[' . $field_name . ']', $field['type'], $field['required'], $readonly, $desc, $field_params);
 
47
    }
 
48
}
 
49
 
 
50
 
 
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')) {
 
55
case 'add':
 
56
    $addForm->validate($vars);
 
57
 
 
58
    if ($addForm->isValid() && $vars->get('formname') == 'adduser') {
 
59
        $addForm->getInfo($vars, $info);
 
60
 
 
61
        if (empty($info['user_name'])) {
 
62
            $notification->push(_("You must specify the username to add."), 'horde.error');
 
63
 
 
64
        } else {
 
65
            $credentials = array('password' => $info['password']);
 
66
            if (isset($info['extra'])) {
 
67
                foreach ($info['extra'] as $field => $value) {
 
68
                    $credentials[$field] = $value;
 
69
                }
 
70
            }
 
71
 
 
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');
 
74
            } else {
 
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');
 
80
                    }
 
81
                }
 
82
                if (Util::getFormData('removeQueuedSignup')) {
 
83
                    $signup->removeQueuedSignup($info['user_name']);
 
84
                }
 
85
                $notification->push(sprintf(_("Successfully added '%s' to the system."), $info['user_name']), 'horde.success');
 
86
                $addForm->unsetVars($vars);
 
87
            }
 
88
        }
 
89
    }
 
90
    break;
 
91
 
 
92
case 'remove_f':
 
93
    $f_user_name = Util::getFormData('user_name');
 
94
    $remove_form = true;
 
95
    break;
 
96
 
 
97
case 'remove':
 
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');
 
104
        } else {
 
105
            $notification->push(sprintf(_("Successfully removed '%s' from the system."), $f_user_name), 'horde.success');
 
106
        }
 
107
    }
 
108
    $vars->remove('user_name');
 
109
    break;
 
110
 
 
111
case 'clear_f':
 
112
    $f_user_name = Util::getFormData('user_name');
 
113
    $clear_form = true;
 
114
    break;
 
115
 
 
116
case 'clear':
 
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');
 
123
        } else {
 
124
            $notification->push(sprintf(_("Successfully cleared data for user '%s' from the system."), $f_user_name), 'horde.success');
 
125
        }
 
126
    }
 
127
    $vars->remove('user_name');
 
128
    break;
 
129
 
 
130
case 'update_f':
 
131
    $f_user_name = Util::getFormData('user_name');
 
132
    $update_form = true;
 
133
    break;
 
134
 
 
135
case 'update':
 
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');
 
140
 
 
141
    if ($auth->hasCapability('update')) {
 
142
        $user_pass_1 = Util::getPost('user_pass_1');
 
143
        $user_pass_2 = Util::getPost('user_pass_2');
 
144
 
 
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');
 
151
        } else {
 
152
            $result = $auth->updateUser($user_name_1,
 
153
                                        $user_name_2,
 
154
                                        array('password' => $user_pass_1));
 
155
        }
 
156
    }
 
157
 
 
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');
 
161
    } else {
 
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);
 
166
        $identity->save();
 
167
 
 
168
        $notification->push(sprintf(_("Successfully updated '%s'"),
 
169
                                    $user_name_2), 'horde.success');
 
170
    }
 
171
    $vars->remove('user_name');
 
172
    break;
 
173
 
 
174
case 'approve_f':
 
175
    $thisSignup = $signup->getQueuedSignup(Util::getFormData('user_name'));
 
176
    $info = $thisSignup->getData();
 
177
 
 
178
    $vars->set('password',
 
179
               array('original' => $info['password'],
 
180
                     'confirm' => $info['password']));
 
181
    unset($info['password']);
 
182
    $vars->set('extra', $info);
 
183
 
 
184
    $vars->set('removeQueuedSignup', true);
 
185
    $addForm->addHidden('', 'removeQueuedSignup', 'boolean', true);
 
186
    break;
 
187
 
 
188
case 'removequeued_f':
 
189
    $f_user_name = Util::getFormData('user_name');
 
190
    $removequeued_form = true;
 
191
    break;
 
192
 
 
193
case 'removequeued':
 
194
    $result = $signup->removeQueuedSignup(Util::getFormData('user_name'));
 
195
    if (is_a($result, 'PEAR_Error')) {
 
196
        $notification->push($result);
 
197
    } else {
 
198
        $notification->push(sprintf(_("The signup request for %s has been removed."), Util::getFormData('user_name')));
 
199
    }
 
200
    break;
 
201
}
 
202
 
 
203
 
 
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'));
 
208
 
 
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';
 
223
    }
 
224
} else {
 
225
    require HORDE_TEMPLATES . '/admin/user/noadd.inc';
 
226
}
 
227
 
 
228
if ($auth->hasCapability('list')) {
 
229
 
 
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', '');
 
233
 
 
234
    $users = $auth->listUsers();
 
235
    if (is_a($users, 'PEAR_Error')) {
 
236
        Horde::fatal($users, __FILE__, __LINE__);
 
237
    }
 
238
 
 
239
    /* Returns only users that match the specified pattern. */
 
240
    require_once 'Horde/Array.php';
 
241
    $users = preg_grep('/' . $search_pattern . '/', $users);
 
242
    sort($users);
 
243
 
 
244
    require_once 'Horde/UI/Pager.php';
 
245
    $viewurl = Util::addParameter('admin/user.php', 'search_pattern', $search_pattern);
 
246
 
 
247
    $numitem = count($users);
 
248
    $perpage = 20;
 
249
 
 
250
    $min = $page * $perpage;
 
251
    while ($min > $numitem) {
 
252
        $page--;
 
253
        $min = $page * $perpage;
 
254
    }
 
255
    $max = $min + $perpage;
 
256
 
 
257
    $start = ($page * $perpage) + 1;
 
258
    $end = min($numitem, $start + $perpage - 1);
 
259
 
 
260
    require HORDE_TEMPLATES . '/admin/user/list.inc';
 
261
} else {
 
262
    require HORDE_TEMPLATES . '/admin/user/nolist.inc';
 
263
}
 
264
 
 
265
require HORDE_TEMPLATES . '/common-footer.inc';