Resource icon

vBulletin Big Board Importer [vBulletin 3 + vBulletin 4] [Paid] 1.5.0

No permission to buy ($150.00)
Btw regarding the price:



I'm not interested in the vB4 importer. I suggest you to offer two versions: vB3 and vB4... it's a waste of money to pay the extra $60 for something that I'll not use. This way the price would be:

vB3 importer: $90
vB4 importer: $90

Much better ;)

vB3 and vB4 have almost identical schemas. They are the same importer. This is not a bundle containing something you don't need. Rather it is one importer with a configurable option to select vB3 or vB4. It's the same code with just a few differences that are controlled by the configurable option.
 
Excellent, thanks! I'll wait for 1.4 to finally move from vBulletin... I really hope that you can discuss with @Slavik about the chances of selling two versions: one for vB3 and one for vB4 imports. Thanks!

None,

The code for both is intertwined into the same export file. It's simply a flag you set

Code:
    // IS VB4? IF NOT THEN VB3
    public static $isVB4 = false;
 
I've done a standard import and it took far too long. Looking to try importing using this tool - what tables should I be emptying before running the import?
 
I've done a standard import and it took far too long. Looking to try importing using this tool - what tables should I be emptying before running the import?

This importer contains an Export and Import file. You run Export first, then Import. The Import already prunes tables before writing the prepared data so you don't need to do this manually.
 
Questions

1. I want to run Export.php step to step (not "Everything"), do it matter the order I go? If it matters, what's the order I should follow?
2. I do not want to import user ignored, post edit history, moderator log, attachments (see question 1). What file should I modify? Export.php or Import.php?
3. I noticed that mysql user of my XenForo database also needs access to my vBulletin database. Does the mysql user of my vBulletin database needs access to my XenForo database, too?
4. These are my vBulletin usergroupids:
(COPPA) Users Awaiting Moderation id4 (no users)
Administrators id6
Moderators id7 (no users)
Global Moderators id5
Registered Users id2
Unregistered / Not Logged In id1
Users Awaiting Email Confirmation id3
Banned Members id9
and this is how I'm mapping them on Export.php:
Code:
  // MAP VB GROUP IDS TO XF GROUP IDS
  public static $groupMap = array(
  6 => 3,
  5 => 4,
  2 => 2,
  1 => 1,
  3 => 2,
  );
  // THE BANNED GROUP ID IN VB
  // NEEDED SO THIS EXPORTER CAN IDENTIFY BANNED USERS IN VB
  public static $bannedGroupVB = 9;
4a. Is it ok to ignore those empty usergroups from the mapping?
4b. Is it ok to map "Users Awaiting Email Confirmation" against XF's usergroupid2?
4c. Any additional suggestion?
5. What vBulletin's user fields are imported by default? I have "Location", "Interests", "Ocupation" and "Homepage". If this importer gets data from the "Homepage" userfield, how I can ignore that data?
6. I want to import custom user fields. Example data:

vBulletin
Motherboard - field11

XenForo
Mainboard - field 5

Could you please give me an example of how to import this on the code:
Code:
exec('mysql -h' . $this->slaveDbHost . ' ' . $this->sourceDb . ' ' . $this->sourceDBuser . ' ' . $this->sourceDBpassword . ' -N -q -e "SET NAMES binary;SELECT SQL_NO_CACHE userid AS user_id, \'interests\' AS field_id, field3 AS field_value FROM userfield WHERE field3 != \'\' ORDER BY userid" ' . self::$extraOutCommand . ' > ' . self::$dataDir . 'xf_user_field_value.txt');

Problems I got on a test import:
1.
exporting users...
(...)
user profileERROR 1054 (42S22) at line 1: Unknown column 'userfield.field1' in 'field list'
(0 records in 0.03s)...
(...)
skipping user fieldstail: cannot open `/home/migration/xf_ip.txt' for reading: No such file or directory
(...)
2.
Lots of these:
data/avatars/l/0/609.jpg => No move
data/avatars/l/0/643.jpg => No move
data/avatars/l/0/65.jpg => No move
data/avatars/l/0/654.jpg => No move
data/avatars/l/0/709.jpg => No move
3.
exporting posts...
rm: cannot remove `/home/migration/xf_post_*': No such file or directory
And some others that I forgot to copy but I'll run a test import again after you answer my questions.

