mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
- allow converting from one database to another, no need for tables to be in one database anylonger (this also allows switching from one DBMS that was used with phpBB2 to another DBMS supported by phpBB3 including new systems available in Olympus only)
- abstracted some installation code that is now relevant to converting as well into functions_install.php (mostly DBMS selection related) - fixed a weird smiley path problem, no idea why nobody else noticed this, maybe my fix was incorrect? - forgot to commit a file last time git-svn-id: file:///svn/phpbb/trunk@6995 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
ec9a091669
commit
7259457701
9 changed files with 1071 additions and 606 deletions
|
@ -558,7 +558,7 @@ function _import_check($config_var, $source, $use_target)
|
||||||
'relative_path' => (empty($convert->convertor['source_path_absolute'])) ? true : false,
|
'relative_path' => (empty($convert->convertor['source_path_absolute'])) ? true : false,
|
||||||
);
|
);
|
||||||
|
|
||||||
$target = $config[$config_var] . '/' . basename(($use_target === false) ? $source : $use_target);
|
$target = '../' . $config[$config_var] . '/' . basename(($use_target === false) ? $source : $use_target);
|
||||||
|
|
||||||
if (!empty($convert->convertor[$config_var]) && strpos($source, $convert->convertor[$config_var]) !== 0)
|
if (!empty($convert->convertor[$config_var]) && strpos($source, $convert->convertor[$config_var]) !== 0)
|
||||||
{
|
{
|
||||||
|
@ -1068,7 +1068,7 @@ function add_user_group($group_id, $user_id, $group_leader=false)
|
||||||
*/
|
*/
|
||||||
function user_group_auth($group, $select_query)
|
function user_group_auth($group, $select_query)
|
||||||
{
|
{
|
||||||
global $convert, $phpbb_root_path, $config, $user, $db;
|
global $convert, $phpbb_root_path, $config, $user, $db, $src_db, $same_db;
|
||||||
|
|
||||||
if (!in_array($group, array('guests', 'registered', 'registered_coppa', 'global_moderators', 'administrators', 'bots')))
|
if (!in_array($group, array('guests', 'registered', 'registered_coppa', 'global_moderators', 'administrators', 'bots')))
|
||||||
{
|
{
|
||||||
|
@ -1089,9 +1089,33 @@ function user_group_auth($group, $select_query)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' (user_id, group_id, user_pending)
|
if ($same_db)
|
||||||
' . str_replace('{' . strtoupper($group) . '}', $group_id . ', 0', $select_query);
|
{
|
||||||
$db->sql_query($sql);
|
$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' (user_id, group_id, user_pending)
|
||||||
|
' . str_replace('{' . strtoupper($group) . '}', $group_id . ', 0', $select_query);
|
||||||
|
$db->sql_query($sql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$result = $src_db->sql_query(str_replace('{' . strtoupper($group) . '}', $group_id . ', 0', $select_query));
|
||||||
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
// make sure it's exactly 3 ints that were returned
|
||||||
|
$data = array();
|
||||||
|
reset($row);
|
||||||
|
for ($i = 0; $i < 3; $i++)
|
||||||
|
{
|
||||||
|
$data[] = (int) current($row);
|
||||||
|
next($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this might become quite a lot of INSERTS unfortunately
|
||||||
|
$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' (user_id, group_id, user_pending)
|
||||||
|
VALUES (' . implode(', ', $data) . ')';
|
||||||
|
$db->sql_query($sql);
|
||||||
|
}
|
||||||
|
$src_db->sql_freeresult($result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1109,14 +1133,19 @@ function get_config()
|
||||||
return $convert_config;
|
return $convert_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
global $db, $phpbb_root_path, $config;
|
global $src_db, $same_db, $phpbb_root_path, $config;
|
||||||
global $convert;
|
global $convert;
|
||||||
|
|
||||||
if ($convert->config_schema['table_format'] != 'file')
|
if ($convert->config_schema['table_format'] != 'file')
|
||||||
{
|
{
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
$sql = 'SELECT * FROM ' . $convert->src_table_prefix . $convert->config_schema['table_name'];
|
$sql = 'SELECT * FROM ' . $convert->src_table_prefix . $convert->config_schema['table_name'];
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$row = $db->sql_fetchrow($result);
|
$row = $src_db->sql_fetchrow($result);
|
||||||
|
|
||||||
if (!$row)
|
if (!$row)
|
||||||
{
|
{
|
||||||
|
@ -1133,8 +1162,13 @@ function get_config()
|
||||||
{
|
{
|
||||||
$convert_config[$row[$key]] = $row[$val];
|
$convert_config[$row[$key]] = $row[$val];
|
||||||
}
|
}
|
||||||
while ($row = $db->sql_fetchrow($result));
|
while ($row = $src_db->sql_fetchrow($result));
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ($convert->config_schema['table_format'] == 'file')
|
else if ($convert->config_schema['table_format'] == 'file')
|
||||||
{
|
{
|
||||||
|
@ -1153,6 +1187,10 @@ function get_config()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$convert_config = $row;
|
$convert_config = $row;
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sizeof($convert_config))
|
if (!sizeof($convert_config))
|
||||||
|
|
455
phpBB/includes/functions_install.php
Normal file
455
phpBB/includes/functions_install.php
Normal file
|
@ -0,0 +1,455 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package install
|
||||||
|
* @version $Id$
|
||||||
|
* @copyright (c) 2006 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if we are able to load a specified PHP module and do so if possible
|
||||||
|
*/
|
||||||
|
function can_load_dll($dll)
|
||||||
|
{
|
||||||
|
global $suffix;
|
||||||
|
|
||||||
|
if (empty($suffix))
|
||||||
|
{
|
||||||
|
$suffix = (defined('PHP_OS') && strpos(strtolower(PHP_OS), 'win') === 0) ? 'dll' : 'so';
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((@ini_get('enable_dl') || strtolower(@ini_get('enable_dl')) == 'on') && (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') && @dl($dll . ".$suffix")) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of available DBMS with some data, if a DBMS is specified it will only
|
||||||
|
* return data for that DBMS and will load its extension if necessary.
|
||||||
|
*/
|
||||||
|
function get_available_dbms($dbms = false, $return_unavailable = false)
|
||||||
|
{
|
||||||
|
$available_dbms = array(
|
||||||
|
'firebird' => array(
|
||||||
|
'LABEL' => 'FireBird',
|
||||||
|
'SCHEMA' => 'firebird',
|
||||||
|
'MODULE' => 'interbase',
|
||||||
|
'DELIM' => ';;',
|
||||||
|
'COMMENTS' => 'remove_remarks',
|
||||||
|
'DRIVER' => 'firebird',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'mysqli' => array(
|
||||||
|
'LABEL' => 'MySQL with MySQLi Extension',
|
||||||
|
'SCHEMA' => 'mysql_41',
|
||||||
|
'MODULE' => 'mysqli',
|
||||||
|
'DELIM' => ';',
|
||||||
|
'COMMENTS' => 'remove_remarks',
|
||||||
|
'DRIVER' => 'mysqli',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'mysql' => array(
|
||||||
|
'LABEL' => 'MySQL',
|
||||||
|
'SCHEMA' => 'mysql',
|
||||||
|
'MODULE' => 'mysql',
|
||||||
|
'DELIM' => ';',
|
||||||
|
'COMMENTS' => 'remove_remarks',
|
||||||
|
'DRIVER' => 'mysql',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'mssql' => array(
|
||||||
|
'LABEL' => 'MS SQL Server 2000+',
|
||||||
|
'SCHEMA' => 'mssql',
|
||||||
|
'MODULE' => 'mssql',
|
||||||
|
'DELIM' => 'GO',
|
||||||
|
'COMMENTS' => 'remove_comments',
|
||||||
|
'DRIVER' => 'mssql',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'mssql_odbc'=> array(
|
||||||
|
'LABEL' => 'MS SQL Server [ ODBC ]',
|
||||||
|
'SCHEMA' => 'mssql',
|
||||||
|
'MODULE' => 'odbc',
|
||||||
|
'DELIM' => 'GO',
|
||||||
|
'COMMENTS' => 'remove_comments',
|
||||||
|
'DRIVER' => 'mssql_odbc',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'oracle' => array(
|
||||||
|
'LABEL' => 'Oracle',
|
||||||
|
'SCHEMA' => 'oracle',
|
||||||
|
'MODULE' => 'oci8',
|
||||||
|
'DELIM' => '/',
|
||||||
|
'COMMENTS' => 'remove_comments',
|
||||||
|
'DRIVER' => 'oracle',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'postgres' => array(
|
||||||
|
'LABEL' => 'PostgreSQL 7.x/8.x',
|
||||||
|
'SCHEMA' => 'postgres',
|
||||||
|
'MODULE' => 'pgsql',
|
||||||
|
'DELIM' => ';',
|
||||||
|
'COMMENTS' => 'remove_comments',
|
||||||
|
'DRIVER' => 'postgres',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
'sqlite' => array(
|
||||||
|
'LABEL' => 'SQLite',
|
||||||
|
'SCHEMA' => 'sqlite',
|
||||||
|
'MODULE' => 'sqlite',
|
||||||
|
'DELIM' => ';',
|
||||||
|
'COMMENTS' => 'remove_remarks',
|
||||||
|
'DRIVER' => 'sqlite',
|
||||||
|
'AVAILABLE' => true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($dbms)
|
||||||
|
{
|
||||||
|
if (isset($available_dbms[$dbms]))
|
||||||
|
{
|
||||||
|
$available_dbms = array($dbms => $available_dbms[$dbms]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now perform some checks whether they are really available
|
||||||
|
foreach ($available_dbms as $db_name => $db_ary)
|
||||||
|
{
|
||||||
|
$dll = $db_ary['MODULE'];
|
||||||
|
|
||||||
|
if (!@extension_loaded($dll))
|
||||||
|
{
|
||||||
|
if (!can_load_dll($dll))
|
||||||
|
{
|
||||||
|
if ($return_unavailable)
|
||||||
|
{
|
||||||
|
$available_dbms[$db_name]['AVAILABLE'] = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unset($available_dbms[$db_name]);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$any_db_support = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($return_unavailable)
|
||||||
|
{
|
||||||
|
$available_dbms['ANY_DB_SUPPORT'] = $any_db_support;
|
||||||
|
}
|
||||||
|
return $available_dbms;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the drop down of available database options
|
||||||
|
*/
|
||||||
|
function dbms_select($default='')
|
||||||
|
{
|
||||||
|
$available_dbms = get_available_dbms();
|
||||||
|
$dbms_options = '';
|
||||||
|
foreach ($available_dbms as $dbms_name => $details)
|
||||||
|
{
|
||||||
|
$selected = ($dbms_name == $default) ? ' selected="selected"' : '';
|
||||||
|
$dbms_options .= '<option value="' . $dbms_name . '"' . $selected .'>' . $details['LABEL'] . '</option>';
|
||||||
|
}
|
||||||
|
return $dbms_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to test whether we are able to connect to the database the user has specified
|
||||||
|
* and identify any problems (eg there are already tables with the names we want to use
|
||||||
|
* @param array $dbms should be of the format of an element of the array returned by {@link get_available_dbms get_available_dbms()}
|
||||||
|
* necessary extensions should be loaded already
|
||||||
|
*/
|
||||||
|
function connect_check_db($error_connect, &$error, $dbms, $table_prefix, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport, $prefix_may_exist = false, $load_dbal = true)
|
||||||
|
{
|
||||||
|
global $phpbb_root_path, $phpEx, $config, $lang;
|
||||||
|
|
||||||
|
if ($load_dbal)
|
||||||
|
{
|
||||||
|
// Include the DB layer
|
||||||
|
include($phpbb_root_path . 'includes/db/' . $dbms['DRIVER'] . '.' . $phpEx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instantiate it and set return on error true
|
||||||
|
$sql_db = 'dbal_' . $dbms['DRIVER'];
|
||||||
|
$db = new $sql_db();
|
||||||
|
$db->sql_return_on_error(true);
|
||||||
|
|
||||||
|
// Check that we actually have a database name before going any further.....
|
||||||
|
if ($dbms['DRIVER'] != 'sqlite' && $dbname === '')
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_NAME'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we don't have a daft user who thinks having the SQLite database in the forum directory is a good idea
|
||||||
|
if ($dbms['DRIVER'] == 'sqlite' && stripos(phpbb_realpath($dbhost), phpbb_realpath('../')) === 0)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_FORUM_PATH'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the prefix length to ensure that index names are not too long and does not contain invalid characters
|
||||||
|
switch ($dbms['DRIVER'])
|
||||||
|
{
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysqli':
|
||||||
|
if (strpos($table_prefix, '-') !== false)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_PREFIX_INVALID'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no break;
|
||||||
|
|
||||||
|
case 'postgres':
|
||||||
|
$prefix_length = 36;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'mssql':
|
||||||
|
case 'mssql_odbc':
|
||||||
|
$prefix_length = 90;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sqlite':
|
||||||
|
$prefix_length = 200;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'firebird':
|
||||||
|
case 'oracle':
|
||||||
|
$prefix_length = 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen($table_prefix) > $prefix_length)
|
||||||
|
{
|
||||||
|
$error[] = sprintf($lang['INST_ERR_PREFIX_TOO_LONG'], $prefix_length);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try and connect ...
|
||||||
|
if (is_array($db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false)))
|
||||||
|
{
|
||||||
|
$db_error = $db->sql_error();
|
||||||
|
$error[] = $lang['INST_ERR_DB_CONNECT'] . '<br />' . (($db_error['message']) ? $db_error['message'] : $lang['INST_ERR_DB_NO_ERROR']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch ($dbms['DRIVER'])
|
||||||
|
{
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysqli':
|
||||||
|
$sql = 'SHOW TABLES';
|
||||||
|
$field = "Tables_in_{$dbname}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sqlite':
|
||||||
|
$sql = 'SELECT name
|
||||||
|
FROM sqlite_master
|
||||||
|
WHERE type = "table"';
|
||||||
|
$field = 'name';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'mssql':
|
||||||
|
case 'mssql_odbc':
|
||||||
|
$sql = "SELECT name
|
||||||
|
FROM sysobjects
|
||||||
|
WHERE type='U'";
|
||||||
|
$field = 'name';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'postgres':
|
||||||
|
$sql = "SELECT relname
|
||||||
|
FROM pg_class
|
||||||
|
WHERE relkind = 'r'
|
||||||
|
AND relname NOT LIKE 'pg\_%'";
|
||||||
|
$field = 'relname';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'firebird':
|
||||||
|
$sql = 'SELECT rdb$relation_name
|
||||||
|
FROM rdb$relations
|
||||||
|
WHERE rdb$view_source is null
|
||||||
|
AND rdb$system_flag = 0';
|
||||||
|
$field = 'rdb$relation_name';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'oracle':
|
||||||
|
$sql = 'SELECT table_name
|
||||||
|
FROM USER_TABLES';
|
||||||
|
$field = 'table_name';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
if ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
// Likely matches for an existing phpBB installation
|
||||||
|
$temp_prefix = strtolower($table_prefix);
|
||||||
|
$table_ary = array($temp_prefix . 'attachments', $temp_prefix . 'config', $temp_prefix . 'sessions', $temp_prefix . 'topics', $temp_prefix . 'users');
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// All phpBB installations will at least have config else it won't work
|
||||||
|
if (in_array(strtolower($row[$field]), $table_ary))
|
||||||
|
{
|
||||||
|
if (!$prefix_may_exist)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_PREFIX'];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ($row = $db->sql_fetchrow($result));
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// Make sure that the user has selected a sensible DBAL for the DBMS actually installed
|
||||||
|
switch ($dbms['DRIVER'])
|
||||||
|
{
|
||||||
|
case 'mysqli':
|
||||||
|
if (version_compare(mysqli_get_server_info($db->db_connect_id), '4.1.3', '<'))
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_MYSQLI'];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sqlite':
|
||||||
|
if (version_compare(sqlite_libversion(), '2.8.2', '<'))
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_SQLITE'];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'firebird':
|
||||||
|
// check the version of FB, use some hackery if we can't get access to the server info
|
||||||
|
if ($db->service_handle !== false && function_exists('ibase_server_info'))
|
||||||
|
{
|
||||||
|
$val = @ibase_server_info($db->service_handle, IBASE_SVC_SERVER_VERSION);
|
||||||
|
preg_match('#V([\d.]+)#', $val, $match);
|
||||||
|
if ($match[1] < 2)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||||
|
}
|
||||||
|
$db_info = @ibase_db_info($db->service_handle, $dbname, IBASE_STS_HDR_PAGES);
|
||||||
|
|
||||||
|
preg_match('/^\\s*Page size\\s*(\\d+)/m', $db_info, $regs);
|
||||||
|
$page_size = intval($regs[1]);
|
||||||
|
if ($page_size < 8192)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sql = "SELECT *
|
||||||
|
FROM RDB$FUNCTIONS
|
||||||
|
WHERE RDB$SYSTEM_FLAG IS NULL
|
||||||
|
AND RDB$FUNCTION_NAME = 'CHAR_LENGTH'";
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
$row = $db->sql_fetchrow($result);
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// if its a UDF, its too old
|
||||||
|
if ($row)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sql = "SELECT FIRST 0 char_length('')
|
||||||
|
FROM RDB\$DATABASE";
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
if (!$result) // This can only fail if char_length is not defined
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the stuff for our random table
|
||||||
|
$char_array = array_merge(range('A', 'Z'), range('0', '9'));
|
||||||
|
$char_len = mt_rand(7, 9);
|
||||||
|
$char_array_len = sizeof($char_array) - 1;
|
||||||
|
|
||||||
|
$final = '';
|
||||||
|
|
||||||
|
for ($i = 0; $i < $char_len; $i++)
|
||||||
|
{
|
||||||
|
$final .= $char_array[mt_rand(0, $char_array_len)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create some random table
|
||||||
|
$sql = 'CREATE TABLE ' . $final . " (
|
||||||
|
FIELD1 VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
|
||||||
|
FIELD2 INTEGER DEFAULT 0 NOT NULL);";
|
||||||
|
$db->sql_query($sql);
|
||||||
|
|
||||||
|
// Create an index that should fail if the page size is less than 8192
|
||||||
|
$sql = 'CREATE INDEX ' . $final . ' ON ' . $final . '(FIELD1, FIELD2);';
|
||||||
|
$db->sql_query($sql);
|
||||||
|
|
||||||
|
if (ibase_errmsg() !== false)
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Kill the old table
|
||||||
|
$db->sql_query('DROP TABLE ' . $final . ';');
|
||||||
|
}
|
||||||
|
unset($final);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'oracle':
|
||||||
|
$sql = "SELECT *
|
||||||
|
FROM NLS_DATABASE_PARAMETERS
|
||||||
|
WHERE PARAMETER = 'NLS_RDBMS_VERSION'
|
||||||
|
OR PARAMETER = 'NLS_CHARACTERSET'";
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$stats[$row['parameter']] = $row['value'];
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if (version_compare($stats['NLS_RDBMS_VERSION'], '9.2', '<') && $stats['NLS_CHARACTERSET'] !== 'UTF8')
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_ORACLE'];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'postgres':
|
||||||
|
$sql = "SHOW server_encoding;";
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
$row = $db->sql_fetchrow($result);
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($row['server_encoding'] !== 'UNICODE' && $row['server_encoding'] !== 'UTF8')
|
||||||
|
{
|
||||||
|
$error[] = $lang['INST_ERR_DB_NO_POSTGRES'];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->sql_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error_connect && (!isset($error) || !sizeof($error)))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -426,7 +426,7 @@ function change_poster(&$post_info, $userdata)
|
||||||
$to_username = $userdata['username'];
|
$to_username = $userdata['username'];
|
||||||
|
|
||||||
// Renew post info
|
// Renew post info
|
||||||
$post_info = get_post_data(array($post_id));
|
$post_info = get_post_data(array($post_id), false, true);
|
||||||
|
|
||||||
if (!sizeof($post_info))
|
if (!sizeof($post_info))
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,12 @@ $convertor_data = array(
|
||||||
'version' => '0.9',
|
'version' => '0.9',
|
||||||
'phpbb_version' => '3.0.0',
|
'phpbb_version' => '3.0.0',
|
||||||
'author' => '<a href="http://www.phpbb.com/">phpBB Group</a>',
|
'author' => '<a href="http://www.phpbb.com/">phpBB Group</a>',
|
||||||
|
'dbms' => 'mysql',
|
||||||
|
'dbhost' => 'localhost',
|
||||||
|
'dbport' => '',
|
||||||
|
'dbuser' => 'user',
|
||||||
|
'dbpasswd' => 'password',
|
||||||
|
'dbname' => '',
|
||||||
'table_prefix' => 'phpbb_',
|
'table_prefix' => 'phpbb_',
|
||||||
'forum_path' => '../forums',
|
'forum_path' => '../forums',
|
||||||
'author_notes' => 'Avatars may be on a different width/height than with the old forum. This is due to dimensions being stored within phpBB3 but not within phpBB2. The default dimension was set to 80x80 for avatars where dimension settings could not be determined. You might wish to instruct your users to check their profiles after the conversion to ensure that the size is correct.',
|
'author_notes' => 'Avatars may be on a different width/height than with the old forum. This is due to dimensions being stored within phpBB3 but not within phpBB2. The default dimension was set to 80x80 for avatars where dimension settings could not be determined. You might wish to instruct your users to check their profiles after the conversion to ensure that the size is correct.',
|
||||||
|
@ -210,7 +216,8 @@ if (!$get_info)
|
||||||
* 'schema' Syntax Description
|
* 'schema' Syntax Description
|
||||||
* -> 'target' => Target Table. If not specified the next table will be handled
|
* -> 'target' => Target Table. If not specified the next table will be handled
|
||||||
* -> 'primary' => Primary Key. If this is specified then this table is processed in batches
|
* -> 'primary' => Primary Key. If this is specified then this table is processed in batches
|
||||||
* -> 'query_first' => Query to execute before beginning the process (if more than one then specified as array)
|
* -> 'query_first' => array('target' or 'src', Query to execute before beginning the process
|
||||||
|
* (if more than one then specified as array))
|
||||||
* -> 'function_first' => Function to execute before beginning the process (if more than one then specified as array)
|
* -> 'function_first' => Function to execute before beginning the process (if more than one then specified as array)
|
||||||
* (This is mostly useful if variables need to be given to the converting process)
|
* (This is mostly useful if variables need to be given to the converting process)
|
||||||
* -> 'test_file' => This is not used at the moment but should be filled with a file from the old installation
|
* -> 'test_file' => This is not used at the moment but should be filled with a file from the old installation
|
||||||
|
@ -276,10 +283,10 @@ if (!$get_info)
|
||||||
|
|
||||||
// We empty some tables to have clean data available
|
// We empty some tables to have clean data available
|
||||||
'query_first' => array(
|
'query_first' => array(
|
||||||
$convert->truncate_statement . SEARCH_RESULTS_TABLE,
|
array('target', $convert->truncate_statement . SEARCH_RESULTS_TABLE),
|
||||||
$convert->truncate_statement . SEARCH_WORDLIST_TABLE,
|
array('target', $convert->truncate_statement . SEARCH_WORDLIST_TABLE),
|
||||||
$convert->truncate_statement . SEARCH_WORDMATCH_TABLE,
|
array('target', $convert->truncate_statement . SEARCH_WORDMATCH_TABLE),
|
||||||
$convert->truncate_statement . LOG_TABLE,
|
array('target', $convert->truncate_statement . LOG_TABLE),
|
||||||
),
|
),
|
||||||
|
|
||||||
// with this you are able to import all attachment files on the fly. For large boards this is not an option, therefore commented out by default.
|
// with this you are able to import all attachment files on the fly. For large boards this is not an option, therefore commented out by default.
|
||||||
|
@ -313,7 +320,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => (defined('MOD_ATTACHMENT')) ? ATTACHMENTS_TABLE : '',
|
'target' => (defined('MOD_ATTACHMENT')) ? ATTACHMENTS_TABLE : '',
|
||||||
'primary' => 'attachments.attach_id',
|
'primary' => 'attachments.attach_id',
|
||||||
'query_first' => (defined('MOD_ATTACHMENT')) ? $convert->truncate_statement . ATTACHMENTS_TABLE : '',
|
'query_first' => (defined('MOD_ATTACHMENT')) ? array('target', $convert->truncate_statement . ATTACHMENTS_TABLE) : '',
|
||||||
'autoincrement' => 'attach_id',
|
'autoincrement' => 'attach_id',
|
||||||
|
|
||||||
array('attach_id', 'attachments.attach_id', ''),
|
array('attach_id', 'attachments.attach_id', ''),
|
||||||
|
@ -363,7 +370,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => (defined('MOD_ATTACHMENT')) ? EXTENSIONS_TABLE : '',
|
'target' => (defined('MOD_ATTACHMENT')) ? EXTENSIONS_TABLE : '',
|
||||||
'query_first' => (defined('MOD_ATTACHMENT')) ? $convert->truncate_statement . EXTENSIONS_TABLE : '',
|
'query_first' => (defined('MOD_ATTACHMENT')) ? array('target', $convert->truncate_statement . EXTENSIONS_TABLE) : '',
|
||||||
'autoincrement' => 'extension_id',
|
'autoincrement' => 'extension_id',
|
||||||
|
|
||||||
array('extension_id', 'extensions.ext_id', ''),
|
array('extension_id', 'extensions.ext_id', ''),
|
||||||
|
@ -373,7 +380,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => (defined('MOD_ATTACHMENT')) ? EXTENSION_GROUPS_TABLE : '',
|
'target' => (defined('MOD_ATTACHMENT')) ? EXTENSION_GROUPS_TABLE : '',
|
||||||
'query_first' => (defined('MOD_ATTACHMENT')) ? $convert->truncate_statement . EXTENSION_GROUPS_TABLE : '',
|
'query_first' => (defined('MOD_ATTACHMENT')) ? array('target', $convert->truncate_statement . EXTENSION_GROUPS_TABLE) : '',
|
||||||
'autoincrement' => 'group_id',
|
'autoincrement' => 'group_id',
|
||||||
|
|
||||||
array('group_id', 'extension_groups.group_id', ''),
|
array('group_id', 'extension_groups.group_id', ''),
|
||||||
|
@ -389,7 +396,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => BANLIST_TABLE,
|
'target' => BANLIST_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . BANLIST_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . BANLIST_TABLE),
|
||||||
|
|
||||||
array('ban_ip', 'banlist.ban_ip', 'decode_ban_ip'),
|
array('ban_ip', 'banlist.ban_ip', 'decode_ban_ip'),
|
||||||
array('ban_userid', 'banlist.ban_userid', 'phpbb_user_id'),
|
array('ban_userid', 'banlist.ban_userid', 'phpbb_user_id'),
|
||||||
|
@ -410,14 +417,14 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => DISALLOW_TABLE,
|
'target' => DISALLOW_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . DISALLOW_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . DISALLOW_TABLE),
|
||||||
|
|
||||||
array('disallow_username', 'disallow.disallow_username', 'phpbb_disallowed_username'),
|
array('disallow_username', 'disallow.disallow_username', 'phpbb_disallowed_username'),
|
||||||
),
|
),
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => RANKS_TABLE,
|
'target' => RANKS_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . RANKS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . RANKS_TABLE),
|
||||||
'autoincrement' => 'rank_id',
|
'autoincrement' => 'rank_id',
|
||||||
|
|
||||||
array('rank_id', 'ranks.rank_id', ''),
|
array('rank_id', 'ranks.rank_id', ''),
|
||||||
|
@ -429,7 +436,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => TOPICS_TABLE,
|
'target' => TOPICS_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . TOPICS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . TOPICS_TABLE),
|
||||||
'primary' => 'topics.topic_id',
|
'primary' => 'topics.topic_id',
|
||||||
'autoincrement' => 'topic_id',
|
'autoincrement' => 'topic_id',
|
||||||
|
|
||||||
|
@ -493,7 +500,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => TOPICS_WATCH_TABLE,
|
'target' => TOPICS_WATCH_TABLE,
|
||||||
'primary' => 'topics_watch.topic_id',
|
'primary' => 'topics_watch.topic_id',
|
||||||
'query_first' => $convert->truncate_statement . TOPICS_WATCH_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . TOPICS_WATCH_TABLE),
|
||||||
|
|
||||||
array('topic_id', 'topics_watch.topic_id', ''),
|
array('topic_id', 'topics_watch.topic_id', ''),
|
||||||
array('user_id', 'topics_watch.user_id', 'phpbb_user_id'),
|
array('user_id', 'topics_watch.user_id', 'phpbb_user_id'),
|
||||||
|
@ -502,7 +509,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => SMILIES_TABLE,
|
'target' => SMILIES_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . SMILIES_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . SMILIES_TABLE),
|
||||||
'autoincrement' => 'smiley_id',
|
'autoincrement' => 'smiley_id',
|
||||||
|
|
||||||
array('smiley_id', 'smilies.smilies_id', ''),
|
array('smiley_id', 'smilies.smilies_id', ''),
|
||||||
|
@ -522,7 +529,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => POLL_OPTIONS_TABLE,
|
'target' => POLL_OPTIONS_TABLE,
|
||||||
'primary' => 'vote_results.vote_option_id',
|
'primary' => 'vote_results.vote_option_id',
|
||||||
'query_first' => $convert->truncate_statement . POLL_OPTIONS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . POLL_OPTIONS_TABLE),
|
||||||
|
|
||||||
array('poll_option_id', 'vote_results.vote_option_id', ''),
|
array('poll_option_id', 'vote_results.vote_option_id', ''),
|
||||||
array('topic_id', 'vote_desc.topic_id', ''),
|
array('topic_id', 'vote_desc.topic_id', ''),
|
||||||
|
@ -537,7 +544,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => POLL_VOTES_TABLE,
|
'target' => POLL_VOTES_TABLE,
|
||||||
'primary' => 'vote_desc.topic_id',
|
'primary' => 'vote_desc.topic_id',
|
||||||
'query_first' => $convert->truncate_statement . POLL_VOTES_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . POLL_VOTES_TABLE),
|
||||||
|
|
||||||
array('poll_option_id', 1, ''),
|
array('poll_option_id', 1, ''),
|
||||||
array('topic_id', 'vote_desc.topic_id', ''),
|
array('topic_id', 'vote_desc.topic_id', ''),
|
||||||
|
@ -550,7 +557,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => WORDS_TABLE,
|
'target' => WORDS_TABLE,
|
||||||
'primary' => 'words.word_id',
|
'primary' => 'words.word_id',
|
||||||
'query_first' => $convert->truncate_statement . WORDS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . WORDS_TABLE),
|
||||||
'autoincrement' => 'word_id',
|
'autoincrement' => 'word_id',
|
||||||
|
|
||||||
array('word_id', 'words.word_id', ''),
|
array('word_id', 'words.word_id', ''),
|
||||||
|
@ -562,7 +569,7 @@ if (!$get_info)
|
||||||
'target' => POSTS_TABLE,
|
'target' => POSTS_TABLE,
|
||||||
'primary' => 'posts.post_id',
|
'primary' => 'posts.post_id',
|
||||||
'autoincrement' => 'post_id',
|
'autoincrement' => 'post_id',
|
||||||
'query_first' => $convert->truncate_statement . POSTS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . POSTS_TABLE),
|
||||||
'execute_first' => '
|
'execute_first' => '
|
||||||
$config["max_post_chars"] = 0;
|
$config["max_post_chars"] = 0;
|
||||||
',
|
',
|
||||||
|
@ -607,8 +614,8 @@ if (!$get_info)
|
||||||
'primary' => 'privmsgs.privmsgs_id',
|
'primary' => 'privmsgs.privmsgs_id',
|
||||||
'autoincrement' => 'privmsgs_id',
|
'autoincrement' => 'privmsgs_id',
|
||||||
'query_first' => array(
|
'query_first' => array(
|
||||||
$convert->truncate_statement . PRIVMSGS_TABLE,
|
array('target', $convert->truncate_statement . PRIVMSGS_TABLE),
|
||||||
$convert->truncate_statement . PRIVMSGS_RULES_TABLE,
|
array('target', $convert->truncate_statement . PRIVMSGS_RULES_TABLE),
|
||||||
),
|
),
|
||||||
|
|
||||||
'execute_first' => '
|
'execute_first' => '
|
||||||
|
@ -645,7 +652,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => PRIVMSGS_FOLDER_TABLE,
|
'target' => PRIVMSGS_FOLDER_TABLE,
|
||||||
'primary' => 'users.user_id',
|
'primary' => 'users.user_id',
|
||||||
'query_first' => $convert->truncate_statement . PRIVMSGS_FOLDER_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . PRIVMSGS_FOLDER_TABLE),
|
||||||
|
|
||||||
array('user_id', 'users.user_id', 'phpbb_user_id'),
|
array('user_id', 'users.user_id', 'phpbb_user_id'),
|
||||||
array('folder_name', $user->lang['CONV_SAVED_MESSAGES'], ''),
|
array('folder_name', $user->lang['CONV_SAVED_MESSAGES'], ''),
|
||||||
|
@ -658,7 +665,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => PRIVMSGS_TO_TABLE,
|
'target' => PRIVMSGS_TO_TABLE,
|
||||||
'primary' => 'privmsgs.privmsgs_id',
|
'primary' => 'privmsgs.privmsgs_id',
|
||||||
'query_first' => $convert->truncate_statement . PRIVMSGS_TO_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . PRIVMSGS_TO_TABLE),
|
||||||
|
|
||||||
array('msg_id', 'privmsgs.privmsgs_id', ''),
|
array('msg_id', 'privmsgs.privmsgs_id', ''),
|
||||||
array('user_id', 'privmsgs.privmsgs_to_userid', 'phpbb_user_id'),
|
array('user_id', 'privmsgs.privmsgs_to_userid', 'phpbb_user_id'),
|
||||||
|
@ -753,7 +760,7 @@ if (!$get_info)
|
||||||
array(
|
array(
|
||||||
'target' => GROUPS_TABLE,
|
'target' => GROUPS_TABLE,
|
||||||
'autoincrement' => 'group_id',
|
'autoincrement' => 'group_id',
|
||||||
'query_first' => $convert->truncate_statement . GROUPS_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . GROUPS_TABLE),
|
||||||
|
|
||||||
array('group_id', 'groups.group_id', ''),
|
array('group_id', 'groups.group_id', ''),
|
||||||
array('group_type', 'groups.group_type', 'phpbb_convert_group_type'),
|
array('group_type', 'groups.group_type', 'phpbb_convert_group_type'),
|
||||||
|
@ -766,7 +773,7 @@ if (!$get_info)
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'target' => USER_GROUP_TABLE,
|
'target' => USER_GROUP_TABLE,
|
||||||
'query_first' => $convert->truncate_statement . USER_GROUP_TABLE,
|
'query_first' => array('target', $convert->truncate_statement . USER_GROUP_TABLE),
|
||||||
'execute_first' => '
|
'execute_first' => '
|
||||||
add_default_groups();
|
add_default_groups();
|
||||||
',
|
',
|
||||||
|
@ -795,8 +802,8 @@ if (!$get_info)
|
||||||
'primary' => 'users.user_id',
|
'primary' => 'users.user_id',
|
||||||
'autoincrement' => 'user_id',
|
'autoincrement' => 'user_id',
|
||||||
'query_first' => array(
|
'query_first' => array(
|
||||||
'DELETE FROM ' . USERS_TABLE . ' WHERE user_id <> ' . ANONYMOUS,
|
array('target', 'DELETE FROM ' . USERS_TABLE . ' WHERE user_id <> ' . ANONYMOUS),
|
||||||
$convert->truncate_statement . BOTS_TABLE
|
array('target', $convert->truncate_statement . BOTS_TABLE)
|
||||||
),
|
),
|
||||||
|
|
||||||
array('user_id', 'users.user_id', 'phpbb_user_id'),
|
array('user_id', 'users.user_id', 'phpbb_user_id'),
|
||||||
|
|
|
@ -46,16 +46,16 @@ function phpbb_forum_flags()
|
||||||
*/
|
*/
|
||||||
function phpbb_insert_forums()
|
function phpbb_insert_forums()
|
||||||
{
|
{
|
||||||
global $db, $convert, $user, $config;
|
global $db, $src_db, $same_db, $convert, $user, $config;
|
||||||
|
|
||||||
$db->sql_query($convert->truncate_statement . FORUMS_TABLE);
|
$db->sql_query($convert->truncate_statement . FORUMS_TABLE);
|
||||||
|
|
||||||
// Determine the highest id used within the old forums table (we add the categories after the forum ids)
|
// Determine the highest id used within the old forums table (we add the categories after the forum ids)
|
||||||
$sql = 'SELECT MAX(forum_id) AS max_forum_id
|
$sql = 'SELECT MAX(forum_id) AS max_forum_id
|
||||||
FROM ' . $convert->src_table_prefix . 'forums';
|
FROM ' . $convert->src_table_prefix . 'forums';
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$max_forum_id = (int) $db->sql_fetchfield('max_forum_id');
|
$max_forum_id = (int) $src_db->sql_fetchfield('max_forum_id');
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
$max_forum_id++;
|
$max_forum_id++;
|
||||||
|
|
||||||
|
@ -64,16 +64,16 @@ function phpbb_insert_forums()
|
||||||
FROM ' . $convert->src_table_prefix . 'categories
|
FROM ' . $convert->src_table_prefix . 'categories
|
||||||
ORDER BY cat_order';
|
ORDER BY cat_order';
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'binary'");
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'utf8'");
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($db->sql_layer)
|
switch ($db->sql_layer)
|
||||||
|
@ -85,7 +85,7 @@ function phpbb_insert_forums()
|
||||||
}
|
}
|
||||||
|
|
||||||
$cats_added = array();
|
$cats_added = array();
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$sql_ary = array(
|
$sql_ary = array(
|
||||||
'forum_id' => $max_forum_id,
|
'forum_id' => $max_forum_id,
|
||||||
|
@ -113,17 +113,17 @@ function phpbb_insert_forums()
|
||||||
$cats_added[$row['cat_id']] = $max_forum_id;
|
$cats_added[$row['cat_id']] = $max_forum_id;
|
||||||
$max_forum_id++;
|
$max_forum_id++;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
// There may be installations having forums with non-existant category ids.
|
// There may be installations having forums with non-existant category ids.
|
||||||
// We try to catch them and add them to an "unknown" category instead of leaving them out.
|
// We try to catch them and add them to an "unknown" category instead of leaving them out.
|
||||||
$sql = 'SELECT cat_id
|
$sql = 'SELECT cat_id
|
||||||
FROM ' . $convert->src_table_prefix . 'forums
|
FROM ' . $convert->src_table_prefix . 'forums
|
||||||
GROUP BY cat_id';
|
GROUP BY cat_id';
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
$unknown_cat_id = false;
|
$unknown_cat_id = false;
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
// Catch those categories not been added before
|
// Catch those categories not been added before
|
||||||
if (!isset($cats_added[$row['cat_id']]))
|
if (!isset($cats_added[$row['cat_id']]))
|
||||||
|
@ -131,7 +131,7 @@ function phpbb_insert_forums()
|
||||||
$unknown_cat_id = true;
|
$unknown_cat_id = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
// Is there at least one category not known?
|
// Is there at least one category not known?
|
||||||
if ($unknown_cat_id === true)
|
if ($unknown_cat_id === true)
|
||||||
|
@ -171,19 +171,19 @@ function phpbb_insert_forums()
|
||||||
GROUP BY f.forum_id, f.forum_name, f.cat_id, f.forum_desc, f.forum_status, f.prune_enable, f.prune_next, f.forum_order, fp.prune_days, fp.prune_freq
|
GROUP BY f.forum_id, f.forum_name, f.cat_id, f.forum_desc, f.forum_status, f.prune_enable, f.prune_next, f.forum_order, fp.prune_days, fp.prune_freq
|
||||||
ORDER BY f.cat_id, f.forum_order';
|
ORDER BY f.cat_id, f.forum_order';
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'binary'");
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'utf8'");
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
}
|
}
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
// Some might have forums here with an id not being "possible"...
|
// Some might have forums here with an id not being "possible"...
|
||||||
// To be somewhat friendly we "change" the category id for those to a previously created ghost category
|
// To be somewhat friendly we "change" the category id for those to a previously created ghost category
|
||||||
|
@ -266,7 +266,7 @@ function phpbb_insert_forums()
|
||||||
$sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
|
$sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
switch ($db->sql_layer)
|
switch ($db->sql_layer)
|
||||||
{
|
{
|
||||||
|
@ -342,14 +342,24 @@ function phpbb_set_encoding($text, $grab_user_lang = true)
|
||||||
}
|
}
|
||||||
else if (!empty($convert_row['poster_id']))
|
else if (!empty($convert_row['poster_id']))
|
||||||
{
|
{
|
||||||
global $db;
|
global $src_db, $same_db;
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
$sql = 'SELECT user_lang
|
$sql = 'SELECT user_lang
|
||||||
FROM ' . $convert->src_table_prefix . 'users
|
FROM ' . $convert->src_table_prefix . 'users
|
||||||
WHERE user_id = ' . (int) $convert_row['poster_id'];
|
WHERE user_id = ' . (int) $convert_row['poster_id'];
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$get_lang = (string) $db->sql_fetchfield('user_lang');
|
$get_lang = (string) $src_db->sql_fetchfield('user_lang');
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
|
||||||
$get_lang = (!trim($get_lang)) ? trim(get_config_value('default_lang')) : trim($get_lang);
|
$get_lang = (!trim($get_lang)) ? trim(get_config_value('default_lang')) : trim($get_lang);
|
||||||
}
|
}
|
||||||
|
@ -441,15 +451,25 @@ function phpbb_user_id($user_id)
|
||||||
// Increment user id if the old forum is having a user with the id 1
|
// Increment user id if the old forum is having a user with the id 1
|
||||||
if (!isset($config['increment_user_id']))
|
if (!isset($config['increment_user_id']))
|
||||||
{
|
{
|
||||||
global $db, $convert;
|
global $src_db, $same_db, $convert;
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
// Now let us set a temporary config variable for user id incrementing
|
// Now let us set a temporary config variable for user id incrementing
|
||||||
$sql = "SELECT user_id
|
$sql = "SELECT user_id
|
||||||
FROM {$convert->src_table_prefix}users
|
FROM {$convert->src_table_prefix}users
|
||||||
WHERE user_id = 1";
|
WHERE user_id = 1";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$id = (int) $db->sql_fetchfield('user_id');
|
$id = (int) $src_db->sql_fetchfield('user_id');
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
|
||||||
// If there is a user id 1, we need to increment user ids. :/
|
// If there is a user id 1, we need to increment user ids. :/
|
||||||
if ($id === 1)
|
if ($id === 1)
|
||||||
|
@ -484,7 +504,7 @@ function phpbb_copy_table_fields()
|
||||||
*/
|
*/
|
||||||
function phpbb_convert_authentication($mode)
|
function phpbb_convert_authentication($mode)
|
||||||
{
|
{
|
||||||
global $db, $convert, $user, $config, $cache;
|
global $db, $src_db, $same_db, $convert, $user, $config, $cache;
|
||||||
|
|
||||||
if ($mode == 'start')
|
if ($mode == 'start')
|
||||||
{
|
{
|
||||||
|
@ -494,14 +514,15 @@ function phpbb_convert_authentication($mode)
|
||||||
// What we will do is handling all 2.0.x admins as founder to replicate what is common in 2.0.x.
|
// What we will do is handling all 2.0.x admins as founder to replicate what is common in 2.0.x.
|
||||||
// After conversion the main admin need to make sure he is removing permissions and the founder status if wanted.
|
// After conversion the main admin need to make sure he is removing permissions and the founder status if wanted.
|
||||||
|
|
||||||
|
|
||||||
// Grab user ids of users with user_level of ADMIN
|
// Grab user ids of users with user_level of ADMIN
|
||||||
$sql = "SELECT user_id
|
$sql = "SELECT user_id
|
||||||
FROM {$convert->src_table_prefix}users
|
FROM {$convert->src_table_prefix}users
|
||||||
WHERE user_level = 1
|
WHERE user_level = 1
|
||||||
ORDER BY user_regdate ASC";
|
ORDER BY user_regdate ASC";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$user_id = (int) phpbb_user_id($row['user_id']);
|
$user_id = (int) phpbb_user_id($row['user_id']);
|
||||||
|
|
||||||
|
@ -511,49 +532,58 @@ function phpbb_convert_authentication($mode)
|
||||||
WHERE user_id = $user_id";
|
WHERE user_id = $user_id";
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab forum auth information
|
// Grab forum auth information
|
||||||
$sql = "SELECT *
|
$sql = "SELECT *
|
||||||
FROM {$convert->src_table_prefix}forums";
|
FROM {$convert->src_table_prefix}forums";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
$forum_access = array();
|
$forum_access = array();
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$forum_access[] = $row;
|
$forum_access[] = $row;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
// Grab user auth information from 2.0.x board
|
// Grab user auth information from 2.0.x board
|
||||||
$sql = "SELECT ug.user_id, aa.*
|
$sql = "SELECT ug.user_id, aa.*
|
||||||
FROM {$convert->src_table_prefix}auth_access aa, {$convert->src_table_prefix}user_group ug, {$convert->src_table_prefix}groups g
|
FROM {$convert->src_table_prefix}auth_access aa, {$convert->src_table_prefix}user_group ug, {$convert->src_table_prefix}groups g
|
||||||
WHERE g.group_id = aa.group_id
|
WHERE g.group_id = aa.group_id
|
||||||
AND g.group_single_user = 1
|
AND g.group_single_user = 1
|
||||||
AND ug.group_id = g.group_id";
|
AND ug.group_id = g.group_id";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
$user_access = array();
|
$user_access = array();
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$user_access[$row['forum_id']][] = $row;
|
$user_access[$row['forum_id']][] = $row;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
// Grab group auth information
|
// Grab group auth information
|
||||||
$sql = "SELECT g.group_id, aa.*
|
$sql = "SELECT g.group_id, aa.*
|
||||||
FROM {$convert->src_table_prefix}auth_access aa, {$convert->src_table_prefix}groups g
|
FROM {$convert->src_table_prefix}auth_access aa, {$convert->src_table_prefix}groups g
|
||||||
WHERE g.group_id = aa.group_id
|
WHERE g.group_id = aa.group_id
|
||||||
AND g.group_single_user <> 1";
|
AND g.group_single_user <> 1";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
$group_access = array();
|
$group_access = array();
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$group_access[$row['forum_id']][] = $row;
|
$group_access[$row['forum_id']][] = $row;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
|
||||||
// Add Forum Access List
|
// Add Forum Access List
|
||||||
$auth_map = array(
|
$auth_map = array(
|
||||||
|
@ -852,25 +882,25 @@ function phpbb_convert_authentication($mode)
|
||||||
$sql = 'SELECT user_id FROM ' . $convert->src_table_prefix . 'users
|
$sql = 'SELECT user_id FROM ' . $convert->src_table_prefix . 'users
|
||||||
WHERE user_allowavatar = 0
|
WHERE user_allowavatar = 0
|
||||||
AND user_id > 0';
|
AND user_id > 0';
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
mass_auth('user_role', 0, (int) phpbb_user_id($row['user_id']), 'USER_NOAVATAR');
|
mass_auth('user_role', 0, (int) phpbb_user_id($row['user_id']), 'USER_NOAVATAR');
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
// And the same for those who have had their PM rights removed
|
// And the same for those who have had their PM rights removed
|
||||||
$sql = 'SELECT user_id FROM ' . $convert->src_table_prefix . 'users
|
$sql = 'SELECT user_id FROM ' . $convert->src_table_prefix . 'users
|
||||||
WHERE user_allow_pm = 0
|
WHERE user_allow_pm = 0
|
||||||
AND user_id > 0';
|
AND user_id > 0';
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
mass_auth('user_role', 0, (int) phpbb_user_id($row['user_id']), 'USER_NOPM');
|
mass_auth('user_role', 0, (int) phpbb_user_id($row['user_id']), 'USER_NOPM');
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
}
|
}
|
||||||
else if ($mode == 'third')
|
else if ($mode == 'third')
|
||||||
{
|
{
|
||||||
|
@ -1169,21 +1199,30 @@ function phpbb_get_files_dir()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
global $db, $convert, $user, $config, $cache;
|
global $src_db, $same_db, $convert, $user, $config, $cache;
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
$sql = 'SELECT config_value AS upload_dir
|
$sql = 'SELECT config_value AS upload_dir
|
||||||
FROM ' . $convert->src_table_prefix . "attachments_config
|
FROM ' . $convert->src_table_prefix . "attachments_config
|
||||||
WHERE config_name = 'upload_dir'";
|
WHERE config_name = 'upload_dir'";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$upload_path = $db->sql_fetchfield('upload_dir');
|
$upload_path = $src_db->sql_fetchfield('upload_dir');
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
$sql = 'SELECT config_value AS ftp_upload
|
$sql = 'SELECT config_value AS ftp_upload
|
||||||
FROM ' . $convert->src_table_prefix . "attachments_config
|
FROM ' . $convert->src_table_prefix . "attachments_config
|
||||||
WHERE config_name = 'allow_ftp_upload'";
|
WHERE config_name = 'allow_ftp_upload'";
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
$ftp_upload = (int) $db->sql_fetchfield('ftp_upload');
|
$ftp_upload = (int) $src_db->sql_fetchfield('ftp_upload');
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
|
||||||
if ($ftp_upload)
|
if ($ftp_upload)
|
||||||
{
|
{
|
||||||
|
@ -1402,18 +1441,28 @@ function phpbb_get_savebox_id($user_id)
|
||||||
*/
|
*/
|
||||||
function phpbb_import_attach_config()
|
function phpbb_import_attach_config()
|
||||||
{
|
{
|
||||||
global $db, $convert, $config;
|
global $db, $src_db, $same_db, $convert, $config;
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
$sql = 'SELECT *
|
$sql = 'SELECT *
|
||||||
FROM ' . $convert->src_table_prefix . 'attachments_config';
|
FROM ' . $convert->src_table_prefix . 'attachments_config';
|
||||||
$result = $db->sql_query($sql);
|
$result = $src_db->sql_query($sql);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
|
||||||
$attach_config = array();
|
$attach_config = array();
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$attach_config[$row['config_name']] = $row['config_value'];
|
$attach_config[$row['config_name']] = $row['config_value'];
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
|
|
||||||
set_config('allow_attachments', 1);
|
set_config('allow_attachments', 1);
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,7 @@ include($phpbb_root_path . 'includes/acm/acm_file.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/cache.' . $phpEx);
|
include($phpbb_root_path . 'includes/cache.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
|
||||||
include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||||
|
require($phpbb_root_path . 'includes/functions_install.' . $phpEx);
|
||||||
|
|
||||||
// Try and load an appropriate language if required
|
// Try and load an appropriate language if required
|
||||||
$language = request_var('language', '');
|
$language = request_var('language', '');
|
||||||
|
|
|
@ -39,12 +39,19 @@ class convert
|
||||||
var $options = array();
|
var $options = array();
|
||||||
|
|
||||||
var $convertor_tag = '';
|
var $convertor_tag = '';
|
||||||
|
var $src_dbms = '';
|
||||||
|
var $src_dbhost = '';
|
||||||
|
var $src_dbport = '';
|
||||||
|
var $src_dbuser = '';
|
||||||
|
var $src_dbpasswd = '';
|
||||||
|
var $src_dbname = '';
|
||||||
var $src_table_prefix = '';
|
var $src_table_prefix = '';
|
||||||
|
|
||||||
var $convertor_data = array();
|
var $convertor_data = array();
|
||||||
var $tables = array();
|
var $tables = array();
|
||||||
var $config_schema = array();
|
var $config_schema = array();
|
||||||
var $convertor = array();
|
var $convertor = array();
|
||||||
|
var $src_truncate_statement = 'DELETE FROM ';
|
||||||
var $truncate_statement = 'DELETE FROM ';
|
var $truncate_statement = 'DELETE FROM ';
|
||||||
|
|
||||||
var $fulltext_search;
|
var $fulltext_search;
|
||||||
|
@ -142,19 +149,32 @@ class install_convert extends module
|
||||||
if ($new_conversion)
|
if ($new_conversion)
|
||||||
{
|
{
|
||||||
$config['convert_progress'] = '';
|
$config['convert_progress'] = '';
|
||||||
$db->sql_query('DELETE FROM ' . CONFIG_TABLE . " WHERE config_name = 'convert_progress'");
|
$config['convert_db_server'] = '';
|
||||||
|
$config['convert_db_user'] = '';
|
||||||
|
$db->sql_query('DELETE FROM ' . CONFIG_TABLE . "
|
||||||
|
WHERE config_name = 'convert_progress'
|
||||||
|
OR config_name = 'convert_db_server'
|
||||||
|
OR config_name = 'convert_db_user'"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's see if there is a conversion in the works...
|
// Let's see if there is a conversion in the works...
|
||||||
$options = array();
|
$options = array();
|
||||||
if (!empty($config['convert_progress']) && !empty($config['convert_options']))
|
if (!empty($config['convert_progress']) && !empty($config['convert_db_server']) && !empty($config['convert_db_user']) && !empty($config['convert_options']))
|
||||||
{
|
{
|
||||||
$options = unserialize($config['convert_progress']);
|
$options = unserialize($config['convert_progress']);
|
||||||
$options = array_merge($options, unserialize($config['convert_options']));
|
$options = array_merge($options, unserialize($config['convert_db_server']), unserialize($config['convert_db_user']), unserialize($config['convert_options']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This information should have already been checked once, but do it again for safety
|
// This information should have already been checked once, but do it again for safety
|
||||||
if (!empty($options) && !empty($options['tag']) && isset($options['table_prefix']))
|
if (!empty($options) && !empty($options['tag']) &&
|
||||||
|
isset($convert->options['dbms']) &&
|
||||||
|
isset($convert->options['dbhost']) &&
|
||||||
|
isset($convert->options['dbport']) &&
|
||||||
|
isset($convert->options['dbuser']) &&
|
||||||
|
isset($convert->options['dbpasswd']) &&
|
||||||
|
isset($convert->options['dbname']) &&
|
||||||
|
isset($convert->options['table_prefix']))
|
||||||
{
|
{
|
||||||
$this->page_title = $lang['CONTINUE_CONVERT'];
|
$this->page_title = $lang['CONTINUE_CONVERT'];
|
||||||
|
|
||||||
|
@ -270,6 +290,12 @@ class install_convert extends module
|
||||||
'tag' => $m[1],
|
'tag' => $m[1],
|
||||||
'forum_name' => $convertor_data['forum_name'],
|
'forum_name' => $convertor_data['forum_name'],
|
||||||
'version' => $convertor_data['version'],
|
'version' => $convertor_data['version'],
|
||||||
|
'dbms' => $convertor_data['dbms'],
|
||||||
|
'dbhost' => $convertor_data['dbhost'],
|
||||||
|
'dbport' => $convertor_data['dbport'],
|
||||||
|
'dbuser' => $convertor_data['dbuser'],
|
||||||
|
'dbpasswd' => $convertor_data['dbpasswd'],
|
||||||
|
'dbname' => $convertor_data['dbname'],
|
||||||
'table_prefix' => $convertor_data['table_prefix'],
|
'table_prefix' => $convertor_data['table_prefix'],
|
||||||
'author' => $convertor_data['author']
|
'author' => $convertor_data['author']
|
||||||
);
|
);
|
||||||
|
@ -347,6 +373,12 @@ class install_convert extends module
|
||||||
|
|
||||||
$submit = (isset($_POST['submit'])) ? true : false;
|
$submit = (isset($_POST['submit'])) ? true : false;
|
||||||
|
|
||||||
|
$src_dbms = request_var('src_dbms', $convertor_data['dbms']);
|
||||||
|
$src_dbhost = request_var('src_dbhost', $convertor_data['dbhost']);
|
||||||
|
$src_dbport = request_var('src_dbport', $convertor_data['dbport']);
|
||||||
|
$src_dbuser = request_var('src_dbuser', $convertor_data['dbuser']);
|
||||||
|
$src_dbpasswd = request_var('src_dbpasswd', $convertor_data['dbpasswd']);
|
||||||
|
$src_dbname = request_var('src_dbname', $convertor_data['dbname']);
|
||||||
$src_table_prefix = request_var('src_table_prefix', $convertor_data['table_prefix']);
|
$src_table_prefix = request_var('src_table_prefix', $convertor_data['table_prefix']);
|
||||||
$forum_path = request_var('forum_path', $convertor_data['forum_path']);
|
$forum_path = request_var('forum_path', $convertor_data['forum_path']);
|
||||||
$refresh = request_var('refresh', 1);
|
$refresh = request_var('refresh', 1);
|
||||||
|
@ -364,10 +396,22 @@ class install_convert extends module
|
||||||
$error[] = sprintf($lang['COULD_NOT_FIND_PATH'], $forum_path);
|
$error[] = sprintf($lang['COULD_NOT_FIND_PATH'], $forum_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The forum prefix of the old and the new forum can't be the same because the
|
$connect_test = false;
|
||||||
// convertor requires all tables to be in one database. I.e. there can't be
|
$available_dbms = get_available_dbms(false, true);
|
||||||
// two tables named 'phpbb_users'
|
|
||||||
if ($src_table_prefix == $table_prefix)
|
if (!isset($available_dbms[$src_dbms]) || !$available_dbms[$src_dbms]['AVAILABLE'])
|
||||||
|
{
|
||||||
|
$error['db'][] = $lang['INST_ERR_NO_DB'];
|
||||||
|
$connect_test = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$src_dbpasswd = htmlspecialchars_decode($src_dbpasswd);
|
||||||
|
$connect_test = connect_check_db(true, $error, $available_dbms[$src_dbms], false, $src_dbhost, $src_dbuser, $src_dbpasswd, $src_dbname, $src_dbport, ($src_dbms == $dbms) ? false : true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The forum prefix of the old and the new forum can only be the same if two different databases are used.
|
||||||
|
if ($src_table_prefix == $table_prefix && $src_dbms == $dbms && $src_dbhost == $dbhost && $src_dbport == $dbport && $src_dbname == $dbname)
|
||||||
{
|
{
|
||||||
$error[] = sprintf($lang['TABLE_PREFIX_SAME'], $src_table_prefix);
|
$error[] = sprintf($lang['TABLE_PREFIX_SAME'], $src_table_prefix);
|
||||||
}
|
}
|
||||||
|
@ -375,17 +419,35 @@ class install_convert extends module
|
||||||
// Check table prefix
|
// Check table prefix
|
||||||
if (!sizeof($error))
|
if (!sizeof($error))
|
||||||
{
|
{
|
||||||
|
// initiate database connection to old db if old and new db differ
|
||||||
|
global $src_db, $same_db;
|
||||||
|
$src_db = $same_db = null;
|
||||||
|
|
||||||
|
if ($src_dbms != $dbms || $src_dbhost != $dbhost || $src_dbport != $dbport || $src_dbname != $dbname || $src_dbuser != $dbuser)
|
||||||
|
{
|
||||||
|
$sql_db = 'dbal_' . $src_dbms;
|
||||||
|
$src_db = new $sql_db();
|
||||||
|
$src_db->sql_connect($src_dbhost, $src_dbuser, $src_dbpasswd, $src_dbname, $src_dbport, false);
|
||||||
|
$same_db = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$src_db = &$db;
|
||||||
|
$same_db = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_db->sql_return_on_error(true);
|
||||||
$db->sql_return_on_error(true);
|
$db->sql_return_on_error(true);
|
||||||
|
|
||||||
// Try to select one row from the first table to see if the prefix is OK
|
// Try to select one row from the first table to see if the prefix is OK
|
||||||
$result = $db->sql_query_limit('SELECT * FROM ' . $src_table_prefix . $tables[0], 1);
|
$result = $src_db->sql_query_limit('SELECT * FROM ' . $src_table_prefix . $tables[0], 1);
|
||||||
|
|
||||||
if (!$result)
|
if (!$result)
|
||||||
{
|
{
|
||||||
$prefixes = array();
|
$prefixes = array();
|
||||||
if ($result = $db->sql_query('SHOW TABLES'))
|
if ($result = $src_db->sql_query('SHOW TABLES'))
|
||||||
{
|
{
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $src_db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
if (sizeof($row) > 1)
|
if (sizeof($row) > 1)
|
||||||
{
|
{
|
||||||
|
@ -396,7 +458,7 @@ class install_convert extends module
|
||||||
compare_table($tables, $tablename, $prefixes);
|
compare_table($tables, $tablename, $prefixes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_->sql_freeresult($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($prefixes as $prefix => $count)
|
foreach ($prefixes as $prefix => $count)
|
||||||
|
@ -423,14 +485,28 @@ class install_convert extends module
|
||||||
|
|
||||||
$error[] = $msg;
|
$error[] = $msg;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$src_db->sql_freeresult($result);
|
||||||
$db->sql_return_on_error(false);
|
$src_db->sql_return_on_error(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sizeof($error))
|
if (!sizeof($error))
|
||||||
{
|
{
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => '', 'table_prefix' => $src_table_prefix, 'tag' => $convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => '',
|
||||||
|
'table_prefix' => $src_table_prefix,
|
||||||
|
'tag' => $convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $src_dbms,
|
||||||
|
'dbhost' => $src_dbhost,
|
||||||
|
'dbport' => $src_dbport,
|
||||||
|
'dbname' => $src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $src_dbuser,
|
||||||
|
'dbpasswd' => $src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
// Save options
|
// Save options
|
||||||
set_config('convert_options', serialize(array('forum_path' => './../' . $forum_path, 'refresh' => $refresh)), true);
|
set_config('convert_options', serialize(array('forum_path' => './../' . $forum_path, 'refresh' => $refresh)), true);
|
||||||
|
@ -527,24 +603,6 @@ class install_convert extends module
|
||||||
// @todo Need to confirm that max post length in source is <= max post length in destination or there may be interesting formatting issues
|
// @todo Need to confirm that max post length in source is <= max post length in destination or there may be interesting formatting issues
|
||||||
$config['max_post_chars'] = -1;
|
$config['max_post_chars'] = -1;
|
||||||
|
|
||||||
$convert->mysql_convert = false;
|
|
||||||
|
|
||||||
switch ($db->sql_layer)
|
|
||||||
{
|
|
||||||
// Thanks MySQL, for silently converting...
|
|
||||||
case 'mysql':
|
|
||||||
case 'mysql4':
|
|
||||||
if (version_compare($db->mysql_version, '4.1.3', '>='))
|
|
||||||
{
|
|
||||||
$convert->mysql_convert = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'mysqli':
|
|
||||||
$convert->mysql_convert = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up a user as well. We _should_ have enough of a database here at this point to do this
|
// Set up a user as well. We _should_ have enough of a database here at this point to do this
|
||||||
// and it helps for any core code we call
|
// and it helps for any core code we call
|
||||||
$user->session_begin();
|
$user->session_begin();
|
||||||
|
@ -560,19 +618,84 @@ class install_convert extends module
|
||||||
if (isset($config['convert_progress']))
|
if (isset($config['convert_progress']))
|
||||||
{
|
{
|
||||||
$convert->options = unserialize($config['convert_progress']);
|
$convert->options = unserialize($config['convert_progress']);
|
||||||
$convert->options = array_merge($convert->options, unserialize($config['convert_options']));
|
$convert->options = array_merge($convert->options, unserialize($config['convert_db_server']), unserialize($config['convert_db_user']), unserialize($config['convert_options']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This information should have already been checked once, but do it again for safety
|
// This information should have already been checked once, but do it again for safety
|
||||||
if (empty($convert->options) || empty($convert->options['tag']) || !isset($convert->options['table_prefix']))
|
if (empty($convert->options) || empty($convert->options['tag']) ||
|
||||||
|
!isset($convert->options['dbms']) ||
|
||||||
|
!isset($convert->options['dbhost']) ||
|
||||||
|
!isset($convert->options['dbport']) ||
|
||||||
|
!isset($convert->options['dbuser']) ||
|
||||||
|
!isset($convert->options['dbpasswd']) ||
|
||||||
|
!isset($convert->options['dbname']) ||
|
||||||
|
!isset($convert->options['table_prefix']))
|
||||||
{
|
{
|
||||||
$this->p_master->error($user->lang['NO_CONVERT_SPECIFIED'], __LINE__, __FILE__);
|
$this->p_master->error($user->lang['NO_CONVERT_SPECIFIED'], __LINE__, __FILE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make some short variables accessible, for easier referencing
|
// Make some short variables accessible, for easier referencing
|
||||||
$convert->convertor_tag = basename($convert->options['tag']);
|
$convert->convertor_tag = basename($convert->options['tag']);
|
||||||
|
$convert->src_dbms = $convert->options['dbms'];
|
||||||
|
$convert->src_dbhost = $convert->options['dbhost'];
|
||||||
|
$convert->src_dbport = $convert->options['dbport'];
|
||||||
|
$convert->src_dbuser = $convert->options['dbuser'];
|
||||||
|
$convert->src_dbpasswd = $convert->options['dbpasswd'];
|
||||||
|
$convert->src_dbname = $convert->options['dbname'];
|
||||||
$convert->src_table_prefix = $convert->options['table_prefix'];
|
$convert->src_table_prefix = $convert->options['table_prefix'];
|
||||||
|
|
||||||
|
// initiate database connection to old db if old and new db differ
|
||||||
|
global $src_db, $same_db;
|
||||||
|
$src_db = $same_db = null;
|
||||||
|
if ($convert->src_dbms != $dbms || $convert->src_dbhost != $dbhost || $convert->src_dbport != $dbport || $convert->src_dbname != $dbname || $convert->src_dbuser != $dbuser)
|
||||||
|
{
|
||||||
|
if ($convert->src_dbms != $dbms)
|
||||||
|
{
|
||||||
|
require($phpbb_root_path . 'includes/db/' . $convert->src_dbms . '.' . $phpEx);
|
||||||
|
}
|
||||||
|
$sql_db = 'dbal_' . $convert->src_dbms;
|
||||||
|
$src_db = new $sql_db();
|
||||||
|
$src_db->sql_connect($convert->src_dbhost, $convert->src_dbuser, $convert->src_dbpasswd, $convert->src_dbname, $convert->src_dbport, false);
|
||||||
|
$same_db = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$src_db = &$db;
|
||||||
|
$same_db = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$convert->mysql_convert = false;
|
||||||
|
switch ($src_db->sql_layer)
|
||||||
|
{
|
||||||
|
case 'sqlite':
|
||||||
|
case 'firebird':
|
||||||
|
$convert->src_truncate_statement = 'DELETE FROM ';
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Thanks MySQL, for silently converting...
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysql4':
|
||||||
|
if (version_compare($src_db->mysql_version, '4.1.3', '>='))
|
||||||
|
{
|
||||||
|
$convert->mysql_convert = true;
|
||||||
|
}
|
||||||
|
$convert->src_truncate_statement = 'TRUNCATE TABLE ';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'mysqli':
|
||||||
|
$convert->mysql_convert = true;
|
||||||
|
$convert->src_truncate_statement = 'TRUNCATE TABLE ';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$convert->src_truncate_statement = 'TRUNCATE TABLE ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && !$same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
switch ($db->sql_layer)
|
switch ($db->sql_layer)
|
||||||
{
|
{
|
||||||
|
@ -785,19 +908,19 @@ class install_convert extends module
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the tables that we need exist
|
// Check if the tables that we need exist
|
||||||
$db->sql_return_on_error(true);
|
$src_db->sql_return_on_error(true);
|
||||||
foreach ($tables_list as $table => $null)
|
foreach ($tables_list as $table => $null)
|
||||||
{
|
{
|
||||||
$sql = 'SELECT 1 FROM ' . $table;
|
$sql = 'SELECT 1 FROM ' . $table;
|
||||||
$_result = $db->sql_query_limit($sql, 1);
|
$_result = $src_db->sql_query_limit($sql, 1);
|
||||||
|
|
||||||
if (!$_result)
|
if (!$_result)
|
||||||
{
|
{
|
||||||
$missing_tables[] = $table;
|
$missing_tables[] = $table;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($_result);
|
$src_db->sql_freeresult($_result);
|
||||||
}
|
}
|
||||||
$db->sql_return_on_error(false);
|
$src_db->sql_return_on_error(false);
|
||||||
|
|
||||||
// Throw an error if some tables are missing
|
// Throw an error if some tables are missing
|
||||||
// We used to do some guessing here, but since we have a suggestion of possible values earlier, I don't see it adding anything here to do it again
|
// We used to do some guessing here, but since we have a suggestion of possible values earlier, I don't see it adding anything here to do it again
|
||||||
|
@ -812,7 +935,21 @@ class install_convert extends module
|
||||||
}
|
}
|
||||||
|
|
||||||
$step = '&confirm=1';
|
$step = '&confirm=1';
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$msg = $user->lang['PRE_CONVERT_COMPLETE'] . '</p><p>' . sprintf($user->lang['AUTHOR_NOTES'], $convert->convertor_data['author_notes']);
|
$msg = $user->lang['PRE_CONVERT_COMPLETE'] . '</p><p>' . sprintf($user->lang['AUTHOR_NOTES'], $convert->convertor_data['author_notes']);
|
||||||
$url = $this->p_master->module_url . "?mode=$mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode=$mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
@ -858,12 +995,33 @@ class install_convert extends module
|
||||||
{
|
{
|
||||||
if (!is_array($convert->convertor['query_first']))
|
if (!is_array($convert->convertor['query_first']))
|
||||||
{
|
{
|
||||||
$convert->convertor['query_first'] = array($convert->convertor['query_first']);
|
$convert->convertor['query_first'] = array('target', array($convert->convertor['query_first']));
|
||||||
|
}
|
||||||
|
else if (!is_array($convert->convertor['query_first'][0]))
|
||||||
|
{
|
||||||
|
$convert->convertor['query_first'] = array(array($convert->convertor['query_first'][0], $convert->convertor['query_first'][1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($convert->convertor['query_first'] as $query_first)
|
foreach ($convert->convertor['query_first'] as $query_first)
|
||||||
{
|
{
|
||||||
$db->sql_query($query_first);
|
if ($query_first[0] == 'src')
|
||||||
|
{
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_db->sql_query($query_first[1]);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$db->sql_query($query_first[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -907,12 +1065,31 @@ class install_convert extends module
|
||||||
{
|
{
|
||||||
if (!is_array($schema['query_first']))
|
if (!is_array($schema['query_first']))
|
||||||
{
|
{
|
||||||
$schema['query_first'] = array($schema['query_first']);
|
$schema['query_first'] = array('target', array($schema['query_first']));
|
||||||
|
}
|
||||||
|
else if (!is_array($schema['query_first'][0]))
|
||||||
|
{
|
||||||
|
$schema['query_first'] = array(array($schema['query_first'][0], $schema['query_first'][1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($schema['query_first'] as $query_first)
|
foreach ($schema['query_first'] as $query_first)
|
||||||
{
|
{
|
||||||
$db->sql_query($query_first);
|
if ($query_first[0] == 'src')
|
||||||
|
{
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
$src_db->sql_query($query_first[1]);
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$db->sql_query($query_first[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1004,17 +1181,17 @@ class install_convert extends module
|
||||||
$mtime = explode(' ', microtime());
|
$mtime = explode(' ', microtime());
|
||||||
$batch_time = $mtime[0] + $mtime[1];
|
$batch_time = $mtime[0] + $mtime[1];
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'binary'");
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take skip rows into account and only fetch batch_size amount of rows
|
// Take skip rows into account and only fetch batch_size amount of rows
|
||||||
$___result = $db->sql_query_limit($sql, $convert->batch_size, $skip_rows);
|
$___result = $src_db->sql_query_limit($sql, $convert->batch_size, $skip_rows);
|
||||||
|
|
||||||
if ($convert->mysql_convert)
|
if ($convert->mysql_convert && $same_db)
|
||||||
{
|
{
|
||||||
$db->sql_query("SET NAMES 'utf8'");
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// This loop processes each row
|
// This loop processes each row
|
||||||
|
@ -1036,12 +1213,12 @@ class install_convert extends module
|
||||||
// Now handle the rows until time is over or no more rows to process...
|
// Now handle the rows until time is over or no more rows to process...
|
||||||
while (still_on_time())
|
while (still_on_time())
|
||||||
{
|
{
|
||||||
$convert_row = $db->sql_fetchrow($___result);
|
$convert_row = $src_db->sql_fetchrow($___result);
|
||||||
|
|
||||||
if (!$convert_row)
|
if (!$convert_row)
|
||||||
{
|
{
|
||||||
// move to the next batch or table
|
// move to the next batch or table
|
||||||
$db->sql_freeresult($___result);
|
$src_db->sql_freeresult($___result);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1184,7 +1361,21 @@ class install_convert extends module
|
||||||
$step = '&current_table=' . $current_table . '&skip_rows=' . $skip_rows;
|
$step = '&current_table=' . $current_table . '&skip_rows=' . $skip_rows;
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$current_table++;
|
$current_table++;
|
||||||
// $percentage = ($skip_rows == 0) ? 0 : floor(100 / ($total_rows / $skip_rows));
|
// $percentage = ($skip_rows == 0) ? 0 : floor(100 / ($total_rows / $skip_rows));
|
||||||
|
@ -1208,7 +1399,21 @@ class install_convert extends module
|
||||||
$step = '&jump=1';
|
$step = '&jump=1';
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$url = $this->p_master->module_url . "?mode=$mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode=$mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
|
||||||
|
@ -1278,7 +1483,10 @@ class install_convert extends module
|
||||||
$sync_batch = -1;
|
$sync_batch = -1;
|
||||||
|
|
||||||
$db->sql_query('DELETE FROM ' . CONFIG_TABLE . "
|
$db->sql_query('DELETE FROM ' . CONFIG_TABLE . "
|
||||||
WHERE config_name = 'convert_progress' OR config_name = 'convert_options'");
|
WHERE config_name = 'convert_progress'
|
||||||
|
OR config_name = 'convert_options'
|
||||||
|
OR config_name = 'convert_db_server'
|
||||||
|
OR config_name = 'convert_db_user'");
|
||||||
$db->sql_query('DELETE FROM ' . SESSIONS_TABLE);
|
$db->sql_query('DELETE FROM ' . SESSIONS_TABLE);
|
||||||
|
|
||||||
@unlink($phpbb_root_path . 'cache/data_global.php');
|
@unlink($phpbb_root_path . 'cache/data_global.php');
|
||||||
|
@ -1305,7 +1513,21 @@ class install_convert extends module
|
||||||
$step = '&sync_batch=' . $sync_batch;
|
$step = '&sync_batch=' . $sync_batch;
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->options['table_prefix'], 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$url = $this->p_master->module_url . "?mode=$this->mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode=$this->mode&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
|
||||||
|
@ -1323,7 +1545,7 @@ class install_convert extends module
|
||||||
*/
|
*/
|
||||||
function jump($jump, $last_statement)
|
function jump($jump, $last_statement)
|
||||||
{
|
{
|
||||||
global $template, $user, $db, $phpbb_root_path, $phpEx, $config, $cache;
|
global $template, $user, $src_db, $same_db, $db, $phpbb_root_path, $phpEx, $config, $cache;
|
||||||
global $convert;
|
global $convert;
|
||||||
|
|
||||||
$template->assign_block_vars('checks', array(
|
$template->assign_block_vars('checks', array(
|
||||||
|
@ -1355,7 +1577,21 @@ class install_convert extends module
|
||||||
$step = '&jump=1&last=' . $last_statement;
|
$step = '&jump=1&last=' . $last_statement;
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$percentage = ($last_statement == 0) ? 0 : floor(100 / (sizeof($convert->convertor['execute_last']) / $last_statement));
|
$percentage = ($last_statement == 0) ? 0 : floor(100 / (sizeof($convert->convertor['execute_last']) / $last_statement));
|
||||||
$msg = sprintf($user->lang['STEP_PERCENT_COMPLETED'], $last_statement, sizeof($convert->convertor['execute_last']), $percentage);
|
$msg = sprintf($user->lang['STEP_PERCENT_COMPLETED'], $last_statement, sizeof($convert->convertor['execute_last']), $percentage);
|
||||||
|
@ -1377,17 +1613,39 @@ class install_convert extends module
|
||||||
{
|
{
|
||||||
if (!is_array($convert->convertor['query_last']))
|
if (!is_array($convert->convertor['query_last']))
|
||||||
{
|
{
|
||||||
$convert->convertor['query_last'] = array($convert->convertor['query_last']);
|
$convert->convertor['query_last'] = array('target', array($convert->convertor['query_last']));
|
||||||
|
}
|
||||||
|
else if (!is_array($convert->convertor['query_last'][0]))
|
||||||
|
{
|
||||||
|
$convert->convertor['query_last'] = array(array($convert->convertor['query_last'][0], $convert->convertor['query_last'][1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($convert->convertor['query_last'] as $query_last)
|
foreach ($convert->convertor['query_last'] as $query_last)
|
||||||
{
|
{
|
||||||
$db->sql_query($query_last);
|
if ($query_last[0] == 'src')
|
||||||
|
{
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'binary'");
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_db->sql_query($query_last[1]);
|
||||||
|
|
||||||
|
if ($convert->mysql_convert && $same_db)
|
||||||
|
{
|
||||||
|
$src_db->sql_query("SET NAMES 'utf8'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$db->sql_query($query_last[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
$db->sql_return_on_error(false);
|
$db->sql_return_on_error(false);
|
||||||
|
$src_db->sql_return_on_error(false);
|
||||||
|
|
||||||
fix_empty_primary_groups();
|
fix_empty_primary_groups();
|
||||||
|
|
||||||
|
@ -1416,7 +1674,21 @@ class install_convert extends module
|
||||||
$step = '&jump=2';
|
$step = '&jump=2';
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
|
||||||
|
@ -1446,7 +1718,21 @@ class install_convert extends module
|
||||||
$step = '&jump=3';
|
$step = '&jump=3';
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
|
||||||
|
@ -1472,7 +1758,21 @@ class install_convert extends module
|
||||||
$step = '&sync_batch=0';
|
$step = '&sync_batch=0';
|
||||||
|
|
||||||
// Save convertor Status
|
// Save convertor Status
|
||||||
set_config('convert_progress', serialize(array('step' => $step, 'table_prefix' => $convert->src_table_prefix, 'tag' => $convert->convertor_tag)), true);
|
set_config('convert_progress', serialize(array(
|
||||||
|
'step' => $step,
|
||||||
|
'table_prefix' => $convert->src_table_prefix,
|
||||||
|
'tag' => $convert->convertor_tag,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_server', serialize(array(
|
||||||
|
'dbms' => $convert->src_dbms,
|
||||||
|
'dbhost' => $convert->src_dbhost,
|
||||||
|
'dbport' => $convert->src_dbport,
|
||||||
|
'dbname' => $convert->src_dbname,
|
||||||
|
)), true);
|
||||||
|
set_config('convert_db_user', serialize(array(
|
||||||
|
'dbuser' => $convert->src_dbuser,
|
||||||
|
'dbpasswd' => $convert->src_dbpasswd,
|
||||||
|
)), true);
|
||||||
|
|
||||||
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
$url = $this->p_master->module_url . "?mode={$this->mode}&sub=in_progress&tag={$convert->convertor_tag}$step";
|
||||||
|
|
||||||
|
@ -1810,10 +2110,16 @@ class install_convert extends module
|
||||||
*/
|
*/
|
||||||
var $convert_options = array(
|
var $convert_options = array(
|
||||||
'legend1' => 'SPECIFY_OPTIONS',
|
'legend1' => 'SPECIFY_OPTIONS',
|
||||||
|
'src_dbms' => array('lang' => 'DBMS', 'type' => 'select', 'options' => 'dbms_select(\'{VALUE}\')', 'explain' => false),
|
||||||
|
'src_dbhost' => array('lang' => 'DB_HOST', 'type' => 'text:25:100', 'explain' => true),
|
||||||
|
'src_dbport' => array('lang' => 'DB_PORT', 'type' => 'text:25:100', 'explain' => true),
|
||||||
|
'src_dbname' => array('lang' => 'DB_NAME', 'type' => 'text:25:100', 'explain' => false),
|
||||||
|
'src_dbuser' => array('lang' => 'DB_USERNAME', 'type' => 'text:25:100', 'explain' => false),
|
||||||
|
'src_dbpasswd' => array('lang' => 'DB_PASSWORD', 'type' => 'password:25:100', 'explain' => false),
|
||||||
'src_table_prefix' => array('lang' => 'TABLE_PREFIX', 'type' => 'text:25:100', 'explain' => false),
|
'src_table_prefix' => array('lang' => 'TABLE_PREFIX', 'type' => 'text:25:100', 'explain' => false),
|
||||||
//'src_url' => array('lang' => 'FORUM_ADDRESS', 'type' => 'text:50:100', 'explain' => true),
|
//'src_url' => array('lang' => 'FORUM_ADDRESS', 'type' => 'text:50:100', 'explain' => true),
|
||||||
'forum_path' => array('lang' => 'FORUM_PATH', 'type' => 'text:25:100', 'explain' => true),
|
'forum_path' => array('lang' => 'FORUM_PATH', 'type' => 'text:25:100', 'explain' => true),
|
||||||
'refresh' => array('lang' => 'REFRESH_PAGE', 'type' => 'radio:yes_no', 'explain' => true),
|
'refresh' => array('lang' => 'REFRESH_PAGE', 'type' => 'radio:yes_no', 'explain' => true),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -208,7 +208,7 @@ class install_install extends module
|
||||||
* Better not enabling and adding to the loaded extensions due to the specific requirements needed
|
* Better not enabling and adding to the loaded extensions due to the specific requirements needed
|
||||||
if (!@extension_loaded('mbstring'))
|
if (!@extension_loaded('mbstring'))
|
||||||
{
|
{
|
||||||
$this->can_load_dll('mbstring');
|
can_load_dll('mbstring');
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -276,35 +276,32 @@ class install_install extends module
|
||||||
'LEGEND_EXPLAIN' => $lang['PHP_SUPPORTED_DB_EXPLAIN'],
|
'LEGEND_EXPLAIN' => $lang['PHP_SUPPORTED_DB_EXPLAIN'],
|
||||||
));
|
));
|
||||||
|
|
||||||
$dlls_db = array();
|
$available_dbms = get_available_dbms(false, true);
|
||||||
$passed['db'] = false;
|
$passed['db'] = $available_dbms['ANY_DB_SUPPORT'];
|
||||||
foreach ($this->available_dbms as $db_name => $db_ary)
|
unset($available_dbms['ANY_DB_SUPPORT']);
|
||||||
|
|
||||||
|
foreach ($available_dbms as $db_name => $db_ary)
|
||||||
{
|
{
|
||||||
$dll = $db_ary['MODULE'];
|
if (!$db_ary['AVAILABLE'])
|
||||||
|
|
||||||
if (!@extension_loaded($dll))
|
|
||||||
{
|
{
|
||||||
if (!$this->can_load_dll($dll))
|
$template->assign_block_vars('checks', array(
|
||||||
{
|
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
|
||||||
$template->assign_block_vars('checks', array(
|
'RESULT' => '<span style="color:red">' . $lang['UNAVAILABLE'] . '</span>',
|
||||||
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
|
|
||||||
'RESULT' => '<span style="color:red">' . $lang['UNAVAILABLE'] . '</span>',
|
|
||||||
|
|
||||||
'S_EXPLAIN' => false,
|
'S_EXPLAIN' => false,
|
||||||
'S_LEGEND' => false,
|
'S_LEGEND' => false,
|
||||||
));
|
));
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$template->assign_block_vars('checks', array(
|
||||||
|
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
|
||||||
|
'RESULT' => '<b style="color:green">' . $lang['AVAILABLE'] . '</b>',
|
||||||
|
|
||||||
$template->assign_block_vars('checks', array(
|
'S_EXPLAIN' => false,
|
||||||
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
|
'S_LEGEND' => false,
|
||||||
'RESULT' => '<b style="color:green">' . $lang['AVAILABLE'] . '</b>',
|
));
|
||||||
|
}
|
||||||
'S_EXPLAIN' => false,
|
|
||||||
'S_LEGEND' => false,
|
|
||||||
));
|
|
||||||
$passed['db'] = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for other modules
|
// Test for other modules
|
||||||
|
@ -318,7 +315,7 @@ class install_install extends module
|
||||||
{
|
{
|
||||||
if (!@extension_loaded($dll))
|
if (!@extension_loaded($dll))
|
||||||
{
|
{
|
||||||
if (!$this->can_load_dll($dll))
|
if (!can_load_dll($dll))
|
||||||
{
|
{
|
||||||
$template->assign_block_vars('checks', array(
|
$template->assign_block_vars('checks', array(
|
||||||
'TITLE' => $lang['DLL_' . strtoupper($dll)],
|
'TITLE' => $lang['DLL_' . strtoupper($dll)],
|
||||||
|
@ -502,21 +499,22 @@ class install_install extends module
|
||||||
}
|
}
|
||||||
|
|
||||||
$connect_test = false;
|
$connect_test = false;
|
||||||
|
$error = array();
|
||||||
|
$available_dbms = get_available_dbms(false, true);
|
||||||
|
|
||||||
// Has the user opted to test the connection?
|
// Has the user opted to test the connection?
|
||||||
if (isset($_POST['testdb']))
|
if (isset($_POST['testdb']))
|
||||||
{
|
{
|
||||||
// If the module for the selected database isn't loaded, let's try and load it now
|
if (!isset($available_dbms[$dbms]) || !$available_dbms[$dbms]['AVAILABLE'])
|
||||||
if (!@extension_loaded($this->available_dbms[$dbms]['MODULE']))
|
|
||||||
{
|
{
|
||||||
if (!$this->can_load_dll($this->available_dbms[$dbms]['MODULE']))
|
$error['db'][] = $lang['INST_ERR_NO_DB'];
|
||||||
{
|
$connect_test = false;
|
||||||
$error['db'][] = $lang['INST_ERR_NO_DB'];
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
||||||
|
$connect_test = connect_check_db(true, $error, $available_dbms[$dbms], $table_prefix, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
|
||||||
$connect_test = $this->connect_check_db(true, $error, $dbms, $table_prefix, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport);
|
|
||||||
|
|
||||||
$template->assign_block_vars('checks', array(
|
$template->assign_block_vars('checks', array(
|
||||||
'S_LEGEND' => true,
|
'S_LEGEND' => true,
|
||||||
|
@ -550,20 +548,17 @@ class install_install extends module
|
||||||
{
|
{
|
||||||
// Update the list of available DBMS modules to only contain those which can be used
|
// Update the list of available DBMS modules to only contain those which can be used
|
||||||
$available_dbms_temp = array();
|
$available_dbms_temp = array();
|
||||||
foreach ($this->available_dbms as $type => $dbms_ary)
|
foreach ($available_dbms as $type => $dbms_ary)
|
||||||
{
|
{
|
||||||
if (!@extension_loaded($dbms_ary['MODULE']))
|
if (!$dbms_ary['AVAILABLE'])
|
||||||
{
|
{
|
||||||
if (!$this->can_load_dll($dbms_ary['MODULE']))
|
continue;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$available_dbms_temp[$type] = $dbms_ary;
|
$available_dbms_temp[$type] = $dbms_ary;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->available_dbms = &$available_dbms_temp;
|
$available_dbms = &$available_dbms_temp;
|
||||||
|
|
||||||
// And now for the main part of this page
|
// And now for the main part of this page
|
||||||
$table_prefix = (!empty($table_prefix) ? $table_prefix : 'phpbb_');
|
$table_prefix = (!empty($table_prefix) ? $table_prefix : 'phpbb_');
|
||||||
|
@ -828,7 +823,8 @@ class install_install extends module
|
||||||
|
|
||||||
// Create a list of any PHP modules we wish to have loaded
|
// Create a list of any PHP modules we wish to have loaded
|
||||||
$load_extensions = array();
|
$load_extensions = array();
|
||||||
$check_exts = array_merge(array($this->available_dbms[$dbms]['MODULE']), $this->php_dlls_other);
|
$available_dbms = get_available_dbms($dbms);
|
||||||
|
$check_exts = array_merge(array($available_dbms[$dbms]['MODULE']), $this->php_dlls_other);
|
||||||
|
|
||||||
$suffix = (defined('PHP_OS') && strpos(strtolower(PHP_OS), 'win') === 0) ? 'dll' : 'so';
|
$suffix = (defined('PHP_OS') && strpos(strtolower(PHP_OS), 'win') === 0) ? 'dll' : 'so';
|
||||||
|
|
||||||
|
@ -836,7 +832,7 @@ class install_install extends module
|
||||||
{
|
{
|
||||||
if (!@extension_loaded($dll))
|
if (!@extension_loaded($dll))
|
||||||
{
|
{
|
||||||
if (!$this->can_load_dll($dll))
|
if (!can_load_dll($dll))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -860,7 +856,7 @@ class install_install extends module
|
||||||
// Time to convert the data provided into a config file
|
// Time to convert the data provided into a config file
|
||||||
$config_data = "<?php\n";
|
$config_data = "<?php\n";
|
||||||
$config_data .= "// phpBB 3.0.x auto-generated configuration file\n// Do not change anything in this file!\n";
|
$config_data .= "// phpBB 3.0.x auto-generated configuration file\n// Do not change anything in this file!\n";
|
||||||
$config_data .= "\$dbms = '" . $this->available_dbms[$dbms]['DRIVER'] . "';\n";
|
$config_data .= "\$dbms = '" . $available_dbms[$dbms]['DRIVER'] . "';\n";
|
||||||
$config_data .= "\$dbhost = '$dbhost';\n";
|
$config_data .= "\$dbhost = '$dbhost';\n";
|
||||||
$config_data .= "\$dbport = '$dbport';\n";
|
$config_data .= "\$dbport = '$dbport';\n";
|
||||||
$config_data .= "\$dbname = '$dbname';\n";
|
$config_data .= "\$dbname = '$dbname';\n";
|
||||||
|
@ -1085,19 +1081,16 @@ class install_install extends module
|
||||||
$cookie_domain = str_replace('www.', '.', $cookie_domain);
|
$cookie_domain = str_replace('www.', '.', $cookie_domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
||||||
if (!@extension_loaded($this->available_dbms[$dbms]['MODULE']))
|
$available_dbms = get_available_dbms($dbms);
|
||||||
{
|
|
||||||
$this->can_load_dll($this->available_dbms[$dbms]['MODULE']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
||||||
|
|
||||||
// Load the appropriate database class if not already loaded
|
// Load the appropriate database class if not already loaded
|
||||||
include($phpbb_root_path . 'includes/db/' . $this->available_dbms[$dbms]['DRIVER'] . '.' . $phpEx);
|
include($phpbb_root_path . 'includes/db/' . $available_dbms[$dbms]['DRIVER'] . '.' . $phpEx);
|
||||||
|
|
||||||
// Instantiate the database
|
// Instantiate the database
|
||||||
$sql_db = 'dbal_' . $this->available_dbms[$dbms]['DRIVER'];
|
$sql_db = 'dbal_' . $available_dbms[$dbms]['DRIVER'];
|
||||||
$db = new $sql_db();
|
$db = new $sql_db();
|
||||||
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
||||||
|
|
||||||
|
@ -1109,21 +1102,21 @@ class install_install extends module
|
||||||
{
|
{
|
||||||
if (version_compare($db->mysql_version, '4.1.3', '>='))
|
if (version_compare($db->mysql_version, '4.1.3', '>='))
|
||||||
{
|
{
|
||||||
$this->available_dbms[$dbms]['SCHEMA'] .= '_41';
|
$available_dbms[$dbms]['SCHEMA'] .= '_41';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->available_dbms[$dbms]['SCHEMA'] .= '_40';
|
$available_dbms[$dbms]['SCHEMA'] .= '_40';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ok we have the db info go ahead and read in the relevant schema
|
// Ok we have the db info go ahead and read in the relevant schema
|
||||||
// and work on building the table
|
// and work on building the table
|
||||||
$dbms_schema = 'schemas/' . $this->available_dbms[$dbms]['SCHEMA'] . '_schema.sql';
|
$dbms_schema = 'schemas/' . $available_dbms[$dbms]['SCHEMA'] . '_schema.sql';
|
||||||
|
|
||||||
// How should we treat this schema?
|
// How should we treat this schema?
|
||||||
$remove_remarks = $this->available_dbms[$dbms]['COMMENTS'];
|
$remove_remarks = $available_dbms[$dbms]['COMMENTS'];
|
||||||
$delimiter = $this->available_dbms[$dbms]['DELIM'];
|
$delimiter = $available_dbms[$dbms]['DELIM'];
|
||||||
|
|
||||||
$sql_query = @file_get_contents($dbms_schema);
|
$sql_query = @file_get_contents($dbms_schema);
|
||||||
|
|
||||||
|
@ -1309,7 +1302,7 @@ class install_install extends module
|
||||||
|
|
||||||
if (!@extension_loaded('gd'))
|
if (!@extension_loaded('gd'))
|
||||||
{
|
{
|
||||||
$this->can_load_dll('gd');
|
can_load_dll('gd');
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is for people who have TTF and GD
|
// This is for people who have TTF and GD
|
||||||
|
@ -1372,16 +1365,13 @@ class install_install extends module
|
||||||
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
$dbpasswd = htmlspecialchars_decode($dbpasswd);
|
||||||
|
|
||||||
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
||||||
if (!@extension_loaded($this->available_dbms[$dbms]['MODULE']))
|
$available_dbms = get_available_dbms($dbms);
|
||||||
{
|
|
||||||
$this->can_load_dll($this->available_dbms[$dbms]['MODULE']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the appropriate database class if not already loaded
|
// Load the appropriate database class if not already loaded
|
||||||
include($phpbb_root_path . 'includes/db/' . $this->available_dbms[$dbms]['DRIVER'] . '.' . $phpEx);
|
include($phpbb_root_path . 'includes/db/' . $available_dbms[$dbms]['DRIVER'] . '.' . $phpEx);
|
||||||
|
|
||||||
// Instantiate the database
|
// Instantiate the database
|
||||||
$sql_db = 'dbal_' . $this->available_dbms[$dbms]['DRIVER'];
|
$sql_db = 'dbal_' . $available_dbms[$dbms]['DRIVER'];
|
||||||
$db = new $sql_db();
|
$db = new $sql_db();
|
||||||
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
||||||
|
|
||||||
|
@ -1790,317 +1780,6 @@ class install_install extends module
|
||||||
'U_ACTION' => append_sid($phpbb_root_path . 'adm/index.' . $phpEx),
|
'U_ACTION' => append_sid($phpbb_root_path . 'adm/index.' . $phpEx),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if we are able to load a specified PHP module
|
|
||||||
*/
|
|
||||||
function can_load_dll($dll)
|
|
||||||
{
|
|
||||||
global $suffix;
|
|
||||||
|
|
||||||
if (empty($suffix))
|
|
||||||
{
|
|
||||||
$suffix = (defined('PHP_OS') && strpos(strtolower(PHP_OS), 'win') === 0) ? 'dll' : 'so';
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((@ini_get('enable_dl') || strtolower(@ini_get('enable_dl')) == 'on') && (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') && @dl($dll . ".$suffix")) ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to test whether we are able to connect to the database the user has specified
|
|
||||||
* and identify any problems (eg there are already tables with the names we want to use
|
|
||||||
*/
|
|
||||||
function connect_check_db($error_connect, &$error, $dbms, $table_prefix, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport)
|
|
||||||
{
|
|
||||||
global $phpbb_root_path, $phpEx, $config, $lang;
|
|
||||||
|
|
||||||
// Include the DB layer
|
|
||||||
include($phpbb_root_path . 'includes/db/' . $this->available_dbms[$dbms]['DRIVER'] . '.' . $phpEx);
|
|
||||||
|
|
||||||
// Instantiate it and set return on error true
|
|
||||||
$sql_db = 'dbal_' . $this->available_dbms[$dbms]['DRIVER'];
|
|
||||||
$db = new $sql_db();
|
|
||||||
$db->sql_return_on_error(true);
|
|
||||||
|
|
||||||
// Check that we actually have a database name before going any further.....
|
|
||||||
if ($dbms != 'sqlite' && $dbname === '')
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_NAME'];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure we don't have a daft user who thinks having the SQLite database in the forum directory is a good idea
|
|
||||||
if ($dbms == 'sqlite' && stripos(phpbb_realpath($dbhost), phpbb_realpath('../')) === 0)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_FORUM_PATH'];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the prefix length to ensure that index names are not too long and does not contain invalid characters
|
|
||||||
switch ($dbms)
|
|
||||||
{
|
|
||||||
case 'mysql':
|
|
||||||
case 'mysqli':
|
|
||||||
if (strpos($table_prefix, '-') !== false)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_PREFIX_INVALID'];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// no break;
|
|
||||||
|
|
||||||
case 'postgres':
|
|
||||||
$prefix_length = 36;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'mssql':
|
|
||||||
case 'mssql_odbc':
|
|
||||||
$prefix_length = 90;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'sqlite':
|
|
||||||
$prefix_length = 200;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'firebird':
|
|
||||||
case 'oracle':
|
|
||||||
$prefix_length = 6;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen($table_prefix) > $prefix_length)
|
|
||||||
{
|
|
||||||
$error[] = sprintf($lang['INST_ERR_PREFIX_TOO_LONG'], $prefix_length);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try and connect ...
|
|
||||||
if (is_array($db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false)))
|
|
||||||
{
|
|
||||||
$db_error = $db->sql_error();
|
|
||||||
$error[] = $lang['INST_ERR_DB_CONNECT'] . '<br />' . (($db_error['message']) ? $db_error['message'] : $lang['INST_ERR_DB_NO_ERROR']);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch ($dbms)
|
|
||||||
{
|
|
||||||
case 'mysql':
|
|
||||||
case 'mysqli':
|
|
||||||
$sql = 'SHOW TABLES';
|
|
||||||
$field = "Tables_in_{$dbname}";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'sqlite':
|
|
||||||
$sql = 'SELECT name
|
|
||||||
FROM sqlite_master
|
|
||||||
WHERE type = "table"';
|
|
||||||
$field = 'name';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'mssql':
|
|
||||||
case 'mssql_odbc':
|
|
||||||
$sql = "SELECT name
|
|
||||||
FROM sysobjects
|
|
||||||
WHERE type='U'";
|
|
||||||
$field = 'name';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'postgres':
|
|
||||||
$sql = "SELECT relname
|
|
||||||
FROM pg_class
|
|
||||||
WHERE relkind = 'r'
|
|
||||||
AND relname NOT LIKE 'pg\_%'";
|
|
||||||
$field = 'relname';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'firebird':
|
|
||||||
$sql = 'SELECT rdb$relation_name
|
|
||||||
FROM rdb$relations
|
|
||||||
WHERE rdb$view_source is null
|
|
||||||
AND rdb$system_flag = 0';
|
|
||||||
$field = 'rdb$relation_name';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'oracle':
|
|
||||||
$sql = 'SELECT table_name
|
|
||||||
FROM USER_TABLES';
|
|
||||||
$field = 'table_name';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
|
|
||||||
if ($row = $db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
// Likely matches for an existing phpBB installation
|
|
||||||
$temp_prefix = strtolower($table_prefix);
|
|
||||||
$table_ary = array($temp_prefix . 'attachments', $temp_prefix . 'config', $temp_prefix . 'sessions', $temp_prefix . 'topics', $temp_prefix . 'users');
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
// All phpBB installations will at least have config else it won't work
|
|
||||||
if (in_array(strtolower($row[$field]), $table_ary))
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_PREFIX'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while ($row = $db->sql_fetchrow($result));
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// Make sure that the user has selected a sensible DBAL for the DBMS actually installed
|
|
||||||
switch ($dbms)
|
|
||||||
{
|
|
||||||
case 'mysqli':
|
|
||||||
if (version_compare(mysqli_get_server_info($db->db_connect_id), '4.1.3', '<'))
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_MYSQLI'];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'sqlite':
|
|
||||||
if (version_compare(sqlite_libversion(), '2.8.2', '<'))
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_SQLITE'];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'firebird':
|
|
||||||
// check the version of FB, use some hackery if we can't get access to the server info
|
|
||||||
if ($db->service_handle !== false && function_exists('ibase_server_info'))
|
|
||||||
{
|
|
||||||
$val = @ibase_server_info($db->service_handle, IBASE_SVC_SERVER_VERSION);
|
|
||||||
preg_match('#V([\d.]+)#', $val, $match);
|
|
||||||
if ($match[1] < 2)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
|
||||||
}
|
|
||||||
$db_info = @ibase_db_info($db->service_handle, $dbname, IBASE_STS_HDR_PAGES);
|
|
||||||
|
|
||||||
preg_match('/^\\s*Page size\\s*(\\d+)/m', $db_info, $regs);
|
|
||||||
$page_size = intval($regs[1]);
|
|
||||||
if ($page_size < 8192)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$sql = "SELECT *
|
|
||||||
FROM RDB$FUNCTIONS
|
|
||||||
WHERE RDB$SYSTEM_FLAG IS NULL
|
|
||||||
AND RDB$FUNCTION_NAME = 'CHAR_LENGTH'";
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
$row = $db->sql_fetchrow($result);
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// if its a UDF, its too old
|
|
||||||
if ($row)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$sql = "SELECT FIRST 0 char_length('')
|
|
||||||
FROM RDB\$DATABASE";
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
if (!$result) // This can only fail if char_length is not defined
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup the stuff for our random table
|
|
||||||
$char_array = array_merge(range('A', 'Z'), range('0', '9'));
|
|
||||||
$char_len = mt_rand(7, 9);
|
|
||||||
$char_array_len = sizeof($char_array) - 1;
|
|
||||||
|
|
||||||
$final = '';
|
|
||||||
|
|
||||||
for ($i = 0; $i < $char_len; $i++)
|
|
||||||
{
|
|
||||||
$final .= $char_array[mt_rand(0, $char_array_len)];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create some random table
|
|
||||||
$sql = 'CREATE TABLE ' . $final . " (
|
|
||||||
FIELD1 VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
|
|
||||||
FIELD2 INTEGER DEFAULT 0 NOT NULL);";
|
|
||||||
$db->sql_query($sql);
|
|
||||||
|
|
||||||
// Create an index that should fail if the page size is less than 8192
|
|
||||||
$sql = 'CREATE INDEX ' . $final . ' ON ' . $final . '(FIELD1, FIELD2);';
|
|
||||||
$db->sql_query($sql);
|
|
||||||
|
|
||||||
if (ibase_errmsg() !== false)
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Kill the old table
|
|
||||||
$db->sql_query('DROP TABLE ' . $final . ';');
|
|
||||||
}
|
|
||||||
unset($final);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'oracle':
|
|
||||||
$sql = "SELECT *
|
|
||||||
FROM NLS_DATABASE_PARAMETERS
|
|
||||||
WHERE PARAMETER = 'NLS_RDBMS_VERSION'
|
|
||||||
OR PARAMETER = 'NLS_CHARACTERSET'";
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
$stats[$row['parameter']] = $row['value'];
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
if (version_compare($stats['NLS_RDBMS_VERSION'], '9.2', '<') && $stats['NLS_CHARACTERSET'] !== 'UTF8')
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_ORACLE'];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'postgres':
|
|
||||||
$sql = "SHOW server_encoding;";
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
$row = $db->sql_fetchrow($result);
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
if ($row['server_encoding'] !== 'UNICODE' && $row['server_encoding'] !== 'UTF8')
|
|
||||||
{
|
|
||||||
$error[] = $lang['INST_ERR_DB_NO_POSTGRES'];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$db->sql_close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($error_connect && (!isset($error) || !sizeof($error)))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate the drop down of available database options
|
|
||||||
*/
|
|
||||||
function dbms_select($default='')
|
|
||||||
{
|
|
||||||
$dbms_options = '';
|
|
||||||
foreach ($this->available_dbms as $dbms_name => $details)
|
|
||||||
{
|
|
||||||
$selected = ($dbms_name == $default) ? ' selected="selected"' : '';
|
|
||||||
$dbms_options .= '<option value="' . $dbms_name . '"' . $selected .'>' . $details['LABEL'] . '</option>';
|
|
||||||
}
|
|
||||||
return $dbms_options;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a list of available mail server authentication methods
|
* Generate a list of available mail server authentication methods
|
||||||
|
@ -2132,7 +1811,7 @@ class install_install extends module
|
||||||
*/
|
*/
|
||||||
var $db_config_options = array(
|
var $db_config_options = array(
|
||||||
'legend1' => 'DB_CONFIG',
|
'legend1' => 'DB_CONFIG',
|
||||||
'dbms' => array('lang' => 'DBMS', 'type' => 'select', 'options' => '$this->module->dbms_select(\'{VALUE}\')', 'explain' => false),
|
'dbms' => array('lang' => 'DBMS', 'type' => 'select', 'options' => 'dbms_select(\'{VALUE}\')', 'explain' => false),
|
||||||
'dbhost' => array('lang' => 'DB_HOST', 'type' => 'text:25:100', 'explain' => true),
|
'dbhost' => array('lang' => 'DB_HOST', 'type' => 'text:25:100', 'explain' => true),
|
||||||
'dbport' => array('lang' => 'DB_PORT', 'type' => 'text:25:100', 'explain' => true),
|
'dbport' => array('lang' => 'DB_PORT', 'type' => 'text:25:100', 'explain' => true),
|
||||||
'dbname' => array('lang' => 'DB_NAME', 'type' => 'text:25:100', 'explain' => false),
|
'dbname' => array('lang' => 'DB_NAME', 'type' => 'text:25:100', 'explain' => false),
|
||||||
|
@ -2172,76 +1851,6 @@ class install_install extends module
|
||||||
*/
|
*/
|
||||||
var $php_dlls_other = array('zlib', 'ftp', 'gd', 'xml');
|
var $php_dlls_other = array('zlib', 'ftp', 'gd', 'xml');
|
||||||
|
|
||||||
/**
|
|
||||||
* Details of the database management systems supported
|
|
||||||
*/
|
|
||||||
var $available_dbms = array(
|
|
||||||
'firebird' => array(
|
|
||||||
'LABEL' => 'FireBird',
|
|
||||||
'SCHEMA' => 'firebird',
|
|
||||||
'MODULE' => 'interbase',
|
|
||||||
'DELIM' => ';;',
|
|
||||||
'COMMENTS' => 'remove_remarks',
|
|
||||||
'DRIVER' => 'firebird'
|
|
||||||
),
|
|
||||||
'mysqli' => array(
|
|
||||||
'LABEL' => 'MySQL with MySQLi Extension',
|
|
||||||
'SCHEMA' => 'mysql_41',
|
|
||||||
'MODULE' => 'mysqli',
|
|
||||||
'DELIM' => ';',
|
|
||||||
'COMMENTS' => 'remove_remarks',
|
|
||||||
'DRIVER' => 'mysqli'
|
|
||||||
),
|
|
||||||
'mysql' => array(
|
|
||||||
'LABEL' => 'MySQL',
|
|
||||||
'SCHEMA' => 'mysql',
|
|
||||||
'MODULE' => 'mysql',
|
|
||||||
'DELIM' => ';',
|
|
||||||
'COMMENTS' => 'remove_remarks',
|
|
||||||
'DRIVER' => 'mysql'
|
|
||||||
),
|
|
||||||
'mssql' => array(
|
|
||||||
'LABEL' => 'MS SQL Server 2000+',
|
|
||||||
'SCHEMA' => 'mssql',
|
|
||||||
'MODULE' => 'mssql',
|
|
||||||
'DELIM' => 'GO',
|
|
||||||
'COMMENTS' => 'remove_comments',
|
|
||||||
'DRIVER' => 'mssql'
|
|
||||||
),
|
|
||||||
'mssql_odbc'=> array(
|
|
||||||
'LABEL' => 'MS SQL Server [ ODBC ]',
|
|
||||||
'SCHEMA' => 'mssql',
|
|
||||||
'MODULE' => 'odbc',
|
|
||||||
'DELIM' => 'GO',
|
|
||||||
'COMMENTS' => 'remove_comments',
|
|
||||||
'DRIVER' => 'mssql_odbc'
|
|
||||||
),
|
|
||||||
'oracle' => array(
|
|
||||||
'LABEL' => 'Oracle',
|
|
||||||
'SCHEMA' => 'oracle',
|
|
||||||
'MODULE' => 'oci8',
|
|
||||||
'DELIM' => '/',
|
|
||||||
'COMMENTS' => 'remove_comments',
|
|
||||||
'DRIVER' => 'oracle'
|
|
||||||
),
|
|
||||||
'postgres' => array(
|
|
||||||
'LABEL' => 'PostgreSQL 7.x/8.x',
|
|
||||||
'SCHEMA' => 'postgres',
|
|
||||||
'MODULE' => 'pgsql',
|
|
||||||
'DELIM' => ';',
|
|
||||||
'COMMENTS' => 'remove_comments',
|
|
||||||
'DRIVER' => 'postgres'
|
|
||||||
),
|
|
||||||
'sqlite' => array(
|
|
||||||
'LABEL' => 'SQLite',
|
|
||||||
'SCHEMA' => 'sqlite',
|
|
||||||
'MODULE' => 'sqlite',
|
|
||||||
'DELIM' => ';',
|
|
||||||
'COMMENTS' => 'remove_remarks',
|
|
||||||
'DRIVER' => 'sqlite'
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of the web-crawlers/bots we recognise by default
|
* A list of the web-crawlers/bots we recognise by default
|
||||||
*
|
*
|
||||||
|
|
|
@ -46,7 +46,7 @@ $lang = array_merge($lang, array(
|
||||||
'BEGIN_CONVERT' => 'Begin conversion',
|
'BEGIN_CONVERT' => 'Begin conversion',
|
||||||
'BLANK_PREFIX_FOUND' => 'A scan of your tables has shown a valid installation using no table prefix.',
|
'BLANK_PREFIX_FOUND' => 'A scan of your tables has shown a valid installation using no table prefix.',
|
||||||
'BOARD_NOT_INSTALLED' => 'No installation found',
|
'BOARD_NOT_INSTALLED' => 'No installation found',
|
||||||
'BOARD_NOT_INSTALLED_EXPLAIN' => 'To perform a conversion you need to have a default installation of phpBB3. Please note that for a conversion the new installation and the old installation need to reside within the same database. You may now want to <a href="%s">perform an installation</a>.',
|
'BOARD_NOT_INSTALLED_EXPLAIN' => 'To perform a conversion you need to have a default installation of phpBB3. You may now want to <a href="%s">perform an installation</a>.',
|
||||||
|
|
||||||
'CATEGORY' => 'Category',
|
'CATEGORY' => 'Category',
|
||||||
'CACHE_STORE' => 'Cache type',
|
'CACHE_STORE' => 'Cache type',
|
||||||
|
|
Loading…
Add table
Reference in a new issue