Skip to:
Content
Pages
Categories
Search
Top
Bottom

v2: Simple Press importer, and first thoughts

  • @mark-barnes

    Member

    I’ve been playing with bbPress v2 for a little while now, primarily to see how easy it would be to write an importer from Simple Press. I’m sure that bbPress is going to need importers if the adoption rate is to be significant. Here are some initial thoughts:

    (1) It’s easier than I thought – largely because of the v1 import file.

    (2) We need a bbPress equivalent of wp_insert_pages, so we can call a single function, instead of creating pages, then adding lots of metadata – it’s not always clear what metadata is required, either.

    (3) In addition, it would be even better to ship with a generic import file that plugins could either modify, or plug into.

    For what it’s worth, here’s my very basic Simple Press importer. There’s no UI, error-checking is poor, and it doesn’t migrate stickies or notifications yet. You also have to update the counts from the Tools menu afterwards. And sometimes it dies through a timeout or OOM, but if it does, it should pick up where it left off. It’s a proof of concept, not a finished product, and is intended to encourage other developers, rather than for end-users. But it does work – at least for me. I may or may not develop it further, so if anyone else wants to, feel free!

    <?php
    /*
    Plugin Name: Simple Press to bbPress
    Plugin URI: http://www.4-14.org.uk/
    Description: Import Simple Press forums to bbPress
    Author: Mark Barnes
    Version: 0.1
    Author URI: http://www.4-14.org.uk/
    */

    if (isset($_GET['bbpressimport']))
    add_action ('init', 'mbbb_init');

    function mbbb_init () {
    global $wpdb;
    define('WP_IMPORTING', true);
    //Delete existing posts
    if (isset($_GET['delete'])) {
    $post_ids = $wpdb->get_results("SELECT ID from {$wpdb->posts} WHERE post_type IN ('forum', 'reply', 'topic')");
    if ($post_ids)
    foreach ($post_ids as $post_id)
    wp_delete_post ($post_id->ID, true);
    }
    // Import forums
    $forum_map = array();
    $sp_forums = $wpdb->get_results("SELECT forum_desc, forum_name, forum_slug, forum_seq, forum_id FROM {$wpdb->prefix}sfforums ORDER BY forum_seq");
    if ($sp_forums) {
    foreach ($sp_forums as $sp_forum) {
    $post_id = $wpdb->get_var ("SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_value='forum_{$sp_forum->forum_id}' AND meta_key='_mbbb_sp_id'");
    if (!$post_id) {
    $inserted_forum = wp_insert_post( array(
    'post_author' => get_current_user_id(),
    'post_content' => $sp_forum->forum_desc,
    'post_title' => $sp_forum->forum_name,
    'post_excerpt' => '',
    'post_status' => 'publish',
    'comment_status' => 'closed',
    'ping_status' => 'closed',
    'post_name' => $sp_forum->forum_slug,
    'post_parent' => 0,
    'post_type' => bbp_get_forum_post_type(),
    'menu_order' => $sp_forum->forum_seq
    ) );
    if ($inserted_forum) {
    echo "Added {$sp_forum->forum_name}<br/>n";
    update_post_meta( $inserted_forum, '_mbbb_sp_id', "forum_{$sp_forum->forum_id}" );
    } else
    echo "Failed to add {$sp_forum->forum_name}<br/>n";
    } else
    $inserted_forum = $post_id;
    $forum_map[$sp_forum->forum_id] = $inserted_forum;
    }
    }
    // Import topics
    $topic_count = 0;
    $sp_topics = $wpdb->get_results ("SELECT forum_id, user_id, topic_name, topic_slug, topic_date, topic_id FROM {$wpdb->prefix}sftopics ORDER BY topic_date ASC");
    if ($sp_topics) {
    foreach ($sp_topics as $sp_topic) {
    $post_id = $wpdb->get_var ("SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_value='topic_{$sp_topic->topic_id}' AND meta_key='_mbbb_sp_id'");
    $sp_posts = $wpdb->get_results ("SELECT topic_id, user_id, post_date, post_content, poster_ip, post_id from {$wpdb->prefix}sfposts WHERE topic_id = '{$sp_topic->topic_id}' ORDER BY post_date ASC");
    if (isset($forum_map[$sp_topic->forum_id]) && $sp_posts) {
    if (!$post_id) {
    $inserted_topic = wp_insert_post( array(
    'post_parent' => $forum_map[$sp_topic->forum_id],
    'post_author' => $sp_posts[0]->user_id,
    'post_content' => $sp_posts[0]->post_content,
    'post_title' => $sp_topic->topic_name,
    'post_name' => $sp_topic->topic_slug,
    'post_status' => 'publish',
    'post_date_gmt' => $sp_topic->topic_date,
    'post_date' => get_date_from_gmt( $sp_topic->topic_date ),
    'post_type' => bbp_get_topic_post_type(),
    ) );
    if ($inserted_topic) {
    echo "Added {$sp_topic->topic_name}<br/>n";
    update_post_meta( $inserted_topic, '_bbp_forum_id', $forum_map[$sp_topic->forum_id] );
    update_post_meta( $inserted_topic, '_bbp_topic_id', $inserted_topic );
    update_post_meta( $inserted_topic, '_mbbb_sp_id', "topic_{$sp_topic->topic_id}" );
    } else
    echo "Failed to add {$sp_forum->topic_name}<br/>n";
    } else
    $inserted_topic = $post_id;
    }
    //Import posts
    $post_count = 0;
    if ($sp_posts) {
    foreach ($sp_posts as $sp_post) {
    $post_id = $wpdb->get_var ("SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_value='post_{$sp_post->post_id}' AND meta_key='_mbbb_sp_id'");
    if (!$post_id) {
    if ($post_count != 0) {
    $inserted_post = wp_insert_post( array(
    'post_parent' => $inserted_topic,
    'post_author' => $sp_post->user_id,
    'post_date_gmt' => $sp_post->post_date,
    'post_date' => get_date_from_gmt( $sp_post->post_date ),
    'post_title' => 'Reply To: '.$sp_topic->topic_name,
    'post_status' => 'publish',
    'post_type' => bbp_get_reply_post_type(),
    'post_content' => $sp_post->post_content
    ) );
    if ($inserted_post) {
    update_post_meta( $inserted_post, '_bbp_author_ip', $sp_post->poster_ip );
    update_post_meta( $inserted_post, '_bbp_forum_id', $forum_map[$sp_topic->forum_id] );
    update_post_meta( $inserted_post, '_bbp_topic_id', $inserted_topic );
    update_post_meta( $inserted_post, '_mbbb_sp_id', "post_{$sp_post->post_id}" );
    bbp_update_reply_walker( $inserted_post );
    }
    }
    else
    update_post_meta( $inserted_topic, '_bbp_author_ip', $sp_post->poster_ip );
    } else
    $inserted_post = $post_id;
    $post_count ++;
    }
    }
    update_post_meta( $inserted_topic, '_bbp_last_reply_id', $inserted_post );
    update_post_meta( $inserted_topic, '_bbp_last_active_id', $inserted_post ? $inserted_post : $inserted_topic );
    update_post_meta( $inserted_topic, '_bbp_last_active_time', $inserted_post ? $sp_post->post_date : $sp_topic->topic_date );
    update_post_meta( $inserted_topic, '_bbp_reply_count', $post_count -1 );
    update_post_meta( $inserted_topic, '_bbp_hidden_reply_count', 0 );
    bbp_update_topic_walker( $inserted_topic );
    $topic_count ++;
    }
    }
    global $wp_rewrite;
    $wp_rewrite->flush_rules(false);
    }

