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

« back to all changes in this revision

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

Merge setup-stuff.

phpBB is gone, configuration, setup and jail building are completely redone.

Please read doc/setup/install_proc.txt, or you'll not get far.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package acp
5
 
* @version $Id: acp_groups.php,v 1.63 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_groups
23
 
{
24
 
        var $u_action;
25
 
 
26
 
        function main($id, $mode)
27
 
        {
28
 
                global $config, $db, $user, $auth, $template, $cache;
29
 
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
30
 
 
31
 
                $user->add_lang('acp/groups');
32
 
                $this->tpl_name = 'acp_groups';
33
 
                $this->page_title = 'ACP_GROUPS_MANAGE';
34
 
 
35
 
                $form_key = 'acp_groups';
36
 
                add_form_key($form_key);
37
 
 
38
 
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
39
 
 
40
 
                // Check and set some common vars
41
 
                $action         = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''));
42
 
                $group_id       = request_var('g', 0);
43
 
                $mark_ary       = request_var('mark', array(0));
44
 
                $name_ary       = request_var('usernames', '', true);
45
 
                $leader         = request_var('leader', 0);
46
 
                $default        = request_var('default', 0);
47
 
                $start          = request_var('start', 0);
48
 
                $update         = (isset($_POST['update'])) ? true : false;
49
 
 
50
 
 
51
 
                // Clear some vars
52
 
                $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
53
 
                $group_row = array();
54
 
 
55
 
                // Grab basic data for group, if group_id is set and exists
56
 
                if ($group_id)
57
 
                {
58
 
                        $sql = 'SELECT *
59
 
                                FROM ' . GROUPS_TABLE . "
60
 
                                WHERE group_id = $group_id";
61
 
                        $result = $db->sql_query($sql);
62
 
                        $group_row = $db->sql_fetchrow($result);
63
 
                        $db->sql_freeresult($result);
64
 
 
65
 
                        if (!$group_row)
66
 
                        {
67
 
                                trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
68
 
                        }
69
 
 
70
 
                        // Check if the user is allowed to manage this group if set to founder only.
71
 
                        if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
72
 
                        {
73
 
                                trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
74
 
                        }
75
 
                }
76
 
 
77
 
                // Which page?
78
 
                switch ($action)
79
 
                {
80
 
                        case 'approve':
81
 
                        case 'demote':
82
 
                        case 'promote':
83
 
                                if (!$group_id)
84
 
                                {
85
 
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
86
 
                                }
87
 
 
88
 
                                // Approve, demote or promote
89
 
                                $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
90
 
                                group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
91
 
 
92
 
                                switch ($action)
93
 
                                {
94
 
                                        case 'demote':
95
 
                                                $message = 'GROUP_MODS_DEMOTED';
96
 
                                        break;
97
 
 
98
 
                                        case 'promote':
99
 
                                                $message = 'GROUP_MODS_PROMOTED';
100
 
                                        break;
101
 
 
102
 
                                        case 'approve':
103
 
                                                $message = 'USERS_APPROVED';
104
 
                                        break;
105
 
                                }
106
 
 
107
 
                                trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
108
 
                        break;
109
 
 
110
 
                        case 'default':
111
 
                                if (!$group_id)
112
 
                                {
113
 
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
114
 
                                }
115
 
 
116
 
                                if (confirm_box(true))
117
 
                                {
118
 
                                        $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
119
 
 
120
 
                                        if (!sizeof($mark_ary))
121
 
                                        {
122
 
                                                $start = 0;
123
 
 
124
 
                                                do
125
 
                                                {
126
 
                                                        $sql = 'SELECT user_id
127
 
                                                                FROM ' . USER_GROUP_TABLE . "
128
 
                                                                WHERE group_id = $group_id
129
 
                                                                ORDER BY user_id";
130
 
                                                        $result = $db->sql_query_limit($sql, 200, $start);
131
 
 
132
 
                                                        $mark_ary = array();
133
 
                                                        if ($row = $db->sql_fetchrow($result))
134
 
                                                        {
135
 
                                                                do
136
 
                                                                {
137
 
                                                                        $mark_ary[] = $row['user_id'];
138
 
                                                                }
139
 
                                                                while ($row = $db->sql_fetchrow($result));
140
 
 
141
 
                                                                group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
142
 
 
143
 
                                                                $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
144
 
                                                        }
145
 
                                                        else
146
 
                                                        {
147
 
                                                                $start = 0;
148
 
                                                        }
149
 
                                                        $db->sql_freeresult($result);
150
 
                                                }
151
 
                                                while ($start);
152
 
                                        }
153
 
                                        else
154
 
                                        {
155
 
                                                group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
156
 
                                        }
157
 
 
158
 
                                        trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
159
 
                                }
160
 
                                else
161
 
                                {
162
 
                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
163
 
                                                'mark'          => $mark_ary,
164
 
                                                'g'                     => $group_id,
165
 
                                                'i'                     => $id,
166
 
                                                'mode'          => $mode,
167
 
                                                'action'        => $action))
