[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package acp 5 * @version $Id$ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * @ignore 13 */ 14 if (!defined('IN_PHPBB')) 15 { 16 exit; 17 } 18 19 /** 20 * @package acp 21 */ 22 class acp_permissions 23 { 24 var $u_action; 25 var $permission_dropdown; 26 27 function main($id, $mode) 28 { 29 global $db, $user, $auth, $template, $cache; 30 global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; 31 32 include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); 33 include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx); 34 35 $auth_admin = new auth_admin(); 36 37 $user->add_lang('acp/permissions'); 38 add_permission_language(); 39 40 $this->tpl_name = 'acp_permissions'; 41 42 // Trace has other vars 43 if ($mode == 'trace') 44 { 45 $user_id = request_var('u', 0); 46 $forum_id = request_var('f', 0); 47 $permission = request_var('auth', ''); 48 49 $this->tpl_name = 'permission_trace'; 50 51 if ($user_id && isset($auth_admin->acl_options['id'][$permission]) && $auth->acl_get('a_viewauth')) 52 { 53 $this->page_title = sprintf($user->lang['TRACE_PERMISSION'], $user->lang['acl_' . $permission]['lang']); 54 $this->permission_trace($user_id, $forum_id, $permission); 55 return; 56 } 57 trigger_error('NO_MODE', E_USER_ERROR); 58 } 59 60 // Copy forum permissions 61 if ($mode == 'setting_forum_copy') 62 { 63 $this->tpl_name = 'permission_forum_copy'; 64 65 if ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth')) 66 { 67 $this->page_title = 'ACP_FORUM_PERMISSIONS_COPY'; 68 $this->copy_forum_permissions(); 69 return; 70 } 71 72 trigger_error('NO_MODE', E_USER_ERROR); 73 } 74 75 // Set some vars 76 $action = request_var('action', array('' => 0)); 77 $action = key($action); 78 $action = (isset($_POST['psubmit'])) ? 'apply_permissions' : $action; 79 80 $all_forums = request_var('all_forums', 0); 81 $subforum_id = request_var('subforum_id', 0); 82 $forum_id = request_var('forum_id', array(0)); 83 84 $username = request_var('username', array(''), true); 85 $usernames = request_var('usernames', '', true); 86 $user_id = request_var('user_id', array(0)); 87 88 $group_id = request_var('group_id', array(0)); 89 $select_all_groups = request_var('select_all_groups', 0); 90 91 $form_name = 'acp_permissions'; 92 add_form_key($form_name); 93 94 // If select all groups is set, we pre-build the group id array (this option is used for other screens to link to the permission settings screen) 95 if ($select_all_groups) 96 { 97 // Add default groups to selection 98 $sql_and = (!$config['coppa_enable']) ? " AND group_name <> 'REGISTERED_COPPA'" : ''; 99 100 $sql = 'SELECT group_id 101 FROM ' . GROUPS_TABLE . ' 102 WHERE group_type = ' . GROUP_SPECIAL . " 103 $sql_and"; 104 $result = $db->sql_query($sql); 105 106 while ($row = $db->sql_fetchrow($result)) 107 { 108 $group_id[] = $row['group_id']; 109 } 110 $db->sql_freeresult($result); 111 } 112 113 // Map usernames to ids and vice versa 114 if ($usernames) 115 { 116 $username = explode("\n", $usernames); 117 } 118 unset($usernames); 119 120 if (sizeof($username) && !sizeof($user_id)) 121 { 122 user_get_id_name($user_id, $username); 123 124 if (!sizeof($user_id)) 125 { 126 trigger_error($user->lang['SELECTED_USER_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING); 127 } 128 } 129 unset($username); 130 131 // Build forum ids (of all forums are checked or subforum listing used) 132 if ($all_forums) 133 { 134 $sql = 'SELECT forum_id 135 FROM ' . FORUMS_TABLE . ' 136 ORDER BY left_id'; 137 $result = $db->sql_query($sql); 138 139 $forum_id = array(); 140 while ($row = $db->sql_fetchrow($result)) 141 { 142 $forum_id[] = (int) $row['forum_id']; 143 } 144 $db->sql_freeresult($result); 145 } 146 else if ($subforum_id) 147 { 148 $forum_id = array(); 149 foreach (get_forum_branch($subforum_id, 'children') as $row) 150 { 151 $forum_id[] = (int) $row['forum_id']; 152 } 153 } 154 155 // Define some common variables for every mode 156 $error = array(); 157 158 $permission_scope = (strpos($mode, '_global') !== false) ? 'global' : 'local'; 159 160 // Showing introductionary page? 161 if ($mode == 'intro') 162 { 163 $this->page_title = 'ACP_PERMISSIONS'; 164 165 $template->assign_vars(array( 166 'S_INTRO' => true) 167 ); 168 169 return; 170 } 171 172 switch ($mode) 173 { 174 case 'setting_user_global': 175 case 'setting_group_global': 176 $this->permission_dropdown = array('u_', 'm_', 'a_'); 177 $permission_victim = ($mode == 'setting_user_global') ? array('user') : array('group'); 178 $this->page_title = ($mode == 'setting_user_global') ? 'ACP_USERS_PERMISSIONS' : 'ACP_GROUPS_PERMISSIONS'; 179 break; 180 181 case 'setting_user_local': 182 case 'setting_group_local': 183 $this->permission_dropdown = array('f_', 'm_'); 184 $permission_victim = ($mode == 'setting_user_local') ? array('user', 'forums') : array('group', 'forums'); 185 $this->page_title = ($mode == 'setting_user_local') ? 'ACP_USERS_FORUM_PERMISSIONS' : 'ACP_GROUPS_FORUM_PERMISSIONS'; 186 break; 187 188 case 'setting_admin_global': 189 case 'setting_mod_global': 190 $this->permission_dropdown = (strpos($mode, '_admin_') !== false) ? array('a_') : array('m_'); 191 $permission_victim = array('usergroup'); 192 $this->page_title = ($mode == 'setting_admin_global') ? 'ACP_ADMINISTRATORS' : 'ACP_GLOBAL_MODERATORS'; 193 break; 194 195 case 'setting_mod_local': 196 case 'setting_forum_local': 197 $this->permission_dropdown = ($mode == 'setting_mod_local') ? array('m_') : array('f_'); 198 $permission_victim = array('forums', 'usergroup'); 199 $this->page_title = ($mode == 'setting_mod_local') ? 'ACP_FORUM_MODERATORS' : 'ACP_FORUM_PERMISSIONS'; 200 break; 201 202 case 'view_admin_global': 203 case 'view_user_global': 204 case 'view_mod_global': 205 $this->permission_dropdown = ($mode == 'view_admin_global') ? array('a_') : (($mode == 'view_user_global') ? array('u_') : array('m_')); 206 $permission_victim = array('usergroup_view'); 207 $this->page_title = ($mode == 'view_admin_global') ? 'ACP_VIEW_ADMIN_PERMISSIONS' : (($mode == 'view_user_global') ? 'ACP_VIEW_USER_PERMISSIONS' : 'ACP_VIEW_GLOBAL_MOD_PERMISSIONS'); 208 break; 209 210 case 'view_mod_local': 211 case 'view_forum_local': 212 $this->permission_dropdown = ($mode == 'view_mod_local') ? array('m_') : array('f_'); 213 $permission_victim = array('forums', 'usergroup_view'); 214 $this->page_title = ($mode == 'view_mod_local') ? 'ACP_VIEW_FORUM_MOD_PERMISSIONS' : 'ACP_VIEW_FORUM_PERMISSIONS'; 215 break; 216 217 default: 218 trigger_error('NO_MODE', E_USER_ERROR); 219 break; 220 } 221 222 $template->assign_vars(array( 223 'L_TITLE' => $user->lang[$this->page_title], 224 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN']) 225 ); 226 227 // Get permission type 228 $permission_type = request_var('type', $this->permission_dropdown[0]); 229 230 if (!in_array($permission_type, $this->permission_dropdown)) 231 { 232 trigger_error($user->lang['WRONG_PERMISSION_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING); 233 } 234 235 // Handle actions 236 if (strpos($mode, 'setting_') === 0 && $action) 237 { 238 switch ($action) 239 { 240 case 'delete': 241 if (confirm_box(true)) 242 { 243 // All users/groups selected? 244 $all_users = (isset($_POST['all_users'])) ? true : false; 245 $all_groups = (isset($_POST['all_groups'])) ? true : false; 246 247 if ($all_users || $all_groups) 248 { 249 $items = $this->retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type); 250 251 if ($all_users && sizeof($items['user_ids'])) 252 { 253 $user_id = $items['user_ids']; 254 } 255 else if ($all_groups && sizeof($items['group_ids'])) 256 { 257 $group_id = $items['group_ids']; 258 } 259 } 260 261 if (sizeof($user_id) || sizeof($group_id)) 262 { 263 $this->remove_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id, $forum_id); 264 } 265 else 266 { 267 trigger_error($user->lang['NO_USER_GROUP_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING); 268 } 269 } 270 else 271 { 272 if (isset($_POST['cancel'])) 273 { 274 $u_redirect = $this->u_action . '&type=' . $permission_type; 275 foreach ($forum_id as $fid) 276 { 277 $u_redirect .= '&forum_id[]=' . $fid; 278 } 279 redirect($u_redirect); 280 } 281 282 $s_hidden_fields = array( 283 'i' => $id, 284 'mode' => $mode, 285 'action' => array($action => 1), 286 'user_id' => $user_id, 287 'group_id' => $group_id, 288 'forum_id' => $forum_id, 289 'type' => $permission_type, 290 ); 291 if (isset($_POST['all_users'])) 292 { 293 $s_hidden_fields['all_users'] = 1; 294 } 295 if (isset($_POST['all_groups'])) 296 { 297 $s_hidden_fields['all_groups'] = 1; 298 } 299 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields)); 300 } 301 break; 302 303 case 'apply_permissions': 304 if (!isset($_POST['setting'])) 305 { 306 trigger_error($user->lang['NO_AUTH_SETTING_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); 307 } 308 if (!check_form_key($form_name)) 309 { 310 trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING); 311 } 312 313 $this->set_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id); 314 break; 315 316 case 'apply_all_permissions': 317 if (!isset($_POST['setting'])) 318 { 319 trigger_error($user->lang['NO_AUTH_SETTING_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); 320 } 321 if (!check_form_key($form_name)) 322 { 323 trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING); 324 } 325 326 $this->set_all_permissions($mode, $permission_type, $auth_admin, $user_id, $group_id); 327 break; 328 } 329 } 330 331 332 // Setting permissions screen 333 $s_hidden_fields = build_hidden_fields(array( 334 'user_id' => $user_id, 335 'group_id' => $group_id, 336 'forum_id' => $forum_id, 337 'type' => $permission_type) 338 ); 339 340 // Go through the screens/options needed and present them in correct order 341 foreach ($permission_victim as $victim) 342 { 343 switch ($victim) 344 { 345 case 'forum_dropdown': 346 347 if (sizeof($forum_id)) 348 { 349 $this->check_existence('forum', $forum_id); 350 continue 2; 351 } 352 353 $template->assign_vars(array( 354 'S_SELECT_FORUM' => true, 355 'S_FORUM_OPTIONS' => make_forum_select(false, false, true, false, false)) 356 ); 357 358 break; 359 360 case 'forums': 361 362 if (sizeof($forum_id)) 363 { 364 $this->check_existence('forum', $forum_id); 365 continue 2; 366 } 367 368 $forum_list = make_forum_select(false, false, true, false, false, false, true); 369 370 // Build forum options 371 $s_forum_options = ''; 372 foreach ($forum_list as $f_id => $f_row) 373 { 374 $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>'; 375 } 376 377 // Build subforum options 378 $s_subforum_options = $this->build_subforum_options($forum_list); 379 380 $template->assign_vars(array( 381 'S_SELECT_FORUM' => true, 382 'S_FORUM_OPTIONS' => $s_forum_options, 383 'S_SUBFORUM_OPTIONS' => $s_subforum_options, 384 'S_FORUM_ALL' => true, 385 'S_FORUM_MULTIPLE' => true) 386 ); 387 388 break; 389 390 case 'user': 391 392 if (sizeof($user_id)) 393 { 394 $this->check_existence('user', $user_id); 395 continue 2; 396 } 397 398 $template->assign_vars(array( 399 'S_SELECT_USER' => true, 400 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=select_victim&field=username&select_single=true'), 401 )); 402 403 break; 404 405 case 'group': 406 407 if (sizeof($group_id)) 408 { 409 $this->check_existence('group', $group_id); 410 continue 2; 411 } 412 413 $template->assign_vars(array( 414 'S_SELECT_GROUP' => true, 415 'S_GROUP_OPTIONS' => group_select_options(false, false, false), // Show all groups 416 )); 417 418 break; 419 420 case 'usergroup': 421 case 'usergroup_view': 422 423 $all_users = (isset($_POST['all_users'])) ? true : false; 424 $all_groups = (isset($_POST['all_groups'])) ? true : false; 425 426 if ((sizeof($user_id) && !$all_users) || (sizeof($group_id) && !$all_groups)) 427 { 428 if (sizeof($user_id)) 429 { 430 $this->check_existence('user', $user_id); 431 } 432 433 if (sizeof($group_id)) 434 { 435 $this->check_existence('group', $group_id); 436 } 437 438 continue 2; 439 } 440 441 // Now we check the users... because the "all"-selection is different here (all defined users/groups) 442 $items = $this->retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type); 443 444 if ($all_users && sizeof($items['user_ids'])) 445 { 446 $user_id = $items['user_ids']; 447 continue 2; 448 } 449 450 if ($all_groups && sizeof($items['group_ids'])) 451 { 452 $group_id = $items['group_ids']; 453 continue 2; 454 } 455 456 $template->assign_vars(array( 457 'S_SELECT_USERGROUP' => ($victim == 'usergroup') ? true : false, 458 'S_SELECT_USERGROUP_VIEW' => ($victim == 'usergroup_view') ? true : false, 459 'S_DEFINED_USER_OPTIONS' => $items['user_ids_options'], 460 'S_DEFINED_GROUP_OPTIONS' => $items['group_ids_options'], 461 'S_ADD_GROUP_OPTIONS' => group_select_options(false, $items['group_ids'], false), // Show all groups 462 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=add_user&field=username&select_single=true'), 463 )); 464 465 break; 466 } 467 468 // The S_ALLOW_SELECT parameter below is a measure to lower memory usage. 469 // If there are more than 5 forums selected the admin is not able to select all users/groups too. 470 // We need to see if the number of forums can be increased or need to be decreased. 471 472 $template->assign_vars(array( 473 'U_ACTION' => $this->u_action, 474 'ANONYMOUS_USER_ID' => ANONYMOUS, 475 476 'S_SELECT_VICTIM' => true, 477 'S_ALLOW_ALL_SELECT' => (sizeof($forum_id) > 5) ? false : true, 478 'S_CAN_SELECT_USER' => ($auth->acl_get('a_authusers')) ? true : false, 479 'S_CAN_SELECT_GROUP' => ($auth->acl_get('a_authgroups')) ? true : false, 480 'S_HIDDEN_FIELDS' => $s_hidden_fields) 481 ); 482 483 // Let the forum names being displayed 484 if (sizeof($forum_id)) 485 { 486 $sql = 'SELECT forum_name 487 FROM ' . FORUMS_TABLE . ' 488 WHERE ' . $db->sql_in_set('forum_id', $forum_id) . ' 489 ORDER BY left_id ASC'; 490 $result = $db->sql_query($sql); 491 492 $forum_names = array(); 493 while ($row = $db->sql_fetchrow($result)) 494 { 495 $forum_names[] = $row['forum_name']; 496 } 497 $db->sql_freeresult($result); 498 499 $template->assign_vars(array( 500 'S_FORUM_NAMES' => (sizeof($forum_names)) ? true : false, 501 'FORUM_NAMES' => implode(', ', $forum_names)) 502 ); 503 } 504 505 return; 506 } 507 508 // Do not allow forum_ids being set and no other setting defined (will bog down the server too much) 509 if (sizeof($forum_id) && !sizeof($user_id) && !sizeof($group_id)) 510 { 511 trigger_error($user->lang['ONLY_FORUM_DEFINED'] . adm_back_link($this->u_action), E_USER_WARNING); 512 } 513 514 $template->assign_vars(array( 515 'S_PERMISSION_DROPDOWN' => (sizeof($this->permission_dropdown) > 1) ? $this->build_permission_dropdown($this->permission_dropdown, $permission_type, $permission_scope) : false, 516 'L_PERMISSION_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)], 517 518 'U_ACTION' => $this->u_action, 519 'S_HIDDEN_FIELDS' => $s_hidden_fields) 520 ); 521 522 if (strpos($mode, 'setting_') === 0) 523 { 524 $template->assign_vars(array( 525 'S_SETTING_PERMISSIONS' => true) 526 ); 527 528 $hold_ary = $auth_admin->get_mask('set', (sizeof($user_id)) ? $user_id : false, (sizeof($group_id)) ? $group_id : false, (sizeof($forum_id)) ? $forum_id : false, $permission_type, $permission_scope, ACL_NO); 529 $auth_admin->display_mask('set', $permission_type, $hold_ary, ((sizeof($user_id)) ? 'user' : 'group'), (($permission_scope == 'local') ? true : false)); 530 } 531 else 532 { 533 $template->assign_vars(array( 534 'S_VIEWING_PERMISSIONS' => true) 535 ); 536 537 $hold_ary = $auth_admin->get_mask('view', (sizeof($user_id)) ? $user_id : false, (sizeof($group_id)) ? $group_id : false, (sizeof($forum_id)) ? $forum_id : false, $permission_type, $permission_scope, ACL_NEVER); 538 $auth_admin->display_mask('view', $permission_type, $hold_ary, ((sizeof($user_id)) ? 'user' : 'group'), (($permission_scope == 'local') ? true : false)); 539 } 540 } 541 542 /** 543 * Build +subforum options 544 */ 545 function build_subforum_options($forum_list) 546 { 547 global $user; 548 549 $s_options = ''; 550 551 $forum_list = array_merge($forum_list); 552 553 foreach ($forum_list as $key => $row) 554 { 555 if ($row['disabled']) 556 { 557 continue; 558 } 559 560 $s_options .= '<option value="' . $row['forum_id'] . '"' . (($row['selected']) ? ' selected="selected"' : '') . '>' . $row['padding'] . $row['forum_name']; 561 562 // We check if a branch is there... 563 $branch_there = false; 564 565 foreach (array_slice($forum_list, $key + 1) as $temp_row) 566 { 567 if ($temp_row['left_id'] > $row['left_id'] && $temp_row['left_id'] < $row['right_id']) 568 { 569 $branch_there = true; 570 break; 571 } 572 continue; 573 } 574 575 if ($branch_there) 576 { 577 $s_options .= ' [' . $user->lang['PLUS_SUBFORUMS'] . ']'; 578 } 579 580 $s_options .= '</option>'; 581 } 582 583 return $s_options; 584 } 585 586 /** 587 * Build dropdown field for changing permission types 588 */ 589 function build_permission_dropdown($options, $default_option, $permission_scope) 590 { 591 global $user, $auth; 592 593 $s_dropdown_options = ''; 594 foreach ($options as $setting) 595 { 596 if (!$auth->acl_get('a_' . str_replace('_', '', $setting) . 'auth')) 597 { 598 continue; 599 } 600 601 $selected = ($setting == $default_option) ? ' selected="selected"' : ''; 602 $l_setting = (isset($user->lang['permission_type'][$permission_scope][$setting])) ? $user->lang['permission_type'][$permission_scope][$setting] : $user->lang['permission_type'][$setting]; 603 $s_dropdown_options .= '<option value="' . $setting . '"' . $selected . '>' . $l_setting . '</option>'; 604 } 605 606 return $s_dropdown_options; 607 } 608 609 /** 610 * Check if selected items exist. Remove not found ids and if empty return error. 611 */ 612 function check_existence($mode, &$ids) 613 { 614 global $db, $user; 615 616 switch ($mode) 617 { 618 case 'user': 619 $table = USERS_TABLE; 620 $sql_id = 'user_id'; 621 break; 622 623 case 'group': 624 $table = GROUPS_TABLE; 625 $sql_id = 'group_id'; 626 break; 627 628 case 'forum': 629 $table = FORUMS_TABLE; 630 $sql_id = 'forum_id'; 631 break; 632 } 633 634 if (sizeof($ids)) 635 { 636 $sql = "SELECT $sql_id 637 FROM $table 638 WHERE " . $db->sql_in_set($sql_id, $ids); 639 $result = $db->sql_query($sql); 640 641 $ids = array(); 642 while ($row = $db->sql_fetchrow($result)) 643 { 644 $ids[] = (int) $row[$sql_id]; 645 } 646 $db->sql_freeresult($result); 647 } 648 649 if (!sizeof($ids)) 650 { 651 trigger_error($user->lang['SELECTED_' . strtoupper($mode) . '_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING); 652 } 653 } 654 655 /** 656 * Apply permissions 657 */ 658 function set_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id) 659 { 660 global $user, $auth; 661 662 $psubmit = request_var('psubmit', array(0 => array(0 => 0))); 663 664 // User or group to be set? 665 $ug_type = (sizeof($user_id)) ? 'user' : 'group'; 666 667 // Check the permission setting again 668 if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's')) 669 { 670 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 671 } 672 673 $ug_id = $forum_id = 0; 674 675 // We loop through the auth settings defined in our submit 676 list($ug_id, ) = each($psubmit); 677 list($forum_id, ) = each($psubmit[$ug_id]); 678 679 if (empty($_POST['setting']) || empty($_POST['setting'][$ug_id]) || empty($_POST['setting'][$ug_id][$forum_id]) || !is_array($_POST['setting'][$ug_id][$forum_id])) 680 { 681 trigger_error('WRONG_PERMISSION_SETTING_FORMAT', E_USER_WARNING); 682 } 683 684 // We obtain and check $_POST['setting'][$ug_id][$forum_id] directly and not using request_var() because request_var() 685 // currently does not support the amount of dimensions required. ;) 686 // $auth_settings = request_var('setting', array(0 => array(0 => array('' => 0)))); 687 $auth_settings = array_map('intval', $_POST['setting'][$ug_id][$forum_id]); 688 689 // Do we have a role we want to set? 690 $assigned_role = (isset($_POST['role'][$ug_id][$forum_id])) ? (int) $_POST['role'][$ug_id][$forum_id] : 0; 691 692 // Do the admin want to set these permissions to other items too? 693 $inherit = request_var('inherit', array(0 => array(0))); 694 695 $ug_id = array($ug_id); 696 $forum_id = array($forum_id); 697 698 if (sizeof($inherit)) 699 { 700 foreach ($inherit as $_ug_id => $forum_id_ary) 701 { 702 // Inherit users/groups? 703 if (!in_array($_ug_id, $ug_id)) 704 { 705 $ug_id[] = $_ug_id; 706 } 707 708 // Inherit forums? 709 $forum_id = array_merge($forum_id, array_keys($forum_id_ary)); 710 } 711 } 712 713 $forum_id = array_unique($forum_id); 714 715 // If the auth settings differ from the assigned role, then do not set a role... 716 if ($assigned_role) 717 { 718 if (!$this->check_assigned_role($assigned_role, $auth_settings)) 719 { 720 $assigned_role = 0; 721 } 722 } 723 724 // Update the permission set... 725 $auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, $assigned_role); 726 727 // Do we need to recache the moderator lists? 728 if ($permission_type == 'm_') 729 { 730 cache_moderators(); 731 } 732 733 // Remove users who are now moderators or admins from everyones foes list 734 if ($permission_type == 'm_' || $permission_type == 'a_') 735 { 736 update_foes($group_id, $user_id); 737 } 738 739 $this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id); 740 741 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action)); 742 } 743 744 /** 745 * Apply all permissions 746 */ 747 function set_all_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id) 748 { 749 global $user, $auth; 750 751 // User or group to be set? 752 $ug_type = (sizeof($user_id)) ? 'user' : 'group'; 753 754 // Check the permission setting again 755 if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's')) 756 { 757 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 758 } 759 760 $auth_settings = (isset($_POST['setting'])) ? $_POST['setting'] : array(); 761 $auth_roles = (isset($_POST['role'])) ? $_POST['role'] : array(); 762 $ug_ids = $forum_ids = array(); 763 764 // We need to go through the auth settings 765 foreach ($auth_settings as $ug_id => $forum_auth_row) 766 { 767 $ug_id = (int) $ug_id; 768 $ug_ids[] = $ug_id; 769 770 foreach ($forum_auth_row as $forum_id => $auth_options) 771 { 772 $forum_id = (int) $forum_id; 773 $forum_ids[] = $forum_id; 774 775 // Check role... 776 $assigned_role = (isset($auth_roles[$ug_id][$forum_id])) ? (int) $auth_roles[$ug_id][$forum_id] : 0; 777 778 // If the auth settings differ from the assigned role, then do not set a role... 779 if ($assigned_role) 780 { 781 if (!$this->check_assigned_role($assigned_role, $auth_options)) 782 { 783 $assigned_role = 0; 784 } 785 } 786 787 // Update the permission set... 788 $auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_options, $assigned_role, false); 789 } 790 } 791 792 $auth_admin->acl_clear_prefetch(); 793 794 // Do we need to recache the moderator lists? 795 if ($permission_type == 'm_') 796 { 797 cache_moderators(); 798 } 799 800 // Remove users who are now moderators or admins from everyones foes list 801 if ($permission_type == 'm_' || $permission_type == 'a_') 802 { 803 update_foes($group_id, $user_id); 804 } 805 806 $this->log_action($mode, 'add', $permission_type, $ug_type, $ug_ids, $forum_ids); 807 808 if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local') 809 { 810 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_ids))); 811 } 812 else 813 { 814 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action)); 815 } 816 } 817 818 /** 819 * Compare auth settings with auth settings from role 820 * returns false if they differ, true if they are equal 821 */ 822 function check_assigned_role($role_id, &$auth_settings) 823 { 824 global $db; 825 826 $sql = 'SELECT o.auth_option, r.auth_setting 827 FROM ' . ACL_OPTIONS_TABLE . ' o, ' . ACL_ROLES_DATA_TABLE . ' r 828 WHERE o.auth_option_id = r.auth_option_id 829 AND r.role_id = ' . $role_id; 830 $result = $db->sql_query($sql); 831 832 $test_auth_settings = array(); 833 while ($row = $db->sql_fetchrow($result)) 834 { 835 $test_auth_settings[$row['auth_option']] = $row['auth_setting']; 836 } 837 $db->sql_freeresult($result); 838 839 // We need to add any ACL_NO setting from auth_settings to compare correctly 840 foreach ($auth_settings as $option => $setting) 841 { 842 if ($setting == ACL_NO) 843 { 844 $test_auth_settings[$option] = $setting; 845 } 846 } 847 848 if (sizeof(array_diff_assoc($auth_settings, $test_auth_settings))) 849 { 850 return false; 851 } 852 853 return true; 854 } 855 856 /** 857 * Remove permissions 858 */ 859 function remove_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id, &$forum_id) 860 { 861 global $user, $db, $auth; 862 863 // User or group to be set? 864 $ug_type = (sizeof($user_id)) ? 'user' : 'group'; 865 866 // Check the permission setting again 867 if (!$auth->acl_get('a_' . str_replace('_', '', $permission_type) . 'auth') || !$auth->acl_get('a_auth' . $ug_type . 's')) 868 { 869 trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); 870 } 871 872 $auth_admin->acl_delete($ug_type, (($ug_type == 'user') ? $user_id : $group_id), (sizeof($forum_id) ? $forum_id : false), $permission_type); 873 874 // Do we need to recache the moderator lists? 875 if ($permission_type == 'm_') 876 { 877 cache_moderators(); 878 } 879 880 $this->log_action($mode, 'del', $permission_type, $ug_type, (($ug_type == 'user') ? $user_id : $group_id), (sizeof($forum_id) ? $forum_id : array(0 => 0))); 881 882 if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local') 883 { 884 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_id))); 885 } 886 else 887 { 888 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action)); 889 } 890 } 891 892 /** 893 * Log permission changes 894 */ 895 function log_action($mode, $action, $permission_type, $ug_type, $ug_id, $forum_id) 896 { 897 global $db, $user; 898 899 if (!is_array($ug_id)) 900 { 901 $ug_id = array($ug_id); 902 } 903 904 if (!is_array($forum_id)) 905 { 906 $forum_id = array($forum_id); 907 } 908 909 // Logging ... first grab user or groupnames ... 910 $sql = ($ug_type == 'group') ? 'SELECT group_name as name, group_type FROM ' . GROUPS_TABLE . ' WHERE ' : 'SELECT username as name FROM ' . USERS_TABLE . ' WHERE '; 911 $sql .= $db->sql_in_set(($ug_type == 'group') ? 'group_id' : 'user_id', array_map('intval', $ug_id)); 912 $result = $db->sql_query($sql); 913 914 $l_ug_list = ''; 915 while ($row = $db->sql_fetchrow($result)) 916 { 917 $l_ug_list .= (($l_ug_list != '') ? ', ' : '') . ((isset($row['group_type']) && $row['group_type'] == GROUP_SPECIAL) ? '<span class="sep">' . $user->lang['G_' . $row['name']] . '</span>' : $row['name']); 918 } 919 $db->sql_freeresult($result); 920 921 $mode = str_replace('setting_', '', $mode); 922 923 if ($forum_id[0] == 0) 924 { 925 add_log('admin', 'LOG_ACL_' . strtoupper($action) . '_' . strtoupper($mode) . '_' . strtoupper($permission_type), $l_ug_list); 926 } 927 else 928 { 929 // Grab the forum details if non-zero forum_id 930 $sql = 'SELECT forum_name 931 FROM ' . FORUMS_TABLE . ' 932 WHERE ' . $db->sql_in_set('forum_id', $forum_id); 933 $result = $db->sql_query($sql); 934 935 $l_forum_list = ''; 936 while ($row = $db->sql_fetchrow($result)) 937 { 938 $l_forum_list .= (($l_forum_list != '') ? ', ' : '') . $row['forum_name']; 939 } 940 $db->sql_freeresult($result); 941 942 add_log('admin', 'LOG_ACL_' . strtoupper($action) . '_' . strtoupper($mode) . '_' . strtoupper($permission_type), $l_forum_list, $l_ug_list); 943 } 944 } 945 946 /** 947 * Display a complete trace tree for the selected permission to determine where settings are set/unset 948 */ 949 function permission_trace($user_id, $forum_id, $permission) 950 { 951 global $db, $template, $user, $auth; 952 953 if ($user_id != $user->data['user_id']) 954 { 955 $sql = 'SELECT user_id, username, user_permissions, user_type 956 FROM ' . USERS_TABLE . ' 957 WHERE user_id = ' . $user_id; 958 $result = $db->sql_query($sql); 959 $userdata = $db->sql_fetchrow($result); 960 $db->sql_freeresult($result); 961 } 962 else 963 { 964 $userdata = $user->data; 965 } 966 967 if (!$userdata) 968 { 969 trigger_error('NO_USERS', E_USER_ERROR); 970 } 971 972 $forum_name = false; 973 974 if ($forum_id) 975 { 976 $sql = 'SELECT forum_name 977 FROM ' . FORUMS_TABLE . " 978 WHERE forum_id = $forum_id"; 979 $result = $db->sql_query($sql, 3600); 980 $forum_name = $db->sql_fetchfield('forum_name'); 981 $db->sql_freeresult($result); 982 } 983 984 $back = request_var('back', 0); 985 986 $template->assign_vars(array( 987 'PERMISSION' => $user->lang['acl_' . $permission]['lang'], 988 'PERMISSION_USERNAME' => $userdata['username'], 989 'FORUM_NAME' => $forum_name, 990 991 'S_GLOBAL_TRACE' => ($forum_id) ? false : true, 992 993 'U_BACK' => ($back) ? build_url(array('f', 'back')) . "&f=$back" : '') 994 ); 995 996 $template->assign_block_vars('trace', array( 997 'WHO' => $user->lang['DEFAULT'], 998 'INFORMATION' => $user->lang['TRACE_DEFAULT'], 999 1000 'S_SETTING_NO' => true, 1001 'S_TOTAL_NO' => true) 1002 ); 1003 1004 $sql = 'SELECT DISTINCT g.group_name, g.group_id, g.group_type 1005 FROM ' . GROUPS_TABLE . ' g 1006 LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON (ug.group_id = g.group_id) 1007 WHERE ug.user_id = ' . $user_id . ' 1008 AND ug.user_pending = 0 1009 AND NOT (ug.group_leader = 1 AND g.group_skip_auth = 1) 1010 ORDER BY g.group_type DESC, g.group_id DESC'; 1011 $result = $db->sql_query($sql); 1012 1013 $groups = array(); 1014 while ($row = $db->sql_fetchrow($result)) 1015 { 1016 $groups[$row['group_id']] = array( 1017 'auth_setting' => ACL_NO, 1018 'group_name' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'] 1019 ); 1020 } 1021 $db->sql_freeresult($result); 1022 1023 $total = ACL_NO; 1024 $add_key = (($forum_id) ? '_LOCAL' : ''); 1025 1026 if (sizeof($groups)) 1027 { 1028 // Get group auth settings 1029 $hold_ary = $auth->acl_group_raw_data(array_keys($groups), $permission, $forum_id); 1030 1031 foreach ($hold_ary as $group_id => $forum_ary) 1032 { 1033 $groups[$group_id]['auth_setting'] = $hold_ary[$group_id][$forum_id][$permission]; 1034 } 1035 unset($hold_ary); 1036 1037 foreach ($groups as $id => $row) 1038 { 1039 switch ($row['auth_setting']) 1040 { 1041 case ACL_NO: 1042 $information = $user->lang['TRACE_GROUP_NO' . $add_key]; 1043 break; 1044 1045 case ACL_YES: 1046 $information = ($total == ACL_YES) ? $user->lang['TRACE_GROUP_YES_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_GROUP_YES_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_GROUP_YES_TOTAL_NO' . $add_key]); 1047 $total = ($total == ACL_NO) ? ACL_YES : $total; 1048 break; 1049 1050 case ACL_NEVER: 1051 $information = ($total == ACL_YES) ? $user->lang['TRACE_GROUP_NEVER_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_GROUP_NEVER_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_GROUP_NEVER_TOTAL_NO' . $add_key]); 1052 $total = ACL_NEVER; 1053 break; 1054 } 1055 1056 $template->assign_block_vars('trace', array( 1057 'WHO' => $row['group_name'], 1058 'INFORMATION' => $information, 1059 1060 'S_SETTING_NO' => ($row['auth_setting'] == ACL_NO) ? true : false, 1061 'S_SETTING_YES' => ($row['auth_setting'] == ACL_YES) ? true : false, 1062 'S_SETTING_NEVER' => ($row['auth_setting'] == ACL_NEVER) ? true : false, 1063 'S_TOTAL_NO' => ($total == ACL_NO) ? true : false, 1064 'S_TOTAL_YES' => ($total == ACL_YES) ? true : false, 1065 'S_TOTAL_NEVER' => ($total == ACL_NEVER) ? true : false) 1066 ); 1067 } 1068 } 1069 1070 // Get user specific permission... globally or for this forum 1071 $hold_ary = $auth->acl_user_raw_data($user_id, $permission, $forum_id); 1072 $auth_setting = (!sizeof($hold_ary)) ? ACL_NO : $hold_ary[$user_id][$forum_id][$permission]; 1073 1074 switch ($auth_setting) 1075 { 1076 case ACL_NO: 1077 $information = ($total == ACL_NO) ? $user->lang['TRACE_USER_NO_TOTAL_NO' . $add_key] : $user->lang['TRACE_USER_KEPT' . $add_key]; 1078 $total = ($total == ACL_NO) ? ACL_NEVER : $total; 1079 break; 1080 1081 case ACL_YES: 1082 $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_YES_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_USER_YES_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_USER_YES_TOTAL_NO' . $add_key]); 1083 $total = ($total == ACL_NO) ? ACL_YES : $total; 1084 break; 1085 1086 case ACL_NEVER: 1087 $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_NEVER_TOTAL_YES' . $add_key] : (($total == ACL_NEVER) ? $user->lang['TRACE_USER_NEVER_TOTAL_NEVER' . $add_key] : $user->lang['TRACE_USER_NEVER_TOTAL_NO' . $add_key]); 1088 $total = ACL_NEVER; 1089 break; 1090 } 1091 1092 $template->assign_block_vars('trace', array( 1093 'WHO' => $userdata['username'], 1094 'INFORMATION' => $information, 1095 1096 'S_SETTING_NO' => ($auth_setting == ACL_NO) ? true : false, 1097 'S_SETTING_YES' => ($auth_setting == ACL_YES) ? true : false, 1098 'S_SETTING_NEVER' => ($auth_setting == ACL_NEVER) ? true : false, 1099 'S_TOTAL_NO' => false, 1100 'S_TOTAL_YES' => ($total == ACL_YES) ? true : false, 1101 'S_TOTAL_NEVER' => ($total == ACL_NEVER) ? true : false) 1102 ); 1103 1104 if ($forum_id != 0 && isset($auth->acl_options['global'][$permission])) 1105 { 1106 if ($user_id != $user->data['user_id']) 1107 { 1108 $auth2 = new auth(); 1109 $auth2->acl($userdata); 1110 $auth_setting = $auth2->acl_get($permission); 1111 } 1112 else 1113 { 1114 $auth_setting = $auth->acl_get($permission); 1115 } 1116 1117 if ($auth_setting) 1118 { 1119 $information = ($total == ACL_YES) ? $user->lang['TRACE_USER_GLOBAL_YES_TOTAL_YES'] : $user->lang['TRACE_USER_GLOBAL_YES_TOTAL_NEVER']; 1120 $total = ACL_YES; 1121 } 1122 else 1123 { 1124 $information = $user->lang['TRACE_USER_GLOBAL_NEVER_TOTAL_KEPT']; 1125 } 1126 1127 // If there is no auth information we do not need to worry the user by showing non-relevant data. 1128 if ($auth_setting) 1129 { 1130 $template->assign_block_vars('trace', array( 1131 'WHO' => sprintf($user->lang['TRACE_GLOBAL_SETTING'], $userdata['username']), 1132 'INFORMATION' => sprintf($information, '<a href="' . $this->u_action . "&u=$user_id&f=0&auth=$permission&back=$forum_id\">", '</a>'), 1133 1134 'S_SETTING_NO' => false, 1135 'S_SETTING_YES' => $auth_setting, 1136 'S_SETTING_NEVER' => !$auth_setting, 1137 'S_TOTAL_NO' => false, 1138 'S_TOTAL_YES' => ($total == ACL_YES) ? true : false, 1139 'S_TOTAL_NEVER' => ($total == ACL_NEVER) ? true : false) 1140 ); 1141 } 1142 } 1143 1144 // Take founder status into account, overwriting the default values 1145 if ($userdata['user_type'] == USER_FOUNDER && strpos($permission, 'a_') === 0) 1146 { 1147 $template->assign_block_vars('trace', array( 1148 'WHO' => $userdata['username'], 1149 'INFORMATION' => $user->lang['TRACE_USER_FOUNDER'], 1150 1151 'S_SETTING_NO' => ($auth_setting == ACL_NO) ? true : false, 1152 'S_SETTING_YES' => ($auth_setting == ACL_YES) ? true : false, 1153 'S_SETTING_NEVER' => ($auth_setting == ACL_NEVER) ? true : false, 1154 'S_TOTAL_NO' => false, 1155 'S_TOTAL_YES' => true, 1156 'S_TOTAL_NEVER' => false) 1157 ); 1158 1159 $total = ACL_YES; 1160 } 1161 1162 // Total value... 1163 $template->assign_vars(array( 1164 'S_RESULT_NO' => ($total == ACL_NO) ? true : false, 1165 'S_RESULT_YES' => ($total == ACL_YES) ? true : false, 1166 'S_RESULT_NEVER' => ($total == ACL_NEVER) ? true : false, 1167 )); 1168 } 1169 1170 /** 1171 * Handles copying permissions from one forum to others 1172 */ 1173 function copy_forum_permissions() 1174 { 1175 global $auth, $cache, $template, $user; 1176 1177 $user->add_lang('acp/forums'); 1178 1179 $submit = isset($_POST['submit']) ? true : false; 1180 1181 if ($submit) 1182 { 1183 $src = request_var('src_forum_id', 0); 1184 $dest = request_var('dest_forum_ids', array(0)); 1185 1186 if (confirm_box(true)) 1187 { 1188 if (copy_forum_permissions($src, $dest)) 1189 { 1190 cache_moderators(); 1191 1192 $auth->acl_clear_prefetch(); 1193 $cache->destroy('sql', FORUMS_TABLE); 1194 1195 trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action)); 1196 } 1197 else 1198 { 1199 trigger_error($user->lang['SELECTED_FORUM_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING); 1200 } 1201 } 1202 else 1203 { 1204 $s_hidden_fields = array( 1205 'submit' => $submit, 1206 'src_forum_id' => $src, 1207 'dest_forum_ids' => $dest, 1208 ); 1209 1210 $s_hidden_fields = build_hidden_fields($s_hidden_fields); 1211 1212 confirm_box(false, $user->lang['COPY_PERMISSIONS_CONFIRM'], $s_hidden_fields); 1213 } 1214 } 1215 1216 $template->assign_vars(array( 1217 'S_FORUM_OPTIONS' => make_forum_select(false, false, false, false, false), 1218 )); 1219 } 1220 1221 /** 1222 * Get already assigned users/groups 1223 */ 1224 function retrieve_defined_user_groups($permission_scope, $forum_id, $permission_type) 1225 { 1226 global $db, $user; 1227 1228 $sql_forum_id = ($permission_scope == 'global') ? 'AND a.forum_id = 0' : ((sizeof($forum_id)) ? 'AND ' . $db->sql_in_set('a.forum_id', $forum_id) : 'AND a.forum_id <> 0'); 1229 1230 // Permission options are only able to be a permission set... therefore we will pre-fetch the possible options and also the possible roles 1231 $option_ids = $role_ids = array(); 1232 1233 $sql = 'SELECT auth_option_id 1234 FROM ' . ACL_OPTIONS_TABLE . ' 1235 WHERE auth_option ' . $db->sql_like_expression($permission_type . $db->any_char); 1236 $result = $db->sql_query($sql); 1237 1238 while ($row = $db->sql_fetchrow($result)) 1239 { 1240 $option_ids[] = (int) $row['auth_option_id']; 1241 } 1242 $db->sql_freeresult($result); 1243 1244 if (sizeof($option_ids)) 1245 { 1246 $sql = 'SELECT DISTINCT role_id 1247 FROM ' . ACL_ROLES_DATA_TABLE . ' 1248 WHERE ' . $db->sql_in_set('auth_option_id', $option_ids); 1249 $result = $db->sql_query($sql); 1250 1251 while ($row = $db->sql_fetchrow($result)) 1252 { 1253 $role_ids[] = (int) $row['role_id']; 1254 } 1255 $db->sql_freeresult($result); 1256 } 1257 1258 if (sizeof($option_ids) && sizeof($role_ids)) 1259 { 1260 $sql_where = 'AND (' . $db->sql_in_set('a.auth_option_id', $option_ids) . ' OR ' . $db->sql_in_set('a.auth_role_id', $role_ids) . ')'; 1261 } 1262 else if (sizeof($role_ids)) 1263 { 1264 $sql_where = 'AND ' . $db->sql_in_set('a.auth_role_id', $role_ids); 1265 } 1266 else if (sizeof($option_ids)) 1267 { 1268 $sql_where = 'AND ' . $db->sql_in_set('a.auth_option_id', $option_ids); 1269 } 1270 1271 // Not ideal, due to the filesort, non-use of indexes, etc. 1272 $sql = 'SELECT DISTINCT u.user_id, u.username, u.username_clean, u.user_regdate 1273 FROM ' . USERS_TABLE . ' u, ' . ACL_USERS_TABLE . " a 1274 WHERE u.user_id = a.user_id 1275 $sql_forum_id 1276 $sql_where 1277 ORDER BY u.username_clean, u.user_regdate ASC"; 1278 $result = $db->sql_query($sql); 1279 1280 $s_defined_user_options = ''; 1281 $defined_user_ids = array(); 1282 while ($row = $db->sql_fetchrow($result)) 1283 { 1284 $s_defined_user_options .= '<option value="' . $row['user_id'] . '">' . $row['username'] . '</option>'; 1285 $defined_user_ids[] = $row['user_id']; 1286 } 1287 $db->sql_freeresult($result); 1288 1289 $sql = 'SELECT DISTINCT g.group_type, g.group_name, g.group_id 1290 FROM ' . GROUPS_TABLE . ' g, ' . ACL_GROUPS_TABLE . " a 1291 WHERE g.group_id = a.group_id 1292 $sql_forum_id 1293 $sql_where 1294 ORDER BY g.group_type DESC, g.group_name ASC"; 1295 $result = $db->sql_query($sql); 1296 1297 $s_defined_group_options = ''; 1298 $defined_group_ids = array(); 1299 while ($row = $db->sql_fetchrow($result)) 1300 { 1301 $s_defined_group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>'; 1302 $defined_group_ids[] = $row['group_id']; 1303 } 1304 $db->sql_freeresult($result); 1305 1306 return array( 1307 'group_ids' => $defined_group_ids, 1308 'group_ids_options' => $s_defined_group_options, 1309 'user_ids' => $defined_user_ids, 1310 'user_ids_options' => $s_defined_user_options 1311 ); 1312 } 1313 } 1314 1315 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Oct 2 15:03:47 2013 | Cross-referenced by PHPXref 0.7.1 |