Register
phpBB.com Wiki · Home Projects Help

root / trunk / phpBB / install / install_convert.php

1 6847 acydburn
<?php
2 8130 acydburn
/**
3 6847 acydburn
*
4 6847 acydburn
* @package install
5 6847 acydburn
* @version $Id$
6 8130 acydburn
* @copyright (c) 2006 phpBB Group
7 8130 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 6847 acydburn
*
9 6847 acydburn
*/
10 6847 acydburn
11 6847 acydburn
/**
12 6847 acydburn
*/
13 6847 acydburn
14 6847 acydburn
if (!defined('IN_INSTALL'))
15 6847 acydburn
{
16 6847 acydburn
	// Someone has tried to access the file direct. This is not a good idea, so exit
17 6847 acydburn
	exit;
18 6847 acydburn
}
19 6847 acydburn
20 6847 acydburn
if (!empty($setmodules))
21 6847 acydburn
{
22 6847 acydburn
	$module[] = array(
23 6847 acydburn
		'module_type'		=> 'install',
24 6847 acydburn
		'module_title'		=> 'CONVERT',
25 8572 acydburn
		'module_filename'	=> substr(basename(__FILE__), 0, -strlen(PHP_EXT)-1),
26 6847 acydburn
		'module_order'		=> 20,
27 6847 acydburn
		'module_subs'		=> '',
28 6847 acydburn
		'module_stages'		=> array('INTRO', 'SETTINGS', 'IN_PROGRESS', 'FINAL'),
29 6847 acydburn
		'module_reqs'		=> ''
30 6847 acydburn
	);
31 6847 acydburn
}
32 6847 acydburn
33 6939 acydburn
/**
34 6939 acydburn
* Class holding all convertor-specific details.
35 6939 acydburn
* @package install
36 6939 acydburn
*/
37 6847 acydburn
class convert
38 6847 acydburn
{
39 6872 acydburn
	var $options = array();
40 6847 acydburn
41 6847 acydburn
	var $convertor_tag = '';
42 6995 naderman
	var $src_dbms = '';
43 6995 naderman
	var $src_dbhost = '';
44 6995 naderman
	var $src_dbport = '';
45 6995 naderman
	var $src_dbuser = '';
46 6995 naderman
	var $src_dbpasswd = '';
47 6995 naderman
	var $src_dbname = '';
48 6847 acydburn
	var $src_table_prefix = '';
49 6847 acydburn
50 6847 acydburn
	var $convertor_data = array();
51 6847 acydburn
	var $tables = array();
52 6847 acydburn
	var $config_schema = array();
53 6847 acydburn
	var $convertor = array();
54 6995 naderman
	var $src_truncate_statement = 'DELETE FROM ';
55 6847 acydburn
	var $truncate_statement = 'DELETE FROM ';
56 6847 acydburn
57 6847 acydburn
	var $fulltext_search;
58 6847 acydburn
59 6847 acydburn
	// Batch size, can be adjusted by the conversion file
60 6860 acydburn
	// For big boards a value of 6000 seems to be optimal
61 6860 acydburn
	var $batch_size = 2000;
62 6847 acydburn
	// Number of rows to be inserted at once (extended insert) if supported
63 6860 acydburn
	// For installations having enough memory a value of 60 may be good.
64 6860 acydburn
	var $num_wait_rows = 20;
65 6847 acydburn
66 6860 acydburn
	// Mysqls internal recoding engine messing up with our (better) functions? We at least support more encodings than mysql so should use it in favor.
67 6860 acydburn
	var $mysql_convert = false;
68 6860 acydburn
69 6847 acydburn
	var $p_master;
70 6847 acydburn
71 8295 davidmj
	function __construct(&$p_master)
72 6847 acydburn
	{
73 6847 acydburn
		$this->p_master = &$p_master;
74 6847 acydburn
	}
75 6847 acydburn
}
76 6847 acydburn
77 6939 acydburn
/**
78 6939 acydburn
* Convert class for conversions
79 6939 acydburn
* @package install
80 6939 acydburn
*/
81 6847 acydburn
class install_convert extends module
82 6847 acydburn
{
83 6847 acydburn
	/**
84 6847 acydburn
	* Variables used while converting, they are accessible from the global variable $convert
85 6847 acydburn
	*/
86 6847 acydburn
	function install_convert(&$p_master)
87 6847 acydburn
	{
88 6847 acydburn
		$this->p_master = &$p_master;
89 6847 acydburn
	}
90 6847 acydburn
91 6847 acydburn
	function main($mode, $sub)
92 6847 acydburn
	{
93 9240 acydburn
		global $lang, $template, $config, $language, $table_prefix;
94 6847 acydburn
		global $convert;
95 6847 acydburn
96 6847 acydburn
		$this->tpl_name = 'install_convert';
97 6847 acydburn
		$this->mode = $mode;
98 6847 acydburn
99 6847 acydburn
		$convert = new convert($this->p_master);
100 6847 acydburn
101 6847 acydburn
		switch ($sub)
102 6847 acydburn
		{
103 6847 acydburn
			case 'intro':
104 6847 acydburn
				// Try opening config file
105 6847 acydburn
				// @todo If phpBB is not installed, we need to do a cut-down installation here
106 6847 acydburn
				// For now, we redirect to the installation script instead
107 8572 acydburn
				if (@file_exists(PHPBB_ROOT_PATH . 'config.' . PHP_EXT))
108 6847 acydburn
				{
109 8572 acydburn
					include(PHPBB_ROOT_PATH . 'config.' . PHP_EXT);
110 6847 acydburn
				}
111 6847 acydburn
112 6847 acydburn
				if (!defined('PHPBB_INSTALLED'))
113 6847 acydburn
				{
114 6872 acydburn
					$template->assign_vars(array(
115 6872 acydburn
						'S_NOT_INSTALLED'		=> true,
116 6872 acydburn
						'TITLE'					=> $lang['BOARD_NOT_INSTALLED'],
117 8572 acydburn
						'BODY'					=> sprintf($lang['BOARD_NOT_INSTALLED_EXPLAIN'], append_sid('install/index', 'mode=install&amp;language=' . $language)),
118 6872 acydburn
					));
119 6872 acydburn
120 6872 acydburn
					return;
121 6847 acydburn
				}
122 6847 acydburn
123 8572 acydburn
				require(PHPBB_ROOT_PATH . 'config.' . PHP_EXT);
124 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/constants.' . PHP_EXT);
125 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/db/' . $dbms . '.' . PHP_EXT);
126 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/functions_convert.' . PHP_EXT);
127 6847 acydburn
128 6847 acydburn
				$db = new $sql_db();
129 7009 davidmj
				$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, true);
130 6847 acydburn
				unset($dbpasswd);
131 6847 acydburn
132 6847 acydburn
				// We need to fill the config to let internal functions correctly work
133 6847 acydburn
				$sql = 'SELECT *
134 6847 acydburn
					FROM ' . CONFIG_TABLE;
135 6847 acydburn
				$result = $db->sql_query($sql);
136 6847 acydburn
137 6847 acydburn
				$config = array();
138 6847 acydburn
				while ($row = $db->sql_fetchrow($result))
139 6847 acydburn
				{
140 6847 acydburn
					$config[$row['config_name']] = $row['config_value'];
141 6847 acydburn
				}
142 6847 acydburn
				$db->sql_freeresult($result);
143 6847 acydburn
144 6847 acydburn
				// Detect if there is already a conversion in progress at this point and offer to resume
145 6847 acydburn
				// It's quite possible that the user will get disconnected during a large conversion so they need to be able to resume it
146 6847 acydburn
				$new_conversion = request_var('new_conv', 0);
147 6847 acydburn
148 6847 acydburn
				if ($new_conversion)
149 6847 acydburn
				{
150 6847 acydburn
					$config['convert_progress'] = '';
151 6995 naderman
					$config['convert_db_server'] = '';
152 6995 naderman
					$config['convert_db_user'] = '';
153 6995 naderman
					$db->sql_query('DELETE FROM ' . CONFIG_TABLE . "
154 6995 naderman
						WHERE config_name = 'convert_progress'
155 6995 naderman
							OR config_name = 'convert_db_server'
156 6995 naderman
							OR config_name = 'convert_db_user'"
157 6995 naderman
					);
158 6847 acydburn
				}
159 6847 acydburn
160 6847 acydburn
				// Let's see if there is a conversion in the works...
161 6872 acydburn
				$options = array();
162 6995 naderman
				if (!empty($config['convert_progress']) && !empty($config['convert_db_server']) && !empty($config['convert_db_user']) && !empty($config['convert_options']))
163 6847 acydburn
				{
164 6872 acydburn
					$options = unserialize($config['convert_progress']);
165 6995 naderman
					$options = array_merge($options, unserialize($config['convert_db_server']), unserialize($config['convert_db_user']), unserialize($config['convert_options']));
166 6847 acydburn
				}
167 6847 acydburn
168 6847 acydburn
				// This information should have already been checked once, but do it again for safety
169 6995 naderman
				if (!empty($options) && !empty($options['tag']) &&
170 7040 acydburn
					isset($options['dbms']) &&
171 7040 acydburn
					isset($options['dbhost']) &&
172 7040 acydburn
					isset($options['dbport']) &&
173 7040 acydburn
					isset($options['dbuser']) &&
174 7040 acydburn
					isset($options['dbpasswd']) &&
175 7040 acydburn
					isset($options['dbname']) &&
176 7040 acydburn
					isset($options['table_prefix']))
177 6847 acydburn
				{
178 6847 acydburn
					$this->page_title = $lang['CONTINUE_CONVERT'];
179 6847 acydburn
180 6847 acydburn
					$template->assign_vars(array(
181 6847 acydburn
						'TITLE'			=> $lang['CONTINUE_CONVERT'],
182 6847 acydburn
						'BODY'			=> $lang['CONTINUE_CONVERT_BODY'],
183 6847 acydburn
						'L_NEW'			=> $lang['CONVERT_NEW_CONVERSION'],
184 6847 acydburn
						'L_CONTINUE'	=> $lang['CONTINUE_OLD_CONVERSION'],
185 6847 acydburn
						'S_CONTINUE'	=> true,
186 6847 acydburn
187 8215 kellanved
						'U_NEW_ACTION'		=> $this->p_master->module_url . "?mode={$this->mode}&amp;sub=intro&amp;new_conv=1&amp;language=$language",
188 8215 kellanved
						'U_CONTINUE_ACTION'	=> $this->p_master->module_url . "?mode={$this->mode}&amp;sub=in_progress&amp;tag={$options['tag']}{$options['step']}&amp;language=$language",
189 6847 acydburn
					));
190 6847 acydburn
191 6847 acydburn
					return;
192 6847 acydburn
				}
193 6847 acydburn
194 7118 acydburn
				$this->list_convertors($sub);
195 6847 acydburn
196 6847 acydburn
			break;
197 6847 acydburn
198 6847 acydburn
			case 'settings':
199 7118 acydburn
				$this->get_convert_settings($sub);
200 6847 acydburn
			break;
201 6847 acydburn
202 6847 acydburn
			case 'in_progress':
203 7118 acydburn
				$this->convert_data($sub);
204 6847 acydburn
			break;
205 6847 acydburn
206 6847 acydburn
			case 'final':
207 6847 acydburn
				$this->page_title = $lang['CONVERT_COMPLETE'];
208 6847 acydburn
209 6847 acydburn
				$template->assign_vars(array(
210 6847 acydburn
					'TITLE'		=> $lang['CONVERT_COMPLETE'],
211 6847 acydburn
					'BODY'		=> $lang['CONVERT_COMPLETE_EXPLAIN'],
212 6847 acydburn
				));
213 6964 acydburn
214 6964 acydburn
				// If we reached this step (conversion completed) we want to purge the cache and log the user out.
215 6964 acydburn
				// This is for making sure the session get not screwed due to the 3.0.x users table being completely new.
216 9240 acydburn
				phpbb::$acm->purge();
217 6964 acydburn
218 8572 acydburn
				require(PHPBB_ROOT_PATH . 'config.' . PHP_EXT);
219 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/constants.' . PHP_EXT);
220 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/db/' . $dbms . '.' . PHP_EXT);
221 8572 acydburn
				require(PHPBB_ROOT_PATH . 'includes/functions_convert.' . PHP_EXT);
222 6964 acydburn
223 6969 acydburn
				$db = new $sql_db();
224 7009 davidmj
				$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, true);
225 6969 acydburn
				unset($dbpasswd);
226 6969 acydburn
227 7428 naderman
				$sql = 'SELECT config_value
228 7428 naderman
					FROM ' . CONFIG_TABLE . '
229 7428 naderman
					WHERE config_name = \'search_type\'';
230 7428 naderman
				$result = $db->sql_query($sql);
231 7428 naderman
232 7428 naderman
				if ($db->sql_fetchfield('config_value') != 'fulltext_mysql')
233 7428 naderman
				{
234 7428 naderman
					$template->assign_vars(array(
235 7428 naderman
						'S_ERROR_BOX'	=> true,
236 7428 naderman
						'ERROR_TITLE'	=> $lang['SEARCH_INDEX_UNCONVERTED'],
237 7428 naderman
						'ERROR_MSG'		=> $lang['SEARCH_INDEX_UNCONVERTED_EXPLAIN'],
238 7428 naderman
					));
239 7428 naderman
				}
240 7428 naderman
241 8313 davidmj
				if ($db->truncate)
242 6964 acydburn
				{
243 8313 davidmj
					$db->sql_query('TRUNCATE TABLE ' . SESSIONS_KEYS_TABLE);
244 8313 davidmj
					$db->sql_query('TRUNCATE TABLE ' . SESSIONS_TABLE);
245 6964 acydburn
				}
246 8313 davidmj
				else
247 8313 davidmj
				{
248 8313 davidmj
					$db->sql_query('DELETE FROM ' . SESSIONS_KEYS_TABLE);
249 8313 davidmj
					$db->sql_query('DELETE FROM ' . SESSIONS_TABLE);
250 8313 davidmj
				}
251 6964 acydburn
252 6847 acydburn
			break;
253 6847 acydburn
		}
