Impex does not handle PM's very well for PHPBB3... Quite honestly, it really doesn't handle them at all.
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...
I have seen a couple instances where duplicate PM's are showing up for certain users, and I'm not exactly sure why that is yet, but for now this works better than the original code for my board. Also, the import code gets everything in the database, not just things that you "deleted" from PHPBB3... something which may be a bit odd for people. Doesn't bother me, but for larger boards, you may want to figure out how to limit the intake to just messages that are in the current inbox/sent items.
I had some success doing this by modifying the SQL query in 000.php to
but ultimately decided against this.
Again, YMMV, but I'll try to answer any questions about this if anyone has any.
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...
Code:
--- 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
Code:
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.