[ Index ] |
PHP Cross Reference of phpBB 3.0 Beta 3 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package ucp 5 * @version $Id: ucp_groups.php,v 1.39 2006/11/03 21:04:10 acydburn Exp $ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * ucp_groups 13 * @package ucp 14 */ 15 class ucp_groups 16 { 17 var $u_action; 18 19 function main($id, $mode) 20 { 21 global $config, $phpbb_root_path, $phpEx; 22 global $db, $user, $auth, $cache, $template; 23 24 $user->add_lang('groups'); 25 26 $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>'); 27 28 $mark_ary = request_var('mark', array(0)); 29 $submit = (!empty($_POST['submit'])) ? true : false; 30 $delete = (!empty($_POST['delete'])) ? true : false; 31 $error = $data = array(); 32 33 switch ($mode) 34 { 35 case 'membership': 36 37 $this->page_title = 'UCP_USERGROUPS_MEMBER'; 38 39 if ($submit || isset($_POST['change_default'])) 40 { 41 $action = (isset($_POST['change_default'])) ? 'change_default' : request_var('action', ''); 42 $group_id = ($action == 'change_default') ? request_var('default', 0) : request_var('selected', 0); 43 44 if (!$group_id) 45 { 46 trigger_error('NO_GROUP_SELECTED'); 47 } 48 49 $sql = 'SELECT group_id, group_name, group_type 50 FROM ' . GROUPS_TABLE . " 51 WHERE group_id IN ($group_id, {$user->data['group_id']})"; 52 $result = $db->sql_query($sql); 53 54 $group_row = array(); 55 while ($row = $db->sql_fetchrow($result)) 56 { 57 $row['group_name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']; 58 $group_row[$row['group_id']] = $row; 59 } 60 $db->sql_freeresult($result); 61 62 if (!sizeof($group_row)) 63 { 64 trigger_error('GROUP_NOT_EXIST'); 65 } 66 67 switch ($action) 68 { 69 case 'change_default': 70 // User already having this group set as default? 71 if ($group_id == $user->data['group_id']) 72 { 73 trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page); 74 } 75 76 if (!$auth->acl_get('u_chggrp')) 77 { 78 trigger_error($user->lang['NOT_AUTHORIZED'] . $return_page); 79 } 80 81 // User needs to be member of the group in order to make it default 82 if (!group_memberships($group_id, $user->data['user_id'], true)) 83 { 84 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 85 } 86 87 if (confirm_box(true)) 88 { 89 group_user_attributes('default', $group_id, $user->data['user_id']); 90 91 add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_CHANGE', sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$group_id]['group_name'], $group_row[$user->data['group_id']]['group_name'])); 92 93 meta_refresh(3, $this->u_action); 94 trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page); 95 } 96 else 97 { 98 $s_hidden_fields = array( 99 'default' => $group_id, 100 'change_default'=> true 101 ); 102 103 confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields)); 104 } 105 106 break; 107 108 case 'resign': 109 110 // User tries to resign from default group but is not allowed to change it? 111 if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp')) 112 { 113 trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page); 114 } 115 116 if (!($row = group_memberships($group_id, $user->data['user_id']))) 117 { 118 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 119 } 120 list(, $row) = each($row); 121 122 if (confirm_box(true)) 123 { 124 group_user_del($group_id, $user->data['user_id']); 125 126 add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_RESIGN', $group_row[$group_id]['group_name']); 127 128 meta_refresh(3, $this->u_action); 129 trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page); 130 } 131 else 132 { 133 $s_hidden_fields = array( 134 'selected' => $group_id, 135 'action' => 'resign', 136 'submit' => true 137 ); 138 139 confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields)); 140 } 141 142 break; 143 144 case 'join': 145 146 if (group_memberships($group_id, $user->data['user_id'], true)) 147 { 148 trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page); 149 } 150 151 // Check permission to join (open group or request) 152 if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE) 153 { 154 trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page); 155 } 156 157 if (confirm_box(true)) 158 { 159 if ($group_row[$group_id]['group_type'] == GROUP_FREE) 160 { 161 group_user_add($group_id, $user->data['user_id']); 162 163 $email_template = 'group_added'; 164 } 165 else 166 { 167 group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1); 168 169 $email_template = 'group_request'; 170 } 171 172 include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx); 173 $messenger = new messenger(); 174 175 $sql = 'SELECT u.username, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang 176 FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u 177 WHERE ug.user_id = u.user_id 178 AND ' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? "ug.user_id = {$user->data['user_id']}" : 'ug.group_leader = 1') . " 179 AND ug.group_id = $group_id"; 180 $result = $db->sql_query($sql); 181 182 while ($row = $db->sql_fetchrow($result)) 183 { 184 $messenger->template($email_template, $row['user_lang']); 185 186 $messenger->replyto($config['board_email']); 187 $messenger->to($row['user_email'], $row['username']); 188 $messenger->im($row['user_jabber'], $row['username']); 189 190 $messenger->assign_vars(array( 191 'USERNAME' => htmlspecialchars_decode($row['username']), 192 'GROUP_NAME' => htmlspecialchars_decode($group_row[$group_id]['group_name']), 193 194 'U_PENDING' => generate_board_url() . "/ucp.$phpEx?i=groups&mode=manage&action=list&g=$group_id", 195 'U_GROUP' => generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id") 196 ); 197 198 $messenger->send($row['user_notify_type']); 199 $messenger->reset(); 200 } 201 $db->sql_freeresult($result); 202 203 $messenger->save_queue(); 204 205 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']); 206 207 meta_refresh(3, $this->u_action); 208 trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page); 209 } 210 else 211 { 212 $s_hidden_fields = array( 213 'selected' => $group_id, 214 'action' => 'join', 215 'submit' => true 216 ); 217 218 confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields)); 219 } 220 221 break; 222 223 case 'demote': 224 225 if (!($row = group_memberships($group_id, $user->data['user_id']))) 226 { 227 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 228 } 229 list(, $row) = each($row); 230 231 if (!$row['group_leader']) 232 { 233 trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page); 234 } 235 236 if (confirm_box(true)) 237 { 238 group_user_attributes('demote', $group_id, $user->data['user_id']); 239 240 add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_DEMOTE', $group_row[$group_id]['group_name']); 241 242 meta_refresh(3, $this->u_action); 243 trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page); 244 } 245 else 246 { 247 $s_hidden_fields = array( 248 'selected' => $group_id, 249 'action' => 'demote', 250 'submit' => true 251 ); 252 253 confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields)); 254 } 255 256 break; 257 } 258 } 259 260 $sql = 'SELECT g.*, ug.group_leader, ug.user_pending 261 FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug 262 WHERE ug.user_id = ' . $user->data['user_id'] . ' 263 AND g.group_id = ug.group_id 264 ORDER BY g.group_type DESC, g.group_name'; 265 $result = $db->sql_query($sql); 266 267 $group_id_ary = array(); 268 $leader_count = $member_count = $pending_count = 0; 269 while ($row = $db->sql_fetchrow($result)) 270 { 271 $block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member'); 272 273 switch ($row['group_type']) 274 { 275 case GROUP_OPEN: 276 $group_status = 'OPEN'; 277 break; 278 279 case GROUP_CLOSED: 280 $group_status = 'CLOSED'; 281 break; 282 283 case GROUP_HIDDEN: 284 $group_status = 'HIDDEN'; 285 break; 286 287 case GROUP_SPECIAL: 288 $group_status = 'SPECIAL'; 289 break; 290 291 case GROUP_FREE: 292 $group_status = 'FREE'; 293 break; 294 } 295 296 $template->assign_block_vars($block, array( 297 'GROUP_ID' => $row['group_id'], 298 'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 299 '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'], 300 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true, 301 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 302 303 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']), 304 305 'S_GROUP_DEFAULT' => ($row['group_id'] == $user->data['group_id']) ? true : false, 306 'S_ROW_COUNT' => ${$block . '_count'}++) 307 ); 308 309 $group_id_ary[] = $row['group_id']; 310 } 311 $db->sql_freeresult($result); 312 313 // Hide hidden groups unless user is an admin with group privileges 314 $sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')'; 315 $sql = 'SELECT group_id, group_name, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type 316 FROM ' . GROUPS_TABLE . ' 317 WHERE ' . $db->sql_in_set('group_id', $group_id_ary, true) . " 318 AND group_type $sql_and 319 ORDER BY group_type DESC, group_name"; 320 $result = $db->sql_query($sql); 321 322 $nonmember_count = 0; 323 while ($row = $db->sql_fetchrow($result)) 324 { 325 switch ($row['group_type']) 326 { 327 case GROUP_OPEN: 328 $group_status = 'OPEN'; 329 break; 330 331 case GROUP_CLOSED: 332 $group_status = 'CLOSED'; 333 break; 334 335 case GROUP_HIDDEN: 336 $group_status = 'HIDDEN'; 337 break; 338 339 case GROUP_SPECIAL: 340 $group_status = 'SPECIAL'; 341 break; 342 343 case GROUP_FREE: 344 $group_status = 'FREE'; 345 break; 346 } 347 348 $template->assign_block_vars('nonmember', array( 349 'GROUP_ID' => $row['group_id'], 350 'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 351 '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'], 352 'GROUP_SPECIAL' => ($row['group_type'] <> GROUP_SPECIAL) ? false : true, 353 'GROUP_CLOSED' => ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true, 354 'GROUP_STATUS' => $user->lang['GROUP_IS_' . $group_status], 355 'S_CAN_JOIN' => ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false, 356 357 'U_VIEW_GROUP' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']), 358 359 'S_ROW_COUNT' => $nonmember_count++) 360 ); 361 } 362 $db->sql_freeresult($result); 363 364 $template->assign_vars(array( 365 'S_CHANGE_DEFAULT' => ($auth->acl_get('u_chggrp')) ? true : false, 366 'S_LEADER_COUNT' => $leader_count, 367 'S_MEMBER_COUNT' => $member_count, 368 'S_PENDING_COUNT' => $pending_count, 369 'S_NONMEMBER_COUNT' => $nonmember_count, 370 371 'S_UCP_ACTION' => $this->u_action) 372 ); 373 374 break; 375 376 case 'manage': 377 378 $this->page_title = 'UCP_USERGROUPS_MANAGE'; 379 $action = (isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''); 380 $group_id = request_var('g', 0); 381 382 if ($group_id) 383 { 384 $sql = 'SELECT * 385 FROM ' . GROUPS_TABLE . " 386 WHERE group_id = $group_id"; 387 $result = $db->sql_query($sql); 388 $group_row = $db->sql_fetchrow($result); 389 $db->sql_freeresult($result); 390 391 if (!$group_row) 392 { 393 trigger_error($user->lang['NO_GROUP'] . $return_page); 394 } 395 } 396 397 switch ($action) 398 { 399 case 'edit': 400 401 if (!$group_id) 402 { 403 trigger_error($user->lang['NO_GROUP'] . $return_page); 404 } 405 406 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 407 { 408 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 409 } 410 411 $file_uploads = (@ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on') ? true : false; 412 $user->add_lang(array('acp/groups', 'acp/common')); 413 414 $data = $submit_ary = array(); 415 416 $update = (isset($_POST['update'])) ? true : false; 417 418 $error = array(); 419 420 $avatar_select = basename(request_var('avatar_select', '')); 421 $category = basename(request_var('category', '')); 422 423 $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && is_writeable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false; 424 425 // Did we submit? 426 if ($update) 427 { 428 $group_name = request_var('group_name', '', true); 429 $group_desc = request_var('group_desc', '', true); 430 $group_type = request_var('group_type', GROUP_FREE); 431 432 $allow_desc_bbcode = request_var('desc_parse_bbcode', false); 433 $allow_desc_urls = request_var('desc_parse_urls', false); 434 $allow_desc_smilies = request_var('desc_parse_smilies', false); 435 436 $data['uploadurl'] = request_var('uploadurl', ''); 437 $data['remotelink'] = request_var('remotelink', ''); 438 $delete = request_var('delete', ''); 439 440 $submit_ary = array( 441 'colour' => request_var('group_colour', ''), 442 'rank' => request_var('group_rank', 0), 443 'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0, 444 'message_limit' => request_var('group_message_limit', 0) 445 ); 446 447 if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink']) 448 { 449 $data['width'] = request_var('width', ''); 450 $data['height'] = request_var('height', ''); 451 452 // Avatar stuff 453 $var_ary = array( 454 'uploadurl' => array('string', true, 5, 255), 455 'remotelink' => array('string', true, 5, 255), 456 'width' => array('string', true, 1, 3), 457 'height' => array('string', true, 1, 3), 458 ); 459 460 if (!($error = validate_data($data, $var_ary))) 461 { 462 $data['user_id'] = "g$group_id"; 463 464 if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload) 465 { 466 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error); 467 } 468 else if ($data['remotelink']) 469 { 470 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error); 471 } 472 } 473 } 474 else if ($avatar_select && $config['allow_avatar_local']) 475 { 476 // check avatar gallery 477 if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category)) 478 { 479 $submit_ary['avatar_type'] = AVATAR_GALLERY; 480 481 list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select); 482 $submit_ary['avatar'] = $category . '/' . $avatar_select; 483 } 484 } 485 else if ($delete) 486 { 487 $submit_ary['avatar'] = ''; 488 $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0; 489 } 490 491 if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']) || $group_row['group_avatar'] != $submit_ary['avatar'])) || $delete) 492 { 493 if (isset($group_row['group_avatar']) && $group_row['group_avatar']) 494 { 495 avatar_delete('group', $group_row); 496 } 497 } 498 499 if (!sizeof($error)) 500 { 501 // Only set the rank, colour, etc. if it's changed or if we're adding a new 502 // group. This prevents existing group members being updated if no changes 503 // were made. 504 505 $group_attributes = array(); 506 $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height'); 507 foreach ($test_variables as $test) 508 { 509 if ($action == 'add' || (isset($submit_ary[$test]) && $group_row['group_' . $test] != $submit_ary[$test])) 510 { 511 $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test]; 512 } 513 } 514 515 if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies))) 516 { 517 $cache->destroy('sql', GROUPS_TABLE); 518 519 $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED'; 520 trigger_error($user->lang[$message] . $return_page); 521 } 522 } 523 524 if (sizeof($error)) 525 { 526 $group_rank = $submit_ary['rank']; 527 528 $group_desc_data = array( 529 'text' => $group_desc, 530 'allow_bbcode' => $allow_desc_bbcode, 531 'allow_smilies' => $allow_desc_smilies, 532 'allow_urls' => $allow_desc_urls 533 ); 534 } 535 } 536 else if (!$group_id) 537 { 538 $group_name = request_var('group_name', '', true); 539 $group_desc_data = array( 540 'text' => '', 541 'allow_bbcode' => true, 542 'allow_smilies' => true, 543 'allow_urls' => true 544 ); 545 $group_rank = 0; 546 $group_type = GROUP_OPEN; 547 } 548 else 549 { 550 $group_name = $group_row['group_name']; 551 $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']); 552 $group_type = $group_row['group_type']; 553 $group_rank = $group_row['group_rank']; 554 } 555 556 $sql = 'SELECT * 557 FROM ' . RANKS_TABLE . ' 558 WHERE rank_special = 1 559 ORDER BY rank_title'; 560 $result = $db->sql_query($sql); 561 562 $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>'; 563 while ($row = $db->sql_fetchrow($result)) 564 { 565 $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : ''; 566 $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>'; 567 } 568 $db->sql_freeresult($result); 569 570 $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : ''; 571 $type_open = ($group_type == GROUP_OPEN) ? ' checked="checked"' : ''; 572 $type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : ''; 573 $type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : ''; 574 575 if (isset($group_row['group_avatar']) && $group_row['group_avatar']) 576 { 577 switch ($group_row['group_avatar_type']) 578 { 579 case AVATAR_UPLOAD: 580 $avatar_img = $phpbb_root_path . $config['avatar_path'] . '/'; 581 break; 582 583 case AVATAR_GALLERY: 584 $avatar_img = $phpbb_root_path . $config['avatar_gallery_path'] . '/'; 585 break; 586 } 587 $avatar_img .= $group_row['group_avatar']; 588 589 $avatar_img = '<img src="' . $avatar_img . '" width="' . $group_row['group_avatar_width'] . '" height="' . $group_row['group_avatar_height'] . '" alt="" />'; 590 } 591 else 592 { 593 $avatar_img = '<img src="' . $phpbb_root_path . 'adm/images/no_avatar.gif" alt="" />'; 594 } 595 596 $display_gallery = (isset($_POST['display_gallery'])) ? true : false; 597 598 if ($config['allow_avatar_local'] && $display_gallery) 599 { 600 avatar_gallery($category, $avatar_select, 4); 601 } 602 603 $template->assign_vars(array( 604 'S_EDIT' => true, 605 'S_INCLUDE_SWATCH' => true, 606 'S_CAN_UPLOAD' => $can_upload, 607 'S_FORM_ENCTYPE' => ($can_upload) ? ' enctype="multipart/form-data"' : '', 608 'S_ERROR' => (sizeof($error)) ? true : false, 609 'S_SPECIAL_GROUP' => ($group_type == GROUP_SPECIAL) ? true : false, 610 'S_DISPLAY_GALLERY' => ($config['allow_avatar_local'] && !$display_gallery) ? true : false, 611 'S_IN_GALLERY' => ($config['allow_avatar_local'] && $display_gallery) ? true : false, 612 613 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '', 614 'GROUP_NAME' => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name, 615 'GROUP_INTERNAL_NAME' => $group_name, 616 'GROUP_DESC' => $group_desc_data['text'], 617 'GROUP_RECEIVE_PM' => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '', 618 'GROUP_MESSAGE_LIMIT' => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0, 619 'GROUP_COLOUR' => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '', 620 621 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'], 622 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'], 623 'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'], 624 625 'S_RANK_OPTIONS' => $rank_options, 626 'AVATAR_IMAGE' => $avatar_img, 627 'AVATAR_MAX_FILESIZE' => $config['avatar_filesize'], 628 'GROUP_AVATAR_WIDTH' => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '', 629 'GROUP_AVATAR_HEIGHT' => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '', 630 631 'GROUP_TYPE_FREE' => GROUP_FREE, 632 'GROUP_TYPE_OPEN' => GROUP_OPEN, 633 'GROUP_TYPE_CLOSED' => GROUP_CLOSED, 634 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN, 635 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL, 636 637 'GROUP_FREE' => $type_free, 638 'GROUP_OPEN' => $type_open, 639 'GROUP_CLOSED' => $type_closed, 640 'GROUP_HIDDEN' => $type_hidden, 641 642 'U_SWATCH' => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour'), 643 'UA_SWATCH' => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour', false), 644 'S_UCP_ACTION' => $this->u_action . "&action=$action&g=$group_id", 645 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024))) 646 ); 647 648 break; 649 650 case 'list': 651 652 if (!$group_id) 653 { 654 trigger_error($user->lang['NO_GROUP'] . $return_page); 655 } 656 657 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 658 { 659 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 660 } 661 662 $user->add_lang(array('acp/groups', 'acp/common')); 663 664 // Total number of group members (non-leaders) 665 $sql = 'SELECT COUNT(user_id) AS total_members 666 FROM ' . USER_GROUP_TABLE . " 667 WHERE group_id = $group_id 668 AND group_leader <> 1"; 669 $result = $db->sql_query($sql); 670 $total_members = (int) $db->sql_fetchfield('total_members'); 671 $db->sql_freeresult($result); 672 673 $start = request_var('start', 0); 674 675 // Grab the members 676 $sql = 'SELECT u.user_id, u.username, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending 677 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug 678 WHERE ug.group_id = $group_id 679 AND u.user_id = ug.user_id 680 ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username"; 681 $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start); 682 683 $pending = false; 684 685 while ($row = $db->sql_fetchrow($result)) 686 { 687 if ($row['user_pending'] && !$pending) 688 { 689 $template->assign_block_vars('member', array( 690 'S_PENDING' => true) 691 ); 692 693 $pending = true; 694 } 695 696 $template->assign_block_vars($row['group_leader'] ? 'leader' : 'member', array( 697 'USERNAME' => $row['username'], 698 'U_USER_VIEW' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $row['user_id']), 699 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false, 700 'JOINED' => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ', 701 'USER_POSTS' => $row['user_posts'], 702 'USER_ID' => $row['user_id']) 703 ); 704 } 705 $db->sql_freeresult($result); 706 707 $s_action_options = ''; 708 $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE'); 709 710 foreach ($options as $option => $lang) 711 { 712 $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>'; 713 } 714 715 $template->assign_vars(array( 716 'S_LIST' => true, 717 'S_ACTION_OPTIONS' => $s_action_options, 718 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start), 719 'PAGINATION' => generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start, true), 720 721 'U_ACTION' => $this->u_action . "&g=$group_id", 722 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=usernames'), 723 'UA_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=usernames', false)) 724 ); 725 726 break; 727 728 case 'approve': 729 730 if (!$group_id) 731 { 732 trigger_error($user->lang['NO_GROUP'] . $return_page); 733 } 734 735 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 736 { 737 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 738 } 739 740 $user->add_lang('acp/groups'); 741 742 // Approve, demote or promote 743 group_user_attributes('approve', $group_id, $mark_ary, false, ($group_id) ? $group_row['group_name'] : false); 744 745 trigger_error($user->lang['USERS_APPROVED'] . $return_page); 746 747 break; 748 749 case 'default': 750 751 if (!$group_id) 752 { 753 trigger_error($user->lang['NO_GROUP'] . $return_page); 754 } 755 756 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 757 { 758 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 759 } 760 761 if (confirm_box(true)) 762 { 763 if (!sizeof($mark_ary)) 764 { 765 $start = 0; 766 767 do 768 { 769 $sql = 'SELECT user_id 770 FROM ' . USER_GROUP_TABLE . " 771 WHERE group_id = $group_id 772 ORDER BY user_id"; 773 $result = $db->sql_query_limit($sql, 200, $start); 774 775 $mark_ary = array(); 776 if ($row = $db->sql_fetchrow($result)) 777 { 778 do 779 { 780 $mark_ary[] = $row['user_id']; 781 } 782 while ($row = $db->sql_fetchrow($result)); 783 784 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row); 785 786 $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200; 787 } 788 else 789 { 790 $start = 0; 791 } 792 $db->sql_freeresult($result); 793 } 794 while ($start); 795 } 796 else 797 { 798 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row); 799 } 800 801 $user->add_lang('acp/groups'); 802 803 trigger_error($user->lang['GROUP_DEFS_UPDATED'] . $return_page); 804 } 805 else 806 { 807 $user->add_lang('acp/common'); 808 809 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( 810 'mark' => $mark_ary, 811 'g' => $group_id, 812 'i' => $id, 813 'mode' => $mode, 814 'action' => $action)) 815 ); 816 } 817 818 break; 819 820 case 'deleteusers': 821 822 $user->add_lang(array('acp/groups', 'acp/common')); 823 824 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 825 { 826 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 827 } 828 829 if (confirm_box(true)) 830 { 831 if (!$group_id) 832 { 833 trigger_error($user->lang['NO_GROUP'] . $return_page); 834 } 835 836 $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']); 837 838 if ($error) 839 { 840 trigger_error($user->lang[$error] . $return_page); 841 } 842 843 trigger_error($user->lang['GROUP_USERS_REMOVE'] . $return_page); 844 } 845 else 846 { 847 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( 848 'mark' => $mark_ary, 849 'g' => $group_id, 850 'i' => $id, 851 'mode' => $mode, 852 'action' => $action)) 853 ); 854 } 855 856 break; 857 858 case 'addusers': 859 860 $user->add_lang(array('acp/groups', 'acp/common')); 861 862 $name_ary = request_var('usernames', '', true); 863 864 if (!$group_id) 865 { 866 trigger_error($user->lang['NO_GROUP'] . $return_page); 867 } 868 869 if (!$name_ary) 870 { 871 trigger_error($user->lang['NO_USERS'] . $return_page); 872 } 873 874 if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader']) 875 { 876 trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page); 877 } 878 879 $name_ary = array_unique(explode("\n", $name_ary)); 880 881 $default = request_var('default', 0); 882 883 // Add user/s to group 884 if ($error = group_user_add($group_id, false, $name_ary, $group_row['group_name'], $default, 0, 0, $group_row)) 885 { 886 trigger_error($user->lang[$error] . $return_page); 887 } 888 889 trigger_error($user->lang['GROUP_USERS_ADDED'] . $return_page); 890 891 break; 892 893 default: 894 $user->add_lang('acp/common'); 895 896 $sql = 'SELECT g.group_id, g.group_name, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader 897 FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug 898 WHERE ug.user_id = ' . $user->data['user_id'] . ' 899 AND g.group_id = ug.group_id 900 AND ug.group_leader = 1 901 ORDER BY g.group_type DESC, g.group_name'; 902 $result = $db->sql_query($sql); 903 904 while ($value = $db->sql_fetchrow($result)) 905 { 906 $template->assign_block_vars('leader', array( 907 'GROUP_NAME' => ($value['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $value['group_name']] : $value['group_name'], 908 'GROUP_DESC' => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']), 909 'GROUP_TYPE' => $value['group_type'], 910 'GROUP_ID' => $value['group_id'], 911 912 'U_LIST' => $this->u_action . "&action=list&g={$value['group_id']}", 913 'U_EDIT' => $this->u_action . "&action=edit&g={$value['group_id']}") 914 ); 915 } 916 $db->sql_freeresult($result); 917 918 break; 919 } 920 921 break; 922 } 923 924 $this->tpl_name = 'ucp_groups_' . $mode; 925 } 926 } 927 928 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 22 00:35:05 2006 | Cross-referenced by PHPXref 0.6 |