phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_permission_roles.php

History | View | Annotate | Download (16.3 kB)

1 5574 acydburn
<?php
2 8147 acydburn
/**
3 5574 acydburn
*
4 5574 acydburn
* @package acp
5 5574 acydburn
* @version $Id$
6 8147 acydburn
* @copyright (c) 2005 phpBB Group
7 8147 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5574 acydburn
*
9 5574 acydburn
*/
10 5574 acydburn
11 5574 acydburn
/**
12 8147 acydburn
* @ignore
13 8147 acydburn
*/
14 8147 acydburn
if (!defined('IN_PHPBB'))
15 8147 acydburn
{
16 8147 acydburn
        exit;
17 8147 acydburn
}
18 8147 acydburn
19 8147 acydburn
/**
20 5574 acydburn
* @package acp
21 5574 acydburn
*/
22 5574 acydburn
class acp_permission_roles
23 5574 acydburn
{
24 5574 acydburn
        var $u_action;
25 5574 acydburn
26 5574 acydburn
        function main($id, $mode)
27 5574 acydburn
        {
28 5574 acydburn
                global $db, $user, $auth, $template, $cache;
29 6015 acydburn
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
30 5574 acydburn
31 5574 acydburn
                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
32 5574 acydburn
                include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
33 5574 acydburn
34 5574 acydburn
                $auth_admin = new auth_admin();
35 5574 acydburn
36 5574 acydburn
                $user->add_lang('acp/permissions');
37 6539 acydburn
                add_permission_language();
38 5574 acydburn
39 5574 acydburn
                $this->tpl_name = 'acp_permission_roles';
40 5574 acydburn
41 5574 acydburn
                $submit = (isset($_POST['submit'])) ? true : false;
42 5574 acydburn
                $role_id = request_var('role_id', 0);
43 5574 acydburn
                $action = request_var('action', '');
44 5574 acydburn
                $action = (isset($_POST['add'])) ? 'add' : $action;
45 5574 acydburn
46 8120 kellanved
                $form_name = 'acp_permissions';
47 8120 kellanved
                add_form_key($form_name);
48 8120 kellanved
49 5574 acydburn
                switch ($mode)
50 5574 acydburn
                {
51 5574 acydburn
                        case 'admin_roles':
52 5574 acydburn
                                $permission_type = 'a_';
53 5574 acydburn
                                $this->page_title = 'ACP_ADMIN_ROLES';
54 5574 acydburn
                        break;
55 5574 acydburn
56 5574 acydburn
                        case 'user_roles':
57 5574 acydburn
                                $permission_type = 'u_';
58 5574 acydburn
                                $this->page_title = 'ACP_USER_ROLES';
59 5574 acydburn
                        break;
60 5574 acydburn
61 5574 acydburn
                        case 'mod_roles':
62 5574 acydburn
                                $permission_type = 'm_';
63 5574 acydburn
                                $this->page_title = 'ACP_MOD_ROLES';
64 5574 acydburn
                        break;
65 5574 acydburn
66 5574 acydburn
                        case 'forum_roles':
67 5574 acydburn
                                $permission_type = 'f_';
68 5574 acydburn
                                $this->page_title = 'ACP_FORUM_ROLES';
69 5574 acydburn
                        break;
70 5574 acydburn
71 5574 acydburn
                        default:
72 6428 acydburn
                                trigger_error('NO_MODE', E_USER_ERROR);
73 6320 acydburn
                        break;
74 5574 acydburn
                }
75 5574 acydburn
76 5574 acydburn
                $template->assign_vars(array(
77 5574 acydburn
                        'L_TITLE'                => $user->lang[$this->page_title],
78 5574 acydburn
                        'L_EXPLAIN'                => $user->lang[$this->page_title . '_EXPLAIN'])
79 5574 acydburn
                );
80 5574 acydburn
81 5574 acydburn
                // Take action... admin submitted something
82 5574 acydburn
                if ($submit || $action == 'remove')
83 5574 acydburn
                {
84 5574 acydburn
                        switch ($action)
85 5574 acydburn
                        {
86 5574 acydburn
                                case 'remove':
87 5574 acydburn
88 5574 acydburn
                                        if (!$role_id)
89 5574 acydburn
                                        {
90 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
91 5574 acydburn
                                        }
92 5574 acydburn
93 5574 acydburn
                                        $sql = 'SELECT *
94 5574 acydburn
                                                FROM ' . ACL_ROLES_TABLE . '
95 5574 acydburn
                                                WHERE role_id = ' . $role_id;
96 5574 acydburn
                                        $result = $db->sql_query($sql);
97 5574 acydburn
                                        $role_row = $db->sql_fetchrow($result);
98 5574 acydburn
                                        $db->sql_freeresult($result);
99 5574 acydburn
100 5574 acydburn
                                        if (!$role_row)
101 5574 acydburn
                                        {
102 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
103 5574 acydburn
                                        }
104 5574 acydburn
105 5574 acydburn
                                        if (confirm_box(true))
106 5574 acydburn
                                        {
107 5580 acydburn
                                                $this->remove_role($role_id, $permission_type);
108 5574 acydburn
109 7524 acydburn
                                                $role_name = (!empty($user->lang[$role_row['role_name']])) ? $user->lang[$role_row['role_name']] : $role_row['role_name'];
110 7524 acydburn
                                                add_log('admin', 'LOG_' . strtoupper($permission_type) . 'ROLE_REMOVED', $role_name);
111 5574 acydburn
                                                trigger_error($user->lang['ROLE_DELETED'] . adm_back_link($this->u_action));
112 5574 acydburn
                                        }
113 5574 acydburn
                                        else
114 5574 acydburn
                                        {
115 5574 acydburn
                                                confirm_box(false, 'DELETE_ROLE', build_hidden_fields(array(
116 5574 acydburn
                                                        'i'                        => $id,
117 5574 acydburn
                                                        'mode'                => $mode,
118 5574 acydburn
                                                        'role_id'        => $role_id,
119 5574 acydburn
                                                        'action'        => $action,
120 5574 acydburn
                                                )));
121 5574 acydburn
                                        }
122 5574 acydburn
123 5574 acydburn
                                break;
124 5574 acydburn
125 5574 acydburn
                                case 'edit':
126 5574 acydburn
                                        if (!$role_id)
127 5574 acydburn
                                        {
128 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
129 5574 acydburn
                                        }
130 5574 acydburn
131 5574 acydburn
                                        // Get role we edit
132 5574 acydburn
                                        $sql = 'SELECT *
133 5574 acydburn
                                                FROM ' . ACL_ROLES_TABLE . '
134 5574 acydburn
                                                WHERE role_id = ' . $role_id;
135 5574 acydburn
                                        $result = $db->sql_query($sql);
136 5574 acydburn
                                        $role_row = $db->sql_fetchrow($result);
137 5574 acydburn
                                        $db->sql_freeresult($result);
138 5574 acydburn
139 5574 acydburn
                                        if (!$role_row)
140 5574 acydburn
                                        {
141 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
142 5574 acydburn
                                        }
143 5574 acydburn
144 6073 acydburn
                                // no break;
145 6073 acydburn
146 5574 acydburn
                                case 'add':
147 5574 acydburn
148 8123 kellanved
                                        if (!check_form_key($form_name))
149 8120 kellanved
                                        {
150 8120 kellanved
                                                trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
151 8120 kellanved
                                        }
152 8120 kellanved
153 7920 acydburn
                                        $role_name = utf8_normalize_nfc(request_var('role_name', '', true));
154 7920 acydburn
                                        $role_description = utf8_normalize_nfc(request_var('role_description', '', true));
155 5574 acydburn
                                        $auth_settings = request_var('setting', array('' => 0));
156 5574 acydburn
157 5574 acydburn
                                        if (!$role_name)
158 5574 acydburn
                                        {
159 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_NAME_SPECIFIED'] . adm_back_link($this->u_action), E_USER_WARNING);
160 5574 acydburn
                                        }
161 5574 acydburn
162 6880 davidmj
                                        if (utf8_strlen($role_description) > 4000)
163 6880 davidmj
                                        {
164 6880 davidmj
                                                trigger_error($user->lang['ROLE_DESCRIPTION_LONG'] . adm_back_link($this->u_action), E_USER_WARNING);
165 6880 davidmj
                                        }
166 6880 davidmj
167 5574 acydburn
                                        // if we add/edit a role we check the name to be unique among the settings...
168 5574 acydburn
                                        $sql = 'SELECT role_id
169 5574 acydburn
                                                FROM ' . ACL_ROLES_TABLE . "
170 5574 acydburn
                                                WHERE role_type = '" . $db->sql_escape($permission_type) . "'
171 6456 acydburn
                                                        AND role_name = '" . $db->sql_escape($role_name) . "'";
172 5574 acydburn
                                        $result = $db->sql_query($sql);
173 5574 acydburn
                                        $row = $db->sql_fetchrow($result);
174 5574 acydburn
                                        $db->sql_freeresult($result);
175 5574 acydburn
176 5574 acydburn
                                        // Make sure we only print out the error if we add the role or change it's name
177 6472 davidmj
                                        if ($row && ($mode == 'add' || ($mode == 'edit' && $role_row['role_name'] != $role_name)))
178 5574 acydburn
                                        {
179 6320 acydburn
                                                trigger_error(sprintf($user->lang['ROLE_NAME_ALREADY_EXIST'], $role_name) . adm_back_link($this->u_action), E_USER_WARNING);
180 5574 acydburn
                                        }
181 5574 acydburn
182 5574 acydburn
                                        $sql_ary = array(
183 5574 acydburn
                                                'role_name'                        => (string) $role_name,
184 5791 acydburn
                                                'role_description'        => (string) $role_description,
185 5574 acydburn
                                                'role_type'                        => (string) $permission_type,
186 5574 acydburn
                                        );
187 5574 acydburn
188 5574 acydburn
                                        if ($action == 'edit')
189 5574 acydburn
                                        {
190 8147 acydburn
                                                $sql = 'UPDATE ' . ACL_ROLES_TABLE . '
191 8147 acydburn
                                                        SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
192 5574 acydburn
                                                        WHERE role_id = ' . $role_id;
193 5574 acydburn
                                                $db->sql_query($sql);
194 5574 acydburn
                                        }
195 5574 acydburn
                                        else
196 5574 acydburn
                                        {
197 5791 acydburn
                                                // Get maximum role order for inserting a new role...
198 5791 acydburn
                                                $sql = 'SELECT MAX(role_order) as max_order
199 5791 acydburn
                                                        FROM ' . ACL_ROLES_TABLE . "
200 5791 acydburn
                                                        WHERE role_type = '" . $db->sql_escape($permission_type) . "'";
201 5791 acydburn
                                                $result = $db->sql_query($sql);
202 5791 acydburn
                                                $max_order = (int) $db->sql_fetchfield('max_order');
203 5791 acydburn
                                                $db->sql_freeresult($result);
204 5791 acydburn
205 5791 acydburn
                                                $sql_ary['role_order'] = $max_order + 1;
206 6073 acydburn
207 5574 acydburn
                                                $sql = 'INSERT INTO ' . ACL_ROLES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
208 5574 acydburn
                                                $db->sql_query($sql);
209 5574 acydburn
210 5574 acydburn
                                                $role_id = $db->sql_nextid();
211 5574 acydburn
                                        }
212 5574 acydburn
213 5574 acydburn
                                        // Now add the auth settings
214 5574 acydburn
                                        $auth_admin->acl_set_role($role_id, $auth_settings);
215 5574 acydburn
216 7526 acydburn
                                        $role_name = (!empty($user->lang[$role_name])) ? $user->lang[$role_name] : $role_name;
217 5574 acydburn
                                        add_log('admin', 'LOG_' . strtoupper($permission_type) . 'ROLE_' . strtoupper($action), $role_name);
218 5574 acydburn
219 5574 acydburn
                                        trigger_error($user->lang['ROLE_' . strtoupper($action) . '_SUCCESS'] . adm_back_link($this->u_action));
220 5574 acydburn
221 5574 acydburn
                                break;
222 5574 acydburn
                        }
223 5574 acydburn
                }
224 5574 acydburn
225 5574 acydburn
                // Display screens
226 5574 acydburn
                switch ($action)
227 5574 acydburn
                {
228 5574 acydburn
                        case 'add':
229 5574 acydburn
230 5574 acydburn
                                $options_from = request_var('options_from', 0);
231 5574 acydburn
232 5574 acydburn
                                $role_row = array(
233 7920 acydburn
                                        'role_name'                        => utf8_normalize_nfc(request_var('role_name', '', true)),
234 7920 acydburn
                                        'role_description'        => utf8_normalize_nfc(request_var('role_description', '', true)),
235 5574 acydburn
                                        'role_type'                        => $permission_type,
236 5574 acydburn
                                );
237 5574 acydburn
238 5574 acydburn
                                if ($options_from)
239 5574 acydburn
                                {
240 5574 acydburn
                                        $sql = 'SELECT p.auth_option_id, p.auth_setting, o.auth_option
241 5574 acydburn
                                                FROM ' . ACL_ROLES_DATA_TABLE . ' p, ' . ACL_OPTIONS_TABLE . ' o
242 5574 acydburn
                                                WHERE o.auth_option_id = p.auth_option_id
243 5574 acydburn
                                                        AND p.role_id = ' . $options_from . '
244 5574 acydburn
                                                ORDER BY p.auth_option_id';
245 5574 acydburn
                                        $result = $db->sql_query($sql);
246 5574 acydburn
247 5574 acydburn
                                        $auth_options = array();
248 5574 acydburn
                                        while ($row = $db->sql_fetchrow($result))
249 5574 acydburn
                                        {
250 5574 acydburn
                                                $auth_options[$row['auth_option']] = $row['auth_setting'];
251 5574 acydburn
                                        }
252 5574 acydburn
                                        $db->sql_freeresult($result);
253 5574 acydburn
                                }
254 5574 acydburn
                                else
255 5574 acydburn
                                {
256 5574 acydburn
                                        $sql = 'SELECT auth_option_id, auth_option
257 5574 acydburn
                                                FROM ' . ACL_OPTIONS_TABLE . "
258 7789 acydburn
                                                WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char) . "
259 5574 acydburn
                                                        AND auth_option <> '{$permission_type}'
260 5574 acydburn
                                                ORDER BY auth_option_id";
261 5574 acydburn
                                        $result = $db->sql_query($sql);
262 5574 acydburn
263 5574 acydburn
                                        $auth_options = array();
264 5574 acydburn
                                        while ($row = $db->sql_fetchrow($result))
265 5574 acydburn
                                        {
266 6115 acydburn
                                                $auth_options[$row['auth_option']] = ACL_NO;
267 5574 acydburn
                                        }
268 5574 acydburn
                                        $db->sql_freeresult($result);
269 5574 acydburn
                                }
270 5574 acydburn
271 6073 acydburn
                        // no break;
272 6073 acydburn
273 5574 acydburn
                        case 'edit':
274 5574 acydburn
275 5574 acydburn
                                if ($action == 'edit')
276 5574 acydburn
                                {
277 5574 acydburn
                                        if (!$role_id)
278 5574 acydburn
                                        {
279 6320 acydburn
                                                trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
280 5574 acydburn
                                        }
281 5574 acydburn
282 5574 acydburn
                                        $sql = 'SELECT *
283 5574 acydburn
                                                FROM ' . ACL_ROLES_TABLE . '
284 5574 acydburn
                                                WHERE role_id = ' . $role_id;
285 5574 acydburn
                                        $result = $db->sql_query($sql);
286 5574 acydburn
                                        $role_row = $db->sql_fetchrow($result);
287 5574 acydburn
                                        $db->sql_freeresult($result);
288 5574 acydburn
289 5574 acydburn
                                        $sql = 'SELECT p.auth_option_id, p.auth_setting, o.auth_option
290 5574 acydburn
                                                FROM ' . ACL_ROLES_DATA_TABLE . ' p, ' . ACL_OPTIONS_TABLE . ' o
291 5574 acydburn
                                                WHERE o.auth_option_id = p.auth_option_id
292 5574 acydburn
                                                        AND p.role_id = ' . $role_id . '
293 5574 acydburn
                                                ORDER BY p.auth_option_id';
294 5574 acydburn
                                        $result = $db->sql_query($sql);
295 5574 acydburn
296 5574 acydburn
                                        $auth_options = array();
297 5574 acydburn
                                        while ($row = $db->sql_fetchrow($result))
298 5574 acydburn
                                        {
299 5574 acydburn
                                                $auth_options[$row['auth_option']] = $row['auth_setting'];
300 5574 acydburn
                                        }
301 5574 acydburn
                                        $db->sql_freeresult($result);
302 5574 acydburn
                                }
303 5574 acydburn
304 5574 acydburn
                                if (!$role_row)
305 5574 acydburn
                                {
306 6320 acydburn
                                        trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
307 5574 acydburn
                                }
308 5574 acydburn
309 5574 acydburn
                                $template->assign_vars(array(
310 5824 acydburn
                                        'S_EDIT'                        => true,
311 5574 acydburn
312 5574 acydburn
                                        'U_ACTION'                        => $this->u_action . "&amp;action={$action}&amp;role_id={$role_id}",
313 5574 acydburn
                                        'U_BACK'                        => $this->u_action,
314 6073 acydburn
315 5574 acydburn
                                        'ROLE_NAME'                        => $role_row['role_name'],
316 5791 acydburn
                                        'ROLE_DESCRIPTION'        => $role_row['role_description'],
317 5574 acydburn
                                        'L_ACL_TYPE'                => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
318 5574 acydburn
                                        )
319 5574 acydburn
                                );
320 6073 acydburn
321 6115 acydburn
                                // We need to fill the auth options array with ACL_NO options ;)
322 5574 acydburn
                                $sql = 'SELECT auth_option_id, auth_option
323 5574 acydburn
                                        FROM ' . ACL_OPTIONS_TABLE . "
324 7789 acydburn
                                        WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char) . "
325 5574 acydburn
                                                AND auth_option <> '{$permission_type}'
326 5574 acydburn
                                        ORDER BY auth_option_id";
327 5574 acydburn
                                $result = $db->sql_query($sql);
328 5574 acydburn
329 5574 acydburn
                                while ($row = $db->sql_fetchrow($result))
330 5574 acydburn
                                {
331 5574 acydburn
                                        if (!isset($auth_options[$row['auth_option']]))
332 5574 acydburn
                                        {
333 6115 acydburn
                                                $auth_options[$row['auth_option']] = ACL_NO;
334 5574 acydburn
                                        }
335 5574 acydburn
                                }
336 5574 acydburn
                                $db->sql_freeresult($result);
337 5574 acydburn
338 5574 acydburn
                                // Unset global permission option
339 5574 acydburn
                                unset($auth_options[$permission_type]);
340 5574 acydburn
341 5574 acydburn
                                // Display auth options
342 5574 acydburn
                                $this->display_auth_options($auth_options);
343 5574 acydburn
344 5574 acydburn
                                // Get users/groups/forums using this preset...
345 5574 acydburn
                                if ($action == 'edit')
346 5574 acydburn
                                {
347 5574 acydburn
                                        $hold_ary = $auth_admin->get_role_mask($role_id);
348 5574 acydburn
349 5574 acydburn
                                        if (sizeof($hold_ary))
350 5574 acydburn
                                        {
351 6900 acydburn
                                                $role_name = (!empty($user->lang[$role_row['role_name']])) ? $user->lang[$role_row['role_name']] : $role_row['role_name'];
352 6899 acydburn
353 7224 davidmj
                                                $template->assign_vars(array(
354 5580 acydburn
                                                        'S_DISPLAY_ROLE_MASK'        => true,
355 6899 acydburn
                                                        'L_ROLE_ASSIGNED_TO'        => sprintf($user->lang['ROLE_ASSIGNED_TO'], $role_name))
356 5580 acydburn
                                                );
357 5580 acydburn
358 5574 acydburn
                                                $auth_admin->display_role_mask($hold_ary);
359 5574 acydburn
                                        }
360 5574 acydburn
                                }
361 5574 acydburn
362 5574 acydburn
                                return;
363 5574 acydburn
                        break;
364 5791 acydburn
365 5791 acydburn
                        case 'move_up':
366 5791 acydburn
                        case 'move_down':
367 5791 acydburn
368 5791 acydburn
                                $order = request_var('order', 0);
369 5791 acydburn
                                $order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
370 5791 acydburn
371 5791 acydburn
                                $sql = 'UPDATE ' . ACL_ROLES_TABLE . '
372 6930 acydburn
                                        SET role_order = ' . $order_total . " - role_order
373 5791 acydburn
                                        WHERE role_type = '" . $db->sql_escape($permission_type) . "'
374 5791 acydburn
                                                AND role_order IN ($order, " . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
375 5791 acydburn
                                $db->sql_query($sql);
376 5791 acydburn
377 5791 acydburn
                        break;
378 5574 acydburn
                }
379 5574 acydburn
380 6073 acydburn
                // By default, check that role_order is valid and fix it if necessary
381 5791 acydburn
                $sql = 'SELECT role_id, role_order
382 5791 acydburn
                        FROM ' . ACL_ROLES_TABLE . "
383 5791 acydburn
                        WHERE role_type = '" . $db->sql_escape($permission_type) . "'
384 5824 acydburn
                        ORDER BY role_order ASC";
385 5791 acydburn
                $result = $db->sql_query($sql);
386 5791 acydburn
387 5791 acydburn
                if ($row = $db->sql_fetchrow($result))
388 5791 acydburn
                {
389 5791 acydburn
                        $order = 0;
390 5791 acydburn
                        do
391 5791 acydburn
                        {
392 5791 acydburn
                                $order++;
393 5791 acydburn
                                if ($row['role_order'] != $order)
394 5791 acydburn
                                {
395 5791 acydburn
                                        $db->sql_query('UPDATE ' . ACL_ROLES_TABLE . " SET role_order = $order WHERE role_id = {$row['role_id']}");
396 5791 acydburn
                                }
397 5791 acydburn
                        }
398 5791 acydburn
                        while ($row = $db->sql_fetchrow($result));
399 5791 acydburn
                }
400 5791 acydburn
                $db->sql_freeresult($result);
401 5791 acydburn
402 5824 acydburn
                // Display assigned items?
403 5824 acydburn
                $display_item = request_var('display_item', 0);
404 5824 acydburn
405 5574 acydburn
                // Select existing roles
406 5574 acydburn
                $sql = 'SELECT *
407 5574 acydburn
                        FROM ' . ACL_ROLES_TABLE . "
408 5574 acydburn
                        WHERE role_type = '" . $db->sql_escape($permission_type) . "'
409 5791 acydburn
                        ORDER BY role_order ASC";
410 5574 acydburn
                $result = $db->sql_query($sql);
411 5574 acydburn
412 5824 acydburn
                $s_role_options = '';
413 5574 acydburn
                while ($row = $db->sql_fetchrow($result))
414 5574 acydburn
                {
415 6912 acydburn
                        $role_name = (!empty($user->lang[$row['role_name']])) ? $user->lang[$row['role_name']] : $row['role_name'];
416 6912 acydburn
417 5574 acydburn
                        $template->assign_block_vars('roles', array(
418 6912 acydburn
                                'ROLE_NAME'                                => $role_name,
419 5872 acydburn
                                'ROLE_DESCRIPTION'                => (!empty($user->lang[$row['role_description']])) ? $user->lang[$row['role_description']] : nl2br($row['role_description']),
420 5574 acydburn
421 5574 acydburn
                                'U_EDIT'                        => $this->u_action . '&amp;action=edit&amp;role_id=' . $row['role_id'],
422 5574 acydburn
                                'U_REMOVE'                        => $this->u_action . '&amp;action=remove&amp;role_id=' . $row['role_id'],
423 5791 acydburn
                                'U_MOVE_UP'                        => $this->u_action . '&amp;action=move_up&amp;order=' . $row['role_order'],
424 5791 acydburn
                                'U_MOVE_DOWN'                => $this->u_action . '&amp;action=move_down&amp;order=' . $row['role_order'],
425 5580 acydburn
                                'U_DISPLAY_ITEMS'        => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&amp;display_item=' . $row['role_id'] . '#assigned_to')
426 5574 acydburn
                        );
427 5574 acydburn
428 6912 acydburn
                        $s_role_options .= '<option value="' . $row['role_id'] . '">' . $role_name . '</option>';
429 5580 acydburn
430 5580 acydburn
                        if ($display_item == $row['role_id'])
431 5580 acydburn
                        {
432 5580 acydburn
                                $template->assign_vars(array(
433 6912 acydburn
                                        'L_ROLE_ASSIGNED_TO'        => sprintf($user->lang['ROLE_ASSIGNED_TO'], $role_name))
434 5580 acydburn
                                );
435 5580 acydburn
                        }
436 5574 acydburn
                }
437 5824 acydburn
                $db->sql_freeresult($result);
438 5574 acydburn
439 5574 acydburn
                $template->assign_vars(array(
440 5574 acydburn
                        'S_ROLE_OPTIONS'                => $s_role_options)
441 5574 acydburn
                );
442 5574 acydburn
443 5574 acydburn
                if ($display_item)
444 5574 acydburn
                {
445 5580 acydburn
                        $template->assign_vars(array(
446 5580 acydburn
                                'S_DISPLAY_ROLE_MASK'        => true)
447 5580 acydburn
                        );
448 5574 acydburn
449 5574 acydburn
                        $hold_ary = $auth_admin->get_role_mask($display_item);
450 5574 acydburn
                        $auth_admin->display_role_mask($hold_ary);
451 5574 acydburn
                }
452 5574 acydburn
        }
453 5574 acydburn
454 5574 acydburn
        /**
455 5574 acydburn
        * Display permission settings able to be set
456 5574 acydburn
        */
457 5574 acydburn
        function display_auth_options($auth_options)
458 5574 acydburn
        {
459 5574 acydburn
                global $template, $user;
460 5574 acydburn
461 5574 acydburn
                $content_array = $categories = array();
462 5574 acydburn
                $key_sort_array = array(0);
463 5574 acydburn
                $auth_options = array(0 => $auth_options);
464 6073 acydburn
465 5574 acydburn
                // Making use of auth_admin method here (we do not really want to change two similar code fragments)
466 5574 acydburn
                auth_admin::build_permission_array($auth_options, $content_array, $categories, $key_sort_array);
467 5574 acydburn
468 5574 acydburn
                $content_array = $content_array[0];
469 6073 acydburn
470 5574 acydburn
                $template->assign_var('S_NUM_PERM_COLS', sizeof($categories));
471 5574 acydburn
472 5574 acydburn
                // Assign to template
473 5574 acydburn
                foreach ($content_array as $cat => $cat_array)
474 5574 acydburn
                {
475 5574 acydburn
                        $template->assign_block_vars('auth', array(
476 5574 acydburn
                                'CAT_NAME'        => $user->lang['permission_cat'][$cat],
477 5622 acydburn
478 6115 acydburn
                                'S_YES'                => ($cat_array['S_YES'] && !$cat_array['S_NEVER'] && !$cat_array['S_NO']) ? true : false,
479 6115 acydburn
                                'S_NEVER'        => ($cat_array['S_NEVER'] && !$cat_array['S_YES'] && !$cat_array['S_NO']) ? true : false,
480 6115 acydburn
                                'S_NO'                => ($cat_array['S_NO'] && !$cat_array['S_NEVER'] && !$cat_array['S_YES']) ? true : false)
481 5574 acydburn
                        );
482 6073 acydburn
483 5574 acydburn
                        foreach ($cat_array['permissions'] as $permission => $allowed)
484 5574 acydburn
                        {
485 5574 acydburn
                                $template->assign_block_vars('auth.mask', array(
486 5574 acydburn
                                        'S_YES'                => ($allowed == ACL_YES) ? true : false,
487 6115 acydburn
                                        'S_NEVER'        => ($allowed == ACL_NEVER) ? true : false,
488 5574 acydburn
                                        'S_NO'                => ($allowed == ACL_NO) ? true : false,
489 5574 acydburn
490 5574 acydburn
                                        'FIELD_NAME'        => $permission,
491 5574 acydburn
                                        'PERMISSION'        => $user->lang['acl_' . $permission]['lang'])
492 5574 acydburn
                                );
493 5574 acydburn
                        }
494 5574 acydburn
                }
495 5574 acydburn
        }
496 5574 acydburn
497 5574 acydburn
        /**
498 5574 acydburn
        * Remove role
499 5574 acydburn
        */
500 5580 acydburn
        function remove_role($role_id, $permission_type)
501 5574 acydburn
        {
502 5574 acydburn
                global $db;
503 5574 acydburn
504 5574 acydburn
                $auth_admin = new auth_admin();
505 6073 acydburn
506 5580 acydburn
                // Get complete auth array
507 5580 acydburn
                $sql = 'SELECT auth_option, auth_option_id
508 5580 acydburn
                        FROM ' . ACL_OPTIONS_TABLE . "
509 7789 acydburn
                        WHERE auth_option " . $db->sql_like_expression($permission_type . $db->any_char);
510 5580 acydburn
                $result = $db->sql_query($sql);
511 5580 acydburn
512 5580 acydburn
                $auth_settings = array();
513 5580 acydburn
                while ($row = $db->sql_fetchrow($result))
514 5580 acydburn
                {
515 6115 acydburn
                        $auth_settings[$row['auth_option']] = ACL_NO;
516 5580 acydburn
                }
517 5580 acydburn
                $db->sql_freeresult($result);
518 5580 acydburn
519 5580 acydburn
                // Get the role auth settings we need to re-set...
520 5574 acydburn
                $sql = 'SELECT o.auth_option, r.auth_setting
521 5574 acydburn
                        FROM ' . ACL_ROLES_DATA_TABLE . ' r, ' . ACL_OPTIONS_TABLE . ' o
522 5574 acydburn
                        WHERE o.auth_option_id = r.auth_option_id
523 5574 acydburn
                                AND r.role_id = ' . $role_id;
524 5574 acydburn
                $result = $db->sql_query($sql);
525 5574 acydburn
526 5574 acydburn
                while ($row = $db->sql_fetchrow($result))
527 5574 acydburn
                {
528 5574 acydburn
                        $auth_settings[$row['auth_option']] = $row['auth_setting'];
529 5574 acydburn
                }
530 5574 acydburn
                $db->sql_freeresult($result);
531 5574 acydburn
532 5574 acydburn
                // Get role assignments
533 5574 acydburn
                $hold_ary = $auth_admin->get_role_mask($role_id);
534 5574 acydburn
535 5824 acydburn
                // Re-assign permissions
536 5574 acydburn
                foreach ($hold_ary as $forum_id => $forum_ary)
537 5574 acydburn
                {
538 5574 acydburn
                        if (isset($forum_ary['users']))
539 5574 acydburn
                        {
540 5580 acydburn
                                $auth_admin->acl_set('user', $forum_id, $forum_ary['users'], $auth_settings, 0, false);
541 5574 acydburn
                        }
542 5574 acydburn
543 5574 acydburn
                        if (isset($forum_ary['groups']))
544 5574 acydburn
                        {
545 5580 acydburn
                                $auth_admin->acl_set('group', $forum_id, $forum_ary['groups'], $auth_settings, 0, false);
546 5574 acydburn
                        }
547 5574 acydburn
                }
548 5574 acydburn
549 5580 acydburn
                // Remove role from users and groups just to be sure (happens through acl_set)
550 5580 acydburn
                $sql = 'DELETE FROM ' . ACL_USERS_TABLE . '
551 5580 acydburn
                        WHERE auth_role_id = ' . $role_id;
552 5580 acydburn
                $db->sql_query($sql);
553 5580 acydburn
554 5580 acydburn
                $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
555 5580 acydburn
                        WHERE auth_role_id = ' . $role_id;
556 5580 acydburn
                $db->sql_query($sql);
557 5580 acydburn
558 5574 acydburn
                // Remove role data and role
559 5574 acydburn
                $sql = 'DELETE FROM ' . ACL_ROLES_DATA_TABLE . '
560 5574 acydburn
                        WHERE role_id = ' . $role_id;
561 5574 acydburn
                $db->sql_query($sql);
562 5574 acydburn
563 5574 acydburn
                $sql = 'DELETE FROM ' . ACL_ROLES_TABLE . '
564 5574 acydburn
                        WHERE role_id = ' . $role_id;
565 5574 acydburn
                $db->sql_query($sql);
566 5580 acydburn
567 5580 acydburn
                $auth_admin->acl_clear_prefetch();
568 5574 acydburn
        }
569 5574 acydburn
}
570 5574 acydburn
571 5574 acydburn
?>