Dotclear

source: admin/user.php @ 3874:ab8368569446

Revision 3874:ab8368569446, 14.0 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

short notation for array (array() → [])

RevLine 
[175]1<?php
[3731]2/**
3 * @package Dotclear
4 * @subpackage Backend
5 *
6 * @copyright Olivier Meunier & Association Dotclear
7 * @copyright GPL-2.0-only
8 */
[175]9
[3699]10require dirname(__FILE__) . '/../inc/admin/prepend.php';
[175]11
12dcPage::checkSuper();
13
[1305]14$page_title = __('New user');
[175]15
[3699]16$user_id          = '';
17$user_super       = '';
18$user_pwd         = '';
19$user_change_pwd  = '';
20$user_name        = '';
21$user_firstname   = '';
[175]22$user_displayname = '';
[3699]23$user_email       = '';
24$user_url         = '';
25$user_lang        = $core->auth->getInfo('user_lang');
26$user_tz          = $core->auth->getInfo('user_tz');
[175]27$user_post_status = '';
28
29$user_options = $core->userDefaults();
30
[1719]31# Formaters combo
32$formaters_combo = dcAdminCombos::getFormatersCombo();
[175]33
[1719]34$status_combo = dcAdminCombos::getPostStatusesCombo();
[175]35
36# Language codes
[1719]37$lang_combo = dcAdminCombos::getAdminLangsCombo();
[175]38
39# Get user if we have an ID
[3699]40if (!empty($_REQUEST['id'])) {
41    try {
42        $rs = $core->getUser($_REQUEST['id']);
[2566]43
[3699]44        $user_id          = $rs->user_id;
45        $user_super       = $rs->user_super;
46        $user_pwd         = $rs->user_pwd;
47        $user_change_pwd  = $rs->user_change_pwd;
48        $user_name        = $rs->user_name;
49        $user_firstname   = $rs->user_firstname;
50        $user_displayname = $rs->user_displayname;
51        $user_email       = $rs->user_email;
52        $user_url         = $rs->user_url;
53        $user_lang        = $rs->user_lang;
54        $user_tz          = $rs->user_tz;
55        $user_post_status = $rs->user_post_status;
[2566]56
[3699]57        $user_options = array_merge($user_options, $rs->options());
[2566]58
[3699]59        $page_title = $user_id;
60    } catch (Exception $e) {
61        $core->error->add($e->getMessage());
62    }
[175]63}
64
65# Add or update user
[3699]66if (isset($_POST['user_name'])) {
67    try
68    {
69        if (empty($_POST['your_pwd']) || !$core->auth->checkPassword($_POST['your_pwd'])) {
70            throw new Exception(__('Password verification failed'));
71        }
[2566]72
[3699]73        $cur = $core->con->openCursor($core->prefix . 'user');
[2566]74
[3699]75        $cur->user_id          = $_POST['user_id'];
76        $cur->user_super       = $user_super       = !empty($_POST['user_super']) ? 1 : 0;
77        $cur->user_name        = $user_name        = html::escapeHTML($_POST['user_name']);
78        $cur->user_firstname   = $user_firstname   = html::escapeHTML($_POST['user_firstname']);
79        $cur->user_displayname = $user_displayname = html::escapeHTML($_POST['user_displayname']);
80        $cur->user_email       = $user_email       = html::escapeHTML($_POST['user_email']);
81        $cur->user_url         = $user_url         = html::escapeHTML($_POST['user_url']);
82        $cur->user_lang        = $user_lang        = html::escapeHTML($_POST['user_lang']);
83        $cur->user_tz          = $user_tz          = html::escapeHTML($_POST['user_tz']);
84        $cur->user_post_status = $user_post_status = html::escapeHTML($_POST['user_post_status']);
[2566]85
[3699]86        if ($user_id && $cur->user_id == $core->auth->userID() && $core->auth->isSuperAdmin()) {
87            // force super_user to true if current user
88            $cur->user_super = $user_super = true;
89        }
90        if ($core->auth->allowPassChange()) {
91            $cur->user_change_pwd = !empty($_POST['user_change_pwd']) ? 1 : 0;
92        }
[2566]93
[3699]94        if (!empty($_POST['new_pwd'])) {
95            if ($_POST['new_pwd'] != $_POST['new_pwd_c']) {
96                throw new Exception(__("Passwords don't match"));
97            } else {
98                $cur->user_pwd = $_POST['new_pwd'];
99            }
100        }
[2566]101
[3699]102        $user_options['post_format'] = html::escapeHTML($_POST['user_post_format']);
103        $user_options['edit_size']   = (integer) $_POST['user_edit_size'];
[2566]104
[3699]105        if ($user_options['edit_size'] < 1) {
106            $user_options['edit_size'] = 10;
107        }
[2566]108
[3699]109        $cur->user_options = new ArrayObject($user_options);
[2566]110
[3699]111        # Udate user
112        if ($user_id) {
113            # --BEHAVIOR-- adminBeforeUserUpdate
114            $core->callBehavior('adminBeforeUserUpdate', $cur, $user_id);
[2566]115
[3699]116            $new_id = $core->updUser($user_id, $cur);
[2566]117
[3699]118            # --BEHAVIOR-- adminAfterUserUpdate
119            $core->callBehavior('adminAfterUserUpdate', $cur, $new_id);
[2566]120
[3699]121            if ($user_id == $core->auth->userID() &&
122                $user_id != $new_id) {
123                $core->session->destroy();
124            }
[2566]125
[3699]126            dcPage::addSuccessNotice(__('User has been successfully updated.'));
[3874]127            $core->adminurl->redirect("admin.user", ['id' => $new_id]);
[3699]128        }
129        # Add user
130        else {
[3874]131            if ($core->getUsers(['user_id' => $cur->user_id], true)->f(0) > 0) {
[3699]132                throw new Exception(sprintf(__('User "%s" already exists.'), html::escapeHTML($cur->user_id)));
133            }
[2566]134
[3699]135            # --BEHAVIOR-- adminBeforeUserCreate
136            $core->callBehavior('adminBeforeUserCreate', $cur);
[2566]137
[3699]138            $new_id = $core->addUser($cur);
[2566]139
[3699]140            # --BEHAVIOR-- adminAfterUserCreate
141            $core->callBehavior('adminAfterUserCreate', $cur, $new_id);
[2566]142
[3699]143            dcPage::addSuccessNotice(__('User has been successfully created.'));
144            if (!empty($_POST['saveplus'])) {
145                $core->adminurl->redirect("admin.user");
146            } else {
[3874]147                $core->adminurl->redirect("admin.user", ['id' => $new_id]);
[3699]148            }
149        }
150    } catch (Exception $e) {
151        $core->error->add($e->getMessage());
152    }
[175]153}
154
155/* DISPLAY
156-------------------------------------------------------- */
157dcPage::open($page_title,
[3699]158    dcPage::jsConfirmClose('user-form') .
159    dcPage::jsLoad('js/jquery/jquery.pwstrength.js') .
160    '<script type="text/javascript">' . "\n" .
161    "\$(function() {\n" .
162    "   \$('#new_pwd').pwstrength({texts: ['" .
163    sprintf(__('Password strength: %s'), __('very weak')) . "', '" .
164    sprintf(__('Password strength: %s'), __('weak')) . "', '" .
165    sprintf(__('Password strength: %s'), __('mediocre')) . "', '" .
166    sprintf(__('Password strength: %s'), __('strong')) . "', '" .
167    sprintf(__('Password strength: %s'), __('very strong')) . "']});\n" .
168    "});\n" .
169    "</script>\n" .
[2566]170
[3699]171    # --BEHAVIOR-- adminUserHeaders
172    $core->callBehavior('adminUserHeaders'),
[1358]173
[3699]174    dcPage::breadcrumb(
[3874]175        [
[3699]176            __('System') => '',
177            __('Users')  => $core->adminurl->get("admin.users"),
178            $page_title  => ''
[3874]179        ])
[175]180);
181
182if (!empty($_GET['upd'])) {
[3699]183    dcPage::success(__('User has been successfully updated.'));
[175]184}
185
186if (!empty($_GET['add'])) {
[3699]187    dcPage::success(__('User has been successfully created.'));
[175]188}
189
[1609]190echo
[3699]191'<form action="' . $core->adminurl->get("admin.user") . '" method="post" id="user-form">' .
192'<div class="two-cols">' .
[1609]193
[3699]194'<div class="col">' .
195'<h3>' . __('User profile') . '</h3>' .
[1609]196
[3699]197'<p><label for="user_id" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('User ID:') . '</label> ' .
[3874]198form::field('user_id', 20, 255, [
[3725]199    'default'      => html::escapeHTML($user_id),
200    'extra_html'   => 'required placeholder="' . __('Login') . '"',
201    'autocomplete' => 'username'
[3874]202]) .
[3699]203'</p>' .
204'<p class="form-note info">' . __('At least 2 characters using letters, numbers or symbols.') . '</p>';
[175]205
206if ($user_id == $core->auth->userID()) {
[3699]207    echo
208    '<p class="warning">' . __('Warning:') . ' ' .
209    __('If you change your username, you will have to log in again.') . '</p>';
[175]210}
211
212echo
[3699]213'<div class="pw-table">' .
214'<p class="pw-cell">' .
215'<label for="new_pwd" ' . ($user_id != '' ? '' : 'class="required"') . '>' .
216($user_id != '' ? '' : '<abbr title="' . __('Required field') . '">*</abbr> ') .
217($user_id != '' ? __('New password:') : __('Password:')) . '</label>' .
218form::password('new_pwd', 20, 255,
[3874]219    [
[3699]220        'extra_html'   => 'data-indicator="pwindicator"' .
221        ($user_id != '' ? '' : ' required placeholder="' . __('Password') . '"'),
[3874]222        'autocomplete' => 'new-password']
[3699]223) .
224'</p>' .
225'<div id="pwindicator">' .
226'    <div class="bar"></div>' .
227'    <p class="label no-margin"></p>' .
228'</div>' .
229'</div>' .
230'<p class="form-note info">' . __('Password must contain at least 6 characters.') . '</p>' .
[175]231
[3699]232'<p><label for="new_pwd_c" ' . ($user_id != '' ? '' : 'class="required"') . '>' .
233($user_id != '' ? '' : '<abbr title="' . __('Required field') . '">*</abbr> ') . __('Confirm password:') . '</label> ' .
234form::password('new_pwd_c', 20, 255,
[3874]235    [
[3699]236        'extra_html'   => ($user_id != '' ? '' : 'required placeholder="' . __('Password') . '"'),
[3874]237        'autocomplete' => 'new-password']) .
[3699]238    '</p>';
[175]239
240if ($core->auth->allowPassChange()) {
[3699]241    echo
242    '<p><label for="user_change_pwd" class="classic">' .
243    form::checkbox('user_change_pwd', '1', $user_change_pwd) . ' ' .
244    __('Password change required to connect') . '</label></p>';
[175]245}
246
[313]247$super_disabled = $user_super && $user_id == $core->auth->userID();
[3274]248
[175]249echo
[3699]250'<p><label for="user_super" class="classic">' .
[3707]251form::checkbox(($super_disabled ? 'user_super_off' : 'user_super'), '1',
[3874]252    [
[3707]253        'checked'  => $user_super,
254        'disabled' => $super_disabled
[3874]255    ]) .
[3699]256' ' . __('Super administrator') . '</label></p>' .
[3874]257($super_disabled ? form::hidden(['user_super'], $user_super) : '') .
[1179]258
[3699]259'<p><label for="user_name">' . __('Last Name:') . '</label> ' .
[3874]260form::field('user_name', 20, 255, [
[3725]261    'default'      => html::escapeHTML($user_name),
262    'autocomplete' => 'family-name'
[3874]263]) .
[3699]264'</p>' .
[1179]265
[3699]266'<p><label for="user_firstname">' . __('First Name:') . '</label> ' .
[3874]267form::field('user_firstname', 20, 255, [
[3725]268    'default'      => html::escapeHTML($user_firstname),
269    'autocomplete' => 'given-name'
[3874]270]) .
[3699]271'</p>' .
[1179]272
[3699]273'<p><label for="user_displayname">' . __('Display name:') . '</label> ' .
[3874]274form::field('user_displayname', 20, 255, [
[3725]275    'default'      => html::escapeHTML($user_displayname),
276    'autocomplete' => 'nickname'
[3874]277]) .
[3699]278'</p>' .
[1179]279
[3699]280'<p><label for="user_email">' . __('Email:') . '</label> ' .
[3874]281form::email('user_email', [
[3725]282    'default'      => html::escapeHTML($user_email),
283    'autocomplete' => 'email'
[3874]284]) .
[3699]285'</p>' .
286'<p class="form-note">' . __('Mandatory for password recovering procedure.') . '</p>' .
[1609]287
[3699]288'<p><label for="user_url">' . __('URL:') . '</label> ' .
[3874]289form::url('user_url', [
[3725]290    'size'         => 30,
291    'default'      => html::escapeHTML($user_url),
292    'autocomplete' => 'url'
[3874]293]) .
[3699]294'</p>' .
295'</div>' .
[1179]296
[3699]297'<div class="col">' .
298'<h3>' . __('Options') . '</h3>' .
299'<h4>' . __('Interface') . '</h4>' .
300'<p><label for="user_lang">' . __('Language:') . '</label> ' .
301form::combo('user_lang', $lang_combo, $user_lang, 'l10n') .
302'</p>' .
[1609]303
[3699]304'<p><label for="user_tz">' . __('Timezone:') . '</label> ' .
305form::combo('user_tz', dt::getZones(true, true), $user_tz) .
306'</p>' .
[1609]307
[3699]308'<h4>' . __('Edition') . '</h4>' .
309'<p><label for="user_post_format">' . __('Preferred format:') . '</label> ' .
310form::combo('user_post_format', $formaters_combo, $user_options['post_format']) .
311'</p>' .
[1179]312
[3699]313'<p><label for="user_post_status">' . __('Default entry status:') . '</label> ' .
314form::combo('user_post_status', $status_combo, $user_post_status) .
315'</p>' .
[1179]316
[3699]317'<p><label for="user_edit_size">' . __('Entry edit field height:') . '</label> ' .
[3725]318form::number('user_edit_size', 10, 999, (integer) $user_options['edit_size']) .
[3730]319    '</p>';
[175]320
321# --BEHAVIOR-- adminUserForm
[3699]322$core->callBehavior('adminUserForm', isset($rs) ? $rs : null);
[175]323
[2566]324echo
[3699]325    '</div>' .
326    '</div>';
[1609]327
[175]328echo
[3699]329'<p class="clear vertical-separator"><label for="your_pwd" class="required">' .
330'<abbr title="' . __('Required field') . '">*</abbr> ' . __('Your password:') . '</label>' .
331form::password('your_pwd', 20, 255,
[3874]332    [
[3699]333        'extra_html'   => 'required placeholder="' . __('Password') . '"',
334        'autocomplete' => 'current-password'
[3874]335    ]
[3699]336) . '</p>' .
337'<p class="clear"><input type="submit" name="save" accesskey="s" value="' . __('Save') . '" />' .
338($user_id != '' ? '' : ' <input type="submit" name="saveplus" value="' . __('Save and create another') . '" />') .
339($user_id != '' ? form::hidden('id', $user_id) : '') .
340$core->formNonce() .
341    '</p>' .
[175]342
[3699]343    '</form>';
[175]344
[3699]345if ($user_id) {
346    echo '<div class="clear fieldset">' .
347    '<h3>' . __('Permissions') . '</h3>';
[1609]348
[3699]349    if (!$user_super) {
350        echo
351        '<form action="' . $core->adminurl->get("admin.user.actions") . '" method="post">' .
352        '<p><input type="submit" value="' . __('Add new permissions') . '" />' .
[3874]353        form::hidden(['redir'], $core->adminurl->get("admin.user", ['id' => $user_id])) .
354        form::hidden(['action'], 'blogs') .
355        form::hidden(['users[]'], $user_id) .
[3699]356        $core->formNonce() .
357            '</p>' .
358            '</form>';
[2566]359
[3699]360        $permissions = $core->getUserPermissions($user_id);
361        $perm_types  = $core->auth->getPermissionsTypes();
[2566]362
[3699]363        if (count($permissions) == 0) {
364            echo '<p>' . __('No permissions so far.') . '</p>';
365        } else {
366            foreach ($permissions as $k => $v) {
367                if (count($v['p']) > 0) {
368                    echo
369                    '<form action="' . $core->adminurl->get("admin.user.actions") . '" method="post" class="perm-block">' .
370                    '<p class="blog-perm">' . __('Blog:') . ' <a href="' .
[3874]371                    $core->adminurl->get("admin.blog", ['id' => html::escapeHTML($k)]) . '">' .
[3699]372                    html::escapeHTML($v['name']) . '</a> (' . html::escapeHTML($k) . ')</p>';
[2566]373
[3699]374                    echo '<ul class="ul-perm">';
375                    foreach ($v['p'] as $p => $V) {
376                        if (isset($perm_types[$p])) {
377                            echo '<li>' . __($perm_types[$p]) . '</li>';
378                        }
379                    }
380                    echo
381                    '</ul>' .
382                    '<p class="add-perm"><input type="submit" class="reset" value="' . __('Change permissions') . '" />' .
[3874]383                    form::hidden(['redir'], $core->adminurl->get("admin.user", ['id' => $user_id])) .
384                    form::hidden(['action'], 'perms') .
385                    form::hidden(['users[]'], $user_id) .
386                    form::hidden(['blogs[]'], $k) .
[3699]387                    $core->formNonce() .
388                        '</p>' .
389                        '</form>';
390                }
391            }
392        }
[1609]393
[3699]394    } else {
395        echo '<p>' . sprintf(__('%s is super admin (all rights on all blogs).'), '<strong>' . $user_id . '</strong>') . '</p>';
396    }
397    echo '</div>';
[175]398}
399
400dcPage::helpBlock('core_user');
401dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map