168
 
                                        );
169
 
                                }
170
 
 
171
 
                        break;
172
 
 
173
 
                        case 'deleteusers':
174
 
                        case 'delete':
175
 
                                if (confirm_box(true))
176
 
                                {
177
 
                                        if (!$group_id)
178
 
                                        {
179
 
                                                trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
180
 
                                        }
181
 
 
182
 
                                        $error = '';
183
 
 
184
 
                                        switch ($action)
185
 
                                        {
186
 
                                                case 'delete':
187
 
                                                        if (!$auth->acl_get('a_groupdel'))
188
 
                                                        {
189
 
                                                                trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
190
 
                                                        }
191
 
 
192
 
                                                        $error = group_delete($group_id, $group_row['group_name']);
193
 
                                                break;
194
 
 
195
 
                                                case 'deleteusers':
196
 
                                                        $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
197
 
                                                        $error = group_user_del($group_id, $mark_ary, false, $group_name);
198
 
                                                break;
199
 
                                        }
200
 
 
201
 
                                        $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
202
 
 
203
 
                                        if ($error)
204
 
                                        {
205
 
                                                trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
206
 
                                        }
207
 
 
208
 
                                        $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
209
 
                                        trigger_error($user->lang[$message] . adm_back_link($back_link));
210
 
                                }
211
 
                                else
212
 
                                {
213
 
                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
214
 
                                                'mark'          => $mark_ary,
215
 
                                                'g'                     => $group_id,
216
 
                                                'i'                     => $id,
217
 
                                                'mode'          => $mode,
218
 
                                                'action'        => $action))
219
 
                                        );
220
 
                                }
221
 
                        break;
222
 
 
223
 
                        case 'addusers':
224
 
                                if (!$group_id)
225
 
                                {
226
 
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
227
 
                                }
228
 
 
229
 
                                if (!$name_ary)
230
 
                                {
231
 
                                        trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
232
 
                                }
233
 
 
234
 
                                $name_ary = array_unique(explode("\n", $name_ary));
235
 
                                $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
236
 
 
237
 
                                // Add user/s to group
238
 
                                if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
239
 
                                {
240
 
                                        trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
241
 
                                }
242
 
 
243
 
                                $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
244
 
                                trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
245
 
                        break;
246
 
 
247
 
                        case 'edit':
248
 
                        case 'add':
249
 
 
250
 
                                include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
251
 
 
252
 
                                $data = $submit_ary = array();
253
 
 
254
 
                                if ($action == 'edit' && !$group_id)
255
 
                                {
256
 
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
257
 
                                }
258
 
 
259
 
                                if ($action == 'add' && !$auth->acl_get('a_groupadd'))
260
 
                                {
261
 
                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
262
 
                                }
263
 
 
264
 
                                $error = array();
265
 
                                $user->add_lang('ucp');
266
 
 
267
 
                                $avatar_select = basename(request_var('avatar_select', ''));
268
 
                                $category = basename(request_var('category', ''));
269
 
 
270
 
                                // Did we submit?
271
 
                                if ($update)
