~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_permissions.php

  • Committer: dcoles
  • Date: 2008-02-13 04:10:55 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:443
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
*
 
4
* @package acp
 
5
* @version $Id: acp_permissions.php,v 1.65 2007/10/05 14:36:32 acydburn Exp $
 
6
* @copyright (c) 2005 phpBB Group
 
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
 
8
*
 
9
*/
 
10
 
 
11
/**
 
12
* @ignore
 
13
*/
 
14
if (!defined('IN_PHPBB'))
 
15
{
 
16
        exit;
 
17
}
 
18
 
 
19
/**
 
20
* @package acp
 
21
*/
 
22
class acp_permissions
 
23
{
 
24
        var $u_action;
 
25
        var $permission_dropdown;
 
26
        
 
27
        function main($id, $mode)
 
28
        {
 
29
                global $db, $user, $auth, $template, $cache;
 
30
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
 
31
 
 
32
                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
 
33
                include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
 
34
 
 
35
                $auth_admin = new auth_admin();
 
36
 
 
37
                $user->add_lang('acp/permissions');
 
38
                add_permission_language();
 
39
 
 
40
                $this->tpl_name = 'acp_permissions';
 
41
 
 
42
                // Trace has other vars
 
43
                if ($mode == 'trace')
 
44
                {
 
45
                        $user_id = request_var('u', 0);
 
46
                        $forum_id = request_var('f', 0);
 
47
                        $permission = request_var('auth', '');
 
48
 
 
49
                        $this->tpl_name = 'permission_trace';
 
50
 
 
51
                        if ($user_id && isset($auth_admin->option_ids[$permission]) && $auth->acl_get('a_viewauth'))
 
52
                        {
 
53
                                $this->page_title = sprintf($user->lang['TRACE_PERMISSION'], $user->lang['acl_' . $permission]['lang']);
 
54
                                $this->permission_trace($user_id, $forum_id, $permission);
 
55
                                return;
 
56
                        }
 
57
                        trigger_error('NO_MODE', E_USER_ERROR);
 
58
                }
 
59
 
 
60
                // Set some vars
 
61
                $action = request_var('action', array('' => 0));
 
62
                $action = key($action);
 
63
                $action = (isset($_POST['psubmit'])) ? 'apply_permissions' : $action;
 
64
 
 
65
                $all_forums = request_var('all_forums', 0);
 
66
                $subforum_id = request_var('subforum_id', 0);
 
67
                $forum_id = request_var('forum_id', array(0));
 
68
 
 
69
                $username = request_var('username', array(''), true);
 
70
                $usernames = request_var('usernames', '', true);
 
71
                $user_id = request_var('user_id', array(0));
 
72
 
 
73
                $group_id = request_var('group_id', array(0));
 
74
                $select_all_groups = request_var('select_all_groups', 0);
 
75
 
 
76
                $form_name = 'acp_permissions';
 
77
                add_form_key($form_name);
 
78
 
 
79
                // If select all groups is set, we pre-build the group id array (this option is used for other screens to link to the permission settings screen)
 
80
                if ($select_all_groups)
 
81
                {
 
82
                        // Add default groups to selection
 
83
                        $sql_and = (!$config['coppa_enable']) ? " AND group_name <> 'REGISTERED_COPPA'" : '';
 
84
 
 
85
                        $sql = 'SELECT group_id
 
86
                                FROM ' . GROUPS_TABLE . '
 
87
                                WHERE group_type = ' . GROUP_SPECIAL . "
 
88
                                $sql_and";
 
89
                        $result = $db->sql_query($sql);
 
90
 
 
91
                        while ($row = $db->sql_fetchrow($result))
 
92
                        {
 
93
                                $group_id[] = $row['group_id'];
 
94
                        }
 
95
                        $db->sql_freeresult($result);
 
96
                }
 
97
                
 
98
                // Map usernames to ids and vice versa
 
99
                if ($usernames)
 
100
                {
 
101
                        $username = explode("\n", $usernames);
 
102
                }
 
103
                unset($usernames);
 
104
 
 
105
                if (sizeof($username) && !sizeof($user_id))
 
106
                {
 
107
                        user_get_id_name($user_id, $username);
 
108
 
 
109
                        if (!sizeof($user_id))
 
110
                        {
 
111
                                trigger_error($user->lang['SELECTED_USER_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
 
112
                        }
 
113
                }
 
114
                unset($username);
 
115
                
 
116
                // Build forum ids (of all forums are checked or subforum listing used)
 
117
                if ($all_forums)
 
118
                {
 
119
                        $sql = 'SELECT forum_id
 
120
                                FROM ' . FORUMS_TABLE . '
 
121
                                ORDER BY left_id';
 
122
                        $result = $db->sql_query($sql);
 
123
 
 
124
                        $forum_id = array();
 
125
                        while ($row = $db->sql_fetchrow($result))
 
126
                        {
 
127
                                $forum_id[] = $row['forum_id'];
 
128
                        }
 
129
                        $db->sql_freeresult($result);
 
130
                }
 
131
                else if ($subforum_id)
 
132
                {
 
133
                        $forum_id = array();
 
134
                        foreach (get_forum_branch($subforum_id, 'children') as $row)
 
135
                        {
 
136
                                $forum_id[] = $row['forum_id'];
 
137
                        }
 
138
                }
 
139
 
 
140
                // Define some common variables for every mode
 
141
                $error = array();
 
142
 
 
143
                $permission_scope = (strpos($mode, '_global') !== false) ? 'global' : 'local';
 
144
 
 
145
                // Showing introductionary page?
 
146
                if ($mode == 'intro')
 
147
                {
 
148
                        $this->page_title = 'ACP_PERMISSIONS';
 
149
 
 
150
                        $template->assign_vars(array(
 
151
                                'S_INTRO'               => true)
 
152
                        );
 
153
 
 
154
                        return;
 
155
                }
 
156
 
 
157
                switch ($mode)
 
158
                {
 
159
                        case 'setting_user_global':
 
160
                        case 'setting_group_global':
 
161
                                $this->permission_dropdown = array('u_', 'm_', 'a_');
 
162
                                $permission_victim = ($mode == 'setting_user_global') ? array('user') : array('group');
 
163
                                $this->page_title = ($mode == 'setting_user_global') ? 'ACP_USERS_PERMISSIONS' : 'ACP_GROUPS_PERMISSIONS';
 
164
                        break;
 
165
 
 
166
                        case 'setting_user_local':
 
167
                        case 'setting_group_local':
 
168
                                $this->permission_dropdown = array('f_', 'm_');
 
169
                                $permission_victim = ($mode == 'setting_user_local') ? array('user', 'forums') : array('group', 'forums');
 
170
                                $this->page_title = ($mode == 'setting_user_local') ? 'ACP_USERS_FORUM_PERMISSIONS' : 'ACP_GROUPS_FORUM_PERMISSIONS';
 
171
                        break;
 
172
 
 
173
                        case 'setting_admin_global':
 
174
                        case 'setting_mod_global':
 
175
                                $this->permission_dropdown = (strpos($mode, '_admin_') !== false) ? array('a_') : array('m_');
 
176
                                $permission_victim = array('usergroup');
 
177
                                $this->page_title = ($mode == 'setting_admin_global') ? 'ACP_ADMINISTRATORS' : 'ACP_GLOBAL_MODERATORS';
 
178
                        break;
 
179
 
 
180
                        case 'setting_mod_local':
 
181
                        case 'setting_forum_local':
 
182
                                $this->permission_dropdown = ($mode == 'setting_mod_local') ? array('m_') : array('f_');
 
183
                                $permission_victim = array('forums', 'usergroup');
 
184
                                $this->page_title = ($mode == 'setting_mod_local') ? 'ACP_FORUM_MODERATORS' : 'ACP_FORUM_PERMISSIONS';
 
185
                        break;
 
186
 
 
187
                        case 'view_admin_global':
 
188
                        case 'view_user_global':
 
189
                        case 'view_mod_global':
 
190
                                $this->permission_dropdown = ($mode == 'view_admin_global') ? array('a_') : (($mode == 'view_user_global') ? array('u_') : array('m_'));
 
191
                                $permission_victim = array('usergroup_view');
 
192
                                $this->page_title = ($mode == 'view_admin_global') ? 'ACP_VIEW_ADMIN_PERMISSIONS' : (($mode == 'view_user_global') ? 'ACP_VIEW_USER_PERMISSIONS' : 'ACP_VIEW_GLOBAL_MOD_PERMISSIONS');
 
193
                        break;
 
194
 
 
195
                        case 'view_mod_local':
 
196
                        case 'view_forum_local':
 
197
                                $this->permission_dropdown = ($mode == 'view_mod_local') ? array('m_') : array('f_');
 
198
                                $permission_victim = array('forums', 'usergroup_view');
 
199
                                $this->page_title = ($mode == 'view_mod_local') ? 'ACP_VIEW_FORUM_MOD_PERMISSIONS' : 'ACP_VIEW_FORUM_PERMISSIONS';
 
200
                        break;
 
201
 
 
202
                        default:
 
203
                                trigger_error('NO_MODE', E_USER_ERROR);
 
204
                        break;
 
205
                }
 
206
 
 
207
                $template->assign_vars(array(
 
208
                        'L_TITLE'               => $user->lang[$this->page_title],
 
209
                        'L_EXPLAIN'             => $user->lang[$this->page_title . '_EXPLAIN'])
 
210
                );
 
211
 
 
212
                // Get permission type
 
213
                $permission_type = request_var('type', $this->permission_dropdown[0]);
 
214
 
 
215
                if (!in_array($permission_type, $this->permission_dropdown))
 
216
                {
 
217
                        trigger_error($user->lang['WRONG_PERMISSION_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 
218
                }
 
219
 
 
220
 
 
221
                // Handle actions
 
222
                if (strpos($mode, 'setting_') === 0 && $action)
 
223
                {
 
224
                        switch ($action)
 
225
                        {
 
226
                                case 'delete':
 
227
 
 
228
                                        if (!check_form_key($form_name))
 
229
                                        {
 
230
                                                trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
 
231
                                        }
 
232
                                        // All users/groups selected?
 
233
                                        $all_users = (isset($_POST['all_users'])) ? true : false;
 
234
                                        $all_groups = (isset($_POST['all_groups'])) ? true : false;
 
235
 
 
236
                                        if ($all_users || $all_groups)
 
237
                                        {
 
238
                                                $items = $this->retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type);
 
239
 
 
240
                                                if ($all_users && sizeof($items['user_ids']))
 
241
                                                {
 
242
                                                        $user_id = $items['user_ids'];
 
243
                                                }
 
244
                                                else if ($all_groups && sizeof($items['group_ids']))
 
245
                                                {
 
246
                                                        $group_id = $items['group_ids'];
 
247
                                                }
 
248
                                        }
 
249
 
 
250
                                        if (sizeof($user_id) || sizeof($group_id))
 
251
                                        {
 
252
                                                $this->remove_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id, $forum_id);
 
253
                                        }
 
254
                                        else
 
255
                                        {
 
256
                                                trigger_error($user->lang['NO_USER_GROUP_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
 
257
                                        }
 
258
                                break;
 
259
 
 
260
                                case 'apply_permissions':
 
261
                                        if (!isset($_POST['setting']))
 
262
                                        {
 
263
                                                trigger_error($user->lang['NO_AUTH_SETTING_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
 
264
                                        }
 
265
                                        if (!check_form_key($form_name))
 
266
                                        {
 
267
                                                trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
 
268
                                        }
 
269
 
 
270
                                        $this->set_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id);
 
271
                                break;
 
272
 
 
273
                                case 'apply_all_permissions':
 
274
                                        if (!isset($_POST['setting']))
 
275
                                        {
 
276
                                                trigger_error($user->lang['NO_AUTH_SETTING_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
 
277
                                        }
 
278
                                        if (!check_form_key($form_name))
 
279
                                        {
 
280
                                                trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
 
281
                                        }
 
282
 
 
283
                                        $this->set_all_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id);
 
284
                                break;
 
285
                        }
 
286
                }
 
287
 
 
288
 
 
289
                // Setting permissions screen
 
290
                $s_hidden_fields = build_hidden_fields(array(
 
291
                        'user_id'               => $user_id,
 
292
                        'group_id'              => $group_id,
 
293
                        'forum_id'              => $forum_id,
 
294
                        'type'                  => $permission_type)
 
295
                );
 
296
 
 
297
                // Go through the screens/options needed and present them in correct order
 
298
                foreach ($permission_victim as $victim)
 
299
                {
 
300
                        switch ($victim)
 
301
                        {
 
302
                                case 'forum_dropdown':
 
303
 
 
304
                                        if (sizeof($forum_id))
 
305
                                        {
 
306
                                                $this->check_existence('forum', $forum_id);
 
307
                                                continue 2;
 
308
                                        }
 
309
 
 
310
                                        $template->assign_vars(array(
 
311
                                                'S_SELECT_FORUM'                => true,
 
312
                                                'S_FORUM_OPTIONS'               => make_forum_select(false, false, true, false, false))
 
313
                                        );
 
314
 
 
315
                                break;
 
316
 
 
317
                                case 'forums':
 
318
 
 
319
                                        if (sizeof($forum_id))
 
320
                                        {
 
321
                                                $this->check_existence('forum', $forum_id);
 
322
                                                continue 2;
 
323
                                        }
 
324
 
 
325
                                        $forum_list = make_forum_select(false, false, true, false, false, false, true);
 
326
 
 
327
                                        // Build forum options
 
328
                                        $s_forum_options = '';
 
329
                                        foreach ($forum_list as $f_id => $f_row)
 
330
                                        {
 
331
                                                $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
 
332
                                        }
 
333
 
 
334
                                        // Build subforum options
 
335
                                        $s_subforum_options = $this->build_subforum_options($forum_list);
 
336
 
 
337
                                        $template->assign_vars(array(
 
338
                                                'S_SELECT_FORUM'                => true,
 
339
                                                'S_FORUM_OPTIONS'               => $s_forum_options,
 
340
                                                'S_SUBFORUM_OPTIONS'    => $s_subforum_options,
 
341
                                                'S_FORUM_ALL'                   => true,
 
342
                                                'S_FORUM_MULTIPLE'              => true)
 
343
                                        );
 
344
 
 
345
                                break;
 
346
 
 
347
                                case 'user':
 
348
 
 
349
                                        if (sizeof($user_id))
 
350
                                        {
 
351
                                                $this->check_existence('user', $user_id);
 
352
                                                continue 2;
 
353
                                        }
 
354
 
 
355
                                        $template->assign_vars(array(
 
356
                                                'S_SELECT_USER'                 => true,
 
357
                                                'U_FIND_USERNAME'               => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=select_victim&amp;field=username&amp;select_single=true'),
 
358
                                        ));
 
359
 
 
360
                                break;
 
361
 
 
362
                                case 'group':
 
363
 
 
364
                                        if (sizeof($group_id))
 
365
                                        {
 
366
                                                $this->check_existence('group', $group_id);
 
367
                                                continue 2;
 
368
                                        }
 
369
 
 
370
                                        $template->assign_vars(array(
 
371
                                                'S_SELECT_GROUP'                => true,
 
372
                                                'S_GROUP_OPTIONS'               => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)))
 
373
                                        );
 
374
 
 
375
                                break;
 
376
 
 
377
                                case 'usergroup':
 
378
                                case 'usergroup_view':
 
379
 
 
380
                                        $all_users = (isset($_POST['all_users'])) ? true : false;
 
381
                                        $all_groups = (isset($_POST['all_groups'])) ? true : false;
 
382
 
 
383
                                        if ((sizeof($user_id) && !$all_users) || (sizeof($group_id) && !$all_groups))
 
384
                                        {
 
385
                                                if (sizeof($user_id))
 
386
                                                {
 
387
                                                        $this->check_existence('user', $user_id);
 
388
                                                }
 
389
 
 
390
                                                if (sizeof($group_id))
 
391
                                                {
 
392
                                                        $this->check_existence('group', $group_id);
 
393
                                                }
 
394
 
 
395
                                                continue 2;
 
396
                                        }
 
397
 
 
398
                                        // Now we check the users... because the "all"-selection is different here (all defined users/groups)
 
399
                                        $items = $this->retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type);
 
400
 
 
401
                                        if ($all_users && sizeof($items['user_ids']))
 
402
                                        {
 
403
                                                $user_id = $items['user_ids'];
 
404
                                                continue 2;
 
405
                                        }
 
406
 
 
407
                                        if ($all_groups && sizeof($items['group_ids']))
 
408
                                        {
 
409
                                                $group_id = $items['group_ids'];
 
410
                                                continue 2;
 
411
                                        }
 
412
 
 
413
                                        $template->assign_vars(array(
 
414
                                                'S_SELECT_USERGROUP'            => ($victim == 'usergroup') ? true : false,
 
415
                                                'S_SELECT_USERGROUP_VIEW'       => ($victim == 'usergroup_view') ? true : false,
 
416
                                                'S_DEFINED_USER_OPTIONS'        => $items['user_ids_options'],
 
417
                                                'S_DEFINED_GROUP_OPTIONS'       => $items['group_ids_options'],
 
418
                                                'S_ADD_GROUP_OPTIONS'           => group_select_options(false, $items['group_ids'], (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
 
419
                                                'U_FIND_USERNAME'                       => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=add_user&amp;field=username&amp;select_single=true'),
 
420
                                        ));
 
421
 
 
422
                                break;
 
423
                        }
 
424
 
 
425
                        // The S_ALLOW_SELECT parameter below is a measure to lower memory usage.
 
426
                        // If there are more than 5 forums selected the admin is not able to select all users/groups too.
 
427
                        // We need to see if the number of forums can be increased or need to be decreased.
 
428
 
 
429
                        $template->assign_vars(array(
 
430
                                'U_ACTION'                              => $this->u_action,
 
431
                                'ANONYMOUS_USER_ID'             => ANONYMOUS,
 
432
 
 
433
                                'S_SELECT_VICTIM'               => true,
 
434
                                'S_ALLOW_ALL_SELECT'    => (sizeof($forum_id) > 5) ? false : true,
 
435
                                'S_CAN_SELECT_USER'             => ($auth->acl_get('a_authusers')) ? true : false,
 
436
                                'S_CAN_SELECT_GROUP'    => ($auth->acl_get('a_authgroups')) ? true : false,
 
437
                                'S_HIDDEN_FIELDS'               => $s_hidden_fields)
 
438
                        );
 
439
 
 
440
                        // Let the forum names being displayed
 
441
                        if (sizeof($forum_id))
 
442
                        {
 
443
                                $sql = 'SELECT forum_name
 
444
                                        FROM ' . FORUMS_TABLE . '
 
445
                                        WHERE ' . $db->sql_in_set('forum_id', $forum_id) . '
 
446
                                        ORDER BY left_id ASC';
 
447
                                $result = $db->sql_query($sql);
 
448
 
 
449
                                $forum_names = array();
 
450
                                while ($row = $db->sql_fetchrow($result))
 
451
                                {
 
452
                                        $forum_names[] = $row['forum_name'];
 
453
                                }
 
454
                                $db->sql_freeresult($result);
 
455
 
 
456
                                $template->assign_vars(array(
 
457
                                        'S_FORUM_NAMES'         => (sizeof($forum_names)) ? true : false,
 
458
                                        'FORUM_NAMES'           => implode(', ', $forum_names))
 
459
                                );
 
460
                        }
 
461
 
 
462
                        return;
 
463
                }
 
464
 
 
465
                // Do not allow forum_ids being set and no other setting defined (will bog down the server too much)
 
466
                if (sizeof($forum_id) && !sizeof($user_id) && !sizeof($group_id))
 
467
                {
 
468
                        trigger_error($user->lang['ONLY_FORUM_DEFINED'] . adm_back_link($this->u_action), E_USER_WARNING);
 
469
                }
 
470
 
 
471
                $template->assign_vars(array(
 
472
                        'S_PERMISSION_DROPDOWN'         => (sizeof($this->permission_dropdown) > 1) ? $this->build_permission_dropdown($this->permission_dropdown, $permission_type, $permission_scope) : false,
 
473
                        'L_PERMISSION_TYPE'                     => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
 
474
 
 
475
                        'U_ACTION'                                      => $this->u_action,
 
476
                        'S_HIDDEN_FIELDS'                       => $s_hidden_fields)
 
477
                );
 
478
 
 
479
                if (strpos($mode, 'setting_') === 0)
 
480
                {
 
481
                        $template->assign_vars(array(
 
482
                                'S_SETTING_PERMISSIONS'         => true)
 
483
                        );
 
484
 
 
485
                        $hold_ary = $auth_admin->get_mask('set', (sizeof($user_id)) ? $user_id : false, (sizeof($group_id)) ? $group_id : false, (sizeof($forum_id)) ? $forum_id : false, $permission_type, $permission_scope, ACL_NO);
 
486
                        $auth_admin->display_mask('set', $permission_type, $hold_ary, ((sizeof($user_id)) ? 'user' : 'group'), (($permission_scope == 'local') ? true : false));
 
487
                }
 
488
                else
 
489
                {
 
490
                        $template->assign_vars(array(
 
491
                                'S_VIEWING_PERMISSIONS'         => true)
 
492
                        );
 
493
 
 
494
                        $hold_ary = $auth_admin->get_mask('view', (sizeof($user_id)) ? $user_id : false, (sizeof($group_id)) ? $group_id : false, (sizeof($forum_id)) ? $forum_id : false, $permission_type, $permission_scope, ACL_NEVER);
 
495
                        $auth_admin->display_mask('view', $permission_type, $hold_ary, ((sizeof($user_id)) ? 'user' : 'group'), (($permission_scope == 'local') ? true : false));
 
496
                }
 
497
        }
 
498
 
 
499
        /**
 
500
        * Build +subforum options
 
501
        */
 
502
        function build_subforum_options($forum_list)
 
503
        {
 
504
                global $user;
 
505
 
 
506
                $s_options = '';
 
507
 
 
508
                $forum_list = array_merge($forum_list);
 
509
 
 
510
                foreach ($forum_list as $key => $row)
 
511
                {
 
512
                        if ($row['disabled'])
 
513
                        {
 
514
                                continue;
 
515
                        }
 
516
 
 
517
                        $s_options .= '<option value="' . $row['forum_id'] . '"' . (($row['selected']) ? ' selected="selected"' : '') . '>' . $row['padding'] . $row['forum_name'];
 
518
 
 
519
                        // We check if a branch is there...
 
520
                        $branch_there = false;
 
521
 
 
522
                        foreach (array_slice($forum_list, $key + 1) as $temp_row)
 
523
                        {
 
524
                                if ($temp_row['left_id'] > $row['left_id'] && $temp_row['left_id'] < $row['right_id'])
 
525
                                {
 
526
                                        $branch_there = true;
 
527
                                        break;
 
528
                                }
 
529
                                continue;
 
530
                        }
 
531
                        
 
532
                        if ($branch_there)
 
533
                        {
 
534
                                $s_options .= ' [' . $user->lang['PLUS_SUBFORUMS'] . ']';
 
535
                        }
 
536
 
 
537
                        $s_options .= '</option>';
 
538
                }
 
539
 
 
540
                return $s_options;
 
541
        }
 
542
        
 
543
        /**
 
544
        * Build dropdown field for changing permission types
 
545
        */
 
546
        function build_permission_dropdown($options, $default_option, $permission_scope)
 
547
        {
 
548
                global $user, $auth;
 
549
                
 
550
                $s_dropdown_options = '';
 
551
                foreach ($options as $setting)
 
552
                {
 
553
                        if (!$auth->acl_get('a_' . str_replace('_', '', $setting) . 'auth'))
 
554
                        {
 
555
                                continue;
 
556
                        }
 
557
 
 
558
                        $selected = ($setting == $default_option) ? ' selected="selected"' : '';
 
559
                        $l_setting = (isset($user->lang['permission_type'][$permission_scope][$setting])) ? $user->lang['permission_type'][$permission_scope][$setting] : $user->lang['permission_type'][$setting];
 
560
                        $s_dropdown_options .= '<option value="' . $setting . '"' . $selected . '>' . $l_setting . '</option>';
 
561
                }
 
562
 
 
563
                return $s_dropdown_options;
 
564
        }
 
565
 
 
566
        /**
 
567
        * Check if selected items exist. Remove not found ids and if empty return error.
 
568
        */
 
569
        function check_existence($mode, &$ids)
 
570
        {
 
571
                global $db, $user;
 
572
 
 
573
                switch ($mode)
 
574
                {
 
575
                        case 'user':
 
576
                                $table = USERS_TABLE;
 
577
                                $sql_id = 'user_id';
 
578
                        break;
 
579
 
 
580
                        case 'group':
 
581
                                $table = GROUPS_TABLE;
 
582
                                $sql_id = 'group_id';
 
583
                        break;
 
584
 
 
585
                        case 'forum':
 
586
                                $table = FORUMS_TABLE;
 
587
                                $sql_id = 'forum_id';
 
588
                        break;
 
589
                }
 
590
 
 
591
                if (sizeof($ids))
 
592
                {
 
593
                        $sql = "SELECT $sql_id
 
594
                                FROM $table
 
595
                                WHERE " . $db->sql_in_set($sql_id, $ids);
 
596
                        $result = $db->sql_query($sql);
 
597
 
 
598
                        $ids = array();
 
599
                        while ($row = $db->sql_fetchrow($result))
 
600
                        {
 
601
                                $ids[] = $row[$sql_id];
 
602
                        }
 
603
                        $db->sql_freeresult($result);
 
604
                }
 
605
 
 
606
                if (!sizeof($ids))
 
607
                {
 
608
                        trigger_error($user->lang['SELECTED_' . strtoupper($mode) . '_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
 
609
                }
 
610
        }
 
611
 
 
612
        /**
 
613
        * Apply permissions
 
614
        */
 
615
        function set_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
 
616
        {
 
617
                global $user, $auth;
 
618
 
 
619
                $psubmit = request_var('psubmit', array(0 => array(0 => 0)));
 
620
 
 
621
                // User or group to be set?
 
622
                $ug_type = (sizeof($user_id)) ? 'user' : 'group';
 
623
 
 
624
                // Check the permission setting again
 
625
                if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's'))
 
626
                {
 
627
                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 
628
                }
 
629
                
 
630
                $ug_id = $forum_id = 0;
 
631
 
 
632
                // We loop through the auth settings defined in our submit
 
633
                list($ug_id, ) = each($psubmit);
 
634
                list($forum_id, ) = each($psubmit[$ug_id]);
 
635
 
 
636
                if (empty($_POST['setting']) || empty($_POST['setting'][$ug_id]) || empty($_POST['setting'][$ug_id][$forum_id]) || !is_array($_POST['setting'][$ug_id][$forum_id]))
 
637
                {
 
638
                        trigger_error('WRONG_PERMISSION_SETTING_FORMAT', E_USER_WARNING);
 
639
                }
 
640
 
 
641
                // We obtain and check $_POST['setting'][$ug_id][$forum_id] directly and not using request_var() because request_var()
 
642
                // currently does not support the amount of dimensions required. ;)
 
643
                //              $auth_settings = request_var('setting', array(0 => array(0 => array('' => 0))));
 
644
                $auth_settings = array_map('intval', $_POST['setting'][$ug_id][$forum_id]);
 
645
 
 
646
                // Do we have a role we want to set?
 
647
                $assigned_role = (isset($_POST['role'][$ug_id][$forum_id])) ? (int) $_POST['role'][$ug_id][$forum_id] : 0;
 
648
 
 
649
                // Do the admin want to set these permissions to other items too?
 
650
                $inherit = request_var('inherit', array(0 => array(0)));
 
651
 
 
652
                $ug_id = array($ug_id);
 
653
                $forum_id = array($forum_id);
 
654
 
 
655
                if (sizeof($inherit))
 
656
                {
 
657
                        foreach ($inherit as $_ug_id => $forum_id_ary)
 
658
                        {
 
659
                                // Inherit users/groups?
 
660
                                if (!in_array($_ug_id, $ug_id))
 
661
                                {
 
662
                                        $ug_id[] = $_ug_id;
 
663
                                }
 
664
 
 
665
                                // Inherit forums?
 
666
                                $forum_id = array_merge($forum_id, array_keys($forum_id_ary));
 
667
                        }
 
668
                }
 
669
 
 
670
                $forum_id = array_unique($forum_id);
 
671
 
 
672
                // If the auth settings differ from the assigned role, then do not set a role...
 
673
                if ($assigned_role)
 
674
                {
 
675
                        if (!$this->check_assigned_role($assigned_role, $auth_settings))
 
676
                        {
 
677
                                $assigned_role = 0;
 
678
                        }
 
679
                }
 
680
 
 
681
                // Update the permission set...
 
682
                $auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, $assigned_role);
 
683
 
 
684
                // Do we need to recache the moderator lists?
 
685
                if ($permission_type == 'm_')
 
686
                {
 
687
                        cache_moderators();
 
688
                }
 
689
 
 
690
                // Remove users who are now moderators or admins from everyones foes list
 
691
                if ($permission_type == 'm_' || $permission_type == 'a_')
 
692
                {
 
693
                        update_foes($group_id, $user_id);
 
694
                }
 
695
 
 
696
                $this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id);
 
697
 
 
698
                trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
 
699
        }
 
700
 
 
701
        /**
 
702
        * Apply all permissions
 
703
        */
 
704
        function set_all_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
 
705
        {
 
706
                global $user, $auth;
 
707
 
 
708
                // User or group to be set?
 
709
                $ug_type = (sizeof($user_id)) ? 'user' : 'group';
 
710
 
 
711
                // Check the permission setting again
 
712
                if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's'))
 
713
                {
 
714
                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 
715
                }
 
716
 
 
717
                $auth_settings = (isset($_POST['setting'])) ? $_POST['setting'] : array();
 
718
                $auth_roles = (isset($_POST['role'])) ? $_POST['role'] : array();
 
719
                $ug_ids = $forum_ids = array();
 
720
 
 
721
                // We need to go through the auth settings
 
722
                foreach ($auth_settings as $ug_id => $forum_auth_row)
 
723
                {
 
724
                        $ug_id = (int) $ug_id;
 
725
                        $ug_ids[] = $ug_id;
 
726
 
 
727
                        foreach ($forum_auth_row as $forum_id => $auth_options)
 
728
                        {
 
729
                                $forum_id = (int) $forum_id;
 
730
                                $forum_ids[] = $forum_id;
 
731
 
 
732
                                // Check role...
 
733
                                $assigned_role = (isset($auth_roles[$ug_id][$forum_id])) ? (int) $auth_roles[$ug_id][$forum_id] : 0;
 
734
 
 
735
                                // If the auth settings differ from the assigned role, then do not set a role...
 
736
                                if ($assigned_role)
 
737
                                {
 
738
                                        if (!$this->check_assigned_role($assigned_role, $auth_options))
 
739
                                        {
 
740
                                                $assigned_role = 0;
 
741
                                        }
 
742
                                }
 
743
 
 
744
                                // Update the permission set...
 
745
                                $auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_options, $assigned_role, false);
 
746
                        }
 
747
                }
 
748
 
 
749
                $auth_admin->acl_clear_prefetch();
 
750
 
 
751
                // Do we need to recache the moderator lists?
 
752
                if ($permission_type == 'm_')
 
753
                {
 
754
                        cache_moderators();
 
755
                }
 
756
 
 
757
                // Remove users who are now moderators or admins from everyones foes list
 
758
                if ($permission_type == 'm_' || $permission_type == 'a_')
 
759
                {
 
760
                        update_foes($group_id, $user_id);
 
761
                }
 
762
 
 
763
                $this->log_action($mode, 'add', $permission_type, $ug_type, $ug_ids, $forum_ids);
 
764
 
 
765
                trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
 
766
        }
 
767
 
 
768
        /**
 
769
        * Compare auth settings with auth settings from role
 
770
        * returns false if they differ, true if they are equal
 
771
        */
 
772
        function check_assigned_role($role_id, &$auth_settings)
 
773
        {
 
774
                global $db;
 
775
 
 
776
                $sql = 'SELECT o.auth_option, r.auth_setting
 
777
                        FROM ' . ACL_OPTIONS_TABLE . ' o, ' . ACL_ROLES_DATA_TABLE . ' r
 
778
                        WHERE o.auth_option_id = r.auth_option_id
 
779
                                AND r.role_id = ' . $role_id;
 
780
                $result = $db->sql_query($sql);
 
781
 
 
782
                $test_auth_settings = array();
 
783
                while ($row = $db->sql_fetchrow($result))
 
784
                {
 
785
                        $test_auth_settings[$row['auth_option']] = $row['auth_setting'];
 
786
                }
 
787
                $db->sql_freeresult($result);
 
788
 
 
789
                // We need to add any ACL_NO setting from auth_settings to compare correctly
 
790
                foreach ($auth_settings as $option => $setting)
 
791
                {
 
792
                        if ($setting == ACL_NO)
 
793
                        {
 
794
                                $test_auth_settings[$option] = $setting;
 
795
                        }
 
796
                }
 
797
 
 
798
                if (sizeof(array_diff_assoc($auth_settings, $test_auth_settings)))
 
799
                {
 
800
                        return false;
 
801
                }
 
802
 
 
803
                return true;
 
804
        }
 
805
 
 
806
        /**
 
807
        * Remove permissions
 
808
        */
 
809
        function remove_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id, &$forum_id)
 
