]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/import/wordpress.php
Wordpress 2.7.1
[autoinstalls/wordpress.git] / wp-admin / import / wordpress.php
index 5271abe008e082be035d17bcf74b0f88e25026e8..762ccb3f2c647e07456d8199492c7fc7d105291c 100644 (file)
@@ -1,5 +1,19 @@
 <?php
-
+/**
+ * WordPress Importer
+ *
+ * @package WordPress
+ * @subpackage Importer
+ */
+
+/**
+ * WordPress Importer
+ *
+ * Will process the WordPress eXtended RSS files that you upload from the export
+ * file.
+ *
+ * @since unknown
+ */
 class WP_Import {
 
        var $post_ids_processed = array ();
@@ -20,6 +34,7 @@ class WP_Import {
 
        function header() {
                echo '<div class="wrap">';
+               screen_icon();
                echo '<h2>'.__('Import WordPress').'</h2>';
        }
 
@@ -35,7 +50,7 @@ class WP_Import {
 
        function greet() {
                echo '<div class="narrow">';
-               echo '<p>'.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we&#8217;ll import the posts, comments, custom fields, and categories into this blog.').'</p>';
+               echo '<p>'.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we&#8217;ll import the posts, pages, comments, custom fields, categories, and tags into this blog.').'</p>';
                echo '<p>'.__('Choose a WordPress WXR file to upload, then click Upload file and import.').'</p>';
                wp_import_upload_form("admin.php?import=wordpress&amp;step=1");
                echo '</div>';
@@ -92,6 +107,11 @@ class WP_Import {
                                if ( !$is_wxr_file && preg_match('|xmlns:wp="http://wordpress[.]org/export/\d+[.]\d+/"|', $importline) )
                                        $is_wxr_file = true;
 
+                               if ( false !== strpos($importline, '<wp:base_site_url>') ) {
+                                       preg_match('|<wp:base_site_url>(.*?)</wp:base_site_url>|is', $importline, $url);
+                                       $this->base_url = $url[1];
+                                       continue;
+                               }
                                if ( false !== strpos($importline, '<wp:category>') ) {
                                        preg_match('|<wp:category>(.*?)</wp:category>|is', $importline, $category);
                                        $this->categories[] = $category[1];
@@ -178,6 +198,7 @@ class WP_Import {
 
        function wp_authors_form() {
 ?>
+<?php screen_icon(); ?>
 <h2><?php _e('Assign Authors'); ?></h2>
 <p><?php _e('To make it easier for you to edit and save the imported posts and drafts, you may want to change the name of the author of the posts. For example, you may want to import all the entries as <code>admin</code>s entries.'); ?></p>
 <?php
@@ -187,9 +208,9 @@ class WP_Import {
 
 
                $authors = $this->get_wp_authors();
-               echo '<ol id="authors">';
                echo '<form action="?import=wordpress&amp;step=2&amp;id=' . $this->id . '" method="post">';
                wp_nonce_field('import-wordpress');
+               echo '<ol id="authors">';
                $j = -1;
                foreach ($authors as $author) {
                        ++ $j;
@@ -201,6 +222,7 @@ class WP_Import {
                if ( $this->allow_fetch_attachments() ) {
 ?>
 </ol>
+<?php screen_icon(); ?>
 <h2><?php _e('Import Attachments'); ?></h2>
 <p>
        <input type="checkbox" value="1" name="attachments" id="import-attachments" />
@@ -210,7 +232,9 @@ class WP_Import {
 <?php
                }
 
-               echo '<input type="submit" value="'.attribute_escape( __('Submit') ).'">'.'<br />';
+               echo '<p class="submit">';
+               echo '<input type="submit" class="button" value="'.attribute_escape( __('Submit') ).'" />'.'<br />';
+               echo '</p>';
                echo '</form>';
 
        }
@@ -218,7 +242,7 @@ class WP_Import {
        function users_form($n, $author) {
 
                if ( $this->allow_create_users() ) {
-                       printf('<label>'.__('Create user %1$s or map to existing'), ' <input type="text" value="'.$author.'" name="'.'user_create['.intval($n).']'.'" maxlength="30"></label> <br />');
+                       printf('<label>'.__('Create user %1$s or map to existing'), ' <input type="text" value="'.$author.'" name="'.'user_create['.intval($n).']'.'" maxlength="30" /></label> <br />');
                }
                else {
                        echo __('Map to existing').'<br />';
@@ -320,7 +344,6 @@ class WP_Import {
        }
 
        function process_posts() {
-               $i = -1;
                echo '<ol>';
 
                $this->get_entries(array(&$this, 'process_post'));
@@ -339,7 +362,7 @@ class WP_Import {
                $post_ID = (int) $this->get_tag( $post, 'wp:post_id' );
                if ( $post_ID && !empty($this->post_ids_processed[$post_ID]) ) // Processed already
                        return 0;
-               
+
                set_time_limit( 60 );
 
                // There are only ever one of these
@@ -358,12 +381,12 @@ class WP_Import {
                $post_author    = $this->get_tag( $post, 'dc:creator' );
 
                $post_excerpt = $this->get_tag( $post, 'excerpt:encoded' );
-               $post_excerpt = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_excerpt);
+               $post_excerpt = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_excerpt);
                $post_excerpt = str_replace('<br>', '<br />', $post_excerpt);
                $post_excerpt = str_replace('<hr>', '<hr />', $post_excerpt);
 
                $post_content = $this->get_tag( $post, 'content:encoded' );
-               $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content);
+               $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content);
                $post_content = str_replace('<br>', '<br />', $post_content);
                $post_content = str_replace('<hr>', '<hr />', $post_content);
 
@@ -390,6 +413,7 @@ class WP_Import {
                if ( $post_exists ) {
                        echo '<li>';
                        printf(__('Post <em>%s</em> already exists.'), stripslashes($post_title));
+                       $comment_post_ID = $post_id = $post_exists;
                } else {
 
                        // If it has parent, process parent first.
@@ -410,6 +434,7 @@ class WP_Import {
                        $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_excerpt', 'post_title', 'post_status', 'post_name', 'comment_status', 'ping_status', 'guid', 'post_parent', 'menu_order', 'post_type', 'post_password');
+                       $postdata['import_id'] = $post_ID;
                        if ($post_type == 'attachment') {
                                $remote_url = $this->get_tag( $post, 'wp:attachment_url' );
                                if ( !$remote_url )
@@ -436,6 +461,8 @@ class WP_Import {
                        if (count($categories) > 0) {
                                $post_cats = array();
                                foreach ($categories as $category) {
+                                       if ( '' == $category )
+                                               continue;
                                        $slug = sanitize_term_field('slug', $category, 0, 'category', 'db');
                                        $cat = get_term_by('slug', $slug, 'category');
                                        $cat_ID = 0;
@@ -444,6 +471,8 @@ class WP_Import {
                                        if ($cat_ID == 0) {
                                                $category = $wpdb->escape($category);
                                                $cat_ID = wp_insert_category(array('cat_name' => $category));
+                                               if ( is_wp_error($cat_ID) )
+                                                       continue;
                                        }
                                        $post_cats[] = $cat_ID;
                                }
@@ -454,6 +483,8 @@ class WP_Import {
                        if (count($tags) > 0) {
                                $post_tags = array();
                                foreach ($tags as $tag) {
+                                       if ( '' == $tag )
+                                               continue;
                                        $slug = sanitize_term_field('slug', $tag, 0, 'post_tag', 'db');
                                        $tag_obj = get_term_by('slug', $slug, 'post_tag');
                                        $tag_id = 0;
@@ -462,6 +493,8 @@ class WP_Import {
                                        if ( $tag_id == 0 ) {
                                                $tag = $wpdb->escape($tag);
                                                $tag_id = wp_insert_term($tag, 'post_tag');
+                                               if ( is_wp_error($tag_id) )
+                                                       continue;
                                                $tag_id = $tag_id['term_id'];
                                        }
                                        $post_tags[] = intval($tag_id);
@@ -525,6 +558,11 @@ class WP_Import {
        function process_attachment($postdata, $remote_url) {
                if ($this->fetch_attachments and $remote_url) {
                        printf( __('Importing attachment <em>%s</em>... '), htmlspecialchars($remote_url) );
+
+                       // If the URL is absolute, but does not contain http, upload it assuming the base_site_url variable
+                       if ( preg_match('/^\/[\w\W]+$/', $remote_url) )
+                               $remote_url = rtrim($this->base_url,'/').$remote_url;
+
                        $upload = $this->fetch_remote_file($postdata, $remote_url);
                        if ( is_wp_error($upload) ) {
                                printf( __('Remote file error: %s'), htmlspecialchars($upload->get_error_message()) );
@@ -579,10 +617,16 @@ class WP_Import {
                // fetch the remote url and write it to the placeholder file
                $headers = wp_get_http($url, $upload['file']);
 
+               //Request failed
+               if ( ! $headers ) {
+                       @unlink($upload['file']);
+                       return new WP_Error( 'import_file_error', __('Remote server did not respond') );
+               }
+
                // make sure the fetch was successful
                if ( $headers['response'] != '200' ) {
                        @unlink($upload['file']);
-                       return new WP_Error( 'import_file_error', sprintf(__('Remote file returned error response %d'), intval($headers['response'])) );
+                       return new WP_Error( 'import_file_error', sprintf(__('Remote file returned error response %1$d %2$s'), $headers['response'], get_status_header_desc($headers['response']) ) );
                }
                elseif ( isset($headers['content-length']) && filesize($upload['file']) != $headers['content-length'] ) {
                        @unlink($upload['file']);
@@ -691,10 +735,12 @@ class WP_Import {
 
                $this->import_start();
                $this->get_authors_from_post();
+               wp_suspend_cache_invalidation(true);
                $this->get_entries();
                $this->process_categories();
                $this->process_tags();
                $result = $this->process_posts();
+               wp_suspend_cache_invalidation(false);
                $this->backfill_parents();
                $this->backfill_attachment_urls();
                $this->import_end();
@@ -746,8 +792,15 @@ class WP_Import {
        }
 }
 
+/**
+ * Register WordPress Importer
+ *
+ * @since unknown
+ * @var WP_Import
+ * @name $wp_import
+ */
 $wp_import = new WP_Import();
 
-register_importer('wordpress', 'WordPress', __('Import <strong>posts, comments, custom fields, pages, and categories</strong> from a WordPress export file.'), array ($wp_import, 'dispatch'));
+register_importer('wordpress', 'WordPress', __('Import <strong>posts, pages, comments, custom fields, categories, and tags</strong> from a WordPress export file.'), array ($wp_import, 'dispatch'));
 
 ?>