272
 
                                {
273
 
                                        if (!check_form_key($form_key))
274
 
                                        {
275
 
                                                trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
276
 
                                        }
277
 
 
278
 
                                        $group_name     = utf8_normalize_nfc(request_var('group_name', '', true));
279
 
                                        $group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
280
 
                                        $group_type     = request_var('group_type', GROUP_FREE);
281
 
 
282
 
                                        $allow_desc_bbcode      = request_var('desc_parse_bbcode', false);
283
 
                                        $allow_desc_urls        = request_var('desc_parse_urls', false);
284
 
                                        $allow_desc_smilies     = request_var('desc_parse_smilies', false);
285
 
 
286
 
                                        $data['uploadurl']      = request_var('uploadurl', '');
287
 
                                        $data['remotelink']     = request_var('remotelink', '');
288
 
                                        $data['width']          = request_var('width', '');
289
 
                                        $data['height']         = request_var('height', '');
290
 
                                        $delete                         = request_var('delete', '');
291
 
 
292
 
                                        $submit_ary = array(
293
 
                                                'colour'                        => request_var('group_colour', ''),
294
 
                                                'rank'                          => request_var('group_rank', 0),
295
 
                                                'receive_pm'            => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
296
 
                                                'legend'                        => isset($_REQUEST['group_legend']) ? 1 : 0,
297
 
                                                'message_limit'         => request_var('group_message_limit', 0),
298
 
                                                'founder_manage'        => 0,
299
 
                                        );
300
 
 
301
 
                                        if ($user->data['user_type'] == USER_FOUNDER)
302
 
                                        {
303
 
                                                $submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
304
 
                                        }
305
 
 
306
 
                                        if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
307
 
                                        {
308
 
                                                // Avatar stuff
309
 
                                                $var_ary = array(
310
 
                                                        'uploadurl'             => array('string', true, 5, 255),
311
 
                                                        'remotelink'    => array('string', true, 5, 255),
312
 
                                                        'width'                 => array('string', true, 1, 3),
313
 
                                                        'height'                => array('string', true, 1, 3),
314
 
                                                );
315
 
 
316
 
                                                if (!($error = validate_data($data, $var_ary)))
317
 
                                                {
318
 
                                                        $data['user_id'] = "g$group_id";
319
 
 
320
 
                                                        if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
321
 
                                                        {
322
 
                                                                list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
323
 
                                                        }
324
 
                                                        else if ($data['remotelink'])
325
 
                                                        {
326
 
                                                                list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
327
 
                                                        }
328
 
                                                }
329
 
                                        }
330
 
                                        else if ($avatar_select && $config['allow_avatar_local'])
331
 
                                        {
332
 
                                                // check avatar gallery
333
 
                                                if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
334
 
                                                {
335
 
                                                        $submit_ary['avatar_type'] = AVATAR_GALLERY;
336
 
 
337
 
                                                        list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
338
 
                                                        $submit_ary['avatar'] = $category . '/' . $avatar_select;
339
 
                                                }
340
 
                                        }
341
 
                                        else if ($delete)
342
 
                                        {
343
 
                                                $submit_ary['avatar'] = '';
344
 
                                                $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
345
 
                                        }
346
 
                                        else if ($data['width'] && $data['height'])
347
 
                                        {
348
 
                                                // Only update the dimensions?
349
 
                                                if ($config['avatar_max_width'] || $config['avatar_max_height'])
350
 
                                                {
351
 
                                                        if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
352
 
                                                        {
353
 
                                                                $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
354
 
                                                        }
355
 
                                                }
356
 
 
357
 
                                                if (!sizeof($error))
358
 
                                                {
359
 
                                                        if ($config['avatar_min_width'] || $config['avatar_min_height'])
360
 
                                                        {
361
 
                                                                if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
362
 
                                                                {
363
 
                                                                        $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
364
 
                                                                }
365
 
                                                        }
366
 
                                                }
367
 
 
368
 
                                                if (!sizeof($error))
369
 
                                                {
370
 
                                                        $submit_ary['avatar_width'] = $data['width'];
371
 
                                                        $submit_ary['avatar_height'] = $data['height'];
372
 
                                                }
373
 
                                        }
374
 
 
375
 
                                        if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
376
 
                                        {
377
 
                                                if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
378
 
                                                {
379
 
                                                        avatar_delete('group', $group_row, true);
380
 
                                                }
381
 
                                        }
382
 
 
383
 
                                        if (!sizeof($error))
384
 
                                        {
385
 
                                                // Only set the rank, colour, etc. if it's changed or if we're adding a new
386
 
                                                // group. This prevents existing group members being updated if no changes
387
 
                                                // were made.
388
 
 
389
 
                                                $group_attributes = array();
390
 
                                                $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit', 'founder_manage');
391
 
                                                foreach ($test_variables as $test)
392
 
                                                {
393
 
                                                        if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
394
 
                                                        {
395
 
                                                                $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
396
 
                                                        }
397
 
                                                }
398
 
 
399
 
                                                if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
400
 
                                                {
401
 
                                                        $group_perm_from = request_var('group_perm_from', 0);
402
 
 
403
 
                                                        // Copy permissions?
404
 
                                                        // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
405
 
                                                        // We do not limit on one auth category because this can lead to incomplete permissions being tricky to fix for the admin, roles being assigned or added non-default permissions.
406
 
                                                        // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
407
 
                                                        if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
408
 
                                                        {
409
 
                                                                $sql = 'SELECT group_founder_manage
410
 
                                                                        FROM ' . GROUPS_TABLE . '
411
 
                                                                        WHERE group_id = ' . $group_perm_from;
412
 
                                                                $result = $db->sql_query($sql);
413
 
                                                                $check_row = $db->sql_fetchrow($result);
414
 
                                                                $db->sql_freeresult($result);
415
 
 
416
 
                                                                // Check the group if non-founder
417
 
                                                                if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
418
 
                                                                {
419
 
                                                                        // From the mysql documentation:
420
 
                                                                        // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
421
 
                                                                        // Due to this we stay on the safe side if we do the insertion "the manual way"
422
 
 
423
 
                                                                        // Copy permisisons from/to the acl groups table (only group_id gets changed)
424
 
                                                                        $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
425
 
                                                                                FROM ' . ACL_GROUPS_TABLE . '
426
 
                                                                                WHERE group_id = ' . $group_perm_from;
427
 
                                                                        $result = $db->sql_query($sql);
428
 
 
429
 
                                                                        $groups_sql_ary = array();
430
 
                                                                        while ($row = $db->sql_fetchrow($result))
431
 
                                                                        {
432
 
                                                                                $groups_sql_ary[] = array(
433
 
                                                                                        'group_id'                      => (int) $group_id,
434
 
                                                                                        'forum_id'                      => (int) $row['forum_id'],
435
 
                                                                                        'auth_option_id'        => (int) $row['auth_option_id'],
436
 
                                                                                        'auth_role_id'          => (int) $row['auth_role_id'],
437
 
                                                                                        'auth_setting'          => (int) $row['auth_setting']
438
 
                                                                                );
439
 
                                                                        }
440
 
                                                                        $db->sql_freeresult($result);
441
 
 
442
 
                                                                        // Now insert the data
443
 
                                                                        $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
444
 
 
445
 
                                                                        $auth->acl_clear_prefetch();
446
 
                                                                }
447
 
                                                        }
448
 
 
449
 
                                                        $cache->destroy('sql', GROUPS_TABLE);
450
 
 
451
 
                                                        $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
452
 
                                                        trigger_error($user->lang[$message] . adm_back_link($this->u_action));
453
 
                                                }
454
 
                                        }
455
 
 
456
 
                                        if (sizeof($error))
457
 
                                        {
458
 
                                                $group_rank = $submit_ary['rank'];
459
 
 
460
 
                                                $group_desc_data = array(
461
 
                                                        'text'                  => $group_desc,
462
 
                                                        'allow_bbcode'  => $allow_desc_bbcode,
463
 
                                                        'allow_smilies' => $allow_desc_smilies,
464
 
                                                        'allow_urls'    => $allow_desc_urls
465
 
                                                );
466
 
                                        }
467
 
                                }
