[ Index ]

PHP Cross Reference of MyBB 1.6.5

title

Body

[close]

/admin/modules/user/ -> groups.php (source)

   1  <?php
   2  /**
   3   * MyBB 1.6
   4   * Copyright 2010 MyBB Group, All Rights Reserved
   5   *
   6   * Website: http://mybb.com
   7   * License: http://mybb.com/about/license
   8   *
   9   * $Id: groups.php 5648 2011-11-09 08:48:00Z Tomm $
  10   */
  11   
  12  // Array of usergroup permission fields and their default values.
  13  $usergroup_permissions = array(
  14      "isbannedgroup" => 0,
  15      "canview" => 1,
  16      "canviewthreads" => 1,
  17      "canviewprofiles" => 1,
  18      "candlattachments" => 1,
  19      "canpostthreads" => 1,
  20      "canpostreplys" => 1,
  21      "canpostattachments" => 1,
  22      "canratethreads" => 1,
  23      "caneditposts" => 1,
  24      "candeleteposts" => 1,
  25      "candeletethreads" => 1,
  26      "caneditattachments" => 1,
  27      "canpostpolls" => 1,
  28      "canvotepolls" => 1,
  29      "canundovotes" => 0,
  30      "canusepms" => 1,
  31      "cansendpms" => 1,
  32      "cantrackpms" => 1,
  33      "candenypmreceipts" => 1,
  34      "pmquota" => 100,
  35      "maxpmrecipients" => 5,
  36      "cansendemail" => 1,
  37      "maxemails" => 4,
  38      "canviewmemberlist" => 1,
  39      "canviewcalendar" => 1,
  40      "canaddevents" => 1,
  41      "canbypasseventmod" => 0,
  42      "canmoderateevents" => 0,
  43      "canviewonline" => 1,
  44      "canviewwolinvis" => 0,
  45      "canviewonlineips" => 0,
  46      "cancp" => 0,
  47      "issupermod" => 0,
  48      "cansearch" => 1,
  49      "canusercp" => 1,
  50      "canuploadavatars" => 1,
  51      "canratemembers" => 1,
  52      "canchangename" => 0,
  53      "showforumteam" => 0,
  54      "usereputationsystem" => 1,
  55      "cangivereputations" => 1,
  56      "reputationpower" => 1,
  57      "maxreputationsday" => 5,
  58      "maxreputationsperuser" => 5,
  59      "maxreputationsperthread" => 5,
  60      "candisplaygroup" => 0,
  61      "attachquota" => 5000,
  62      "cancustomtitle" => 0,
  63      "canwarnusers" => 0,
  64      "canreceivewarnings" => 1,
  65      "maxwarningsday" => 0,
  66      "canmodcp" => 0,
  67      "showinbirthdaylist" => 0,
  68      "canoverridepm" => 0,
  69      "canusesig" => 0,
  70      "canusesigxposts" => 0,
  71      "signofollow" => 0
  72  );
  73  
  74  // Disallow direct access to this file for security reasons
  75  if(!defined("IN_MYBB"))
  76  {
  77      die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
  78  }
  79  
  80  $page->add_breadcrumb_item($lang->user_groups, "index.php?module=user-groups");
  81  
  82  if($mybb->input['action'] == "add" || !$mybb->input['action'])
  83  {
  84      $sub_tabs['manage_groups'] = array(
  85          'title' => $lang->manage_user_groups,
  86          'link' => "index.php?module=user-groups",
  87          'description' => $lang->manage_user_groups_desc
  88      );
  89      $sub_tabs['add_group'] = array(
  90          'title' => $lang->add_user_group,
  91          'link' => "index.php?module=user-groups&amp;action=add",
  92          'description' => $lang->add_user_group_desc
  93      );
  94  }
  95  
  96  $plugins->run_hooks("admin_user_groups_begin");
  97  
  98  if($mybb->input['action'] == "export")
  99  {
 100      $plugins->run_hooks("admin_user_groups_export_start");
 101      
 102      // Log admin action
 103      log_admin_action();
 104  
 105      $gidwhere = "";
 106      if($mybb->input['gid'])
 107      {
 108          $gidwhere = "gid='".intval($mybb->input['gid'])."'";
 109      }
 110      $xml = "<?xml version=\"1.0\" encoding=\"{$lang->settings['charset']}\"?".">\n";
 111      $xml = "<usergroups version=\"{$mybb->version_code}\" exported=\"".TIME_NOW."\">\n";
 112  
 113      $query = $db->simple_select("usergroups", "*", $gidwhere, array('order_by' => 'gid', 'order_dir' => 'ASC'));
 114      while($usergroup = $db->fetch_array($query))
 115      {
 116          $xml .= "\t\t<usergroup>\n";
 117          foreach($usergroup as $key => $value)
 118          {
 119              $xml .= "\t\t\t<{$key}><![CDATA[{$value}]]></{$key}>\n";
 120          }
 121          $xml .= "\t\t</usergroup>\n";
 122      }
 123  
 124      $xml .= "</usergroups>";
 125      $mybb->settings['bbname'] = urlencode($mybb->settings['bbname']);
 126  
 127      header("Content-disposition: filename=".$mybb->settings['bbname']."-usergroups.xml");
 128      header("Content-Length: ".my_strlen($xml));
 129      header("Content-type: unknown/unknown");
 130      header("Pragma: no-cache");
 131      header("Expires: 0");
 132      
 133      $plugins->run_hooks("admin_user_groups_export_end");
 134      
 135      echo $xml;
 136      exit;    
 137  }
 138  
 139  if($mybb->input['action'] == "approve_join_request")
 140  {
 141      $plugins->run_hooks("admin_user_groups_approve_join_request");
 142      
 143      $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'");
 144      $request = $db->fetch_array($query);
 145      
 146      if(!$request['rid'])
 147      {
 148          flash_message($lang->error_invalid_join_request, 'error');
 149          admin_redirect("index.php?module=user-groups");
 150      }
 151      
 152      // Add the user to the group
 153      join_usergroup($request['uid'], $request['gid']);
 154      
 155      // Delete the join request
 156      $db->delete_query("joinrequests", "rid='{$request['rid']}'");
 157      
 158      flash_message($lang->success_join_request_approved, "success");
 159      admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}");
 160  }
 161  
 162  if($mybb->input['action'] == "deny_join_request")
 163  {
 164      $plugins->run_hooks("admin_user_groups_deny_join_request");
 165      
 166      $query = $db->simple_select("joinrequests", "*", "rid='".$mybb->input['rid']."'");
 167      $request = $db->fetch_array($query);
 168  
 169      if(!$request['rid'])
 170      {
 171          flash_message($lang->error_invalid_join_request, 'error');
 172          admin_redirect("index.php?module=user-groups");
 173      }
 174  
 175      // Delete the join request
 176      $db->delete_query("joinrequests", "rid='{$request['rid']}'");
 177  
 178      flash_message($lang->success_join_request_denied, "success");
 179      admin_redirect("index.php?module=user-groups&action=join_requests&gid={$request['gid']}");
 180  }
 181  
 182  if($mybb->input['action'] == "join_requests")
 183  {
 184      $plugins->run_hooks("admin_user_groups_join_requests_start");
 185      
 186      $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['gid'])."'");
 187      $group = $db->fetch_array($query);
 188      
 189      if(!$group['gid'] || $group['type'] != 4)
 190      {
 191          flash_message($lang->error_invalid_user_group, 'error');
 192          admin_redirect("index.php?module=user-groups");
 193      }
 194      
 195      if($mybb->request_method == "post" && is_array($mybb->input['users']))
 196      {        
 197          $uid_in = implode(",", array_map('intval', $mybb->input['users']));
 198          
 199          if(isset($mybb->input['approve']))
 200          {
 201              foreach($mybb->input['users'] as $uid)
 202              {
 203                  $uid = intval($uid);
 204                  join_usergroup($uid, $group['gid']);
 205              }
 206              // Log admin action
 207              log_admin_action("approve", $group['title'], $group['gid']);
 208              $message = $lang->success_selected_requests_approved;
 209          }
 210          else
 211          {
 212              // Log admin action
 213              log_admin_action("deny", $group['title'], $group['gid']);
 214              $message = $lang->success_selected_requests_denied;
 215          }
 216          
 217          $plugins->run_hooks("admin_user_groups_join_requests_commit");
 218          
 219          // Go through and delete the join requests from the database
 220          $db->delete_query("joinrequests", "uid IN ({$uid_in}) AND gid='{$group['gid']}'");
 221  
 222          flash_message($message, 'success');
 223          admin_redirect("index.php?module=user-groups&action=join_requests&gid={$group['gid']}");
 224      }
 225      
 226      $page->add_breadcrumb_item($lang->join_requests_for." {$group['title']}");
 227      $page->output_header($lang->join_requests_for." {$group['title']}");
 228      
 229      $sub_tabs = array();
 230      $sub_tabs['join_requests'] = array(
 231          'title' => $lang->group_join_requests,
 232          'link' => "index.php?module=user-groups&action=join_requests&gid={$group['gid']}",
 233          'description' => $lang->group_join_requests_desc
 234      );
 235          
 236      $page->output_nav_tabs($sub_tabs, 'join_requests');
 237      
 238      $query = $db->simple_select("joinrequests", "COUNT(*) AS num_requests", "gid='{$group['gid']}'");
 239      $num_requests = $db->fetch_field($query, "num_requests");
 240  
 241      $per_page = 20;
 242  
 243      if($mybb->input['page'] > 0)
 244      {
 245          $current_page = intval($mybb->input['page']);
 246          $start = ($current_page-1)*$per_page;
 247          $pages = $num_requests / $per_page;
 248          $pages = ceil($pages);
 249          if($current_page > $pages)
 250          {
 251              $start = 0;
 252              $current_page = 1;
 253          }
 254      }
 255      else
 256      {
 257          $start = 0;
 258          $current_page = 1;
 259      }
 260  
 261      // Do we need to construct the pagination?
 262      $pagination = '';
 263      if($num_requests > $per_page)
 264      {
 265          $pagination = draw_admin_pagination($page, $per_page, $num_requests, "index.php?module=user-groups&amp;action=join_requests&gid={$group['gid']}");
 266          echo $pagination;
 267      }    
 268  
 269      $form = new Form("index.php?module=user-groups&amp;action=join_requests&gid={$group['gid']}", "post");
 270      $table = new Table;
 271      $table->construct_header($form->generate_check_box("checkall", 1, "", array('class' => 'checkall')), array('width' => 1));
 272      $table->construct_header($lang->users);
 273      $table->construct_header($lang->reason);
 274      $table->construct_header($lang->date_requested, array("class" => 'align_center', "width" => 200));
 275      $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200));
 276  
 277      $query = $db->query("
 278          SELECT j.*, u.username
 279          FROM ".TABLE_PREFIX."joinrequests j
 280          INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=j.uid)
 281          WHERE j.gid='{$group['gid']}'
 282          ORDER BY dateline ASC
 283          LIMIT {$start}, {$per_page}
 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($request['username'], $request['uid'], "_blank")."</strong>");
 289          $table->construct_cell(htmlspecialchars_uni($request['reason']));
 290          $table->construct_cell(my_date($mybb->settings['dateformat'].", ".$mybb->settings['timeformat'], $request['dateline']), array('class' => 'align_center'));
 291          $table->construct_cell("<a href=\"index.php?module=user-groups&action=approve_join_request&amp;rid={$request['rid']}\">{$lang->approve}</a>", array("class" => "align_center"));
 292          $table->construct_cell("<a href=\"index.php?module=user-groups&action=deny_join_request&amp;rid={$request['rid']}\">{$lang->deny}</a>", array("class" => "align_center"));
 293          $table->construct_row();    
 294      }
 295      
 296      if($table->num_rows() == 0)
 297      {
 298          $table->construct_cell($lang->no_join_requests, array("colspan" => 6));
 299          $table->construct_row();
 300      }
 301  
 302      $table->output($lang->join_requests_for." {$group['title']}");
 303      echo $pagination;
 304  
 305      $buttons[] = $form->generate_submit_button($lang->approve_selected_requests, array('name' => 'approve'));
 306      $buttons[] = $form->generate_submit_button($lang->deny_selected_requests, array('name' => 'deny'));
 307      $form->output_submit_wrapper($buttons);
 308      $form->end();
 309      
 310      $page->output_footer();        
 311  }
 312  if($mybb->input['action'] == "add_leader" && $mybb->request_method == "post")
 313  {
 314      $plugins->run_hooks("admin_user_groups_add_leader");
 315      
 316      $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['gid'])."'");
 317      $group = $db->fetch_array($query);
 318  
 319      if(!$group['gid'])
 320      {
 321          flash_message($lang->error_invalid_user_group, 'error');
 322          admin_redirect("index.php?module=user-group");
 323      }
 324          
 325      $query = $db->simple_select("users", "uid, username", "LOWER(username)='".$db->escape_string(my_strtolower($mybb->input['username']))."'");
 326      $user = $db->fetch_array($query);
 327      if(!$user['uid'])
 328      {
 329          $errors[] = $lang->error_invalid_username;
 330      }
 331      else
 332      {
 333          // Is this user already a leader of this group?
 334          $query = $db->simple_select("groupleaders", "uid", "uid='{$user['uid']}' AND gid='{$group['gid']}'");
 335          $existing_leader = $db->fetch_field($query, "uid");
 336          if($existing_leader)
 337          {
 338              $errors[] = $lang->error_already_leader;
 339          }
 340      }
 341      
 342      // No errors, insert
 343      if(!$errors)
 344      {
 345          $new_leader = array(
 346              "gid" => $group['gid'],
 347              "uid" => $user['uid'],
 348              "canmanagemembers" => intval($mybb->input['canmanagemembers']),
 349              "canmanagerequests" => intval($mybb->input['canmanagerequests'])
 350          );
 351          
 352          $plugins->run_hooks("admin_user_groups_add_leader_commit");
 353          
 354          $db->insert_query("groupleaders", $new_leader);
 355  
 356          $cache->update_groupleaders();
 357          
 358          // Log admin action
 359          log_admin_action($user['uid'], $mybb->input['username'], $group['gid'], $group['title']);
 360  
 361          flash_message("{$user['username']} ".$lang->success_user_made_leader, 'success');
 362          admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}");
 363      }
 364      else
 365      {
 366          // Errors, show leaders page
 367          $mybb->input['action'] = "leaders";
 368      }
 369  }
 370  
 371  // Show a listing of group leaders
 372  if($mybb->input['action'] == "leaders")
 373  {
 374      $plugins->run_hooks("admin_user_groups_leaders");
 375      
 376      $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['gid'])."'");
 377      $group = $db->fetch_array($query);
 378  
 379      if(!$group['gid'])
 380      {
 381          flash_message($lang->error_invalid_user_group, 'error');
 382          admin_redirect("index.php?module=user-groups");
 383      }
 384  
 385      $page->add_breadcrumb_item($lang->group_leaders_for." {$group['title']}");
 386      $page->output_header($lang->group_leaders_for." {$group['title']}");
 387      
 388      $sub_tabs = array();
 389      $sub_tabs['group_leaders'] = array(
 390          'title' => $lang->manage_group_leaders,
 391          'link' => "index.php?module=user-groups&action=leaders&gid={$group['gid']}",
 392          'description' => $lang->manage_group_leaders_desc
 393      );
 394          
 395      $page->output_nav_tabs($sub_tabs, 'group_leaders');
 396  
 397      $table = new Table;
 398      $table->construct_header($lang->user);
 399      $table->construct_header($lang->can_manage_members, array("class" => 'align_center', "width" => 200));
 400      $table->construct_header($lang->can_manage_join_requests, array("class" => 'align_center', "width" => 200));
 401      $table->construct_header($lang->controls, array("class" => "align_center", "colspan" => 2, "width" => 200));
 402  
 403      $query = $db->query("
 404          SELECT g.*, u.username
 405          FROM ".TABLE_PREFIX."groupleaders g
 406          INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid)
 407          WHERE g.gid='{$group['gid']}'
 408          ORDER BY u.username ASC
 409      ");
 410      while($leader = $db->fetch_array($query))
 411      {
 412          $leader['username'] = htmlspecialchars_uni($leader['username']);
 413          if($leader['canmanagemembers'])
 414          {
 415              $canmanagemembers = $lang->yes;
 416          }
 417          else
 418          {
 419              $canmanagemembers = $lang->no;
 420          }
 421              
 422          if($leader['canmanagerequests'])
 423          {
 424              $canmanagerequests = $lang->yes;
 425          }
 426          else
 427          {
 428              $canmanagerequests = $lang->no;
 429          }
 430          
 431          $table->construct_cell("<strong>".build_profile_link($leader['username'], $leader['uid'], "_blank")."</strong>");
 432          $table->construct_cell($canmanagemembers, array("class" => "align_center"));
 433          $table->construct_cell($canmanagerequests, array("class" => "align_center"));
 434          $table->construct_cell("<a href=\"index.php?module=user-groups&amp;action=edit_leader&lid={$leader['lid']}\">{$lang->edit}</a>", array("class" => "align_center"));
 435          $table->construct_cell("<a href=\"index.php?module=user-groups&amp;action=delete_leader&amp;lid={$leader['lid']}&amp;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"));
 436          $table->construct_row();
 437      }
 438      
 439      if($table->num_rows() == 0)
 440      {
 441          $table->construct_cell($lang->no_assigned_leaders, array("colspan" => 5));
 442          $table->construct_row();
 443      }
 444      
 445      $table->output($lang->group_leaders_for." {$group['title']}");
 446      
 447      $form = new Form("index.php?module=user-groups&amp;action=add_leader&amp;gid={$group['gid']}", "post");
 448      
 449      if($errors)
 450      {
 451          $page->output_inline_error($errors);
 452      }
 453      else
 454      {
 455          $mybb->input = array(
 456              "canmanagemembers" => 1,
 457              "canmanagerequests" => 1
 458          );
 459      }
 460      
 461      $form_container = new FormContainer($lang->add_group_leader." {$group['title']}");
 462      $form_container->output_row($lang->username." <em>*</em>", "", $form->generate_text_box('username', $mybb->input['username'], array('id' => 'username')), 'username');
 463      $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->input['canmanagemembers']));
 464          $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->input['canmanagerequests']));
 465      $buttons[] = $form->generate_submit_button($lang->save_group_leader);
 466      
 467      $form_container->end();
 468      $form->output_submit_wrapper($buttons);
 469      $form->end();
 470      
 471      $page->output_footer();    
 472  }
 473  
 474  
 475  if($mybb->input['action'] == "delete_leader")
 476  {
 477      $plugins->run_hooks("admin_user_groups_delete_leader");
 478      
 479      $query = $db->query("
 480          SELECT l.*, u.username
 481          FROM ".TABLE_PREFIX."groupleaders l
 482          INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid)
 483          WHERE l.lid='".intval($mybb->input['lid'])."'");
 484      $leader = $db->fetch_array($query);
 485      
 486      if(!$leader['lid'])
 487      {
 488          flash_message($lang->error_invalid_group_leader, 'error');
 489          admin_redirect("index.php?module=user-groups");        
 490      }
 491      
 492      $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'");
 493      $group = $db->fetch_array($query);    
 494      
 495      // User clicked no
 496      if($mybb->input['no'])
 497      {
 498          admin_redirect("index.php?module=user-groups");
 499      }
 500  
 501      if($mybb->request_method == "post")
 502      {        
 503          $plugins->run_hooks("admin_user_groups_delete_leader_commit");
 504          
 505          // Delete the leader
 506          $db->delete_query("groupleaders", "lid='{$leader['lid']}'");
 507          
 508          $cache->update_groupleaders();
 509          
 510          // Log admin action
 511          log_admin_action($leader['lid'], $leader['username'], $group['gid'], $group['title']);
 512  
 513          flash_message($lang->success_group_leader_deleted, 'success');
 514          admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}");
 515      }
 516      else
 517      {
 518          $page->output_confirm_action("index.php?module=user-groups&amp;action=delete_leader&amp;lid={$leader['lid']}", $lang->confirm_group_leader_deletion);
 519      }
 520  }
 521  
 522  if($mybb->input['action'] == "edit_leader")
 523  {
 524      $plugins->run_hooks("admin_user_groups_edit_leader");
 525      
 526      $query = $db->query("
 527          SELECT l.*, u.username
 528          FROM ".TABLE_PREFIX."groupleaders l
 529          INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid)
 530          WHERE l.lid='".intval($mybb->input['lid'])."'
 531      ");
 532      $leader = $db->fetch_array($query);
 533  
 534      if(!$leader['lid'])
 535      {
 536          flash_message($lang->error_invalid_group_leader, 'error');
 537          admin_redirect("index.php?module=user-groups");        
 538      }
 539  
 540      $query = $db->simple_select("usergroups", "*", "gid='{$leader['gid']}'");
 541      $group = $db->fetch_array($query);
 542          
 543      if($mybb->request_method == "post")
 544      {
 545          $updated_leader = array(
 546              "canmanagemembers" => intval($mybb->input['canmanagemembers']),
 547              "canmanagerequests" => intval($mybb->input['canmanagerequests'])
 548          );
 549          
 550          $plugins->run_hooks("admin_user_groups_edit_leader_commit");
 551          $db->update_query("groupleaders", $updated_leader, "lid={$leader['lid']}");
 552          
 553          $cache->update_groupleaders();
 554          
 555          // Log admin action
 556          log_admin_action($leader['lid'], $leader['username'], $group['gid'], $group['title']);
 557  
 558          flash_message($lang->success_group_leader_updated, 'success');
 559          admin_redirect("index.php?module=user-groups&action=leaders&gid={$group['gid']}");        
 560      }
 561      
 562      if(!$errors)
 563      {
 564          $mybb->input = $leader;
 565      }
 566      
 567      $page->add_breadcrumb_item($lang->group_leaders_for." {$group['title']}", "index.php?module=user-groups&action=leaders&gid={$group['gid']}");
 568      $page->add_breadcrumb_item($lang->edit_leader." {$leader['username']}");
 569      
 570      $page->output_header($lang->edit_group_leader);
 571      
 572      $sub_tabs = array();
 573      $sub_tabs['group_leaders'] = array(
 574          'title' => $lang->edit_group_leader,
 575          'link' => "index.php?module=user-groups&action=edit_leader&lid={$leader['lid']}",
 576          'description' => $lang->edit_group_leader_desc
 577      );
 578          
 579      $page->output_nav_tabs($sub_tabs, 'group_leaders');
 580  
 581      $form = new Form("index.php?module=user-groups&amp;action=edit_leader&lid={$leader['lid']}'", "post");
 582      
 583      $form_container = new FormContainer($lang->edit_group_leader);
 584      $form_container->output_row($lang->username." <em>*</em>", "", $leader['username']);
 585      
 586      $form_container->output_row($lang->can_manage_group_members, $lang->can_manage_group_members_desc, $form->generate_yes_no_radio('canmanagemembers', $mybb->input['canmanagemembers']));
 587          $form_container->output_row($lang->can_manage_group_join_requests, $lang->can_manage_group_join_requests_desc, $form->generate_yes_no_radio('canmanagerequests', $mybb->input['canmanagerequests']));
 588      $buttons[] = $form->generate_submit_button($lang->save_group_leader);
 589      
 590      $form_container->end();
 591      $form->output_submit_wrapper($buttons);
 592      $form->end();
 593      
 594      $page->output_footer();    
 595  }
 596  
 597  if($mybb->input['action'] == "add")
 598  {
 599      $plugins->run_hooks("admin_user_groups_add");
 600      
 601      if($mybb->request_method == "post")
 602      {
 603          if(!trim($mybb->input['title']))
 604          {
 605              $errors[] = $lang->error_missing_title;
 606          }
 607          
 608          if(my_strpos($mybb->input['namestyle'], "{username}") === false)
 609          {
 610              $errors[] = $lang->error_missing_namestyle_username;
 611          }
 612  
 613          if(!$errors)
 614          {
 615              if($mybb->input['stars'] < 1)
 616              {
 617                  $mybb->input['stars'] = 0;
 618              }
 619              
 620              if(!$mybb->input['starimage'])
 621              {
 622                  $mybb->input['starimage'] = "images/star.gif";
 623              }
 624              
 625              $new_usergroup = array(
 626                  "type" => 2,
 627                  "title" => $db->escape_string($mybb->input['title']),
 628                  "description" => $db->escape_string($mybb->input['description']),
 629                  "namestyle" => $db->escape_string($mybb->input['namestyle']),
 630                  "usertitle" => $db->escape_string($mybb->input['usertitle']),
 631                  "stars" => intval($mybb->input['stars']),
 632                  "starimage" => $db->escape_string($mybb->input['starimage']),
 633                  "disporder" => 0
 634              );
 635              
 636              // Set default permissions
 637              if($mybb->input['copyfrom'] == 0)
 638              {
 639                  $new_usergroup = array_merge($new_usergroup, $usergroup_permissions);
 640              }
 641              // Copying permissions from another group
 642              else
 643              {
 644                  $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['copyfrom'])."'");
 645                  $existing_usergroup = $db->fetch_array($query);
 646                  foreach(array_keys($usergroup_permissions) as $field)
 647                  {
 648                      $new_usergroup[$field] = $existing_usergroup[$field];
 649                  }
 650              }
 651              
 652              $plugins->run_hooks("admin_user_groups_add_commit");
 653              
 654              $gid = $db->insert_query("usergroups", $new_usergroup);
 655              
 656              // Are we copying permissions? If so, copy all forum permissions too
 657              if($mybb->input['copyfrom'] > 0)
 658              {
 659                  $query = $db->simple_select("forumpermissions", "*", "gid='".intval($mybb->input['copyfrom'])."'");
 660                  while($forum_permission = $db->fetch_array($query))
 661                  {
 662                      unset($forum_permission['pid']);
 663                      $forum_permission['gid'] = $gid;
 664                      $db->insert_query("forumpermissions", $forum_permission);
 665                  }
 666              }
 667  
 668              // Update the caches
 669              $cache->update_usergroups();
 670              $cache->update_forumpermissions();
 671  
 672              // Log admin action
 673              log_admin_action($gid, $mybb->input['title']);
 674              
 675              flash_message($lang->success_group_created, 'success');
 676              admin_redirect("index.php?module=user-groups&action=edit&gid={$gid}");
 677          }
 678      }
 679  
 680      $page->add_breadcrumb_item($lang->add_user_group);
 681      $page->output_header($lang->add_user_group);
 682      
 683      $page->output_nav_tabs($sub_tabs, 'add_group');
 684      $form = new Form("index.php?module=user-groups&amp;action=add", "post");
 685      
 686      if($errors)
 687      {
 688          $page->output_inline_error($errors);
 689      }
 690      else
 691      {
 692          $mybb->input = array(
 693              "namestyle" => "{username}"
 694          );
 695      }
 696  
 697      $form_container = new FormContainer($lang->add_user_group);
 698      $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title');
 699      $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description');
 700      $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->input['namestyle'], array('id' => 'namestyle')), 'namestyle');
 701      $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle');
 702  
 703      $options[0] = $lang->do_not_copy_permissions;
 704      $query = $db->simple_select("usergroups", "gid, title", "gid != '1'", array('order_by' => 'title'));
 705      while($usergroup = $db->fetch_array($query))
 706      {
 707          $options[$usergroup['gid']] = $usergroup['title'];
 708      }
 709      $form_container->output_row($lang->copy_permissions_from, $lang->copy_permissions_from_desc, $form->generate_select_box('copyfrom', $options, $mybb->input['copyfrom'], array('id' => 'copyfrom')), 'copyfrom');
 710  
 711      $form_container->end();
 712      $buttons[] = $form->generate_submit_button($lang->save_user_group);
 713      $form->output_submit_wrapper($buttons);
 714  
 715      $form->end();
 716      $page->output_footer();
 717  }
 718  
 719  if($mybb->input['action'] == "edit")
 720  {
 721      $plugins->run_hooks("admin_user_groups_edit");
 722      
 723      $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['gid'])."'");
 724      $usergroup = $db->fetch_array($query);
 725  
 726      if(!$usergroup['gid'])
 727      {
 728          flash_message($lang->error_invalid_user_group, 'error');
 729          admin_redirect("index.php?module=user-group");
 730      }
 731  
 732      if($mybb->request_method == "post")
 733      {
 734          if(!trim($mybb->input['title']))
 735          {
 736              $errors[] = $lang->error_missing_title;
 737          }
 738          
 739          if(my_strpos($mybb->input['namestyle'], "{username}") === false)
 740          {
 741              $errors[] = $lang->error_missing_namestyle_username;
 742          }
 743  
 744          if(!$errors)
 745          {
 746              if($mybb->input['joinable'] == 1)
 747              {
 748                  if($mybb->input['moderate'] == 1)
 749                  {
 750                      $mybb->input['type'] = "4";
 751                  }
 752                  else
 753                  {
 754                      $mybb->input['type'] = "3";
 755                  }
 756              }
 757              else
 758              {
 759                  $mybb->input['type'] = "2";
 760              }
 761  
 762              if($usergroup['type'] == 1)
 763              {
 764                  $mybb->input['type'] = 1;
 765              }
 766  
 767              if($mybb->input['stars'] < 1)
 768              {
 769                  $mybb->input['stars'] = 0;
 770              }
 771  
 772              $updated_group = array(
 773                  "type" => intval($mybb->input['type']),
 774                  "title" => $db->escape_string($mybb->input['title']),
 775                  "description" => $db->escape_string($mybb->input['description']),
 776                  "namestyle" => $db->escape_string($mybb->input['namestyle']),
 777                  "usertitle" => $db->escape_string($mybb->input['usertitle']),
 778                  "stars" => intval($mybb->input['stars']),
 779                  "starimage" => $db->escape_string($mybb->input['starimage']),
 780                  "image" => $db->escape_string($mybb->input['image']),
 781                  "isbannedgroup" => intval($mybb->input['isbannedgroup']),
 782                  "canview" => intval($mybb->input['canview']),
 783                  "canviewthreads" => intval($mybb->input['canviewthreads']),
 784                  "canviewprofiles" => intval($mybb->input['canviewprofiles']),
 785                  "candlattachments" => intval($mybb->input['candlattachments']),
 786                  "canpostthreads" => intval($mybb->input['canpostthreads']),
 787                  "canpostreplys" => intval($mybb->input['canpostreplys']),
 788                  "canpostattachments" => intval($mybb->input['canpostattachments']),
 789                  "canratethreads" => intval($mybb->input['canratethreads']),
 790                  "caneditposts" => intval($mybb->input['caneditposts']),
 791                  "candeleteposts" => intval($mybb->input['candeleteposts']),
 792                  "candeletethreads" => intval($mybb->input['candeletethreads']),
 793                  "caneditattachments" => intval($mybb->input['caneditattachments']),
 794                  "canpostpolls" => intval($mybb->input['canpostpolls']),
 795                  "canvotepolls" => intval($mybb->input['canvotepolls']),
 796                  "canundovotes" => intval($mybb->input['canundovotes']),
 797                  "canusepms" => intval($mybb->input['canusepms']),
 798                  "cansendpms" => intval($mybb->input['cansendpms']),
 799                  "cantrackpms" => intval($mybb->input['cantrackpms']),
 800                  "candenypmreceipts" => intval($mybb->input['candenypmreceipts']),
 801                  "pmquota" => intval($mybb->input['pmquota']),
 802                  "maxpmrecipients" => intval($mybb->input['maxpmrecipients']),
 803                  "cansendemail" => intval($mybb->input['cansendemail']),
 804                  "maxemails" => intval($mybb->input['maxemails']),        
 805                  "canviewmemberlist" => intval($mybb->input['canviewmemberlist']),
 806                  "canviewcalendar" => intval($mybb->input['canviewcalendar']),
 807                  "canaddevents" => intval($mybb->input['canaddevents']),
 808                  "canbypasseventmod" => intval($mybb->input['canbypasseventmod']),
 809                  "canmoderateevents" => intval($mybb->input['canmoderateevents']),
 810                  "canviewonline" => intval($mybb->input['canviewonline']),
 811                  "canviewwolinvis" => intval($mybb->input['canviewwolinvis']),
 812                  "canviewonlineips" => intval($mybb->input['canviewonlineips']),
 813                  "cancp" => intval($mybb->input['cancp']),
 814                  "issupermod" => intval($mybb->input['issupermod']),
 815                  "cansearch" => intval($mybb->input['cansearch']),
 816                  "canusercp" => intval($mybb->input['canusercp']),
 817                  "canuploadavatars" => intval($mybb->input['canuploadavatars']),
 818                  "canchangename" => intval($mybb->input['canchangename']),
 819                  "showforumteam" => intval($mybb->input['showforumteam']),
 820                  "usereputationsystem" => intval($mybb->input['usereputationsystem']),
 821                  "cangivereputations" => intval($mybb->input['cangivereputations']),
 822                  "reputationpower" => intval($mybb->input['reputationpower']),
 823                  "maxreputationsday" => intval($mybb->input['maxreputationsday']),
 824                  "maxreputationsperuser" => intval($mybb->input['maxreputationsperuser']),
 825                  "maxreputationsperthread" => intval($mybb->input['maxreputationsperthread']),
 826                  "attachquota" => intval($mybb->input['attachquota']),
 827                  "cancustomtitle" => intval($mybb->input['cancustomtitle']),
 828                  "canwarnusers" => intval($mybb->input['canwarnusers']),
 829                  "canreceivewarnings" =>intval($mybb->input['canreceivewarnings']),
 830                  "maxwarningsday" => intval($mybb->input['maxwarningsday']),
 831                  "canmodcp" => intval($mybb->input['canmodcp']),
 832                  "showinbirthdaylist" => intval($mybb->input['showinbirthdaylist']),
 833                  "canoverridepm" => intval($mybb->input['canoverridepm']),
 834                  "canusesig" => intval($mybb->input['canusesig']),
 835                  "canusesigxposts" => intval($mybb->input['canusesigxposts']),
 836                  "signofollow" => intval($mybb->input['signofollow'])
 837              );
 838  
 839              // Only update the candisplaygroup setting if not a default user group
 840              if($usergroup['type'] != 1)
 841              {
 842                  $updated_group['candisplaygroup'] = intval($mybb->input['candisplaygroup']);
 843              }
 844              
 845              $plugins->run_hooks("admin_user_groups_edit_commit");
 846  
 847              $db->update_query("usergroups", $updated_group, "gid='{$usergroup['gid']}'");
 848  
 849              // Update the caches
 850              $cache->update_usergroups();
 851              $cache->update_forumpermissions();
 852  
 853  
 854              // Log admin action
 855              log_admin_action($usergroup['gid'], $mybb->input['title']);
 856              
 857              flash_message($lang->success_group_updated, 'success');
 858              admin_redirect("index.php?module=user-groups");
 859          }
 860      }
 861      
 862      $page->add_breadcrumb_item($lang->edit_user_group);
 863      $page->output_header($lang->edit_user_group);
 864      
 865      $sub_tabs = array();    
 866      $sub_tabs['edit_group'] = array(
 867          'title' => $lang->edit_user_group,
 868          'description' => $lang->edit_user_group_desc
 869      );
 870  
 871      $form = new Form("index.php?module=user-groups&amp;action=edit&amp;gid={$usergroup['gid']}", "post");
 872  
 873      $page->output_nav_tabs($sub_tabs, 'edit_group');
 874  
 875      // If we have any error messages, show them
 876      if($errors)
 877      {
 878          $page->output_inline_error($errors);
 879      }
 880      else
 881      {
 882          if($usergroup['type'] == "3")
 883          {
 884              $usergroup['joinable'] = 1;
 885              $usergroup['moderate'] = 0;
 886          }
 887          elseif($usergroup['type'] == "4")
 888          {
 889              $usergroup['joinable'] = 1;
 890              $usergroup['moderate'] = 1;
 891          }
 892          else
 893          {
 894              $usergroup['joinable'] = 0;
 895              $usergroup['moderate'] = 0;
 896          }        
 897          $mybb->input = $usergroup;
 898      }    
 899      $tabs = array(
 900          "general" => $lang->general,
 901          "forums_posts" => $lang->forums_posts,
 902          "users_permissions" => $lang->users_permissions,
 903          "misc" => $lang->misc        
 904      );
 905      $tabs = $plugins->run_hooks("admin_user_groups_edit_graph_tabs", $tabs);
 906      $page->output_tab_control($tabs);
 907      
 908      echo "<div id=\"tab_general\">";    
 909      $form_container = new FormContainer($lang->general);
 910      $form_container->output_row($lang->title." <em>*</em>", "", $form->generate_text_box('title', $mybb->input['title'], array('id' => 'title')), 'title');
 911      $form_container->output_row($lang->short_description, "", $form->generate_text_box('description', $mybb->input['description'], array('id' => 'description')), 'description');
 912      $form_container->output_row($lang->username_style, $lang->username_style_desc, $form->generate_text_box('namestyle', $mybb->input['namestyle'], array('id' => 'namestyle')), 'namestyle');
 913      $form_container->output_row($lang->user_title, $lang->user_title_desc, $form->generate_text_box('usertitle', $mybb->input['usertitle'], array('id' => 'usertitle')), 'usertitle');
 914  
 915      $stars = "<table cellpadding=\"3\"><tr><td>".$form->generate_text_box('stars', $mybb->input['stars'], array('class' => 'field50', 'id' => 'stars'))."</td><td>".$form->generate_text_box('starimage', $mybb->input['starimage'], array('id' => 'starimage'))."</td></tr>";
 916      $stars .= "<tr><td><small>{$lang->stars}</small></td><td><small>{$lang->star_image}</small></td></tr></table>";
 917      $form_container->output_row($lang->user_stars, $lang->user_stars_desc, $stars, "stars");
 918  
 919      $form_container->output_row($lang->group_image, $lang->group_image_desc, $form->generate_text_box('image', $mybb->input['image'], array('id' => 'image')), 'image');
 920  
 921      $general_options = array();
 922      if($usergroup['gid'] != "1" && $usergroup['gid'] != "5")
 923      {
 924          $general_options[] = $form->generate_check_box("showforumteam", 1, $lang->forum_team, array("checked" => $mybb->input['showforumteam']));
 925      }
 926      $general_options[] =    $form->generate_check_box("isbannedgroup", 1, $lang->is_banned_group, array("checked" => $mybb->input['isbannedgroup']));
 927      
 928      $form_container->output_row($lang->general_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $general_options)."</div>");
 929  
 930      if($usergroup['type'] != 1)
 931      {
 932          $public_options = array(
 933              $form->generate_check_box("joinable", 1, $lang->user_joinable, array("checked" => $mybb->input['joinable'])),
 934              $form->generate_check_box("moderate", 1, $lang->moderate_join_requests, array("checked" => $mybb->input['moderate'])),
 935              $form->generate_check_box("candisplaygroup", 1, $lang->can_set_as_display_group, array("checked" => $mybb->input['candisplaygroup'])),
 936              );
 937          $form_container->output_row($lang->publicly_joinable_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $public_options)."</div>");
 938      }
 939          
 940      $admin_options = array(
 941          $form->generate_check_box("issupermod", 1, $lang->is_super_mod, array("checked" => $mybb->input['issupermod'])),
 942          $form->generate_check_box("canmodcp", 1, $lang->can_access_mod_cp, array("checked" => $mybb->input['canmodcp'])),
 943          $form->generate_check_box("cancp", 1, $lang->can_access_admin_cp, array("checked" => $mybb->input['cancp']))
 944      );
 945      $form_container->output_row($lang->moderation_administration_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $admin_options)."</div>");
 946  
 947      $form_container->end();
 948      echo "</div>";
 949      
 950      //
 951      // FORUMS AND POSTS
 952      //
 953      echo "<div id=\"tab_forums_posts\">";    
 954      $form_container = new FormContainer($lang->forums_posts);
 955  
 956      $viewing_options = array(
 957          $form->generate_check_box("canview", 1, $lang->can_view_board, array("checked" => $mybb->input['canview'])),
 958          $form->generate_check_box("canviewthreads", 1, $lang->can_view_threads, array("checked" => $mybb->input['canviewthreads'])),
 959          $form->generate_check_box("cansearch", 1, $lang->can_search_forums, array("checked" => $mybb->input['cansearch'])),
 960          $form->generate_check_box("canviewprofiles", 1, $lang->can_view_profiles, array("checked" => $mybb->input['canviewprofiles'])),
 961          $form->generate_check_box("candlattachments", 1, $lang->can_download_attachments, array("checked" => $mybb->input['candlattachments'])),
 962      );
 963      $form_container->output_row($lang->viewing_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $viewing_options)."</div>");    
 964      
 965      $posting_options = array(
 966          $form->generate_check_box("canpostthreads", 1, $lang->can_post_threads, array("checked" => $mybb->input['canpostthreads'])),
 967          $form->generate_check_box("canpostreplys", 1, $lang->can_post_replies, array("checked" => $mybb->input['canpostreplys'])),
 968          $form->generate_check_box("canratethreads", 1, $lang->can_rate_threads, array("checked" => $mybb->input['canratethreads']))
 969      );
 970      $form_container->output_row($lang->posting_rating_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $posting_options)."</div>");
 971      
 972      $poll_options = array(
 973          $form->generate_check_box("canpostpolls", 1, $lang->can_post_polls, array("checked" => $mybb->input['canpostpolls'])),
 974          $form->generate_check_box("canvotepolls", 1, $lang->can_vote_polls, array("checked" => $mybb->input['canvotepolls'])),
 975          $form->generate_check_box("canundovotes", 1, $lang->can_undo_votes, array("checked" => $mybb->input['canundovotes']))
 976      );
 977      $form_container->output_row($lang->poll_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $poll_options)."</div>");    
 978  
 979      $attachment_options = array(
 980          $form->generate_check_box("canpostattachments", 1, $lang->can_post_attachments, array("checked" => $mybb->input['canpostattachments'])),
 981          "{$lang->attach_quota}<br /><small class=\"input\">{$lang->attach_quota_desc}</small><br />".$form->generate_text_box('attachquota', $mybb->input['attachquota'], array('id' => 'attachquota', 'class' => 'field50')). "KB"
 982      );
 983      $form_container->output_row($lang->attachment_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $attachment_options)."</div>");    
 984  
 985      $editing_options = array(
 986          $form->generate_check_box("caneditposts", 1, $lang->can_edit_posts, array("checked" => $mybb->input['caneditposts'])),
 987          $form->generate_check_box("candeleteposts", 1, $lang->can_delete_posts, array("checked" => $mybb->input['candeleteposts'])),
 988          $form->generate_check_box("candeletethreads", 1, $lang->can_delete_threads, array("checked" => $mybb->input['candeletethreads'])),
 989          $form->generate_check_box("caneditattachments", 1, $lang->can_edit_attachments, array("checked" => $mybb->input['caneditattachments']))
 990      );
 991      $form_container->output_row($lang->editing_deleting_options, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $editing_options)."</div>");
 992      
 993      $form_container->end();
 994      echo "</div>";    
 995  
 996      //
 997      // USERS AND PERMISSIONS
 998      //
 999      echo "<div id=\"tab_users_permissions\">";    
