$val) { // convert the built-in WordPress roles // to their Txp equivalent switch ($key) { // publisher case 'administrator': $user['privs'] = 1; break; // managing editor case 'editor': $user['privs'] = 2; break; // staff writer case 'author': $user['privs'] = 4; break; // freelancer case 'contributor': $user['privs'] = 5; break; // none case 'subscriber': default: $user['privs'] = 0; break; } } $users[] = $user; } /* export article and link categories */ $categories = array(); $category_query = mysql_query(" select t.slug as name, t.name as title, tt.taxonomy as type, tt.parent as parent from ".$wpdbprefix."terms as t inner join ".$wpdbprefix."term_taxonomy as tt on(t.term_id = tt.term_id) order by field(tt.taxonomy, 'category','post_tag','link_category'), tt.parent asc, t.name asc ", $b2link) or $errors[] = mysql_error(); while ($category = mysql_fetch_array($category_query)) { if ($category['parent'] != 0) { $category_parent_query = mysql_query(" select slug as name from ".$wpdbprefix."terms where term_id = '".doSlash($category['parent'])."' ", $b2link) or $errors[] = mysql_error(); while ($parent = mysql_fetch_array($category_parent_query)) { $category['parent'] = $parent['name']; } } else { $category['parent'] = 'root'; } switch ($category['type']) { case 'post_tag': case 'category': $category['type'] = 'article'; break; case 'link_category': $category['type'] = 'link'; break; } $categories[] = $category; } /* export articles */ $article_query = mysql_query(" select p.ID as ID, p.post_status as Status, p.post_date as Posted, p.post_modified as LastMod, p.post_title as Title, p.post_content as Body, p.comment_status as Annotate, p.comment_count as comments_count, p.post_name as url_title, u.user_login as AuthorID from ".$wpdbprefix."posts as p left join ".$wpdbprefix."users as u on u.ID = p.post_author order by p.ID asc ", $b2link) or $errors[] = mysql_error(); while ($article = mysql_fetch_array($article_query)) { // convert WP article status to Txp equivalent switch ($article['Status']) { case 'draft': $article['Status'] = 1; break; // hidden case 'private': $article['Status'] = 2; break; case 'pending': $article['Status'] = 3; break; // live case 'publish': $article['Status'] = 4; break; default: $article['Status'] = $insert_with_status; break; } // convert WP comment status to Txp equivalent switch ($article['Annotate']) { // on case 'open': $article['Annotate'] = 1; break; // off case 'closed': case 'registered_only': $article['Annotate'] = 0; break; } // article commments $comments = array(); $comment_query = mysql_query(" select comment_author_IP as ip, comment_author as name, comment_author_email as email, comment_author_url as web, comment_content as message, comment_date as posted from ".$wpdbprefix."comments where comment_post_ID = '".$article['ID']."' order by comment_ID asc ", $b2link) or $errors[]= mysql_error(); while ($comment = mysql_fetch_assoc($comment_query)) { $comments[] = $comment; } $article['comments'] = $comments; // article categories $article_categories = array(); $article_category_query = mysql_query(" select t.name as title, t.slug as name from ".$wpdbprefix."terms as t inner join ".$wpdbprefix."term_taxonomy as tt on(t.term_id = tt.term_id) inner join ".$wpdbprefix."term_relationships as tr on(tt.term_taxonomy_id = tr.term_taxonomy_id) where tr.object_id = '".$article['ID']."' and tt.taxonomy in('post_tag', 'category') order by tr.object_id asc, t.name asc limit 2; ", $b2link) or $errors[] = mysql_error(); while ($category = mysql_fetch_array($article_category_query)) { $article_categories[] = $category; } $article['Category1'] = !empty($article_categories[0]) ? $article_categories[0]['name'] : ''; $article['Category2'] = !empty($article_categories[1]) ? $article_categories[1]['name'] : ''; $articles[] = $article; } /* export links */ $links = array(); $link_query = mysql_query(" select link_id as id, link_name as linkname, link_description as description, link_updated as date, link_url as url from ".$wpdbprefix."links order by link_id asc ", $b2link) or $errors[] = mysql_error(); while ($link = mysql_fetch_array($link_query)) { // link categories $link_categories = array(); $link_category_query = mysql_query(" select t.name as title, t.slug as name from ".$wpdbprefix."terms as t inner join ".$wpdbprefix."term_taxonomy as tt on(t.term_id = tt.term_id) inner join ".$wpdbprefix."term_relationships as tr on(tt.term_taxonomy_id = tr.term_taxonomy_id) where tr.object_id = '".$link['id']."' and tt.taxonomy = 'link_category' order by tr.object_id asc, t.name asc ", $b2link) or $errors[] = mysql_error(); while ($category = mysql_fetch_array($link_category_query)) { $link['category'] = $category['name']; } $links[] = $link; } mysql_close($b2link); /* begin import */ // keep a handy copy of txpdb values, and do not alter Dean code // for now! ;-) $txpdb = $txpcfg['db']; $txpdblogin = $txpcfg['user']; $txpdbpass = $txpcfg['pass']; $txpdbhost = $txpcfg['host']; // Yes, we have to make a new connection // otherwise doArray complains $DB = new DB; $txplink = &$DB->link; mysql_select_db($txpdb, $txplink); /* import users */ if ($users) { include_once txpath.'/lib/txplib_admin.php'; $results[] = hed('Imported Users:', 2). n.graf('Because WordPress uses a different password mechanism than Textpattern, you will need to reset each user’s password from the Users tab.'). n.''; } /* import categories */ if ($categories) { $results[] = hed('Imported Categories:', 2).n.''; } /* import articles */ if ($articles) { $results[] = hed('Imported Articles and Comments:', 2).n.''; } /* import links */ if ($links) { $results[] = hed('Imported Links:', 2).n.''; } /* show any errors we encountered */ if ($errors) { $results[] = hed('Errors Encountered:', 2).n.''; } return join(n, $results); } function undoSlash($in) { return doArray($in, 'stripslashes'); } ?>