$v ) { if ( 'id' == $att ) { $id = $v; $v = $type . '_' . $v; } $atts .= " $att='$v'"; } unset($att, $v); $r .= str_repeat("\t", $tabs) . "<$type{$atts}>\n"; foreach ( (array) $properties as $k => $v ) { if ( 'meta' == $k ) { $data = ''; foreach ( $v as $mk => $mv ) $data .= str_repeat("\t", $tabs + 1) . "\n"; } else { if ( '!' == $k{0} ) { $k = substr($k, 1); $v = ""; } $data = str_repeat("\t", $tabs + 1) . "<$k>$v\n"; } $r .= $data; } $r .= apply_filters( 'in_bb_export_object_' . $type, '', $id ); $r .= str_repeat("\t", $tabs) . "\n\n"; return $r; } // See bb_export_user for syntax function _bb_translate_for_export( $translate, &$data ) { $r = array(); foreach ( $translate as $prop => $export ) { if ( '?' == $export{0} ) { $export = substr($export, 1); if ( !$data[$prop] ) { unset($data[$prop]); continue; } } if ( false === $export ) { unset($data[$prop]); continue; } $r[$export] = $data[$prop]; unset($data[$prop]); } unset($export, $prop); return $r; } function bb_export_user( $user_id ) { global $bbdb; if ( !$_user = bb_get_user( $user_id ) ) return; $_user = get_object_vars($_user); $atts = array( 'type' => 'user', 'id' => $_user['ID'] ); // ?url means url is optional. Only include it in the export if it exists // !title means the title should be wrapped in CDATA // ?! is the correct order, not !? $translate = array( 'user_login' => 'login', 'user_pass' => 'pass', 'user_email' => 'email', 'user_url' => '?url', 'user_registered' => 'incept', 'display_name' => '?!title', 'user_nicename' => '?nicename', 'user_status' => '?status', 'ID' => false ); $user = _bb_translate_for_export( $translate, $_user ); $meta = array(); foreach ( $_user as $k => $v ) { if ( 0 !== strpos($k, $bbdb->prefix) && isset($_user[$bbdb->prefix . $k]) ) continue; $meta[$k] = maybe_serialize($v); } unset($_user, $k, $v); $user['meta'] = $meta; return _bb_export_object( $atts, $user ); } function bb_export_forum( $forum_id ) { if ( !$_forum = bb_get_forum( $forum_id ) ) return; $_forum = get_object_vars( $_forum ); $translate = array( 'forum_name' => '!title', 'forum_desc' => '?!content', 'forum_parent' => '?parent' ); $forum = _bb_translate_for_export( $translate, $_forum ); return _bb_export_object( array('type' => 'forum', 'id' => $_forum['forum_id']), $forum ); } function bb_export_topic( $topic_id ) { if ( !$_topic = get_topic( $topic_id ) ) return; $_topic = get_object_vars( $_topic ); $atts = array( 'type' => 'topic', 'id' => $_topic['topic_id'], 'author' => 'user_' . $_topic['topic_poster'], 'in' => 'forum_' . $_topic['forum_id'] ); $translate = array( 'topic_title' => '!title', 'topic_start_time' => 'incept', 'topic_status' => '?status', 'topic_id' => false, 'topic_poster' => false, 'topic_poster_name' => false, 'topic_last_poster' => false, 'topic_last_poster_name' => false, 'topic_time' => false, 'forum_id' => false, 'topic_last_post_id' => false, 'topic_posts' => false, 'tag_count' => false ); $topic = _bb_translate_for_export( $translate, $_topic ); $meta = array(); foreach ( $_topic as $k => $v ) $meta[$k] = maybe_serialize($v); unset($_topic, $k, $v); $topic['meta'] = $meta; return _bb_export_object( $atts, $topic ); } function bb_export_post( $post_id ) { if ( !$_post = bb_get_post( $post_id ) ) return; $_post = get_object_vars($_post); $atts = array( 'type' => 'post', 'id' => $_post['post_id'], 'author' => 'user_' . $_post['poster_id'] ); $translate = array( 'post_time' => 'incept', 'post_text' => '!content', 'post_status' => '?status', 'post_id' => false, 'poster_id' => false, 'forum_id' => false, 'topic_id' => false, 'post_position' => false ); $post = _bb_translate_for_export( $translate, $_post ); $post['meta'] = $_post; return _bb_export_object( $atts, $post, 2 ); } // One of these things is not like the others... function bb_export_tag( $tag ) { // id here is not numeric. does not currently preserve tagged_on return "\t\traw_tag]]>\n"; } function bb_export_topic_tags( $r, $topic_id ) { global $topic_tag_cache; if ( !get_topic( $topic_id ) ) return; if ( !$tags = bb_get_topic_tags( $topic_id ) ) return $r; $r .= "\n"; foreach ( (array) $tags as $tag ) $r .= bb_export_tag( $tag ); $topic_tag_cache = array(); return $r; } function bb_export_topic_posts( $r, $topic_id ) { if ( !get_topic( $topic_id ) ) return; $r .= "\n"; $page = 1; while ( $posts = get_thread( $topic_id, array( 'post_status' => 'all', 'page' => $page++ ) ) ) { foreach ( $posts as $post ) $r .= bb_export_post( $post->post_id ); } return $r; } function bb_export() { global $bb; define( 'BB_EXPORTING', true ); do_action( 'bb_pre_export' ); $bb->use_cache = false; // Turn off hard cache $bb->page_topics = 100; echo "\n"; if (BB_EXPORT_LEVEL & BB_EXPORT_USERS) { $page = 1; while ( ( $users = bb_user_search( array('page' => $page++) ) ) && !is_wp_error( $users ) ) { foreach ( $users as $user ) echo bb_export_user( $user->ID ); } unset($users, $user, $page); } if (BB_EXPORT_LEVEL & BB_EXPORT_FORUMS) { $forums = bb_get_forums(); foreach ( $forums as $forum ) echo bb_export_forum( $forum->forum_id ); unset($forums, $forum); } if (BB_EXPORT_LEVEL & BB_EXPORT_TOPICS) { $page = 1; while ( $topics = get_latest_topics( 0, $page++ ) ) { foreach ( $topics as $topic ) echo bb_export_topic( $topic->topic_id ); } unset($topics, $topic, $page); } do_action( 'bb_export' ); echo ''; } add_filter( 'in_bb_export_object_topic', 'bb_export_topic_tags', 10, 2 ); add_filter( 'in_bb_export_object_topic', 'bb_export_topic_posts', 10, 2 ); add_filter( 'get_forum_where', 'bb_no_where', 9999 ); add_filter( 'get_forums_where', 'bb_no_where', 9999 ); add_filter( 'get_latest_topics_where', 'bb_no_where', 9999 ); add_filter( 'get_user_where', 'bb_no_where', 9999 ); add_filter( 'cache_users_where', 'bb_no_where', 9999 ); bb_export(); ?>