Feature requests:

1. Please include an option to import thread prefixes. This is a must.
2. Please make this compatible with XF 1.4
 
Last edited:
It was very hard to work around the necessity to have vb and xf databases at the same database server with the same login data. So my feature suggestion would be to make Export and Import files independant.

Another feature request would be to allow for non standard mysql ports.
 
Last edited:
@Super120

1) The order doesn't matter.

2) Attachments are written directly as part of the Export, so don't run that export step if you do not want attachments. The rest of those items can be commented out in the Import script.

3) Yes. Use the same user for both databases.

4) You should map all vB group ids to XF group ids. I suggest mapping 3 to 1.

5) Yes, those default fields are imported. It is easy to wipe the homepage after the import if you don't want it.

6) Just modify this part to specify the name of the field in XF (which you must create) and the id of the field in vB:

Rich (BB code):
\'interests\' AS field_id, field3 AS field_value

Re: Problems:

1) Did you delete field1 in vB?

2) Ignore that.

3) Ignore that.
 
I have my usergroups mapped in the Export file and have my banned usergroup identified as group 14, but I am getting an "undefined offset" error when the exporter encounters a banned user. I didn't think I was supposed to map the banned usergroup in the VB > XF group id list - I haven't mapped it in my test exports in the past.
 
I don't know why the standard importer doesn't ask you for usergroup id mapping nor custom user fields id mapping but this addon request you to do that. I think you should improve the code so it can import custom user fields without further configuration just like the standard importer.

Oh and by the way imho this big board importer should have all the features of the standard importer or at least those critical like thread prefixes. I bought this a few weeks ago and got hugely disappointed after seeing that this doesn't import thread prefixes. Well my bad because I should have checked before buying but anyway I think this should import thread prefixes by default.
 
There is also this setting in the mix:

Code:
	// THE BANNED GROUP ID IN VB
	// NEEDED SO THIS EXPORTER CAN IDENTIFY BANNED USERS IN VB
	public static $bannedGroupVB = 13;
 
There is also this setting in the mix:

Code:
    // THE BANNED GROUP ID IN VB
    // NEEDED SO THIS EXPORTER CAN IDENTIFY BANNED USERS IN VB
    public static $bannedGroupVB = 13;

Yeah, I had that filled out properly, and I would swear I never filled out the group to group mapping with the banned usergroup before on previous imports, just filled it into that banned group setting and it worked.

This imported properly:
Code:
        // MAP VB GROUP IDS TO XF GROUP IDS
        public static $groupMap = array(
                                1 => 1,
                                2 => 2,
                                3 => 1,
                                4 => 1,
                                5 => 4,
                                6 => 3,
                                7 => 4,
                                14 => 2,
                                15 => 2,
                                21 => 2,
                                27 => 2,
                                28 => 2,
                                29 => 2,
                                45 => 2,
                                46 => 5,
                        );

        // THE BANNED GROUP ID IN VB
        // NEEDED SO THIS EXPORTER CAN IDENTIFY BANNED USERS IN VB
        public static $bannedGroupVB = 14;

Without adding 14 => 2, the export failed with an undefined offset. It appears that it worked properly, though, importing all the users as banned with no issue. I'm just confused as to why I don't ever remember adding this setting in at least 3 other test exports I've done.
 
Last edited:
If I don't want reputation to come in as likes (i.e. when the new board comes online, everyone should have zero likes), can I simply comment this section out?

Code:
        else
        {
        // Likes
        $start = microtime(true);
        echo "          reputation as likes";
        exec('mysql -h' . $this->slaveDbHost . ' ' . $this->sourceDb . ' ' . $this->sourceDBuser . ' ' . $this->sourceDBpassword . ' -N -q -e "SET NAMES binary;SET @like_id = 0;SELECT SQL_NO_CACHE @like_id:=@like_id+1 AS like_id, \'post\' AS content_type, reputation.postid AS content_id, reputation.whoadded AS like_user_id, reputation.dateline AS like_date, reputation.userid AS content_user_id FROM reputation WHERE reputation > 0 OR (reason = \'\' AND reputation = 0) ORDER BY reputationid" ' . self::$extraOutCommand . ' > ' . self::$dataDir . 'xf_liked_content.txt');
        echo " (" . number_format(intval(shell_exec('wc -l ' . self::$dataDir . 'xf_liked_content.txt'))) . ' records in ' .  number_format(microtime(true) - $start, 2) . "s)...\r\n";
        }
 