468
 
                                else if (!$group_id)
469
 
                                {
470
 
                                        $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
471
 
                                        $group_desc_data = array(
472
 
                                                'text'                  => '',
473
 
                                                'allow_bbcode'  => true,
474
 
                                                'allow_smilies' => true,
475
 
                                                'allow_urls'    => true
476
 
                                        );
477
 
                                        $group_rank = 0;
478
 
                                        $group_type = GROUP_OPEN;
479
 
                                }
480
 
                                else
481
 
                                {
482
 
                                        $group_name = $group_row['group_name'];
483
 
                                        $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
484
 
                                        $group_type = $group_row['group_type'];
485
 
                                        $group_rank = $group_row['group_rank'];
486
 
                                }
487
 
 
488
 
                                $sql = 'SELECT *
489
 
                                        FROM ' . RANKS_TABLE . '
490
 
                                        WHERE rank_special = 1
491
 
                                        ORDER BY rank_title';
492
 
                                $result = $db->sql_query($sql);
493
 
 
494
 
                                $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
495
 
 
496
 
                                while ($row = $db->sql_fetchrow($result))
497
 
                                {
498
 
                                        $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
499
 
                                        $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
500
 
                                }
501
 
                                $db->sql_freeresult($result);
502
 
 
503
 
                                $type_free              = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
