Dotclear

source: admin/users_actions.php @ 3707:3a350757c847

Revision 3707:3a350757c847, 10.6 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Use array form of optionnal parameters for form::checkbox() where is relevant, code formatting (PSR-2)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13require dirname(__FILE__) . '/../inc/admin/prepend.php';
14
15dcPage::checkSuper();
16
17$users = array();
18if (!empty($_POST['users']) && is_array($_POST['users'])) {
19    foreach ($_POST['users'] as $u) {
20        if ($core->userExists($u)) {
21            $users[] = $u;
22        }
23    }
24}
25
26$blogs = array();
27if (!empty($_POST['blogs']) && is_array($_POST['blogs'])) {
28    foreach ($_POST['blogs'] as $b) {
29        if ($core->blogExists($b)) {
30            $blogs[] = $b;
31        }
32    }
33}
34
35/* Actions
36-------------------------------------------------------- */
37if (!empty($_POST['action']) && !empty($_POST['users'])) {
38    $action = $_POST['action'];
39
40    if (isset($_POST['redir']) && strpos($_POST['redir'], '://') === false) {
41        $redir = $_POST['redir'];
42    } else {
43        $redir = $core->adminurl->get("admin.users", array(
44            'q'      => $_POST['q'],
45            'sortby' => $_POST['sortby'],
46            'order'  => $_POST['order'],
47            'page'   => $_POST['page'],
48            'nb'     => $_POST['nb']
49        ));
50    }
51
52    if (empty($users)) {
53        $core->error->add(__('No blog or user given.'));
54    }
55
56    # --BEHAVIOR-- adminUsersActions
57    $core->callBehavior('adminUsersActions', $core, $users, $blogs, $action, $redir);
58
59    # Delete users
60    if ($action == 'deleteuser' && !empty($users)) {
61        foreach ($users as $u) {
62            try
63            {
64                if ($u == $core->auth->userID()) {
65                    throw new Exception(__('You cannot delete yourself.'));
66                }
67
68                # --BEHAVIOR-- adminBeforeUserDelete
69                $core->callBehavior('adminBeforeUserDelete', $u);
70
71                $core->delUser($u);
72            } catch (Exception $e) {
73                $core->error->add($e->getMessage());
74            }
75        }
76        if (!$core->error->flag()) {
77            dcPage::addSuccessNotice(__('User has been successfully deleted.'));
78            http::redirect($redir);
79        }
80    }
81
82    # Update users perms
83    if ($action == 'updateperm' && !empty($users) && !empty($blogs)) {
84        try
85        {
86            if (empty($_POST['your_pwd']) || !$core->auth->checkPassword($_POST['your_pwd'])) {
87                throw new Exception(__('Password verification failed'));
88            }
89
90            foreach ($users as $u) {
91                foreach ($blogs as $b) {
92                    $set_perms = array();
93
94                    if (!empty($_POST['perm'][$b])) {
95                        foreach ($_POST['perm'][$b] as $perm_id => $v) {
96                            if ($v) {
97                                $set_perms[$perm_id] = true;
98                            }
99                        }
100                    }
101
102                    $core->setUserBlogPermissions($u, $b, $set_perms, true);
103                }
104            }
105        } catch (Exception $e) {
106            $core->error->add($e->getMessage());
107        }
108        if (!$core->error->flag()) {
109            dcPage::addSuccessNotice(__('User has been successfully updated.'));
110            http::redirect($redir);
111        }
112    }
113}
114
115/* DISPLAY
116-------------------------------------------------------- */
117if (!empty($users) && empty($blogs) && $action == 'blogs') {
118    $breadcrumb = dcPage::breadcrumb(
119        array(
120            __('System')      => '',
121            __('Users')       => $core->adminurl->get("admin.users"),
122            __('Permissions') => ''
123        ));
124} else {
125    $breadcrumb = dcPage::breadcrumb(
126        array(
127            __('System')  => '',
128            __('Users')   => $core->adminurl->get("admin.users"),
129            __('Actions') => ''
130        ));
131}
132
133dcPage::open(
134    __('Users'),
135    dcPage::jsLoad('js/_users_actions.js') .
136    # --BEHAVIOR-- adminUsersActionsHeaders
137    $core->callBehavior('adminUsersActionsHeaders'),
138    $breadcrumb
139);
140
141if (!isset($action)) {
142    dcPage::close();
143    exit;
144}
145
146$hidden_fields = '';
147foreach ($users as $u) {
148    $hidden_fields .= form::hidden(array('users[]'), $u);
149}
150
151if (isset($_POST['redir']) && strpos($_POST['redir'], '://') === false) {
152    $hidden_fields .= form::hidden(array('redir'), html::escapeURL($_POST['redir']));
153} else {
154    $hidden_fields .=
155    form::hidden(array('q'), html::escapeHTML($_POST['q'])) .
156    form::hidden(array('sortby'), $_POST['sortby']) .
157    form::hidden(array('order'), $_POST['order']) .
158    form::hidden(array('page'), $_POST['page']) .
159    form::hidden(array('nb'), $_POST['nb']);
160}
161
162echo '<p><a class="back" href="' . html::escapeURL($redir) . '">' . __('Back to user profile') . '</a></p>';
163
164# --BEHAVIOR-- adminUsersActionsContent
165$core->callBehavior('adminUsersActionsContent', $core, $action, $hidden_fields);
166
167# Blog list where to set permissions
168if (!empty($users) && empty($blogs) && $action == 'blogs') {
169    try {
170        $rs      = $core->getBlogs();
171        $nb_blog = $rs->count();
172    } catch (Exception $e) {}
173
174    foreach ($users as $u) {
175        $user_list[] = '<a href="' . $core->adminurl->get("admin.user", array('id' => $u)) . '">' . $u . '</a>';
176    }
177
178    echo
179    '<p>' . sprintf(
180        __('Choose one or more blogs to which you want to give permissions to users %s.'),
181        implode(', ', $user_list)
182    ) . '</p>';
183
184    if ($nb_blog == 0) {
185        echo '<p><strong>' . __('No blog') . '</strong></p>';
186    } else {
187        echo
188        '<form action="' . $core->adminurl->get("admin.user.actions") . '" method="post" id="form-blogs">' .
189        '<div class="table-outer clear">' .
190        '<table><tr>' .
191        '<th class="nowrap" colspan="2">' . __('Blog ID') . '</th>' .
192        '<th class="nowrap">' . __('Blog name') . '</th>' .
193        '<th class="nowrap">' . __('URL') . '</th>' .
194        '<th class="nowrap">' . __('Entries') . '</th>' .
195        '<th class="nowrap">' . __('Status') . '</th>' .
196            '</tr>';
197
198        while ($rs->fetch()) {
199            $img_status = $rs->blog_status == 1 ? 'check-on' : ($rs->blog_status == 0 ? 'check-off' : 'check-wrn');
200            $txt_status = $core->getBlogStatus($rs->blog_status);
201            $img_status = sprintf('<img src="images/%1$s.png" alt="%2$s" title="%2$s" />', $img_status, $txt_status);
202
203            echo
204            '<tr class="line">' .
205            '<td class="nowrap">' .
206            form::checkbox(array('blogs[]'), $rs->blog_id,
207                array(
208                    'extra_html' => 'title="' . __('select') . ' ' . $rs->blog_id . '"'
209                )) .
210            '</td>' .
211            '<td class="nowrap">' . $rs->blog_id . '</td>' .
212            '<td class="maximal">' . html::escapeHTML($rs->blog_name) . '</td>' .
213            '<td class="nowrap"><a class="outgoing" href="' . html::escapeHTML($rs->blog_url) . '">' . html::escapeHTML($rs->blog_url) .
214            ' <img src="images/outgoing-blue.png" alt="" /></a></td>' .
215            '<td class="nowrap">' . $core->countBlogPosts($rs->blog_id) . '</td>' .
216                '<td class="status">' . $img_status . '</td>' .
217                '</tr>';
218        }
219
220        echo
221        '</table></div>' .
222        '<p class="checkboxes-helpers"></p>' .
223        '<p><input id="do-action" type="submit" value="' . __('Set permissions') . '" />' .
224        $hidden_fields .
225        form::hidden(array('action'), 'perms') .
226        $core->formNonce() . '</p>' .
227            '</form>';
228    }
229}
230# Permissions list for each selected blogs
231elseif (!empty($blogs) && !empty($users) && $action == 'perms') {
232    $user_perm = array();
233    if (count($users) == 1) {
234        $user_perm = $core->getUserPermissions($users[0]);
235    }
236
237    foreach ($users as $u) {
238        $user_list[] = '<a href="' . $core->adminurl->get("admin.user", array('id' => $u)) . '">' . $u . '</a>';
239    }
240
241    echo
242    '<p>' . sprintf(
243        __('You are about to change permissions on the following blogs for users %s.'),
244        implode(', ', $user_list)
245    ) . '</p>' .
246    '<form id="permissions-form" action="' . $core->adminurl->get("admin.user.actions") . '" method="post">';
247
248    foreach ($blogs as $b) {
249        echo '<h3>' . ('Blog:') . ' <a href="' . $core->adminurl->get("admin.blog", array('id' => html::escapeHTML($b))) . '">' . html::escapeHTML($b) . '</a>' .
250        form::hidden(array('blogs[]'), $b) . '</h3>';
251        $unknown_perms = $user_perm;
252        foreach ($core->auth->getPermissionsTypes() as $perm_id => $perm) {
253            $checked = false;
254
255            if (count($users) == 1) {
256                $checked = isset($user_perm[$b]['p'][$perm_id]) && $user_perm[$b]['p'][$perm_id];
257            }
258            if (isset($unknown_perms[$b]['p'][$perm_id])) {
259                unset($unknown_perms[$b]['p'][$perm_id]);
260            }
261
262            echo
263            '<p><label for="perm' . html::escapeHTML($b) . html::escapeHTML($perm_id) . '" class="classic">' .
264            form::checkbox(array('perm[' . html::escapeHTML($b) . '][' . html::escapeHTML($perm_id) . ']', 'perm' . html::escapeHTML($b) . html::escapeHTML($perm_id)),
265                1, $checked) . ' ' .
266            __($perm) . '</label></p>';
267        }
268        if (isset($unknown_perms[$b])) {
269
270            foreach ($unknown_perms[$b]['p'] as $perm_id => $v) {
271                $checked = isset($user_perm[$b]['p'][$perm_id]) && $user_perm[$b]['p'][$perm_id];
272                echo
273                '<p><label for="perm' . html::escapeHTML($b) . html::escapeHTML($perm_id) . '" class="classic">' .
274                form::checkbox(
275                    array('perm[' . html::escapeHTML($b) . '][' . html::escapeHTML($perm_id) . ']',
276                        'perm' . html::escapeHTML($b) . html::escapeHTML($perm_id)),
277                    1, $checked) . ' ' .
278                sprintf(__('[%s] (unreferenced permission)'), $perm_id) . '</label></p>';
279            }
280        }
281    }
282
283    echo
284    '<p class="checkboxes-helpers"></p>' .
285    '<div class="fieldset">' .
286    '<h3>' . __('Validate permissions') . '</h3>' .
287    '<p><label for="your_pwd" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Your password:') . '</label>' .
288    form::password('your_pwd', 20, 255,
289        array(
290            'extra_html'   => 'required placeholder="' . __('Password') . '"',
291            'autocomplete' => 'current-password'
292        )
293    ) . '</p>' .
294    '<p><input type="submit" accesskey="s" value="' . __('Save') . '" />' .
295    $hidden_fields .
296    form::hidden(array('action'), 'updateperm') .
297    $core->formNonce() . '</p>' .
298        '</div>' .
299        '</form>';
300}
301
302dcPage::helpBlock('core_users');
303dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map