public function insertTables()
{
$InsertedCount = 0;
$Timer = new Gdn_Timer();
$Timer->start();
$Tables =& $this->Tables();
foreach ($Tables as $TableName => $TableInfo) {
if (val('Inserted', $TableInfo) || val('Skip', $TableInfo)) {
$InsertedCount++;
} else {
$this->Data['CurrentStepMessage'] = sprintf(t('%s of %s'), $InsertedCount, count($Tables));
if (strcasecmp($this->Overwrite(), 'Overwrite') == 0) {
switch ($TableName) {
case 'Permission':
$this->InsertPermissionTable();
break;
default:
$RowCount = $this->_InsertTable($TableName);
break;
}
} else {
switch ($TableName) {
case 'Permission':
$this->InsertPermissionTable();
break;
case 'UserDiscussion':
$Sql = "insert ignore :_UserDiscussion ( UserID, DiscussionID, DateLastViewed, Bookmarked )\n select zUserID._NewID, zDiscussionID._NewID, max(i.DateLastViewed) as DateLastViewed, max(i.Bookmarked) as Bookmarked\n from :_zUserDiscussion i\n left join :_zUser zUserID\n on i.UserID = zUserID.UserID\n left join :_zDiscussion zDiscussionID\n on i.DiscussionID = zDiscussionID.DiscussionID\n left join :_UserDiscussion ud\n on ud.UserID = zUserID._NewID and ud.DiscussionID = zDiscussionID._NewID\n where ud.UserID is null\n group by zUserID._NewID, zDiscussionID._NewID";
$this->query($Sql);
break;
case 'UserMeta':
$Sql = "insert ignore :_UserMeta ( UserID, Name, Value )\n select zUserID._NewID, i.Name, max(i.Value) as Value\n from :_zUserMeta i\n left join :_zUser zUserID\n on i.UserID = zUserID.UserID\n left join :_UserMeta um\n on zUserID._NewID = um.UserID and i.Name = um.Name\n where um.UserID is null\n group by zUserID._NewID, i.Name";
$this->query($Sql);
break;
case 'UserRole':
$Sql = "insert ignore :_UserRole ( UserID, RoleID )\n select zUserID._NewID, zRoleID._NewID\n from :_zUserRole i\n left join :_zUser zUserID\n on i.UserID = zUserID.UserID\n left join :_zRole zRoleID\n on i.RoleID = zRoleID.RoleID\n left join :_UserRole ur\n on zUserID._NewID = ur.UserID and zRoleID._NewID = ur.RoleID\n where i.UserID <> 0 and ur.UserID is null";
$this->query($Sql);
break;
default:
$RowCount = $this->_InsertTable($TableName);
}
}
$Tables[$TableName]['Inserted'] = true;
if (isset($RowCount)) {
$Tables[$TableName]['RowCount'] = $RowCount;
}
$InsertedCount++;
// Make sure the loading isn't taking too long.
if ($Timer->ElapsedTime() > $this->MaxStepTime) {
break;
}
}
}
$Result = $InsertedCount == count($this->Tables());
if ($Result) {
$this->Data['CurrentStepMessage'] = '';
}
return $Result;
}