504
 
                                $type_open              = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
505
 
                                $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
506
 
                                $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
507
 
 
508
 
                                $avatar_img = (!empty($group_row['group_avatar'])) ? get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR') : '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
509
 
 
510
 
                                $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
511
 
 
512
 
                                if ($config['allow_avatar_local'] && $display_gallery)
513
 
                                {
514
 
                                        avatar_gallery($category, $avatar_select, 4);
515
 
                                }
516
 
 
517
 
                                $back_link = request_var('back_link', '');
518
 
 
519
 
                                switch ($back_link)
520
 
                                {
521
 
                                        case 'acp_users_groups':
522
 
                                                $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
523
 
                                        break;
524
 
 
525
 
                                        default:
526
 
                                                $u_back = $this->u_action;
527
 
                                        break;
528
 
                                }
529
 
 
530
 
                                $template->assign_vars(array(
531
 
                                        'S_EDIT'                        => true,
532
 
                                        'S_ADD_GROUP'           => ($action == 'add') ? true : false,
533
 
                                        'S_GROUP_PERM'          => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
534
 
                                        'S_INCLUDE_SWATCH'      => true,
535
 
                                        'S_CAN_UPLOAD'          => $can_upload,
536
 
                                        'S_ERROR'                       => (sizeof($error)) ? true : false,
537
 
                                        'S_SPECIAL_GROUP'       => ($group_type == GROUP_SPECIAL) ? true : false,
538
 
                                        'S_DISPLAY_GALLERY'     => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
539
 
                                        'S_IN_GALLERY'          => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
540
 
                                        'S_USER_FOUNDER'        => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
541
 
 
542
 
                                        'ERROR_MSG'                             => (sizeof($error)) ? implode('<br />', $error) : '',
543
 
                                        'GROUP_NAME'                    => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
544
 
                                        'GROUP_INTERNAL_NAME'   => $group_name,
545
 
                                        'GROUP_DESC'                    => $group_desc_data['text'],
546
 
                                        'GROUP_RECEIVE_PM'              => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
547
 
                                        'GROUP_FOUNDER_MANAGE'  => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
548
 
                                        'GROUP_LEGEND'                  => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
549
 
                                        'GROUP_MESSAGE_LIMIT'   => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
550
 
                                        'GROUP_COLOUR'                  => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
551
 
 
552
 
 
553
 
                                        'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'],
554
 
                                        'S_DESC_URLS_CHECKED'   => $group_desc_data['allow_urls'],
555
 
                                        'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
556
 
 
557
 
                                        'S_RANK_OPTIONS'                => $rank_options,
558
 
                                        'S_GROUP_OPTIONS'               => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
559
 
                                        'AVATAR'                                => $avatar_img,
560
 
                                        'AVATAR_IMAGE'                  => $avatar_img,
561
 
                                        'AVATAR_MAX_FILESIZE'   => $config['avatar_filesize'],
562
 
                                        'AVATAR_WIDTH'                  => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
563
 
                                        'AVATAR_HEIGHT'                 => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
564
 
 
565
 
                                        'GROUP_TYPE_FREE'               => GROUP_FREE,
566
 
                                        'GROUP_TYPE_OPEN'               => GROUP_OPEN,
567
 
                                        'GROUP_TYPE_CLOSED'             => GROUP_CLOSED,
568
 
                                        'GROUP_TYPE_HIDDEN'             => GROUP_HIDDEN,
569
 
                                        'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
570
 
 
571
 
                                        'GROUP_FREE'            => $type_free,
572
 
                                        'GROUP_OPEN'            => $type_open,
573
 
                                        'GROUP_CLOSED'          => $type_closed,
574
 
                                        'GROUP_HIDDEN'          => $type_hidden,
575
 
 
576
 
                                        'U_BACK'                        => $u_back,
577
 
                                        'U_SWATCH'                      => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
578
 
                                        'U_ACTION'                      => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
579
 
                                        'L_AVATAR_EXPLAIN'      => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
580
 
                                        )
