[ Index ] |
PHP Cross Reference of phpBB 3.0 Beta 3 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package acp 5 * @version $Id: acp_groups.php,v 1.35 2006/10/20 13:47:28 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 * @package acp 13 */ 14 class acp_groups 15 { 16 var $u_action; 17 18 function main($id, $mode) 19 { 20 global $config, $db, $user, $auth, $template, $cache; 21 global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads; 22 23 $user->add_lang('acp/groups'); 24 $this->tpl_name = 'acp_groups'; 25 $this->page_title = 'ACP_GROUPS_MANAGE'; 26 27 include($phpbb_root_path . 'includes/functions_user.' . $phpEx); 28 29 // Check and set some common vars 30 $action = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', '')); 31 $group_id = request_var('g', 0); 32 $mark_ary = request_var('mark', array(0)); 33 $name_ary = request_var('usernames', '', true); 34 $leader = request_var('leader', 0); 35 $default = request_var('default', 0); 36 $start = request_var('start', 0); 37 $update = (isset($_POST['update'])) ? true : false; 38 39 // Clear some vars 40 $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && is_writeable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false; 41 $group_row = array(); 42 43 // Grab basic data for group, if group_id is set and exists 44 if ($group_id) 45 { 46 $sql = 'SELECT * 47 FROM ' . GROUPS_TABLE . " 48 WHERE group_id = $group_id"; 49 $result = $db->sql_query($sql); 50 $group_row = $db->sql_fetchrow($result); 51 $db->sql_freeresult($result); 52 53 if (!$group_row) 54 { 55 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 56 } 57 } 58 59 // Which page? 60 switch ($action) 61 { 62 case 'approve': 63 case 'demote': 64 case 'promote': 65 if (!$group_id) 66 { 67 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 68 } 69 70 // Approve, demote or promote 71 group_user_attributes($action, $group_id, $mark_ary, false, $group_row['group_name']); 72 73 switch ($action) 74 { 75 case 'demote': 76 $message = 'GROUP_MODS_DEMOTED'; 77 break; 78 79 case 'promote': 80 $message = 'GROUP_MODS_PROMOTED'; 81 break; 82 83 case 'approve': 84 $message = 'USERS_APPROVED'; 85 break; 86 } 87 88 group_update_listings($group_id); 89 90 trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&action=list&g=' . $group_id)); 91 break; 92 93 case 'default': 94 if (!$group_id) 95 { 96 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 97 } 98 99 if (confirm_box(true)) 100 { 101 if (!sizeof($mark_ary)) 102 { 103 $start = 0; 104 105 do 106 { 107 $sql = 'SELECT user_id 108 FROM ' . USER_GROUP_TABLE . " 109 WHERE group_id = $group_id 110 ORDER BY user_id"; 111 $result = $db->sql_query_limit($sql, 200, $start); 112 113 $mark_ary = array(); 114 if ($row = $db->sql_fetchrow($result)) 115 { 116 do 117 { 118 $mark_ary[] = $row['user_id']; 119 } 120 while ($row = $db->sql_fetchrow($result)); 121 122 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row); 123 124 $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200; 125 } 126 else 127 { 128 $start = 0; 129 } 130 $db->sql_freeresult($result); 131 } 132 while ($start); 133 } 134 else 135 { 136 group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row); 137 } 138 139 group_update_listings($group_id); 140 141 trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id)); 142 } 143 else 144 { 145 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( 146 'mark' => $mark_ary, 147 'g' => $group_id, 148 'i' => $id, 149 'mode' => $mode, 150 'action' => $action)) 151 ); 152 } 153 154 break; 155 156 case 'deleteusers': 157 case 'delete': 158 if (confirm_box(true)) 159 { 160 if (!$group_id) 161 { 162 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 163 } 164 165 $error = ''; 166 167 switch ($action) 168 { 169 case 'delete': 170 if (!$auth->acl_get('a_groupdel')) 171 { 172 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 173 } 174 175 $error = group_delete($group_id, $group_row['group_name']); 176 break; 177 178 case 'deleteusers': 179 $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']); 180 break; 181 } 182 183 $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&action=list&g=' . $group_id; 184 185 if ($error) 186 { 187 trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING); 188 } 189 190 $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE'; 191 trigger_error($user->lang[$message] . adm_back_link($back_link)); 192 } 193 else 194 { 195 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array( 196 'mark' => $mark_ary, 197 'g' => $group_id, 198 'i' => $id, 199 'mode' => $mode, 200 'action' => $action)) 201 ); 202 } 203 break; 204 205 case 'addusers': 206 if (!$group_id) 207 { 208 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 209 } 210 211 if (!$name_ary) 212 { 213 trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING); 214 } 215 216 $name_ary = array_unique(explode("\n", $name_ary)); 217 218 // Add user/s to group 219 if ($error = group_user_add($group_id, false, $name_ary, $group_row['group_name'], $default, $leader, 0, $group_row)) 220 { 221 trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING); 222 } 223 224 $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED'; 225 trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&action=list&g=' . $group_id)); 226 break; 227 228 case 'edit': 229 case 'add': 230 231 $data = $submit_ary = array(); 232 233 if ($action == 'edit' && !$group_id) 234 { 235 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 236 } 237 238 if ($action == 'add' && !$auth->acl_get('a_groupadd')) 239 { 240 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 241 } 242 243 $error = array(); 244 $user->add_lang('ucp'); 245 246 $avatar_select = basename(request_var('avatar_select', '')); 247 $category = basename(request_var('category', '')); 248 249 // Did we submit? 250 if ($update) 251 { 252 $group_name = request_var('group_name', '', true); 253 $group_desc = request_var('group_desc', '', true); 254 $group_type = request_var('group_type', GROUP_FREE); 255 256 $allow_desc_bbcode = request_var('desc_parse_bbcode', false); 257 $allow_desc_urls = request_var('desc_parse_urls', false); 258 $allow_desc_smilies = request_var('desc_parse_smilies', false); 259 260 $data['uploadurl'] = request_var('uploadurl', ''); 261 $data['remotelink'] = request_var('remotelink', ''); 262 $delete = request_var('delete', ''); 263 264 $submit_ary = array( 265 'colour' => request_var('group_colour', ''), 266 'rank' => request_var('group_rank', 0), 267 'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0, 268 'legend' => isset($_REQUEST['group_legend']) ? 1 : 0, 269 'message_limit' => request_var('group_message_limit', 0) 270 ); 271 272 if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink']) 273 { 274 $data['width'] = request_var('width', ''); 275 $data['height'] = request_var('height', ''); 276 277 // Avatar stuff 278 $var_ary = array( 279 'uploadurl' => array('string', true, 5, 255), 280 'remotelink' => array('string', true, 5, 255), 281 'width' => array('string', true, 1, 3), 282 'height' => array('string', true, 1, 3), 283 ); 284 285 if (!($error = validate_data($data, $var_ary))) 286 { 287 $data['user_id'] = "g$group_id"; 288 289 if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload) 290 { 291 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error); 292 } 293 else if ($data['remotelink']) 294 { 295 list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error); 296 } 297 } 298 } 299 else if ($avatar_select && $config['allow_avatar_local']) 300 { 301 // check avatar gallery 302 if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category)) 303 { 304 $submit_ary['avatar_type'] = AVATAR_GALLERY; 305 306 list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select); 307 $submit_ary['avatar'] = $category . '/' . $avatar_select; 308 } 309 } 310 else if ($delete) 311 { 312 $submit_ary['avatar'] = ''; 313 $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0; 314 } 315 316 if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']) || $group_row['group_avatar'] != $submit_ary['avatar'])) || $delete) 317 { 318 if (isset($group_row['group_avatar']) && $group_row['group_avatar']) 319 { 320 avatar_delete('group', $group_row); 321 } 322 } 323 324 if (!sizeof($error)) 325 { 326 // Only set the rank, colour, etc. if it's changed or if we're adding a new 327 // group. This prevents existing group members being updated if no changes 328 // were made. 329 330 $group_attributes = array(); 331 $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit'); 332 foreach ($test_variables as $test) 333 { 334 if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test])) 335 { 336 $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test]; 337 } 338 } 339 340 if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies))) 341 { 342 $group_perm_from = request_var('group_perm_from', 0); 343 344 // Copy permissions? 345 if ($group_perm_from && $action == 'add') 346 { 347 // From the mysql documentation: 348 // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14. 349 // Due to this we stay on the safe side if we do the insertion "the manual way" 350 351 // Copy permisisons from/to the acl groups table (only group_id gets changed) 352 $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting 353 FROM ' . ACL_GROUPS_TABLE . ' 354 WHERE group_id = ' . $group_perm_from; 355 $result = $db->sql_query($sql); 356 357 $groups_sql_ary = array(); 358 while ($row = $db->sql_fetchrow($result)) 359 { 360 $groups_sql_ary[] = array( 361 'group_id' => (int) $group_id, 362 'forum_id' => (int) $row['forum_id'], 363 'auth_option_id' => (int) $row['auth_option_id'], 364 'auth_role_id' => (int) $row['auth_role_id'], 365 'auth_setting' => (int) $row['auth_setting'] 366 ); 367 } 368 $db->sql_freeresult($result); 369 370 // Now insert the data 371 $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary); 372 373 $auth->acl_clear_prefetch(); 374 } 375 376 $cache->destroy('sql', GROUPS_TABLE); 377 378 $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED'; 379 trigger_error($user->lang[$message] . adm_back_link($this->u_action)); 380 } 381 } 382 383 if (sizeof($error)) 384 { 385 $group_rank = $submit_ary['rank']; 386 387 $group_desc_data = array( 388 'text' => $group_desc, 389 'allow_bbcode' => $allow_desc_bbcode, 390 'allow_smilies' => $allow_desc_smilies, 391 'allow_urls' => $allow_desc_urls 392 ); 393 } 394 } 395 else if (!$group_id) 396 { 397 $group_name = request_var('group_name', '', true); 398 $group_desc_data = array( 399 'text' => '', 400 'allow_bbcode' => true, 401 'allow_smilies' => true, 402 'allow_urls' => true 403 ); 404 $group_rank = 0; 405 $group_type = GROUP_OPEN; 406 } 407 else 408 { 409 $group_name = $group_row['group_name']; 410 $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']); 411 $group_type = $group_row['group_type']; 412 $group_rank = $group_row['group_rank']; 413 } 414 415 $sql = 'SELECT * 416 FROM ' . RANKS_TABLE . ' 417 WHERE rank_special = 1 418 ORDER BY rank_title'; 419 $result = $db->sql_query($sql); 420 421 $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>'; 422 423 while ($row = $db->sql_fetchrow($result)) 424 { 425 $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : ''; 426 $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>'; 427 } 428 $db->sql_freeresult($result); 429 430 $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : ''; 431 $type_open = ($group_type == GROUP_OPEN) ? ' checked="checked"' : ''; 432 $type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : ''; 433 $type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : ''; 434 435 if (isset($group_row['group_avatar']) && $group_row['group_avatar']) 436 { 437 switch ($group_row['group_avatar_type']) 438 { 439 case AVATAR_UPLOAD: 440 $avatar_img = $phpbb_root_path . $config['avatar_path'] . '/'; 441 break; 442 443 case AVATAR_GALLERY: 444 $avatar_img = $phpbb_root_path . $config['avatar_gallery_path'] . '/'; 445 break; 446 } 447 $avatar_img .= $group_row['group_avatar']; 448 449 $avatar_img = '<img src="' . $avatar_img . '" width="' . $group_row['group_avatar_width'] . '" height="' . $group_row['group_avatar_height'] . '" alt="" />'; 450 } 451 else 452 { 453 $avatar_img = '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />'; 454 } 455 456 $display_gallery = (isset($_POST['display_gallery'])) ? true : false; 457 458 if ($config['allow_avatar_local'] && $display_gallery) 459 { 460 avatar_gallery($category, $avatar_select, 4); 461 } 462 463 $back_link = request_var('back_link', ''); 464 465 switch ($back_link) 466 { 467 case 'acp_users_groups': 468 $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&mode=groups&u=' . request_var('u', 0)); 469 break; 470 471 default: 472 $u_back = $this->u_action; 473 break; 474 } 475 476 $template->assign_vars(array( 477 'S_EDIT' => true, 478 'S_ADD_GROUP' => ($action == 'add') ? true : false, 479 'S_INCLUDE_SWATCH' => true, 480 'S_CAN_UPLOAD' => $can_upload, 481 'S_ERROR' => (sizeof($error)) ? true : false, 482 'S_SPECIAL_GROUP' => ($group_type == GROUP_SPECIAL) ? true : false, 483 'S_DISPLAY_GALLERY' => ($config['allow_avatar_local'] && !$display_gallery) ? true : false, 484 'S_IN_GALLERY' => ($config['allow_avatar_local'] && $display_gallery) ? true : false, 485 486 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '', 487 'GROUP_NAME' => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name, 488 'GROUP_INTERNAL_NAME' => $group_name, 489 'GROUP_DESC' => $group_desc_data['text'], 490 'GROUP_RECEIVE_PM' => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '', 491 'GROUP_LEGEND' => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '', 492 'GROUP_MESSAGE_LIMIT' => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0, 493 'GROUP_COLOUR' => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '', 494 495 'S_DESC_BBCODE_CHECKED' => $group_desc_data['allow_bbcode'], 496 'S_DESC_URLS_CHECKED' => $group_desc_data['allow_urls'], 497 'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'], 498 499 'S_RANK_OPTIONS' => $rank_options, 500 'S_GROUP_OPTIONS' => group_select_options(0), 501 'AVATAR_IMAGE' => $avatar_img, 502 'AVATAR_MAX_FILESIZE' => $config['avatar_filesize'], 503 'GROUP_AVATAR_WIDTH' => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '', 504 'GROUP_AVATAR_HEIGHT' => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '', 505 506 'GROUP_TYPE_FREE' => GROUP_FREE, 507 'GROUP_TYPE_OPEN' => GROUP_OPEN, 508 'GROUP_TYPE_CLOSED' => GROUP_CLOSED, 509 'GROUP_TYPE_HIDDEN' => GROUP_HIDDEN, 510 'GROUP_TYPE_SPECIAL' => GROUP_SPECIAL, 511 512 'GROUP_FREE' => $type_free, 513 'GROUP_OPEN' => $type_open, 514 'GROUP_CLOSED' => $type_closed, 515 'GROUP_HIDDEN' => $type_hidden, 516 517 'U_BACK' => $u_back, 518 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour'), 519 'UA_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour', false), 520 'U_ACTION' => "{$this->u_action}&action=$action&g=$group_id", 521 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)), 522 ) 523 ); 524 525 return; 526 break; 527 528 case 'list': 529 530 if (!$group_id) 531 { 532 trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING); 533 } 534 535 $this->page_title = 'GROUP_MEMBERS'; 536 537 // Total number of group leaders 538 $sql = 'SELECT COUNT(user_id) AS total_leaders 539 FROM ' . USER_GROUP_TABLE . " 540 WHERE group_id = $group_id 541 AND group_leader = 1"; 542 $result = $db->sql_query($sql); 543 $total_leaders = (int) $db->sql_fetchfield('total_leaders'); 544 $db->sql_freeresult($result); 545 546 // Total number of group members (non-leaders) 547 $sql = 'SELECT COUNT(user_id) AS total_members 548 FROM ' . USER_GROUP_TABLE . " 549 WHERE group_id = $group_id 550 AND group_leader <> 1"; 551 $result = $db->sql_query($sql); 552 $total_members = (int) $db->sql_fetchfield('total_members'); 553 $db->sql_freeresult($result); 554 555 // Grab the members 556 $sql = 'SELECT u.user_id, u.username, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending 557 FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug 558 WHERE ug.group_id = $group_id 559 AND u.user_id = ug.user_id 560 ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username"; 561 $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start); 562 563 $leader = $member = 0; 564 $group_data = array( 565 'leader' => array(), 566 'member' => array(), 567 ); 568 569 while ($row = $db->sql_fetchrow($result)) 570 { 571 $type = ($row['group_leader']) ? 'leader' : 'member'; 572 573 $group_data[$type][$$type]['user_id'] = $row['user_id']; 574 $group_data[$type][$$type]['group_id'] = $row['group_id']; 575 $group_data[$type][$$type]['username'] = $row['username']; 576 $group_data[$type][$$type]['user_regdate'] = $row['user_regdate']; 577 $group_data[$type][$$type]['user_posts'] = $row['user_posts']; 578 $group_data[$type][$$type]['user_pending'] = ($row['user_pending']) ? 1 : 0; 579 580 $$type++; 581 } 582 $db->sql_freeresult($result); 583 584 $s_action_options = ''; 585 $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE'); 586 587 foreach ($options as $option => $lang) 588 { 589 $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>'; 590 } 591 592 $template->assign_vars(array( 593 'S_LIST' => true, 594 'S_GROUP_SPECIAL' => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false, 595 'S_ACTION_OPTIONS' => $s_action_options, 596 597 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start), 598 'PAGINATION' => generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start, true), 599 'GROUP_NAME' => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'], 600 601 'U_ACTION' => $this->u_action . "&g=$group_id", 602 'U_BACK' => $this->u_action, 603 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=list&field=usernames'), 604 'UA_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=list&field=usernames', false), 605 'U_DEFAULT_ALL' => "{$this->u_action}&action=default&g=$group_id") 606 ); 607 608 foreach ($group_data['leader'] as $row) 609 { 610 $template->assign_block_vars('leader', array( 611 'U_USER_EDIT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&action=edit&u={$row['user_id']}"), 612 613 'USERNAME' => $row['username'], 614 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false, 615 'JOINED' => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ', 616 'USER_POSTS' => $row['user_posts'], 617 'USER_ID' => $row['user_id']) 618 ); 619 } 620 621 $pending = false; 622 623 foreach ($group_data['member'] as $row) 624 { 625 if ($row['user_pending'] && !$pending) 626 { 627 $template->assign_block_vars('member', array( 628 'S_PENDING' => true) 629 ); 630 631 $pending = true; 632 } 633 634 $template->assign_block_vars('member', array( 635 'U_USER_EDIT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&action=edit&u={$row['user_id']}"), 636 637 'USERNAME' => $row['username'], 638 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false, 639 'JOINED' => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ', 640 'USER_POSTS' => $row['user_posts'], 641 'USER_ID' => $row['user_id']) 642 ); 643 } 644 645 return; 646 break; 647 } 648 649 $template->assign_vars(array( 650 'U_ACTION' => $this->u_action, 651 'S_GROUP_ADD' => ($auth->acl_get('a_groupadd')) ? true : false) 652 ); 653 654 $sql = 'SELECT g.group_id, g.group_name, g.group_type, COUNT(ug.user_id) AS total_members 655 FROM ' . GROUPS_TABLE . ' g 656 LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON (g.group_id = ug.group_id) 657 GROUP BY g.group_id, g.group_name, g.group_type 658 ORDER BY g.group_type ASC, g.group_name'; 659 $result = $db->sql_query($sql); 660 661 $special = $normal = 0; 662 $group_ary = array(); 663 664 while ($row = $db->sql_fetchrow($result)) 665 { 666 $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal'; 667 668 $group_ary[$type][$$type]['group_id'] = $row['group_id']; 669 $group_ary[$type][$$type]['group_name'] = $row['group_name']; 670 $group_ary[$type][$$type]['group_type'] = $row['group_type']; 671 $group_ary[$type][$$type]['total_members'] = $row['total_members']; 672 673 $$type++; 674 } 675 $db->sql_freeresult($result); 676 677 ksort($group_ary); 678 679 $special_toggle = false; 680 foreach ($group_ary as $type => $row_ary) 681 { 682 if ($type == 'special') 683 { 684 $template->assign_block_vars('groups', array( 685 'S_SPECIAL' => true) 686 ); 687 } 688 689 foreach ($row_ary as $row) 690 { 691 $group_id = $row['group_id']; 692 $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name']; 693 694 $template->assign_block_vars('groups', array( 695 'U_LIST' => "{$this->u_action}&action=list&g=$group_id", 696 'U_EDIT' => "{$this->u_action}&action=edit&g=$group_id", 697 'U_DELETE' => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&action=delete&g=$group_id" : '', 698 699 'S_GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL) ? true : false, 700 701 'GROUP_NAME' => $group_name, 702 'TOTAL_MEMBERS' => $row['total_members'], 703 ) 704 ); 705 } 706 } 707 } 708 } 709 710 ?>
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 |