Statistics
| Revision:

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

History | View | Annotate | Download (27.8 KB)

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