810
        {
 
811
                global $user, $db, $auth;
 
812
                        
 
813
                // User or group to be set?
 
814
                $ug_type = (sizeof($user_id)) ? 'user' : 'group';
 
815
 
 
816
                // Check the permission setting again
 
817
                if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's'))
 
818
                {
 
819
                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 
820
                }
 
821
 
 
822
                $auth_admin->acl_delete($ug_type, (($ug_type == 'user') ? $user_id : $group_id), (sizeof($forum_id) ? $forum_id : false), $permission_type);
 
823
 
 
824
                // Do we need to recache the moderator lists?
 
825
                if ($permission_type == 'm_')
 
826
                {
 
827
                        cache_moderators();
 
828
                }
 
829
 
 
830
                $this->log_action($mode, 'del', $permission_type, $ug_type, (($ug_type == 'user') ? $user_id : $group_id), (sizeof($forum_id) ? $forum_id : array(0 => 0)));
 
831
 
 
832
                trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));
 
833
        }
 
834
 
 
835
        /**
 
836
        * Log permission changes
 
837
        */
 
838
        function log_action($mode, $action, $permission_type, $ug_type, $ug_id, $forum_id)
 
839
        {
 
840
                global $db, $user;
 
841
 
 
842
                if (!is_array($ug_id))
 
843
                {
 
844
                        $ug_id = array($ug_id);
 
845
                }
 
846
 
 
847
                if (!is_array($forum_id))
 
848
                {
 
849
                        $forum_id = array($forum_id);
 
850
                }
 
851
 
 
852
                // Logging ... first grab user or groupnames ...
 
853
                $sql = ($ug_type == 'group') ? 'SELECT group_name as name, group_type FROM ' . GROUPS_TABLE . ' WHERE ' : 'SELECT username as name FROM ' . USERS_TABLE . ' WHERE ';
 
854
                $sql .= $db->sql_in_set(($ug_type == 'group') ? 'group_id' : 'user_id', array_map('intval', $ug_id));
 
855
                $result = $db->sql_query($sql);
 
856
 
 
857
                $l_ug_list = '';
 
858
                while ($row = $db->sql_fetchrow($result))
 
859
                {
 
860
                        $l_ug_list .= (($l_ug_list != '') ? ', ' : '') . ((isset($row['group_type']) && $row['group_type'] == GROUP_SPECIAL) ? '<span class="sep">' . $user->lang['G_' . $row['name']] . '</span>' : $row['name']);
 
861
                }
 
862
                $db->sql_freeresult($result);
 
863
 
 
864
                $mode = str_replace('setting_', '', $mode);
 
865
 
 
866
                if ($forum_id[0] == 0)
 
867
                {
 
868
                        add_log('admin', 'LOG_ACL_' . strtoupper($action) . '_' . strtoupper($mode) . '_' . strtoupper($permission_type), $l_ug_list);
 
869
                }
 
870
                else
 
871
                {
 
872
                        // Grab the forum details if non-zero forum_id
 
873
                        $sql = 'SELECT forum_name
 
874
                                FROM ' . FORUMS_TABLE . '
 
875
                                WHERE ' . $db->sql_in_set('forum_id', $forum_id);
 
876
                        $result = $db->sql_query($sql);
 
877
 
 
878
                        $l_forum_list = '';
 
879
                        while ($row = $db->sql_fetchrow($result))
 
880
                        {
 
881
                                $l_forum_list .= (($l_forum_list != '') ? ', ' : '') . $row['forum_name'];
 
882
                        }
 
883
                        $db->sql_freeresult($result);
 
884
 
 
885
                        add_log('admin', 'LOG_ACL_' . strtoupper($action) . '_' . strtoupper($mode) . '_' . strtoupper($permission_type), $l_forum_list, $l_ug_list);
 
886
                }
 
887
        }
 
