| [ Index ] |
PHP Cross Reference of MyBB 1.8.40 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * MyBB 1.8 4 * Copyright 2014 MyBB Group, All Rights Reserved 5 * 6 * Website: http://www.mybb.com 7 * License: http://www.mybb.com/about/license 8 * 9 */ 10 11 // Array of usergroup permission fields and their default values. 12 $usergroup_permissions = array( 13 "isbannedgroup" => 0, 14 "canview" => 1, 15 "canviewthreads" => 1, 16 "canviewprofiles" => 1, 17 "candlattachments" => 1, 18 "canviewboardclosed" => 1, 19 "canpostthreads" => 1, 20 "canpostreplys" => 1, 21 "canpostattachments" => 1, 22 "canratethreads" => 1, 23 "modposts" => 0, 24 "modthreads" => 0, 25 "modattachments" => 0, 26 "mod_edit_posts" => 0, 27 "caneditposts" => 1, 28 "candeleteposts" => 1, 29 "candeletethreads" => 1, 30 "caneditattachments" => 1, 31 "canviewdeletionnotice" => 1, 32 "canpostpolls" => 1, 33 "canvotepolls" => 1, 34 "canundovotes" => 0, 35 "canusepms" => 1, 36 "cansendpms" => 1, 37 "cantrackpms" => 1, 38 "candenypmreceipts" => 1, 39 "pmquota" => 100, 40 "maxpmrecipients" => 5, 41 "cansendemail" => 1, 42 "cansendemailoverride" => 0, 43 "maxemails" => 4, 44 "emailfloodtime" => 5, 45 "canviewmemberlist" => 1, 46 "canviewcalendar" => 1, 47 "canaddevents" => 1, 48 "canbypasseventmod" => 0, 49 "canmoderateevents" => 0, 50 "canviewonline" => 1, 51 "canviewwolinvis" => 0, 52 "canviewonlineips" => 0, 53 "cancp" => 0, 54 "issupermod" => 0, 55 "cansearch" => 1, 56 "canusercp" => 1, 57 "canuploadavatars" => 1, 58 "canratemembers" => 1, 59 "canchangename" => 0, 60 "canbeinvisible" => 1, 61 "canbereported" => 0, 62 "canchangewebsite" => 1, 63 "showforumteam" => 0, 64 "usereputationsystem" => 1, 65 "cangivereputations" => 1, 66 "candeletereputations" => 1, 67 "reputationpower" => 1, 68 "maxreputationsday" => 5, 69 "maxreputationsperuser" => 0, 70 "maxreputationsperthread" => 0, 71 "candisplaygroup" => 0, 72 "attachquota" => 5000, 73 "cancustomtitle" => 0, 74 "canwarnusers" => 0, 75 "canreceivewarnings" => 1, 76 "maxwarningsday" => 0, 77 "canmodcp" => 0, 78 "showinbirthdaylist" => 0, 79 "canoverridepm" => 0, 80 "canusesig" => 0, 81 "canusesigxposts" => 0, 82 "signofollow" => 0, 83 "edittimelimit" => 0, 84 "maxposts" => 0, 85 "showmemberlist" => 1, 86 "canmanageannounce" => 0, 87 "canmanagemodqueue" => 0, 88 "canmanagereportedcontent" => 0, 89 "canviewmodlogs" => 0, 90 "caneditprofiles" => 0, 91 "canbanusers" => 0, 92 "canviewwarnlogs" => 0, 93 "canuseipsearch" => 0 94 ); 95 96 // Disallow direct access to this file for security reasons 97 if(!defined("IN_MYBB")) 98 { 99 die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined."); 100 } 101 102 $errors = array(); 103 104 $page->add_breadcrumb_item($lang->user_groups, "index.php?module=user-groups"); 105 106 if($mybb->input['action'] == "add" || !$mybb->input['action']) 107 { 108 $sub_tabs['manage_groups'] = array( 109 'title' => $lang->manage_user_groups, 110 'link' => "index.php?module=user-groups", 111 'description' => $lang->manage_user_groups_desc 112 ); 113 $sub_tabs['add_group'] = array( 114 'title' => $lang->add_user_group, 115 'link' => "index.php?module=user-groups&action=add", 116 'description' => $lang->add_user_group_desc 117 ); 118 } 119 120 $plugins->run_hooks("admin_user_groups_begin"); 121 122 if($mybb->input['action'] == "approve_join_request") 123 { 124 $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'"); 125 $request = $db->fetch_array($query); 126 127 if(!$request) 128 { 129 flash_message($lang->error_invalid_join_request, 'error'); 130 admin_redirect("index.php?module=user-groups"); 131 } 132 133 if(!verify_post_check($mybb->get_input('my_post_key'))) 134 { 135 flash_message($lang->invalid_post_verify_key2, 'error'); 136 admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); 137 } 138 139 $plugins->run_hooks("admin_user_groups_approve_join_request"); 140 141 // Add the user to the group 142 join_usergroup($request['uid'], $request['gid']); 143 144 // Delete the join request 145 $db->delete_query("joinrequests", "rid='{$request['rid']}'"); 146 147 $plugins->run_hooks("admin_user_groups_approve_join_request_commit"); 148 149 flash_message($lang->success_join_request_approved, "success"); 150 admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); 151 } 152 153 if($mybb->input['action'] == "deny_join_request") 154 { 155 $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'"); 156 $request = $db->fetch_array($query); 157 158 if(!$request) 159 { 160 flash_message($lang->error_invalid_join_request, 'error'); 161 admin_redirect("index.php?module=user-groups"); 162 } 163 164 if(!verify_post_check($mybb->get_input('my_post_key'))) 165 { 166 flash_message($lang->invalid_post_verify_key2, 'error'); 167 admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); 168 } 169 170 $plugins->run_hooks("admin_user_groups_deny_join_request"); 171 172 // Delete the join request 173 $db->delete_query("joinrequests", "rid='{$request['rid']}'"); 174 175 $plugins->run_hooks("admin_user_groups_deny_join_request_commit"); 176 177 flash_message($lang->success_join_request_denied, "success"); 178 admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}"); 179 } 180 181 if($mybb->input['action'] == "join_requests") 182 { 183 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 184 $group = $db->fetch_array($query); 185 186 if(!$group || $group['type'] != 4) 187 { 188 flash_message($lang->error_invalid_user_group, 'error'); 189 admin_redirect("index.php?module=user-groups"); 190 } 191 192 $plugins->run_hooks("admin_user_groups_join_requests_start"); 193 194 if($mybb->request_method == "post" && is_array($mybb->input['users'])) 195 { 196 $uid_in = implode(",", array_map('intval', $mybb->input['users'])); 197 198 if(isset($mybb->input['approve'])) 199 { 200 foreach($mybb->input['users'] as $uid) 201 { 202 $uid = (int)$uid; 203 join_usergroup($uid, $group['gid']); 204 } 205 // Log admin action 206 log_admin_action("approve", $group['title'], $group['gid']); 207 $message = $lang->success_selected_requests_approved; 208 } 209 else 210 { 211 // Log admin action 212 log_admin_action("deny", $group['title'], $group['gid']); 213 $message = $lang->success_selected_requests_denied; 214 } 215 216 $plugins->run_hooks("admin_user_groups_join_requests_commit"); 217 218 // Go through and delete the join requests from the database 219 $db->delete_query("joinrequests", "uid IN ({$uid_in}) AND gid='{$group['gid']}'"); 220 221 $plugins->run_hooks("admin_user_groups_join_requests_commit_end"); 222 223 flash_message($message, 'success'); 224 admin_redirect("index.php?module=user-groups&action=join_requests&gid={$group['gid']}"); 225 } 226 227 $page->add_breadcrumb_item($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); 228 $page->output_header($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); 229 230 $sub_tabs = array(); 231 $sub_tabs['join_requests'] = array( 232 'title' => $lang->group_join_requests, 233 'link' => "index.php?module=user-groups&action=join_requests&gid={$group['gid']}", 234 'description' => $lang->group_join_requests_desc 235 ); 236 237 $page->output_nav_tabs($sub_tabs, 'join_requests'); 238 239 $query = $db->simple_select("joinrequests", "COUNT(*) AS num_requests", "gid='{$group['gid']}'"); 240 $num_requests = $db->fetch_field($query, "num_requests"); 241 242 $per_page = 20; 243 $pagenum = $mybb->get_input('page', MyBB::INPUT_INT); 244 if($pagenum) 245 { 246 $start = ($pagenum - 1) * $per_page; 247 $pages = ceil($num_requests / $per_page); 248 if($pagenum > $pages) 249 { 250 $start = 0; 251 $pagenum = 1; 252 } 253 } 254 else 255 { 256 $start = 0; 257 $pagenum = 1; 258 } 259 260 // Do we need to construct the pagination? 261 $pagination = ''; 262 if($num_requests > $per_page) 263 { 264 $pagination = draw_admin_pagination($pagenum, $per_page, $num_requests, "index.php?module=user-groups&action=join_requests&gid={$group['gid']}"); 265 echo $pagination; 266 } 267 268 $form = new Form("index.php?module=user-groups&action=join_requests&gid={$group['gid']}", "post"); 269 $table = new Table; 270 $table->construct_header($form->generate_check_box("allbox", 1, "", array('class' => 'checkall')), array('width' => 1)); 271 $table->construct_header($lang->users); 272 $table->construct_header($lang->reason); 273 $table->construct_header($lang->date_requested, array("class" => 'align_center', "width" => 200)); 274 $table->construct_header($lang->controls, array("class" => "align_center", "width" => 200)); 275 276 $query = $db->query(" 277 SELECT j.*, u.username 278 FROM ".TABLE_PREFIX."joinrequests j 279 INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=j.uid) 280 WHERE j.gid='{$group['gid']}' 281 ORDER BY dateline ASC 282 LIMIT {$start}, {$per_page} 283 "); 284 285 while($request = $db->fetch_array($query)) 286 { 287 $table->construct_cell($form->generate_check_box("users[]", $request['uid'], "")); 288 $table->construct_cell("<strong>".build_profile_link(htmlspecialchars_uni($request['username']), $request['uid'], "_blank")."</strong>"); 289 $table->construct_cell(htmlspecialchars_uni($request['reason'])); 290 $table->construct_cell(my_date('relative', $request['dateline']), array('class' => 'align_center')); 291 292 $popup = new PopupMenu("join_{$request['rid']}", $lang->options); 293 $popup->add_item($lang->approve, "index.php?module=user-groups&action=approve_join_request&rid={$request['rid']}&my_post_key={$mybb->post_code}"); 294 $popup->add_item($lang->deny, "index.php?module=user-groups&action=deny_join_request&rid={$request['rid']}&my_post_key={$mybb->post_code}"); 295 296 $table->construct_cell($popup->fetch(), array('class' => "align_center")); 297 $table->construct_row(); 298 } 299 300 if($table->num_rows() == 0) 301 { 302 $table->construct_cell($lang->no_join_requests, array("colspan" => 6)); 303 $table->construct_row(); 304 } 305 306 $table->output($lang->join_requests_for.' '.htmlspecialchars_uni($group['title'])); 307 echo $pagination; 308 309 $buttons[] = $form->generate_submit_button($lang->approve_selected_requests, array('name' => 'approve')); 310 $buttons[] = $form->generate_submit_button($lang->deny_selected_requests, array('name' => 'deny')); 311 $form->output_submit_wrapper($buttons); 312 $form->end(); 313 314 $page->output_footer(); 315 } 316 if($mybb->input['action'] == "add_leader" && $mybb->request_method == "post") 317 { 318 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 319 $group = $db->fetch_array($query); 320 321 if(!$group) 322 { 323 flash_message($lang->error_invalid_user_group, 'error'); 324 admin_redirect("index.php?module=user-group"); 325 } 326 327 $plugins->run_hooks("admin_user_groups_add_leader"); 328 329 $user = get_user_by_username($mybb->input['username'], array('fields' => 'username')); 330 if(!$user) 331 { 332 $errors[] = $lang->error_invalid_username; 333 } 334 else 335 { 336 // Is this user already a leader of this group? 337 $query = $db->simple_select("groupleaders", "uid", "uid='{$user['uid']}' AND gid='{$group['gid']}'"); 338 $existing_leader = $db->fetch_field($query, "uid"); 339 if($existing_leader) 340 { 341 $errors[] = $lang->error_already_leader; 342 } 343 } 344 345 // No errors, insert 346 if(empty($errors)) 347 { 348 $new_leader = array( 349 "gid" => $group['gid'], 350 "uid" => $user['uid'], 351 "canmanagemembers" => $mybb->get_input('canmanagemembers', MyBB::INPUT_INT), 352 "canmanagerequests" => $mybb->get_input('canmanagerequests', MyBB::INPUT_INT), 353 "caninvitemembers" => $mybb->get_input('caninvitemembers', MyBB::INPUT_INT) 354 ); 355 356 $makeleadermember = $mybb->get_input('makeleadermember', MyBB::INPUT_INT); 357 if($makeleadermember == 1) 358 { 359 join_usergroup($user['uid'], $group['gid']); 360 } 361 362 $plugins->run_hooks("admin_user_groups_add_leader_commit"); 363 364 $db->insert_query("groupleaders", $new_leader); 365 366 $cache->update_groupleaders(); 367 368 // Log admin action 369 log_admin_action($user['uid'], $user['username'], $group['gid'], $group['title']); 370 371 $username = htmlspecialchars_uni($user['username']); 372 flash_message("{$username} ".$lang->success_user_made_leader, 'success'); 373 admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); 374 } 375 else 376 { 377 // Errors, show leaders page 378 $mybb->input['action'] = "leaders"; 379 } 380 } 381 382 // Show a listing of group leaders 383 if($mybb->input['action'] == "leaders") 384 { 385 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 386 $group = $db->fetch_array($query); 387 388 if(!$group) 389 { 390 flash_message($lang->error_invalid_user_group, 'error'); 391 admin_redirect("index.php?module=user-groups"); 392 } 393 394 $plugins->run_hooks("admin_user_groups_leaders"); 395 396 $page->add_breadcrumb_item($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); 397 $page->output_header($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); 398 399 $sub_tabs = array(); 400 $sub_tabs['group_leaders'] = array( 401 'title' => $lang->manage_group_leaders, 402 'link' => "index.php?module=user-groups&action=leaders&gid={$group['gid']}", 403 'description' => $lang->manage_group_leaders_desc 404 ); 405 406 $page->output_nav_tabs($sub_tabs, 'group_leaders'); 407 408 $table = new Table; 409 $table->construct_header($lang->user); 410 $table->construct_header($lang->can_manage_members, array("class" => 'align_center', "width" => 200)); 411 $table->construct_header($lang->can_manage_join_requests, array("class" => 'align_center', "width" => 200)); 412 $table->construct_header($lang->can_invite_members, array("class" => 'align_center', "width" => 200)); 413 $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200)); 414 415 $query = $db->query(" 416 SELECT g.*, u.username 417 FROM ".TABLE_PREFIX."groupleaders g 418 INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid) 419 WHERE g.gid='{$group['gid']}' 420 ORDER BY u.username ASC 421 "); 422 while($leader = $db->fetch_array($query)) 423 { 424 $leader['username'] = htmlspecialchars_uni($leader['username']); 425 if($leader['canmanagemembers']) 426 { 427 $canmanagemembers = $lang->yes; 428 } 429 else 430 { 431 $canmanagemembers = $lang->no; 432 } 433 434 if($leader['canmanagerequests']) 435 { 436 $canmanagerequests = $lang->yes; 437 } 438 else 439 { 440 $canmanagerequests = $lang->no; 441 } 442 443 if($leader['caninvitemembers']) 444 { 445 $caninvitemembers = $lang->yes; 446 } 447 else 448 { 449 $caninvitemembers = $lang->no; 450 } 451 452 $table->construct_cell("<strong>".build_profile_link($leader['username'], $leader['uid'], "_blank")."</strong>"); 453 $table->construct_cell($canmanagemembers, array("class" => "align_center")); 454 $table->construct_cell($canmanagerequests, array("class" => "align_center")); 455 $table->construct_cell($caninvitemembers, array("class" => "align_center")); 456 $table->construct_cell("<a href=\"index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}\">{$lang->edit}</a>", array("width" => 100, "class" => "align_center")); 457 $table->construct_cell("<a href=\"index.php?module=user-groups&action=delete_leader&lid={$leader['lid']}&my_post_key={$mybb->post_code}\" onclick=\"return AdminCP.deleteConfirmation(this, '{$lang->confirm_group_leader_deletion}')\">{$lang->delete}</a>", array("width" => 100, "class" => "align_center")); 458 $table->construct_row(); 459 } 460 461 if($table->num_rows() == 0) 462 { 463 $table->construct_cell($lang->no_assigned_leaders, array("colspan" => 5)); 464 $table->construct_row(); 465 } 466 467 $table->output($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title'])); 468 469 $form = new Form("index.php?module=user-groups&action=add_leader&gid={$group['gid']}", "post"); 470 471 if(!empty($errors)) 472 { 473 $page->output_inline_error($errors); 474 } 475 else 476 { 477 $mybb->input = array_merge($mybb->input, array( 478 "canmanagemembers" => 1, 479 "canmanagerequests" => 1, 480 "caninvitemembers" => 1, 481 "makeleadermember" => 0 482 ) 483 ); 484 } 485 486 $form_container = new FormContainer($lang->add_group_leader.' '.htmlspecialchars_uni($group['title'])); 487 $form_container->output_row($lang->username." <em>*</em>", "", $form->generate_text_box('username', htmlspecialchars_uni($mybb->get_input('username')), array('id' => 'username')), 'username'); 488 $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->get_input('canmanagemembers', MyBB::INPUT_INT))); 489 $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->get_input('canmanagerequests', MyBB::INPUT_INT))); 490 $form_container->output_row($lang->can_invite_group_members, $lang->can_invite_group_members_desc, $form->generate_yes_no_radio('caninvitemembers', $mybb->get_input('caninvitemembers', MyBB::INPUT_INT))); 491 $form_container->output_row($lang->make_user_member, $lang->make_user_member_desc, $form->generate_yes_no_radio('makeleadermember', $mybb->input['makeleadermember'])); 492 $form_container->end(); 493 494 // Autocompletion for usernames 495 echo ' 496 <link rel="stylesheet" href="../jscripts/select2/select2.css"> 497 <script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1804"></script> 498 <script type="text/javascript"> 499 <!-- 500 $("#username").select2({ 501 placeholder: "'.$lang->search_for_a_user.'", 502 minimumInputLength: 2, 503 multiple: false, 504 ajax: { // instead of writing the function to execute the request we use Select2\'s convenient helper 505 url: "../xmlhttp.php?action=get_users", 506 dataType: \'json\', 507 data: function (term, page) { 508 return { 509 query: term // search term 510 }; 511 }, 512 results: function (data, page) { // parse the results into the format expected by Select2. 513 // since we are using custom formatting functions we do not need to alter remote JSON data 514 return {results: data}; 515 } 516 }, 517 initSelection: function(element, callback) { 518 var query = $(element).val(); 519 if (query !== "") { 520 $.ajax("../xmlhttp.php?action=get_users&getone=1", { 521 data: { 522 query: query 523 }, 524 dataType: "json" 525 }).done(function(data) { callback(data); }); 526 } 527 } 528 }); 529 // --> 530 </script>'; 531 532 $buttons[] = $form->generate_submit_button($lang->save_group_leader); 533 $form->output_submit_wrapper($buttons); 534 $form->end(); 535 536 $page->output_footer(); 537 } 538 539 if($mybb->input['action'] == "delete_leader") 540 { 541 $query = $db->query(" 542 SELECT l.*, u.username 543 FROM ".TABLE_PREFIX."groupleaders l 544 INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) 545 WHERE l.lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."'"); 546 $leader = $db->fetch_array($query); 547 548 if(!$leader) 549 { 550 flash_message($lang->error_invalid_group_leader, 'error'); 551 admin_redirect("index.php?module=user-groups"); 552 } 553 554 $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'"); 555 $group = $db->fetch_array($query); 556 557 // User clicked no 558 if($mybb->get_input('no')) 559 { 560 admin_redirect("index.php?module=user-groups"); 561 } 562 563 $plugins->run_hooks("admin_user_groups_delete_leader"); 564 565 if($mybb->request_method == "post") 566 { 567 $plugins->run_hooks("admin_user_groups_delete_leader_commit"); 568 569 // Delete the leader 570 $db->delete_query("groupleaders", "lid='{$leader['lid']}'"); 571 572 $plugins->run_hooks("admin_user_groups_delete_leader_commit_end"); 573 574 $cache->update_groupleaders(); 575 576 // Log admin action 577 log_admin_action($leader['uid'], $leader['username'], $group['gid'], $group['title']); 578 579 flash_message($lang->success_group_leader_deleted, 'success'); 580 admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); 581 } 582 else 583 { 584 $page->output_confirm_action("index.php?module=user-groups&action=delete_leader&lid={$leader['lid']}", $lang->confirm_group_leader_deletion); 585 } 586 } 587 588 if($mybb->input['action'] == "edit_leader") 589 { 590 $query = $db->query(" 591 SELECT l.*, u.username 592 FROM ".TABLE_PREFIX."groupleaders l 593 INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) 594 WHERE l.lid='".$mybb->get_input('lid', MyBB::INPUT_INT)."' 595 "); 596 $leader = $db->fetch_array($query); 597 598 if(!$leader) 599 { 600 flash_message($lang->error_invalid_group_leader, 'error'); 601 admin_redirect("index.php?module=user-groups"); 602 } 603 604 $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'"); 605 $group = $db->fetch_array($query); 606 607 $plugins->run_hooks("admin_user_groups_edit_leader"); 608 609 if($mybb->request_method == "post") 610 { 611 $updated_leader = array( 612 "canmanagemembers" => $mybb->get_input('canmanagemembers', MyBB::INPUT_INT), 613 "canmanagerequests" => $mybb->get_input('canmanagerequests', MyBB::INPUT_INT), 614 "caninvitemembers" => $mybb->get_input('caninvitemembers', MyBB::INPUT_INT) 615 ); 616 617 $plugins->run_hooks("admin_user_groups_edit_leader_commit"); 618 619 $db->update_query("groupleaders", $updated_leader, "lid={$leader['lid']}"); 620 621 $cache->update_groupleaders(); 622 623 // Log admin action 624 log_admin_action($leader['uid'], $leader['username'], $group['gid'], $group['title']); 625 626 flash_message($lang->success_group_leader_updated, 'success'); 627 admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}"); 628 } 629 630 if(empty($errors)) 631 { 632 $mybb->input = array_merge($mybb->input, $leader); 633 } 634 635 $page->add_breadcrumb_item($lang->group_leaders_for.' '.htmlspecialchars_uni($group['title']), "index.php?module=user-groups&action=leaders&gid={$group['gid']}"); 636 $leader['username'] = htmlspecialchars_uni($leader['username']); 637 $page->add_breadcrumb_item($lang->edit_leader." {$leader['username']}"); 638 639 $page->output_header($lang->edit_group_leader); 640 641 $sub_tabs = array(); 642 $sub_tabs['group_leaders'] = array( 643 'title' => $lang->edit_group_leader, 644 'link' => "index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}", 645 'description' => $lang->edit_group_leader_desc 646 ); 647 648 $page->output_nav_tabs($sub_tabs, 'group_leaders'); 649 650 $form = new Form("index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}", "post"); 651 652 $form_container = new FormContainer($lang->edit_group_leader); 653 $form_container->output_row($lang->username." <em>*</em>", "", $leader['username']); 654 655 $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->get_input('canmanagemembers', MyBB::INPUT_INT))); 656 $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->get_input('canmanagerequests', MyBB::INPUT_INT))); 657 $form_container->output_row($lang->can_invite_group_members, $lang->can_invite_group_members_desc, $form->generate_yes_no_radio('caninvitemembers', $mybb->get_input('caninvitemembers', MyBB::INPUT_INT))); 658 $buttons[] = $form->generate_submit_button($lang->save_group_leader); 659 660 $form_container->end(); 661 $form->output_submit_wrapper($buttons); 662 $form->end(); 663 664 $page->output_footer(); 665 } 666 667 if($mybb->input['action'] == "add") 668 { 669 $plugins->run_hooks("admin_user_groups_add"); 670 671 if($mybb->request_method == "post") 672 { 673 if(!trim($mybb->input['title'])) 674 { 675 $errors[] = $lang->error_missing_title; 676 } 677 678 if(my_strpos($mybb->get_input('namestyle'), "{username}") === false) 679 { 680 $errors[] = $lang->error_missing_namestyle_username; 681 } 682 elseif(preg_match("#<((m[^a])|(b[^diloru>])|(s[^aemptu >]))(\s*[^>]*)>#si", $mybb->get_input('namestyle'))) 683 { 684 $errors[] = $lang->error_disallowed_namestyle_username; 685 } 686 687 if(!$mybb->get_input('starimage')) 688 { 689 $mybb->input['starimage'] = "images/star.png"; 690 } 691 elseif(preg_match("#<((m[^a])|(b[^diloru>])|(s[^aemptu >]))(\s*[^>]*)>#si", $mybb->get_input('starimage'))) 692 { 693 $errors[] = $lang->error_disallowed_starimage_path; 694 } 695 696 if(empty($errors)) 697 { 698 if($mybb->get_input('stars') < 1) 699 { 700 $mybb->input['stars'] = 0; 701 } 702 703 $new_usergroup = array( 704 "type" => 2, 705 "title" => $db->escape_string($mybb->input['title']), 706 "description" => $db->escape_string($mybb->input['description']), 707 "namestyle" => $db->escape_string($mybb->input['namestyle']), 708 "usertitle" => $db->escape_string($mybb->input['usertitle']), 709 "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), 710 "starimage" => $db->escape_string($mybb->input['starimage']), 711 "disporder" => 0 712 ); 713 714 // Set default permissions 715 if($mybb->input['copyfrom'] == 0) 716 { 717 $new_usergroup = array_merge($new_usergroup, $usergroup_permissions); 718 } 719 // Copying permissions from another group 720 else 721 { 722 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('copyfrom', MyBB::INPUT_INT)."'"); 723 $existing_usergroup = $db->fetch_array($query); 724 foreach(array_keys($usergroup_permissions) as $field) 725 { 726 $new_usergroup[$field] = $existing_usergroup[$field]; 727 } 728 } 729 730 $plugins->run_hooks("admin_user_groups_add_commit"); 731 732 $gid = $db->insert_query("usergroups", $new_usergroup); 733 734 $plugins->run_hooks("admin_user_groups_add_commit_end"); 735 736 // Are we copying permissions? If so, copy all forum permissions too 737 if($mybb->input['copyfrom'] > 0) 738 { 739 $query = $db->simple_select("forumpermissions", "*", "gid='".$mybb->get_input('copyfrom', MyBB::INPUT_INT)."'"); 740 while($forum_permission = $db->fetch_array($query)) 741 { 742 unset($forum_permission['pid']); 743 $forum_permission['gid'] = $gid; 744 $db->insert_query("forumpermissions", $forum_permission); 745 } 746 } 747 748 // Update the caches 749 $cache->update_usergroups(); 750 $cache->update_forumpermissions(); 751 752 // Log admin action 753 log_admin_action($gid, $mybb->input['title']); 754 755 $groups = $cache->read('usergroups'); 756 $grouptitles = array_column($groups, 'title'); 757 758 $message = $lang->success_group_created; 759 if(in_array($mybb->input['title'], $grouptitles) && count(array_keys($grouptitles, $mybb->input['title'])) > 1) 760 { 761 $message = $lang->sprintf($lang->success_group_created_duplicate_title, htmlspecialchars_uni($mybb->input['title'])); 762 } 763 764 flash_message($message, 'success'); 765 admin_redirect("index.php?module=user-groups&action=edit&gid={$gid}"); 766 } 767 } 768 769 $page->add_breadcrumb_item($lang->add_user_group); 770 $page->output_header($lang->add_user_group); 771 772 $page->output_nav_tabs($sub_tabs, 'add_group'); 773 $form = new Form("index.php?module=user-groups&action=add", "post"); 774 775 if(!empty($errors)) 776 { 777 $page->output_inline_error($errors); 778 } 779 else 780 { 781 $mybb->input = array_merge($mybb->input, array( 782 "namestyle" => "{username}" 783 ) 784 ); 785 } 786 787 $form_container = new FormContainer($lang->add_user_group); 788 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->get_input('title'), array('id' => 'title')), 'title'); 789 $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->get_input('description'), array('id' => 'description')), 'description'); 790 $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->get_input('namestyle'), array('id' => 'namestyle')), 'namestyle'); 791 $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->get_input('usertitle'), array('id' => 'usertitle')), 'usertitle'); 792 793 $options[0] = $lang->do_not_copy_permissions; 794 $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title')); 795 while($usergroup = $db->fetch_array($query)) 796 { 797 $options[$usergroup['gid']] = htmlspecialchars_uni($usergroup['title']); 798 } 799 $form_container->output_row($lang->copy_permissions_from, $lang->copy_permissions_from_desc, $form->generate_select_box('copyfrom', $options, $mybb->get_input('copyfrom'), array('id' => 'copyfrom')), 'copyfrom'); 800 801 $form_container->end(); 802 $buttons[] = $form->generate_submit_button($lang->save_user_group); 803 $form->output_submit_wrapper($buttons); 804 805 $form->end(); 806 $page->output_footer(); 807 } 808 809 if($mybb->input['action'] == "edit") 810 { 811 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 812 $usergroup = $db->fetch_array($query); 813 814 if(!$usergroup) 815 { 816 flash_message($lang->error_invalid_user_group, 'error'); 817 admin_redirect("index.php?module=user-group"); 818 } 819 else 820 { 821 if(preg_match("#<((m[^a])|(b[^diloru>])|(s[^aemptu >]))(\s*[^>]*)>#si", $mybb->get_input('namestyle'))) 822 { 823 $errors[] = $lang->error_disallowed_namestyle_username; 824 $mybb->input['namestyle'] = $usergroup['namestyle']; 825 } 826 827 if(preg_match("#<((m[^a])|(b[^diloru>])|(s[^aemptu >]))(\s*[^>]*)>#si", $mybb->get_input('starimage'))) 828 { 829 $errors[] = $lang->error_disallowed_starimage_path; 830 $mybb->input['starimage'] = $usergroup['starimage']; 831 } 832 } 833 834 $plugins->run_hooks("admin_user_groups_edit"); 835 836 if($mybb->request_method == "post") 837 { 838 if(!trim($mybb->get_input('title'))) 839 { 840 $errors[] = $lang->error_missing_title; 841 } 842 843 if(my_strpos($mybb->get_input('namestyle'), "{username}") === false) 844 { 845 $errors[] = $lang->error_missing_namestyle_username; 846 } 847 848 if($mybb->get_input('moderate') == 1 && $mybb->get_input('invite') == 1) 849 { 850 $errors[] = $lang->error_cannot_have_both_types; 851 } 852 853 if(empty($errors)) 854 { 855 if($mybb->get_input('joinable') == 1) 856 { 857 if($mybb->get_input('moderate') == 1) 858 { 859 $mybb->input['type'] = "4"; 860 } 861 elseif($mybb->get_input('invite') == 1) 862 { 863 $mybb->input['type'] = "5"; 864 } 865 else 866 { 867 $mybb->input['type'] = "3"; 868 } 869 } 870 else 871 { 872 $mybb->input['type'] = "2"; 873 } 874 875 if($usergroup['type'] == 1) 876 { 877 $mybb->input['type'] = 1; 878 } 879 880 if($mybb->get_input('stars') < 1) 881 { 882 $mybb->input['stars'] = 0; 883 } 884 885 $updated_group = array( 886 "type" => $mybb->get_input('type', MyBB::INPUT_INT), 887 "title" => $db->escape_string($mybb->input['title']), 888 "description" => $db->escape_string($mybb->input['description']), 889 "namestyle" => $db->escape_string($mybb->input['namestyle']), 890 "usertitle" => $db->escape_string($mybb->input['usertitle']), 891 "stars" => $mybb->get_input('stars', MyBB::INPUT_INT), 892 "starimage" => $db->escape_string($mybb->input['starimage']), 893 "image" => $db->escape_string($mybb->input['image']), 894 "isbannedgroup" => $mybb->get_input('isbannedgroup', MyBB::INPUT_INT), 895 "canview" => $mybb->get_input('canview', MyBB::INPUT_INT), 896 "canviewthreads" => $mybb->get_input('canviewthreads', MyBB::INPUT_INT), 897 "canviewprofiles" => $mybb->get_input('canviewprofiles', MyBB::INPUT_INT), 898 "candlattachments" => $mybb->get_input('candlattachments', MyBB::INPUT_INT), 899 "canviewboardclosed" => $mybb->get_input('canviewboardclosed', MyBB::INPUT_INT), 900 "canpostthreads" => $mybb->get_input('canpostthreads', MyBB::INPUT_INT), 901 "canpostreplys" => $mybb->get_input('canpostreplys', MyBB::INPUT_INT), 902 "canpostattachments" => $mybb->get_input('canpostattachments', MyBB::INPUT_INT), 903 "canratethreads" => $mybb->get_input('canratethreads', MyBB::INPUT_INT), 904 "modposts" => $mybb->get_input('modposts', MyBB::INPUT_INT), 905 "modthreads" => $mybb->get_input('modthreads', MyBB::INPUT_INT), 906 "mod_edit_posts" => $mybb->get_input('mod_edit_posts', MyBB::INPUT_INT), 907 "modattachments" => $mybb->get_input('modattachments', MyBB::INPUT_INT), 908 "caneditposts" => $mybb->get_input('caneditposts', MyBB::INPUT_INT), 909 "candeleteposts" => $mybb->get_input('candeleteposts', MyBB::INPUT_INT), 910 "candeletethreads" => $mybb->get_input('candeletethreads', MyBB::INPUT_INT), 911 "caneditattachments" => $mybb->get_input('caneditattachments', MyBB::INPUT_INT), 912 "canviewdeletionnotice" => $mybb->get_input('canviewdeletionnotice', MyBB::INPUT_INT), 913 "canpostpolls" => $mybb->get_input('canpostpolls', MyBB::INPUT_INT), 914 "canvotepolls" => $mybb->get_input('canvotepolls', MyBB::INPUT_INT), 915 "canundovotes" => $mybb->get_input('canundovotes', MyBB::INPUT_INT), 916 "canusepms" => $mybb->get_input('canusepms', MyBB::INPUT_INT), 917 "cansendpms" => $mybb->get_input('cansendpms', MyBB::INPUT_INT), 918 "cantrackpms" => $mybb->get_input('cantrackpms', MyBB::INPUT_INT), 919 "candenypmreceipts" => $mybb->get_input('candenypmreceipts', MyBB::INPUT_INT), 920 "pmquota" => $mybb->get_input('pmquota', MyBB::INPUT_INT), 921 "maxpmrecipients" => $mybb->get_input('maxpmrecipients', MyBB::INPUT_INT), 922 "cansendemail" => $mybb->get_input('cansendemail', MyBB::INPUT_INT), 923 "cansendemailoverride" => $mybb->get_input('cansendemailoverride', MyBB::INPUT_INT), 924 "maxemails" => $mybb->get_input('maxemails', MyBB::INPUT_INT), 925 "emailfloodtime" => $mybb->get_input('emailfloodtime', MyBB::INPUT_INT), 926 "canviewmemberlist" => $mybb->get_input('canviewmemberlist', MyBB::INPUT_INT), 927 "canviewcalendar" => $mybb->get_input('canviewcalendar', MyBB::INPUT_INT), 928 "canaddevents" => $mybb->get_input('canaddevents', MyBB::INPUT_INT), 929 "canbypasseventmod" => $mybb->get_input('canbypasseventmod', MyBB::INPUT_INT), 930 "canmoderateevents" => $mybb->get_input('canmoderateevents', MyBB::INPUT_INT), 931 "canviewonline" => $mybb->get_input('canviewonline', MyBB::INPUT_INT), 932 "canviewwolinvis" => $mybb->get_input('canviewwolinvis', MyBB::INPUT_INT), 933 "canviewonlineips" => $mybb->get_input('canviewonlineips', MyBB::INPUT_INT), 934 "cancp" => $mybb->get_input('cancp', MyBB::INPUT_INT), 935 "issupermod" => $mybb->get_input('issupermod', MyBB::INPUT_INT), 936 "cansearch" => $mybb->get_input('cansearch', MyBB::INPUT_INT), 937 "canusercp" => $mybb->get_input('canusercp', MyBB::INPUT_INT), 938 "canuploadavatars" => $mybb->get_input('canuploadavatars', MyBB::INPUT_INT), 939 "canchangename" => $mybb->get_input('canchangename', MyBB::INPUT_INT), 940 "canbereported" => $mybb->get_input('canbereported', MyBB::INPUT_INT), 941 "canbeinvisible" => $mybb->get_input('canbeinvisible', MyBB::INPUT_INT), 942 "canchangewebsite" => $mybb->get_input('canchangewebsite', MyBB::INPUT_INT), 943 "showforumteam" => $mybb->get_input('showforumteam', MyBB::INPUT_INT), 944 "usereputationsystem" => $mybb->get_input('usereputationsystem', MyBB::INPUT_INT), 945 "cangivereputations" => $mybb->get_input('cangivereputations', MyBB::INPUT_INT), 946 "candeletereputations" => $mybb->get_input('candeletereputations', MyBB::INPUT_INT), 947 "reputationpower" => $mybb->get_input('reputationpower', MyBB::INPUT_INT), 948 "maxreputationsday" => $mybb->get_input('maxreputationsday', MyBB::INPUT_INT), 949 "maxreputationsperuser" => $mybb->get_input('maxreputationsperuser', MyBB::INPUT_INT), 950 "maxreputationsperthread" => $mybb->get_input('maxreputationsperthread', MyBB::INPUT_INT), 951 "attachquota" => $mybb->get_input('attachquota', MyBB::INPUT_INT), 952 "cancustomtitle" => $mybb->get_input('cancustomtitle', MyBB::INPUT_INT), 953 "canwarnusers" => $mybb->get_input('canwarnusers', MyBB::INPUT_INT), 954 "canreceivewarnings" =>$mybb->get_input('canreceivewarnings', MyBB::INPUT_INT), 955 "maxwarningsday" => $mybb->get_input('maxwarningsday', MyBB::INPUT_INT), 956 "canmodcp" => $mybb->get_input('canmodcp', MyBB::INPUT_INT), 957 "showinbirthdaylist" => $mybb->get_input('showinbirthdaylist', MyBB::INPUT_INT), 958 "canoverridepm" => $mybb->get_input('canoverridepm', MyBB::INPUT_INT), 959 "canusesig" => $mybb->get_input('canusesig', MyBB::INPUT_INT), 960 "canusesigxposts" => $mybb->get_input('canusesigxposts', MyBB::INPUT_INT), 961 "signofollow" => $mybb->get_input('signofollow', MyBB::INPUT_INT), 962 "edittimelimit" => $mybb->get_input('edittimelimit', MyBB::INPUT_INT), 963 "maxposts" => $mybb->get_input('maxposts', MyBB::INPUT_INT), 964 "showmemberlist" => $mybb->get_input('showmemberlist', MyBB::INPUT_INT), 965 "canmanageannounce" => $mybb->get_input('canmanageannounce', MyBB::INPUT_INT), 966 "canmanagemodqueue" => $mybb->get_input('canmanagemodqueue', MyBB::INPUT_INT), 967 "canmanagereportedcontent" => $mybb->get_input('canmanagereportedcontent', MyBB::INPUT_INT), 968 "canviewmodlogs" => $mybb->get_input('canviewmodlogs', MyBB::INPUT_INT), 969 "caneditprofiles" => $mybb->get_input('caneditprofiles', MyBB::INPUT_INT), 970 "canbanusers" => $mybb->get_input('canbanusers', MyBB::INPUT_INT), 971 "canviewwarnlogs" => $mybb->get_input('canviewwarnlogs', MyBB::INPUT_INT), 972 "canuseipsearch" => $mybb->get_input('canuseipsearch', MyBB::INPUT_INT) 973 ); 974 975 // Only update the candisplaygroup setting if not a default user group 976 if($usergroup['type'] != 1) 977 { 978 $updated_group['candisplaygroup'] = $mybb->get_input('candisplaygroup', MyBB::INPUT_INT); 979 } 980 981 $plugins->run_hooks("admin_user_groups_edit_commit"); 982 983 $db->update_query("usergroups", $updated_group, "gid='{$usergroup['gid']}'"); 984 985 // Update the caches 986 $cache->update_usergroups(); 987 $cache->update_forumpermissions(); 988 989 // Log admin action 990 log_admin_action($usergroup['gid'], $mybb->input['title']); 991 992 $groups = $cache->read('usergroups'); 993 $grouptitles = array_column($groups, 'title'); 994 995 $message = $lang->success_group_updated; 996 if(in_array($mybb->input['title'], $grouptitles) && count(array_keys($grouptitles, $mybb->input['title'])) > 1) 997 { 998 $message = $lang->sprintf($lang->success_group_updated_duplicate_title, htmlspecialchars_uni($mybb->input['title'])); 999 } 1000 1001 flash_message($message, 'success'); 1002 admin_redirect("index.php?module=user-groups"); 1003 } 1004 } 1005 1006 $page->add_breadcrumb_item($lang->edit_user_group); 1007 $page->output_header($lang->edit_user_group); 1008 1009 $sub_tabs = array(); 1010 $sub_tabs['edit_group'] = array( 1011 'title' => $lang->edit_user_group, 1012 'description' => $lang->edit_user_group_desc 1013 ); 1014 1015 $form = new Form("index.php?module=user-groups&action=edit&gid={$usergroup['gid']}", "post"); 1016 1017 $page->output_nav_tabs($sub_tabs, 'edit_group'); 1018 1019 // If we have any error messages, show them 1020 if(!empty($errors)) 1021 { 1022 $page->output_inline_error($errors); 1023 } 1024 else 1025 { 1026 if($usergroup['type'] == "3") 1027 { 1028 $usergroup['joinable'] = 1; 1029 $usergroup['moderate'] = 0; 1030 $usergroup['invite'] = 0; 1031 } 1032 elseif($usergroup['type'] == "4") 1033 { 1034 $usergroup['joinable'] = 1; 1035 $usergroup['moderate'] = 1; 1036 $usergroup['invite'] = 0; 1037 } 1038 elseif($usergroup['type'] == "5") 1039 { 1040 $usergroup['joinable'] = 1; 1041 $usergroup['moderate'] = 0; 1042 $usergroup['invite'] = 1; 1043 } 1044 else 1045 { 1046 $usergroup['joinable'] = 0; 1047 $usergroup['moderate'] = 0; 1048 $usergroup['invite'] = 0; 1049 } 1050 $mybb->input = array_merge($mybb->input, $usergroup); 1051 } 1052 $tabs = array( 1053 "general" => $lang->general, 1054 "forums_posts" => $lang->forums_posts, 1055 "users_permissions" => $lang->users_permissions, 1056 "misc" => $lang->misc, 1057 "modcp" => $lang->mod_cp 1058 ); 1059 $tabs = $plugins->run_hooks("admin_user_groups_edit_graph_tabs", $tabs); 1060 $page->output_tab_control($tabs); 1061 1062 echo "<div id=\"tab_general\"> 1063 <script type=\"text/javascript\"> 1064 $(function(){ 1065 $('input[name=\"moderate\"]').parents(\".group_settings_bit\").addClass(\"joinable_dependent\"); 1066 $('input[name=\"invite\"]').parents(\".group_settings_bit\").addClass(\"joinable_dependent\"); 1067 if($('input[name=\"joinable\"]').prop(\"checked\") == false){ 1068 $(\".joinable_dependent\").hide(); 1069 } 1070 $('input[name=\"joinable\"]').on('change', function() { 1071 $(\".joinable_dependent\").slideToggle(); 1072 }) 1073 }); 1074 </script>"; 1075 $form_container = new FormContainer($lang->general); 1076 $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title'); 1077 $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description'); 1078 $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->input['namestyle'], array('id' => 'namestyle')), 'namestyle'); 1079 $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle'); 1080 1081 $stars = "<table cellpadding=\"3\"><tr><td>".$form->generate_numeric_field('stars', $mybb->input['stars'], array('class' => 'field50', 'id' => 'stars', 'min' => 0))."</td><td>".$form->generate_text_box('starimage', $mybb->input['starimage'], array('id' => 'starimage'))."</td></tr>"; 1082 $stars .= "<tr><td><small>{$lang->stars}</small></td><td><small>{$lang->star_image}</small></td></tr></table>"; 1083 $form_container->output_row($lang->user_stars, $lang->user_stars_desc, $stars, "stars"); 1084 1085 $form_container->output_row($lang->group_image, $lang->group_image_desc, $form->generate_text_box('image', $mybb->input['image'], array('id' => 'image')), 'image'); 1086 1087 $general_options = array(); 1088 $general_options[] = $form->generate_check_box("showmemberlist", 1, $lang->member_list, array("checked" => $mybb->get_input('showmemberlist', MyBB::INPUT_INT))); 1089 if($usergroup['gid'] != "1" && $usergroup['gid'] != "5") 1090 { 1091 $general_options[] = $form->generate_check_box("showforumteam", 1, $lang->forum_team, array("checked" => $mybb->get_input('showforumteam', MyBB::INPUT_INT))); 1092 } 1093 $general_options[] = $form->generate_check_box("isbannedgroup", 1, $lang->is_banned_group, array("checked" => $mybb->get_input('isbannedgroup', MyBB::INPUT_INT))); 1094 1095 $form_container->output_row($lang->general_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $general_options)."</div>"); 1096 1097 if($usergroup['type'] != 1) 1098 { 1099 $public_options = array( 1100 $form->generate_check_box("joinable", 1, $lang->user_joinable, array("checked" => $mybb->input['joinable'])), 1101 $form->generate_check_box("moderate", 1, $lang->moderate_join_requests, array("checked" => $mybb->get_input('moderate', MyBB::INPUT_INT))), 1102 $form->generate_check_box("invite", 1, $lang->invite_only, array("checked" => $mybb->input['invite'])), 1103 $form->generate_check_box("candisplaygroup", 1, $lang->can_set_as_display_group, array("checked" => $mybb->get_input('candisplaygroup', MyBB::INPUT_INT))), 1104 ); 1105 $form_container->output_row($lang->publicly_joinable_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $public_options)."</div>"); 1106 } 1107 1108 $admin_options = array( 1109 $form->generate_check_box("issupermod", 1, $lang->is_super_mod, array("checked" => $mybb->get_input('issupermod', MyBB::INPUT_INT))), 1110 $form->generate_check_box("canmodcp", 1, $lang->can_access_mod_cp, array("checked" => $mybb->get_input('canmodcp', MyBB::INPUT_INT))), 1111 $form->generate_check_box("cancp", 1, $lang->can_access_admin_cp, array("checked" => $mybb->get_input('cancp', MyBB::INPUT_INT))) 1112 ); 1113 $form_container->output_row($lang->moderation_administration_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $admin_options)."</div>"); 1114 1115 $form_container->end(); 1116 echo "</div>"; 1117 1118 // 1119 // FORUMS AND POSTS 1120 // 1121 echo "<div id=\"tab_forums_posts\">"; 1122 $form_container = new FormContainer($lang->forums_posts); 1123 1124 $viewing_options = array( 1125 $form->generate_check_box("canview", 1, $lang->can_view_board, array("checked" => $mybb->get_input('canview', MyBB::INPUT_INT))), 1126 $form->generate_check_box("canviewthreads", 1, $lang->can_view_threads, array("checked" => $mybb->get_input('canviewthreads', MyBB::INPUT_INT))), 1127 $form->generate_check_box("cansearch", 1, $lang->can_search_forums, array("checked" => $mybb->get_input('cansearch', MyBB::INPUT_INT))), 1128 $form->generate_check_box("canviewprofiles", 1, $lang->can_view_profiles, array("checked" => $mybb->get_input('canviewprofiles', MyBB::INPUT_INT))), 1129 $form->generate_check_box("candlattachments", 1, $lang->can_download_attachments, array("checked" => $mybb->get_input('candlattachments', MyBB::INPUT_INT))), 1130 $form->generate_check_box("canviewboardclosed", 1, $lang->can_view_board_closed, array("checked" => $mybb->get_input('canviewboardclosed', MyBB::INPUT_INT))) 1131 ); 1132 $form_container->output_row($lang->viewing_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $viewing_options)."</div>"); 1133 1134 $posting_options = array( 1135 $form->generate_check_box("canpostthreads", 1, $lang->can_post_threads, array("checked" => $mybb->get_input('canpostthreads', MyBB::INPUT_INT))), 1136 $form->generate_check_box("canpostreplys", 1, $lang->can_post_replies, array("checked" => $mybb->get_input('canpostreplys', MyBB::INPUT_INT))), 1137 $form->generate_check_box("canratethreads", 1, $lang->can_rate_threads, array("checked" => $mybb->get_input('canratethreads', MyBB::INPUT_INT))), 1138 "{$lang->max_posts_per_day}<br /><small class=\"input\">{$lang->max_posts_per_day_desc}</small><br />".$form->generate_numeric_field('maxposts', $mybb->input['maxposts'], array('id' => 'maxposts', 'class' => 'field50', 'min' => 0)) 1139 ); 1140 $form_container->output_row($lang->posting_rating_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $posting_options)."</div>"); 1141 1142 $moderator_options = array( 1143 $form->generate_check_box("modposts", 1, $lang->mod_new_posts, array("checked" => $mybb->get_input('modposts', MyBB::INPUT_INT))), 1144 $form->generate_check_box("modthreads", 1, $lang->mod_new_threads, array("checked" => $mybb->get_input('modthreads', MyBB::INPUT_INT))), 1145 $form->generate_check_box("modattachments", 1, $lang->mod_new_attachments, array("checked" => $mybb->get_input('modattachments', MyBB::INPUT_INT))), 1146 $form->generate_check_box("mod_edit_posts", 1, $lang->mod_after_edit, array("checked" => $mybb->get_input('mod_edit_posts', MyBB::INPUT_INT))) 1147 ); 1148 $form_container->output_row($lang->moderation_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $moderator_options)."</div>"); 1149 1150 $poll_options = array( 1151 $form->generate_check_box("canpostpolls", 1, $lang->can_post_polls, array("checked" => $mybb->get_input('canpostpolls', MyBB::INPUT_INT))), 1152 $form->generate_check_box("canvotepolls", 1, $lang->can_vote_polls, array("checked" => $mybb->get_input('canvotepolls', MyBB::INPUT_INT))), 1153 $form->generate_check_box("canundovotes", 1, $lang->can_undo_votes, array("checked" => $mybb->get_input('canundovotes', MyBB::INPUT_INT))) 1154 ); 1155 $form_container->output_row($lang->poll_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $poll_options)."</div>"); 1156 1157 $attachment_options = array( 1158 $form->generate_check_box("canpostattachments", 1, $lang->can_post_attachments, array("checked" => $mybb->get_input('canpostattachments', MyBB::INPUT_INT))), 1159 "{$lang->attach_quota}<br /><small class=\"input\">{$lang->attach_quota_desc}</small><br />".$form->generate_numeric_field('attachquota', $mybb->input['attachquota'], array('id' => 'attachquota', 'class' => 'field50', 'min' => 0)). "KB" 1160 ); 1161 $form_container->output_row($lang->attachment_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $attachment_options)."</div>"); 1162 1163 // Remove these options if the group being editied is Guest (GID=1) 1164 if($usergroup['gid'] != 1) 1165 { 1166 $editing_options = array( 1167 $form->generate_check_box("caneditposts", 1, $lang->can_edit_posts, array("checked" => $mybb->get_input('caneditposts', MyBB::INPUT_INT))), 1168 $form->generate_check_box("candeleteposts", 1, $lang->can_delete_posts, array("checked" => $mybb->get_input('candeleteposts', MyBB::INPUT_INT))), 1169 $form->generate_check_box("candeletethreads", 1, $lang->can_delete_threads, array("checked" => $mybb->get_input('candeletethreads', MyBB::INPUT_INT))), 1170 $form->generate_check_box("caneditattachments", 1, $lang->can_edit_attachments, array("checked" => $mybb->get_input('caneditattachments', MyBB::INPUT_INT))), 1171 $form->generate_check_box("canviewdeletionnotice", 1, $lang->can_view_deletion_notices, array("checked" => $mybb->get_input('canviewdeletionnotice', MyBB::INPUT_INT))), 1172 "{$lang->edit_time_limit}<br /><small class=\"input\">{$lang->edit_time_limit_desc}</small><br />".$form->generate_numeric_field('edittimelimit', $mybb->input['edittimelimit'], array('id' => 'edittimelimit', 'class' => 'field50', 'min' => 0)) 1173 ); 1174 $form_container->output_row($lang->editing_deleting_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $editing_options)."</div>"); 1175 } 1176 1177 $form_container->end(); 1178 echo "</div>"; 1179 1180 // 1181 // USERS AND PERMISSIONS 1182 // 1183 echo "<div id=\"tab_users_permissions\">"; 1184 $form_container = new FormContainer($lang->users_permissions); 1185 1186 $account_options = array( 1187 $form->generate_check_box("canbereported", 1, $lang->can_be_reported, array("checked" => $mybb->get_input('canbereported', MyBB::INPUT_INT))), 1188 $form->generate_check_box("canbeinvisible", 1, $lang->can_be_invisible, array("checked" => $mybb->get_input('canbeinvisible', MyBB::INPUT_INT))), 1189 $form->generate_check_box("canusercp", 1, $lang->can_access_usercp, array("checked" => $mybb->get_input('canusercp', MyBB::INPUT_INT))), 1190 $form->generate_check_box("canchangename", 1, $lang->can_change_username, array("checked" => $mybb->get_input('canchangename', MyBB::INPUT_INT))), 1191 $form->generate_check_box("cancustomtitle", 1, $lang->can_use_usertitles, array("checked" => $mybb->get_input('cancustomtitle', MyBB::INPUT_INT))), 1192 $form->generate_check_box("canuploadavatars", 1, $lang->can_upload_avatars, array("checked" => $mybb->get_input('canuploadavatars', MyBB::INPUT_INT))), 1193 $form->generate_check_box("canusesig", 1, $lang->can_use_signature, array("checked" => $mybb->get_input('canusesig', MyBB::INPUT_INT))), 1194 $form->generate_check_box("signofollow", 1, $lang->uses_no_follow, array("checked" => $mybb->get_input('signofollow', MyBB::INPUT_INT))), 1195 $form->generate_check_box("canchangewebsite", 1, $lang->can_change_website, array("checked" => $mybb->get_input('canchangewebsite', MyBB::INPUT_INT))), 1196 "{$lang->required_posts}<br /><small class=\"input\">{$lang->required_posts_desc}</small><br />".$form->generate_numeric_field('canusesigxposts', $mybb->get_input('canusesigxposts', MyBB::INPUT_INT), array('id' => 'canusesigxposts', 'class' => 'field50', 'min' => 0)) 1197 ); 1198 $form_container->output_row($lang->account_management, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $account_options)."</div>"); 1199 1200 $reputation_options = array( 1201 $form->generate_check_box("usereputationsystem", 1, $lang->show_reputations, array("checked" => $mybb->get_input('usereputationsystem', MyBB::INPUT_INT))), 1202 $form->generate_check_box("cangivereputations", 1, $lang->can_give_reputation, array("checked" => $mybb->get_input('cangivereputations', MyBB::INPUT_INT))), 1203 $form->generate_check_box("candeletereputations", 1, $lang->can_delete_own_reputation, array("checked" => $mybb->get_input('candeletereputations', MyBB::INPUT_INT))), 1204 "{$lang->points_to_award_take}<br /><small class=\"input\">{$lang->points_to_award_take_desc}</small><br />".$form->generate_numeric_field('reputationpower', $mybb->input['reputationpower'], array('id' => 'reputationpower', 'class' => 'field50', 'min' => 0)), 1205 "{$lang->max_reputations_perthread}<br /><small class=\"input\">{$lang->max_reputations_perthread_desc}</small><br />".$form->generate_numeric_field('maxreputationsperthread', $mybb->input['maxreputationsperthread'], array('id' => 'maxreputationsperthread', 'class' => 'field50', 'min' => 0)), 1206 "{$lang->max_reputations_peruser}<br /><small class=\"input\">{$lang->max_reputations_peruser_desc}</small><br />".$form->generate_numeric_field('maxreputationsperuser', $mybb->input['maxreputationsperuser'], array('id' => 'maxreputationsperuser', 'class' => 'field50', 'min' => 0)), 1207 "{$lang->max_reputations_daily}<br /><small class=\"input\">{$lang->max_reputations_daily_desc}</small><br />".$form->generate_numeric_field('maxreputationsday', $mybb->input['maxreputationsday'], array('id' => 'maxreputationsday', 'class' => 'field50', 'min' => 0)) 1208 ); 1209 $form_container->output_row($lang->reputation_system, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $reputation_options)."</div>"); 1210 1211 $warning_options = array( 1212 $form->generate_check_box("canwarnusers", 1, $lang->can_send_warnings, array("checked" => $mybb->get_input('canwarnusers', MyBB::INPUT_INT))), 1213 $form->generate_check_box("canreceivewarnings", 1, $lang->can_receive_warnings, array("checked" => $mybb->get_input('canreceivewarnings', MyBB::INPUT_INT))), 1214 "{$lang->warnings_per_day}<br />".$form->generate_numeric_field('maxwarningsday', $mybb->input['maxwarningsday'], array('id' => 'maxwarningsday', 'class' => 'field50')) 1215 ); 1216 $form_container->output_row($lang->warning_system, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $warning_options)."</div>"); 1217 1218 $pm_options = array( 1219 $form->generate_check_box("canusepms", 1, $lang->can_use_pms, array("checked" => $mybb->get_input('canusepms', MyBB::INPUT_INT))), 1220 $form->generate_check_box("cansendpms", 1, $lang->can_send_pms, array("checked" => $mybb->get_input('cansendpms', MyBB::INPUT_INT))), 1221 $form->generate_check_box("canoverridepm", 1, $lang->can_override_pms, array("checked" => $mybb->get_input('canoverridepm', MyBB::INPUT_INT))), 1222 $form->generate_check_box("cantrackpms", 1, $lang->can_track_pms, array("checked" => $mybb->get_input('cantrackpms', MyBB::INPUT_INT))), 1223 $form->generate_check_box("candenypmreceipts", 1, $lang->can_deny_reciept, array("checked" => $mybb->get_input('candenypmreceipts', MyBB::INPUT_INT))), 1224 "{$lang->message_quota}<br /><small>{$lang->message_quota_desc}</small><br />".$form->generate_numeric_field('pmquota', $mybb->input['pmquota'], array('id' => 'pmquota', 'class' => 'field50', 'min' => 0)), 1225 "{$lang->max_recipients}<br /><small>{$lang->max_recipients_desc}</small><br />".$form->generate_numeric_field('maxpmrecipients', $mybb->input['maxpmrecipients'], array('id' => 'maxpmrecipients', 'class' => 'field50', 'min' => 0)) 1226 ); 1227 $form_container->output_row($lang->private_messaging, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $pm_options)."</div>"); 1228 1229 $form_container->end(); 1230 echo "</div>"; 1231 1232 // 1233 // MISC 1234 // 1235 echo "<div id=\"tab_misc\">"; 1236 $form_container = new FormContainer($lang->misc); 1237 1238 $calendar_options = array( 1239 $form->generate_check_box("canviewcalendar", 1, $lang->can_view_calendar, array("checked" => $mybb->get_input('canviewcalendar', MyBB::INPUT_INT))), 1240 $form->generate_check_box("canaddevents", 1, $lang->can_post_events, array("checked" => $mybb->get_input('canaddevents', MyBB::INPUT_INT))), 1241 $form->generate_check_box("canbypasseventmod", 1, $lang->can_bypass_event_moderation, array("checked" => $mybb->get_input('canbypasseventmod', MyBB::INPUT_INT))), 1242 $form->generate_check_box("canmoderateevents", 1, $lang->can_moderate_events, array("checked" => $mybb->get_input('canmoderateevents', MyBB::INPUT_INT))) 1243 ); 1244 $form_container->output_row($lang->calendar, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $calendar_options)."</div>"); 1245 1246 $wol_options = array( 1247 $form->generate_check_box("canviewonline", 1, $lang->can_view_whos_online, array("checked" => $mybb->get_input('canviewonline', MyBB::INPUT_INT))), 1248 $form->generate_check_box("canviewwolinvis", 1, $lang->can_view_invisible, array("checked" => $mybb->get_input('canviewwolinvis', MyBB::INPUT_INT))), 1249 $form->generate_check_box("canviewonlineips", 1, $lang->can_view_ips, array("checked" => $mybb->get_input('canviewonlineips', MyBB::INPUT_INT))) 1250 ); 1251 $form_container->output_row($lang->whos_online, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $wol_options)."</div>"); 1252 1253 $misc_options = array( 1254 $form->generate_check_box("canviewmemberlist", 1, $lang->can_view_member_list, array("checked" => $mybb->get_input('canviewmemberlist', MyBB::INPUT_INT))), 1255 $form->generate_check_box("showinbirthdaylist", 1, $lang->show_in_birthday_list, array("checked" => $mybb->get_input('showinbirthdaylist', MyBB::INPUT_INT))), 1256 $form->generate_check_box("cansendemail", 1, $lang->can_email_users, array("checked" => $mybb->get_input('cansendemail', MyBB::INPUT_INT))), 1257 $form->generate_check_box("cansendemailoverride", 1, $lang->can_email_users_override, array("checked" => $mybb->get_input('cansendemailoverride', MyBB::INPUT_INT))), 1258 "{$lang->max_emails_per_day}<br /><small class=\"input\">{$lang->max_emails_per_day_desc}</small><br />".$form->generate_numeric_field('maxemails', $mybb->input['maxemails'], array('id' => 'maxemails', 'class' => 'field50', 'min' => 0)), 1259 "{$lang->email_flood_time}<br /><small class=\"input\">{$lang->email_flood_time_desc}</small><br />".$form->generate_numeric_field('emailfloodtime', $mybb->input['emailfloodtime'], array('id' => 'emailfloodtime', 'class' => 'field50', 'min' => 0)) 1260 ); 1261 $form_container->output_row($lang->misc, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $misc_options)."</div>"); 1262 1263 $form_container->end(); 1264 echo "</div>"; 1265 1266 // 1267 // MODERATOR CP 1268 // 1269 echo "<div id=\"tab_modcp\">"; 1270 $form_container = new FormContainer($lang->mod_cp); 1271 1272 $forum_post_options = array( 1273 $form->generate_check_box("canmanageannounce", 1, $lang->can_manage_announce, array("checked" => $mybb->get_input('canmanageannounce', MyBB::INPUT_INT))), 1274 $form->generate_check_box("canmanagemodqueue", 1, $lang->can_manage_mod_queue, array("checked" => $mybb->get_input('canmanagemodqueue', MyBB::INPUT_INT))), 1275 $form->generate_check_box("canmanagereportedcontent", 1, $lang->can_manage_reported_content, array("checked" => $mybb->get_input('canmanagereportedcontent', MyBB::INPUT_INT))), 1276 $form->generate_check_box("canviewmodlogs", 1, $lang->can_view_mod_logs, array("checked" => $mybb->get_input('canviewmodlogs', MyBB::INPUT_INT))) 1277 ); 1278 $form_container->output_row($lang->forum_post_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $forum_post_options)."</div>"); 1279 1280 $user_options = array( 1281 $form->generate_check_box("caneditprofiles", 1, $lang->can_edit_profiles, array("checked" => $mybb->get_input('caneditprofiles', MyBB::INPUT_INT))), 1282 $form->generate_check_box("canbanusers", 1, $lang->can_ban_users, array("checked" => $mybb->get_input('canbanusers', MyBB::INPUT_INT))), 1283 $form->generate_check_box("canviewwarnlogs", 1, $lang->can_view_warnlogs, array("checked" => $mybb->get_input('canviewwarnlogs', MyBB::INPUT_INT))), 1284 $form->generate_check_box("canuseipsearch", 1, $lang->can_use_ipsearch, array("checked" => $mybb->get_input('canuseipsearch', MyBB::INPUT_INT))) 1285 ); 1286 $form_container->output_row($lang->user_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $user_options)."</div>"); 1287 1288 $form_container->end(); 1289 echo "</div>"; 1290 1291 $plugins->run_hooks("admin_user_groups_edit_graph"); 1292 1293 $buttons[] = $form->generate_submit_button($lang->save_user_group); 1294 $form->output_submit_wrapper($buttons); 1295 1296 $form->end(); 1297 $page->output_footer(); 1298 } 1299 1300 if($mybb->input['action'] == "delete") 1301 { 1302 $query = $db->simple_select("usergroups", "*", "gid='".$mybb->get_input('gid', MyBB::INPUT_INT)."'"); 1303 $usergroup = $db->fetch_array($query); 1304 1305 if(!$usergroup) 1306 { 1307 flash_message($lang->error_invalid_user_group, 'error'); 1308 admin_redirect("index.php?module=user-groups"); 1309 } 1310 if($usergroup['type'] == 1) 1311 { 1312 flash_message($lang->error_default_group_delete, 'error'); 1313 admin_redirect("index.php?module=user-groups"); 1314 } 1315 1316 // User clicked no 1317 if($mybb->get_input('no')) 1318 { 1319 admin_redirect("index.php?module=user-groups"); 1320 } 1321 1322 $plugins->run_hooks("admin_user_groups_delete"); 1323 1324 if($mybb->request_method == "post") 1325 { 1326 if($usergroup['isbannedgroup'] == 1) 1327 { 1328 // If banned group, move users to default banned group 1329 $updated_users = array("usergroup" => 7); 1330 } 1331 else 1332 { 1333 // Move any users back to the registered group 1334 $updated_users = array("usergroup" => 2); 1335 } 1336 1337 $db->update_query("users", $updated_users, "usergroup='{$usergroup['gid']}'"); 1338 1339 $updated_users = array("displaygroup" => "usergroup"); 1340 $plugins->run_hooks("admin_user_groups_delete_commit"); 1341 1342 $db->update_query("users", $updated_users, "displaygroup='{$usergroup['gid']}'", "", true); // No quotes = displaygroup=usergroup 1343 1344 switch($db->type) 1345 { 1346 case "pgsql": 1347 case "sqlite": 1348 $query = $db->simple_select("users", "uid", "','||additionalgroups||',' LIKE '%,{$usergroup['gid']},%'"); 1349 break; 1350 default: 1351 $query = $db->simple_select("users", "uid", "CONCAT(',',additionalgroups,',') LIKE '%,{$usergroup['gid']},%'"); 1352 } 1353 while($user = $db->fetch_array($query)) 1354 { 1355 leave_usergroup($user['uid'], $usergroup['gid']); 1356 } 1357 1358 $db->update_query("banned", array("gid" => 7), "gid='{$usergroup['gid']}'"); 1359 $db->update_query("banned", array("oldgroup" => 2), "oldgroup='{$usergroup['gid']}'"); 1360 $db->update_query("banned", array("olddisplaygroup" => "oldgroup"), "olddisplaygroup='{$usergroup['gid']}'", "", true); // No quotes = displaygroup=usergroup 1361 1362 $db->delete_query("forumpermissions", "gid='{$usergroup['gid']}'"); 1363 $db->delete_query("calendarpermissions", "gid='{$usergroup['gid']}'"); 1364 $db->delete_query("joinrequests", "gid='{$usergroup['gid']}'"); 1365 $db->delete_query("moderators", "id='{$usergroup['gid']}' AND isgroup='1'"); 1366 $db->delete_query("groupleaders", "gid='{$usergroup['gid']}'"); 1367 $db->delete_query("usergroups", "gid='{$usergroup['gid']}'"); 1368 1369 $plugins->run_hooks("admin_user_groups_delete_commit_end"); 1370 1371 $cache->update_groupleaders(); 1372 $cache->update_moderators(); 1373 $cache->update_usergroups(); 1374 $cache->update_forumpermissions(); 1375 1376 // Log admin action 1377 log_admin_action($usergroup['gid'], $usergroup['title']); 1378 1379 flash_message($lang->success_group_deleted, 'success'); 1380 admin_redirect("index.php?module=user-groups"); 1381 } 1382 else 1383 { 1384 $page->output_confirm_action("index.php?module=user-groups&action=delete&gid={$usergroup['gid']}", $lang->confirm_group_deletion); 1385 } 1386 } 1387 1388 if($mybb->input['action'] == "disporder" && $mybb->request_method == "post") 1389 { 1390 $plugins->run_hooks("admin_user_groups_disporder"); 1391 1392 foreach($mybb->input['disporder'] as $gid=>$order) 1393 { 1394 $gid = (int)$gid; 1395 $order = (int)$order; 1396 if($gid != 0 && $order > 0) 1397 { 1398 $sql_array = array( 1399 'disporder' => $order, 1400 ); 1401 $db->update_query('usergroups', $sql_array, "gid = '{$gid}'"); 1402 } 1403 } 1404 1405 // Log admin action 1406 log_admin_action(); 1407 1408 $plugins->run_hooks("admin_user_groups_disporder_commit"); 1409 1410 flash_message($lang->success_group_disporders_updated, 'success'); 1411 admin_redirect("index.php?module=user-groups"); 1412 } 1413 1414 if(!$mybb->input['action']) 1415 { 1416 $plugins->run_hooks("admin_user_groups_start"); 1417 1418 if($mybb->request_method == "post") 1419 { 1420 if(!empty($mybb->input['disporder'])) 1421 { 1422 foreach($mybb->input['disporder'] as $gid => $order) 1423 { 1424 if(is_numeric($order) && (int)$order >= 0) 1425 { 1426 $db->update_query("usergroups", array('disporder' => (int)$order), "gid='".(int)$gid."'"); 1427 } 1428 } 1429 1430 $plugins->run_hooks("admin_user_groups_start_commit"); 1431 1432 $cache->update_usergroups(); 1433 1434 flash_message($lang->success_groups_disporder_updated, 'success'); 1435 admin_redirect("index.php?module=user-groups"); 1436 } 1437 } 1438 1439 $page->output_header($lang->manage_user_groups); 1440 $page->output_nav_tabs($sub_tabs, 'manage_groups'); 1441 1442 $form = new Form("index.php?module=user-groups", "post", "groups"); 1443 1444 $primaryusers = $secondaryusers = array(); 1445 1446 $query = $db->query(" 1447 SELECT g.gid, COUNT(u.uid) AS users 1448 FROM ".TABLE_PREFIX."users u 1449 LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=u.usergroup) 1450 GROUP BY g.gid 1451 "); 1452 while($groupcount = $db->fetch_array($query)) 1453 { 1454 $primaryusers[$groupcount['gid']] = $groupcount['users']; 1455 } 1456 1457 switch($db->type) 1458 { 1459 case "pgsql": 1460 case "sqlite": 1461 $query = $db->query(" 1462 SELECT g.gid, COUNT(u.uid) AS users 1463 FROM ".TABLE_PREFIX."users u 1464 LEFT JOIN ".TABLE_PREFIX."usergroups g ON (','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') 1465 WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid 1466 "); 1467 break; 1468 default: 1469 $query = $db->query(" 1470 SELECT g.gid, COUNT(u.uid) AS users 1471 FROM ".TABLE_PREFIX."users u 1472 LEFT JOIN ".TABLE_PREFIX."usergroups g ON (CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%')) 1473 WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid 1474 "); 1475 } 1476 while($groupcount = $db->fetch_array($query)) 1477 { 1478 $secondaryusers[$groupcount['gid']] = $groupcount['users']; 1479 } 1480 1481 $query = $db->query(" 1482 SELECT g.gid, COUNT(r.uid) AS users 1483 FROM ".TABLE_PREFIX."joinrequests r 1484 LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=r.gid) 1485 GROUP BY g.gid 1486 "); 1487 1488 $joinrequests = array(); 1489 while($joinrequest = $db->fetch_array($query)) 1490 { 1491 $joinrequests[$joinrequest['gid']] = $joinrequest['users']; 1492 } 1493 1494 // Fetch group leaders 1495 $leaders = array(); 1496 $query = $db->query(" 1497 SELECT u.username, u.uid, l.gid 1498 FROM ".TABLE_PREFIX."groupleaders l 1499 INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid) 1500 ORDER BY u.username ASC 1501 "); 1502 while($leader = $db->fetch_array($query)) 1503 { 1504 $leaders[$leader['gid']][] = build_profile_link(htmlspecialchars_uni($leader['username']), $leader['uid'], "_blank"); 1505 } 1506 1507 $form_container = new FormContainer($lang->user_groups); 1508 $form_container->output_row_header($lang->group); 1509 $form_container->output_row_header($lang->number_of_users, array("class" => "align_center", 'width' => '75')); 1510 $form_container->output_row_header($lang->order, array("class" => "align_center", 'width' => '5%')); 1511 $form_container->output_row_header($lang->controls, array("class" => "align_center")); 1512 1513 $query = $db->simple_select("usergroups", "*", "", array('order_by' => 'disporder')); 1514 while($usergroup = $db->fetch_array($query)) 1515 { 1516 if($usergroup['type'] > 1) 1517 { 1518 $icon = "<img src=\"styles/default/images/icons/custom.png\" alt=\"{$lang->custom_user_group}\" style=\"vertical-align: middle;\" />"; 1519 } 1520 else 1521 { 1522 $icon = "<img src=\"styles/default/images/icons/default.png\" alt=\"{$lang->default_user_group}\" style=\"vertical-align: middle;\" />"; 1523 } 1524 1525 $leaders_list = ''; 1526 if(isset($leaders[$usergroup['gid']])) 1527 { 1528 $leaders_list = "<br />{$lang->group_leaders}: ".implode($lang->comma, $leaders[$usergroup['gid']]); 1529 } 1530 1531 $join_requests = ''; 1532 if(isset($joinrequests[$usergroup['gid']]) && $joinrequests[$usergroup['gid']] > 1 && $usergroup['type'] == 4) 1533 { 1534 $join_requests = " <small><a href=\"index.php?module=user-groups&action=join_requests&gid={$usergroup['gid']}\"><span style=\"color: red;\">({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})</span></a></small>"; 1535 } 1536 else if(isset($joinrequests[$usergroup['gid']]) && $joinrequests[$usergroup['gid']] == 1 && $usergroup['type'] == 4) 1537 { 1538 $join_requests = " <small><a href=\"index.php?module=user-groups&action=join_requests&gid={$usergroup['gid']}\"><span style=\"color: red;\">({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})</span></a></small>"; 1539 } 1540 1541 $form_container->output_cell("<div class=\"float_right\">{$icon}</div><div><strong><a href=\"index.php?module=user-groups&action=edit&gid={$usergroup['gid']}\">".format_name(htmlspecialchars_uni($usergroup['title']), $usergroup['gid'])."</a></strong>{$join_requests}<br /><small>".htmlspecialchars_uni($usergroup['description'])."{$leaders_list}</small></div>"); 1542 1543 if(!isset($primaryusers[$usergroup['gid']])) 1544 { 1545 $primaryusers[$usergroup['gid']] = 0; 1546 } 1547 if(!isset($secondaryusers[$usergroup['gid']])) 1548 { 1549 $secondaryusers[$usergroup['gid']] = 0; 1550 } 1551 $numusers = $primaryusers[$usergroup['gid']]; 1552 $numusers += $secondaryusers[$usergroup['gid']]; 1553 1554 $form_container->output_cell(my_number_format($numusers), array("class" => "align_center")); 1555 1556 if($usergroup['showforumteam'] == 1) 1557 { 1558 $form_container->output_cell($form->generate_numeric_field("disporder[{$usergroup['gid']}]", "{$usergroup['disporder']}", array('min' => 0, 'class' => 'align_center', 'style' => 'width:80%')), array("class" => "align_center")); 1559 } 1560 else 1561 { 1562 $form_container->output_cell(" ", array("class" => "align_center")); 1563 } 1564 1565 $popup = new PopupMenu("usergroup_{$usergroup['gid']}", $lang->options); 1566 $popup->add_item($lang->edit_group, "index.php?module=user-groups&action=edit&gid={$usergroup['gid']}"); 1567 $popup->add_item($lang->list_users, "index.php?module=user-users&action=search&results=1&conditions[usergroup]={$usergroup['gid']}"); 1568 if(isset($joinrequests[$usergroup['gid']]) && $joinrequests[$usergroup['gid']] > 0 && $usergroup['type'] == 4) 1569 { 1570 $popup->add_item($lang->join_requests, "index.php?module=user-groups&action=join_requests&gid={$usergroup['gid']}"); 1571 } 1572 $popup->add_item($lang->group_leaders, "index.php?module=user-groups&action=leaders&gid={$usergroup['gid']}"); 1573 if($usergroup['type'] > 1) 1574 { 1575 $popup->add_item($lang->delete_group, "index.php?module=user-groups&action=delete&gid={$usergroup['gid']}&my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_group_deletion}')"); 1576 } 1577 $form_container->output_cell($popup->fetch(), array("class" => "align_center")); 1578 $form_container->construct_row(); 1579 } 1580 1581 if($form_container->num_rows() == 0) 1582 { 1583 $form_container->output_cell($lang->no_groups, array('colspan' => 4)); 1584 $form_container->construct_row(); 1585 } 1586 1587 $form_container->end(); 1588 1589 $buttons = array(); 1590 $buttons[] = $form->generate_submit_button($lang->update_groups_order); 1591 $form->output_submit_wrapper($buttons); 1592 1593 $form->end(); 1594 1595 echo <<<LEGEND 1596 <br /> 1597 <fieldset> 1598 <legend>{$lang->legend}</legend> 1599 <img src="styles/default/images/icons/custom.png" alt="{$lang->custom_user_group}" style="vertical-align: middle;" /> {$lang->custom_user_group}<br /> 1600 <img src="styles/default/images/icons/default.png" alt="{$lang->default_user_group}" style="vertical-align: middle;" /> {$lang->default_user_group} 1601 </fieldset> 1602 LEGEND; 1603 1604 $page->output_footer(); 1605 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| 2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |