From 92a2c0861619f006c497d8d1879d846c22590f1d Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 28 Aug 2021 22:51:51 +0700 Subject: [PATCH 1/4] [ticket/16859] Exclude language option on register if only 1 language installed PHPBB3-16859 --- phpBB/includes/ucp/ucp_register.php | 16 ++++++++++------ .../styles/prosilver/template/ucp_register.html | 2 ++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index f5f907eacd..2861171ad0 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -154,11 +154,7 @@ class ucp_register FROM ' . LANG_TABLE; $result = $db->sql_query($sql); - $lang_row = array(); - while ($row = $db->sql_fetchrow($result)) - { - $lang_row[] = $row; - } + $lang_row = (array) $db->sql_fetchrowset($result); $db->sql_freeresult($result); if ($coppa === false && $config['coppa_enable']) @@ -633,6 +629,14 @@ class ucp_register // Assign template vars for timezone select phpbb_timezone_select($template, $user, $data['tz'], true); + // Checking amount of available languages + $sql = 'SELECT lang_id + FROM ' . LANG_TABLE; + $result = $db->sql_query($sql); + + $lang_row = (array) $db->sql_fetchrowset($result); + $db->sql_freeresult($result); + $template_vars = array( 'USERNAME' => $data['username'], 'PASSWORD' => $data['new_password'], @@ -643,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' => language_select($data['lang']), + 'S_LANG_OPTIONS' => (count($lang_row) > 1) ? language_select($data['lang']) : '', '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 130de9056e..5952fc41fa 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -57,10 +57,12 @@
+
+ From c3598d0d588c506ea9bfa14570256c76b672c3d5 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 29 Aug 2021 00:15:06 +0700 Subject: [PATCH 2/4] [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 %} From 2c8be65dcf6608834cae703c78513e99ee36087f Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 29 Aug 2021 01:37:17 +0700 Subject: [PATCH 3/4] [ticket/16859] Apply similar logic to UCP board preferences PHPBB3-16859 --- phpBB/includes/functions.php | 46 +++++++++++++++++++------------- phpBB/includes/ucp/ucp_prefs.php | 38 ++++++++++---------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index b23cad6f77..37edc27e1d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -263,13 +263,13 @@ function phpbb_version_compare($version1, $version2, $operator = null) // functions used for building option fields /** -* 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. -*/ + * 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 = '', array $langdata = []) { global $db; @@ -295,26 +295,36 @@ function language_select($default = '', array $langdata = []) } /** -* Pick a template/theme combo, -*/ -function style_select($default = '', $all = false) + * Pick a template/theme combo + * + * @param string $default Style ID to be selected by default in the dropdown list + * @param bool $all Flag indicating if all styles data including inactive ones should be fetched + * @param array $styledata Style data in format of array(array('style_id' => int, style_name => string), ...) + * + * @return string HTML options for style selection dropdown list. + */ +function style_select($default = '', $all = false, array $styledata = []) { global $db; - $sql_where = (!$all) ? 'WHERE style_active = 1 ' : ''; - $sql = 'SELECT style_id, style_name - FROM ' . STYLES_TABLE . " - $sql_where - ORDER BY style_name"; - $result = $db->sql_query($sql); + if (empty($styledata)) + { + $sql_where = (!$all) ? 'WHERE style_active = 1 ' : ''; + $sql = 'SELECT style_id, style_name + FROM ' . STYLES_TABLE . " + $sql_where + ORDER BY style_name"; + $result = $db->sql_query($sql); + $styledata = (array) $db->sql_fetchrowset($result); + $db->sql_freeresult($result); + } $style_options = ''; - while ($row = $db->sql_fetchrow($result)) + foreach ($styledata as $row) { $selected = ($row['style_id'] == $default) ? ' selected="selected"' : ''; $style_options .= ''; } - $db->sql_freeresult($result); return $style_options; } diff --git a/phpBB/includes/ucp/ucp_prefs.php b/phpBB/includes/ucp/ucp_prefs.php index 7785aeb07b..0d6a178c67 100644 --- a/phpBB/includes/ucp/ucp_prefs.php +++ b/phpBB/includes/ucp/ucp_prefs.php @@ -159,33 +159,23 @@ class ucp_prefs phpbb_timezone_select($template, $user, $data['tz'], true); // check if there are any user-selectable languages - $sql = 'SELECT COUNT(lang_id) as languages_count - FROM ' . LANG_TABLE; + $sql = 'SELECT lang_iso, lang_local_name + FROM ' . LANG_TABLE . ' + ORDER BY lang_english_name'; $result = $db->sql_query($sql); - if ($db->sql_fetchfield('languages_count') > 1) - { - $s_more_languages = true; - } - else - { - $s_more_languages = false; - } + $lang_row = (array) $db->sql_fetchrowset($result); $db->sql_freeresult($result); + $s_more_languages = count($lang_row) > 1; // check if there are any user-selectable styles - $sql = 'SELECT COUNT(style_id) as styles_count - FROM ' . STYLES_TABLE . ' - WHERE style_active = 1'; + $sql = 'SELECT style_id, style_name + FROM ' . STYLES_TABLE . ' + WHERE style_active = 1 + ORDER BY style_name'; $result = $db->sql_query($sql); - if ($db->sql_fetchfield('styles_count') > 1) - { - $s_more_styles = true; - } - else - { - $s_more_styles = false; - } + $styles_row = (array) $db->sql_fetchrowset($result); $db->sql_freeresult($result); + $s_more_styles = count($styles_row) > 1; $template->assign_vars(array( 'ERROR' => (count($error)) ? implode('
', $error) : '', @@ -205,11 +195,11 @@ class ucp_prefs 'DEFAULT_DATEFORMAT' => $config['default_dateformat'], 'A_DEFAULT_DATEFORMAT' => addslashes($config['default_dateformat']), - 'S_MORE_LANGUAGES' => $s_more_languages, + 'S_MORE_LANGUAGES' => $s_more_languages, 'S_MORE_STYLES' => $s_more_styles, - 'S_LANG_OPTIONS' => language_select($data['lang']), - 'S_STYLE_OPTIONS' => ($config['override_user_style']) ? '' : style_select($data['user_style']), + 'S_LANG_OPTIONS' => language_select($data['lang'], $lang_row), + 'S_STYLE_OPTIONS' => ($config['override_user_style']) ? '' : style_select($data['user_style'], false, $styles_row), 'S_CAN_HIDE_ONLINE' => ($auth->acl_get('u_hideonline')) ? true : false, 'S_SELECT_NOTIFY' => ($config['jab_enable'] && $user->data['user_jabber'] && @extension_loaded('xml')) ? true : false) ); From 8cc0e5438a5ded0ed683ed7909c526d7ba0e3997 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 29 Aug 2021 11:10:00 +0700 Subject: [PATCH 4/4] [ticket/16859] Twigify the rest of respective template block PHPBB3-16859 --- phpBB/styles/prosilver/template/ucp_register.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index c85956df4b..adbe173b97 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -59,8 +59,8 @@ {% if S_LANG_OPTIONS %}
-
-
+
+
{% endif %}