254 6847 acydburn
	}
255 6847 acydburn
256 6847 acydburn
	/**
257 6847 acydburn
	* Generate a list of all available conversion modules
258 6847 acydburn
	*/
259 7118 acydburn
	function list_convertors($sub)
260 6847 acydburn
	{
261 8572 acydburn
		global $lang, $language, $template;
262 6847 acydburn
263 6847 acydburn
		$this->page_title = $lang['SUB_INTRO'];
264 6847 acydburn
265 6847 acydburn
		$template->assign_vars(array(
266 6847 acydburn
			'TITLE'		=> $lang['CONVERT_INTRO'],
267 6847 acydburn
			'BODY'		=> $lang['CONVERT_INTRO_BODY'],
268 6847 acydburn
269 6847 acydburn
			'L_AUTHOR'					=> $lang['AUTHOR'],
270 6847 acydburn
			'L_AVAILABLE_CONVERTORS'	=> $lang['AVAILABLE_CONVERTORS'],
271 6847 acydburn
			'L_CONVERT'					=> $lang['CONVERT'],
272 6847 acydburn
			'L_NO_CONVERTORS'			=> $lang['NO_CONVERTORS'],
273 8092 acydburn
			'L_OPTIONS'					=> $lang['CONVERT_OPTIONS'],
274 6847 acydburn
			'L_SOFTWARE'				=> $lang['SOFTWARE'],
275 6847 acydburn
			'L_VERSION'					=> $lang['VERSION'],
276 6847 acydburn
277 6847 acydburn
			'S_LIST'	=> true,
278 6847 acydburn
		));
279 6847 acydburn
280 6847 acydburn
		$convertors = $sort = array();
281 6847 acydburn
		$get_info = true;
282 6847 acydburn
283 6912 acydburn
		$handle = @opendir('./convertors/');
284 6912 acydburn
285 6912 acydburn
		if (!$handle)
286 6912 acydburn
		{
287 6912 acydburn
			$this->error('Unable to access the convertors directory', __LINE__, __FILE__);
288 6912 acydburn
		}
289 6912 acydburn
290 6847 acydburn
		while ($entry = readdir($handle))
291 6847 acydburn
		{
292 8572 acydburn
			if (preg_match('/^convert_([a-z0-9_]+).' . PHP_EXT . '$/i', $entry, $m))
293 6847 acydburn
			{
294 6847 acydburn
				include('./convertors/' . $entry);
295 6847 acydburn
				if (isset($convertor_data))
296 6847 acydburn
				{
297 6847 acydburn
					$sort[strtolower($convertor_data['forum_name'])] = sizeof($convertors);
298 8616 acydburn
299 6847 acydburn
					$convertors[] = array(
300 6847 acydburn
						'tag'			=>	$m[1],
301 6847 acydburn
						'forum_name'	=>	$convertor_data['forum_name'],
302 6847 acydburn
						'version'		=>	$convertor_data['version'],
303 6995 naderman
						'dbms'			=>	$convertor_data['dbms'],
304 6995 naderman
						'dbhost'		=>	$convertor_data['dbhost'],
305 6995 naderman
						'dbport'		=>	$convertor_data['dbport'],
306 6995 naderman
						'dbuser'		=>	$convertor_data['dbuser'],
307 6995 naderman
						'dbpasswd'		=>	$convertor_data['dbpasswd'],
308 6995 naderman
						'dbname'		=>	$convertor_data['dbname'],
309 6847 acydburn
						'table_prefix'	=>	$convertor_data['table_prefix'],
310 6847 acydburn
						'author'		=>	$convertor_data['author']
311 6847 acydburn
					);
312 6847 acydburn
				}
313 6847 acydburn
				unset($convertor_data);
314 6847 acydburn
			}
315 6847 acydburn
		}
316 6847 acydburn
		closedir($handle);
317 6847 acydburn
318 6847 acydburn
		@ksort($sort);
319 6847 acydburn
320 6847 acydburn
		foreach ($sort as $void => $index)
321 6847 acydburn
		{
322 6847 acydburn
			$template->assign_block_vars('convertors', array(
323 6847 acydburn
				'AUTHOR'	=> $convertors[$index]['author'],
324 6847 acydburn
				'SOFTWARE'	=> $convertors[$index]['forum_name'],
325 6847 acydburn
				'VERSION'	=> $convertors[$index]['version'],
326 6847 acydburn
327 8215 kellanved
				'U_CONVERT'	=> $this->p_master->module_url . "?mode={$this->mode}&amp;language=$language&amp;sub=settings&amp;tag=" . $convertors[$index]['tag'],
328 6847 acydburn
			));
329 6847 acydburn
		}
330 6847 acydburn
	}