Hope this helps others, Importer.php doesn't use correct db connection references even though its was referenced in the respective import/export php files, it was using db connection string defined in config.php.

Hi
We are going live with xenforo in few days. We have used big board importer. Right now existing users can login, but no new signupS. Here is the error below we saw in log, when someone is trying to register . I see there are records in xf_user_profile which are not in match with xf_user , does # of records in xf_user_profile match xf_user ?, should there be a case where there’s a user_id in xf_user_profile that is NOT in xf_user ? Please advise we need to get this fixed ASAP.

Zend_Db_Statement_Mysqli_Exception:Mysqli statement execute error : Duplicate entry '141683' for key 1 -library/Zend/Db/Statement/Mysqli.php:214
Generated By: Unknown Account,5 minutes ago
Stack Trace
#0 /apps/apache/forum/bh/.v/0.2/xenforo/library/Zend/Db/Statement.php(297): Zend_Db_Statement_Mysqli->_execute(Array)
#1 /apps/apache/forum/bh/.v/0.2/xenforo/library/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 /apps/apache/forum/bh/.v/0.2/xenforo/library/Zend/Db/Adapter/Abstract.php(574): Zend_Db_Adapter_Abstract->query('INSERT INTO `xf...', Array)
#3 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/DataWriter.php(1624): Zend_Db_Adapter_Abstract->insert('xf_user_profile', Array)
#4 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/DataWriter.php(1613): XenForo_DataWriter->_insert()
#5 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/DataWriter.php(1405): XenForo_DataWriter->_save()
#6 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/ControllerPublic/Register.php(281): XenForo_DataWriter->save()
#7 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/FrontController.php(347): XenForo_ControllerPublic_Register->actionRegister()
#8 /apps/apache/forum/bh/.v/0.2/xenforo/library/XenForo/FrontController.php(134): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#9 /apps/apache/forum/bh/.v/0.2/xenforo/index.php(13): XenForo_FrontController->run()
#10 {main}
Request State
array(3) {
["url"] => string(49) "http://xforum.bhsite.com/register/register"
["_GET"] => array(0) {
}
["_POST"] => array(14) {
["username"] => string(13) "jprakyahoo"
["email"] => string(20) "jjprakyahoo@yahoo.com"
["password"] => string(8) "********"
["password_confirm"] => string(8) "********"
["dob_month"] => string(2) "12"
["dob_day"] => string(2) "31"
["dob_year"] => string(4) "1975"
["gender"] => string(6) "female"
["timezone"] => string(16) "America/New_York"
["recaptcha_challenge_field"] => string(292) "03AHJ_VuvVfrrh5UBr3aq1hEBaXLBL--HWO0R_FwQuhHVq9CbAXAcU06IN7FH23OgQFNyrzkWzsPNo6Qgjv_rjEqghF8usJs7rxqZ6FPvASWhmhSnbzBmd2NiHTMIIiQmcl1zRItokag1z_TgQ7kdbzd5Cmb_7DniVtIcCf9taKEFe2nYmPXLyanF-et1mbPaSARJBGHmaQTmqBf5OesZ1xfECF7tRecQdv8s27V7pPfBsyskDoUSeH13UdFr-jR48T5cvKqxeXogngFgqxaGrQfDlna44dX5IHA"
["recaptcha_response_field"] => string(18) "inclination deceiz"
["agree"] => string(1) "1"
["_xfToken"] => string(8) "********"
["reg_key"] => string(32) "df602071c69ce1c281a8f7e98b2594d7"
}
}
 
If I don't want reputation to come in as likes (i.e. when the new board comes online, everyone should have zero likes), can I simply comment this section out?

Well I had to do another round of testing so I discovered that this does not, in fact, work. The users still have their reps converted to likes.

Before I go through multiple rounds of testing the dissection of these scripts, is there a clean or known way to stop the importing of reputation as likes @Jake Bunce ?
 
Comment out the section on the Import script that imports the likes file.

I tried that... it seems to get rid of the association of the like to a post itself (i.e. there are no posts that show they've been liked) but it doesn't remove likes from the users (e.g. my user has 920 likes post-migration).
 
Top Bottom