581
 
                                );
582
 
 
583
 
                                return;
584
 
                        break;
585
 
 
586
 
                        case 'list':
587
 
 
588
 
                                if (!$group_id)
589
 
                                {
590
 
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
591
 
                                }
592
 
 
593
 
                                $this->page_title = 'GROUP_MEMBERS';
594
 
 
595
 
                                // Grab the leaders - always, on every page...
596
 
                                $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
597
 
                                        FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
598
 
                                        WHERE ug.group_id = $group_id
599
 
                                                AND u.user_id = ug.user_id
600
 
                                                AND ug.group_leader = 1
601
 
                                        ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
602
 
                                $result = $db->sql_query($sql);
603
 
 
604
 
                                while ($row = $db->sql_fetchrow($result))
605
 
                                {
606
 
                                        $template->assign_block_vars('leader', array(
607
 
                                                'U_USER_EDIT'           => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
608
 
 
609
 
                                                'USERNAME'                      => $row['username'],
610
 
                                                'S_GROUP_DEFAULT'       => ($row['group_id'] == $group_id) ? true : false,
611
 
                                                'JOINED'                        => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
612
 
                                                'USER_POSTS'            => $row['user_posts'],
613
 
                                                'USER_ID'                       => $row['user_id'])
614
 
                                        );
615
 
                                }
616
 
                                $db->sql_freeresult($result);
617
 
 
618
 
                                // Total number of group members (non-leaders)
619
 
                                $sql = 'SELECT COUNT(user_id) AS total_members
620
 
                                        FROM ' . USER_GROUP_TABLE . "
621
 
                                        WHERE group_id = $group_id
622
 
                                                AND group_leader = 0";
623
 
                                $result = $db->sql_query($sql);
624
 
                                $total_members = (int) $db->sql_fetchfield('total_members');
625
 
                                $db->sql_freeresult($result);
626
 
 
627
 
                                $s_action_options = '';
628
 
                                $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
629
 
 
630
 
                                foreach ($options as $option => $lang)
631
 
                                {
632
 
                                        $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
633
 
                                }
634
 
 
635
 
                                $template->assign_vars(array(
636
 
                                        'S_LIST'                        => true,
637
 
                                        'S_GROUP_SPECIAL'       => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
638
 
                                        'S_ACTION_OPTIONS'      => $s_action_options,
639
 
 
640
 
                                        'S_ON_PAGE'             => on_page($total_members, $config['topics_per_page'], $start),
641
 
                                        'PAGINATION'    => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
642
 
                                        'GROUP_NAME'    => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
643
 
 
644
 
                                        'U_ACTION'                      => $this->u_action . "&amp;g=$group_id",
645
 
                                        'U_BACK'                        => $this->u_action,
646
 
                                        'U_FIND_USERNAME'       => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
647
 
                                        'U_DEFAULT_ALL'         => "{$this->u_action}&amp;action=default&amp;g=$group_id",
648
 
                                ));
649
 
 
650
 
                                // Grab the members
651
 
                                $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
652
 
                                        FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
653
 
                                        WHERE ug.group_id = $group_id