331 6847 acydburn
332 6847 acydburn
	/**
333 6847 acydburn
	*/
334 7118 acydburn
	function get_convert_settings($sub)
335 6847 acydburn
	{
336 9240 acydburn
		global $lang, $language, $template, $db, $config;
337 6847 acydburn
338 8572 acydburn
		require(PHPBB_ROOT_PATH . 'config.' . PHP_EXT);
339 8572 acydburn
		require(PHPBB_ROOT_PATH . 'includes/constants.' . PHP_EXT);
340 8572 acydburn
		require(PHPBB_ROOT_PATH . 'includes/db/' . $dbms . '.' . PHP_EXT);
341 8572 acydburn
		require(PHPBB_ROOT_PATH . 'includes/functions_convert.' . PHP_EXT);
342 6847 acydburn
343 6847 acydburn
		$db = new $sql_db();
344 7009 davidmj
		$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, true);
345 6847 acydburn
		unset($dbpasswd);
346 6847 acydburn
347 6847 acydburn
		$this->page_title = $lang['STAGE_SETTINGS'];
348 6847 acydburn
349 6847 acydburn
		// We need to fill the config to let internal functions correctly work
350 6847 acydburn
		$sql = 'SELECT *
351 6847 acydburn
			FROM ' . CONFIG_TABLE;