Viewing 14 replies - 26 through 39 (of 39 total)
  • @jotaace

    Participant

    Hi AlexKramer,

    Sorry but i can’t find the way to use the plugin. Would you mind to post a little instructions on its usage? I only know how to paste the code in a txt file, renaming as php, zipping and installing as a plugin.

    And where to paste the code lines of your previous post in the plugin, please?

    I’ll be very grateful if I really can import my forum.

    Thanks in advance.

    @jotaace

    Participant

    Ok. I’ve activated the plugin and executed “http://site.com?bbpressimport=1&delete=1&#8221; where “site.com” is the URL of my WP installation.

    The conversion lasted less than a minute for approx. 1500 posts and had completed succesfully and with no errors. My SPF version is 4.4.1.

    Congrats for the plugin.

    @jotaace

    Participant

    Ok. I’ve activated the plugin and executed “http://site.com?bbpressimport=1&delete=1&#8221; where “site.com” is the URL of my WP installation.

    The conversion lasted less than a minute for approx. 1500 posts and had completed succesfully and with no errors. My SPF version is 4.4.1.

    Congrats for the plugin.

    @alexkramer

    Participant

    @alexkramer

    Participant

    @alexkramer

    Participant

    This is plugin for import from “Simple Press forum” to bbPress-wp-plugin.

    Please help make same, but for import to independent bbPress-forum.

    It possible?

    At least one example how i can write into the bbPress database?

    @alexkramer

    Participant

    This is plugin for import from “Simple Press forum” to bbPress-wp-plugin.

    Please help make same, but for import to independent bbPress-forum.

    It possible?

    At least one example how i can write into the bbPress database?

    @leew4jc

    Member

    Plugin worked brilliantly, thank you so much. Really saved a bunch of time and stress.

    Just a side note – Sermon Browser is also awesome, so thank you again!

    @leew4jc

    Member

    Plugin worked brilliantly, thank you so much. Really saved a bunch of time and stress.

    Just a side note – Sermon Browser is also awesome, so thank you again!

    @doortoriver

    Participant

    You. Are. AMAZING. Thank you so much for this plugin! I’m a debut author, and Simple:Press has given me nothing but headaches. I didn’t know how I was going to preserve what forum structure and posts there were – thought I was going to lose everything. You totally saved my neck. 😀

    @netweb

    Keymaster

    I have created a ticket in trac https://bbpress.trac.wordpress.org/ticket/2074
    If you could keep all bugs and/or feedback posted to this ticket (‘tracs’ everything in one place)

    This has only beeen tested using Simple Press 5.1.4

    To install download the SimplePress5.php file and upload it to bbPress in the folder /wp-content/plugins/includes/admin/converters/

    Basic instructions on using any of the import tools are here (will to get these updated soon)

    @kmal91

    Participant

    Bro! Alex Kramer! You are awesome. That plugin did indeed work brilliantly. Thanks again.

    @alexkramer

    Participant

    Changes for version 0.3
    * Check user capability
    * Convert user subscriptions
    * Convert Simple-press groups to bb-press category forum
    Usage example:
    http://site.com?bbpressimport=1&delete=1
    And of course make a database backup before converting.

    Download

    @gomle

    Participant

    Hi, I hope it’s ok to ask my question here. I am trying to import about 175.000 posts, 11400 threads from simplepress 5.x to bbpress.
    All tables are in the same db, on the same server.

    It imported the threads ok, and the first 9000 posts. But after this the script seems to have a problem continue the import. It goes very slow.

    I have tried started again and again, and when I stop the script, and start it again – it imports about 50 before it stops importing – but it keeps running though.

    When I press Stop – I go to the Repair-tab in another browser-window, and reset the counting, then I go back and restart the import using “Delete all information from earlier imports” with 1 second delay, and 100 at the time.

    Still imports around 50 more, and then it stops. So now I am at about 17.600 posts. 10%.

    Will this not work for 175.000 posts? Am I doing something wrong?

    Server CPU is at 0%

Viewing 14 replies - 26 through 39 (of 39 total)
  • You must be logged in to reply to this topic.
Skip to toolbar