X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/022dfbbbe3215917d84708eb09acca93b21ae9e0..refs/tags/wordpress-2.9:/wp-admin/import/mt.php diff --git a/wp-admin/import/mt.php b/wp-admin/import/mt.php index f02b0697..548e9ede 100644 --- a/wp-admin/import/mt.php +++ b/wp-admin/import/mt.php @@ -1,5 +1,18 @@ '; - echo '

'.__('Import Movable Type and Typepad').'

'; + screen_icon(); + echo '

'.__('Import Movable Type or TypePad').'

'; } function footer() { @@ -21,15 +35,28 @@ 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.'); ?>

+
+ + +

+ +mt-export.txt in your /wp-content/ directory'); ?>

+

+ +

+
+

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"); ?> 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; } @@ -135,10 +192,11 @@ 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.'); ?>

+

'.__('Current author:').' '.$author.'
'.sprintf(__('Create user %1$s or map to existing'), '
'); + echo '
  • '; + echo ''; } - echo ''.'
    '; + echo '

    '.'
    '; echo ''; echo '
    '; } 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']) ) { $this->header(); echo '

    '.__('Sorry, there has been an error').'.

    '; @@ -172,237 +236,248 @@ class MT_Import { $this->file = $file['file']; $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); - $post_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 '
    1. '; - printf(__('Post %s already exists.'), stripslashes($post_title)); - } else { - echo '
    2. '; - 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 + $handle = $this->fopen($this->file, 'r'); + if ( $handle == null ) + return false; - $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); - } - } + $context = ''; + $post = new StdClass(); + $comment = new StdClass(); + $comments = array(); + $ping = new StdClass(); + $pings = array(); - $comment_post_ID = (int) $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++; - } - } + 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(); } - 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++; - } - } + $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; + } + } 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 ""; } } + $this->fclose($handle); + echo '
      '; wp_import_cleanup($this->id); + do_action('import_done', 'mt'); 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() { @@ -421,7 +496,9 @@ class MT_Import { break; case 2: check_admin_referer('import-mt'); - $this->import(); + $result = $this->import(); + if ( is_wp_error( $result ) ) + echo $result->get_error_message(); break; } } @@ -433,5 +510,5 @@ class MT_Import { $mt_import = new MT_Import(); -register_importer('mt', __('Movable Type and Typepad'), __('Imports posts and comments from your Movable Type or Typepad 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')); ?>