v2: Simple Press importer, and first thoughts
-
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);
}
- You must be logged in to reply to this topic.