diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html
index 26f7a74021..dd4fd3b90a 100644
--- a/phpBB/docs/CHANGELOG.html
+++ b/phpBB/docs/CHANGELOG.html
@@ -148,6 +148,8 @@
[Fix] If pruning users based on last activity, do not include users never logged in before (Bug #18105)
[Sec] Only allow searching by email address in memberlist for users having the a_user permission (reported by evil<3)
[Sec] Limit private message attachments to be viewable only by the recipient(s)/sender (Report #s23535) - reported by AlleyKat
+ [Sec] Check for non-empty config.php within style.php (Report #s24575) - reported by bantu
+ [Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)
1.i. Changes since 3.0.RC8
diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php
index d6f32bda53..c60f453238 100644
--- a/phpBB/includes/acp/acp_attachments.php
+++ b/phpBB/includes/acp/acp_attachments.php
@@ -99,9 +99,13 @@ class acp_attachments
$display_vars = array(
'title' => 'ACP_ATTACHMENT_SETTINGS',
'vars' => array(
- 'img_max_width' => false, 'img_max_height' => false, 'img_link_width' => false, 'img_link_height' => false,
-
'legend1' => 'ACP_ATTACHMENT_SETTINGS',
+
+ 'img_max_width' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'img_max_height' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'img_link_width' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'img_link_height' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+
'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'upload_path' => array('lang' => 'UPLOAD_DIR', 'validate' => 'wpath', 'type' => 'text:25:100', 'explain' => true),
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index c1e94000db..1b7ae383cc 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -102,7 +102,11 @@ class acp_board
'title' => 'ACP_AVATAR_SETTINGS',
'vars' => array(
'legend1' => 'ACP_AVATAR_SETTINGS',
- 'avatar_min_height' => false, 'avatar_min_width' => false, 'avatar_max_height' => false, 'avatar_max_width' => false,
+
+ 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
'allow_avatar_local' => array('lang' => 'ALLOW_LOCAL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_avatar_remote' => array('lang' => 'ALLOW_REMOTE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php
index 62331fbca2..1600aa266d 100644
--- a/phpBB/includes/acp/acp_database.php
+++ b/phpBB/includes/acp/acp_database.php
@@ -341,6 +341,7 @@ class acp_database
break;
case 'postgres':
+ $delim = ";\n";
while (($sql = $fgetd($fp, $delim, $read, $seek, $eof)) !== false)
{
$query = trim($sql);
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index e61df309b3..1baa7abd9a 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -2945,7 +2945,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
{
if (@extension_loaded('zlib') && !headers_sent())
{
- ob_flush();
+ @ob_flush();
}
}
@@ -3116,8 +3116,8 @@ function obtain_guest_count($forum_id = 0)
$reading_sql = '';
}
$time = (time() - (intval($config['load_online_time']) * 60));
-
- // Get number of online guests
+
+ // Get number of online guests
if ($db->sql_layer === 'sqlite')
{
@@ -3215,7 +3215,7 @@ function obtain_users_online($forum_id = 0)
*/
function obtain_users_online_string($online_users, $forum_id = 0)
{
- global $db, $user, $auth;
+ global $config, $db, $user, $auth;
$user_online_link = $online_userlist = '';
@@ -3256,34 +3256,45 @@ function obtain_users_online_string($online_users, $forum_id = 0)
{
$online_userlist = $user->lang['REGISTERED_USERS'] . ' ' . $online_userlist;
}
- else
+ else if ($config['load_online_guests'])
{
$l_online = ($online_users['guests_online'] === 1) ? $user->lang['BROWSING_FORUM_GUEST'] : $user->lang['BROWSING_FORUM_GUESTS'];
$online_userlist = sprintf($l_online, $online_userlist, $online_users['guests_online']);
}
-
+ else
+ {
+ $online_userlist = sprintf($user->lang['BROWSING_FORUM'], $online_userlist);
+ }
// Build online listing
$vars_online = array(
- 'ONLINE' => array('total_online', 'l_t_user_s'),
- 'REG' => array('visible_online', 'l_r_user_s'),
- 'HIDDEN' => array('hidden_online', 'l_h_user_s'),
- 'GUEST' => array('guests_online', 'l_g_user_s')
+ 'ONLINE' => array('total_online', 'l_t_user_s', 0),
+ 'REG' => array('visible_online', 'l_r_user_s', !$config['load_online_guests']),
+ 'HIDDEN' => array('hidden_online', 'l_h_user_s', $config['load_online_guests']),
+ 'GUEST' => array('guests_online', 'l_g_user_s', 0)
);
foreach ($vars_online as $l_prefix => $var_ary)
{
+ if ($var_ary[2])
+ {
+ $l_suffix = '_AND';
+ }
+ else
+ {
+ $l_suffix = '';
+ }
switch ($online_users[$var_ary[0]])
{
case 0:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL'];
+ ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL' . $l_suffix];
break;
case 1:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL'];
+ ${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL' . $l_suffix];
break;
default:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL'];
+ ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL' . $l_suffix];
break;
}
}
@@ -3292,7 +3303,13 @@ function obtain_users_online_string($online_users, $forum_id = 0)
$l_online_users = sprintf($l_t_user_s, $online_users['total_online']);
$l_online_users .= sprintf($l_r_user_s, $online_users['visible_online']);
$l_online_users .= sprintf($l_h_user_s, $online_users['hidden_online']);
- $l_online_users .= sprintf($l_g_user_s, $online_users['guests_online']);
+
+ if ($config['load_online_guests'])
+ {
+ $l_online_users .= sprintf($l_g_user_s, $online_users['guests_online']);
+ }
+
+
return array(
'online_userlist' => $online_userlist,
@@ -3645,6 +3662,9 @@ function exit_handler()
}
}
+ // As a pre-caution... some setups display a blank page if the flush() is not there.
+ @flush();
+
exit;
}
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php
index 55cf45505e..1d1a24389c 100644
--- a/phpBB/includes/functions_user.php
+++ b/phpBB/includes/functions_user.php
@@ -182,7 +182,7 @@ function user_add($user_row, $cp_data = false)
'user_timezone' => $config['board_timezone'],
'user_dateformat' => $config['default_dateformat'],
'user_lang' => $config['default_lang'],
- 'user_style' => $config['default_style'],
+ 'user_style' => (int) $config['default_style'],
'user_allow_pm' => 1,
'user_actkey' => '',
'user_ip' => '',
diff --git a/phpBB/includes/mcp/mcp_forum.php b/phpBB/includes/mcp/mcp_forum.php
index e1820aa7ce..a1b8de2c98 100644
--- a/phpBB/includes/mcp/mcp_forum.php
+++ b/phpBB/includes/mcp/mcp_forum.php
@@ -164,7 +164,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
$sql = "SELECT t.*$read_tracking_select
FROM " . TOPICS_TABLE . " t $read_tracking_join
- WHERE " . $db->sql_in_set('t.topic_id', $topic_list);
+ WHERE " . $db->sql_in_set('t.topic_id', $topic_list, false, true);
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
@@ -389,7 +389,7 @@ function merge_topics($forum_id, $topic_ids, $to_topic_id)
return;
}
- $redirect = request_var('redirect', build_url(array('_f_', 'quickmod')));
+ $redirect = request_var('redirect', build_url(array('quickmod')));
$s_hidden_fields = build_hidden_fields(array(
'i' => 'main',
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php
index 382f76aca3..da54a6c512 100644
--- a/phpBB/includes/session.php
+++ b/phpBB/includes/session.php
@@ -311,9 +311,24 @@ class session
$sql_ary['session_forum_id'] = $this->page['forum'];
}
+ $db->sql_return_on_error(true);
+
$sql = 'UPDATE ' . SESSIONS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE session_id = '" . $db->sql_escape($this->session_id) . "'";
- $db->sql_query($sql);
+ $result = $db->sql_query($sql);
+
+ $db->sql_return_on_error(false);
+
+ // If the database is not yet updated, there will be an error due to the session_forum_id
+ // @todo REMOVE for 3.0.2
+ if ($result === false)
+ {
+ unset($sql_ary['session_forum_id']);
+
+ $sql = 'UPDATE ' . SESSIONS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
+ WHERE session_id = '" . $db->sql_escape($this->session_id) . "'";
+ $db->sql_query($sql);
+ }
}
$this->data['is_registered'] = ($this->data['user_id'] != ANONYMOUS && ($this->data['user_type'] == USER_NORMAL || $this->data['user_type'] == USER_FOUNDER)) ? true : false;
diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php
index 4fe59d5a0a..ae7c9959f1 100644
--- a/phpBB/install/convertors/convert_phpbb20.php
+++ b/phpBB/install/convertors/convert_phpbb20.php
@@ -31,8 +31,8 @@ unset($dbpasswd);
*/
$convertor_data = array(
'forum_name' => 'phpBB 2.0.x',
- 'version' => '1.0.0',
- 'phpbb_version' => '3.0.0',
+ 'version' => '1.0.1',
+ 'phpbb_version' => '3.0.1',
'author' => 'phpBB Group',
'dbms' => $dbms,
'dbhost' => $dbhost,
diff --git a/phpBB/install/convertors/functions_phpbb20.php b/phpBB/install/convertors/functions_phpbb20.php
index c4d421efee..c69574c565 100644
--- a/phpBB/install/convertors/functions_phpbb20.php
+++ b/phpBB/install/convertors/functions_phpbb20.php
@@ -1856,7 +1856,7 @@ function phpbb_check_username_collisions()
$result = $src_db->sql_query($sql);
$colliding_users = array();
- while ($row = $db->sql_fetchrow($result))
+ while ($row = $src_db->sql_fetchrow($result))
{
$row['user_id'] = (int) $row['user_id'];
if (isset($colliding_user_ids[$row['user_id']]))
@@ -1864,7 +1864,7 @@ function phpbb_check_username_collisions()
$colliding_users[$colliding_user_ids[$row['user_id']]][] = $row;
}
}
- $db->sql_freeresult($result);
+ $src_db->sql_freeresult($result);
unset($colliding_user_ids);
$list = '';
diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php
index d87b0fa459..211bbec8d1 100644
--- a/phpBB/install/database_update.php
+++ b/phpBB/install/database_update.php
@@ -8,7 +8,7 @@
*
*/
-$updates_to_version = '3.0.1-RC1';
+$updates_to_version = '3.0.1';
// Return if we "just include it" to find out for which version the database update is responsible for
if (defined('IN_PHPBB') && defined('IN_INSTALL'))
@@ -1082,16 +1082,23 @@ if ($exit)
flush();
// We go through the schema changes from the lowest to the highest version
-// We skip those versions older than the current version
+// We try to also include versions 'in-between'...
$no_updates = true;
-foreach ($database_update_info as $version => $schema_changes)
+$versions = array_keys($database_update_info);
+for ($i = 0; $i < sizeof($versions); $i++)
{
- if (version_compare($version, $current_version, '<'))
+ $version = $versions[$i];
+ $schema_changes = $database_update_info[$version];
+
+ $next_version = (isset($versions[$i + 1])) ? $versions[$i + 1] : $updates_to_version;
+
+ if (!sizeof($schema_changes))
{
continue;
}
- if (!sizeof($schema_changes))
+ // If the installed version to be updated to is < than the current version, and if the current version is >= as the version to be updated to next, we will skip the process
+ if (version_compare($version, $current_version, '<') && version_compare($current_version, $next_version, '>='))
{
continue;
}
@@ -1203,404 +1210,26 @@ flush();
$no_updates = true;
+$versions = array(
+ '3.0.RC2', '3.0.RC3', '3.0.RC4', '3.0.RC5', '3.0.0'
+);
+
// some code magic
-if (version_compare($current_version, '3.0.RC2', '<='))
+for ($i = 0; $i < sizeof($versions); $i++)
{
- $smileys = array();
- $sql = 'SELECT smiley_id, code
- FROM ' . SMILIES_TABLE;
-
- $result = $db->sql_query($sql);
+ $version = $versions[$i];
+ $next_version = (isset($versions[$i + 1])) ? $versions[$i + 1] : $updates_to_version;
- while ($row = $db->sql_fetchrow($result))
+ // If the installed version to be updated to is < than the current version, and if the current version is >= as the version to be updated to next, we will skip the process
+ if (version_compare($version, $current_version, '<') && version_compare($current_version, $next_version, '>='))
{
- $smileys[$row['smiley_id']] = $row['code'];
- }
- $db->sql_freeresult($result);
-
- foreach ($smileys as $id => $code)
- {
- // 2.0 only entitized lt and gt; We need to do something about double quotes.
- if (strchr($code, '"') === false)
- {
- continue;
- }
-
- $new_code = str_replace('&', '&', $code);
- $new_code = str_replace('<', '<', $new_code);
- $new_code = str_replace('>', '>', $new_code);
- $new_code = utf8_htmlspecialchars($new_code);
-
- $sql = 'UPDATE ' . SMILIES_TABLE . '
- SET code = \'' . $db->sql_escape($new_code) . '\'
- WHERE smiley_id = ' . (int) $id;
- $db->sql_query($sql);
- }
-
- $index_list = sql_list_index($map_dbms, ACL_ROLES_DATA_TABLE);
-
- if (in_array('ath_opt_id', $index_list))
- {
- sql_index_drop($map_dbms, 'ath_opt_id', ACL_ROLES_DATA_TABLE);
- sql_create_index($map_dbms, 'ath_op_id', ACL_ROLES_DATA_TABLE, array('auth_option_id'));
+ continue;
}
$no_updates = false;
+ change_database_data($version);
}
-if (version_compare($current_version, '3.0.RC3', '<='))
-{
- if ($map_dbms === 'postgres')
- {
- $sql = "SELECT SETVAL('" . FORUMS_TABLE . "_seq',(select case when max(forum_id)>0 then max(forum_id)+1 else 1 end from " . FORUMS_TABLE . '));';
- _sql($sql, $errored, $error_ary);
- }
-
- // we check for:
- // ath_opt_id
- // ath_op_id
- // ACL_ROLES_DATA_TABLE_ath_opt_id
- // we want ACL_ROLES_DATA_TABLE_ath_op_id
-
- $table_index_fix = array(
- ACL_ROLES_DATA_TABLE => array(
- 'ath_opt_id' => 'ath_op_id',
- 'ath_op_id' => 'ath_op_id',
- ACL_ROLES_DATA_TABLE . '_ath_opt_id' => 'ath_op_id'
- ),
- STYLES_IMAGESET_DATA_TABLE => array(
- 'i_id' => 'i_d',
- 'i_d' => 'i_d',
- STYLES_IMAGESET_DATA_TABLE . '_i_id' => 'i_d'
- )
- );
-
- // we need to create some indicies...
- $needed_creation = array();
-
- foreach ($table_index_fix as $table_name => $index_info)
- {
- $index_list = sql_list_fake($map_dbms, $table_name);
- foreach ($index_info as $bad_index => $good_index)
- {
- if (in_array($bad_index, $index_list))
- {
- // mysql is actually OK, it won't get a hand in this crud
- switch ($map_dbms)
- {
- // last version, mssql had issues with index removal
- case 'mssql':
- $sql = 'DROP INDEX ' . $table_name . '.' . $bad_index;
- _sql($sql, $errored, $error_ary);
- break;
-
- // last version, firebird, oracle, postgresql and sqlite all got bad index names
- // we got kinda lucky, tho: they all support the same syntax
- case 'firebird':
- case 'oracle':
- case 'postgres':
- case 'sqlite':
- $sql = 'DROP INDEX ' . $bad_index;
- _sql($sql, $errored, $error_ary);
- break;
- }
-
- // If the good index already exist we do not need to create it again...
- if (($map_dbms == 'mysql_40' || $map_dbms == 'mysql_41') && $bad_index == $good_index)
- {
- }
- else
- {
- $needed_creation[$table_name][$good_index] = 1;
- }
- }
- }
- }
-
- $new_index_defs = array('ath_op_id' => array('auth_option_id'), 'i_d' => array('imageset_id'));
-
- foreach ($needed_creation as $bad_table => $index_repair_list)
- {
- foreach ($index_repair_list as $new_index => $garbage)
- {
- sql_create_index($map_dbms, $new_index, $bad_table, $new_index_defs[$new_index]);
- $no_updates = false;
- }
- }
-
- // Make sure empty smiley codes do not exist
- $sql = 'DELETE FROM ' . SMILIES_TABLE . "
- WHERE code = ''";
- _sql($sql, $errored, $error_ary);
-
- set_config('allow_birthdays', '1');
- set_config('cron_lock', '0', true);
-
- $no_updates = false;
-}
-
-if (version_compare($current_version, '3.0.RC4', '<='))
-{
- $update_auto_increment = array(
- STYLES_TABLE => 'style_id',
- STYLES_TEMPLATE_TABLE => 'template_id',
- STYLES_THEME_TABLE => 'theme_id',
- STYLES_IMAGESET_TABLE => 'imageset_id'
- );
-
- $sql = 'SELECT *
- FROM ' . STYLES_TABLE . '
- WHERE style_id = 0';
- $result = _sql($sql, $errored, $error_ary);
- $bad_style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($bad_style_row)
- {
- $sql = 'SELECT MAX(style_id) as max_id
- FROM ' . STYLES_TABLE;
- $result = _sql($sql, $errored, $error_ary);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $proper_id = $row['max_id'] + 1;
-
- _sql('UPDATE ' . STYLES_TABLE . " SET style_id = $proper_id WHERE style_id = 0", $errored, $error_ary);
- _sql('UPDATE ' . FORUMS_TABLE . " SET forum_style = $proper_id WHERE forum_style = 0", $errored, $error_ary);
- _sql('UPDATE ' . USERS_TABLE . " SET user_style = $proper_id WHERE user_style = 0", $errored, $error_ary);
-
- $sql = 'SELECT config_value
- FROM ' . CONFIG_TABLE . "
- WHERE config_name = 'default_style'";
- $result = _sql($sql, $errored, $error_ary);
- $style_config = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($style_config['config_value'] === '0')
- {
- set_config('default_style', (string) $proper_id);
- }
- }
-
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_TABLE . '
- WHERE template_id = 0';
- $result = _sql($sql, $errored, $error_ary);
- $bad_style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($bad_style_row)
- {
- $sql = 'SELECT MAX(template_id) as max_id
- FROM ' . STYLES_TEMPLATE_TABLE;
- $result = _sql($sql, $errored, $error_ary);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $proper_id = $row['max_id'] + 1;
-
- _sql('UPDATE ' . STYLES_TABLE . " SET template_id = $proper_id WHERE template_id = 0", $errored, $error_ary);
- }
-
- $sql = 'SELECT *
- FROM ' . STYLES_THEME_TABLE . '
- WHERE theme_id = 0';
- $result = _sql($sql, $errored, $error_ary);
- $bad_style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($bad_style_row)
- {
- $sql = 'SELECT MAX(theme_id) as max_id
- FROM ' . STYLES_THEME_TABLE;
- $result = _sql($sql, $errored, $error_ary);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $proper_id = $row['max_id'] + 1;
-
- _sql('UPDATE ' . STYLES_TABLE . " SET theme_id = $proper_id WHERE theme_id = 0", $errored, $error_ary);
- }
-
- $sql = 'SELECT *
- FROM ' . STYLES_IMAGESET_TABLE . '
- WHERE imageset_id = 0';
- $result = _sql($sql, $errored, $error_ary);
- $bad_style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($bad_style_row)
- {
- $sql = 'SELECT MAX(imageset_id) as max_id
- FROM ' . STYLES_IMAGESET_TABLE;
- $result = _sql($sql, $errored, $error_ary);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $proper_id = $row['max_id'] + 1;
-
- _sql('UPDATE ' . STYLES_TABLE . " SET imageset_id = $proper_id WHERE imageset_id = 0", $errored, $error_ary);
- _sql('UPDATE ' . STYLES_IMAGESET_DATA_TABLE . " SET imageset_id = $proper_id WHERE imageset_id = 0", $errored, $error_ary);
- }
-
- if ($map_dbms == 'mysql_40' || $map_dbms == 'mysql_41')
- {
- foreach ($update_auto_increment as $auto_table_name => $auto_column_name)
- {
- $sql = "SELECT MAX({$auto_column_name}) as max_id
- FROM {$auto_table_name}";
- $result = _sql($sql, $errored, $error_ary);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $max_id = ((int) $row['max_id']) + 1;
- _sql("ALTER TABLE {$auto_table_name} AUTO_INCREMENT = {$max_id}", $errored, $error_ary);
- }
-
- $no_updates = false;
- }
- else if ($map_dbms == 'postgres')
- {
- foreach ($update_auto_increment as $auto_table_name => $auto_column_name)
- {
- $sql = "SELECT SETVAL('" . $auto_table_name . "_seq',(select case when max({$auto_column_name})>0 then max({$auto_column_name})+1 else 1 end from " . $auto_table_name . '));';
- _sql($sql, $errored, $error_ary);
- }
-
- $sql = 'DROP SEQUENCE ' . STYLES_TEMPLATE_DATA_TABLE . '_seq';
- _sql($sql, $errored, $error_ary);
- }
- else if ($map_dbms == 'firebird')
- {
- $sql = 'DROP TRIGGER t_' . STYLES_TEMPLATE_DATA_TABLE;
- _sql($sql, $errored, $error_ary);
-
- $sql = 'DROP GENERATOR ' . STYLES_TEMPLATE_DATA_TABLE . '_gen';
- _sql($sql, $errored, $error_ary);
- }
- else if ($map_dbms == 'oracle')
- {
- $sql = 'DROP TRIGGER t_' . STYLES_TEMPLATE_DATA_TABLE;
- _sql($sql, $errored, $error_ary);
-
- $sql = 'DROP SEQUENCE ' . STYLES_TEMPLATE_DATA_TABLE . '_seq';
- _sql($sql, $errored, $error_ary);
- }
- else if ($map_dbms == 'mssql')
- {
- // we use transactions because we need to have a working DB at the end of all of this
- $db->sql_transaction('begin');
-
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_DATA_TABLE;
- $result = _sql($sql, $errored, $error_ary);
- $old_style_rows = array();
- while ($row = $db->sql_fetchrow($result))
- {
- $old_style_rows[] = $row;
- }
- $db->sql_freeresult($result);
-
- // death to the table, it is evil!
- $sql = 'DROP TABLE ' . STYLES_TEMPLATE_DATA_TABLE;
- _sql($sql, $errored, $error_ary);
-
- // the table of awesomeness, praise be to it (or something)
- $sql = 'CREATE TABLE [' . STYLES_TEMPLATE_DATA_TABLE . "] (
- [template_id] [int] DEFAULT (0) NOT NULL ,
- [template_filename] [varchar] (100) DEFAULT ('') NOT NULL ,
- [template_included] [varchar] (8000) DEFAULT ('') NOT NULL ,
- [template_mtime] [int] DEFAULT (0) NOT NULL ,
- [template_data] [text] DEFAULT ('') NOT NULL
- ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]";
- _sql($sql, $errored, $error_ary);
-
- // index? index
- $sql = 'CREATE INDEX [tid] ON [' . STYLES_TEMPLATE_DATA_TABLE . ']([template_id]) ON [PRIMARY]';
- _sql($sql, $errored, $error_ary);
-
- // yet another index
- $sql = 'CREATE INDEX [tfn] ON [' . STYLES_TEMPLATE_DATA_TABLE . ']([template_filename]) ON [PRIMARY]';
- _sql($sql, $errored, $error_ary);
-
- foreach ($old_style_rows as $return_row)
- {
- _sql('INSERT INTO ' . STYLES_TEMPLATE_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $return_row), $errored, $error_ary);
- }
-
- $db->sql_transaction('commit');
- }
-
- // Setting this here again because new installations may not have it...
- set_config('cron_lock', '0', true);
- set_config('ldap_port', '');
- set_config('ldap_user_filter', '');
-
- $no_updates = false;
-}
-
-if (version_compare($current_version, '3.0.RC5', '<='))
-{
- // In case the user is having the bot mediapartner google "as is", adjust it.
- $sql = 'UPDATE ' . BOTS_TABLE . "
- SET bot_agent = '" . $db->sql_escape('Mediapartners-Google') . "'
- WHERE bot_agent = '" . $db->sql_escape('Mediapartners-Google/') . "'";
- _sql($sql, $errored, $error_ary);
-
- set_config('form_token_lifetime', '7200');
- set_config('form_token_mintime', '0');
- set_config('min_time_reg', '5');
- set_config('min_time_terms', '2');
- set_config('form_token_sid_guests', '1');
-
- $db->sql_transaction('begin');
-
- $sql = 'SELECT forum_id, forum_password
- FROM ' . FORUMS_TABLE;
- $result = _sql($sql, $errored, $error_ary);
-
- while ($row = $db->sql_fetchrow($result))
- {
- if (!empty($row['forum_password']))
- {
- _sql('UPDATE ' . FORUMS_TABLE . " SET forum_password = '" . md5($row['forum_password']) . "' WHERE forum_id = {$row['forum_id']}", $errored, $error_ary);
- }
- }
- $db->sql_freeresult($result);
-
- $db->sql_transaction('commit');
-
- $no_updates = false;
-}
-
-
-if (version_compare($current_version, '3.0.0', '<='))
-{
- $sql = 'UPDATE ' . TOPICS_TABLE . "
- SET topic_last_view_time = topic_last_post_time
- WHERE topic_last_view_time = 0";
- _sql($sql, $errored, $error_ary);
-
- // Update smiley sizes
- $smileys = array('icon_e_surprised.gif', 'icon_eek.gif', 'icon_cool.gif', 'icon_lol.gif', 'icon_mad.gif', 'icon_razz.gif', 'icon_redface.gif', 'icon_cry.gif', 'icon_evil.gif', 'icon_twisted.gif', 'icon_rolleyes.gif', 'icon_exclaim.gif', 'icon_question.gif', 'icon_idea.gif', 'icon_arrow.gif', 'icon_neutral.gif', 'icon_mrgreen.gif', 'icon_e_ugeek.gif');
- foreach ($smileys as $smiley)
- {
- if (file_exists($phpbb_root_path . 'images/smilies/' . $smiley))
- {
- list($width, $height) = getimagesize($phpbb_root_path . 'images/smilies/' . $smiley);
-
- $sql = 'UPDATE ' . SMILIES_TABLE . '
- SET smiley_width = ' . $width . ', smiley_height = ' . $height . "
- WHERE smiley_url = '" . $db->sql_escape($smiley) . "'";
-
- _sql($sql, $errored, $error_ary);
- }
- }
-
- // TODO: remove all form token min times
-
- $no_updates = false;
-}
_write_result($no_updates, $errored, $error_ary);
$error_ary = array();
@@ -1625,7 +1254,8 @@ _sql($sql, $errored, $error_ary);
// Reset permissions
$sql = 'UPDATE ' . USERS_TABLE . "
- SET user_permissions = ''";
+ SET user_permissions = '',
+ user_perm_from = 0";
_sql($sql, $errored, $error_ary);
/* Optimize/vacuum analyze the tables where appropriate
@@ -1659,6 +1289,8 @@ _write_result($no_updates, $errored, $error_ary);
if (!$inline_update)
{
+ // Purge the cache...
+ $cache->purge();
?>
@@ -1710,6 +1342,406 @@ if (function_exists('exit_handler'))
exit_handler();
}
+/**
+* Function where all data changes are executed
+*/
+function change_database_data($version)
+{
+ global $db, $map_dbms, $errored, $error_ary, $config, $phpbb_root_path;
+
+ switch ($version)
+ {
+ case '3.0.RC2':
+
+ $smileys = array();
+
+ $sql = 'SELECT smiley_id, code
+ FROM ' . SMILIES_TABLE;
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $smileys[$row['smiley_id']] = $row['code'];
+ }
+ $db->sql_freeresult($result);
+
+ foreach ($smileys as $id => $code)
+ {
+ // 2.0 only entitized lt and gt; We need to do something about double quotes.
+ if (strchr($code, '"') === false)
+ {
+ continue;
+ }
+
+ $new_code = str_replace('&', '&', $code);
+ $new_code = str_replace('<', '<', $new_code);
+ $new_code = str_replace('>', '>', $new_code);
+ $new_code = utf8_htmlspecialchars($new_code);
+
+ $sql = 'UPDATE ' . SMILIES_TABLE . '
+ SET code = \'' . $db->sql_escape($new_code) . '\'
+ WHERE smiley_id = ' . (int) $id;
+ $db->sql_query($sql);
+ }
+
+ $index_list = sql_list_index($map_dbms, ACL_ROLES_DATA_TABLE);
+
+ if (in_array('ath_opt_id', $index_list))
+ {
+ sql_index_drop($map_dbms, 'ath_opt_id', ACL_ROLES_DATA_TABLE);
+ sql_create_index($map_dbms, 'ath_op_id', ACL_ROLES_DATA_TABLE, array('auth_option_id'));
+ }
+
+ break;
+
+ case '3.0.RC3':
+
+ if ($map_dbms === 'postgres')
+ {
+ $sql = "SELECT SETVAL('" . FORUMS_TABLE . "_seq',(select case when max(forum_id)>0 then max(forum_id)+1 else 1 end from " . FORUMS_TABLE . '));';
+ _sql($sql, $errored, $error_ary);
+ }
+
+ // we check for:
+ // ath_opt_id
+ // ath_op_id
+ // ACL_ROLES_DATA_TABLE_ath_opt_id
+ // we want ACL_ROLES_DATA_TABLE_ath_op_id
+
+ $table_index_fix = array(
+ ACL_ROLES_DATA_TABLE => array(
+ 'ath_opt_id' => 'ath_op_id',
+ 'ath_op_id' => 'ath_op_id',
+ ACL_ROLES_DATA_TABLE . '_ath_opt_id' => 'ath_op_id'
+ ),
+ STYLES_IMAGESET_DATA_TABLE => array(
+ 'i_id' => 'i_d',
+ 'i_d' => 'i_d',
+ STYLES_IMAGESET_DATA_TABLE . '_i_id' => 'i_d'
+ )
+ );
+
+ // we need to create some indicies...
+ $needed_creation = array();
+
+ foreach ($table_index_fix as $table_name => $index_info)
+ {
+ $index_list = sql_list_fake($map_dbms, $table_name);
+ foreach ($index_info as $bad_index => $good_index)
+ {
+ if (in_array($bad_index, $index_list))
+ {
+ // mysql is actually OK, it won't get a hand in this crud
+ switch ($map_dbms)
+ {
+ // last version, mssql had issues with index removal
+ case 'mssql':
+ $sql = 'DROP INDEX ' . $table_name . '.' . $bad_index;
+ _sql($sql, $errored, $error_ary);
+ break;
+
+ // last version, firebird, oracle, postgresql and sqlite all got bad index names
+ // we got kinda lucky, tho: they all support the same syntax
+ case 'firebird':
+ case 'oracle':
+ case 'postgres':
+ case 'sqlite':
+ $sql = 'DROP INDEX ' . $bad_index;
+ _sql($sql, $errored, $error_ary);
+ break;
+ }
+
+ // If the good index already exist we do not need to create it again...
+ if (($map_dbms == 'mysql_40' || $map_dbms == 'mysql_41') && $bad_index == $good_index)
+ {
+ }
+ else
+ {
+ $needed_creation[$table_name][$good_index] = 1;
+ }
+ }
+ }
+ }
+
+ $new_index_defs = array('ath_op_id' => array('auth_option_id'), 'i_d' => array('imageset_id'));
+
+ foreach ($needed_creation as $bad_table => $index_repair_list)
+ {
+ foreach ($index_repair_list as $new_index => $garbage)
+ {
+ sql_create_index($map_dbms, $new_index, $bad_table, $new_index_defs[$new_index]);
+ }
+ }
+
+ // Make sure empty smiley codes do not exist
+ $sql = 'DELETE FROM ' . SMILIES_TABLE . "
+ WHERE code = ''";
+ _sql($sql, $errored, $error_ary);
+
+ set_config('allow_birthdays', '1');
+ set_config('cron_lock', '0', true);
+
+ break;
+
+ case '3.0.RC4':
+
+ $update_auto_increment = array(
+ STYLES_TABLE => 'style_id',
+ STYLES_TEMPLATE_TABLE => 'template_id',
+ STYLES_THEME_TABLE => 'theme_id',
+ STYLES_IMAGESET_TABLE => 'imageset_id'
+ );
+
+ $sql = 'SELECT *
+ FROM ' . STYLES_TABLE . '
+ WHERE style_id = 0';
+ $result = _sql($sql, $errored, $error_ary);
+ $bad_style_row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if ($bad_style_row)
+ {
+ $sql = 'SELECT MAX(style_id) as max_id
+ FROM ' . STYLES_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $proper_id = $row['max_id'] + 1;
+
+ _sql('UPDATE ' . STYLES_TABLE . " SET style_id = $proper_id WHERE style_id = 0", $errored, $error_ary);
+ _sql('UPDATE ' . FORUMS_TABLE . " SET forum_style = $proper_id WHERE forum_style = 0", $errored, $error_ary);
+ _sql('UPDATE ' . USERS_TABLE . " SET user_style = $proper_id WHERE user_style = 0", $errored, $error_ary);
+
+ $sql = 'SELECT config_value
+ FROM ' . CONFIG_TABLE . "
+ WHERE config_name = 'default_style'";
+ $result = _sql($sql, $errored, $error_ary);
+ $style_config = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if ($style_config['config_value'] === '0')
+ {
+ set_config('default_style', (string) $proper_id);
+ }
+ }
+
+ $sql = 'SELECT *
+ FROM ' . STYLES_TEMPLATE_TABLE . '
+ WHERE template_id = 0';
+ $result = _sql($sql, $errored, $error_ary);
+ $bad_style_row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if ($bad_style_row)
+ {
+ $sql = 'SELECT MAX(template_id) as max_id
+ FROM ' . STYLES_TEMPLATE_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $proper_id = $row['max_id'] + 1;
+
+ _sql('UPDATE ' . STYLES_TABLE . " SET template_id = $proper_id WHERE template_id = 0", $errored, $error_ary);
+ }
+
+ $sql = 'SELECT *
+ FROM ' . STYLES_THEME_TABLE . '
+ WHERE theme_id = 0';
+ $result = _sql($sql, $errored, $error_ary);
+ $bad_style_row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if ($bad_style_row)
+ {
+ $sql = 'SELECT MAX(theme_id) as max_id
+ FROM ' . STYLES_THEME_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $proper_id = $row['max_id'] + 1;
+
+ _sql('UPDATE ' . STYLES_TABLE . " SET theme_id = $proper_id WHERE theme_id = 0", $errored, $error_ary);
+ }
+
+ $sql = 'SELECT *
+ FROM ' . STYLES_IMAGESET_TABLE . '
+ WHERE imageset_id = 0';
+ $result = _sql($sql, $errored, $error_ary);
+ $bad_style_row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if ($bad_style_row)
+ {
+ $sql = 'SELECT MAX(imageset_id) as max_id
+ FROM ' . STYLES_IMAGESET_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $proper_id = $row['max_id'] + 1;
+
+ _sql('UPDATE ' . STYLES_TABLE . " SET imageset_id = $proper_id WHERE imageset_id = 0", $errored, $error_ary);
+ _sql('UPDATE ' . STYLES_IMAGESET_DATA_TABLE . " SET imageset_id = $proper_id WHERE imageset_id = 0", $errored, $error_ary);
+ }
+
+ if ($map_dbms == 'mysql_40' || $map_dbms == 'mysql_41')
+ {
+ foreach ($update_auto_increment as $auto_table_name => $auto_column_name)
+ {
+ $sql = "SELECT MAX({$auto_column_name}) as max_id
+ FROM {$auto_table_name}";
+ $result = _sql($sql, $errored, $error_ary);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $max_id = ((int) $row['max_id']) + 1;
+ _sql("ALTER TABLE {$auto_table_name} AUTO_INCREMENT = {$max_id}", $errored, $error_ary);
+ }
+ }
+ else if ($map_dbms == 'postgres')
+ {
+ foreach ($update_auto_increment as $auto_table_name => $auto_column_name)
+ {
+ $sql = "SELECT SETVAL('" . $auto_table_name . "_seq',(select case when max({$auto_column_name})>0 then max({$auto_column_name})+1 else 1 end from " . $auto_table_name . '));';
+ _sql($sql, $errored, $error_ary);
+ }
+
+ $sql = 'DROP SEQUENCE ' . STYLES_TEMPLATE_DATA_TABLE . '_seq';
+ _sql($sql, $errored, $error_ary);
+ }
+ else if ($map_dbms == 'firebird')
+ {
+ $sql = 'DROP TRIGGER t_' . STYLES_TEMPLATE_DATA_TABLE;
+ _sql($sql, $errored, $error_ary);
+
+ $sql = 'DROP GENERATOR ' . STYLES_TEMPLATE_DATA_TABLE . '_gen';
+ _sql($sql, $errored, $error_ary);
+ }
+ else if ($map_dbms == 'oracle')
+ {
+ $sql = 'DROP TRIGGER t_' . STYLES_TEMPLATE_DATA_TABLE;
+ _sql($sql, $errored, $error_ary);
+
+ $sql = 'DROP SEQUENCE ' . STYLES_TEMPLATE_DATA_TABLE . '_seq';
+ _sql($sql, $errored, $error_ary);
+ }
+ else if ($map_dbms == 'mssql')
+ {
+ // we use transactions because we need to have a working DB at the end of all of this
+ $db->sql_transaction('begin');
+
+ $sql = 'SELECT *
+ FROM ' . STYLES_TEMPLATE_DATA_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+ $old_style_rows = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $old_style_rows[] = $row;
+ }
+ $db->sql_freeresult($result);
+
+ // death to the table, it is evil!
+ $sql = 'DROP TABLE ' . STYLES_TEMPLATE_DATA_TABLE;
+ _sql($sql, $errored, $error_ary);
+
+ // the table of awesomeness, praise be to it (or something)
+ $sql = 'CREATE TABLE [' . STYLES_TEMPLATE_DATA_TABLE . "] (
+ [template_id] [int] DEFAULT (0) NOT NULL ,
+ [template_filename] [varchar] (100) DEFAULT ('') NOT NULL ,
+ [template_included] [varchar] (8000) DEFAULT ('') NOT NULL ,
+ [template_mtime] [int] DEFAULT (0) NOT NULL ,
+ [template_data] [text] DEFAULT ('') NOT NULL
+ ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]";
+ _sql($sql, $errored, $error_ary);
+
+ // index? index
+ $sql = 'CREATE INDEX [tid] ON [' . STYLES_TEMPLATE_DATA_TABLE . ']([template_id]) ON [PRIMARY]';
+ _sql($sql, $errored, $error_ary);
+
+ // yet another index
+ $sql = 'CREATE INDEX [tfn] ON [' . STYLES_TEMPLATE_DATA_TABLE . ']([template_filename]) ON [PRIMARY]';
+ _sql($sql, $errored, $error_ary);
+
+ foreach ($old_style_rows as $return_row)
+ {
+ _sql('INSERT INTO ' . STYLES_TEMPLATE_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $return_row), $errored, $error_ary);
+ }
+
+ $db->sql_transaction('commit');
+ }
+
+ // Setting this here again because new installations may not have it...
+ set_config('cron_lock', '0', true);
+ set_config('ldap_port', '');
+ set_config('ldap_user_filter', '');
+
+ break;
+
+ case '3.0.RC5':
+
+ // In case the user is having the bot mediapartner google "as is", adjust it.
+ $sql = 'UPDATE ' . BOTS_TABLE . "
+ SET bot_agent = '" . $db->sql_escape('Mediapartners-Google') . "'
+ WHERE bot_agent = '" . $db->sql_escape('Mediapartners-Google/') . "'";
+ _sql($sql, $errored, $error_ary);
+
+ set_config('form_token_lifetime', '7200');
+ set_config('form_token_mintime', '0');
+ set_config('min_time_reg', '5');
+ set_config('min_time_terms', '2');
+ set_config('form_token_sid_guests', '1');
+
+ $db->sql_transaction('begin');
+
+ $sql = 'SELECT forum_id, forum_password
+ FROM ' . FORUMS_TABLE;
+ $result = _sql($sql, $errored, $error_ary);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (!empty($row['forum_password']))
+ {
+ _sql('UPDATE ' . FORUMS_TABLE . " SET forum_password = '" . md5($row['forum_password']) . "' WHERE forum_id = {$row['forum_id']}", $errored, $error_ary);
+ }
+ }
+ $db->sql_freeresult($result);
+
+ $db->sql_transaction('commit');
+
+ break;
+
+ case '3.0.0':
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . "
+ SET topic_last_view_time = topic_last_post_time
+ WHERE topic_last_view_time = 0";
+ _sql($sql, $errored, $error_ary);
+
+ // Update smiley sizes
+ $smileys = array('icon_e_surprised.gif', 'icon_eek.gif', 'icon_cool.gif', 'icon_lol.gif', 'icon_mad.gif', 'icon_razz.gif', 'icon_redface.gif', 'icon_cry.gif', 'icon_evil.gif', 'icon_twisted.gif', 'icon_rolleyes.gif', 'icon_exclaim.gif', 'icon_question.gif', 'icon_idea.gif', 'icon_arrow.gif', 'icon_neutral.gif', 'icon_mrgreen.gif', 'icon_e_ugeek.gif');
+
+ foreach ($smileys as $smiley)
+ {
+ if (file_exists($phpbb_root_path . 'images/smilies/' . $smiley))
+ {
+ list($width, $height) = getimagesize($phpbb_root_path . 'images/smilies/' . $smiley);
+
+ $sql = 'UPDATE ' . SMILIES_TABLE . '
+ SET smiley_width = ' . $width . ', smiley_height = ' . $height . "
+ WHERE smiley_url = '" . $db->sql_escape($smiley) . "'";
+
+ _sql($sql, $errored, $error_ary);
+ }
+ }
+
+ // TODO: remove all form token min times
+
+ break;
+ }
+}
/**
* Function for triggering an sql statement
diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index f0037ea4cd..43ab04d77e 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -213,7 +213,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page',
INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files');
-INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.1-RC1');
+INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400');
diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php
index f8b91dd1aa..f380b1f570 100644
--- a/phpBB/language/en/acp/common.php
+++ b/phpBB/language/en/acp/common.php
@@ -264,10 +264,10 @@ $lang = array_merge($lang, array(
'SELECT_ANONYMOUS' => 'Select anonymous user',
'SELECT_OPTION' => 'Select option',
- 'SETTING_TOO_LOW' => 'The entered value for the setting “%s” is too low. The minimal allowed value is %d.',
- 'SETTING_TOO_BIG' => 'The entered value for the setting “%s” is too big. The maximal allowed value is %d.',
- 'SETTING_TOO_LONG' => 'The entered value for the setting “%s” is too long. The maximal allowed length is %d.',
- 'SETTING_TOO_SHORT' => 'The entered value for the setting “%s” is not long enough. The minimal allowed length is %d.',
+ 'SETTING_TOO_LOW' => 'The entered value for the setting “%1$s” is too low. The minimal allowed value is %2$d.',
+ 'SETTING_TOO_BIG' => 'The entered value for the setting “%1$s” is too big. The maximal allowed value is %2$d.',
+ 'SETTING_TOO_LONG' => 'The entered value for the setting “%1$s” is too long. The maximal allowed length is %2$d.',
+ 'SETTING_TOO_SHORT' => 'The entered value for the setting “%1$s” is not long enough. The minimal allowed length is %2$d.',
'UCP' => 'User Control Panel',
'USERNAMES_EXPLAIN' => 'Place each username on a separate line.',
diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php
index 0217238a0d..dc28032483 100644
--- a/phpBB/language/en/acp/users.php
+++ b/phpBB/language/en/acp/users.php
@@ -47,7 +47,7 @@ $lang = array_merge($lang, array(
'CANNOT_DEACTIVATE_BOT' => 'You are not allowed to deactivate bot accounts. Please deactivate the bot within the bots page instead.',
'CANNOT_DEACTIVATE_FOUNDER' => 'You are not allowed to deactivate founder accounts.',
'CANNOT_DEACTIVATE_YOURSELF' => 'You are not allowed to deactivate your own account.',
- 'CANNOT_FORCE_REACT_BOT' => 'You are not allowed to force reactivation on bot accounts. Please deactivate the bot within the bots page instead.',
+ 'CANNOT_FORCE_REACT_BOT' => 'You are not allowed to force reactivation on bot accounts. Please reactivate the bot within the bots page instead.',
'CANNOT_FORCE_REACT_FOUNDER' => 'You are not allowed to force reactivation on founder accounts.',
'CANNOT_FORCE_REACT_YOURSELF' => 'You are not allowed to force reactivation of your own account.',
'CANNOT_REMOVE_ANONYMOUS' => 'You are not able to remove the guest user account.',
diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php
index 8e739206c5..db5f49339a 100644
--- a/phpBB/language/en/common.php
+++ b/phpBB/language/en/common.php
@@ -106,6 +106,7 @@ $lang = array_merge($lang, array(
'BOARD_DISABLE' => 'Sorry but this board is currently unavailable.',
'BOARD_DISABLED' => 'This board is currently disabled.',
'BOARD_UNAVAILABLE' => 'Sorry but the board is temporarily unavailable, please try again in a few minutes.',
+ 'BROWSING_FORUM' => 'Users browsing this forum: %1$s',
'BROWSING_FORUM_GUEST' => 'Users browsing this forum: %1$s and %2$d guest',
'BROWSING_FORUM_GUESTS' => 'Users browsing this forum: %1$s and %2$d guests',
'BYTES' => 'Bytes',
@@ -245,16 +246,19 @@ $lang = array_merge($lang, array(
'G_REGISTERED_COPPA' => 'Registered COPPA users',
'G_GLOBAL_MODERATORS' => 'Global moderators',
- 'HIDDEN_USERS_ONLINE' => '%d hidden users online',
- 'HIDDEN_USERS_TOTAL' => '%d hidden and ',
- 'HIDDEN_USERS_ZERO_ONLINE' => '0 hidden users online',
- 'HIDDEN_USERS_ZERO_TOTAL' => '0 hidden and ',
- 'HIDDEN_USER_ONLINE' => '%d hidden user online',
- 'HIDDEN_USER_TOTAL' => '%d hidden and ',
- 'HIDE_GUESTS' => 'Hide guests',
- 'HIDE_ME' => 'Hide my online status this session',
- 'HOURS' => 'Hours',
- 'HOME' => 'Home',
+ 'HIDDEN_USERS_ONLINE' => '%d hidden users online',
+ 'HIDDEN_USERS_TOTAL' => '%d hidden',
+ 'HIDDEN_USERS_TOTAL_AND' => '%d hidden and ',
+ 'HIDDEN_USERS_ZERO_ONLINE' => '0 hidden users online',
+ 'HIDDEN_USERS_ZERO_TOTAL' => '0 hidden',
+ 'HIDDEN_USERS_ZERO_TOTAL_AND' => '0 hidden and ',
+ 'HIDDEN_USER_ONLINE' => '%d hidden user online',
+ 'HIDDEN_USER_TOTAL' => '%d hidden',
+ 'HIDDEN_USER_TOTAL_AND' => '%d hidden and ',
+ 'HIDE_GUESTS' => 'Hide guests',
+ 'HIDE_ME' => 'Hide my online status this session',
+ 'HOURS' => 'Hours',
+ 'HOME' => 'Home',
'ICQ' => 'ICQ',
'ICQ_STATUS' => 'ICQ status',
@@ -446,10 +450,13 @@ $lang = array_merge($lang, array(
'REGISTERED_USERS' => 'Registered users:',
'REG_USERS_ONLINE' => 'There are %d registered users and ',
'REG_USERS_TOTAL' => '%d registered, ',
+ 'REG_USERS_TOTAL_AND' => '%d registered and ',
'REG_USERS_ZERO_ONLINE' => 'There are 0 registered users and ',
'REG_USERS_ZERO_TOTAL' => '0 registered, ',
+ 'REG_USERS_ZERO_TOTAL_AND' => '0 registered and ',
'REG_USER_ONLINE' => 'There is %d registered user and ',
'REG_USER_TOTAL' => '%d registered, ',
+ 'REG_USER_TOTAL_AND' => '%d registered and ',
'REMOVE' => 'Remove',
'REMOVE_INSTALL' => 'Please delete, move or rename the install directory before you use your board. If this directory is still present, only the Administration Control Panel (ACP) will be accessible.',
'REPLIES' => 'Replies',
diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php
index 1481a88dc1..31778f7cf4 100755
--- a/phpBB/language/en/install.php
+++ b/phpBB/language/en/install.php
@@ -85,7 +85,7 @@ $lang = array_merge($lang, array(
'CONVERT_NEW_CONVERSION' => 'New conversion',
'CONVERT_NOT_EXIST' => 'The specified convertor does not exist.',
'CONVERT_OPTIONS' => 'Options',
- 'CONVERT_SETTINGS_VERIFIED' => 'The information you entered has been verified. To start the conversion process, push the button below to begin.',
+ 'CONVERT_SETTINGS_VERIFIED' => 'The information you entered has been verified. To start the conversion process, please push the button below.',
'CONV_ERR_FATAL' => 'Fatal conversion error',
'CONV_ERROR_ATTACH_FTP_DIR' => 'FTP upload for attachments is enabled at the old board. Please disable the FTP upload option and make sure a valid upload directory is specified, then copy all attachment files to this new web accessible directory. Once you have done this, restart the convertor.',
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index dfeb1f20dd..4f9920c931 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -88,7 +88,7 @@ $lang = array_merge($lang, array(
'ATTACHMENTS_DELETED' => 'Attachments successfully deleted.',
'ATTACHMENT_DELETED' => 'Attachment successfully deleted.',
'AVATAR_CATEGORY' => 'Category',
- 'AVATAR_EXPLAIN' => 'Maximum dimensions; width: %1$d pixels, height: %2$d pixels, file size: %3$.2lf KiB.',
+ 'AVATAR_EXPLAIN' => 'Maximum dimensions; width: %1$d pixels, height: %2$d pixels, file size: %3$.2f KiB.',
'AVATAR_FEATURES_DISABLED' => 'The avatar functionality is currently disabled.',
'AVATAR_GALLERY' => 'Local gallery',
'AVATAR_GENERAL_UPLOAD_ERROR' => 'Could not upload avatar to %s.',
diff --git a/phpBB/style.php b/phpBB/style.php
index 469e2b7727..9d38128356 100644
--- a/phpBB/style.php
+++ b/phpBB/style.php
@@ -20,6 +20,11 @@ error_reporting(E_ALL ^ E_NOTICE);
require($phpbb_root_path . 'config.' . $phpEx);
+if (!defined('PHPBB_INSTALLED') || empty($dbms) || !isset($dbhost) || !isset($dbpasswd) || empty($dbuser))
+{
+ exit;
+}
+
if (version_compare(PHP_VERSION, '6.0.0-dev', '<'))
{
set_magic_quotes_runtime(0);
diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html
index 459efc72b3..f255862430 100644
--- a/phpBB/styles/prosilver/template/posting_editor.html
+++ b/phpBB/styles/prosilver/template/posting_editor.html
@@ -4,7 +4,7 @@