From 832eb4f5afc9fbdd2b8a81d2f2fcda44240ff437 Mon Sep 17 00:00:00 2001 From: saxmatt Date: Fri, 2 Jan 2004 22:24:54 +0000 Subject: [PATCH] Movable Type import git-svn-id: http://svn.automattic.com/wordpress/trunk@688 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/import-mt.php | 250 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 wp-admin/import-mt.php diff --git a/wp-admin/import-mt.php b/wp-admin/import-mt.php new file mode 100644 index 000000000..bd4ad7cab --- /dev/null +++ b/wp-admin/import-mt.php @@ -0,0 +1,250 @@ + + + +WordPress › Import from Movable Type + + + +

WordPress

+ +

Howdy! We're about to begin the process to import all of your Movable Type entries into WordPress. It's pretty easy, but it can possible take a little bit of time so be patient. Before we get started, you need to edit this file (import-mt.php) and change one line so we know where to find your MT export file. Look for the line that says:

+

define('MTEXPORT', '');

+

and change it to

+

define('MTEXPORT', '/path/to/your/import.txt');

+

You have to do this manually for security reasons.

+

If you've done that and you’re all ready, let's go! Remember that the import process may take a minute or so if you have a large number of entries and comments. Think of all the rebuilding time you'll be saving once it's done. :)

+

On our test system, importing a blog of 1189 entries and about a thousand comments took 18 seconds.

+

The importer is smart enough not to import duplicates, so you can run this multiple times without worry if for whatever reason it doesn't finish.

+previous page to continue."); + +function checkauthor($author) { + global $wpdb, $tableusers; + // Checks if an author exists, creates it if it doesn't, and returns author_id + $user_id = $wpdb->get_var("SELECT ID FROM $tableusers WHERE user_login = '$author'"); + if (!$user_id) { + $wpdb->query("INSERT INTO $tableusers (user_login, user_pass, user_nickname) VALUES ('$author', 'changeme', '$author')"); + $user_id = $wpdb->get_var("SELECT ID FROM $tableusers WHERE user_login = '$author'"); + echo "Created user '$author'. "; + } + return $user_id; +} + +// Bring in the data +$datalines = file(MTEXPORT); // Read the file into an array +$importdata = implode('', $datalines); // squish it +$posts = explode("--------", $importdata); +$i = -1; +echo "
    "; +foreach ($posts as $post) { if ('' != trim($post)) { + ++$i; + unset($post_categories); + $post = preg_replace("/(\r\n|\n|\r)/", "\n", $post); + echo "
  1. Importing post... "; + + // Take the comments out first + preg_match("|(-----\nCOMMENT:.*)|s", $post, $comments); + $post = preg_replace("|(-----\nCOMMENT:.*)|s", '', $post); + + // We ignore the keywords + $post = preg_replace("|(-----\nKEYWORDS:.*)|s", '', $post); + + // We want the excerpt + preg_match("|-----\nEXCERPT:(.*)|s", $post, $excerpt); + $excerpt = addslashes(trim($excerpt[1])); + $post = preg_replace("|(-----\nEXCERPT:.*)|s", '', $post); + + // We're going to put extended body into main body with a more tag + preg_match("|-----\nEXTENDED BODY:(.*)|s", $post, $extended); + $extended = trim($extended[1]); + if ('' != $extended) $extended = "\n\n$extended"; + $post = preg_replace("|(-----\nEXTENDED BODY:.*)|s", '', $post); + + // Now for the main body + preg_match("|-----\nBODY:(.*)|s", $post, $body); + $body = trim($body[1]); + $post_content = addslashes($body . $extended); + $post = preg_replace("|(-----\nBODY:.*)|s", '', $post); + + // Grab the metadata from what's left + $metadata = explode("\n", $post); + foreach ($metadata as $line) { + preg_match("/^(.*?):(.*)/", $line, $token); + $key = trim($token[1]); + $value = trim($token[2]); + // Now we decide what it is and what to do with it + switch($key) { + case '': + break; + case 'AUTHOR': + $post_author = checkauthor($value); + break; + case 'TITLE': + $post_title = addslashes($value); + echo ''.stripslashes($post_title).'... '; + $post_name = sanitize_title($post_title); + break; + case 'STATUS': + // "publish" and "draft" enumeration items match up; no change required + $post_status = $value; + break; + case 'ALLOW COMMENTS': + $post_allow_comments = $value; + if ($post_allow_comments == 1) { + $post_allow_comments = "open"; + } else { + $post_allow_comments = "closed"; + } + break; + case 'CONVERT BREAKS': + $post_convert_breaks = $value; + break; + case 'ALLOW PINGS': + $post_allow_pings = trim($meta[2][0]); + if ($post_allow_pings == 1) { + $post_allow_pings = "open"; + } else { + $post_allow_pings = "closed"; + } + break; + case 'PRIMARY CATEGORY': + $post_categories[] = addslashes($value); + break; + case 'CATEGORY': + $post_categories[] = addslashes($value); + break; + case 'DATE': + $post_date = strtotime($value); + $post_date = date('Y-m-d H:i:s', $post_date); + break; + default: +// echo "\n$key: $value"; + break; + } // end switch + } // End foreach + + // Let's check to see if it's in already + if ($wpdb->get_var("SELECT ID FROM $tableposts WHERE post_title = '$post_title' AND post_date = '$post_date'")) { + echo "Post already imported."; + } else { + $wpdb->query("INSERT INTO $tableposts ( + post_author, post_date, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_name) + VALUES + ('$post_author', '$post_date', '$post_content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_name')"); + $post_id = $wpdb->get_var("SELECT ID FROM $tableposts WHERE post_title = '$post_title' AND post_date = '$post_date'"); + if (0 != count($post_categories)) { + foreach ($post_categories as $post_category) { + // See if the category exists yet + $cat_id = $wpdb->get_var("SELECT cat_ID from $tablecategories WHERE cat_name = '$post_category'"); + if (!$cat_id && '' != trim($post_category)) { + $cat_nicename = sanitize_title($post_category); + $wpdb->query("INSERT INTO $tablecategories (cat_name, category_nicename) VALUES ('$post_category', '$cat_nicename')"); + $cat_id = $wpdb->get_var("SELECT cat_ID from $tablecategories WHERE cat_name = '$post_category'"); + } + if ('' == trim($post_category)) $cat_id = 1; + // Double check it's not there already + $exists = $wpdb->get_row("SELECT * FROM $tablepost2cat WHERE post_id = $post_id AND category_id = $cat_id"); + + if (!$exists) { + $wpdb->query(" + INSERT INTO $tablepost2cat + (post_id, category_id) + VALUES + ($post_id, $cat_id) + "); + } + } // end category loop + } else { + $exists = $wpdb->get_row("SELECT * FROM $tablepost2cat WHERE post_id = $post_id AND category_id = 1"); + if (!$exists) $wpdb->query("INSERT INTO $tablepost2cat (post_id, category_id) VALUES ($post_id, 1) "); + } + // Now for comments + $comments = explode("-----\nCOMMENT:", $comments[0]); + foreach ($comments as $comment) { + if ('' != trim($comment)) { + // Author + preg_match("|AUTHOR:(.*)|", $comment, $comment_author); + $comment_author = addslashes(trim($comment_author[1])); + $comment = preg_replace('|(\n?AUTHOR:.*)|', '', $comment); + + preg_match("|EMAIL:(.*)|", $comment, $comment_email); + $comment_email = addslashes(trim($comment_email[1])); + $comment = preg_replace('|(\n?EMAIL:.*)|', '', $comment); + + preg_match("|IP:(.*)|", $comment, $comment_ip); + $comment_ip = trim($comment_ip[1]); + $comment = preg_replace('|(\n?IP:.*)|', '', $comment); + + preg_match("|URL:(.*)|", $comment, $comment_url); + $comment_url = addslashes(trim($comment_url[1])); + $comment = preg_replace('|(\n?URL:.*)|', '', $comment); + + preg_match("|DATE:(.*)|", $comment, $comment_date); + $comment_date = trim($comment_date[1]); + $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); + $comment = preg_replace('|(\n?DATE:.*)|', '', $comment); + + $comment_content = addslashes(trim($comment)); + + // Check if it's already there + if (!$wpdb->get_row("SELECT * FROM $tablecomments WHERE comment_date = '$comment_date' AND comment_content = '$comment_content'")) { + $wpdb->query("INSERT INTO $tablecomments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved) + VALUES + ($post_id, '$comment_author', '$comment_email', '$comment_url', '$comment_ip', '$comment_date', '$comment_content', '1')"); + echo " Comment added."; + } + } + } + } + echo "
  2. "; + flush(); + // n +} } + +?> +
+

All done. Have fun!

+ + + \ No newline at end of file