Get("Site_Path");
$admin = $objConfig->Get("AdminDirectory");
if(!strlen($admin))
$admin = "admin";
$localURL=$rootURL."kernel/";
$imagesURL = $rootURL."admin/images";
$adminURL = $rootURL.$admin;
//admin only util
$pathtolocal = $pathtoroot."kernel/";
require_once ($pathtoroot."admin/include/elements.php");
require_once ($pathtoroot."kernel/admin/include/navmenu.php");
require_once ($pathtolocal."admin/include/navmenu.php");
require_once($pathtoroot."admin/toolbar.php");
//Set Section
$section = "in-portal:inlink_inport";
//Set Environment Variable
$envar = "env=" . BuildEnv();
$sec = $objSections->GetSection($section);
$title = admin_language("la_performing_import")." - ".admin_language("la_Step")." 4";
int_header(null,NULL,$title);
$import_steps = Array();
$import_steps[] = Array('id' => 'users', 'caption' => 'Users, avatars'); // users + avatars
$import_steps[] = Array('id' => 'user_banlist', 'caption' => 'Users Banrules'); // banned users
$import_steps[] = Array('id' => 'cats', 'caption' => 'Categories');
$import_steps[] = Array('id' => 'forums', 'caption' => 'Forums');
$import_steps[] = Array('id' => 'topics', 'caption' => 'Topics');
$import_steps[] = Array('id' => 'posts', 'caption' => 'Posts');
$import_steps[] = Array('id' => 'smiles', 'caption' => 'Smiles');
error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '250M');
function PrintStep($step_rec)
{
echo '
|
'.$step_rec['caption'].' |
0% ()
|
|
';
}
function echof($s) // not in use
{
echo $s;
flush();
}
?>
GetVariable('bb_prefix'); // may be phpBB uses prefix
$sql_type = $objSession->GetVariable("import_inlink_sql_type");
$db_server = $objSession->GetVariable("import_inlink_server");
$db_name = $objSession->GetVariable("import_inlink_db");
$db_user = $objSession->GetVariable("import_inlink_user");
$db_pass = $objSession->GetVariable("import_inlink_pass");
$import_category_id = $objSession->GetVariable('import_category_id');
$user_admin = $objSession->GetVariable("user_admin_values");
$user_regular = $objSession->GetVariable("user_regular_values");
//$admin_group =& new clsPortalGroup($user_admin);
$user_group =& new clsPortalGroup($user_regular);
// made connection to source database
$db =& ADONewConnection($sql_type);
$db->PConnect($db_server, $db_user, $db_pass, $db_name);
// get connection to destination database
$dst_db =& GetADODBConnection();
// if connection error occured, then say this
if(!$db)
{
echo "Database connection failed. DB Type: $sql_type, DB Server: $inlink_server, DB User: $inlink_user, DB Name: $inlink_db"; //fatal;
echo $db->ErrorMsg();
exit;
}
$begin_time = microtime();
// connection made, so begin import
// create custom fields for in-bulletin users (and show them on general tab)
$user_fields = new clsCustomFieldList(DT_USER);
$user_fields_created = $user_fields->GetFieldNames();
$uf_defs = Array( 'user_msn' => 'user_msnm', 'user_icq' => 'user_icq', 'user_aim' => 'user_aim',
'user_yahoo' => 'user_yim', 'user_website' => 'user_website',
'user_occupation' => 'user_occ', 'user_interests' => 'user_interests');
$pesistant_vars = Array('my_signature' => 'user_sig', 'bb_posts' => 'user_posts',
'smileys' => 'user_allowsmile', 'bbcode' => 'user_allowbbcode',
'bb_signatures' => 'user_attachsig');
foreach($uf_defs as $pending_uf => $no_in_use)
if( !in_array($pending_uf, $user_fields_created) ) // don't create one customfield twice :)
$user_fields->AddField(DT_USER, $pending_uf, '', 1, 'la_bb', 'la_'.$pending_uf, 'text', '');
// get users
$cache['users'] = Array();
$sql = 'SELECT * FROM '.$bb_prefix.'users ORDER BY user_id';
$rs = $db->Execute($sql);
InitCounter('users', $rs->RecordCount() );
// Create Anonymous User
$user =& $objUsers->Add_User('Guest', '', 'anonymous@user.com', time(), '', '', 1, '', '', '', '', '', '');
$cache['users'][ -1 ] = $user->UniqueId();
$cache['users'][ 0 ] = $user->UniqueId();
unset($user);
while(!$rs->EOF)
{
$rec =& $rs->fields;
$address = explode(',', $rec['user_from']); // state, country
foreach($address as $id => $addr_part) $address[$id] = trim($addr_part);
$user_state = isset( $address[0] ) ? $address[0] : '';
$user_country = isset( $address[1] ) ? $address[1] : '';
$user =& $objUsers->Add_User($rec['username'], $rec['user_password'], $rec['user_email'], $rec['user_regdate'],
'', '', $rec['user_active'], '', '', '', $user_state, '', $user_country);
$user_id = $user->UniqueId();
// set user pesistant variables (why not custom fields)
foreach($pesistant_vars as $dst_field => $src_field)
SetPersistantVariable($user_id, $dst_field, $rec[$src_field]);
// set user custom fields
foreach($uf_defs as $dst_field => $src_field)
$user->SetCustomField($dst_field, $rec[$src_field]);
$user->SaveCustomFields();
// add user to user_group specified (in import step 3)
$user_group->AddUser($user_id, 1);
// add created user to cache
$cache['users'][ $rec['user_id'] ] = Array('new_id' => $user_id, 'username' => $rec['username']);
$processed['users']++;
unset($user);
SetStepPercent('users');
$rs->MoveNext();
}
//unset($objUsers);
// get ban rules
$sql = 'SELECT * FROM '.$bb_prefix.'banlist ORDER BY ban_id';
$rs = $db->Execute($sql);
$banrule_priority = 1;
InitCounter('user_banlist', $rs->RecordCount() );
while(!$rs->EOF)
{
$rec =& $rs->fields;
if( $rec['ban_userid'] )
{
$tmp =& $objBanList->AddRule(DT_USER, 0, 'Login',1, $cache['users'][ $rec['ban_userid'] ]['username'], $banrule_priority, 1);
unset($tmp);
$banrule_priority++;
}
if( $rec['ban_ip'] )
{
$tmp =& $objBanList->AddRule(DT_USER, 0, 'ip',1, DecodeIP( $rec['ban_ip'] ), $banrule_priority, 1);
unset($tmp);
$banrule_priority++;
}
if( $rec['ban_email'] )
{
$tmp =& $objBanList->AddRule(DT_USER, 0, 'Email',1, $rec['ban_email'], $banrule_priority, 1);
unset($tmp);
$banrule_priority++;
}
$processed['user_banlist']++;
SetStepPercent('user_banlist');
$rs->MoveNext();
}
unset($objBanList);
// get categories
$cache['cats'] = Array();
$sql = 'SELECT * FROM '.$bb_prefix.'categories ORDER BY cat_order';
$rs = $db->Execute($sql);
InitCounter('cats', $rs->RecordCount() );
while(!$rs->EOF)
{
$rec =& $rs->fields;
$category =& $objCatList->Add( $import_category_id, $rec['cat_title'], $rec['cat_title'], time(),
0, 1, 2, 2, 2, $rec['cat_order'] / 10, '', '');
$cache['cats'][ $rec['cat_id'] ] = Array( 'new_id' => $category->UniqueId() );
$processed['cats']++;
SetStepPercent('cats');
unset($category);
$rs->MoveNext();
}
// get forums
$cache['forums'] = Array();
$sql = 'SELECT * FROM '.$bb_prefix.'forums ORDER BY cat_id';
$rs = $db->Execute($sql);
InitCounter('forums', $rs->RecordCount() );
while(!$rs->EOF)
{
$rec =& $rs->fields;
$category =& $objCatList->Add( $cache['cats'][ $rec['cat_id'] ]['new_id'], $rec['forum_name'],
$rec['forum_desc'], time(), 0, 1, 2, 2, 2, $rec['forum_order'], '', '');
$cache['forums'][ $rec['forum_id'] ] = Array( 'new_id' => $category->UniqueId() );
$processed['forums']++;
SetStepPercent('forums');
unset($category);
$rs->MoveNext();
}
//unset($objCatList);
// get topics
$cache['topics'] = Array();
$sql = 'SELECT * FROM '.$bb_prefix.'topics ORDER BY forum_id';
$rs = $db->Execute($sql);
InitCounter('topics', $rs->RecordCount() );
while(!$rs->EOF)
{
$rec =& $rs->fields;
$rec['topic_replies'] = $rec['topic_replies'] > 0 ? $rec['topic_replies'] : 0;
$topic =& $objTopicList->Add_Topic( $rec['topic_title'], $cache['forums'][ $rec['forum_id'] ]['new_id'],
1, 0, 0, $rec['topic_time'], GetUserID( $rec['topic_poster'] ),
Array('Posts' => $rec['topic_replies'], 'Views' => $rec['topic_views']) );
$cache['topics'][ $rec['topic_id'] ] = Array( 'new_id' => $topic->UniqueId() );
$processed['topics']++;
SetStepPercent('topics');
unset($topic);
$rs->MoveNext();
}
unset($objTopicList);
// get posts
$cache['posts'] = Array();
$sql = 'SELECT * FROM '.$bb_prefix.'posts p LEFT JOIN '.$bb_prefix.'posts_text pt ON pt.post_id = p.post_id ORDER BY topic_id';
$rs = $db->Execute($sql);
InitCounter('posts', $rs->RecordCount() + $total['topics'] ); // update each topic info too
while(!$rs->EOF)
{
$rec =& $rs->fields;
$post =& new clsPosting();
$post->Set( Array('IPAddress', 'PosterAlias', 'Subject', 'PostingText', 'CreatedOn', 'CreatedById', 'TopicId' ),
Array(
DecodeIP( $rec['poster_ip'] ),
GetUserName( $rec['poster_id'] ),
$rec['post_subject'],
$rec['post_text'],
$rec['post_time'],
GetUserID( $rec['poster_id'] ),
$cache['topics'][ $rec['topic_id'] ]['new_id'] )
);
$post->Create();
$cache['posts'][ $rec['post_id'] ] = Array( 'new_id' => $post->UniqueId() );
$processed['posts']++;
SetStepPercent('posts');
unset($post);
$rs->MoveNext();
}
// set lastpostid for each topic
$sql = 'SELECT topic_id, MAX(post_time) AS pt, post_id FROM '.$bb_prefix.' posts GROUP BY topic_id ORDER BY post_time DESC';
$rs = $db->Execute($sql);
$update_sql = 'UPDATE '.GetTablePrefix().'Topic SET LastPostId = %s, LastPostDate = %s';
while(!$rs->EOF)
{
$rec =& $rs->fields;
$tmp = sprintf($update_sql, $cache['posts'][ $rec['post_id'] ]['new_id'], $rec['pt']);
$db->Execute($tmp);
$processed['posts']++;
SetStepPercent('posts');
$rs->MoveNext();
}
// functions used
function SetPersistantVariable($user_id, $var_name, $var_value)
{
global $dst_db;
$sql_template = "REPLACE INTO ".GetTablePrefix()."PersistantSessionData (PortalUserId, VariableName, VariableValue) VALUES (%s,'%s','%s')";
$dst_db->Execute( sprintf($sql_template, $user_id, $var_name, $var_value) );
}
function SetStepPercent($step_id, $new_percent = false)
{
if($new_percent === false)
{
global $total, $processed, $progress_display;
$new_percent = ($processed[$step_id] / $total[$step_id]) * 100;
$new_percent = round($new_percent, 1);
if( $processed[$step_id] % $progress_display[$step_id] != 0 ) return false;
}
$time_runs = microtime() - $GLOBALS['begin_time'];
echo '';
flush();
}
function DecodeIP($ip)
{
$i = 0;
$ip_len = strlen($ip);
$ip_parts = Array();
while($i < $ip_len)
{
$ip_parts[] = hexdec( substr($ip, $i, 2) );
$i += 2;
}
return implode('.', $ip_parts);
}
function GetUserID($old_user_id)
{
global $cache;
return $cache['users'][ $old_user_id ]['new_id'];
}
function GetUserName($old_user_id)
{
global $cache;
return $cache['users'][ $old_user_id ]['username'];
}
function InitCounter($step_id, $total_count)
{
global $processed, $total, $progress_display;
$processed[$step_id] = 0;
$total[$step_id] = $total_count;
$progress_display[$step_id] = ceil($total[$step_id] / 10); // display progress in 1 of 10 times requested
}
?>