888
 
 
889
        /**
 
890
        * Display a complete trace tree for the selected permission to determine where settings are set/unset
 
891
        */
 
892
        function permission_trace($user_id, $forum_id, $permission)
 
893
        {
 
894
                global $db, $template, $user, $auth;
 
895
 
 
896
                if ($user_id != $user->data['user_id'])
 
897
                {
 
898
                        $sql = 'SELECT user_id, username, user_permissions, user_type
 
899
                                FROM ' . USERS_TABLE . '
 
900
                                WHERE user_id = ' . $user_id;
 
901
                        $result = $db->sql_query($sql);
 
902
                        $userdata = $db->sql_fetchrow($result);
 
903
                        $db->sql_freeresult($result);
 
904
                }
 
905
                else
 
906
                {
 
907
                        $userdata = $user->data;
 
908
                }
 
909
 
 
910
                if (!$userdata)
 
911
                {
 
912
                        trigger_error('NO_USERS', E_USER_ERROR);
 
913
                }
 
914
 
 
915
                $forum_name = false;
 
916
 
 
917
                if ($forum_id)
 
918
                {
 
919
                        $sql = 'SELECT forum_name
 
920
                                FROM ' . FORUMS_TABLE . "
 
921
                                WHERE forum_id = $forum_id";
 
922
                        $result = $db->sql_query($sql, 3600);
 
923
                        $forum_name = $db->sql_fetchfield('forum_name');
 
924
                        $db->sql_freeresult($result);
 
925
                }
 
926
 
 
927
                $back = request_var('back', 0);
 
928
 
 
929
                $template->assign_vars(array(
 
930
                        'PERMISSION'                    => $user->lang['acl_' . $permission]['lang'],
 
931
                        'PERMISSION_USERNAME'   => $userdata['username'],
 
932
                        'FORUM_NAME'                    => $forum_name,
 
933
 
 
934
                        'S_GLOBAL_TRACE'                => ($forum_id) ? false : true,
 
935
 
 
936
                        'U_BACK'                                => ($back) ? build_url(array('f', 'back')) . "&amp;f=$back" : '')
 
937
                );
 
938
 
 
939
                $template->assign_block_vars('trace', array(
 
940
                        'WHO'                   => $user->lang['DEFAULT'],
 
941
                        'INFORMATION'   => $user->lang['TRACE_DEFAULT'],
 
942
 
 
943
                        'S_SETTING_NO'          => true,
 
944
                        'S_TOTAL_NO'            => true)
 
945
                );
 
946
 
 
947
                $sql = 'SELECT DISTINCT g.group_name, g.group_id, g.group_type
 
948
                        FROM ' . GROUPS_TABLE . ' g
 
949
                                LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON (ug.group_id = g.group_id)
 
950
                        WHERE ug.user_id = ' . $user_id . '
 
951
                                AND ug.user_pending = 0
 
952
                        ORDER BY g.group_type DESC, g.group_id DESC';
 
953
                $result = $db->sql_query($sql);
 
954
 
 
955
                $groups = array();
 
956
                while ($row = $db->sql_fetchrow($result))
 
957
                {
 
958
                        $groups[$row['group_id']] = array(
 
959
                                'auth_setting'          => ACL_NO,
 
960
                                'group_name'            => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']
 
961
                        );
 
962
                }
 
963
                $db->sql_freeresult($result);
 
964
 
 
965
                $total = ACL_NO;
 
966
                $add_key = (($forum_id) ? '_LOCAL' : '');
 
967
 
 
968
                if (sizeof($groups))
 
969
                {
 
970
                        // Get group auth settings
 
971
                        $hold_ary = $auth->acl_group_raw_data(array_keys($groups), $permission, $forum_id);
 
972
 
 
973
                        foreach ($hold_ary as $group_id => $forum_ary)
 
974
                        {
 
975
                                $groups[$group_id]['auth_setting'] = $hold_ary[$group_id][$forum_id][$permission];
 
976
                        }
 
977
                        unset($hold_ary);
 
978
 
 
979
                        foreach ($groups as $id => $row)
 
980
                        {
 
981
                                switch ($row['auth_setting'])
 
982
                                {
 
983
                                        case ACL_NO:
 
984
                                                $information = $user->lang['TRACE_GROUP_NO' . $add_key];
 
985
                                        break;
 
986
 
 
987
                                        case ACL_YES:
 
988
                                                $information = ($total == ACL_YES) ? $user->lang['TRACE_GROUP_YES_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_GROUP_YES_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_GROUP_YES_TOTAL_NO' . $add_key]);
 
989
                                                $total = ($total == ACL_NO) ? ACL_YES : $total;
 
990
                                        break;
 
991
 
 
992
                                        case ACL_NEVER:
 
993
                                                $information = ($total == ACL_YES) ? $user->lang['TRACE_GROUP_NEVER_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_GROUP_NEVER_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_GROUP_NEVER_TOTAL_NO' . $add_key]);
 
994
                                                $total = ACL_NEVER;
 
995
                                        break;
 
996
                                }
 
997
 
 
998
                                $template->assign_block_vars('trace', array(
 
999
                                        'WHO'                   => $row['group_name'],
 
1000
                                        'INFORMATION'   => $information,
 
1001
 
 
1002
                                        'S_SETTING_NO'          => ($row['auth_setting'] == ACL_NO) ? true : false,
 
1003
                                        'S_SETTING_YES'         => ($row['auth_setting'] == ACL_YES) ? true : false,
 
1004
                                        'S_SETTING_NEVER'       => ($row['auth_setting'] == ACL_NEVER) ? true : false,
 
1005
                                        'S_TOTAL_NO'            => ($total == ACL_NO) ? true : false,
 
1006
                                        'S_TOTAL_YES'           => ($total == ACL_YES) ? true : false,
 
1007
                                        'S_TOTAL_NEVER'         => ($total == ACL_NEVER) ? true : false)
 
1008
                                );
 
1009
                        }
 