1000      $form_container = new FormContainer($lang->users_permissions);
1001  
1002      $account_options = array(
1003          $form->generate_check_box("canusercp", 1, $lang->can_access_usercp, array("checked" => $mybb->input['canusercp'])),
1004          $form->generate_check_box("canchangename", 1, $lang->can_change_username, array("checked" => $mybb->input['canchangename'])),
1005          $form->generate_check_box("cancustomtitle", 1, $lang->can_use_usertitles, array("checked" => $mybb->input['cancustomtitle'])),
1006          $form->generate_check_box("canuploadavatars", 1, $lang->can_upload_avatars, array("checked" => $mybb->input['canuploadavatars'])),
1007          $form->generate_check_box("canusesig", 1, $lang->can_use_signature, array("checked" => $mybb->input['canusesig'])),
1008          $form->generate_check_box("signofollow", 1, $lang->uses_no_follow, array("checked" => $mybb->input['signofollow'])),
1009          "{$lang->required_posts}<br /><small class=\"input\">{$lang->required_posts_desc}</small><br />".$form->generate_text_box('canusesigxposts', $mybb->input['canusesigxposts'], array('id' => 'canusesigxposts', 'class' => 'field50'))
1010      );
1011      $form_container->output_row($lang->account_management, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $account_options)."</div>");    
1012  
1013      $reputation_options = array(
1014          $form->generate_check_box("usereputationsystem", 1, $lang->show_reputations, array("checked" => $mybb->input['usereputationsystem'])),
1015          $form->generate_check_box("cangivereputations", 1, $lang->can_give_reputation, array("checked" => $mybb->input['cangivereputations'])),
1016          "{$lang->points_to_award_take}<br /><small class=\"input\">{$lang->points_to_award_take_desc}</small><br />".$form->generate_text_box('reputationpower', $mybb->input['reputationpower'], array('id' => 'reputationpower', 'class' => 'field50')),
1017          "{$lang->max_reputations_perthread}<br /><small class=\"input\">{$lang->max_reputations_perthread_desc}</small><br />".$form->generate_text_box('maxreputationsperthread', $mybb->input['maxreputationsperthread'], array('id' => 'maxreputationsperthread', 'class' => 'field50')),
1018          "{$lang->max_reputations_daily}<br /><small class=\"input\">{$lang->max_reputations_daily_desc}</small><br />".$form->generate_text_box('maxreputationsday', $mybb->input['maxreputationsday'], array('id' => 'maxreputationsday', 'class' => 'field50'))    
1019      );
1020      $form_container->output_row($lang->reputation_system, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $reputation_options)."</div>");
1021  
1022      $warning_options = array(
1023          $form->generate_check_box("canwarnusers", 1, $lang->can_send_warnings, array("checked" => $mybb->input['canwarnusers'])),
1024          $form->generate_check_box("canreceivewarnings", 1, $lang->can_receive_warnings, array("checked" => $mybb->input['canreceivewarnings'])),
1025          "{$lang->warnings_per_day}<br />".$form->generate_text_box('maxwarningsday', $mybb->input['maxwarningsday'], array('id' => 'maxwarningsday', 'class' => 'field50'))
1026      );
1027      $form_container->output_row($lang->warning_system, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $warning_options)."</div>");
1028  
1029      $pm_options = array(
1030          $form->generate_check_box("canusepms", 1, $lang->can_use_pms, array("checked" => $mybb->input['canusepms'])),
1031          $form->generate_check_box("cansendpms", 1, $lang->can_send_pms, array("checked" => $mybb->input['cansendpms'])),
1032          $form->generate_check_box("canoverridepm", 1, $lang->can_override_pms, array("checked" => $mybb->input['canoverridepm'])),
1033          $form->generate_check_box("cantrackpms", 1, $lang->can_track_pms, array("checked" => $mybb->input['cantrackpms'])),
1034          $form->generate_check_box("candenypmreceipts", 1, $lang->can_deny_reciept, array("checked" => $mybb->input['candenypmreceipts'])),
1035          "{$lang->message_quota}<br /><small>{$lang->message_quota_desc}</small><br />".$form->generate_text_box('pmquota', $mybb->input['pmquota'], array('id' => 'pmquota', 'class' => 'field50')),
1036          "{$lang->max_recipients}<br /><small>{$lang->max_recipients_desc}</small><br />".$form->generate_text_box('maxpmrecipients', $mybb->input['maxpmrecipients'], array('id' => 'maxpmrecipients', 'class' => 'field50'))
1037      );
1038      $form_container->output_row($lang->private_messaging, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $pm_options)."</div>");
1039      
1040      $form_container->end();
1041      echo "</div>";
1042  
1043      //
1044      // MISC
1045      //
1046      echo "<div id=\"tab_misc\">";    
1047      $form_container = new FormContainer($lang->misc);
1048  
1049      $calendar_options = array(
1050          $form->generate_check_box("canviewcalendar", 1, $lang->can_view_calendar, array("checked" => $mybb->input['canviewcalendar'])),
1051          $form->generate_check_box("canaddevents", 1, $lang->can_post_events, array("checked" => $mybb->input['canaddevents'])),
1052          $form->generate_check_box("canbypasseventmod", 1, $lang->can_bypass_event_moderation, array("checked" => $mybb->input['canbypasseventmod'])),
1053          $form->generate_check_box("canmoderateevents", 1, $lang->can_moderate_events, array("checked" => $mybb->input['canmoderateevents']))
1054      );
1055      $form_container->output_row($lang->calendar, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $calendar_options)."</div>");
1056  
1057      $wol_options = array(
1058          $form->generate_check_box("canviewonline", 1, $lang->can_view_whos_online, array("checked" => $mybb->input['canviewonline'])),
1059          $form->generate_check_box("canviewwolinvis", 1, $lang->can_view_invisible, array("checked" => $mybb->input['canviewwolinvis'])),
1060          $form->generate_check_box("canviewonlineips", 1, $lang->can_view_ips, array("checked" => $mybb->input['canviewonlineips']))
1061      );
1062      $form_container->output_row($lang->whos_online, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $wol_options)."</div>");
1063  
1064      $misc_options = array(
1065          $form->generate_check_box("canviewmemberlist", 1, $lang->can_view_member_list, array("checked" => $mybb->input['canviewmemberlist'])),
1066          $form->generate_check_box("showinbirthdaylist", 1, $lang->show_in_birthday_list, array("checked" => $mybb->input['showinbirthdaylist'])),
1067          $form->generate_check_box("cansendemail", 1, $lang->can_email_users, array("checked" => $mybb->input['cansendemail'])),
1068          "{$lang->max_emails_per_day}<br /><small class=\"input\">{$lang->max_emails_per_day_desc}</small><br />".$form->generate_text_box('maxemails', $mybb->input['maxemails'], array('id' => 'maxemails', 'class' => 'field50'))
1069      );
1070      $form_container->output_row($lang->misc, "", "<div class=\"group_settings_bit\">".implode("</div><div class=\"group_settings_bit\">", $misc_options)."</div>");
1071  
1072      $form_container->end();
1073      echo "</div>";
1074      
1075      $plugins->run_hooks("admin_user_groups_edit_graph");
1076      
1077      $buttons[] = $form->generate_submit_button($lang->save_user_group);
1078      $form->output_submit_wrapper($buttons);
1079  
1080      $form->end();
1081      $page->output_footer();    
1082  }
1083  
1084  if($mybb->input['action'] == "delete")
1085  {
1086      $plugins->run_hooks("admin_user_groups_delete");
1087      
1088      $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['gid'])."'");
1089      $usergroup = $db->fetch_array($query);
1090  
1091      if(!$usergroup['gid'])
1092      {
1093          flash_message($lang->error_invalid_user_group, 'error');
1094          admin_redirect("index.php?module=user-groups");
1095      }
1096      if($usergroup['type'] == 1)
1097      {
1098          flash_message($lang->error_default_group_delete, 'error');
1099          admin_redirect("index.php?module=user-groups");
1100      }
1101  
1102      // User clicked no
1103      if($mybb->input['no'])
1104      {
1105          admin_redirect("index.php?module=user-groups");
1106      }
1107  
1108      if($mybb->request_method == "post")
1109      {
1110          // Move any users back to the registered group
1111          $updated_users = array("usergroup" => 2);
1112          $db->update_query("users", $updated_users, "usergroup='{$usergroup['gid']}'");
1113  
1114          $updated_users = array("displaygroup" => "usergroup");
1115          $plugins->run_hooks("admin_user_groups_delete_commit");
1116          
1117          $db->update_query("users", $updated_users, "displaygroup='{$usergroup['gid']}'", "", true); // No quotes = displaygroup=usergroup
1118          
1119          switch($db->type)
1120          {
1121              case "pgsql":
1122              case "sqlite":
1123                  $query = $db->simple_select("users", "uid", "','||additionalgroups||',' LIKE '%,{$usergroup['gid']},%'");
1124                  break;
1125              default:
1126                  $query = $db->simple_select("users", "uid", "CONCAT(',',additionalgroups,',') LIKE '%,{$usergroup['gid']},%'");
1127          }
1128          while($user = $db->fetch_array($query))
1129          {
1130              leave_usergroup($user['uid'], $usergroup['gid']);
1131          }
1132  
1133          $db->delete_query("groupleaders", "gid='{$usergroup['gid']}'");
1134          $db->delete_query("usergroups", "gid='{$usergroup['gid']}'");
1135          
1136          $cache->update_groupleaders();
1137          $cache->update_moderators();
1138          $cache->update_usergroups();
1139          $cache->update_forumpermissions();
1140          
1141          // Log admin action
1142          log_admin_action($usergroup['gid'], $usergroup['title']);
1143  
1144          flash_message($lang->success_group_deleted, 'success');
1145          admin_redirect("index.php?module=user-groups");
1146      }
1147      else
1148      {
1149          $page->output_confirm_action("index.php?module=user-groups&amp;action=delete&amp;gid={$usergroup['gid']}", $lang->confirm_group_deletion);
1150      }
1151  }
1152  
1153  if($mybb->input['action'] == "disporder" && $mybb->request_method == "post")
1154  {
1155      $plugins->run_hooks("admin_user_groups_disporder");
1156      
1157      foreach($mybb->input['disporder'] as $gid=>$order)
1158      {
1159          $gid = intval($gid);
1160          $order = intval($order);
1161          if($gid != 0 && $order != 0)
1162          {
1163              $sql_array = array(
1164                  'disporder' => $order,
1165              );
1166              $db->update_query('usergroups', $sql_array, "gid = '{$gid}'");
1167          }
1168      }
1169  
1170      // Log admin action
1171      log_admin_action();
1172      
1173      $plugins->run_hooks("admin_user_groups_disporder_commit");
1174  
1175      flash_message($lang->success_group_disporders_updated, 'success');
1176      admin_redirect("index.php?module=user-groups");
1177  }
1178  
1179  if(!$mybb->input['action'])
1180  {
1181      $plugins->run_hooks("admin_user_groups_start");
1182      
1183      if($mybb->request_method == "post")
1184      {
1185          if(!empty($mybb->input['disporder']))
1186          {
1187              foreach($mybb->input['disporder'] as $gid => $order)
1188              {
1189                  $db->update_query("usergroups", array('disporder' => intval($order)), "gid='".intval($gid)."'");
1190              }
1191              
1192              $plugins->run_hooks("admin_user_groups_start_commit");
1193              
1194              $cache->update_usergroups();
1195          
1196              flash_message($lang->success_groups_disporder_updated, 'success');
1197              admin_redirect("index.php?module=user-groups");
1198          }
1199      }
1200      
1201      $page->output_header($lang->manage_user_groups);
1202      $page->output_nav_tabs($sub_tabs, 'manage_groups');
1203      
1204      $form = new Form("index.php?module=user-groups", "post", "groups");
1205      
1206      $query = $db->query("
1207          SELECT g.gid, COUNT(u.uid) AS users
1208          FROM ".TABLE_PREFIX."users u
1209          LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=u.usergroup)
1210          GROUP BY g.gid
1211      ");
1212      while($groupcount = $db->fetch_array($query))
1213      {
1214          $primaryusers[$groupcount['gid']] = $groupcount['users'];
1215      }
1216  
1217      switch($db->type)
1218      {
1219          case "pgsql":
1220          case "sqlite":
1221              $query = $db->query("
1222                  SELECT g.gid, COUNT(u.uid) AS users
1223                  FROM ".TABLE_PREFIX."users u
1224                  LEFT JOIN ".TABLE_PREFIX."usergroups g ON (','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%')
1225                  WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid
1226              ");
1227              break;
1228          default:
1229              $query = $db->query("
1230                  SELECT g.gid, COUNT(u.uid) AS users
1231                  FROM ".TABLE_PREFIX."users u
1232                  LEFT JOIN ".TABLE_PREFIX."usergroups g ON (CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%'))
1233                  WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid
1234              ");
1235      }
1236      while($groupcount = $db->fetch_array($query))
1237      {
1238          $secondaryusers[$groupcount['gid']] = $groupcount['users'];
1239      }
1240  
1241      $query = $db->query("
1242          SELECT g.gid, COUNT(r.uid) AS users
1243          FROM ".TABLE_PREFIX."joinrequests r
1244          LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=r.gid)
1245          GROUP BY g.gid
1246      ");
1247      while($joinrequest = $db->fetch_array($query))
1248      {
1249          $joinrequests[$joinrequest['gid']] = $joinrequest['users'];
1250      }
1251      
1252      // Fetch group leaders
1253      $leaders = array();
1254      $query = $db->query("
1255          SELECT u.username, u.uid, l.gid
1256          FROM ".TABLE_PREFIX."groupleaders l
1257          INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid)
1258          ORDER BY u.username ASC
1259      ");
1260      while($leader = $db->fetch_array($query))
1261      {
1262          $leaders[$leader['gid']][] = build_profile_link($leader['username'], $leader['uid'], "_blank");
1263      }
1264      
1265      $form_container = new FormContainer($lang->user_groups);
1266      $form_container->output_row_header($lang->group);
1267      $form_container->output_row_header($lang->number_of_users, array("class" => "align_center", 'width' => '75'));
1268      $form_container->output_row_header($lang->order, array("class" => "align_center", 'width' => '5%'));
1269      $form_container->output_row_header($lang->controls, array("class" => "align_center"));
1270      
1271      $query = $db->simple_select("usergroups", "*", "", array('order_by' => 'disporder'));
1272      while($usergroup = $db->fetch_array($query))
1273      {
1274          if($usergroup['type'] > 1)
1275          {
1276              $icon = "<img src=\"styles/default/images/icons/custom.gif\" alt=\"{$lang->custom_user_group}\" style=\"vertical-align: middle;\" />";
1277          }
1278          else
1279          {
1280              $icon = "<img src=\"styles/default/images/icons/default.gif\" alt=\"{$lang->default_user_group}\" style=\"vertical-align: middle;\" />";
1281          }
1282          
1283          $leaders_list = '';
1284          if(isset($leaders[$usergroup['gid']]))
1285          {
1286              $leaders_list = "<br />{$lang->group_leaders}: ".implode(", ", $leaders[$usergroup['gid']]);
1287          }
1288              
1289          $join_requests = '';
1290          if($joinrequests[$usergroup['gid']] > 1)
1291          {
1292              $join_requests = " <small><a href=\"index.php?module=user-groups&amp;action=join_requests&amp;gid={$usergroup['gid']}\"><span style=\"color: red;\">({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})</span></a></small>";
1293          }
1294          else if($joinrequests[$usergroup['gid']] == 1)
1295          {
1296              $join_requests = " <small><a href=\"index.php?module=user-groups&amp;action=join_requests&amp;gid={$usergroup['gid']}\"><span style=\"color: red;\">({$joinrequests[$usergroup['gid']]} {$lang->outstanding_join_request})</span></a></small>";            
1297          }
1298          
1299          $form_container->output_cell("<div class=\"float_right\">{$icon}</div><div><strong><a href=\"index.php?module=user-groups&amp;action=edit&amp;gid={$usergroup['gid']}\">{$usergroup['title']}</a></strong>{$join_requests}<br /><small>{$usergroup['description']}{$leaders_list}</small></div>");
1300          
1301          if(!$primaryusers[$usergroup['gid']])
1302          {
1303              $primaryusers[$usergroup['gid']] = 0;
1304          }
1305          $numusers = $primaryusers[$usergroup['gid']];
1306          $numusers += $secondaryusers[$usergroup['gid']];
1307  
1308          $form_container->output_cell(my_number_format($numusers), array("class" => "align_center"));
1309          
1310          if($usergroup['showforumteam'] == 1)
1311          {
1312              $form_container->output_cell("<input type=\"text\" name=\"disporder[{$usergroup['gid']}]\" value=\"{$usergroup['disporder']}\" class=\"text_input align_center\" style=\"width: 80%;\" />", array("class" => "align_center"));
1313          }
1314          else
1315          {
1316              $form_container->output_cell("&nbsp;", array("class" => "align_center"));
1317          }
1318          
1319          $popup = new PopupMenu("usergroup_{$usergroup['gid']}", $lang->options);
1320          $popup->add_item($lang->edit_group, "index.php?module=user-groups&amp;action=edit&amp;gid={$usergroup['gid']}");
1321          $popup->add_item($lang->list_users, "index.php?module=user-users&amp;action=search&amp;results=1&amp;conditions[usergroup]={$usergroup['gid']}");
1322          if($joinrequests[$usergroup['gid']] > 0)
1323          {
1324              $popup->add_item($lang->join_requests, "index.php?module=user-groups&amp;action=join_requests&amp;gid={$usergroup['gid']}");
1325          }
1326          $popup->add_item($lang->group_leaders, "index.php?module=user-groups&amp;action=leaders&amp;gid={$usergroup['gid']}");
1327          if($usergroup['type'] > 1)
1328          {
1329              $popup->add_item($lang->delete_group, "index.php?module=user-groups&amp;action=delete&amp;gid={$usergroup['gid']}&amp;my_post_key={$mybb->post_code}", "return AdminCP.deleteConfirmation(this, '{$lang->confirm_group_deletion}')");
1330          }
1331          $form_container->output_cell($popup->fetch(), array("class" => "align_center"));
1332          $form_container->construct_row();
1333      }
1334      
1335      if($form_container->num_rows() == 0)
1336      {
1337          $form_container->output_cell($lang->no_groups, array('colspan' => 4));
1338          $form_container->construct_row();
1339      }
1340      
1341      $form_container->end();
1342      
1343      $buttons = array();
1344      $buttons[] = $form->generate_submit_button($lang->update_groups_order);
1345      $form->output_submit_wrapper($buttons);
1346      
1347      $form->end();
1348      
1349      echo <<<LEGEND
1350      <br />
1351      <fieldset>
1352  <legend>{$lang->legend}</legend>
1353  <img src="styles/default/images/icons/custom.gif" alt="{$lang->custom_user_group}" style="vertical-align: middle;" /> {$lang->custom_user_group}<br />
1354  <img src="styles/default/images/icons/default.gif" alt="{$lang->default_user_group}" style="vertical-align: middle;" /> {$lang->default_user_group}
1355  </fieldset>
1356  LEGEND;
1357      
1358      $page->output_footer();
1359  }
1360  ?>


Generated: Sun Dec 11 14:16:27 2011 Cross-referenced by PHPXref 0.7.1