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

« back to all changes in this revision

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

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

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
*
 
4
* @package acp
 
5
* @version $Id: acp_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'