352 6847 acydburn
		$result = $db->sql_query($sql);
353 6847 acydburn
354 6847 acydburn
		$config = array();
355 6847 acydburn
		while ($row = $db->sql_fetchrow($result))
356 6847 acydburn
		{
357 6847 acydburn
			$config[$row['config_name']] = $row['config_value'];
358 6847 acydburn
		}
359 6847 acydburn
		$db->sql_freeresult($result);
360 6847 acydburn
361 6847 acydburn
		$convertor_tag = request_var('tag', '');
362 6847 acydburn
363 6847 acydburn
		if (empty($convertor_tag))
364 6847 acydburn
		{
365 6847 acydburn
			$this->p_master->error($lang['NO_CONVERT_SPECIFIED'], __LINE__, __FILE__);
366 6847 acydburn
		}
367 6847 acydburn
		$get_info = true;
368 6847 acydburn
369 6847 acydburn
		// check security implications of direct inclusion
370 6847 acydburn
		$convertor_tag = basename($convertor_tag);
371 8572 acydburn
		if (!file_exists('./convertors/convert_' . $convertor_tag . '.' . PHP_EXT))
372 6847 acydburn
		{
373 6847 acydburn
			$this->p_master->error($lang['CONVERT_NOT_EXIST'], __LINE__, __FILE__);
374 6847 acydburn
		}
