From c3598d0d588c506ea9bfa14570256c76b672c3d5 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 29 Aug 2021 00:15:06 +0700 Subject: [PATCH] [ticket/16859] Optimize code to save SQL queries and use Twig for template PHPBB3-16859 --- phpBB/includes/functions.php | 23 +++++++++++++------ phpBB/includes/ucp/ucp_register.php | 18 +++++++-------- .../prosilver/template/ucp_register.html | 4 ++-- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index f17b1b3ee3..b23cad6f77 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -264,23 +264,32 @@ function phpbb_version_compare($version1, $version2, $operator = null) /** * Pick a language, any language ... +* +* @param string $default Language ISO code to be selected by default in the dropdown list +* @param array $langdata Language data in format of array(array('lang_iso' => string, lang_local_name => string), ...) +* +* @return string HTML options for language selection dropdown list. */ -function language_select($default = '') +function language_select($default = '', array $langdata = []) { global $db; - $sql = 'SELECT lang_iso, lang_local_name - FROM ' . LANG_TABLE . ' - ORDER BY lang_english_name'; - $result = $db->sql_query($sql); + if (empty($langdata)) + { + $sql = 'SELECT lang_iso, lang_local_name + FROM ' . LANG_TABLE . ' + ORDER BY lang_english_name'; + $result = $db->sql_query($sql); + $langdata = (array) $db->sql_fetchrowset($result); + $db->sql_freeresult($result); + } $lang_options = ''; - while ($row = $db->sql_fetchrow($result)) + foreach ($langdata as $row) { $selected = ($row['lang_iso'] == $default) ? ' selected="selected"' : ''; $lang_options .= ''; } - $db->sql_freeresult($result); return $lang_options; } diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 2861171ad0..8369d59186 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -150,10 +150,10 @@ class ucp_register } // Checking amount of available languages - $sql = 'SELECT lang_id - FROM ' . LANG_TABLE; + $sql = 'SELECT lang_iso, lang_local_name + FROM ' . LANG_TABLE . ' + ORDER BY lang_english_name'; $result = $db->sql_query($sql); - $lang_row = (array) $db->sql_fetchrowset($result); $db->sql_freeresult($result); @@ -167,7 +167,7 @@ class ucp_register unset($now); $template_vars = array( - 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang) : '', + 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang, $lang_row) : '', 'L_COPPA_NO' => $user->lang('UCP_COPPA_BEFORE', $coppa_birthday), 'L_COPPA_YES' => $user->lang('UCP_COPPA_ON_AFTER', $coppa_birthday), @@ -182,7 +182,7 @@ class ucp_register else { $template_vars = array( - 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang) : '', + 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($user_lang, $lang_row) : '', 'L_TERMS_OF_USE' => sprintf($user->lang['TERMS_OF_USE_CONTENT'], $config['sitename'], generate_board_url()), 'S_SHOW_COPPA' => false, @@ -630,10 +630,10 @@ class ucp_register phpbb_timezone_select($template, $user, $data['tz'], true); // Checking amount of available languages - $sql = 'SELECT lang_id - FROM ' . LANG_TABLE; + $sql = 'SELECT lang_iso, lang_local_name + FROM ' . LANG_TABLE . ' + ORDER BY lang_english_name'; $result = $db->sql_query($sql); - $lang_row = (array) $db->sql_fetchrowset($result); $db->sql_freeresult($result); @@ -647,7 +647,7 @@ class ucp_register 'L_USERNAME_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])), 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars'])), - 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($data['lang']) : '', + 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($data['lang'], $lang_row) : '', 'S_TZ_PRESELECT' => !$submit, 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false, 'S_REGISTRATION' => true, diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index 5952fc41fa..c85956df4b 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -57,12 +57,12 @@
- + {% if S_LANG_OPTIONS %}
- + {% endif %}