[ Index ]

PHP Cross Reference of MyBB 1.8.41

title

Body

[close]

/ -> managegroup.php (source)

   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  define("IN_MYBB", 1);
  12  define('THIS_SCRIPT', 'managegroup.php');
  13  
  14  $templatelist = "managegroup_leaders_bit,managegroup_leaders,postbit_pm,postbit_email,managegroup_user_checkbox,managegroup_user,managegroup_adduser,managegroup_removeusers,managegroup,managegroup_joinrequests_request,managegroup_joinrequests";
  15  $templatelist .= ",managegroup_requestnote,managegroup_no_users,multipage,multipage_end,multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage,multipage_start";
  16  
  17  require_once  "./global.php";
  18  
  19  // Load language files
  20  $lang->load("managegroup");
  21  
  22  $gid = $mybb->get_input('gid', MyBB::INPUT_INT);
  23  if(!isset($groupscache[$gid]))
  24  {
  25      error($lang->invalid_group);
  26  }
  27  $usergroup = $groupscache[$gid];
  28  $lang->nav_group_management = $lang->sprintf($lang->nav_group_management, htmlspecialchars_uni($usergroup['title']));
  29  add_breadcrumb($lang->nav_group_memberships, "usercp.php?action=usergroups");
  30  add_breadcrumb($lang->nav_group_management, "managegroup.php?gid=$gid");
  31  
  32  $mybb->input['action'] = $mybb->get_input('action');
  33  
  34  if($mybb->input['action'] == "joinrequests")
  35  {
  36      add_breadcrumb($lang->nav_join_requests);
  37  }
  38  
  39  // Check that this user is actually a leader of this group
  40  $query = $db->simple_select("groupleaders", "*", "uid='{$mybb->user['uid']}' AND gid='{$gid}'");
  41  $groupleader = $db->fetch_array($query);
  42  
  43  if(!$groupleader && $mybb->usergroup['cancp'] != 1)
  44  {
  45      error($lang->not_leader_of_this_group);
  46  }
  47  
  48  if($mybb->input['action'] == "do_add" && $mybb->request_method == "post")
  49  {
  50      // Verify incoming POST request
  51      verify_post_check($mybb->get_input('my_post_key'));
  52  
  53      if($groupleader['canmanagemembers'] == 0)
  54      {
  55          error_no_permission();
  56      }
  57  
  58      $plugins->run_hooks("managegroup_do_add_start");
  59  
  60      $options = array(
  61          'fields' => array('additionalgroups', 'usergroup')
  62      );
  63  
  64      $user = get_user_by_username($mybb->get_input('username'), $options);
  65  
  66      if($user)
  67      {
  68          $additionalgroups = explode(',', $user['additionalgroups']);
  69          if($user['usergroup'] != $gid && !in_array($gid, $additionalgroups))
  70          {
  71              join_usergroup($user['uid'], $gid);
  72              $db->delete_query("joinrequests", "uid='{$user['uid']}' AND gid='{$gid}'");
  73              $plugins->run_hooks("managegroup_do_add_end");
  74              redirect("managegroup.php?gid=".$gid, $lang->user_added);
  75          }
  76          else
  77          {
  78              error($lang->error_alreadyingroup);
  79          }
  80      }
  81      else
  82      {
  83          error($lang->error_invalidusername);
  84      }
  85  }
  86  elseif($mybb->input['action'] == "do_invite" && $mybb->request_method == "post")
  87  {
  88      // Verify incoming POST request
  89      verify_post_check($mybb->get_input('my_post_key'));
  90  
  91      if($groupleader['caninvitemembers'] == 0)
  92      {
  93          error_no_permission();
  94      }
  95  
  96      $plugins->run_hooks("managegroup_do_invite_start");
  97  
  98      $options = array(
  99          'fields' => array('additionalgroups', 'usergroup', 'language')
 100      );
 101  
 102      $user = get_user_by_username($mybb->get_input('inviteusername'), $options);
 103  
 104      if($user)
 105      {
 106          $additionalgroups = explode(',', $user['additionalgroups']);
 107          if($user['usergroup'] != $gid && !in_array($gid, $additionalgroups))
 108          {
 109              $query = $db->simple_select("joinrequests", "rid", "uid = '".(int)$user['uid']."' AND gid = '".(int)$gid."'", array("limit" => 1));
 110              $pendinginvite = $db->fetch_array($query);
 111              if($pendinginvite)
 112              {
 113                  error($lang->error_alreadyinvited);
 114              }
 115              else
 116              {
 117                  $usergroups_cache = $cache->read('usergroups');
 118                  $usergroup = $usergroups_cache[$gid];
 119  
 120                  $joinrequest = array(
 121                      "uid" => $user['uid'],
 122                      "gid" => $usergroup['gid'],
 123                      "dateline" => TIME_NOW,
 124                      "invite" => 1
 125                  );
 126                  $db->insert_query("joinrequests", $joinrequest);
 127  
 128                  $lang_var = 'invite_pm_message';
 129                  if($mybb->settings['deleteinvites'] != 0)
 130                  {
 131                      $lang_var .= '_expires';
 132                  }
 133  
 134                  $pm = array(
 135                      'subject' => array('invite_pm_subject', $usergroup['title']),
 136                      'message' => array($lang_var, $usergroup['title'], $mybb->settings['bburl'], $mybb->settings['deleteinvites']),
 137                      'touid' => $user['uid'],
 138                      'language' => $user['language'],
 139                      'language_file' => 'managegroup'
 140                  );
 141  
 142                  send_pm($pm, $mybb->user['uid'], true);
 143  
 144                  $plugins->run_hooks("managegroup_do_invite_end");
 145  
 146                  redirect("managegroup.php?gid=".$gid, $lang->user_invited);
 147              }
 148          }
 149          else
 150          {
 151              error($lang->error_alreadyingroup);
 152          }
 153      }
 154      else
 155      {
 156          error($lang->error_invalidusername);
 157      }
 158  }
 159  elseif($mybb->input['action'] == "do_joinrequests" && $mybb->request_method == "post")
 160  {
 161      // Verify incoming POST request
 162      verify_post_check($mybb->get_input('my_post_key'));
 163  
 164      if($groupleader['canmanagerequests'] == 0)
 165      {
 166          error_no_permission();
 167      }
 168      if($usergroup['type'] != 4)
 169      {
 170          error_no_permission();
 171      }
 172  
 173      $plugins->run_hooks("managegroup_do_joinrequests_start");
 174  
 175      $uidin = array();
 176      $requests = $mybb->get_input('request', MyBB::INPUT_ARRAY);
 177      if(is_array($requests) && !empty($requests))
 178      {
 179          $requested_uids = array();
 180          foreach($requests as $uid => $what)
 181          {
 182              $uid = (int)$uid;
 183              if($uid > 0)
 184              {
 185                  $requested_uids[$uid] = $uid;
 186              }
 187          }
 188  
 189          $pending_uids = array();
 190          if(!empty($requested_uids))
 191          {
 192              $query = $db->simple_select("joinrequests", "uid", "uid IN (".implode(',', $requested_uids).") AND gid='{$gid}' AND invite='0'");
 193              while($request = $db->fetch_array($query))
 194              {
 195                  $pending_uids[(int)$request['uid']] = true;
 196              }
 197          }
 198  
 199          foreach($requests as $uid => $what)
 200          {
 201              $uid = (int)$uid;
 202              if(!isset($pending_uids[$uid]))
 203              {
 204                  continue;
 205              }
 206              if($what == "accept")
 207              {
 208                  join_usergroup($uid, $gid);
 209                  $uidin[] = (int)$uid;
 210              }
 211              elseif($what == "decline")
 212              {
 213                  $uidin[] = (int)$uid;
 214              }
 215          }
 216      }
 217      if(is_array($uidin) && !empty($uidin))
 218      {
 219          $uids = implode(",", $uidin);
 220          $db->delete_query("joinrequests", "uid IN ({$uids}) AND gid='{$gid}' AND invite='0'");
 221      }
 222  
 223      $plugins->run_hooks("managegroup_do_joinrequests_end");
 224  
 225      redirect("managegroup.php?gid={$gid}", $lang->join_requests_moderated);
 226  }
 227  elseif($mybb->input['action'] == "joinrequests")
 228  {
 229      if($mybb->usergroup['cancp'] != 1 && ($groupleader['canmanagerequests'] == 0 || $usergroup['type'] != 4))
 230      {
 231          error_no_permission();
 232      }
 233  
 234      $users = $joinrequests = '';
 235      $plugins->run_hooks("managegroup_joinrequests_start");
 236  
 237      $query = $db->query("
 238          SELECT j.*, u.uid, u.username, u.postnum, u.regdate
 239          FROM ".TABLE_PREFIX."joinrequests j
 240          LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=j.uid)
 241          WHERE j.gid='{$gid}' AND j.uid != 0 AND j.invite='0'
 242          ORDER BY u.username ASC
 243      ");
 244      while($user = $db->fetch_array($query))
 245      {
 246          $user['reason'] = htmlspecialchars_uni($user['reason']);
 247          $altbg = alt_trow();
 248          $regdate = my_date($mybb->settings['dateformat'], $user['regdate']);
 249          $user['username'] = htmlspecialchars_uni($user['username']);
 250          $user['profilelink'] = build_profile_link($user['username'], $user['uid']);
 251          eval("\$users .= \"".$templates->get("managegroup_joinrequests_request")."\";");
 252      }
 253      if(!$users)
 254      {
 255          error($lang->no_requests);
 256      }
 257      $lang->join_requests = $lang->sprintf($lang->join_requests_title, htmlspecialchars_uni($usergroup['title']));
 258  
 259      $plugins->run_hooks("managegroup_joinrequests_end");
 260  
 261      eval("\$joinrequests = \"".$templates->get("managegroup_joinrequests")."\";");
 262      output_page($joinrequests);
 263  }
 264  elseif($mybb->input['action'] == "do_manageusers" && $mybb->request_method == "post")
 265  {
 266      // Verify incoming POST request
 267      verify_post_check($mybb->get_input('my_post_key'));
 268  
 269      if($groupleader['canmanagemembers'] == 0)
 270      {
 271          error_no_permission();
 272      }
 273  
 274      $users = $mybb->get_input('removeuser', MyBB::INPUT_ARRAY);
 275  
 276      $plugins->run_hooks("managegroup_do_manageusers_start");
 277  
 278      if(!empty($users))
 279      {
 280          foreach($users as $uid)
 281          {
 282              leave_usergroup($uid, $gid);
 283          }
 284      }
 285      else
 286      {
 287          error($lang->no_users_selected);
 288      }
 289  
 290      $plugins->run_hooks("managegroup_do_manageusers_end");
 291  
 292      redirect("managegroup.php?gid={$gid}", $lang->users_removed);
 293  }
 294  else
 295  {
 296      $plugins->run_hooks("managegroup_start");
 297  
 298      $lang->members_of = $lang->sprintf($lang->members_of, htmlspecialchars_uni($usergroup['title']));
 299      $lang->add_member = $lang->sprintf($lang->add_member, htmlspecialchars_uni($usergroup['title']));
 300      $lang->invite_member = $lang->sprintf($lang->invite_member, htmlspecialchars_uni($usergroup['title']));
 301      $joinrequests = '';
 302      if($usergroup['type'] == 5)
 303      {
 304          $usergrouptype = $lang->group_public_invite;
 305      }
 306      elseif($usergroup['type'] == 4)
 307      {
 308          $query = $db->simple_select("joinrequests", "COUNT(*) AS req", "gid='{$gid}' AND invite='0'");
 309          $numrequests = $db->fetch_array($query);
 310          if($numrequests['req'] && ($mybb->usergroup['cancp'] == 1 || $groupleader['canmanagerequests'] == 1))
 311          {
 312              $lang->num_requests_pending = $lang->sprintf($lang->num_requests_pending, $numrequests['req']);
 313              eval("\$joinrequests = \"".$templates->get("managegroup_requestnote")."\";");
 314          }
 315          $usergrouptype = $lang->group_public_moderated;
 316      }
 317      elseif($usergroup['type'] == 3)
 318      {
 319          $usergrouptype = $lang->group_public_not_moderated;
 320      }
 321      elseif($usergroup['type'] == 2)
 322      {
 323          $usergrouptype = $lang->group_private;
 324      }
 325      else
 326      {
 327          $usergrouptype = $lang->group_default;
 328      }
 329  
 330      $group_leaders = '';
 331  
 332      // Display group leaders (if there is any)
 333      $query = $db->query("
 334          SELECT g.*, u.username, u.usergroup, u.displaygroup
 335          FROM ".TABLE_PREFIX."groupleaders g
 336          LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid)
 337          WHERE g.gid = '{$gid}'
 338      ");
 339  
 340      $leaders_array = array();
 341  
 342      if($db->num_rows($query))
 343      {
 344          $loop = 1;
 345          $leaders = '';
 346          $leader_count = $db->num_rows($query);
 347          while($leader = $db->fetch_array($query))
 348          {
 349              $leader['username'] = htmlspecialchars_uni($leader['username']);
 350              $leader_name = format_name($leader['username'], $leader['usergroup'], $leader['displaygroup']);
 351              $leader_profile_link = build_profile_link($leader_name, $leader['uid']);
 352  
 353              $leaders_array[] = $leader['uid'];
 354  
 355              // Get commas...
 356              if($loop != $leader_count)
 357              {
 358                  $comma = $lang->comma;
 359              }
 360              else
 361              {
 362                  $comma = '';
 363              }
 364  
 365              ++$loop;
 366              eval("\$leaders .= \"".$templates->get("managegroup_leaders_bit")."\";");
 367          }
 368  
 369          eval("\$group_leaders = \"".$templates->get("managegroup_leaders")."\";");
 370      }
 371  
 372      switch($db->type)
 373      {
 374          case "pgsql":
 375          case "sqlite":
 376              $query = $db->simple_select("users", "*", "','||additionalgroups||',' LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username'));
 377              break;
 378          default:
 379              $query = $db->simple_select("users", "*", "CONCAT(',',additionalgroups,',') LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username'));
 380      }
 381  
 382      $numusers = $db->num_rows($query);
 383  
 384      $perpage = (int)$mybb->settings['membersperpage'];
 385      if($perpage < 1)
 386      {
 387          $perpage = 20;
 388      }
 389  
 390      $page = $mybb->get_input('page', MyBB::INPUT_INT);
 391      if($page && $page > 0)
 392      {
 393          $start = ($page-1) * $perpage;
 394          $pages = ceil($numusers / $perpage);
 395          if($page > $pages)
 396          {
 397              $start = 0;
 398              $page = 1;
 399          }
 400      }
 401      else
 402      {
 403          $start = 0;
 404          $page = 1;
 405      }
 406      $multipage = multipage($numusers, $perpage, $page, "managegroup.php?gid=".$gid);
 407  
 408      switch($db->type)
 409      {
 410          case "pgsql":
 411          case "sqlite":
 412              $query = $db->simple_select("users", "*", "','||additionalgroups||',' LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username', 'limit' => $perpage, 'limit_start' => $start));
 413              break;
 414          default:
 415              $query = $db->simple_select("users", "*", "CONCAT(',',additionalgroups,',') LIKE '%,{$gid},%' OR usergroup='{$gid}'", array('order_by' => 'username', 'limit' => $perpage, 'limit_start' => $start));
 416      }
 417  
 418      $removeable_count = 0;
 419      $users = "";
 420      while($user = $db->fetch_array($query))
 421      {
 422          $altbg = alt_trow();
 423          $regdate = my_date('relative', $user['regdate']);
 424          $post = $user;
 425          $sendpm = $email = '';
 426          if($mybb->settings['enablepms'] == 1 && $post['receivepms'] != 0 && $mybb->usergroup['cansendpms'] == 1 && my_strpos(",".$post['ignorelist'].",", ",".$mybb->user['uid'].",") === false)
 427          {
 428              eval("\$sendpm = \"".$templates->get("postbit_pm")."\";");
 429          }
 430  
 431          if($user['hideemail'] != 1)
 432          {
 433              eval("\$email = \"".$templates->get("postbit_email")."\";");
 434          }
 435          else
 436          {
 437              $email = '';
 438          }
 439  
 440          $user['username'] = htmlspecialchars_uni($user['username']);
 441          $user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
 442          $user['profilelink'] = build_profile_link($user['username'], $user['uid']);
 443          if(in_array($user['uid'], $leaders_array))
 444          {
 445              $leader = $lang->leader;
 446          }
 447          else
 448          {
 449              $leader = '';
 450          }
 451  
 452          // Checkbox for user management - only if current user is allowed
 453          $checkbox = $disabled = '';
 454          if($user['usergroup'] == $gid)
 455          {
 456              $disabled = 'disabled="disabled"';
 457          }
 458          else
 459          {
 460              ++$removeable_count;
 461          }
 462  
 463          if($groupleader['canmanagemembers'] == 1)
 464          {
 465              eval("\$checkbox = \"".$templates->get("managegroup_user_checkbox")."\";");
 466          }
 467  
 468          eval("\$users .= \"".$templates->get("managegroup_user")."\";");
 469      }
 470  
 471      if(!$users)
 472      {
 473          eval("\$users = \"".$templates->get("managegroup_no_users")."\";");
 474      }
 475  
 476      $add_user = $remove_users = $invite_user = '';
 477  
 478      if($groupleader['canmanagemembers'] == 1)
 479      {
 480          eval("\$add_user = \"".$templates->get("managegroup_adduser")."\";");
 481          if($removeable_count)
 482          {
 483              eval("\$remove_users = \"".$templates->get("managegroup_removeusers")."\";");
 484          }
 485      }
 486  
 487      if($usergroup['type'] == 5 && $groupleader['caninvitemembers'] == 1)
 488      {
 489          eval("\$invite_user = \"".$templates->get("managegroup_inviteuser")."\";");
 490      }
 491  
 492      $plugins->run_hooks("managegroup_end");
 493  
 494      eval("\$manageusers = \"".$templates->get("managegroup")."\";");
 495      output_page($manageusers);
 496  }


2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup Cross-referenced by PHPXref