1010
                }
 
1011
 
 
1012
                // Get user specific permission... globally or for this forum
 
1013
                $hold_ary = $auth->acl_user_raw_data($user_id, $permission, $forum_id);
 
1014
                $auth_setting = (!sizeof($hold_ary)) ? ACL_NO : $hold_ary[$user_id][$forum_id][$permission];
 
1015
 
 
1016
                switch ($auth_setting)
 
1017
                {
 
1018
                        case ACL_NO:
 
1019
                                $information = ($total == ACL_NO) ? $user->lang['TRACE_USER_NO_TOTAL_NO' . $add_key] : $user->lang['TRACE_USER_KEPT' . $add_key];
 
1020
                                $total = ($total == ACL_NO) ? ACL_NEVER : $total;
 
1021
                        break;
 
1022
 
 
1023
                        case ACL_YES:
 
1024
                                $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_YES_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_USER_YES_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_USER_YES_TOTAL_NO' . $add_key]);
 
1025
                                $total = ($total == ACL_NO) ? ACL_YES : $total;
 
1026
                        break;
 
1027
 
 
1028
                        case ACL_NEVER:
 
1029
                                $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_NEVER_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_USER_NEVER_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_USER_NEVER_TOTAL_NO' . $add_key]);
 
1030
                                $total = ACL_NEVER;
 
1031
                        break;
 
1032
                }
 
