Announcement

Collapse
No announcement yet.

Patch to fix PHPBB3 Private Messages import

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Patch to fix PHPBB3 Private Messages import

    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...

    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 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

    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
    but ultimately decided against this.

    Again, YMMV, but I'll try to answer any questions about this if anyone has any.
widgetinstance 262 (Related Topics) skipped due to lack of content & hide_module_if_empty option.
Working...
X