diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 4bf654978b..ba95c21e5f 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -263,49 +263,68 @@ function phpbb_version_compare($version1, $version2, $operator = null)
// functions used for building option fields
/**
-* Pick a language, any language ...
-*/
-function language_select($default = '')
+ * 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;
- $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;
}
/**
-* 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 7c64e9a54c..a1fa086b52 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)
);
diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php
index 38a2bd4fc5..bba99974db 100644
--- a/phpBB/includes/ucp/ucp_register.php
+++ b/phpBB/includes/ucp/ucp_register.php
@@ -150,15 +150,11 @@ 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();
- 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'])
@@ -171,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),
@@ -186,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,
@@ -622,6 +618,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_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);
+
$template_vars = array(
'USERNAME' => $data['username'],
'PASSWORD' => $data['new_password'],
@@ -632,7 +636,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'], $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 f0a3adeade..7c61ae24d3 100644
--- a/phpBB/styles/prosilver/template/ucp_register.html
+++ b/phpBB/styles/prosilver/template/ucp_register.html
@@ -57,10 +57,12 @@