'localhost', // hostname 'wp_user' => 'wordpress', // username 'wp_pass' => 'wordpress', // password 'wp_name' => 'wordpress', // name of the database 'wp_prefix' => 'wp_', // table prefix ); echo '
';

    // keep habari from executing
    define( 'UNIT_TEST', true );
    
    // bootstrap it
    include( 'index.php' );
    
    // create a connection to our wordpress database
    try {
        $wpdb = DatabaseConnection::ConnectionFactory( "mysql:host=" . $import['wp_host'] . ";dbname=" . $import['wp_name'] );
        $wpdb->connect( "mysql:host=" . $import['wp_host'] . ";dbname=" . $import['wp_name'], $import['wp_user'], $import['wp_pass'] );
    }
    catch( Exception $e ) {
        die('Unable to connect to WordPress database. ' . $e->getMessage());
    }
    
    
    // users
    
    $habari_users = Users::get();    // get all the habari users
    $wp_users = array();
        
    foreach ( $habari_users as $habari_user ) {
        
        // see if the user exists already in WordPress
        $wp_user = $wpdb->get_row( 'select id, user_login from ' . $import['wp_prefix'] . 'users where user_login = ?', array( $habari_user->username ) );
        
        // if it doesn't, create it
        if ( !$wp_user ) {
                
            $wpdb->query( 'insert into ' . $import['wp_prefix'] . 'users (
                    user_login,
                    user_pass,
                    user_nicename,
                    user_email,
                    user_registered,
                    display_name
                ) values ( ?, ?, ?, ?, UTC_TIMESTAMP(), ? ) ', array(
                    $habari_user->username,
                    $habari_user->password,
                    $habari_user->username,
                    $habari_user->email,
                    $habari_user->info->displayname
                )
            );
            
            $wp_users[ $habari_user->username ] = $wpdb->last_insert_id();
            
            echo 'Created user ' . $habari_user->username . ' with id ' . $wpdb->last_insert_id() . "\n";
            
        }
        else {
            
            echo 'Found existing user ' . $wp_user->user_login . ' with id ' . $wp_user->id . "\n";
            
            $wp_users[ $wp_user->user_login ] = $wp_user->id;
            
        }
        
    }
    
    
    // posts and pages
    
    // get the total number of posts, either published or draft
    $total_posts = Posts::get( array( 'count' => true, 'ignore_permissions' => true, 'content_type' => array( 'entry', 'page' ), 'status' => array( 'published', 'draft' ) ) );
    $wp_posts = array();
    
    echo 'Total Posts: ' . $total_posts . "\n";
    
    for ( $i = 0; $i < $total_posts / 10; $i++ ) {
        
        $posts = Posts::get( array( 'limit' => 10, 'offset' => $i * 10, 'ignore_permissions' => true, 'content_type' => array( 'entry', 'page' ), 'status' => array( 'published', 'draft' ) ) );
        
        echo 'Got ' . count( $posts ) . ' posts' . "\n";
        
        foreach ( $posts as $post ) {

            $insert_query = 'insert into ' . $import['wp_prefix'] . 'posts (
                post_author,
                post_date,
                post_date_gmt,
                post_content,
                post_title,
                post_status,
                comment_status,
                post_name,
                post_modified,
                post_modified_gmt,
                guid,
                post_type
            ) values (
                ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
            )';
            
            $insert_params = array(
                $wp_users[ $post->author->username ],                    // post author ID, converted to the WordPress user's
                $post->pubdate->format( 'Y-m-d H-i-s' ),
                gmdate( 'Y-m-d H-i-s', $post->pubdate->int ),
                $post->content,
                $post->title,
                Post::status_name( $post->status ) == 'published' ? 'publish' : Post::status_name( $post->status ),                        // post status (published or draft, basically), converted to a string
                $post->info->comments_disabled ? 'closed' : 'open',
                $post->slug,
                $post->modified->format( 'Y-m-d H-i-s' ),
                gmdate( 'Y-m-d H-i-s', $post->modified->int ),
                $post->guid,
                Post::type_name( $post->content_type ) == 'entry' ? 'post' : 'page'
            );
            
            $result = $wpdb->query( $insert_query, $insert_params );
        
            if ( !$result ) {
                echo 'Failed to insert post ' . $post->slug . "\n";
            }
            else {
                $wp_posts[ $post->id ] = $wpdb->last_insert_id();
            }
            
        }
        
    }    
    
    // tags
    
    // here we don't use the habari API because it would be cumbersome - if only it were as robust as the Posts API is...
    $total_tags = DB::get_value( 'select count(*) from {tags}' );
    $wp_tax = array();
    
    echo 'Total Tags: ' . $total_tags . "\n";
    
    for ( $i = 0; $i < $total_tags / 10; $i++ ) {
        
        $tags = DB::get_results( 'select id, tag_text, tag_slug from {tags} order by id limit 10 offset ' . $i * 10 );
        
        echo 'Got ' . count( $tags ) . ' tags' . "\n";
        
        foreach ( $tags as $tag ) {
            
            // first, see if it already exists as a term in WordPress
            $wp_tag = $wpdb->get_row( 'select term_id, name, slug from ' . $import['wp_prefix'] . 'terms where slug = ?', array( $tag->tag_slug ) );
            
            if ( !$wp_tag ) {
                
                $insert_query = 'insert into ' . $import['wp_prefix'] . 'terms ( name, slug ) values ( ?, ? )';
                $insert_params = array( $tag->tag_text, $tag->tag_slug );
                
                $wpdb->query( $insert_query, $insert_params );
                
                //$wp_tags[ $tag->tag_slug ] = $wpdb->last_insert_id();
                
                $tag_id = $wpdb->last_insert_id();
                
            }
            else {
                
                //$wp_tags[ $wp_tag->slug ] = $wp_tag->term_id;
                
                $tag_id = $wp_tag->term_id;
                
            }
            
            // and either way, make sure it's actually specified as a part of the tag taxonomy
            $wp_taxonomy = $wpdb->get_row( 'select term_taxonomy_id from ' . $import['wp_prefix'] . 'term_taxonomy where taxonomy = ? and term_id = ?', array( 'post_tag', $tag_id ) );
            
            if ( !$wp_taxonomy ) {
                
                $insert_query = 'insert into ' . $import['wp_prefix'] . 'term_taxonomy ( term_id, taxonomy ) values ( ?, ? )';
                $insert_params = array( $tag_id, 'post_tag' );
                
                $wpdb->query( $insert_query, $insert_params );
                
                $wp_tax[ $tag->id ] = $wpdb->last_insert_id();
                
            }
            else {
                
                $wp_tax[ $tag->id ] = $wp_taxonomy->term_taxonomy_id;
                
            }
                        
        }
        
    }
    
    // now we have to link all our tags and posts
    
    $total_joins = DB::get_value( 'select count(*) from {tag2post}' );
    
    echo 'Total Tag to Post relationships: ' . $total_joins . "\n";
    
    for ( $i = 0; $i < $total_joins / 10; $i++ ) {
        
        // get the joins
        $joins = DB::get_results( 'select tag_id, post_id from {tag2post} order by tag_id, post_id limit 10 offset ' . $i * 10 );
        
        echo 'Got ' . count( $joins ) . ' relationships' . "\n";
        
        foreach ( $joins as $join ) {
            
            // if it's not in the list of posts we imported earlier, skip it - it's probably a different content type
            if ( !array_key_exists( $join->post_id, $wp_posts ) ) {
                continue;
            }
            
            $insert_query = 'insert into ' . $import['wp_prefix'] . 'term_relationships ( object_id, term_taxonomy_id ) values ( ?, ? )';
            $insert_params = array( $wp_posts[ $join->post_id ], $wp_tax[ $join->tag_id ] );
            
            $wpdb->query( $insert_query, $insert_params );
            
        }
        
    }
    
    
    // update the tag counts
    $wpdb->query( 'update ' . $import['wp_prefix'] . 'term_taxonomy t set count = ( select count(object_id) from ' . $import['wp_prefix'] . 'term_relationships where term_taxonomy_id = t.term_taxonomy_id )');
    
    
    // comments
    
    $total_comments = DB::get_value ( 'select count(*) from {comments}' );
    
    echo 'Total comments: ' . $total_comments . "\n";
    
    // get the comment types from habari
    $comment_types = Comment::list_comment_types();
    $comment_statuses = Comment::list_comment_statuses();
    
    for ( $i = 0; $i < $total_comments / 10; $i++ ) {
        
        // get the comments
        $comments = DB::get_results( 'select post_id, name, email, url, ip, date, content, status, type from {comments} order by id limit 10 offset ' . $i * 10 );
        
        echo 'Got ' . count( $comments ) . ' comments' . "\n";
        
        foreach ( $comments as $comment ) {
            
            $comment->date = HabariDateTime::date_create( $comment->date );
                        
            $comment_status = $comment_statuses[ $comment->status ];
            $comment_type = $comment_types[ $comment->type ];
            
            if ( $comment_status == 'approved' ) {
                $comment_approved = true;
            }
            else {
                $comment_approved = false;
            }
            
            $insert_query = 'insert into ' . $import['wp_prefix'] . 'comments (
                    comment_post_id,
                    comment_author,
                    comment_author_email,
                    comment_author_url,
                    comment_author_ip,
                    comment_date,
                    comment_date_gmt,
                    comment_content,
                    comment_approved,
                    comment_type
                ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )';
            
            $insert_params = array(
                $wp_posts[ $comment->post_id ],
                $comment->name,
                $comment->email,
                $comment->url,
                long2ip( $comment->ip ),
                $comment->date->format( 'Y-m-d H-i-s' ),
                gmdate( 'Y-m-d H-i-s', $comment->date->int ),
                $comment->content,
                $comment_approved,
                $comment_type
            );
            
            $wpdb->query( $insert_query, $insert_params );
            
        }
        
    }
    
    // update comment user_id links based on user display names
    $wpdb->query( 'update ' . $import['wp_prefix'] . 'comments c set user_id = ( select ID from ' . $import['wp_prefix'] . 'users where display_name = c.comment_author ) where comment_author in ( select distinct display_name from ' . $import['wp_prefix'] . 'users )');
    
    // update post comment counts
    $wpdb->query( 'update ' . $import['wp_prefix'] . 'posts p set comment_count = ( select count(*) from ' . $import['wp_prefix'] . 'comments where comment_post_ID = p.ID and comment_approved = \'1\' )' );
    
    echo '
'; ?>