Update code_sniffer build.xml file to be executable on our system
[phpbb.git] / phpBB / modules / acp / acp_groups.php
blob67d2f62ef4773457c2c32ef50bfb4fafbe4f6631
1 <?php
2 /**
4 * @package acp
5 * @version $Id$
6 * @copyright (c) 2005 phpBB Group
7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
9 */
11 /**
12 * @ignore
14 if (!defined('IN_PHPBB'))
16 exit;
19 /**
20 * @package acp
22 class acp_groups
24 var $u_action;
26 function main($id, $mode)
28 global $file_uploads;
30 phpbb::$user->add_lang('acp/groups');
31 $this->tpl_name = 'acp_groups';
32 $this->page_title = 'ACP_GROUPS_MANAGE';
34 $form_key = 'acp_groups';
35 add_form_key($form_key);
37 include(PHPBB_ROOT_PATH . 'includes/functions_user.' . PHP_EXT);
39 // Check and set some common vars
40 $action = (phpbb_request::is_set_post('add')) ? 'add' : ((phpbb_request::is_set_post('addusers')) ? 'addusers' : request_var('action', ''));
41 $group_id = request_var('g', 0);
42 $mark_ary = request_var('mark', array(0));
43 $name_ary = request_var('usernames', '', true);
44 $leader = request_var('leader', 0);
45 $default = request_var('default', 0);
46 $start = request_var('start', 0);
47 $update = phpbb_request::is_set_post('update');
50 // Clear some vars
51 $can_upload = (file_exists(PHPBB_ROOT_PATH . phpbb::$config['avatar_path']) && @is_writable(PHPBB_ROOT_PATH . phpbb::$config['avatar_path']) && $file_uploads) ? true : false;
52 $group_row = array();
54 // Grab basic data for group, if group_id is set and exists
55 if ($group_id)
57 $sql = 'SELECT *
58 FROM ' . GROUPS_TABLE . "
59 WHERE group_id = $group_id";
60 $result = phpbb::$db->sql_query($sql);
61 $group_row = phpbb::$db->sql_fetchrow($result);
62 phpbb::$db->sql_freeresult($result);
64 if (!$group_row)
66 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
69 // Check if the user is allowed to manage this group if set to founder only.
70 if (!phpbb::phpbb::$user->is_founder && $group_row['group_founder_manage'])
72 trigger_error(phpbb::$user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
76 // Which page?
77 switch ($action)
79 case 'approve':
80 case 'demote':
81 case 'promote':
82 if (!$group_id)
84 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
87 // Approve, demote or promote
88 $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
89 $error = group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
91 if (!$error)
93 switch ($action)
95 case 'demote':
96 $message = 'GROUP_MODS_DEMOTED';
97 break;
99 case 'promote':
100 $message = 'GROUP_MODS_PROMOTED';
101 break;
103 case 'approve':
104 $message = 'USERS_APPROVED';
105 break;
108 trigger_error(phpbb::$user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
110 else
112 trigger_error(phpbb::$user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
115 break;
117 case 'default':
118 if (!$group_id)
120 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
123 if (confirm_box(true))
125 $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
127 if (!sizeof($mark_ary))
129 $start = 0;
133 $sql = 'SELECT user_id
134 FROM ' . USER_GROUP_TABLE . "
135 WHERE group_id = $group_id
136 ORDER BY user_id";
137 $result = phpbb::$db->sql_query_limit($sql, 200, $start);
139 $mark_ary = array();
140 if ($row = phpbb::$db->sql_fetchrow($result))
144 $mark_ary[] = $row['user_id'];
146 while ($row = phpbb::$db->sql_fetchrow($result));
148 group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
150 $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
152 else
154 $start = 0;
156 phpbb::$db->sql_freeresult($result);
158 while ($start);
160 else
162 group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
165 trigger_error(phpbb::$user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
167 else
169 confirm_box(false, phpbb::$user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
170 'mark' => $mark_ary,
171 'g' => $group_id,
172 'i' => $id,
173 'mode' => $mode,
174 'action' => $action))
178 break;
180 case 'deleteusers':
181 case 'delete':
182 if (!$group_id)
184 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
186 else if ($action === 'delete' && $group_row['group_type'] == GROUP_SPECIAL)
188 trigger_error(phpbb::$user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
191 if (confirm_box(true))
193 $error = '';
195 switch ($action)
197 case 'delete':
198 if (!phpbb::$acl->acl_get('a_groupdel'))
200 trigger_error(phpbb::$user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
203 $error = group_delete($group_id, $group_row['group_name']);
204 break;
206 case 'deleteusers':
207 $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
208 $error = group_user_del($group_id, $mark_ary, false, $group_name);
209 break;
212 $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
214 if ($error)
216 trigger_error(phpbb::$user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
219 $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
220 trigger_error(phpbb::$user->lang[$message] . adm_back_link($back_link));
222 else
224 confirm_box(false, phpbb::$user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
225 'mark' => $mark_ary,
226 'g' => $group_id,
227 'i' => $id,
228 'mode' => $mode,
229 'action' => $action))
232 break;
234 case 'addusers':
235 if (!$group_id)
237 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
240 if (!$name_ary)
242 trigger_error(phpbb::$user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
245 $name_ary = array_unique(explode("\n", $name_ary));
246 $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
248 // Add user/s to group
249 if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
251 trigger_error(phpbb::$user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
254 $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
255 trigger_error(phpbb::$user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
256 break;
258 case 'edit':
259 case 'add':
261 include(PHPBB_ROOT_PATH . 'includes/functions_display.' . PHP_EXT);
263 $data = $submit_ary = array();
265 if ($action == 'edit' && !$group_id)
267 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
270 if ($action == 'add' && !phpbb::$acl->acl_get('a_groupadd'))
272 trigger_error(phpbb::$user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
275 $error = array();
276 phpbb::$user->add_lang('ucp');
278 $avatar_select = basename(request_var('avatar_select', ''));
279 $category = basename(request_var('category', ''));
281 // Did we submit?
282 if ($update)
284 if (!check_form_key($form_key))
286 trigger_error(phpbb::$user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
289 $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
290 $group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
291 $group_type = request_var('group_type', GROUP_FREE);
293 $allow_desc_bbcode = request_var('desc_parse_bbcode', false);
294 $allow_desc_urls = request_var('desc_parse_urls', false);
295 $allow_desc_smilies = request_var('desc_parse_smilies', false);
297 $data['uploadurl'] = request_var('uploadurl', '');
298 $data['remotelink'] = request_var('remotelink', '');
299 $data['width'] = request_var('width', '');
300 $data['height'] = request_var('height', '');
301 $delete = request_var('delete', '');
303 $submit_ary = array(
304 'colour' => request_var('group_colour', ''),
305 'rank' => request_var('group_rank', 0),
306 'receive_pm' => phpbb_request::is_set('group_receive_pm') ? 1 : 0,
307 'legend' => phpbb_request::is_set('group_legend') ? 1 : 0,
308 'message_limit' => request_var('group_message_limit', 0),
309 'max_recipients' => request_var('group_max_recipients', 0),
310 'founder_manage' => 0,
313 if (phpbb::$user->is_founder)
315 $submit_ary['founder_manage'] = phpbb_request::is_set('group_founder_manage') ? 1 : 0;
318 if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
320 // Avatar stuff
321 $var_ary = array(
322 'uploadurl' => array('string', true, 5, 255),
323 'remotelink' => array('string', true, 5, 255),
324 'width' => array('string', true, 1, 3),
325 'height' => array('string', true, 1, 3),
328 if (!($error = validate_data($data, $var_ary)))
330 $data['user_id'] = "g$group_id";
332 if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
334 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
336 else if ($data['remotelink'])
338 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
342 else if ($avatar_select && phpbb::$config['allow_avatar_local'])
344 // check avatar gallery
345 if (is_dir(PHPBB_ROOT_PATH . phpbb::$config['avatar_gallery_path'] . '/' . $category))
347 $submit_ary['avatar_type'] = AVATAR_GALLERY;
349 list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize(PHPBB_ROOT_PATH . phpbb::$config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
350 $submit_ary['avatar'] = $category . '/' . $avatar_select;
353 else if ($delete)
355 $submit_ary['avatar'] = '';
356 $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
358 else if ($data['width'] && $data['height'])
360 // Only update the dimensions?
361 if (phpbb::$config['avatar_max_width'] || phpbb::$config['avatar_max_height'])
363 if ($data['width'] > phpbb::$config['avatar_max_width'] || $data['height'] > phpbb::$config['avatar_max_height'])
365 $error[] = sprintf(phpbb::$user->lang['AVATAR_WRONG_SIZE'], phpbb::$config['avatar_min_width'], phpbb::$config['avatar_min_height'], phpbb::$config['avatar_max_width'], phpbb::$config['avatar_max_height'], $data['width'], $data['height']);
369 if (!sizeof($error))
371 if (phpbb::$config['avatar_min_width'] || phpbb::$config['avatar_min_height'])
373 if ($data['width'] < phpbb::$config['avatar_min_width'] || $data['height'] < phpbb::$config['avatar_min_height'])
375 $error[] = sprintf(phpbb::$user->lang['AVATAR_WRONG_SIZE'], phpbb::$config['avatar_min_width'], phpbb::$config['avatar_min_height'], phpbb::$config['avatar_max_width'], phpbb::$config['avatar_max_height'], $data['width'], $data['height']);
380 if (!sizeof($error))
382 $submit_ary['avatar_width'] = $data['width'];
383 $submit_ary['avatar_height'] = $data['height'];
387 if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
389 if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
391 avatar_delete('group', $group_row, true);
395 if (!sizeof($error))
397 // Only set the rank, colour, etc. if it's changed or if we're adding a new
398 // group. This prevents existing group members being updated if no changes
399 // were made.
401 $group_attributes = array();
402 $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit', 'max_recipients', 'founder_manage');
403 foreach ($test_variables as $test)
405 if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
407 $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
411 if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
413 $group_perm_from = request_var('group_perm_from', 0);
415 // Copy permissions?
416 // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
417 // 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.
418 // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
419 if ($group_perm_from && $action == 'add' && phpbb::$acl->acl_get('a_authgroups') && phpbb::$acl->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
421 $sql = 'SELECT group_founder_manage
422 FROM ' . GROUPS_TABLE . '
423 WHERE group_id = ' . $group_perm_from;
424 $result = phpbb::$db->sql_query($sql);
425 $check_row = phpbb::$db->sql_fetchrow($result);
426 phpbb::$db->sql_freeresult($result);
428 // Check the group if non-founder
429 if ($check_row && (phpbb::$user->is_founder || $check_row['group_founder_manage'] == 0))
431 // @todo CHANGE - do we support < 4.0.14?
432 // From the mysql documentation:
433 // 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.
434 // Due to this we stay on the safe side if we do the insertion "the manual way"
436 // Copy permisisons from/to the acl groups table (only group_id gets changed)
437 $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
438 FROM ' . ACL_GROUPS_TABLE . '
439 WHERE group_id = ' . $group_perm_from;
440 $result = phpbb::$db->sql_query($sql);
442 $groups_sql_ary = array();
443 while ($row = phpbb::$db->sql_fetchrow($result))
445 $groups_sql_ary[] = array(
446 'group_id' => (int) $group_id,
447 'forum_id' => (int) $row['forum_id'],
448 'auth_option_id' => (int) $row['auth_option_id'],
449 'auth_role_id' => (int) $row['auth_role_id'],
450 'auth_setting' => (int) $row['auth_setting']
453 phpbb::$db->sql_freeresult($result);
455 // Now insert the data
456 phpbb::$db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
458 phpbb::$acl->acl_clear_prefetch();
462 phpbb::$acm->destroy_sql(GROUPS_TABLE);
464 $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
465 trigger_error(phpbb::$user->lang[$message] . adm_back_link($this->u_action));
469 if (sizeof($error))
471 $group_rank = $submit_ary['rank'];
473 $group_desc_data = array(
474 'text' => $group_desc,
475 'allow_bbcode' => $allow_desc_bbcode,
476 'allow_smilies' => $allow_desc_smilies,
477 'allow_urls' => $allow_desc_urls
481 else if (!$group_id)
483 $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
484 $group_desc_data = array(
485 'text' => '',
486 'allow_bbcode' => true,
487 'allow_smilies' => true,
488 'allow_urls' => true
490 $group_rank = 0;
491 $group_type = GROUP_OPEN;
493 else
495 $group_name = $group_row['group_name'];
496 $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
497 $group_type = $group_row['group_type'];
498 $group_rank = $group_row['group_rank'];
501 $sql = 'SELECT *
502 FROM ' . RANKS_TABLE . '
503 WHERE rank_special = 1
504 ORDER BY rank_title';
505 $result = phpbb::$db->sql_query($sql);
507 $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . phpbb::$user->lang['USER_DEFAULT'] . '</option>';
509 while ($row = phpbb::$db->sql_fetchrow($result))
511 $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
512 $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
514 phpbb::$db->sql_freeresult($result);
516 $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
517 $type_open = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
518 $type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
519 $type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
521 $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="" />';
523 $display_gallery = phpbb_request::is_set_post('display_gallery');
525 if (phpbb::$config['allow_avatar_local'] && $display_gallery)
527 avatar_gallery($category, $avatar_select, 4);
530 $back_link = request_var('back_link', '');
532 switch ($back_link)
534 case 'acp_users_groups':
535 $u_back = append_sid(PHPBB_ADMIN_PATH . 'index.' . PHP_EXT, 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
536 break;
538 default:
539 $u_back = $this->u_action;
540 break;
543 phpbb::$template->assign_vars(array(
544 'S_EDIT' => true,
545 'S_ADD_GROUP' => ($action == 'add') ? true : false,
546 'S_GROUP_PERM' => ($action == 'add' && phpbb::$acl->acl_get('a_authgroups') && phpbb::$acl->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
547 'S_INCLUDE_SWATCH' => true,
548 'S_CAN_UPLOAD' => $can_upload,
549 'S_ERROR' => (sizeof($error)) ? true : false,
550 'S_SPECIAL_GROUP' => ($group_type == GROUP_SPECIAL) ? true : false,
551 'S_DISPLAY_GALLERY' => (phpbb::$config['allow_avatar_local'] && !$display_gallery) ? true : false,
552 'S_IN_GALLERY' => (phpbb::$config['allow_avatar_local'] && $display_gallery) ? true : false,
553 'S_USER_FOUNDER' => phpbb::$user->is_founder,
555 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
556 'GROUP_NAME' => ($group_type == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_name] : $group_name,
557 'GROUP_INTERNAL_NAME' => $group_name,
558 'GROUP_DESC' => $group_desc_data['text'],
559 'GROUP_RECEIVE_PM' => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
560 'GROUP_FOUNDER_MANAGE' => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
561 'GROUP_LEGEND' => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
562 'GROUP_MESSAGE_LIMIT' => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
563 'GROUP_MAX_RECIPIENTS' => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
564 'GROUP_COLOUR' => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
566 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'],
567 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'],
568 'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
570 'S_RANK_OPTIONS' => $rank_options,
571 'S_GROUP_OPTIONS' => group_select_options(false, false, ((phpbb::$user->is_founder) ? false : 0)),
572 'AVATAR' => $avatar_img,
573 'AVATAR_IMAGE' => $avatar_img,
574 'AVATAR_MAX_FILESIZE' => phpbb::$config['avatar_filesize'],
575 'AVATAR_WIDTH' => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
576 'AVATAR_HEIGHT' => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
578 'GROUP_TYPE_FREE' => GROUP_FREE,
579 'GROUP_TYPE_OPEN' => GROUP_OPEN,
580 'GROUP_TYPE_CLOSED' => GROUP_CLOSED,
581 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN,
582 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL,
584 'GROUP_FREE' => $type_free,
585 'GROUP_OPEN' => $type_open,
586 'GROUP_CLOSED' => $type_closed,
587 'GROUP_HIDDEN' => $type_hidden,
589 'U_BACK' => $u_back,
590 'U_SWATCH' => append_sid(PHPBB_ADMIN_PATH . 'swatch.' . PHP_EXT, 'form=settings&amp;name=group_colour'),
591 'U_ACTION' => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
592 'L_AVATAR_EXPLAIN' => sprintf(phpbb::$user->lang['AVATAR_EXPLAIN'], phpbb::$config['avatar_max_width'], phpbb::$config['avatar_max_height'], round(phpbb::$config['avatar_filesize'] / 1024)),
595 return;
596 break;
598 case 'list':
600 if (!$group_id)
602 trigger_error(phpbb::$user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
605 $this->page_title = 'GROUP_MEMBERS';
607 // Grab the leaders - always, on every page...
608 $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
609 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
610 WHERE ug.group_id = $group_id
611 AND u.user_id = ug.user_id
612 AND ug.group_leader = 1
613 ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
614 $result = phpbb::$db->sql_query($sql);
616 while ($row = phpbb::$db->sql_fetchrow($result))
618 phpbb::$template->assign_block_vars('leader', array(
619 'U_USER_EDIT' => append_sid(PHPBB_ADMIN_PATH . 'index.' . PHP_EXT, "i=users&amp;action=edit&amp;u={$row['user_id']}"),
621 'USERNAME' => $row['username'],
622 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,
623 'JOINED' => ($row['user_regdate']) ? phpbb::$user->format_date($row['user_regdate']) : ' - ',
624 'USER_POSTS' => $row['user_posts'],
625 'USER_ID' => $row['user_id'],
628 phpbb::$db->sql_freeresult($result);
630 // Total number of group members (non-leaders)
631 $sql = 'SELECT COUNT(user_id) AS total_members
632 FROM ' . USER_GROUP_TABLE . "
633 WHERE group_id = $group_id
634 AND group_leader = 0";
635 $result = phpbb::$db->sql_query($sql);
636 $total_members = (int) phpbb::$db->sql_fetchfield('total_members');
637 phpbb::$db->sql_freeresult($result);
639 $s_action_options = '';
640 $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
642 foreach ($options as $option => $lang)
644 $s_action_options .= '<option value="' . $option . '">' . phpbb::$user->lang['GROUP_' . $lang] . '</option>';
647 phpbb::$template->assign_vars(array(
648 'S_LIST' => true,
649 'S_GROUP_SPECIAL' => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
650 'S_ACTION_OPTIONS' => $s_action_options,
652 'S_ON_PAGE' => on_page($total_members, phpbb::$config['topics_per_page'], $start),
653 'PAGINATION' => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, phpbb::$config['topics_per_page'], $start, true),
654 'GROUP_NAME' => ($group_row['group_type'] == GROUP_SPECIAL) ? phpbb::$user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
656 'U_ACTION' => $this->u_action . "&amp;g=$group_id",
657 'U_BACK' => $this->u_action,
658 'U_FIND_USERNAME' => append_sid('memberlist', 'mode=searchuser&amp;form=list&amp;field=usernames'),
659 'U_DEFAULT_ALL' => "{$this->u_action}&amp;action=default&amp;g=$group_id",
662 // Grab the members
663 $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
664 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
665 WHERE ug.group_id = $group_id
666 AND u.user_id = ug.user_id
667 AND ug.group_leader = 0
668 ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
669 $result = phpbb::$db->sql_query_limit($sql, phpbb::$config['topics_per_page'], $start);
671 $pending = false;
673 while ($row = phpbb::$db->sql_fetchrow($result))
675 if ($row['user_pending'] && !$pending)
677 phpbb::$template->assign_block_vars('member', array(
678 'S_PENDING' => true,
681 $pending = true;
684 phpbb::$template->assign_block_vars('member', array(
685 'U_USER_EDIT' => append_sid(PHPBB_ADMIN_PATH . 'index.' . PHP_EXT, "i=users&amp;action=edit&amp;u={$row['user_id']}"),
687 'USERNAME' => $row['username'],
688 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,
689 'JOINED' => ($row['user_regdate']) ? phpbb::$user->format_date($row['user_regdate']) : ' - ',
690 'USER_POSTS' => $row['user_posts'],
691 'USER_ID' => $row['user_id'],
694 phpbb::$db->sql_freeresult($result);
696 return;
697 break;
700 phpbb::$template->assign_vars(array(
701 'U_ACTION' => $this->u_action,
702 'S_GROUP_ADD' => (phpbb::$acl->acl_get('a_groupadd')) ? true : false,
705 // Get us all the groups
706 $sql = 'SELECT g.group_id, g.group_name, g.group_type
707 FROM ' . GROUPS_TABLE . ' g
708 ORDER BY g.group_type ASC, g.group_name';
709 $result = phpbb::$db->sql_query($sql);
711 $lookup = $cached_group_data = array();
712 while ($row = phpbb::$db->sql_fetchrow($result))
714 $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
716 // used to determine what type a group is
717 $lookup[$row['group_id']] = $type;
719 // used for easy access to the data within a group
720 $cached_group_data[$type][$row['group_id']] = $row;
721 $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
723 phpbb::$db->sql_freeresult($result);
725 // How many people are in which group?
726 $sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
727 FROM ' . USER_GROUP_TABLE . ' ug
728 WHERE ' . phpbb::$db->sql_in_set('ug.group_id', array_keys($lookup)) . '
729 GROUP BY ug.group_id';
730 $result = phpbb::$db->sql_query($sql);
732 while ($row = phpbb::$db->sql_fetchrow($result))
734 $type = $lookup[$row['group_id']];
735 $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
737 phpbb::$db->sql_freeresult($result);
739 // The order is... normal, then special
740 ksort($cached_group_data);
742 foreach ($cached_group_data as $type => $row_ary)
744 if ($type == 'special')
746 phpbb::$template->assign_block_vars('groups', array(
747 'S_SPECIAL' => true,
751 foreach ($row_ary as $group_id => $row)
753 $group_name = (!empty(phpbb::$user->lang['G_' . $row['group_name']]))? phpbb::$user->lang['G_' . $row['group_name']] : $row['group_name'];
755 phpbb::$template->assign_block_vars('groups', array(
756 'U_LIST' => "{$this->u_action}&amp;action=list&amp;g=$group_id",
757 'U_EDIT' => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
758 'U_DELETE' => (phpbb::$acl->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
760 'S_GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
762 'GROUP_NAME' => $group_name,
763 'TOTAL_MEMBERS' => $row['total_members'],