375 6847 acydburn
376 8572 acydburn
		include('./convertors/convert_' . $convertor_tag . '.' . PHP_EXT);
377 6847 acydburn
378 6847 acydburn
		// The test_file is a file that should be present in the location of the old board.
379 6847 acydburn
		if (!isset($test_file))
380 6847 acydburn
		{
381 6847 acydburn
			$this->p_master->error($lang['DEV_NO_TEST_FILE'], __LINE__, __FILE__);
382 6847 acydburn
		}
383 6847 acydburn
384 9230 acydburn
		$submit = phpbb_request::is_set_post('submit');
385 6847 acydburn
386 6995 naderman
		$src_dbms			= request_var('src_dbms', $convertor_data['dbms']);
387 6995 naderman
		$src_dbhost			= request_var('src_dbhost', $convertor_data['dbhost']);
388 6995 naderman
		$src_dbport			= request_var('src_dbport', $convertor_data['dbport']);
389 6995 naderman
		$src_dbuser			= request_var('src_dbuser', $convertor_data['dbuser']);
390 6995 naderman
		$src_dbpasswd		= request_var('src_dbpasswd', $convertor_data['dbpasswd']);
391 6995 naderman
		$src_dbname			= request_var('src_dbname', $convertor_data['dbname']);
392 6847 acydburn
		$src_table_prefix	= request_var('src_table_prefix', $convertor_data['table_prefix']);
