session_start(array('req_login' => true)); $start = abs(intval(request_var('start', 0))); $mode = (string) request_var('mode', 'joined'); $sort_order = (request_var('order', 'ASC') == 'ASC') ? 'ASC' : 'DESC'; $username = request_var('username', ''); $paginationusername = $username; // // Memberlist sorting // $mode_types_text = array( $lang['SORT_JOINED'], $lang['SORT_USERNAME'], $lang['SORT_LOCATION'], $lang['SORT_POSTS'], $lang['SORT_EMAIL'], $lang['SORT_WEBSITE'], $lang['SORT_TOP_TEN'] ); $mode_types = array( 'joined', 'username', 'location', 'posts', 'email', 'website', 'topten' ); // '; for ($i=0, $cnt=count($mode_types_text); $i < $cnt; $i++) { $selected = ( $mode == $mode_types[$i] ) ? ' selected="selected"' : ''; $select_sort_mode .= ''; } $select_sort_mode .= ''; // '; if ($sort_order == 'ASC') { $select_sort_order .= ''; } else { $select_sort_order .= ''; } $select_sort_order .= ''; // // Generate page // $template->assign_vars(array( 'S_MODE_SELECT' => $select_sort_mode, 'S_ORDER_SELECT' => $select_sort_order, 'S_MODE_ACTION' => "memberlist.php", 'S_USERNAME' => $paginationusername, )); switch( $mode ) { case 'username': $order_by = "username $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; case 'location': $order_by = "user_from $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; case 'posts': $order_by = "user_posts $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; case 'email': $order_by = "user_email $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; case 'website': $order_by = "user_website $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; case 'topten': $order_by = "user_posts $sort_order LIMIT 10"; break; case 'joined': default: $order_by = "user_regdate $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; $mode = 'joined'; break; } // per-letter selection $by_letter = 'all'; $letters_range = 'a-z'; if (!$disable_ru_letters) { $letters_range .= iconv('windows-1251', 'UTF-8', chr(224)); $letters_range .= '-'; $letters_range .= iconv('windows-1251', 'UTF-8', chr(255)); } $select_letter = $letter_sql = ''; $by_letter_req = isset($_REQUEST['letter']) ? strtolower(trim($_REQUEST['letter'])) : false; if ($by_letter_req) { if ($by_letter_req === 'all') { $by_letter = 'all'; $letter_sql = ''; } else if ($by_letter_req === 'others') { $by_letter = 'others'; $letter_sql = "username REGEXP '^[!-@\\[-`].*$'"; } else { // Fix for russian letters if (!$disable_ru_letters && !preg_match("/[a-я]/", $by_letter_req)) { $by_letter_req = iconv('windows-1251', 'UTF-8', $by_letter_req[0]); } if ($letter_req = preg_replace("#[^$letters_range]#ui", '', $by_letter_req)) { $by_letter = DB()->escape($letter_req); $letter_sql = "LOWER(username) LIKE '$by_letter%'"; } } } // ENG for ($i=ord('A'), $cnt=ord('Z'); $i <= $cnt; $i++) { $select_letter .= (strtoupper($by_letter) == chr($i)) ? ''. chr($i) .' ' : ''. chr($i) .' '; } if (!$disable_ru_letters) { // RUS $select_letter .= ': '; for ($i=224, $cnt=255; $i <= $cnt; $i++) { $select_letter .= ($by_letter == iconv('windows-1251', 'UTF-8', chr($i))) ? ''. iconv('windows-1251', 'UTF-8', chr($i-32)) .' ' : ''. iconv('windows-1251', 'UTF-8', chr($i-32)) .' '; } } $select_letter .= ': '; $select_letter .= ($by_letter == 'others') ? ''. $lang['OTHERS'] .' ' : ''. $lang['OTHERS'] .' '; $select_letter .= ': '; $select_letter .= ($by_letter == 'all') ? ''. $lang['ALL'] .'' : ''. $lang['ALL'] .''; $template->assign_vars(array( 'S_LETTER_SELECT' => $select_letter, 'S_LETTER_HIDDEN' => '', )); // per-letter selection end $sql = "SELECT username, user_id, user_rank, user_opt, user_posts, user_regdate, user_from, user_website, user_email, avatar_ext_id FROM ". BB_USERS ." WHERE user_id NOT IN(". EXCLUDED_USERS_CSV .")"; if ( $username ) { $username = preg_replace('/\*/', '%', clean_username($username)); $letter_sql = "username LIKE '". DB()->escape($username) ."'"; } $sql .= ($letter_sql) ? " AND $letter_sql" : ''; $sql .= " ORDER BY $order_by"; if ($result = DB()->fetch_rowset($sql)) { foreach($result as $i => $row) { $user_id = $row['user_id']; $from = $row['user_from']; $joined = bb_date($row['user_regdate'], $bb_cfg['reg_date_format']); $posts = ''. $row['user_posts'] .''; $pm = ($bb_cfg['text_buttons']) ? ''. $lang['SEND_PM_TXTB'] .'' : '' . $lang['SEND_PRIVATE_MESSAGE'] . ''; if (bf($row['user_opt'], 'user_opt', 'user_viewemail') || $row['user_id'] == $userdata['user_id'] || IS_ADMIN) { $email_uri = ($bb_cfg['board_email_form']) ? ("profile.php?mode=email&". POST_USERS_URL ."=$user_id") : 'mailto:'. $row['user_email']; $email = ''. $row['user_email'] .''; } else { $email = $lang['HIDDEN_USER']; } if ($row['user_website']) { $www = ($bb_cfg['text_buttons']) ? ''. $lang['VISIT_WEBSITE_TXTB'] .'' : '' . $lang['VISIT_WEBSITE'] . ''; } else { $www = $lang['NOSELECT']; } if(!$from) { $from = $lang['NOSELECT']; } $row_class = !($i % 2) ? 'row1' : 'row2'; $template->assign_block_vars('memberrow', array( 'ROW_NUMBER' => $i + ( $start + 1 ), 'ROW_CLASS' => $row_class, 'USER' => profile_url($row), 'AVATAR_IMG' => $show_avatars_memberlist ? get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt', 'dis_avatar'), '', 50, 50) : '', 'FROM' => $from, 'JOINED_RAW' => $row['user_regdate'], 'JOINED' => $joined, 'POSTS' => $posts, 'PM' => $pm, 'EMAIL' => $email, 'WWW' => $www, 'U_VIEWPROFILE' => PROFILE_URL . $user_id, )); } } else { $template->assign_block_vars('no_username', array( 'NO_USER_ID_SPECIFIED' => $lang['NO_USER_ID_SPECIFIED'], )); } $paginationurl = "memberlist.php?mode=$mode&order=$sort_order&letter=$by_letter"; if ($paginationusername) $paginationurl .= "&username=$paginationusername"; if ( $mode != 'topten' ) { $sql = "SELECT COUNT(*) AS total FROM ". BB_USERS; $sql .= ($letter_sql) ? " WHERE $letter_sql" : " WHERE user_id NOT IN(". EXCLUDED_USERS_CSV .")"; if (!$result = DB()->sql_query($sql)) { bb_die('Error getting total users'); } if ($total = DB()->sql_fetchrow($result)) { $total_members = $total['total']; generate_pagination($paginationurl, $total_members, $bb_cfg['topics_per_page'], $start); } DB()->sql_freeresult($result); } $template->assign_vars(array( 'PAGE_TITLE' => $lang['MEMBERLIST'], )); print_page('memberlist.tpl');