1033
 
 
1034
                $template->assign_block_vars('trace', array(
 
1035
                        'WHO'                   => $userdata['username'],
 
1036
                        'INFORMATION'   => $information,
 
1037
 
 
1038
                        'S_SETTING_NO'          => ($auth_setting == ACL_NO) ? true : false,
 
1039
                        'S_SETTING_YES'         => ($auth_setting == ACL_YES) ? true : false,
 
1040
                        'S_SETTING_NEVER'       => ($auth_setting == ACL_NEVER) ? true : false,
 
1041
                        'S_TOTAL_NO'            => false,
 
1042
                        'S_TOTAL_YES'           => ($total == ACL_YES) ? true : false,
 
1043
                        'S_TOTAL_NEVER'         => ($total == ACL_NEVER) ? true : false)
 
1044
                );
 
1045
 
 
1046
                if ($forum_id != 0 && isset($auth->acl_options['global'][$permission]))
 
1047
                {
 
1048
                        if ($user_id != $user->data['user_id'])
 
1049
                        {
 
1050
                                $auth2 = new auth();
 
1051
                                $auth2->acl($userdata);
 
1052
                                $auth_setting = $auth2->acl_get($permission);
 
1053
                        }
 
1054
                        else
 
1055
                        {
 
1056
                                $auth_setting = $auth->acl_get($permission);
 
1057
                        }
 
1058
 
 
1059
                        if ($auth_setting)
 
1060
                        {
 
1061
                                $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_GLOBAL_YES_TOTAL_YES'] : $user->lang['TRACE_USER_GLOBAL_YES_TOTAL_NEVER'];
 
1062
                                $total = ACL_YES;
 
1063
                        }
 
1064
                        else
 
1065
                        {
 
1066
                                $information = $user->lang['TRACE_USER_GLOBAL_NEVER_TOTAL_KEPT'];
 
1067
                        }
 
1068
 
 
1069
                        // If there is no auth information we do not need to worry the user by showing non-relevant data.
 
1070
                        if ($auth_setting)
 
1071
                        {
 
1072
                                $template->assign_block_vars('trace', array(
 
1073
                                        'WHO'                   => sprintf($user->lang['TRACE_GLOBAL_SETTING'], $userdata['username']),
 
1074
                                        'INFORMATION'   => sprintf($information, '<a href="' . $this->u_action . "&amp;u=$user_id&amp;f=0&amp;auth=$permission&amp;back=$forum_id\">", '</a>'),
 
1075
 
 
1076
                                        'S_SETTING_NO'          => false,
 
1077
                                        'S_SETTING_YES'         => $auth_setting,
 
1078
                                        'S_SETTING_NEVER'       => !$auth_setting,
 
1079
                                        'S_TOTAL_NO'            => false,
 
1080
                                        'S_TOTAL_YES'           => ($total == ACL_YES) ? true : false,
 
1081
                                        'S_TOTAL_NEVER'         => ($total == ACL_NEVER) ? true : false)
 
1082
                                );
 
1083
                        }
 
1084
                }
 
