private function MigrateUsers(Database $legacyDatabase, Database $currentDatabase) { $usersMigrated = MigrationSession::GetLastUserRow(); Log::Debug('Start migrating users. Starting at row %s', $usersMigrated); $getExisting = new AdHocCommand('select legacyid from users'); $reader = $currentDatabase->Query($getExisting); $knownIds = array(); while ($row = $reader->GetRow()) { $knownIds[] = $row['legacyid']; } $getGroups = new AdHocCommand('select groupid, memberid from user_groups'); $reader = $legacyDatabase->Query($getGroups); $userGroups = array(); while ($row = $reader->GetRow()) { $memberId = $row['memberid']; if (!array_key_exists($memberId, $userGroups)) { $userGroups[$memberId] = array(); } $userGroups[$memberId][] = $row['groupid']; } $getGroupMapping = new AdHocCommand('select group_id, legacyid from groups'); $reader = $currentDatabase->Query($getGroupMapping); $groupMap = array(); while ($row = $reader->GetRow()) { $groupMap[$row['legacyid']] = $row['group_id']; } $getUsers = new AdHocCommand("select memberid, email, password, fname, lname, phone, institution, position, e_add, e_mod, e_del, e_app, e_html, logon_name, is_admin, lang, timezone\n\t\tfrom login order by memberid limit {$usersMigrated}, 500"); $reader = $legacyDatabase->Query($getUsers); while ($row = $reader->GetRow()) { $legacyId = $row['memberid']; if (in_array($legacyId, $knownIds)) { continue; } $registerCommand = new RegisterUserCommand($row['logon_name'], $row['email'], $row['fname'], $row['lname'], '', '', Configuration::Instance()->GetDefaultTimezone(), empty($row['lang']) ? Configuration::Instance()->GetKey(ConfigKeys::LANGUAGE) : $row['lang'], Pages::DEFAULT_HOMEPAGE_ID, $row['phone'], $row['institution'], $row['position'], AccountStatus::ACTIVE, null, null); $newId = ServiceLocator::GetDatabase()->ExecuteInsert($registerCommand); $legacypassword = $row['password']; $currentDatabase->Execute(new AdHocCommand("update users set legacyid = \"{$legacyId}\", legacypassword=\"{$legacypassword}\" where user_id = {$newId}")); // migrate group assignments if (array_key_exists($legacyId, $userGroups)) { foreach ($userGroups[$legacyId] as $legacyGroupId) { $newGroupId = $groupMap[$legacyGroupId]; $currentDatabase->ExecuteInsert(new AddUserGroupCommand($newId, $newGroupId)); } } $usersMigrated++; MigrationSession::SetLastUserRow($usersMigrated); } Log::Debug('Done migrating users (%s users)', $usersMigrated); $getLegacyCount = new AdHocCommand('select count(*) as count from login'); $getMigratedCount = new AdHocCommand('select count(*) as count from users where legacyid is not null'); $progressCounts = $this->GetProgressCounts($getLegacyCount, $getMigratedCount); $this->page->SetProgress($progressCounts); $this->page->SetUsersMigrated($progressCounts->MigratedCount); MigrationSession::SetLastUserRow($progressCounts->MigratedCount); }
public function Execute(Database $database) { $insertReservation = new AddReservationCommand($this->instance->StartDate(), $this->instance->EndDate(), $this->instance->ReferenceNumber(), $this->series->SeriesId()); $reservationId = $database->ExecuteInsert($insertReservation); $insertReservationUser = new AddReservationUserCommand($reservationId, $this->series->UserId(), ReservationUserLevel::OWNER); $database->Execute($insertReservationUser); foreach ($this->instance->AddedParticipants() as $participantId) { $insertReservationUser = new AddReservationUserCommand($reservationId, $participantId, ReservationUserLevel::PARTICIPANT); $database->Execute($insertReservationUser); } foreach ($this->instance->AddedInvitees() as $inviteeId) { $insertReservationUser = new AddReservationUserCommand($reservationId, $inviteeId, ReservationUserLevel::INVITEE); $database->Execute($insertReservationUser); } }
function testGetsIncrementedIdForExecuteInsert() { $expectedInsertId = 10; $SqlCommand = new SqlCommand('query'); $cn = new FakeDBConnection(); $cn->_ExpectedInsertId = $expectedInsertId; $db = new Database($cn); $actualInsertId = $db->ExecuteInsert($SqlCommand); $this->assertTrue($cn->_ConnectWasCalled, 'Connect should be called for every query'); $this->assertEquals($SqlCommand, $cn->_LastExecuteCommand); $this->assertTrue($cn->_GetLastInsertIdCalled); $this->assertEquals($expectedInsertId, $actualInsertId); $this->assertTrue($cn->_DisconnectWasCalled, 'Disonnect should be called for every query'); }