X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/8a06f4f9392d1ac373442f82ee40428a3cb81395..449d082fcc4873c1f7d363a0d9f7409be7f6e77d:/wp-admin/import/wordpress.php diff --git a/wp-admin/import/wordpress.php b/wp-admin/import/wordpress.php index 5271abe0..762ccb3f 100644 --- a/wp-admin/import/wordpress.php +++ b/wp-admin/import/wordpress.php @@ -1,5 +1,19 @@ '; + screen_icon(); echo '

'.__('Import WordPress').'

'; } @@ -35,7 +50,7 @@ class WP_Import { function greet() { echo '
'; - echo '

'.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, comments, custom fields, and categories into this blog.').'

'; + echo '

'.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this blog.').'

'; echo '

'.__('Choose a WordPress WXR file to upload, then click Upload file and import.').'

'; wp_import_upload_form("admin.php?import=wordpress&step=1"); echo '
'; @@ -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, '') ) { + preg_match('|(.*?)|is', $importline, $url); + $this->base_url = $url[1]; + continue; + } if ( false !== strpos($importline, '') ) { preg_match('|(.*?)|is', $importline, $category); $this->categories[] = $category[1]; @@ -178,6 +198,7 @@ class WP_Import { function wp_authors_form() { ?> +

admins entries.'); ?>

get_wp_authors(); - echo '
    '; echo '
    '; wp_nonce_field('import-wordpress'); + echo '
      '; $j = -1; foreach ($authors as $author) { ++ $j; @@ -201,6 +222,7 @@ class WP_Import { if ( $this->allow_fetch_attachments() ) { ?>
    +

    @@ -210,7 +232,9 @@ class WP_Import { '.'
    '; + echo '

    '; + echo ''.'
    '; + echo '

    '; echo '
    '; } @@ -218,7 +242,7 @@ class WP_Import { function users_form($n, $author) { if ( $this->allow_create_users() ) { - printf('
    '); + printf('
    '); } else { echo __('Map to existing').'
    '; @@ -320,7 +344,6 @@ class WP_Import { } function process_posts() { - $i = -1; echo '
      '; $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('
      ', '
      ', $post_excerpt); $post_excerpt = str_replace('
      ', '
      ', $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('
      ', '
      ', $post_content); $post_content = str_replace('
      ', '
      ', $post_content); @@ -390,6 +413,7 @@ class WP_Import { if ( $post_exists ) { echo '
    1. '; printf(__('Post %s 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 %s... '), 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 posts, comments, custom fields, pages, and categories from a WordPress export file.'), array ($wp_import, 'dispatch')); +register_importer('wordpress', 'WordPress', __('Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.'), array ($wp_import, 'dispatch')); ?>