654
 
                                                AND u.user_id = ug.user_id
655
 
                                                AND ug.group_leader = 0
656
 
                                        ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
657
 
                                $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
658
 
 
659
 
                                $pending = false;
660
 
 
661
 
                                while ($row = $db->sql_fetchrow($result))
662
 
                                {
663
 
                                        if ($row['user_pending'] && !$pending)
664
 
                                        {
665
 
                                                $template->assign_block_vars('member', array(
666
 
                                                        'S_PENDING'             => true)
667
 
                                                );
668
 
 
669
 
                                                $pending = true;
670
 
                                        }
671
 
 
672
 
                                        $template->assign_block_vars('member', array(
673
 
                                                'U_USER_EDIT'           => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
674
 
 
675
 
                                                'USERNAME'                      => $row['username'],
676
 
                                                'S_GROUP_DEFAULT'       => ($row['group_id'] == $group_id) ? true : false,
677
 
                                                'JOINED'                        => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
678
 
                                                'USER_POSTS'            => $row['user_posts'],
679
 
                                                'USER_ID'                       => $row['user_id'])
680
 
                                        );
681
 
                                }
682
 
                                $db->sql_freeresult($result);
683
 
 
684
 
                                return;
685
 
                        break;
686
 
                }
687
 
 
688
 
                $template->assign_vars(array(
689
 
                        'U_ACTION'              => $this->u_action,
690
 
                        'S_GROUP_ADD'   => ($auth->acl_get('a_groupadd')) ? true : false)
691
 
                );
692
 
 
693
 
                // Get us all the groups
694
 
                $sql = 'SELECT g.group_id, g.group_name, g.group_type
695
 
                        FROM ' . GROUPS_TABLE . ' g
696
 
                        ORDER BY g.group_type ASC, g.group_name';
697
 
                $result = $db->sql_query($sql);
698
 
 
699
 
                $lookup = $cached_group_data = array();
700
 
                while ($row = $db->sql_fetchrow($result))
701
 
                {
702
 
                        $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
703
 
 
704
 
                        // used to determine what type a group is
705
 
                        $lookup[$row['group_id']] = $type;
706
 
 
707
 
                        // used for easy access to the data within a group
708
 
                        $cached_group_data[$type][$row['group_id']] = $row;
709
 
                        $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
710
 
                }
711
 
                $db->sql_freeresult($result);
712
 
 
713
 
                // How many people are in which group?
714
 
                $sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
715
 
                        FROM ' . USER_GROUP_TABLE . ' ug
716
 
                        WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
717
 
                        GROUP BY ug.group_id';
718
 
                $result = $db->sql_query($sql);
719
 
 
720
 
                while ($row = $db->sql_fetchrow($result))
721
 
                {
722
 
                        $type = $lookup[$row['group_id']];
723
 
                        $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
724
 
                }
725
 
                $db->sql_freeresult($result);
726
 
 
727
 
                // The order is... normal, then special
728
 
                ksort($cached_group_data);
729
 
 
730
 
                foreach ($cached_group_data as $type => $row_ary)
731
 
                {
732
 
                        if ($type == 'special')
733
 
                        {
734
 
                                $template->assign_block_vars('groups', array(
735
 
                                        'S_SPECIAL'                     => true)
736
 
                                );
737
 
                        }
738
 
 
739
 
                        foreach ($row_ary as $group_id => $row)
740
 
                        {
741
 
                                $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
742
 
                                
743
 
                                $template->assign_block_vars('groups', array(
744
 
                                        'U_LIST'                => "{$this->u_action}&amp;action=list&amp;g=$group_id",
745
 
                                        'U_EDIT'                => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
746
 
                                        'U_DELETE'              => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
747
 
 
748
 
                                        'S_GROUP_SPECIAL'       => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
749
 
                                        
750
 
                                        'GROUP_NAME'    => $group_name,
751
 
                                        'TOTAL_MEMBERS' => $row['total_members'],
752
 
                                        )
753
 
                                );
754
 
                        }
755
 
                }
756
 
        }
757
 
}
758
 
 
759
 
?>
 
 
b'\\ No newline at end of file'