[ Index ]

PHP Cross Reference of MyBB 1.8.40

title

Body

[close]

/ -> memberlist.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', 'memberlist.php');
  13  
  14  $templatelist = "memberlist,memberlist_search,memberlist_user,memberlist_user_groupimage,memberlist_user_avatar,memberlist_user_userstar,memberlist_search_contact_field,memberlist_referrals,memberlist_referrals_bit";
  15  $templatelist .= ",multipage,multipage_end,multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage,multipage_start,memberlist_error,memberlist_orderarrow";
  16  
  17  require_once  "./global.php";
  18  
  19  // Load global language phrases
  20  $lang->load("memberlist");
  21  
  22  if($mybb->settings['enablememberlist'] == 0)
  23  {
  24      error($lang->memberlist_disabled);
  25  }
  26  
  27  $plugins->run_hooks("memberlist_start");
  28  
  29  add_breadcrumb($lang->nav_memberlist, "memberlist.php");
  30  
  31  if($mybb->usergroup['canviewmemberlist'] == 0)
  32  {
  33      error_no_permission();
  34  }
  35  
  36  $orderarrow = $sort_selected = array(
  37      'regdate' => '',
  38      'lastvisit' => '',
  39      'reputation' => '',
  40      'postnum' => '',
  41      'threadnum' => '',
  42      'referrals' => '',
  43      'username' => ''
  44  );
  45  
  46  // Showing advanced search page?
  47  if($mybb->get_input('action') == "search")
  48  {
  49      $plugins->run_hooks("memberlist_search");
  50      add_breadcrumb($lang->nav_memberlist_search);
  51  
  52      if(isset($mybb->usergroup['usergroup']))
  53      {
  54          $usergroup = $mybb->usergroup['usergroup'];
  55      }
  56      else
  57      {
  58          $usergroup = '';
  59      }
  60      if(isset($mybb->usergroup['additionalgroups']))
  61      {
  62          $additionalgroups = $mybb->usergroup['additionalgroups'];
  63      }
  64      else
  65      {
  66          $additionalgroups = '';
  67      }
  68  
  69      $referrals_option = '';
  70      if($mybb->settings['usereferrals'] == 1)
  71      {
  72          eval("\$referrals_option = \"".$templates->get("memberlist_referrals_option")."\";");
  73      }
  74  
  75      eval("\$search_page = \"".$templates->get("memberlist_search")."\";");
  76      output_page($search_page);
  77  }
  78  else
  79  {
  80      $colspan = 6;
  81      $search_url = '';
  82  
  83      // Incoming sort field?
  84      if(isset($mybb->input['sort']))
  85      {
  86          $mybb->input['sort'] = strtolower($mybb->get_input('sort'));
  87      }
  88      else
  89      {
  90          $mybb->input['sort'] = $mybb->settings['default_memberlist_sortby'];
  91      }
  92  
  93      switch($mybb->input['sort'])
  94      {
  95          case "regdate":
  96              $sort_field = "u.regdate";
  97              break;
  98          case "lastvisit":
  99              $sort_field = "u.lastactive";
 100              break;
 101          case "reputation":
 102              $sort_field = "u.reputation";
 103              break;
 104          case "postnum":
 105              $sort_field = "u.postnum";
 106              break;
 107          case "threadnum":
 108              $sort_field = "u.threadnum";
 109              break;
 110          case "referrals":
 111              if($mybb->settings['usereferrals'] == 1)
 112              {
 113                  $sort_field = "u.referrals";
 114              }
 115              else
 116              {
 117                  $sort_field = "u.username";
 118              }
 119              break;
 120          default:
 121              $sort_field = "u.username";
 122              $mybb->input['sort'] = 'username';
 123              break;
 124      }
 125      $sort_selected[$mybb->input['sort']] = " selected=\"selected\"";
 126  
 127      // Incoming sort order?
 128      if(isset($mybb->input['order']))
 129      {
 130          $mybb->input['order'] = strtolower($mybb->input['order']);
 131      }
 132      else
 133      {
 134          $mybb->input['order'] = strtolower($mybb->settings['default_memberlist_order']);
 135      }
 136  
 137      $order_check = array('ascending' => '', 'descending' => '');
 138      if($mybb->input['order'] == "ascending" || (!$mybb->input['order'] && $mybb->input['sort'] == 'username'))
 139      {
 140          $sort_order = "ASC";
 141          $sortordernow = "ascending";
 142          $oppsort = $lang->desc;
 143          $oppsortnext = "descending";
 144          $mybb->input['order'] = "ascending";
 145      }
 146      else
 147      {
 148          $sort_order = "DESC";
 149          $sortordernow = "descending";
 150          $oppsort = $lang->asc;
 151          $oppsortnext = "ascending";
 152          $mybb->input['order'] = "descending";
 153      }
 154      $order_check[$mybb->input['order']] = " checked=\"checked\"";
 155  
 156      if($sort_field == 'u.lastactive' && $mybb->usergroup['canviewwolinvis'] == 0)
 157      {
 158          $sort_field = "u.invisible ASC, CASE WHEN u.invisible = 1 THEN u.regdate ELSE u.lastactive END";
 159      }
 160  
 161      // Incoming results per page?
 162      $mybb->input['perpage'] = $mybb->get_input('perpage', MyBB::INPUT_INT);
 163      if($mybb->input['perpage'] > 0 && $mybb->input['perpage'] <= 500)
 164      {
 165          $per_page = $mybb->input['perpage'];
 166      }
 167      else if($mybb->settings['membersperpage'])
 168      {
 169          $per_page = $mybb->input['perpage'] = (int)$mybb->settings['membersperpage'];
 170      }
 171      else
 172      {
 173          $per_page = $mybb->input['perpage'] = 20;
 174      }
 175  
 176      $search_query = '1=1';
 177      $search_url = "";
 178  
 179      switch($db->type)
 180      {
 181          // PostgreSQL's LIKE is case sensitive
 182          case "pgsql":
 183              $like = "ILIKE";
 184              break;
 185          default:
 186              $like = "LIKE";
 187      }
 188  
 189      // Limiting results to a certain letter
 190      if(isset($mybb->input['letter']))
 191      {
 192          $letter = chr(ord($mybb->get_input('letter')));
 193          if($mybb->input['letter'] == -1)
 194          {
 195              $search_query .= " AND u.username NOT REGEXP('[a-zA-Z]')";
 196          }
 197          else if(strlen($letter) == 1)
 198          {
 199              $search_query .= " AND u.username {$like} '".$db->escape_string_like($letter)."%'";
 200          }
 201          $search_url .= "&letter={$letter}";
 202      }
 203  
 204      // Searching for a matching username
 205      $search_username = htmlspecialchars_uni(trim($mybb->get_input('username')));
 206      if($search_username != '')
 207      {
 208          $username_like_query = $db->escape_string_like($search_username);
 209  
 210          // Name begins with
 211          if($mybb->get_input('username_match') == "begins")
 212          {
 213              $search_query .= " AND u.username {$like} '".$username_like_query."%'";
 214              $search_url .= "&username_match=begins";
 215          }
 216          // Just contains
 217          else if($mybb->get_input('username_match') == "contains")
 218          {
 219              $search_query .= " AND u.username {$like} '%".$username_like_query."%'";
 220              $search_url .= "&username_match=contains";
 221          }
 222          // Exact
 223          else
 224          {
 225              $username_esc = $db->escape_string(my_strtolower($search_username));
 226              $search_query .= " AND LOWER(u.username)='{$username_esc}'";
 227          }
 228  
 229          $search_url .= "&username=".urlencode($search_username);
 230      }
 231  
 232      // Website contains
 233      $mybb->input['website'] = trim($mybb->get_input('website'));
 234      $search_website = htmlspecialchars_uni($mybb->input['website']);
 235      if(trim($mybb->input['website']))
 236      {
 237          $search_query .= " AND u.website {$like} '%".$db->escape_string_like($mybb->input['website'])."%'";
 238          $search_url .= "&website=".urlencode($mybb->input['website']);
 239      }
 240  
 241      $usergroups_cache = $cache->read('usergroups');
 242  
 243      $group = array();
 244      foreach($usergroups_cache as $gid => $groupcache)
 245      {
 246          if($groupcache['showmemberlist'] == 0)
 247          {
 248              $group[] = (int)$gid;
 249          }
 250      }
 251  
 252      if(is_array($group) && !empty($group))
 253      {
 254          $hiddengroup = implode(',', $group);
 255  
 256          $search_query .= " AND u.usergroup NOT IN ({$hiddengroup})";
 257  
 258          foreach($group as $hidegid)
 259          {
 260              switch($db->type)
 261              {
 262                  case "pgsql":
 263                  case "sqlite":
 264                      $search_query .= " AND ','||u.additionalgroups||',' NOT LIKE '%,{$hidegid},%'";
 265                      break;
 266                  default:
 267                      $search_query .= " AND CONCAT(',',u.additionalgroups,',') NOT LIKE '%,{$hidegid},%'";
 268                      break;
 269              }
 270          }
 271      }
 272    
 273      $sorturl = htmlspecialchars_uni("memberlist.php?perpage={$mybb->input['perpage']}{$search_url}");
 274      $search_url = htmlspecialchars_uni("memberlist.php?sort={$mybb->input['sort']}&order={$mybb->input['order']}&perpage={$mybb->input['perpage']}{$search_url}");
 275  
 276      $plugins->run_hooks('memberlist_intermediate');
 277  
 278      $query = $db->simple_select("users u", "COUNT(*) AS users", "{$search_query}");
 279      $num_users = $db->fetch_field($query, "users");
 280  
 281      $page = $mybb->get_input('page', MyBB::INPUT_INT);
 282      if($page && $page > 0)
 283      {
 284          $start = ($page - 1) * $per_page;
 285          $pages = ceil($num_users / $per_page);
 286          if($page > $pages)
 287          {
 288              $start = 0;
 289              $page = 1;
 290          }
 291      }
 292      else
 293      {
 294          $start = 0;
 295          $page = 1;
 296      }
 297  
 298      $sort = htmlspecialchars_uni($mybb->input['sort']);
 299      eval("\$orderarrow['{$sort}'] = \"".$templates->get("memberlist_orderarrow")."\";");
 300  
 301      $referral_header = '';
 302  
 303      // Referral?
 304      if($mybb->settings['usereferrals'] == 1)
 305      {
 306          $colspan = 7;
 307          eval("\$referral_header = \"".$templates->get("memberlist_referrals")."\";");
 308      }
 309  
 310      $multipage = multipage($num_users, $per_page, $page, $search_url);
 311  
 312      // Cache a few things
 313      $usertitles = $cache->read('usertitles');
 314      $usertitles_cache = array();
 315      foreach($usertitles as $usertitle)
 316      {
 317          $usertitles_cache[$usertitle['posts']] = $usertitle;
 318      }
 319      $users = '';
 320      $query = $db->query("
 321          SELECT u.*, f.*
 322          FROM ".TABLE_PREFIX."users u
 323          LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid)
 324          WHERE {$search_query}
 325          ORDER BY {$sort_field} {$sort_order}
 326          LIMIT {$start}, {$per_page}
 327      ");
 328      while($user = $db->fetch_array($query))
 329      {
 330          $user = $plugins->run_hooks("memberlist_user", $user);
 331  
 332          $alt_bg = alt_trow();
 333  
 334          $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']);
 335  
 336          $user['profilelink'] = build_profile_link($user['username'], $user['uid']);
 337  
 338          // Get the display usergroup
 339          if($user['usergroup'])
 340          {
 341              $usergroup = usergroup_permissions($user['usergroup']);
 342          }
 343          else
 344          {
 345              $usergroup = usergroup_permissions(1);
 346          }
 347  
 348          $displaygroupfields = array("title", "description", "namestyle", "usertitle", "stars", "starimage", "image");
 349  
 350          if(!$user['displaygroup'])
 351          {
 352              $user['displaygroup'] = $user['usergroup'];
 353          }
 354  
 355          $display_group = usergroup_displaygroup($user['displaygroup']);
 356          if(is_array($display_group))
 357          {
 358              $usergroup = array_merge($usergroup, $display_group);
 359          }
 360  
 361          $referral_bit = '';
 362  
 363          // Build referral?
 364          if($mybb->settings['usereferrals'] == 1)
 365          {
 366              $referral_count = (int) $user['referrals'];
 367              if($referral_count > 0)
 368              {
 369                  $uid = (int) $user['uid'];
 370                  eval("\$user['referrals'] = \"".$templates->get('member_referrals_link')."\";");
 371              }
 372  
 373              eval("\$referral_bit = \"".$templates->get("memberlist_referrals_bit")."\";");
 374          }
 375  
 376          $usergroup['groupimage'] = '';
 377          // Work out the usergroup/title stuff
 378          if(!empty($usergroup['image']))
 379          {
 380              if(!empty($mybb->user['language']))
 381              {
 382                  $language = $mybb->user['language'];
 383              }
 384              else
 385              {
 386                  $language = $mybb->settings['bblanguage'];
 387              }
 388              $usergroup['image'] = str_replace("{lang}", $language, $usergroup['image']);
 389              $usergroup['image'] = str_replace("{theme}", $theme['imgdir'], $usergroup['image']);
 390              eval("\$usergroup['groupimage'] = \"".$templates->get("memberlist_user_groupimage")."\";");
 391          }
 392  
 393          $has_custom_title = 0;
 394          if(trim($user['usertitle']) != "")
 395          {
 396              $has_custom_title = 1;
 397          }
 398  
 399          if($usergroup['usertitle'] != "" && !$has_custom_title)
 400          {
 401              $user['usertitle'] = $usergroup['usertitle'];
 402          }
 403          elseif(is_array($usertitles_cache) && !$usergroup['usertitle'])
 404          {
 405              foreach($usertitles_cache as $posts => $titleinfo)
 406              {
 407                  if($user['postnum'] >= $posts)
 408                  {
 409                      if(!$has_custom_title)
 410                      {
 411                          $user['usertitle'] = $titleinfo['title'];
 412                      }
 413                      $user['stars'] = $titleinfo['stars'];
 414                      $user['starimage'] = $titleinfo['starimage'];
 415                      break;
 416                  }
 417              }
 418          }
 419          
 420          $user['usertitle'] = htmlspecialchars_uni($user['usertitle']);
 421  
 422          if(!empty($usergroup['stars']))
 423          {
 424              $user['stars'] = $usergroup['stars'];
 425          }
 426  
 427          if(empty($user['starimage']))
 428          {
 429              $user['starimage'] = $usergroup['starimage'];
 430          }
 431  
 432          $user['userstars'] = '';
 433          if(!empty($user['starimage']) && isset($user['stars']))
 434          {
 435              // Only display stars if we have an image to use...
 436              $starimage = str_replace("{theme}", $theme['imgdir'], $user['starimage']);
 437  
 438              for($i = 0; $i < $user['stars']; ++$i)
 439              {
 440                  eval("\$user['userstars'] .= \"".$templates->get("memberlist_user_userstar", 1, 0)."\";");
 441              }
 442          }
 443  
 444          if($user['userstars'] && $usergroup['groupimage'])
 445          {
 446              $user['userstars'] = "<br />".$user['userstars'];
 447          }
 448  
 449          // Show avatar
 450          $useravatar = format_avatar($user['avatar'], $user['avatardimensions'], my_strtolower($mybb->settings['memberlistmaxavatarsize']));
 451          eval("\$user['avatar'] = \"".$templates->get("memberlist_user_avatar")."\";");
 452  
 453          $last_seen = max(array($user['lastactive'], $user['lastvisit']));
 454          if(empty($last_seen))
 455          {
 456              $user['lastvisit'] = $lang->lastvisit_never;
 457          }
 458          else
 459          {
 460              // We have some stamp here
 461              if($user['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $user['uid'] != $mybb->user['uid'])
 462              {
 463                  $user['lastvisit'] = $lang->lastvisit_hidden;
 464              }
 465              else
 466              {
 467                  $user['lastvisit'] = my_date('relative', $last_seen);
 468              }
 469          }
 470  
 471          $user['regdate'] = my_date('relative', $user['regdate']);
 472          $user['postnum'] = my_number_format($user['postnum']);
 473          $user['threadnum'] = my_number_format($user['threadnum']);
 474          eval("\$users .= \"".$templates->get("memberlist_user")."\";");
 475      }
 476  
 477      // Do we have no results?
 478      if(!$users)
 479      {
 480          eval("\$users = \"".$templates->get("memberlist_error")."\";");
 481      }
 482  
 483      $referrals_option = '';
 484      if($mybb->settings['usereferrals'] == 1)
 485      {
 486          eval("\$referrals_option = \"".$templates->get("memberlist_referrals_option")."\";");
 487      }
 488  
 489      $plugins->run_hooks("memberlist_end");
 490  
 491      eval("\$memberlist = \"".$templates->get("memberlist")."\";");
 492      output_page($memberlist);
 493  }


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