Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
ucp_groups.php
0001 <?php
0002 /**
0003 *
0004 * This file is part of the phpBB Forum Software package.
0005 *
0006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
0007 * @license GNU General Public License, version 2 (GPL-2.0)
0008 *
0009 * For full copyright and license information, please see
0010 * the docs/CREDITS.txt file.
0011 *
0012 */
0013
0014 /**
0015 * @ignore
0016 */
0017 if (!defined('IN_PHPBB'))
0018 {
0019 exit;
0020 }
0021
0022 /**
0023 * ucp_groups
0024 */
0025 class ucp_groups
0026 {
0027 var $u_action;
0028
0029 function main($id, $mode)
0030 {
0031 global $config, $phpbb_root_path, $phpEx, $phpbb_admin_path;
0032 global $db, $user, $auth, $cache, $template;
0033 global $request, $phpbb_container, $phpbb_log;
0034
0035 $user->add_lang('groups');
0036
0037 $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
0038
0039 $mark_ary = $request->variable('mark', array(0));
0040 $submit = $request->variable('submit', false, false, \phpbb\request\request_interface::POST);
0041
0042 /** @var \phpbb\group\helper $group_helper */
0043 $group_helper = $phpbb_container->get('group_helper');
0044
0045 switch ($mode)
0046 {
0047 case 'membership':
0048
0049 $this->page_title = 'UCP_USERGROUPS_MEMBER';
0050
0051 if ($submit || isset($_POST['change_default']))
0052 {
0053 $action = (isset($_POST['change_default'])) ? 'change_default' : $request->variable('action', '');
0054 $group_id = ($action == 'change_default') ? $request->variable('default', 0) : $request->variable('selected', 0);
0055
0056 if (!$group_id)
0057 {
0058 trigger_error('NO_GROUP_SELECTED');
0059 }
0060
0061 $sql = 'SELECT group_id, group_name, group_type
0062 FROM ' . GROUPS_TABLE . "
0063 WHERE group_id IN ($group_id, {$user->data['group_id']})";
0064 $result = $db->sql_query($sql);
0065
0066 $group_row = array();
0067 while ($row = $db->sql_fetchrow($result))
0068 {
0069 $row['group_name'] = $group_helper->get_name($row['group_name']);
0070 $group_row[$row['group_id']] = $row;
0071 }
0072 $db->sql_freeresult($result);
0073
0074 if (!sizeof($group_row))
0075 {
0076 trigger_error('GROUP_NOT_EXIST');
0077 }
0078
0079 switch ($action)
0080 {
0081 case 'change_default':
0082 // User already having this group set as default?
0083 if ($group_id == $user->data['group_id'])
0084 {
0085 trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
0086 }
0087
0088 if (!$auth->acl_get('u_chggrp'))
0089 {
0090 send_status_line(403, 'Forbidden');
0091 trigger_error($user->lang['NOT_AUTHORISED'] . $return_page);
0092 }
0093
0094 // User needs to be member of the group in order to make it default
0095 if (!group_memberships($group_id, $user->data['user_id'], true))
0096 {
0097 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0098 }
0099
0100 if (confirm_box(true))
0101 {
0102 group_user_attributes('default', $group_id, $user->data['user_id']);
0103
0104 $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_CHANGE', false, array(
0105 'reportee_id' => $user->data['user_id'],
0106 sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$user->data['group_id']]['group_name'], $group_row[$group_id]['group_name'])
0107 ));
0108
0109 meta_refresh(3, $this->u_action);
0110 trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
0111 }
0112 else
0113 {
0114 $s_hidden_fields = array(
0115 'default' => $group_id,
0116 'change_default'=> true
0117 );
0118
0119 confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
0120 }
0121
0122 break;
0123
0124 case 'resign':
0125
0126 // User tries to resign from default group but is not allowed to change it?
0127 if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp'))
0128 {
0129 trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
0130 }
0131
0132 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0133 {
0134 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0135 }
0136 list(, $row) = each($row);
0137
0138 $sql = 'SELECT group_type
0139 FROM ' . GROUPS_TABLE . '
0140 WHERE group_id = ' . $group_id;
0141 $result = $db->sql_query($sql);
0142 $group_type = (int) $db->sql_fetchfield('group_type');
0143 $db->sql_freeresult($result);
0144
0145 if ($group_type != GROUP_OPEN && $group_type != GROUP_FREE)
0146 {
0147 trigger_error($user->lang['CANNOT_RESIGN_GROUP'] . $return_page);
0148 }
0149
0150 if (confirm_box(true))
0151 {
0152 group_user_del($group_id, $user->data['user_id']);
0153
0154 $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_RESIGN', false, array(
0155 'reportee_id' => $user->data['user_id'],
0156 $group_row[$group_id]['group_name']
0157 ));
0158
0159 meta_refresh(3, $this->u_action);
0160 trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
0161 }
0162 else
0163 {
0164 $s_hidden_fields = array(
0165 'selected' => $group_id,
0166 'action' => 'resign',
0167 'submit' => true
0168 );
0169
0170 confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
0171 }
0172
0173 break;
0174
0175 case 'join':
0176
0177 $sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
0178 FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
0179 WHERE ug.user_id = u.user_id
0180 AND ug.group_id = ' . $group_id . '
0181 AND ug.user_id = ' . $user->data['user_id'];
0182 $result = $db->sql_query($sql);
0183 $row = $db->sql_fetchrow($result);
0184 $db->sql_freeresult($result);
0185
0186 if ($row)
0187 {
0188 if ($row['user_pending'])
0189 {
0190 trigger_error($user->lang['ALREADY_IN_GROUP_PENDING'] . $return_page);
0191 }
0192
0193 trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
0194 }
0195
0196 // Check permission to join (open group or request)
0197 if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE)
0198 {
0199 trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
0200 }
0201
0202 if (confirm_box(true))
0203 {
0204 if ($group_row[$group_id]['group_type'] == GROUP_FREE)
0205 {
0206 group_user_add($group_id, $user->data['user_id']);
0207 }
0208 else
0209 {
0210 group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
0211 }
0212
0213 $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), false, array(
0214 'reportee_id' => $user->data['user_id'],
0215 $group_row[$group_id]['group_name']
0216 ));
0217
0218 meta_refresh(3, $this->u_action);
0219 trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
0220 }
0221 else
0222 {
0223 $s_hidden_fields = array(
0224 'selected' => $group_id,
0225 'action' => 'join',
0226 'submit' => true
0227 );
0228
0229 confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
0230 }
0231
0232 break;
0233
0234 case 'demote':
0235
0236 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0237 {
0238 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0239 }
0240 list(, $row) = each($row);
0241
0242 if (!$row['group_leader'])
0243 {
0244 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0245 }
0246
0247 if (confirm_box(true))
0248 {
0249 group_user_attributes('demote', $group_id, $user->data['user_id']);
0250
0251 $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_DEMOTE', false, array(
0252 'reportee_id' => $user->data['user_id'],
0253 $group_row[$group_id]['group_name']
0254 ));
0255
0256 meta_refresh(3, $this->u_action);
0257 trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
0258 }
0259 else
0260 {
0261 $s_hidden_fields = array(
0262 'selected' => $group_id,
0263 'action' => 'demote',
0264 'submit' => true
0265 );
0266
0267 confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
0268 }
0269
0270 break;
0271 }
0272 }
0273
0274 $sql = 'SELECT g.*, ug.group_leader, ug.user_pending
0275 FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
0276 WHERE ug.user_id = ' . $user->data['user_id'] . '
0277 AND g.group_id = ug.group_id
0278 ORDER BY g.group_type DESC, g.group_name';
0279 $result = $db->sql_query($sql);
0280
0281 $group_id_ary = array();
0282 $leader_count = $member_count = $pending_count = 0;
0283 while ($row = $db->sql_fetchrow($result))
0284 {
0285 $block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member');
0286
0287 switch ($row['group_type'])
0288 {
0289 case GROUP_OPEN:
0290 $group_status = 'OPEN';
0291 break;
0292
0293 case GROUP_CLOSED:
0294 $group_status = 'CLOSED';
0295 break;
0296
0297 case GROUP_HIDDEN:
0298 $group_status = 'HIDDEN';
0299 break;
0300
0301 case GROUP_SPECIAL:
0302 $group_status = 'SPECIAL';
0303 break;
0304
0305 case GROUP_FREE:
0306 $group_status = 'FREE';
0307 break;
0308 }
0309
0310 $template->assign_block_vars($block, array(
0311 'GROUP_ID' => $row['group_id'],
0312 'GROUP_NAME' => $group_helper->get_name($row['group_name']),
0313 'GROUP_DESC' => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
0314 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
0315 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status],
0316 'GROUP_COLOUR' => $row['group_colour'],
0317
0318 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']),
0319
0320 'S_GROUP_DEFAULT' => ($row['group_id'] == $user->data['group_id']) ? true : false,
0321 'S_ROW_COUNT' => ${$block . '_count'}++)
0322 );
0323
0324 $group_id_ary[] = (int) $row['group_id'];
0325 }
0326 $db->sql_freeresult($result);
0327
0328 // Hide hidden groups unless user is an admin with group privileges
0329 $sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
0330
0331 $sql = 'SELECT group_id, group_name, group_colour, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type, group_founder_manage
0332 FROM ' . GROUPS_TABLE . '
0333 WHERE ' . ((sizeof($group_id_ary)) ? $db->sql_in_set('group_id', $group_id_ary, true) . ' AND ' : '') . "
0334 group_type $sql_and
0335 ORDER BY group_type DESC, group_name";
0336 $result = $db->sql_query($sql);
0337
0338 $nonmember_count = 0;
0339 while ($row = $db->sql_fetchrow($result))
0340 {
0341 switch ($row['group_type'])
0342 {
0343 case GROUP_OPEN:
0344 $group_status = 'OPEN';
0345 break;
0346
0347 case GROUP_CLOSED:
0348 $group_status = 'CLOSED';
0349 break;
0350
0351 case GROUP_HIDDEN:
0352 $group_status = 'HIDDEN';
0353 break;
0354
0355 case GROUP_SPECIAL:
0356 $group_status = 'SPECIAL';
0357 break;
0358
0359 case GROUP_FREE:
0360 $group_status = 'FREE';
0361 break;
0362 }
0363
0364 $template->assign_block_vars('nonmember', array(
0365 'GROUP_ID' => $row['group_id'],
0366 'GROUP_NAME' => $group_helper->get_name($row['group_name']),
0367 'GROUP_DESC' => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
0368 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
0369 'GROUP_CLOSED' => ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true,
0370 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status],
0371 'S_CAN_JOIN' => ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false,
0372 'GROUP_COLOUR' => $row['group_colour'],
0373
0374 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']),
0375
0376 'S_ROW_COUNT' => $nonmember_count++)
0377 );
0378 }
0379 $db->sql_freeresult($result);
0380
0381 $template->assign_vars(array(
0382 'S_CHANGE_DEFAULT' => ($auth->acl_get('u_chggrp')) ? true : false,
0383 'S_LEADER_COUNT' => $leader_count,
0384 'S_MEMBER_COUNT' => $member_count,
0385 'S_PENDING_COUNT' => $pending_count,
0386 'S_NONMEMBER_COUNT' => $nonmember_count,
0387
0388 'S_UCP_ACTION' => $this->u_action)
0389 );
0390
0391 break;
0392
0393 case 'manage':
0394
0395 $this->page_title = 'UCP_USERGROUPS_MANAGE';
0396 $action = (isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', '');
0397 $group_id = $request->variable('g', 0);
0398
0399 include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
0400
0401 add_form_key('ucp_groups');
0402
0403 if ($group_id)
0404 {
0405 $sql = 'SELECT g.*, t.teampage_position AS group_teampage
0406 FROM ' . GROUPS_TABLE . ' g
0407 LEFT JOIN ' . TEAMPAGE_TABLE . ' t
0408 ON (t.group_id = g.group_id)
0409 WHERE g.group_id = ' . $group_id;
0410 $result = $db->sql_query($sql);
0411 $group_row = $db->sql_fetchrow($result);
0412 $db->sql_freeresult($result);
0413
0414 if (!$group_row)
0415 {
0416 trigger_error($user->lang['NO_GROUP'] . $return_page);
0417 }
0418
0419 // Check if the user is allowed to manage this group if set to founder only.
0420 if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
0421 {
0422 trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . $return_page, E_USER_WARNING);
0423 }
0424
0425 $group_name = $group_row['group_name'];
0426 $group_type = $group_row['group_type'];
0427
0428 $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
0429
0430 $template->assign_vars(array(
0431 'GROUP_NAME' => $group_helper->get_name($group_name),
0432 'GROUP_INTERNAL_NAME' => $group_name,
0433 'GROUP_COLOUR' => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
0434 'GROUP_DESC_DISP' => generate_text_for_display($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_bitfield'], $group_row['group_desc_options']),
0435 'GROUP_TYPE' => $group_row['group_type'],
0436
0437 'AVATAR' => (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),
0438 'AVATAR_IMAGE' => (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),
0439 'AVATAR_WIDTH' => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
0440 'AVATAR_HEIGHT' => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
0441 ));
0442 }
0443
0444 switch ($action)
0445 {
0446 case 'edit':
0447
0448 if (!$group_id)
0449 {
0450 trigger_error($user->lang['NO_GROUP'] . $return_page);
0451 }
0452
0453 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0454 {
0455 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0456 }
0457 list(, $row) = each($row);
0458
0459 if (!$row['group_leader'])
0460 {
0461 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0462 }
0463
0464 $user->add_lang(array('acp/groups', 'acp/common'));
0465
0466 $update = (isset($_POST['update'])) ? true : false;
0467
0468 $error = array();
0469
0470 // Setup avatar data for later
0471 $avatars_enabled = false;
0472 $avatar_drivers = null;
0473 $avatar_data = null;
0474 $avatar_error = array();
0475
0476 /** @var \phpbb\avatar\manager $phpbb_avatar_manager */
0477 $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
0478
0479 if ($config['allow_avatar'])
0480 {
0481 $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
0482
0483 // This is normalised data, without the group_ prefix
0484 $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
0485 }
0486
0487 // Handle deletion of avatars
0488 if ($request->is_set_post('avatar_delete'))
0489 {
0490 if (confirm_box(true))
0491 {
0492 $phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_');
0493 $cache->destroy('sql', GROUPS_TABLE);
0494
0495 $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
0496 trigger_error($user->lang[$message] . $return_page);
0497 }
0498 else
0499 {
0500 confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array(
0501 'avatar_delete' => true,
0502 'i' => $id,
0503 'mode' => $mode,
0504 'g' => $group_id,
0505 'action' => $action))
0506 );
0507 }
0508 }
0509
0510 // Did we submit?
0511 if ($update)
0512 {
0513 $group_name = $request->variable('group_name', '', true);
0514 $group_desc = $request->variable('group_desc', '', true);
0515 $group_type = $request->variable('group_type', GROUP_FREE);
0516
0517 $allow_desc_bbcode = $request->variable('desc_parse_bbcode', false);
0518 $allow_desc_urls = $request->variable('desc_parse_urls', false);
0519 $allow_desc_smilies = $request->variable('desc_parse_smilies', false);
0520
0521 $submit_ary = array(
0522 'colour' => $request->variable('group_colour', ''),
0523 'rank' => $request->variable('group_rank', 0),
0524 'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
0525 'message_limit' => $request->variable('group_message_limit', 0),
0526 'max_recipients'=> $request->variable('group_max_recipients', 0),
0527 'legend' => $group_row['group_legend'],
0528 'teampage' => $group_row['group_teampage'],
0529 );
0530
0531 if ($config['allow_avatar'])
0532 {
0533 // Handle avatar
0534 $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
0535
0536 if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
0537 {
0538 $driver = $phpbb_avatar_manager->get_driver($driver_name);
0539 $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
0540
0541 if ($result && empty($avatar_error))
0542 {
0543 $result['avatar_type'] = $driver_name;
0544
0545 $submit_ary = array_merge($submit_ary, $result);
0546 }
0547 }
0548
0549 // Merge any avatars errors into the primary error array
0550 $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
0551 }
0552
0553 if (!check_form_key('ucp_groups'))
0554 {
0555 $error[] = $user->lang['FORM_INVALID'];
0556 }
0557
0558 // Validate submitted colour value
0559 if ($colour_error = validate_data($submit_ary, array('colour' => array('hex_colour', true))))
0560 {
0561 // Replace "error" string with its real, localised form
0562 $error = array_merge($error, $colour_error);
0563 }
0564
0565 if (!sizeof($error))
0566 {
0567 // Only set the rank, colour, etc. if it's changed or if we're adding a new
0568 // group. This prevents existing group members being updated if no changes
0569 // were made.
0570 // However there are some attributes that need to be set everytime,
0571 // otherwise the group gets removed from the feature.
0572 $set_attributes = array('legend', 'teampage');
0573
0574 $group_attributes = array();
0575 $test_variables = array(
0576 'rank' => 'int',
0577 'colour' => 'string',
0578 'avatar' => 'string',
0579 'avatar_type' => 'string',
0580 'avatar_width' => 'int',
0581 'avatar_height' => 'int',
0582 'receive_pm' => 'int',
0583 'legend' => 'int',
0584 'teampage' => 'int',
0585 'message_limit' => 'int',
0586 'max_recipients'=> 'int',
0587 );
0588
0589 foreach ($test_variables as $test => $type)
0590 {
0591 if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes)))
0592 {
0593 settype($submit_ary[$test], $type);
0594 $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
0595 }
0596 }
0597
0598 if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
0599 {
0600 $cache->destroy('sql', GROUPS_TABLE);
0601 $cache->destroy('sql', TEAMPAGE_TABLE);
0602
0603 $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
0604 trigger_error($user->lang[$message] . $return_page);
0605 }
0606 }
0607
0608 if (sizeof($error))
0609 {
0610 $error = array_map(array(&$user, 'lang'), $error);
0611 $group_rank = $submit_ary['rank'];
0612
0613 $group_desc_data = array(
0614 'text' => $group_desc,
0615 'allow_bbcode' => $allow_desc_bbcode,
0616 'allow_smilies' => $allow_desc_smilies,
0617 'allow_urls' => $allow_desc_urls
0618 );
0619 }
0620 }
0621 else if (!$group_id)
0622 {
0623 $group_desc_data = array(
0624 'text' => '',
0625 'allow_bbcode' => true,
0626 'allow_smilies' => true,
0627 'allow_urls' => true
0628 );
0629 $group_rank = 0;
0630 $group_type = GROUP_OPEN;
0631 }
0632 else
0633 {
0634 $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
0635 $group_rank = $group_row['group_rank'];
0636 }
0637
0638 $sql = 'SELECT *
0639 FROM ' . RANKS_TABLE . '
0640 WHERE rank_special = 1
0641 ORDER BY rank_title';
0642 $result = $db->sql_query($sql);
0643
0644 $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
0645 while ($row = $db->sql_fetchrow($result))
0646 {
0647 $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
0648 $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
0649 }
0650 $db->sql_freeresult($result);
0651
0652 $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
0653 $type_open = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
0654 $type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
0655 $type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
0656
0657 // Load up stuff for avatars
0658 if ($config['allow_avatar'])
0659 {
0660 $avatars_enabled = false;
0661 $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
0662
0663 // Assign min and max values before generating avatar driver html
0664 $template->assign_vars(array(
0665 'AVATAR_MIN_WIDTH' => $config['avatar_min_width'],
0666 'AVATAR_MAX_WIDTH' => $config['avatar_max_width'],
0667 'AVATAR_MIN_HEIGHT' => $config['avatar_min_height'],
0668 'AVATAR_MAX_HEIGHT' => $config['avatar_max_height'],
0669 ));
0670
0671 foreach ($avatar_drivers as $current_driver)
0672 {
0673 $driver = $phpbb_avatar_manager->get_driver($current_driver);
0674
0675 $avatars_enabled = true;
0676 $template->set_filenames(array(
0677 'avatar' => $driver->get_template_name(),
0678 ));
0679
0680 if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
0681 {
0682 $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
0683 $driver_upper = strtoupper($driver_name);
0684 $template->assign_block_vars('avatar_drivers', array(
0685 'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
0686 'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
0687
0688 'DRIVER' => $driver_name,
0689 'SELECTED' => $current_driver == $selected_driver,
0690 'OUTPUT' => $template->assign_display('avatar'),
0691 ));
0692 }
0693 }
0694 }
0695
0696 if (isset($phpbb_avatar_manager) && !$update)
0697 {
0698 // Merge any avatars errors into the primary error array
0699 $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
0700 }
0701
0702 $template->assign_vars(array(
0703 'S_EDIT' => true,
0704 'S_INCLUDE_SWATCH' => true,
0705 'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"',
0706 'S_ERROR' => (sizeof($error)) ? true : false,
0707 'S_SPECIAL_GROUP' => ($group_type == GROUP_SPECIAL) ? true : false,
0708 'S_AVATARS_ENABLED' => ($config['allow_avatar'] && $avatars_enabled),
0709 'S_GROUP_MANAGE' => true,
0710
0711 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
0712 'GROUP_RECEIVE_PM' => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
0713 'GROUP_MESSAGE_LIMIT' => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
0714 'GROUP_MAX_RECIPIENTS' => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
0715
0716 'GROUP_DESC' => $group_desc_data['text'],
0717 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'],
0718 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'],
0719 'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
0720
0721 'S_RANK_OPTIONS' => $rank_options,
0722
0723 'GROUP_TYPE_FREE' => GROUP_FREE,
0724 'GROUP_TYPE_OPEN' => GROUP_OPEN,
0725 'GROUP_TYPE_CLOSED' => GROUP_CLOSED,
0726 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN,
0727 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL,
0728
0729 'GROUP_FREE' => $type_free,
0730 'GROUP_OPEN' => $type_open,
0731 'GROUP_CLOSED' => $type_closed,
0732 'GROUP_HIDDEN' => $type_hidden,
0733
0734 'S_UCP_ACTION' => $this->u_action . "&action=$action&g=$group_id",
0735 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(),
0736 ));
0737
0738 break;
0739
0740 case 'list':
0741
0742 if (!$group_id)
0743 {
0744 trigger_error($user->lang['NO_GROUP'] . $return_page);
0745 }
0746
0747 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0748 {
0749 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0750 }
0751 list(, $row) = each($row);
0752
0753 if (!$row['group_leader'])
0754 {
0755 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0756 }
0757
0758 $user->add_lang(array('acp/groups', 'acp/common'));
0759 $start = $request->variable('start', 0);
0760
0761 // Grab the leaders - always, on every page...
0762 $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
0763 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
0764 WHERE ug.group_id = $group_id
0765 AND u.user_id = ug.user_id
0766 AND ug.group_leader = 1
0767 ORDER BY ug.user_pending DESC, u.username_clean";
0768 $result = $db->sql_query($sql);
0769
0770 while ($row = $db->sql_fetchrow($result))
0771 {
0772 $template->assign_block_vars('leader', array(
0773 'USERNAME' => $row['username'],
0774 'USERNAME_COLOUR' => $row['user_colour'],
0775 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
0776 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']),
0777 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,
0778 'JOINED' => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
0779 'USER_POSTS' => $row['user_posts'],
0780 'USER_ID' => $row['user_id'])
0781 );
0782 }
0783 $db->sql_freeresult($result);
0784
0785 // Total number of group members (non-leaders)
0786 $sql = 'SELECT COUNT(user_id) AS total_members
0787 FROM ' . USER_GROUP_TABLE . "
0788 WHERE group_id = $group_id
0789 AND group_leader = 0";
0790 $result = $db->sql_query($sql);
0791 $total_members = (int) $db->sql_fetchfield('total_members');
0792 $db->sql_freeresult($result);
0793
0794 // Grab the members
0795 $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
0796 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
0797 WHERE ug.group_id = $group_id
0798 AND u.user_id = ug.user_id
0799 AND ug.group_leader = 0
0800 ORDER BY ug.user_pending DESC, u.username_clean";
0801 $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
0802
0803 $pending = false;
0804 $approved = false;
0805
0806 while ($row = $db->sql_fetchrow($result))
0807 {
0808 if ($row['user_pending'] && !$pending)
0809 {
0810 $template->assign_block_vars('member', array(
0811 'S_PENDING' => true)
0812 );
0813 $template->assign_var('S_PENDING_SET', true);
0814
0815 $pending = true;
0816 }
0817 else if (!$row['user_pending'] && !$approved)
0818 {
0819 $template->assign_block_vars('member', array(
0820 'S_APPROVED' => true)
0821 );
0822 $template->assign_var('S_APPROVED_SET', true);
0823
0824 $approved = true;
0825 }
0826
0827 $template->assign_block_vars('member', array(
0828 'USERNAME' => $row['username'],
0829 'USERNAME_COLOUR' => $row['user_colour'],
0830 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
0831 'U_USER_VIEW' => get_username_string('profile', $row['user_id'], $row['username']),
0832 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,
0833 'JOINED' => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
0834 'USER_POSTS' => $row['user_posts'],
0835 'USER_ID' => $row['user_id'])
0836 );
0837 }
0838 $db->sql_freeresult($result);
0839
0840 $s_action_options = '';
0841 $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
0842
0843 foreach ($options as $option => $lang)
0844 {
0845 $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
0846 }
0847
0848 /* @var $pagination \phpbb\pagination */
0849 $pagination = $phpbb_container->get('pagination');
0850 $base_url = $this->u_action . "&action=$action&g=$group_id";
0851 $start = $pagination->validate_start($start, $config['topics_per_page'], $total_members);
0852 $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
0853
0854 $template->assign_vars(array(
0855 'S_LIST' => true,
0856 'S_ACTION_OPTIONS' => $s_action_options,
0857
0858 'U_ACTION' => $this->u_action . "&g=$group_id",
0859 'S_UCP_ACTION' => $this->u_action . "&g=$group_id",
0860 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=usernames'),
0861 ));
0862
0863 break;
0864
0865 case 'approve':
0866
0867 if (!$group_id)
0868 {
0869 trigger_error($user->lang['NO_GROUP'] . $return_page);
0870 }
0871
0872 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0873 {
0874 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0875 }
0876 list(, $row) = each($row);
0877
0878 if (!$row['group_leader'])
0879 {
0880 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0881 }
0882
0883 $user->add_lang('acp/groups');
0884
0885 // Approve, demote or promote
0886 group_user_attributes('approve', $group_id, $mark_ary, false, false);
0887
0888 trigger_error($user->lang['USERS_APPROVED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
0889
0890 break;
0891
0892 case 'default':
0893
0894 if (!$group_id)
0895 {
0896 trigger_error($user->lang['NO_GROUP'] . $return_page);
0897 }
0898
0899 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0900 {
0901 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0902 }
0903 list(, $row) = each($row);
0904
0905 if (!$row['group_leader'])
0906 {
0907 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0908 }
0909
0910 $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
0911
0912 if (confirm_box(true))
0913 {
0914 if (!sizeof($mark_ary))
0915 {
0916 $start = 0;
0917
0918 do
0919 {
0920 $sql = 'SELECT user_id
0921 FROM ' . USER_GROUP_TABLE . "
0922 WHERE group_id = $group_id
0923 ORDER BY user_id";
0924 $result = $db->sql_query_limit($sql, 200, $start);
0925
0926 $mark_ary = array();
0927 if ($row = $db->sql_fetchrow($result))
0928 {
0929 do
0930 {
0931 $mark_ary[] = $row['user_id'];
0932 }
0933 while ($row = $db->sql_fetchrow($result));
0934
0935 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
0936
0937 $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
0938 }
0939 else
0940 {
0941 $start = 0;
0942 }
0943 $db->sql_freeresult($result);
0944 }
0945 while ($start);
0946 }
0947 else
0948 {
0949 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
0950 }
0951
0952 $user->add_lang('acp/groups');
0953
0954 trigger_error($user->lang['GROUP_DEFS_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
0955 }
0956 else
0957 {
0958 $user->add_lang('acp/common');
0959
0960 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
0961 'mark' => $mark_ary,
0962 'g' => $group_id,
0963 'i' => $id,
0964 'mode' => $mode,
0965 'action' => $action))
0966 );
0967 }
0968
0969 // redirect to last screen
0970 redirect($this->u_action . '&action=list&g=' . $group_id);
0971
0972 break;
0973
0974 case 'deleteusers':
0975
0976 $user->add_lang(array('acp/groups', 'acp/common'));
0977
0978 if (!($row = group_memberships($group_id, $user->data['user_id'])))
0979 {
0980 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
0981 }
0982 list(, $row) = each($row);
0983
0984 if (!$row['group_leader'])
0985 {
0986 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
0987 }
0988
0989 $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
0990
0991 if (confirm_box(true))
0992 {
0993 if (!$group_id)
0994 {
0995 trigger_error($user->lang['NO_GROUP'] . $return_page);
0996 }
0997
0998 $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
0999
1000 if ($error)
1001 {
1002 trigger_error($user->lang[$error] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
1003 }
1004
1005 trigger_error($user->lang['GROUP_USERS_REMOVE'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
1006 }
1007 else
1008 {
1009 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
1010 'mark' => $mark_ary,
1011 'g' => $group_id,
1012 'i' => $id,
1013 'mode' => $mode,
1014 'action' => $action))
1015 );
1016 }
1017
1018 // redirect to last screen
1019 redirect($this->u_action . '&action=list&g=' . $group_id);
1020
1021 break;
1022
1023 case 'addusers':
1024
1025 $user->add_lang(array('acp/groups', 'acp/common'));
1026
1027 $names = $request->variable('usernames', '', true);
1028
1029 if (!$group_id)
1030 {
1031 trigger_error($user->lang['NO_GROUP'] . $return_page);
1032 }
1033
1034 if (!$names)
1035 {
1036 trigger_error($user->lang['NO_USERS'] . $return_page);
1037 }
1038
1039 if (!($row = group_memberships($group_id, $user->data['user_id'])))
1040 {
1041 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
1042 }
1043 list(, $row) = each($row);
1044
1045 if (!$row['group_leader'])
1046 {
1047 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
1048 }
1049
1050 $name_ary = array_unique(explode("\n", $names));
1051 $group_name = $group_helper->get_name($group_row['group_name']);
1052
1053 $default = $request->variable('default', 0);
1054
1055 if (confirm_box(true))
1056 {
1057 // Add user/s to group
1058 if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row))
1059 {
1060 trigger_error($user->lang[$error] . $return_page);
1061 }
1062
1063 trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
1064 }
1065 else
1066 {
1067 $s_hidden_fields = array(
1068 'default' => $default,
1069 'usernames' => $names,
1070 'g' => $group_id,
1071 'i' => $id,
1072 'mode' => $mode,
1073 'action' => $action
1074 );
1075
1076 confirm_box(false, $user->lang('GROUP_CONFIRM_ADD_USERS', sizeof($name_ary), implode($user->lang['COMMA_SEPARATOR'], $name_ary)), build_hidden_fields($s_hidden_fields));
1077 }
1078
1079 trigger_error($user->lang['NO_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
1080
1081 break;
1082
1083 default:
1084 $user->add_lang('acp/common');
1085
1086 $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
1087 FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
1088 WHERE ug.user_id = ' . $user->data['user_id'] . '
1089 AND g.group_id = ug.group_id
1090 AND ug.group_leader = 1
1091 ORDER BY g.group_type DESC, g.group_name';
1092 $result = $db->sql_query($sql);
1093
1094 while ($value = $db->sql_fetchrow($result))
1095 {
1096 $template->assign_block_vars('leader', array(
1097 'GROUP_NAME' => $group_helper->get_name($value['group_name']),
1098 'GROUP_DESC' => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']),
1099 'GROUP_TYPE' => $value['group_type'],
1100 'GROUP_ID' => $value['group_id'],
1101 'GROUP_COLOUR' => $value['group_colour'],
1102
1103 'U_LIST' => $this->u_action . "&action=list&g={$value['group_id']}",
1104 'U_EDIT' => $this->u_action . "&action=edit&g={$value['group_id']}")
1105 );
1106 }
1107 $db->sql_freeresult($result);
1108
1109 break;
1110 }
1111
1112 break;
1113 }
1114
1115 $this->tpl_name = 'ucp_groups_' . $mode;
1116 }
1117 }
1118