From 926f57c0482421645b2f9f419299ab4e4d59c89c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Fri, 1 Dec 2023 17:36:53 +0700 Subject: [PATCH] =?UTF-8?q?Refactored=20memberlist.php=20=F0=9F=8E=93=20(#?= =?UTF-8?q?1181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactored memberlist.php 🎓 * Update memberlist.php --- library/language/source/main.php | 6 +- memberlist.php | 110 ++++-------------------- styles/templates/default/memberlist.tpl | 3 - 3 files changed, 17 insertions(+), 102 deletions(-) diff --git a/library/language/source/main.php b/library/language/source/main.php index c5c5694c8..e19911197 100644 --- a/library/language/source/main.php +++ b/library/language/source/main.php @@ -1309,10 +1309,6 @@ $lang['COOKIES_REQUIRED'] = 'Cookies must be enabled!'; $lang['SESSION_EXPIRED'] = 'Session expired'; // Sort memberlist per letter -$lang['SORT_PER_LETTER'] = 'Show only usernames starting with'; -$lang['OTHERS'] = 'others'; -$lang['ALL'] = 'all'; - $lang['POST_LINK'] = 'Post link'; $lang['GOTO_QUOTED_POST'] = 'Go to the quoted post'; $lang['LAST_VISITED'] = 'Last Visited'; @@ -2599,6 +2595,8 @@ $lang['RELEASE_WELCOME'] = 'Please fill in the release form'; $lang['NEW_RELEASE'] = 'New release'; $lang['NEXT'] = 'Continue'; $lang['OTHER'] = 'Other'; +$lang['OTHERS'] = 'Others'; +$lang['ALL'] = 'All'; $lang['TPL_EMPTY_FIELD'] = 'You must fill the field %s'; $lang['TPL_EMPTY_SEL'] = 'You must select %s'; diff --git a/memberlist.php b/memberlist.php index d0360045c..56883b248 100644 --- a/memberlist.php +++ b/memberlist.php @@ -19,43 +19,19 @@ $start = abs((int)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 = [ - $lang['SORT_JOINED'], - $lang['SORT_USERNAME'], - $lang['SORT_LOCATION'], - $lang['SORT_POSTS'], - $lang['SORT_EMAIL'], - $lang['SORT_WEBSITE'], - $lang['SORT_TOP_TEN'] -]; +$mode_types_text = [$lang['SORT_JOINED'], $lang['SORT_USERNAME'], $lang['SORT_LOCATION'], $lang['SORT_POSTS'], $lang['SORT_EMAIL'], $lang['SORT_WEBSITE'], $lang['SORT_TOP_TEN']]; +$mode_types = ['joined', 'username', 'location', 'posts', 'email', 'website', 'topten']; -$mode_types = [ - 'joined', - 'username', - 'location', - 'posts', - 'email', - 'website', - 'topten' -]; - -// '; - for ($i = 0, $iMax = count($mode_types_text); $i < $iMax; $i++) { $selected = ($mode == $mode_types[$i]) ? ' selected' : ''; $select_sort_mode .= ''; } $select_sort_mode .= ''; -// '; - if ($sort_order == 'ASC') { $select_sort_order .= ''; } else { @@ -64,9 +40,6 @@ if ($sort_order == 'ASC') { $select_sort_order .= ''; switch ($mode) { - case 'joined': - $order_by = "user_id $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; - break; case 'username': $order_by = "username $sort_order LIMIT $start, " . $bb_cfg['topics_per_page']; break; @@ -85,59 +58,14 @@ switch ($mode) { 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'; -$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 = ''; - } elseif ($by_letter_req === 'others') { - $by_letter = 'others'; - $letter_sql = "username REGEXP '^[!-@\\[-`].*$'"; - } elseif ($letter_req = preg_replace("#[^$letters_range]#ui", '', iconv('windows-1251', 'UTF-8', $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) . ' '; -} -// RUS -$select_letter .= ': '; -for ($i = 224, $cnt = 255; $i <= $cnt; $i++) { - $select_letter .= (strtoupper($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'] . ''; - -// 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 . ")"; -if ($username) { - $username = str_replace("\*", '%', clean_username($username)); - $letter_sql = "username LIKE '" . DB()->escape($username) . "'"; -} -$sql .= ($letter_sql) ? " AND $letter_sql" : ''; -$sql .= " ORDER BY $order_by"; - +// Generate user information +$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 . ") ORDER BY $order_by"; if ($result = DB()->fetch_rowset($sql)) { foreach ($result as $i => $row) { $user_id = $row['user_id']; @@ -163,13 +91,12 @@ if ($result = DB()->fetch_rowset($sql)) { $template->assign_block_vars('no_username', ['NO_USER_ID_SPECIFIED' => $lang['NO_USER_ID_SPECIFIED']]); } -$paginationurl = "memberlist.php?letter=$by_letter&mode=$mode&order=$sort_order"; -if ($paginationusername) { - $paginationurl .= "&username=$paginationusername"; -} +// Pagination +$paginationurl = "memberlist.php?mode=$mode&order=$sort_order"; +$paginationurl .= $username ? "&username=$username" : ''; + if ($mode != 'topten' || $bb_cfg['topics_per_page'] < 10) { - $sql = "SELECT COUNT(*) AS total FROM " . BB_USERS; - $sql .= ($letter_sql) ? " WHERE $letter_sql" : " WHERE user_id NOT IN(" . EXCLUDED_USERS . ")"; + $sql = "SELECT COUNT(*) AS total FROM " . BB_USERS . " WHERE user_id NOT IN(" . EXCLUDED_USERS . ")"; if (!$result = DB()->sql_query($sql)) { bb_die('Error getting total users'); } @@ -180,20 +107,13 @@ if ($mode != 'topten' || $bb_cfg['topics_per_page'] < 10) { DB()->sql_freeresult($result); } -// -// Generate page -// -$template->assign_vars([ - 'S_MODE_SELECT' => $select_sort_mode, - 'S_ORDER_SELECT' => $select_sort_order, - 'S_MODE_ACTION' => "memberlist.php?letter=$by_letter&mode=$mode&order=$sort_order", - 'S_USERNAME' => $paginationusername, -]); - +// Generate output $template->assign_vars([ 'PAGE_TITLE' => $lang['MEMBERLIST'], - 'S_LETTER_SELECT' => $select_letter, - 'S_LETTER_HIDDEN' => '' + 'S_MODE_SELECT' => $select_sort_mode, + 'S_ORDER_SELECT' => $select_sort_order, + 'S_MODE_ACTION' => "memberlist.php?mode=$mode&order=$sort_order", + 'S_USERNAME' => $username, ]); print_page('memberlist.tpl'); diff --git a/styles/templates/default/memberlist.tpl b/styles/templates/default/memberlist.tpl index 713b9b4fa..f21b98bbf 100644 --- a/styles/templates/default/memberlist.tpl +++ b/styles/templates/default/memberlist.tpl @@ -12,9 +12,6 @@ - - {L_SORT_PER_LETTER}: {S_LETTER_SELECT}{S_LETTER_HIDDEN} -