I spent some time this weekend coming up with a fix to import my board, which is v3.0.5, so YMMV if you decide to use this, however I figured I'd post it here in case anyone is suffering the same problems.
This patch gets rid of the "Imported Saved Received Messages" and "Imported Saved Sent Messages" and just places the messages in the standard Inbox and Sent Items. It uses a different method for getting the TO userid, which in the original code was using an incorrect field in the first place. This way is much more graceful, however it does not take into account the PM to group option...
Anyway, here's the patch...
--- 009.php.orig 2010-03-28 23:01:07.797746291 -0700 +++ 009.php 2010-03-28 19:46:46.302013631 -0700 @@ -49,15 +49,15 @@ } } - if($sessionobject->get_session_var('added_default_pm_folder') != 'yup') - { - $target_database_type = $sessionobject->get_session_var('targetdatabasetype'); - $target_table_prefix = $sessionobject->get_session_var('targettableprefix'); - // Add the default PM folder - $this->add_pm_folder_for_all_users($Db_target, $target_database_type, $target_table_prefix, 'Imported Saved Received Messages'); - $this->add_pm_folder_for_all_users($Db_target, $target_database_type, $target_table_prefix, 'Imported Saved Sent Messages'); - $sessionobject->add_session_var('added_default_pm_folder', 'yup'); - } + // if($sessionobject->get_session_var('added_default_pm_folder') != 'yup') + // { + // $target_database_type = $sessionobject->get_session_var('targetdatabasetype'); + // $target_table_prefix = $sessionobject->get_session_var('targettableprefix'); + // // Add the default PM folder + // $this->add_pm_folder_for_all_users($Db_target, $target_database_type, $target_table_prefix, 'Imported Saved Received Messages'); + // $this->add_pm_folder_for_all_users($Db_target, $target_database_type, $target_table_prefix, 'Imported Saved Sent Messages'); + // $sessionobject->add_session_var('added_default_pm_folder', 'yup'); + // } // Start up the table $displayobject->update_basic('title',$displayobject->phrases['import_pm']); @@ -123,7 +123,8 @@ $vB_pm_text = (phpversion() < '5' ? $pm_text_object : clone($pm_text_object)); unset ($to_userid); - $to_userid = $this->get_pm_to_id($Db_source, $s_db_type, $s_tb_prefix, $data['msg_id']); + preg_match('/^(u|g)_([0-9]+)/', $data['to_address'], $match); + $to_userid = $match[2]; $userid = $idcache->get_id('user', $to_userid); $username = $idcache->get_id('username', $to_userid); @@ -165,22 +166,9 @@ $vB_pm_to->set_value('mandatory', 'pmtextid', $pm_text_id); $vB_pm_to->set_value('mandatory', 'userid', $userid); $vB_pm_to->set_value('mandatory', 'importpmid', $data['msg_id']); - - if ($data['folder_id'] == 0) - { - $vB_pm_to->set_value('nonmandatory', 'folderid', $this->get_custom_pm_folder_id($Db_target, $t_db_type, $t_tb_prefix, $idcache->get_id('user', $userid), 'Imported Saved Recived Messages')); - } - elseif ($data['folder_id'] == -1) - { - $vB_pm_to->set_value('nonmandatory', 'folderid', $this->get_custom_pm_folder_id($Db_target, $t_db_type, $t_tb_prefix, $idcache->get_id('user', $userid), 'Imported Saved Sent Messages')); - } - else - { - $vB_pm_to->set_value('nonmandatory', 'folderid', '0'); - } - + $vB_pm_to->set_value('nonmandatory', 'folderid', '0'); $vB_pm_to->set_value('nonmandatory', 'messageread', '0'); - + /* $folderid=0; @@ -211,6 +199,7 @@ $vB_pm_from->set_value('nonmandatory', 'folderid', '-1'); $vB_pm_from->set_value('nonmandatory', 'messageread', '0'); + if($vB_pm_text->is_valid()) { if($vB_pm_from->import_pm($Db_target, $t_db_type, $t_tb_prefix) AND
I had some success doing this by modifying the SQL query in 000.php to
SELECT t.*, p.*, u.username FROM phpbb_privmsgs_to t, phpbb_privmsgs p, phpbb_users u WHERE p.author_id = u.user_id AND t.msg_id = p.msg_id ORDER BY p.msg_id DESC
Again, YMMV, but I'll try to answer any questions about this if anyone has any.