Skip to:
Content

bbPress.org

Ticket #1547: bbp-phpbb-importer.2.diff

File bbp-phpbb-importer.2.diff, 21.2 KB (added by Nightgunner5, 10 years ago)

Fix "posted [big number] days ago"

  • bbp-admin/bbp-admin.php

     
    306306
    307307                        // Load our importers
    308308                        // The logic here needs to be improved upon
    309                         $importers = apply_filters( 'bbp_importers', array( 'bbpress' ) );
     309                        $importers = apply_filters( 'bbp_importers', array( 'bbpress', 'phpbb' ) );
    310310
    311311                        // Loop through included importers
    312312                        foreach ( $importers as $importer ) {
  • bbp-admin/importers/phpbb.php

     
     1<?php
     2
     3/**
     4 * phpBB3 Importer
     5 *
     6 * Helps in converting your phpBB installation into bbPress
     7 *
     8 * @package bbPress
     9 * @subpackage Importer
     10 *
     11 * @todo Docs
     12 * @todo Role Mapping Options
     13*/
     14class phpBB_Importer {
     15
     16        /**
     17         * @var string Path to phpBB3 configuration file (config.php)
     18         */
     19        var $config = '';
     20
     21        var $db = null;
     22
     23        function init_db() {
     24                require_once $this->config;
     25
     26                $this->db = new wpdb( $dbuser, $dbpasswd, $dbname, $dbport ? $dbhost . ':' . $dbport : $dbhost );
     27                $this->db->tables = array( 'acl_groups', 'acl_options', 'acl_roles', 'acl_roles_data', 'acl_users',
     28                                'attachments', 'banlist', 'bbcodes', 'bookmarks', 'bots', 'config', 'confirm', 'disallow', 'drafts', 'extensions',
     29                                'extension_groups', 'forums', 'forums_access', 'forums_track', 'forums_watch', 'groups', 'icons', 'lang', 'log',
     30                                'moderator_cache', 'modules', 'poll_options', 'poll_votes', 'posts', 'privmsgs', 'privmsgs_folder', 'privmsgs_rules',
     31                                'privmsgs_to', 'profile_fields', 'profile_fields_data', 'profile_fields_lang', 'profile_lang', 'ranks', 'reports',
     32                                'reports_reasons', 'search_results', 'search_wordlist', 'search_wordmatch', 'sessions', 'sessions_keys', 'sitelist',
     33                                'smilies', 'styles', 'styles_imageset', 'styles_imageset_data', 'styles_template', 'styles_template_data', 'styles_theme',
     34                                'topics', 'topics_posted', 'topics_track', 'topics_watch', 'users', 'user_group', 'warnings', 'words', 'zebra' );
     35                $this->db->set_prefix( $table_prefix );
     36        }
     37
     38        function header() { ?>
     39
     40                <div class="wrap">
     41
     42                        <?php screen_icon(); ?>
     43
     44                        <h2><?php _e( 'phpBB3 Importer', 'bbpress' ); ?></h2>
     45
     46                        <?php
     47        }
     48
     49        /**
     50         * Output an error message with a button to try again.
     51         *
     52         * @param type $error
     53         * @param type $step
     54         */
     55        function throw_error( $error, $step ) {
     56                echo '<p><strong>' . $error->get_error_message() . '</strong></p>';
     57                echo $this->next_step( $step, __( 'Try Again', 'bbpress' ) );
     58        }
     59
     60        /**
     61         * Returns the HTML for a link to the next page
     62         *
     63         * @param type $next_step
     64         * @param type $label
     65         * @param type $id
     66         * @return string
     67         */
     68        function next_step( $next_step, $label, $id = 'phpbb-import-next-form' ) {
     69                $str  = '<form action="admin.php?import=phpbb" method="post" id="' . $id . '">';
     70                $str .= wp_nonce_field( 'bbp-phpbb-import', '_wpnonce', true, false );
     71                $str .= wp_referer_field( false );
     72                $str .= '<input type="hidden" name="step" id="step" value="' . esc_attr( $next_step ) . '" />';
     73                $str .= '<p><input type="submit" class="button" value="' . esc_attr( $label ) . '" /> <span id="auto-message"></span></p>';
     74                $str .= '</form>';
     75
     76                return $str;
     77        }
     78
     79        /**
     80         * Footer
     81         */
     82        function footer() { ?>
     83
     84                </div>
     85
     86                <?php
     87        }
     88
     89        /**
     90         * Dispatch
     91         */
     92        function dispatch() {
     93                if ( empty( $_REQUEST['step'] ) )
     94                        $step = 0;
     95                else
     96                        $step = (int) $_REQUEST['step'];
     97
     98                $this->header();
     99
     100                switch ( $step ) {
     101                        case -1 :
     102                                $this->cleanup();
     103                                // Intentional no break
     104
     105                        case 0 :
     106                                $this->greet();
     107                                break;
     108
     109                        case 1 :
     110                        case 2 :
     111                        case 3 :
     112
     113                                check_admin_referer( 'bbp-phpbb-import' );
     114                                $result = $this->{ 'step' . $step }();
     115
     116                                break;
     117                }
     118
     119                $this->footer();
     120        }
     121
     122        /**
     123         * Greet message
     124         */
     125        function greet() {
     126                global $wpdb, $bbdb; ?>
     127
     128                <div class="narrow">
     129
     130                        <form action="admin.php?import=phpbb" method="post">
     131
     132                                <?php wp_nonce_field( 'bbp-phpbb-import' ); ?>
     133
     134                                <?php if ( get_option( 'bbp_phpbb_path' ) ) : ?>
     135
     136                                        <input type="hidden" name="step" value="<?php echo esc_attr( get_option( 'bbp_bbpress_step' ) ); ?>" />
     137
     138                                        <p><?php _e( 'It looks like you attempted to convert your phpBB installation previously and got interrupted.', 'bbpress' ); ?></p>
     139
     140                                        <p class="submit">
     141                                                <a href="<?php echo esc_url( add_query_arg( array( 'import' => 'phpbb', 'step' => '-1', '_wpnonce' => wp_create_nonce( 'bbp-phpbb-import' ), '_wp_http_referer' => esc_attr( $_SERVER['REQUEST_URI'] ) ) ) ); ?>" class="button"><?php _e( 'Cancel &amp; start a new import', 'bbpress' ); ?></a>
     142                                                <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Continue previous import', 'bbpress' ); ?>" />
     143                                        </p>
     144
     145                                <?php else : ?>
     146
     147                                        <input type="hidden" name="bbp_phpbb_path" value="true" />
     148
     149                                        <p><?php _e( 'This importer allows you to convert your phpBB3 installation into bbPress.', 'bbpress' ); ?></p>
     150
     151                                        <h3><?php _e( 'Instructions', 'bbpress' ); ?></h3>
     152                                        <ol>
     153                                                <li><?php printf( __( 'Create a <a href="%s">backup</a> of your database and files. If the import process is interrupted for any reason, restore from that backup and re-run the import.', 'bbpress' ), 'http://codex.wordpress.org/WordPress_Backups' ); ?></li>
     154                                                <li><?php _e( 'Seriously... Go back everything up, and don\'t come back until that\'s done. If things go awry, it\'s possible this importer will not be able to complete and your forums will be lost in limbo forever. This is serious business. No, we\'re not kidding.', 'bbpress' ); ?></li>
     155                                                <li><?php _e( 'To reduce memory overhead and avoid possible conflicts please:', 'bbpress' ); ?>
     156                                                        <ol>
     157                                                                <li>
     158                                                                        <?php _e( 'Disable all plugins (except bbPress) on both your WordPress and phpBB3 installations.', 'bbpress' ); ?>
     159                                                                </li>
     160                                                                <li>
     161                                                                        <?php _e( 'Switch to a default WordPress theme.', 'bbpress' ); ?>
     162                                                                </li>
     163                                                        </ol>
     164                                                </li>
     165                                                <li><?php _e( 'Notes on compatibility:', 'bbpress' ); ?>
     166                                                        <ol>
     167                                                                <li>
     168                                                                        <?php _e( 'No plugins can currently be converted.', 'bbpress' ); ?>
     169                                                                </li>
     170                                                        </ol>
     171                                                </li>
     172                                                <li><?php _e( 'This converter can be a drag on large forums with lots of existing topics and replies. If possible, do this import in a safe place (like a local installation.)', 'bbpress' ); ?></li>
     173                                        </ol>
     174
     175                                        <h3><?php _e( 'Configuration', 'bbpress' ); ?></h3>
     176                                        <p><?php _e( 'Enter the full path to your phpBB configuration file i.e. <code>config.php</code>:', 'bbpress' ); ?></p>
     177
     178                                        <table class="form-table">
     179                                                <tr>
     180                                                        <th scope="row"><label for="bbp_phpbb_path"><?php _e( 'phpBB Path:', 'bbpress' ); ?></label></th>
     181                                                        <td><input type="text" name="bbp_phpbb_path" id="bbp_phpbb_path" class="regular-text" value="<?php echo untrailingslashit( ABSPATH ) . DIRECTORY_SEPARATOR . 'forums' . DIRECTORY_SEPARATOR . 'config.php'; ?>" /></td>
     182                                                </tr>
     183                                        </table>
     184
     185                                        <p class="submit">
     186                                                <input type="hidden" name="step" value="1" />
     187                                                <input type="submit" class="button" value="<?php esc_attr_e( 'Proceed', 'bbpress' ); ?>" />
     188                                        </p>
     189
     190                                <?php endif; ?>
     191
     192                        </form>
     193
     194                </div>
     195                <?php
     196        }
     197
     198        /**
     199         * Cleanups all the options used by the importer
     200         */
     201        function cleanup() {
     202                delete_option( 'bbp_phpbb_path' );
     203                delete_option( 'bbp_phpbb_step' );
     204
     205                do_action( 'import_end' );
     206        }
     207
     208        /**
     209         * Technically the first half of step 1, this is separated to allow for AJAX
     210         * calls. Sets up some variables and options and confirms authentication.
     211         *
     212         * @return type
     213         */
     214        function setup() {
     215
     216                // Get details from _POST
     217                if ( !empty( $_POST['bbp_phpbb_path'] ) ) {
     218
     219                        // Store details for later
     220                        $this->config = realpath( $_POST['bbp_phpbb_path'] );
     221
     222                        // Update path
     223                        update_option( 'bbp_phpbb_path', $this->config );
     224
     225                // Get details from DB
     226                } else {
     227                        $this->config = get_option( 'bbp_phpbb_path' );
     228                }
     229
     230                // No config file found
     231                if ( empty( $this->config ) ) { ?>
     232
     233                        <p><?php _e( 'Please enter the path to your phpBB configuration file - <code>config.php</code>.', 'bbpress' ); ?></p>
     234                        <p><a href="<?php echo esc_url( add_query_arg( array( 'import' => 'phpbb', 'step' => '-1', '_wpnonce' => wp_create_nonce( 'bbp-phpbb-import' ), '_wp_http_referer' => esc_attr( remove_query_arg( 'step', $_SERVER['REQUEST_URI'] ) ) ) ) ); ?>" class="button"><?php _e( 'Go Back', 'bbpress' ); ?></a></p>
     235
     236                        <?php
     237
     238                        return false;
     239                }
     240
     241                // Check if the user submitted a directory as the path by mistake
     242                if ( is_dir( $this->config ) && file_exists( trailingslashit( $this->config ) . 'config.php' ) ) {
     243                        $this->config = trailingslashit( $this->config ) . 'config.php';
     244                }
     245
     246                // Check if the file exists
     247                if ( !file_exists( $this->config ) || is_dir( $this->config ) ) {
     248
     249                        delete_option( 'bbp_phpbb_path' ); ?>
     250
     251                        <p><?php _e( 'phpBB configuration file <code>config.php</code> doesn\'t exist in the path specified! Please check the path and try again.', 'bbpress' ); ?></p>
     252                        <p><a href="<?php echo esc_url( add_query_arg( array( 'import' => 'phpbb', 'step' => '-1', '_wpnonce' => wp_create_nonce( 'bbp-phpbb-import' ), '_wp_http_referer' => esc_attr( remove_query_arg( 'step', $_SERVER['REQUEST_URI'] ) ) ) ) ); ?>" class="button"><?php _e( 'Go Back', 'bbpress' ); ?></a></p>
     253
     254                        <?php
     255
     256                        return false;
     257                }
     258
     259                $this->init_db();
     260
     261                return true;
     262        }
     263
     264        /**
     265         * Convert users
     266         */
     267        function step1() {
     268
     269                update_option( 'bbp_phpbb_step', 1 );
     270
     271                // Set time limit to 0 to avoid time out errors
     272                set_time_limit( 0 );
     273
     274                if ( is_callable( 'ob_implicit_flush' ) )
     275                        ob_implicit_flush( true );
     276
     277                $setup = $this->setup();
     278                if ( empty( $setup ) ) {
     279                        return false;
     280                } elseif ( is_wp_error( $setup ) ) {
     281                        $this->throw_error( $setup, 1 );
     282                        return false;
     283                }
     284
     285                $radio = 'user';
     286
     287                global $wpdb; ?>
     288
     289                <div id="bbpress-import-status">
     290
     291                        <h3><?php _e( 'Importing Users', 'bbpress' ); ?></h3>
     292                        <p><?php _e( 'We&#8217;re in the process of migrating your users...', 'bbpress' ); ?></p>
     293
     294                        <ol>
     295
     296                                <?php
     297                        $have_more = true;
     298                        $page = 0;
     299                        while ( $have_more ) {
     300                                $users = $this->db->get_results( $this->db->prepare(
     301                                        "SELECT user_id, user_regdate, username, user_email, user_password,
     302                                        user_aim, user_yim, user_jabber, user_website
     303                                        FROM {$this->db->users} WHERE (user_id = 2 OR user_id > 53)
     304                                        ORDER BY user_id ASC LIMIT %d, 200", $page * 200 ) );
     305
     306                                echo '<li>';
     307                                printf( __( 'Importing users #%1$d to #%2$d...', 'bbpress' ), $page * 200 + 1, $page * 200 + count( $users ) );
     308
     309                                foreach ( $users as $user ) {
     310                                        if ( !$id = email_exists( $user->user_email ) )
     311                                                $id = wp_insert_user( array(
     312                                                        'user_login'      => $user->username,
     313                                                        'user_pass'       => $user->user_password,
     314                                                        'user_url'        => $user->user_website,
     315                                                        'user_registered' => date( 'Y-m-d H:i:s', $user->user_regdate ),
     316                                                        'user_email'      => $user->user_email,
     317                                                        'jabber'          => $user->user_jabber,
     318                                                        'yim'             => $user->user_yim,
     319                                                        'aim'             => $user->user_aim
     320                                                ) );
     321
     322                                        add_user_meta( $id, 'bbp_phpbb_user', $user->user_id, true );
     323                                }
     324
     325                                _e( '... Done!', 'bbpress' );
     326                                echo '</li>';
     327
     328                                if ( count( $users ) < 200 )
     329                                        $have_more = false;
     330                                $page++;
     331                        }
     332                                ?>
     333
     334                        </ol>
     335
     336                        <p><?php _e( 'Your users have all been imported, but wait &#8211; there&#8217;s more! Now we need to import your forums, topics and posts!', 'bbpress' ); ?></p>
     337                        <?php
     338
     339                        echo $this->next_step( 2, __( 'Import forums, topics and posts &raquo;', 'bbpress' ) ); ?>
     340
     341                </div>
     342
     343                <?php
     344        }
     345
     346        /**
     347         * Import forums, topics and posts
     348         */
     349        function step2() {
     350                do_action( 'import_start' );
     351
     352                set_time_limit( 0 );
     353                update_option( 'bbp_bbpress_step', 2 );
     354
     355                $setup = $this->setup();
     356                if ( empty( $setup ) ) {
     357                        return false;
     358                } elseif ( is_wp_error( $setup ) ) {
     359                        $this->throw_error( $setup, 3 );
     360                        return false;
     361                }
     362
     363                global $wpdb, $bbp; ?>
     364
     365                        <div id="bbpress-import-status">
     366
     367                        <h3><?php _e( 'Importing Forums, Topics And Posts', 'bbpress' ); ?></h3>
     368                        <p><?php  _e( 'We&#8217;re importing your phpBB forums, topics and replies...', 'bbpress' ); ?></p>
     369
     370                        <ol>
     371
     372                                <?php
     373
     374                                if ( !$forums = $this->db->get_results( "SELECT forum_id, parent_id, forum_name, forum_desc, forum_password, forum_type, left_id FROM {$this->db->forums} WHERE forum_type IN (0, 1)" ) ) {
     375                                        echo "<li><strong>" . __( 'No forums were found!', 'bbpress' ) . "</strong></li></ol>\n";
     376                                        return;
     377                                }
     378
     379                                echo "<li>" . sprintf( __( 'Total number of forums: %s', 'bbpress' ), count( $forums ) ) . "</li>\n";
     380
     381                                $forum_map     = array();
     382                                $user_map      = array();
     383
     384                                $users = $wpdb->get_results( "SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'bbp_phpbb_user'" );
     385                                foreach ( $users as $user ) {
     386                                        $user_map[$user->meta_value] = $user->user_id;
     387                                }
     388                                unset( $users ); // Allow PHP to free up some memory
     389
     390                                foreach ( (array) $forums as $forum ) {
     391                                        echo "<li>" . sprintf( __( 'Processing forum #%1$s (%2$s)', 'bbpress' ), $forum->forum_id, esc_html( $forum->forum_name ) ) . "\n<ul>\n";
     392
     393                                        // Insert the forum and add it to the map.
     394                                        $inserted_forum      =  wp_insert_post( array(
     395                                                'post_author'    => get_current_user_id(),
     396                                                'post_content'   => $forum->forum_desc,
     397                                                'post_title'     => $forum->forum_name,
     398                                                'post_name'     => sanitize_title_with_dashes( $forum->forum_name ),
     399                                                'post_excerpt'   => '',
     400                                                'post_status'    => 'publish',
     401                                                'comment_status' => 'closed',
     402                                                'ping_status'    => 'closed',
     403                                                'post_parent'    => !empty( $forum->parent_id ) ? $forum_map[$forum->parent_id] : 0,
     404                                                'post_type'      => bbp_get_forum_post_type(),
     405                                                'menu_order'     => $forum->left_id
     406                                        ) );
     407
     408                                        $forum_map[$forum->forum_id] = $inserted_forum;
     409
     410                                        if ( !empty( $inserted_forum ) && !is_wp_error( $inserted_forum ) ) {
     411                                                echo "<li>" . sprintf( __( 'Added the forum as forum #<a href="%1$s">%2$s</a>', 'bbpress' ), get_permalink( $inserted_forum ), $inserted_forum ) . "</li>\n";
     412                                        } else {
     413                                                echo "<li><em>" . __( 'There was a problem in adding the forum.', 'bbpress' ) . "</em></li></ul></li>\n";
     414                                                continue;
     415                                        }
     416
     417                                        $topics = $this->db->get_results( $this->db->prepare(
     418                                                "SELECT topic_id, topic_title, topic_poster, topic_time, topic_status, topic_type
     419                                                FROM {$this->db->topics} WHERE forum_id = %d AND topic_status IN (0, 1)", $forum->forum_id ) );
     420
     421                                        // In standalone, categories can have topics, but this is not the case in plugin
     422                                        // So make the forum category if it doesn't have topics
     423                                        // Else close it if it's a category and has topics
     424                                        if ( $forum->forum_type == 0 ) {
     425
     426                                                if ( count( $topics ) == 0 ) {
     427                                                        bbp_categorize_forum( $inserted_forum );
     428                                                        echo "<li>" . __( 'The forum is a category and has no topics.', 'bbpress' ) . "</li>\n</ul>\n</li>";
     429
     430                                                        continue;
     431                                                } else {
     432                                                        bbp_close_forum( $inserted_forum );
     433                                                        echo "<li>" . __( 'The forum is a category but has topics, so it has been set as closed on the new board.', 'bbpress' ) . "</li>\n";
     434                                                }
     435
     436                                        }
     437
     438                                        echo "<li>" . sprintf( __( 'Total number of topics in the forum: %s', 'bbpress' ), count( $topics ) ) . "</li>\n";
     439
     440                                        foreach ( (array) $topics as $topic ) {
     441                                                $posts = $this->db->get_results( $this->db->prepare(
     442                                                        "SELECT post_id, poster_id, poster_ip, post_time, post_username, post_subject, post_text
     443                                                        FROM {$this->db->posts} WHERE topic_id = %d ORDER BY post_time ASC", $topic->topic_id ) );
     444
     445                                                $first_post = array_shift( $posts );
     446
     447                                                // If the topic is public, check if it's open and set the status accordingly
     448                                                $topic_status       =  $topic->topic_status == 0 ? 'publish' : $bbp->closed_status_id;
     449
     450                                                $inserted_topic     =  wp_insert_post( array(
     451                                                        'post_parent'   => $inserted_forum,
     452                                                        'post_author'   => $user_map[$topic->topic_poster],
     453                                                        'post_content'  => $first_post->post_text,
     454                                                        'post_title'    => $topic->topic_title,
     455                                                        'post_name'     => sanitize_title_with_dashes( $topic->topic_title ),
     456                                                        'post_status'   => $topic_status,
     457                                                        'post_date_gmt' => gmdate( 'Y-m-d H:i:s', $topic->topic_time ),
     458                                                        'post_date'     => get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $topic->topic_time ) ),
     459                                                        'post_type'     => bbp_get_topic_post_type()
     460                                                ) );
     461
     462                                                if ( !empty( $inserted_topic ) && !is_wp_error( $inserted_topic ) ) {
     463
     464                                                        // Loginless Posting
     465                                                        if ( $topic->topic_poster == 1 ) {
     466                                                                update_post_meta( $inserted_topic, '_bbp_anonymous_name',    $first_post->post_username );
     467                                                                update_post_meta( $inserted_topic, '_bbp_anonymous_email',   '' );
     468                                                                update_post_meta( $inserted_topic, '_bbp_anonymous_website', '' );
     469                                                        }
     470
     471                                                        // Author IP
     472                                                        update_post_meta( $inserted_topic, '_bbp_author_ip', $first_post->poster_ip );
     473
     474                                                        // Forum topic meta
     475                                                        update_post_meta( $inserted_topic, '_bbp_forum_id', $inserted_forum );
     476                                                        update_post_meta( $inserted_topic, '_bbp_topic_id', $inserted_topic );
     477
     478                                                        $replies        = 0;
     479                                                        $last_reply     = 0;
     480                                                        $post           = null;
     481
     482                                                        foreach ( (array) $posts as $post ) {
     483
     484                                                                $last_reply         =  wp_insert_post( array(
     485                                                                        'post_parent'   => $inserted_topic,
     486                                                                        'post_author'   => $user_map[$post->poster_id],
     487                                                                        'post_date_gmt' => gmdate( 'Y-m-d H:i:s', $post->post_time ),
     488                                                                        'post_date'     => get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $post->post_time ) ),
     489                                                                        'post_title'    => $post->post_subject,
     490                                                                        'post_name'     => sanitize_title_with_dashes( $post->post_subject ),
     491                                                                        'post_status'   => 0,
     492                                                                        'post_type'     => bbp_get_reply_post_type(),
     493                                                                        'post_content'  => $post->post_text
     494                                                                ) );
     495
     496                                                                // Loginless
     497                                                                if ( $post->poster_id == 1 ) {
     498                                                                        update_post_meta( $last_reply, '_bbp_anonymous_name',    $post->post_username );
     499                                                                        update_post_meta( $last_reply, '_bbp_anonymous_email',   '' );
     500                                                                        update_post_meta( $last_reply, '_bbp_anonymous_website', '' );
     501                                                                }
     502
     503                                                                // Author IP
     504                                                                update_post_meta( $last_reply, '_bbp_author_ip', $post->poster_ip );
     505
     506                                                                // Reply Parents
     507                                                                update_post_meta( $last_reply, '_bbp_forum_id', $inserted_forum );
     508                                                                update_post_meta( $last_reply, '_bbp_topic_id', $inserted_topic );
     509
     510                                                                bbp_update_reply_walker( $last_reply );
     511
     512                                                                $replies++;
     513                                                        }
     514
     515                                                        // Topic stickiness
     516                                                        switch ( $topic->topic_type ) {
     517
     518                                                                // Sticky
     519                                                                case 1 :
     520                                                                // Announce
     521                                                                case 2 :
     522                                                                        bbp_stick_topic( $inserted_topic );
     523                                                                        break;
     524
     525                                                                // Global
     526                                                                case 3 :
     527                                                                        bbp_stick_topic( $inserted_topic, true );
     528                                                                        break;
     529                                                        }
     530
     531                                                        // Last active
     532                                                        $last_active_id   =                        !empty( $last_reply ) ? $last_reply      : $inserted_topic;
     533                                                        $last_active_time = gmdate( 'Y-m-d H:i:s', !empty( $post       ) ? $post->post_time : $first_post->post_time );
     534
     535                                                        // Reply topic meta
     536                                                        update_post_meta( $inserted_topic, '_bbp_last_reply_id',      $last_reply       );
     537                                                        update_post_meta( $inserted_topic, '_bbp_last_active_id',     $last_active_id   );
     538                                                        update_post_meta( $inserted_topic, '_bbp_last_active_time',   $last_active_time );
     539                                                        update_post_meta( $inserted_topic, '_bbp_reply_count',        $replies          );
     540                                                        update_post_meta( $inserted_topic, '_bbp_hidden_reply_count', 0                 );
     541
     542                                                        // Voices will be done by recount
     543
     544                                                        bbp_update_topic_walker( $inserted_topic );
     545
     546                                                        echo "<li>"     . sprintf( __( 'Added topic #%1$s (%2$s) as topic #<a href="%3$s">%4$s</a> with %5$s replies.', 'bbpress' ), $topic->topic_id, esc_html( $topic->topic_title ), get_permalink( $inserted_topic ), $inserted_topic, $replies ) . "</li>\n";
     547                                                } else {
     548                                                        echo "<li><em>" . sprintf( __( 'There was a problem in adding topic #1$s (%2$s).', 'bbpress' ), $topic->topic_id, esc_html( $topic->topic_title ) ) . "</em></li></ul></li>\n";
     549                                                        continue;
     550                                                }
     551                                        }
     552
     553                                        echo "</ul>\n</li>\n";
     554
     555                                } ?>
     556
     557                        </ol>
     558
     559                        <?php
     560
     561                        // Clean up database and we're out
     562                        $this->cleanup();
     563                        do_action( 'import_done', 'phpbb' );
     564
     565                        ?>
     566
     567                        <p><strong><?php printf( __( 'Your forums, topics and posts have all been imported, but wait &#8211; there&#8217;s more! Now we need to do a <a href="%s">recount</a> to get the counts in sync! Yes, we&#8217;re bad at Math.', 'bbpress' ), add_query_arg( array( 'page' => 'bbp-recount' ), get_admin_url( 0, 'tools.php' ) ) ); ?></strong></p>
     568
     569                        <h4><?php printf( __( 'After that it\'s all done. <a href="%s">Have fun!</a> :)', 'bbpress' ), home_url() ); ?></h4>
     570
     571                </div>
     572
     573                <?php
     574        }
     575
     576} // class phpBB_Importer
     577
     578$phpbb_import = new phpBB_Importer();
     579
     580register_importer( 'phpbb', __( 'phpBB3', 'bbpress' ), __( 'Import your phpBB3 board.', 'bbpress' ), array( $phpbb_import, 'dispatch' ) );