Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
After vBulletin Roles Migration we can migrate the vBulletin users.
The following was added to the vbulletin_user.inc
Database::addConnectionInfo('for_user_migration', 'default', array(
'driver' => 'mysql',
'database' => 'mysite_vbdatabase',
'username' => 'mysite_d7user',
'password' => 'myd7userpassword',
'host' => 'localhost',
'prefix' => 'vb_',
));
class vBulletinUserMigration extends vBulletinMigration {
public function __construct() {
parent::__construct();
$this->description = t('Migrate vBulletin users');
// Set the source table's primary key
$this->map = new MigrateSQLMap(
$this->machineName,
array(
'userid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'description' => 'watw Unique user ID',
'alias' => 'u',
),
),
MigrateDestinationUser::getKeySchema(),
'for_user_migration'
);
// Set the query to get the source object
$query = Database::getConnection('default', 'for_user_migration')
->select('user', 'u')
->fields('u', array(
'userid',
'usergroupid',
'membergroupids',
'displaygroupid',
'username',
'password',
'passworddate',
'email',
'styleid',
'parentemail',
'icq',
'aim',
'yahoo',
'msn',
'skype',
'showvbcode',
'showbirthday',
'usertitle',
'customtitle',
'joindate',
'daysprune',
'lastvisit',
'lastactivity',
'lastpost',
'posts',
'reputation',
'reputationlevelid',
'timezoneoffset',
'pmpopup',
'avatarid',
'avatarrevision',
'profilepicrevision',
'options',
'birthday',
'birthday_search',
'maxposts',
'startofweek',
'ipaddress',
'referrerid',
'languageid',
'emailstamp',
'threadedmode',
'autosubscribe',
'pmtotal',
'pmunread',
'salt',
'adminoptions',
'lastpostid',
'sigpicrevision',
'ipoints',
'infractions',
'warnings',
'infractiongroupids',
'infractiongroupid',
'profilevisits',
'friendcount',
'friendreqcount',
'vmunreadcount',
'vmmoderatedcount',
'socgroupinvitecount',
'socgroupreqcount',
'pcunreadcount',
'pcmoderatedcount',
'gmmoderatedcount'
));
$count_query = Database::getConnection('default', 'for_user_migration')
->select('user', 'u');
$count_query->addExpression('COUNT(userid)', 'cnt');
$this->source = new MigrateSourceSQL($query, array(), $count_query, array('map_joinable' => FALSE));
$this->destination = new MigrateDestinationUser();
// Make the mappings
$this->addFieldMapping('name', 'username')
->description('Map vBulletin username to Drupal username.');
$this->addFieldMapping('mail', 'email')
->description('Import single vBulletin email field to both init and mail D7 fields');
$this->addFieldMapping('created', 'joindate')
->description('Map vBulletin join date to Drupal user created date field.');
$this->addFieldMapping('access', 'lastvisit');
$this->addFieldMapping('roles', 'usergroupid')
->separator(',')
->sourceMigration('vBulletinRoles');
$this->addFieldMapping('login', 'lastvisit');
$this->addFieldMapping('init', 'email')
->description('Import single vBulletin email field to both init and mail D7 fields');
$this->addFieldMapping('pathauto')
->description('Set to 0 for now');
$this->addFieldMapping('status')
->description('Can we import the vBulletin frozen usergroup with id 8 to have a blocked status in D7')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0004);
$this->addFieldMapping('pass')
->description('I think vBulletin 3x uses a salted MD5 and the old site also used a vBDrupal bridge so may be issues with D5 and D6 passwords to migrate to D7 but vBtoDrupal vbpassword module may help')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0005);
$this->addFieldMapping('timezone')
->description('Not sure how to translate vBulletin timezoneoffset integers of + and - default or GMT timezone to D7 region timezones')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0006);
$this->addFieldMapping('language')
->description('Not sure how to translate vBulletin languageid integer to D7 language field')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0006);
$this->addFieldMapping('path')
->description('Need redirect from vBulletin user link to best for SEO user path alias in D7')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0007);
$this->addFieldMapping('is_new')
->description('is_new is probably the best option but not sure')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0008);
$this->addFieldMapping('birthday')
->description('vBulletin birthday format needs attention to import into D7')
->issueGroup(t('Implementor Issues'))
->issuePriority(MigrateFieldMapping::ISSUE_PRIORITY_MEDIUM)
->issueNumber(0009);
// Unmapped source fields
$this->addUnmigratedSources(array(
'userid',
'usergroupid',
'membergroupids',
'displaygroupid',
'username',
'password',
'passworddate',
'email',
'styleid',
'parentemail',
'icq',
'aim',
'yahoo',
'msn',
'skype',
'showvbcode',
'showbirthday',
'usertitle',
'customtitle',
'joindate',
'daysprune',
'lastactivity',
'lastpost',
'posts',
'reputation',
'reputationlevelid',
'timezoneoffset',
'pmpopup',
'avatarid',
'avatarrevision',
'profilepicrevision',
'options',
'birthday_search',
'maxposts',
'startofweek',
'ipaddress',
'referrerid',
'languageid',
'emailstamp',
'threadedmode',
'autosubscribe',
'pmtotal',
'pmunread',
'salt',
'adminoptions',
'lastpostid',
'sigpicrevision',
'ipoints',
'infractions',
'warnings',
'infractiongroupids',
'infractiongroupid',
'profilevisits',
'friendcount',
'friendreqcount',
'vmunreadcount',
'vmmoderatedcount',
'socgroupinvitecount',
'socgroupreqcount',
'pcunreadcount',
'pcmoderatedcount',
'gmmoderatedcount'
));
// Unmapped destination fields
$this->addFieldMapping('signature') ->description(t('vBulletin long text signature to be replaced with one text and one link field in D7'))
->issueGroup(t('DNM'));
$this->addFieldMapping('signature_format') ->description(t('Will be set manually'))
->issueGroup(t('DNM'));
$this->addFieldMapping('picture') ->description(t('Will be reset in D7 to create new size and image types with imagecache'))
->issueGroup(t('DNM'));
$this->addFieldMapping('field_migrate_example_gender') ->description(t('Not used in vBulletin but might be a new field in D7'))
->issueGroup(t('DNM'));
$this->addFieldMapping('theme') ->description(t('Not used in vBulletin and themes will be different in D7'))
->issueGroup(t('DNM'));
$this->addFieldMapping('field_signature_link') ->description(t('vBulletin long text signature to be replaced with one text and one link field in D7'))
->issueGroup(t('DNM'));
}
}
As with vBulletin Roles Migration, the above includes a long list of fields that aren't need in my D7 site so they won't be migrated with ->issueGroup(t('DNM'));
There are probably also many fields that might not be in your own vBulletin setup, depending on any addons/plugins that you might have installed in vB