1085
 
 
1086
                // Take founder status into account, overwriting the default values
 
1087
                if ($userdata['user_type'] == USER_FOUNDER && strpos($permission, 'a_') === 0)
 
1088
                {
 
1089
                        $template->assign_block_vars('trace', array(
 
1090
                                'WHO'                   => $userdata['username'],
 
1091
                                'INFORMATION'   => $user->lang['TRACE_USER_FOUNDER'],
 
1092
 
 
1093
                                'S_SETTING_NO'          => ($auth_setting == ACL_NO) ? true : false,
 
1094
                                'S_SETTING_YES'         => ($auth_setting == ACL_YES) ? true : false,
 
1095
                                'S_SETTING_NEVER'       => ($auth_setting == ACL_NEVER) ? true : false,
 
1096
                                'S_TOTAL_NO'            => false,
 
1097
                                'S_TOTAL_YES'           => true,
 
1098
                                'S_TOTAL_NEVER'         => false)
 
1099
                        );
 
1100
 
 
1101
                        $total = ACL_YES;
 
1102
                }
 
1103
 
 
1104
                // Total value...
 
1105
                $template->assign_vars(array(
 
1106
                        'S_RESULT_NO'           => ($total == ACL_NO) ? true : false,
 
1107
                        'S_RESULT_YES'          => ($total == ACL_YES) ? true : false,
 
1108
                        'S_RESULT_NEVER'        => ($total == ACL_NEVER) ? true : false,
 
1109
                ));
 
