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