X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/ff81ee6e8304a1982a3ec4f5b134764a29d502cf..refs/tags/wordpress-2.9:/wp-admin/import/mt.php?ds=sidebyside
diff --git a/wp-admin/import/mt.php b/wp-admin/import/mt.php
index 3281f087..548e9ede 100644
--- a/wp-admin/import/mt.php
+++ b/wp-admin/import/mt.php
@@ -1,5 +1,18 @@
';
- echo '
'.__('Import Movable Type').' ';
+ screen_icon();
+ echo ''.__('Import Movable Type or TypePad').' ';
}
function footer() {
@@ -21,18 +35,31 @@ class MT_Import {
function greet() {
$this->header();
?>
-
+
+
mt-export.txt in your /wp-content/
directory and then click "Import mt-export.txt"'); ?>
+
-
out of memory error try splitting up the import file into pieces.'); ?>
+
+
out of memory error try splitting up the import file into pieces.'); ?>
+
footer();
}
function users_form($n) {
- global $wpdb, $testing;
+ global $wpdb;
$users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID");
?>
- - Select -
+
has_gzip() )
+ return gzopen($filename, $mode);
+ return fopen($filename, $mode);
+ }
+
+ function feof($fp) {
+ if ( $this->has_gzip() )
+ return gzeof($fp);
+ return feof($fp);
+ }
+
+ function fgets($fp, $len=8192) {
+ if ( $this->has_gzip() )
+ return gzgets($fp, $len);
+ return fgets($fp, $len);
+ }
+
+ function fclose($fp) {
+ if ( $this->has_gzip() )
+ return gzclose($fp);
+ return fclose($fp);
+ }
+
//function to check the authorname and do the mapping
function checkauthor($author) {
- global $wpdb;
//mtnames is an array with the names in the mt import file
- $pass = 'changeme';
+ $pass = wp_generate_password();
if (!(in_array($author, $this->mtnames))) { //a new mt author name is found
++ $this->j;
- $this->mtnames[$this->j] = $author; //add that new mt author name to an array
+ $this->mtnames[$this->j] = $author; //add that new mt author name to an array
$user_id = username_exists($this->newauthornames[$this->j]); //check if the new author name defined by the user is a pre-existing wp user
- if (!$user_id) { //banging my head against the desk now.
- if ($newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname
+ if (!$user_id) { //banging my head against the desk now.
+ if ($this->newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname
$user_id = wp_create_user($author, $pass);
$this->newauthornames[$this->j] = $author; //now we have a name, in the place of left_blank.
} else {
@@ -73,25 +126,27 @@ class MT_Import {
return $user_id;
}
- function get_entries() {
- set_magic_quotes_runtime(0);
- $importdata = file($this->file); // Read the file into an array
- $importdata = implode('', $importdata); // squish it
- $importdata = preg_replace("/(\r\n|\n|\r)/", "\n", $importdata);
- $importdata = preg_replace("/\n--------\n/", "--MT-ENTRY--\n", $importdata);
- $this->posts = explode("--MT-ENTRY--", $importdata);
- }
-
function get_mt_authors() {
- $temp = array ();
- $i = -1;
- foreach ($this->posts as $post) {
- if ('' != trim($post)) {
- ++ $i;
- preg_match("|AUTHOR:(.*)|", $post, $thematch);
- $thematch = trim($thematch[1]);
- array_push($temp, "$thematch"); //store the extracted author names in a temporary array
- }
+ $temp = array();
+ $authors = array();
+
+ $handle = $this->fopen($this->file, 'r');
+ if ( $handle == null )
+ return false;
+
+ $in_comment = false;
+ while ( $line = $this->fgets($handle) ) {
+ $line = trim($line);
+
+ if ( 'COMMENT:' == $line )
+ $in_comment = true;
+ else if ( '-----' == $line )
+ $in_comment = false;
+
+ if ( $in_comment || 0 !== strpos($line,"AUTHOR:") )
+ continue;
+
+ $temp[] = trim( substr($line, strlen("AUTHOR:")) );
}
//we need to find unique values of author names, while preserving the order, so this function emulates the unique_value(); php function, without the sorting.
@@ -103,6 +158,8 @@ class MT_Import {
array_push($authors, "$next");
}
+ $this->fclose($handle);
+
return $authors;
}
@@ -134,270 +191,293 @@ class MT_Import {
function mt_authors_form() {
?>
-admins entries.'); ?>
-italics. For each of these names, you can either pick an author in your WordPress installation from the menu, or enter a name for the author in the textbox.'); ?>
-
+
+
+
+
+
italics. For each of these names, you can either pick an author in your WordPress installation from the menu, or enter a name for the author in the textbox.'); ?>
+
get_mt_authors();
echo '
';
echo ' ';
- echo '';
+ echo '
';
- flush();
}
function select_authors() {
- $file = wp_import_handle_upload();
+ if ( $_POST['upload_type'] === 'ftp' ) {
+ $file['file'] = WP_CONTENT_DIR . '/mt-export.txt';
+ if ( !file_exists($file['file']) )
+ $file['error'] = __('mt-export.txt
does not exist');
+ } else {
+ $file = wp_import_handle_upload();
+ }
if ( isset($file['error']) ) {
- echo $file['error'];
+ $this->header();
+ echo ''.__('Sorry, there has been an error').'.
';
+ echo '' . $file['error'] . '
';
+ $this->footer();
return;
}
$this->file = $file['file'];
- $this->id = $file['id'];
+ $this->id = (int) $file['id'];
- $this->get_entries();
$this->mt_authors_form();
}
+ function save_post(&$post, &$comments, &$pings) {
+ // Reset the counter
+ set_time_limit(30);
+ $post = get_object_vars($post);
+ $post = add_magic_quotes($post);
+ $post = (object) $post;
+
+ if ( $post_id = post_exists($post->post_title, '', $post->post_date) ) {
+ echo '';
+ printf(__('Post %s already exists.'), stripslashes($post->post_title));
+ } else {
+ echo ' ';
+ printf(__('Importing post %s ...'), stripslashes($post->post_title));
+
+ if ( '' != trim( $post->extended ) )
+ $post->post_content .= "\n\n$post->extended";
+
+ $post->post_author = $this->checkauthor($post->post_author); //just so that if a post already exists, new users are not created by checkauthor
+ $post_id = wp_insert_post($post);
+ if ( is_wp_error( $post_id ) )
+ return $post_id;
+
+ // Add categories.
+ if ( 0 != count($post->categories) ) {
+ wp_create_categories($post->categories, $post_id);
+ }
+
+ // Add tags or keywords
+ if ( 1 < strlen($post->post_keywords) ) {
+ // Keywords exist.
+ printf(__(' Adding tags %s ...'), stripslashes($post->post_keywords));
+ wp_add_post_tags($post_id, $post->post_keywords);
+ }
+ }
+
+ $num_comments = 0;
+ foreach ( $comments as $comment ) {
+ $comment = get_object_vars($comment);
+ $comment = add_magic_quotes($comment);
+
+ if ( !comment_exists($comment['comment_author'], $comment['comment_date'])) {
+ $comment['comment_post_ID'] = $post_id;
+ $comment = wp_filter_comment($comment);
+ wp_insert_comment($comment);
+ $num_comments++;
+ }
+ }
+
+ if ( $num_comments )
+ printf(' '._n('(%s comment)', '(%s comments)', $num_comments), $num_comments);
+
+ $num_pings = 0;
+ foreach ( $pings as $ping ) {
+ $ping = get_object_vars($ping);
+ $ping = add_magic_quotes($ping);
+
+ if ( !comment_exists($ping['comment_author'], $ping['comment_date'])) {
+ $ping['comment_content'] = "{$ping['title']} \n\n{$ping['comment_content']}";
+ $ping['comment_post_ID'] = $post_id;
+ $ping = wp_filter_comment($ping);
+ wp_insert_comment($ping);
+ $num_pings++;
+ }
+ }
+
+ if ( $num_pings )
+ printf(' '._n('(%s ping)', '(%s pings)', $num_pings), $num_pings);
+
+ echo " ";
+ //ob_flush();flush();
+ }
+
function process_posts() {
global $wpdb;
- $i = -1;
- echo "";
- foreach ($this->posts as $post) {
- if ('' != trim($post)) {
- ++ $i;
- unset ($post_categories);
-
- // Take the pings out first
- preg_match("|(-----\n\nPING:.*)|s", $post, $pings);
- $post = preg_replace("|(-----\n\nPING:.*)|s", '', $post);
-
- // Then take the comments out
- 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 = $wpdb->escape(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 = $wpdb->escape($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 = $value;
- break;
- case 'TITLE' :
- $post_title = $wpdb->escape($value);
- break;
- case 'STATUS' :
- // "publish" and "draft" enumeration items match up; no change required
- $post_status = $value;
- if (empty ($post_status))
- $post_status = 'publish';
- break;
- case 'ALLOW COMMENTS' :
- $post_allow_comments = $value;
- if ($post_allow_comments == 1) {
- $comment_status = 'open';
- } else {
- $comment_status = 'closed';
- }
- break;
- case 'CONVERT BREAKS' :
- $post_convert_breaks = $value;
- break;
- case 'ALLOW PINGS' :
- $ping_status = trim($meta[2][0]);
- if ($ping_status == 1) {
- $ping_status = 'open';
- } else {
- $ping_status = 'closed';
- }
- break;
- case 'PRIMARY CATEGORY' :
- if (! empty ($value) )
- $post_categories[] = $wpdb->escape($value);
- break;
- case 'CATEGORY' :
- if (! empty ($value) )
- $post_categories[] = $wpdb->escape($value);
- break;
- case 'DATE' :
- $post_modified = strtotime($value);
- $post_modified = date('Y-m-d H:i:s', $post_modified);
- $post_modified_gmt = get_gmt_from_date("$post_modified");
- $post_date = $post_modified;
- $post_date_gmt = $post_modified_gmt;
- break;
- default :
- // echo "\n$key: $value";
- break;
- } // end switch
- } // End foreach
-
- // Let's check to see if it's in already
- if ($post_id = post_exists($post_title, '', $post_date)) {
- echo '';
- printf(__('Post %s already exists.'), stripslashes($post_title));
- } else {
- echo ' ';
- printf(__('Importing post %s ...'), stripslashes($post_title));
-
- $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor
- $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt');
- $post_id = wp_insert_post($postdata);
- // Add categories.
- if (0 != count($post_categories)) {
- wp_create_categories($post_categories, $post_id);
- }
+ $handle = $this->fopen($this->file, 'r');
+ if ( $handle == null )
+ return false;
+
+ $context = '';
+ $post = new StdClass();
+ $comment = new StdClass();
+ $comments = array();
+ $ping = new StdClass();
+ $pings = array();
+
+ echo "";
+
+ while ( $line = $this->fgets($handle) ) {
+ $line = trim($line);
+
+ if ( '-----' == $line ) {
+ // Finishing a multi-line field
+ if ( 'comment' == $context ) {
+ $comments[] = $comment;
+ $comment = new StdClass();
+ } else if ( 'ping' == $context ) {
+ $pings[] = $ping;
+ $ping = new StdClass();
}
-
- $comment_post_ID = $post_id;
- $comment_approved = 1;
-
- // Now for comments
- $comments = explode("-----\nCOMMENT:", $comments[0]);
- $num_comments = 0;
- foreach ($comments as $comment) {
- if ('' != trim($comment)) {
- // Author
- preg_match("|AUTHOR:(.*)|", $comment, $comment_author);
- $comment_author = $wpdb->escape(trim($comment_author[1]));
- $comment = preg_replace('|(\n?AUTHOR:.*)|', '', $comment);
- preg_match("|EMAIL:(.*)|", $comment, $comment_author_email);
- $comment_author_email = $wpdb->escape(trim($comment_author_email[1]));
- $comment = preg_replace('|(\n?EMAIL:.*)|', '', $comment);
-
- preg_match("|IP:(.*)|", $comment, $comment_author_IP);
- $comment_author_IP = trim($comment_author_IP[1]);
- $comment = preg_replace('|(\n?IP:.*)|', '', $comment);
-
- preg_match("|URL:(.*)|", $comment, $comment_author_url);
- $comment_author_url = $wpdb->escape(trim($comment_author_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 = $wpdb->escape(trim($comment));
- $comment_content = str_replace('-----', '', $comment_content);
- // Check if it's already there
- if (!comment_exists($comment_author, $comment_date)) {
- $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved');
- $commentdata = wp_filter_comment($commentdata);
- wp_insert_comment($commentdata);
- $num_comments++;
- }
- }
+ $context = '';
+ } else if ( '--------' == $line ) {
+ // Finishing a post.
+ $context = '';
+ $result = $this->save_post($post, $comments, $pings);
+ if ( is_wp_error( $result ) )
+ return $result;
+ $post = new StdClass;
+ $comment = new StdClass();
+ $ping = new StdClass();
+ $comments = array();
+ $pings = array();
+ } else if ( 'BODY:' == $line ) {
+ $context = 'body';
+ } else if ( 'EXTENDED BODY:' == $line ) {
+ $context = 'extended';
+ } else if ( 'EXCERPT:' == $line ) {
+ $context = 'excerpt';
+ } else if ( 'KEYWORDS:' == $line ) {
+ $context = 'keywords';
+ } else if ( 'COMMENT:' == $line ) {
+ $context = 'comment';
+ } else if ( 'PING:' == $line ) {
+ $context = 'ping';
+ } else if ( 0 === strpos($line, "AUTHOR:") ) {
+ $author = trim( substr($line, strlen("AUTHOR:")) );
+ if ( '' == $context )
+ $post->post_author = $author;
+ else if ( 'comment' == $context )
+ $comment->comment_author = $author;
+ } else if ( 0 === strpos($line, "TITLE:") ) {
+ $title = trim( substr($line, strlen("TITLE:")) );
+ if ( '' == $context )
+ $post->post_title = $title;
+ else if ( 'ping' == $context )
+ $ping->title = $title;
+ } else if ( 0 === strpos($line, "STATUS:") ) {
+ $status = trim( strtolower( substr($line, strlen("STATUS:")) ) );
+ if ( empty($status) )
+ $status = 'publish';
+ $post->post_status = $status;
+ } else if ( 0 === strpos($line, "ALLOW COMMENTS:") ) {
+ $allow = trim( substr($line, strlen("ALLOW COMMENTS:")) );
+ if ( $allow == 1 )
+ $post->comment_status = 'open';
+ else
+ $post->comment_status = 'closed';
+ } else if ( 0 === strpos($line, "ALLOW PINGS:") ) {
+ $allow = trim( substr($line, strlen("ALLOW PINGS:")) );
+ if ( $allow == 1 )
+ $post->ping_status = 'open';
+ else
+ $post->ping_status = 'closed';
+ } else if ( 0 === strpos($line, "CATEGORY:") ) {
+ $category = trim( substr($line, strlen("CATEGORY:")) );
+ if ( '' != $category )
+ $post->categories[] = $category;
+ } else if ( 0 === strpos($line, "PRIMARY CATEGORY:") ) {
+ $category = trim( substr($line, strlen("PRIMARY CATEGORY:")) );
+ if ( '' != $category )
+ $post->categories[] = $category;
+ } else if ( 0 === strpos($line, "DATE:") ) {
+ $date = trim( substr($line, strlen("DATE:")) );
+ $date = strtotime($date);
+ $date = date('Y-m-d H:i:s', $date);
+ $date_gmt = get_gmt_from_date($date);
+ if ( '' == $context ) {
+ $post->post_modified = $date;
+ $post->post_modified_gmt = $date_gmt;
+ $post->post_date = $date;
+ $post->post_date_gmt = $date_gmt;
+ } else if ( 'comment' == $context ) {
+ $comment->comment_date = $date;
+ } else if ( 'ping' == $context ) {
+ $ping->comment_date = $date;
}
- if ( $num_comments )
- printf(__('(%s comments)'), $num_comments);
-
- // Finally the pings
- // fix the double newline on the first one
- $pings[0] = str_replace("-----\n\n", "-----\n", $pings[0]);
- $pings = explode("-----\nPING:", $pings[0]);
- $num_pings = 0;
- foreach ($pings as $ping) {
- if ('' != trim($ping)) {
- // 'Author'
- preg_match("|BLOG NAME:(.*)|", $ping, $comment_author);
- $comment_author = $wpdb->escape(trim($comment_author[1]));
- $ping = preg_replace('|(\n?BLOG NAME:.*)|', '', $ping);
-
- preg_match("|IP:(.*)|", $ping, $comment_author_IP);
- $comment_author_IP = trim($comment_author_IP[1]);
- $ping = preg_replace('|(\n?IP:.*)|', '', $ping);
-
- preg_match("|URL:(.*)|", $ping, $comment_author_url);
- $comment_author_url = $wpdb->escape(trim($comment_author_url[1]));
- $ping = preg_replace('|(\n?URL:.*)|', '', $ping);
-
- preg_match("|DATE:(.*)|", $ping, $comment_date);
- $comment_date = trim($comment_date[1]);
- $comment_date = date('Y-m-d H:i:s', strtotime($comment_date));
- $ping = preg_replace('|(\n?DATE:.*)|', '', $ping);
-
- preg_match("|TITLE:(.*)|", $ping, $ping_title);
- $ping_title = $wpdb->escape(trim($ping_title[1]));
- $ping = preg_replace('|(\n?TITLE:.*)|', '', $ping);
-
- $comment_content = $wpdb->escape(trim($ping));
- $comment_content = str_replace('-----', '', $comment_content);
-
- $comment_content = "$ping_title \n\n$comment_content";
-
- $comment_type = 'trackback';
-
- // Check if it's already there
- if (!comment_exists($comment_author, $comment_date)) {
- $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_type', 'comment_approved');
- $commentdata = wp_filter_comment($commentdata);
- wp_insert_comment($commentdata);
- $num_pings++;
- }
- }
+ } else if ( 0 === strpos($line, "EMAIL:") ) {
+ $email = trim( substr($line, strlen("EMAIL:")) );
+ if ( 'comment' == $context )
+ $comment->comment_author_email = $email;
+ else
+ $ping->comment_author_email = '';
+ } else if ( 0 === strpos($line, "IP:") ) {
+ $ip = trim( substr($line, strlen("IP:")) );
+ if ( 'comment' == $context )
+ $comment->comment_author_IP = $ip;
+ else
+ $ping->comment_author_IP = $ip;
+ } else if ( 0 === strpos($line, "URL:") ) {
+ $url = trim( substr($line, strlen("URL:")) );
+ if ( 'comment' == $context )
+ $comment->comment_author_url = $url;
+ else
+ $ping->comment_author_url = $url;
+ } else if ( 0 === strpos($line, "BLOG NAME:") ) {
+ $blog = trim( substr($line, strlen("BLOG NAME:")) );
+ $ping->comment_author = $blog;
+ } else {
+ // Processing multi-line field, check context.
+
+ if( !empty($line) )
+ $line .= "\n";
+
+ if ( 'body' == $context ) {
+ $post->post_content .= $line;
+ } else if ( 'extended' == $context ) {
+ $post->extended .= $line;
+ } else if ( 'excerpt' == $context ) {
+ $post->post_excerpt .= $line;
+ } else if ( 'keywords' == $context ) {
+ $post->post_keywords .= $line;
+ } else if ( 'comment' == $context ) {
+ $comment->comment_content .= $line;
+ } else if ( 'ping' == $context ) {
+ $ping->comment_content .= $line;
}
- if ( $num_pings )
- printf(__('(%s pings)'), $num_pings);
-
- echo "";
}
- flush();
}
+ $this->fclose($handle);
+
echo ' ';
wp_import_cleanup($this->id);
+ do_action('import_done', 'mt');
- echo '
'.sprintf(__('All done. Have fun! '), get_option('home')).' ';
+ echo '
'.sprintf(__('All done. Have fun! '), get_option('home')).' ';
}
function import() {
$this->id = (int) $_GET['id'];
- $this->file = get_attached_file($this->id);
+ if ( $this->id == 0 )
+ $this->file = WP_CONTENT_DIR . '/mt-export.txt';
+ else
+ $this->file = get_attached_file($this->id);
$this->get_authors_from_post();
- $this->get_entries();
- $this->process_posts();
+ $result = $this->process_posts();
+ if ( is_wp_error( $result ) )
+ return $result;
}
function dispatch() {
@@ -411,20 +491,24 @@ class MT_Import {
$this->greet();
break;
case 1 :
+ check_admin_referer('import-upload');
$this->select_authors();
break;
case 2:
- $this->import();
+ check_admin_referer('import-mt');
+ $result = $this->import();
+ if ( is_wp_error( $result ) )
+ echo $result->get_error_message();
break;
}
}
function MT_Import() {
- // Nothing.
+ // Nothing.
}
}
$mt_import = new MT_Import();
-register_importer('mt', 'Movable Type', __('Import posts and comments from your Movable Type blog'), array ($mt_import, 'dispatch'));
+register_importer('mt', __('Movable Type and TypePad'), __('Import posts and comments from a Movable Type or TypePad blog.'), array ($mt_import, 'dispatch'));
?>