1110
        }
 
1111
 
 
1112
        /**
 
1113
        * Get already assigned users/groups
 
1114
        */
 
1115
        function retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type)
 
1116
        {
 
1117
                global $db, $user;
 
1118
 
 
1119
                $sql_forum_id = ($permission_scope == 'global') ? 'AND a.forum_id = 0' : ((sizeof($forum_id)) ? 'AND ' . $db->sql_in_set('a.forum_id', $forum_id) : 'AND a.forum_id <> 0');
 
1120
                $sql_permission_option = ' AND o.auth_option ' . $db->sql_like_expression($permission_type . $db->any_char);
 
1121
                
 
1122
                $sql = $db->sql_build_query('SELECT_DISTINCT', array(
 
1123
                        'SELECT'        => 'u.username, u.username_clean, u.user_regdate, u.user_id',
 
1124
 
 
1125
                        'FROM'          => array(
 
1126
                                USERS_TABLE                     => 'u',
 
1127
                                ACL_OPTIONS_TABLE       => 'o',
 
1128
                                ACL_USERS_TABLE         => 'a'
 
1129
                        ),
 
1130
 
 
1131
                        'LEFT_JOIN'     => array(
 
1132
                                array(
 
1133
                                        'FROM'  => array(ACL_ROLES_DATA_TABLE => 'r'),
 
1134
                                        'ON'    => 'a.auth_role_id = r.role_id'
 
1135
                                )
 
1136
                        ),
 
1137
 
 
1138
                        'WHERE'         => "(a.auth_option_id = o.auth_option_id OR r.auth_option_id = o.auth_option_id)
 
1139
                                $sql_permission_option
 
1140
                                $sql_forum_id
 
1141
                                AND u.user_id = a.user_id",
 
1142
 
 
1143
                        'ORDER_BY'      => 'u.username_clean, u.user_regdate ASC'
 
1144
                ));
 
1145
                $result = $db->sql_query($sql);
 
1146
 
 
1147
                $s_defined_user_options = '';
 
1148
                $defined_user_ids = array();
 
1149
                while ($row = $db->sql_fetchrow($result))
 
1150
                {
 
1151
                        $s_defined_user_options .= '<option value="' . $row['user_id'] . '">' . $row['username'] . '</option>';
 
1152
                        $defined_user_ids[] = $row['user_id'];
 
1153
                }
 
1154
                $db->sql_freeresult($result);
 
1155
 
 
1156
                $sql = $db->sql_build_query('SELECT_DISTINCT', array(
 
1157
                        'SELECT'        => 'g.group_type, g.group_name, g.group_id',
 
1158
 
 
1159
                        'FROM'          => array(
 
1160
                                GROUPS_TABLE            => 'g',
 
1161
                                ACL_OPTIONS_TABLE       => 'o',
 
1162
                                ACL_GROUPS_TABLE        => 'a'
 
1163
                        ),
 
1164
 
 
1165
                        'LEFT_JOIN'     => array(
 
1166
                                array(
 
1167
                                        'FROM'  => array(ACL_ROLES_DATA_TABLE => 'r'),
 
1168
                                        'ON'    => 'a.auth_role_id = r.role_id'
 
1169
                                )
 
1170
                        ),
 
1171
 
 
1172
                        'WHERE'         => "(a.auth_option_id = o.auth_option_id OR r.auth_option_id = o.auth_option_id)
 
1173
                                $sql_permission_option
 
1174
                                $sql_forum_id
 
1175
                                AND g.group_id = a.group_id",
 
1176
 
 
1177
                        'ORDER_BY'      => 'g.group_type DESC, g.group_name ASC'
 
1178
                ));
 
1179
                $result = $db->sql_query($sql);
 
1180
 
 
1181
                $s_defined_group_options = '';
 
1182
                $defined_group_ids = array();
 
1183
                while ($row = $db->sql_fetchrow($result))
 
1184
                {
 
1185
                        $s_defined_group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>';
 
1186
                        $defined_group_ids[] = $row['group_id'];
 
1187
                }
 
1188
                $db->sql_freeresult($result);
 
1189
 
 
1190
                return array(
 
1191
                        'group_ids'                     => $defined_group_ids,
 
1192
                        'group_ids_options'     => $s_defined_group_options,
 
1193
                        'user_ids'                      => $defined_user_ids,
 
1194
                        'user_ids_options'      => $s_defined_user_options
 
1195
                );
 
1196
        }
 
1197
}
 
1198
 
 
1199
?>
 
 
b'\\ No newline at end of file'