393 6872 acydburn
		$forum_path			= request_var('forum_path', $convertor_data['forum_path']);
394 6872 acydburn
		$refresh			= request_var('refresh', 1);
395 6847 acydburn
396 6847 acydburn
		// Default URL of the old board
397 6847 acydburn
		// @todo Are we going to use this for attempting to convert URL references in posts, or should we remove it?
398 6847 acydburn
		//		-> We should convert old urls to the new relative urls format
399 6847 acydburn
		// $src_url = request_var('src_url', 'Not in use at the moment');
400 6847 acydburn
401 7428 naderman
		// strip trailing slash from old forum path
402 7428 naderman
		$forum_path = (strlen($forum_path) && $forum_path[strlen($forum_path) - 1] == '/') ? substr($forum_path, 0, -1) : $forum_path;
403 7428 naderman
404 6847 acydburn
		$error = array();
405 6847 acydburn
		if ($submit)
406 6847 acydburn
		{
407 8401 vic
			if (!@file_exists('./../' . $forum_path . '/' . $test_file))
408 6847 acydburn
			{
409 6872 acydburn
				$error[] = sprintf($lang['COULD_NOT_FIND_PATH'], $forum_path);
410 6847 acydburn
			}
411 6847 acydburn
412 6995 naderman
			$connect_test = false;
413 6996 naderman
			$available_dbms = get_available_dbms(false, true, true);
414 6995 naderman
415 6995 naderman
			if (!isset($available_dbms[$src_dbms]) || !$available_dbms[$src_dbms]['AVAILABLE'])
416 6847 acydburn
			{
417 6995 naderman
				$error['db'][] = $lang['INST_ERR_NO_DB'];
418 6995 naderman
				$connect_test = false;
419 6995 naderman
			}
420 6995 naderman
			else
421 6995 naderman
			{
422 8290 acydburn
				$connect_test = connect_check_db(true, $error, $available_dbms[$src_dbms], $src_table_prefix, $src_dbhost, $src_dbuser, htmlspecialchars_decode($src_dbpasswd), $src_dbname, $src_dbport, true, ($src_dbms == $dbms) ? false : true, false);
423 6995 naderman
			}
424 6995 naderman
425 6995 naderman
			// The forum prefix of the old and the new forum can only be the same if two different databases are used.
426 6995 naderman
			if ($src_table_prefix == $table_prefix && $src_dbms == $dbms && $src_dbhost == $dbhost && $src_dbport == $dbport && $src_dbname == $dbname)
427 6995 naderman
			{
428 6847 acydburn
				$error[] = sprintf($lang['TABLE_PREFIX_SAME'], $src_table_prefix);
429 6847 acydburn
			}
430 6847 acydburn
431 6847 acydburn
			// Check table prefix
432 6847 acydburn
			if (!sizeof($error))
433 6847 acydburn
			{
434 6995 naderman
				// initiate database connection to old db if old and new db differ
435 6995