From a5fe68e002632c190ffbd85167671ed4d4961135 Mon Sep 17 00:00:00 2001 From: donncha Date: Thu, 21 Jun 2007 16:41:02 +0000 Subject: WP Merge to WP 2.2.1 git-svn-id: http://svn.automattic.com/wordpress-mu/trunk@1005 7be80a69-a1ef-0310-a953-fb0f7c49ff36 --- wp-admin/import/wordpress.php | 782 +++++++++++++++++++++--------------------- 1 file changed, 391 insertions(+), 391 deletions(-) (limited to 'wp-admin/import/wordpress.php') diff --git a/wp-admin/import/wordpress.php b/wp-admin/import/wordpress.php index fa0d194..0b1aa2a 100644 --- a/wp-admin/import/wordpress.php +++ b/wp-admin/import/wordpress.php @@ -1,391 +1,391 @@ - XML fragment, [1] => New post ID] - var $file; - var $id; - var $mtnames = array (); - var $newauthornames = array (); - var $j = -1; - - function header() { - echo '
'; - echo '

'.__('Import WordPress').'

'; - } - - function footer() { - echo '
'; - } - - function unhtmlentities($string) { // From php.net for < 4.3 compat - $trans_tbl = get_html_translation_table(HTML_ENTITIES); - $trans_tbl = array_flip($trans_tbl); - return strtr($string, $trans_tbl); - } - - 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 '

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

'; - wp_import_upload_form("admin.php?import=wordpress&step=1"); - echo '
'; - } - - function get_tag( $string, $tag ) { - global $wpdb; - preg_match("|<$tag.*?>(.*?)|is", $string, $return); - $return = $wpdb->escape( trim( $return[1] ) ); - return $return; - } - - function users_form($n) { - global $wpdb, $testing; - $users = get_users_of_blog($wpdb->blogid); -?> - file)); // Read the file into an array - - $this->posts = array(); - $this->categories = array(); - $num = 0; - $doing_entry = false; - foreach ($importdata as $importline) { - if ( false !== strpos($importline, '') ) { - preg_match('|(.*?)|is', $importline, $category); - $this->categories[] = $category[1]; - continue; - } - if ( false !== strpos($importline, '') ) { - $this->posts[$num] = ''; - $doing_entry = true; - continue; - } - if ( false !== strpos($importline, '') ) { - $num++; - $doing_entry = false; - continue; - } - if ( $doing_entry ) { - $this->posts[$num] .= $importline . "\n"; - } - } - - foreach ($this->posts as $post) { - $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); - if ($post_ID) { - $this->posts_processed[$post_ID][0] = &$post; - $this->posts_processed[$post_ID][1] = 0; - } - } - } - - function get_wp_authors() { - $temp = array (); - $i = -1; - foreach ($this->posts as $post) { - if ('' != trim($post)) { - ++ $i; - $author = $this->get_tag( $post, 'dc:creator' ); - array_push($temp, "$author"); //store the extracted author names in a temporary array - } - } - - // 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. - $authors[0] = array_shift($temp); - $y = count($temp) + 1; - for ($x = 1; $x < $y; $x ++) { - $next = array_shift($temp); - if (!(in_array($next, $authors))) - array_push($authors, "$next"); - } - - return $authors; - } - - function get_authors_from_post() { - $formnames = array (); - $selectnames = array (); - - foreach ($_POST['user'] as $key => $line) { - $newname = trim(stripslashes($line)); - if ($newname == '') - $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. - array_push($formnames, "$newname"); - } // $formnames is the array with the form entered names - - foreach ($_POST['userselect'] as $user => $key) { - $selected = trim(stripslashes($key)); - array_push($selectnames, "$selected"); - } - - $count = count($formnames); - for ($i = 0; $i < $count; $i ++) { - if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form - array_push($this->newauthornames, "$selectnames[$i]"); - } else { - array_push($this->newauthornames, "$formnames[$i]"); - } - } - } - - function wp_authors_form() { -?> -

-

admins entries.'); ?>

- get_wp_authors(); - echo '
    '; - echo '
    '; - wp_nonce_field('import-wordpress'); - $j = -1; - foreach ($authors as $author) { - ++ $j; - echo '
  1. '.__('Current author:').' '.$author.'
    '.'Map to existing: '; - $this->users_form($j); - echo '
  2. '; - } - - echo ''.'
    '; - echo '
    '; - echo '
'; - - } - - function select_authors() { - $file = wp_import_handle_upload(); - if ( isset($file['error']) ) { - echo '

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

'; - echo '

' . $file['error'] . '

'; - return; - } - $this->file = $file['file']; - $this->id = (int) $file['id']; - - $this->get_entries(); - $this->wp_authors_form(); - } - - function process_categories() { - global $wpdb; - - $cat_names = (array) $wpdb->get_col("SELECT cat_name FROM $wpdb->categories"); - - while ( $c = array_shift($this->categories) ) { - $cat_name = trim(str_replace(array (''), '', $this->get_tag( $c, 'wp:cat_name' ))); - - // If the category exists we leave it alone - if ( in_array($cat_name, $cat_names) ) - continue; - - $category_nicename = $this->get_tag( $c, 'wp:category_nicename' ); - $posts_private = (int) $this->get_tag( $c, 'wp:posts_private' ); - $links_private = (int) $this->get_tag( $c, 'wp:links_private' ); - - $parent = $this->get_tag( $c, 'wp:category_parent' ); - - if ( empty($parent) ) - $category_parent = '0'; - else - $category_parent = category_exists($parent); - - $catarr = compact('category_nicename', 'category_parent', 'posts_private', 'links_private', 'posts_private', 'cat_name'); - - $cat_ID = wp_insert_category($catarr); - } - } - - function process_posts() { - $i = -1; - echo '
    '; - - foreach ($this->posts as $post) - $this->process_post($post); - - echo '
'; - - wp_import_cleanup($this->id); - - echo '

'.sprintf(__('All done.').' '.__('Have fun!').'', get_option('home')).'

'; - } - - function process_post($post) { - global $wpdb; - - $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); - if ( $post_ID && !empty($this->posts_processed[$post_ID][1]) ) // Processed already - return 0; - - // There are only ever one of these - $post_title = $this->get_tag( $post, 'title' ); - $post_date = $this->get_tag( $post, 'wp:post_date' ); - $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); - $comment_status = $this->get_tag( $post, 'wp:comment_status' ); - $ping_status = $this->get_tag( $post, 'wp:ping_status' ); - $post_status = $this->get_tag( $post, 'wp:status' ); - $post_name = $this->get_tag( $post, 'wp:post_name' ); - $post_parent = $this->get_tag( $post, 'wp:post_parent' ); - $menu_order = $this->get_tag( $post, 'wp:menu_order' ); - $post_type = $this->get_tag( $post, 'wp:post_type' ); - $guid = $this->get_tag( $post, 'guid' ); - $post_author = $this->get_tag( $post, 'dc:creator' ); - - $post_content = $this->get_tag( $post, 'content:encoded' ); - $post_content = str_replace(array (''), '', $post_content); - $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); - $post_content = str_replace('
', '
', $post_content); - $post_content = str_replace('
', '
', $post_content); - - preg_match_all('|(.*?)|is', $post, $categories); - $categories = $categories[1]; - - $cat_index = 0; - foreach ($categories as $category) { - $categories[$cat_index] = $wpdb->escape($this->unhtmlentities(str_replace(array (''), '', $category))); - $cat_index++; - } - - if ($post_id = post_exists($post_title, '', $post_date)) { - echo '
  • '; - printf(__('Post %s already exists.'), stripslashes($post_title)); - } else { - - // If it has parent, process parent first. - $post_parent = (int) $post_parent; - if ($parent = $this->posts_processed[$post_parent]) { - if (!$parent[1]) $this->process_post($parent[0]); // If not yet, process the parent first. - $post_parent = $parent[1]; // New ID of the parent; - } - - 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', 'post_name', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt', 'guid', 'post_parent', 'menu_order', 'post_type'); - $comment_post_ID = $post_id = wp_insert_post($postdata); - - // Memorize old and new ID. - if ( $post_id && $post_ID && $this->posts_processed[$post_ID] ) - $this->posts_processed[$post_ID][1] = $post_id; // New ID. - - // Add categories. - if (count($categories) > 0) { - $post_cats = array(); - foreach ($categories as $category) { - $cat_ID = (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name = '$category'"); - if ($cat_ID == 0) { - $cat_ID = wp_insert_category(array('cat_name' => $category)); - } - $post_cats[] = $cat_ID; - } - wp_set_post_categories($post_id, $post_cats); - } - } - - // Now for comments - preg_match_all('|(.*?)|is', $post, $comments); - $comments = $comments[1]; - $num_comments = 0; - if ( $comments) { foreach ($comments as $comment) { - $comment_author = $this->get_tag( $comment, 'wp:comment_author'); - $comment_author_email = $this->get_tag( $comment, 'wp:comment_author_email'); - $comment_author_IP = $this->get_tag( $comment, 'wp:comment_author_IP'); - $comment_author_url = $this->get_tag( $comment, 'wp:comment_author_url'); - $comment_date = $this->get_tag( $comment, 'wp:comment_date'); - $comment_date_gmt = $this->get_tag( $comment, 'wp:comment_date_gmt'); - $comment_content = $this->get_tag( $comment, 'wp:comment_content'); - $comment_approved = $this->get_tag( $comment, 'wp:comment_approved'); - $comment_type = $this->get_tag( $comment, 'wp:comment_type'); - $comment_parent = $this->get_tag( $comment, 'wp:comment_parent'); - - 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_date_gmt', 'comment_content', 'comment_approved', 'comment_type', 'comment_parent'); - wp_insert_comment($commentdata); - $num_comments++; - } - } } - - if ( $num_comments ) - printf(' '.__('(%s comments)'), $num_comments); - - // Now for post meta - preg_match_all('|(.*?)|is', $post, $postmeta); - $postmeta = $postmeta[1]; - if ( $postmeta) { foreach ($postmeta as $p) { - $key = $this->get_tag( $p, 'wp:meta_key' ); - $value = $this->get_tag( $p, 'wp:meta_value' ); - $value = stripslashes($value); // add_post_meta() will escape. - add_post_meta( $post_id, $key, $value ); - } } - } - - function import() { - $this->id = (int) $_GET['id']; - - $this->file = get_attached_file($this->id); - $this->get_authors_from_post(); - $this->get_entries(); - $this->process_categories(); - $this->process_posts(); - } - - function dispatch() { - if (empty ($_GET['step'])) - $step = 0; - else - $step = (int) $_GET['step']; - - $this->header(); - switch ($step) { - case 0 : - $this->greet(); - break; - case 1 : - check_admin_referer('import-upload'); - $this->select_authors(); - break; - case 2: - check_admin_referer('import-wordpress'); - $this->import(); - break; - } - $this->footer(); - } - - function WP_Import() { - // Nothing. - } -} - -$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')); - -?> + XML fragment, [1] => New post ID] + var $file; + var $id; + var $mtnames = array (); + var $newauthornames = array (); + var $j = -1; + + function header() { + echo '
    '; + echo '

    '.__('Import WordPress').'

    '; + } + + function footer() { + echo '
    '; + } + + function unhtmlentities($string) { // From php.net for < 4.3 compat + $trans_tbl = get_html_translation_table(HTML_ENTITIES); + $trans_tbl = array_flip($trans_tbl); + return strtr($string, $trans_tbl); + } + + 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 '

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

    '; + wp_import_upload_form("admin.php?import=wordpress&step=1"); + echo '
    '; + } + + function get_tag( $string, $tag ) { + global $wpdb; + preg_match("|<$tag.*?>(.*?)|is", $string, $return); + $return = $wpdb->escape( trim( $return[1] ) ); + return $return; + } + + function users_form($n) { + global $wpdb, $testing; + $users = get_users_of_blog($wpdb->blogid); +?> + file)); // Read the file into an array + + $this->posts = array(); + $this->categories = array(); + $num = 0; + $doing_entry = false; + foreach ($importdata as $importline) { + if ( false !== strpos($importline, '') ) { + preg_match('|(.*?)|is', $importline, $category); + $this->categories[] = $category[1]; + continue; + } + if ( false !== strpos($importline, '') ) { + $this->posts[$num] = ''; + $doing_entry = true; + continue; + } + if ( false !== strpos($importline, '') ) { + $num++; + $doing_entry = false; + continue; + } + if ( $doing_entry ) { + $this->posts[$num] .= $importline . "\n"; + } + } + + foreach ($this->posts as $post) { + $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); + if ($post_ID) { + $this->posts_processed[$post_ID][0] = &$post; + $this->posts_processed[$post_ID][1] = 0; + } + } + } + + function get_wp_authors() { + $temp = array (); + $i = -1; + foreach ($this->posts as $post) { + if ('' != trim($post)) { + ++ $i; + $author = $this->get_tag( $post, 'dc:creator' ); + array_push($temp, "$author"); //store the extracted author names in a temporary array + } + } + + // 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. + $authors[0] = array_shift($temp); + $y = count($temp) + 1; + for ($x = 1; $x < $y; $x ++) { + $next = array_shift($temp); + if (!(in_array($next, $authors))) + array_push($authors, "$next"); + } + + return $authors; + } + + function get_authors_from_post() { + $formnames = array (); + $selectnames = array (); + + foreach ($_POST['user'] as $key => $line) { + $newname = trim(stripslashes($line)); + if ($newname == '') + $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. + array_push($formnames, "$newname"); + } // $formnames is the array with the form entered names + + foreach ($_POST['userselect'] as $user => $key) { + $selected = trim(stripslashes($key)); + array_push($selectnames, "$selected"); + } + + $count = count($formnames); + for ($i = 0; $i < $count; $i ++) { + if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form + array_push($this->newauthornames, "$selectnames[$i]"); + } else { + array_push($this->newauthornames, "$formnames[$i]"); + } + } + } + + function wp_authors_form() { +?> +

    +

    admins entries.'); ?>

    + get_wp_authors(); + echo '
      '; + echo '
      '; + wp_nonce_field('import-wordpress'); + $j = -1; + foreach ($authors as $author) { + ++ $j; + echo '
    1. '.__('Current author:').' '.$author.'
      '.'Map to existing: '; + $this->users_form($j); + echo '
    2. '; + } + + echo ''.'
      '; + echo '
      '; + echo '
    '; + + } + + function select_authors() { + $file = wp_import_handle_upload(); + if ( isset($file['error']) ) { + echo '

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

    '; + echo '

    ' . $file['error'] . '

    '; + return; + } + $this->file = $file['file']; + $this->id = (int) $file['id']; + + $this->get_entries(); + $this->wp_authors_form(); + } + + function process_categories() { + global $wpdb; + + $cat_names = (array) $wpdb->get_col("SELECT cat_name FROM $wpdb->categories"); + + while ( $c = array_shift($this->categories) ) { + $cat_name = trim(str_replace(array (''), '', $this->get_tag( $c, 'wp:cat_name' ))); + + // If the category exists we leave it alone + if ( in_array($cat_name, $cat_names) ) + continue; + + $category_nicename = $this->get_tag( $c, 'wp:category_nicename' ); + $posts_private = (int) $this->get_tag( $c, 'wp:posts_private' ); + $links_private = (int) $this->get_tag( $c, 'wp:links_private' ); + + $parent = $this->get_tag( $c, 'wp:category_parent' ); + + if ( empty($parent) ) + $category_parent = '0'; + else + $category_parent = category_exists($parent); + + $catarr = compact('category_nicename', 'category_parent', 'posts_private', 'links_private', 'posts_private', 'cat_name'); + + $cat_ID = wp_insert_category($catarr); + } + } + + function process_posts() { + $i = -1; + echo '
      '; + + foreach ($this->posts as $post) + $this->process_post($post); + + echo '
    '; + + wp_import_cleanup($this->id); + + echo '

    '.sprintf(__('All done.').' '.__('Have fun!').'', get_option('home')).'

    '; + } + + function process_post($post) { + global $wpdb; + + $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); + if ( $post_ID && !empty($this->posts_processed[$post_ID][1]) ) // Processed already + return 0; + + // There are only ever one of these + $post_title = $this->get_tag( $post, 'title' ); + $post_date = $this->get_tag( $post, 'wp:post_date' ); + $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); + $comment_status = $this->get_tag( $post, 'wp:comment_status' ); + $ping_status = $this->get_tag( $post, 'wp:ping_status' ); + $post_status = $this->get_tag( $post, 'wp:status' ); + $post_name = $this->get_tag( $post, 'wp:post_name' ); + $post_parent = $this->get_tag( $post, 'wp:post_parent' ); + $menu_order = $this->get_tag( $post, 'wp:menu_order' ); + $post_type = $this->get_tag( $post, 'wp:post_type' ); + $guid = $this->get_tag( $post, 'guid' ); + $post_author = $this->get_tag( $post, 'dc:creator' ); + + $post_content = $this->get_tag( $post, 'content:encoded' ); + $post_content = str_replace(array (''), '', $post_content); + $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); + $post_content = str_replace('
    ', '
    ', $post_content); + $post_content = str_replace('
    ', '
    ', $post_content); + + preg_match_all('|(.*?)|is', $post, $categories); + $categories = $categories[1]; + + $cat_index = 0; + foreach ($categories as $category) { + $categories[$cat_index] = $wpdb->escape($this->unhtmlentities(str_replace(array (''), '', $category))); + $cat_index++; + } + + if ($post_id = post_exists($post_title, '', $post_date)) { + echo '
  • '; + printf(__('Post %s already exists.'), stripslashes($post_title)); + } else { + + // If it has parent, process parent first. + $post_parent = (int) $post_parent; + if ($parent = $this->posts_processed[$post_parent]) { + if (!$parent[1]) $this->process_post($parent[0]); // If not yet, process the parent first. + $post_parent = $parent[1]; // New ID of the parent; + } + + 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', 'post_name', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt', 'guid', 'post_parent', 'menu_order', 'post_type'); + $comment_post_ID = $post_id = wp_insert_post($postdata); + + // Memorize old and new ID. + if ( $post_id && $post_ID && $this->posts_processed[$post_ID] ) + $this->posts_processed[$post_ID][1] = $post_id; // New ID. + + // Add categories. + if (count($categories) > 0) { + $post_cats = array(); + foreach ($categories as $category) { + $cat_ID = (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name = '$category'"); + if ($cat_ID == 0) { + $cat_ID = wp_insert_category(array('cat_name' => $category)); + } + $post_cats[] = $cat_ID; + } + wp_set_post_categories($post_id, $post_cats); + } + } + + // Now for comments + preg_match_all('|(.*?)|is', $post, $comments); + $comments = $comments[1]; + $num_comments = 0; + if ( $comments) { foreach ($comments as $comment) { + $comment_author = $this->get_tag( $comment, 'wp:comment_author'); + $comment_author_email = $this->get_tag( $comment, 'wp:comment_author_email'); + $comment_author_IP = $this->get_tag( $comment, 'wp:comment_author_IP'); + $comment_author_url = $this->get_tag( $comment, 'wp:comment_author_url'); + $comment_date = $this->get_tag( $comment, 'wp:comment_date'); + $comment_date_gmt = $this->get_tag( $comment, 'wp:comment_date_gmt'); + $comment_content = $this->get_tag( $comment, 'wp:comment_content'); + $comment_approved = $this->get_tag( $comment, 'wp:comment_approved'); + $comment_type = $this->get_tag( $comment, 'wp:comment_type'); + $comment_parent = $this->get_tag( $comment, 'wp:comment_parent'); + + 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_date_gmt', 'comment_content', 'comment_approved', 'comment_type', 'comment_parent'); + wp_insert_comment($commentdata); + $num_comments++; + } + } } + + if ( $num_comments ) + printf(' '.__('(%s comments)'), $num_comments); + + // Now for post meta + preg_match_all('|(.*?)|is', $post, $postmeta); + $postmeta = $postmeta[1]; + if ( $postmeta) { foreach ($postmeta as $p) { + $key = $this->get_tag( $p, 'wp:meta_key' ); + $value = $this->get_tag( $p, 'wp:meta_value' ); + $value = stripslashes($value); // add_post_meta() will escape. + add_post_meta( $post_id, $key, $value ); + } } + } + + function import() { + $this->id = (int) $_GET['id']; + + $this->file = get_attached_file($this->id); + $this->get_authors_from_post(); + $this->get_entries(); + $this->process_categories(); + $this->process_posts(); + } + + function dispatch() { + if (empty ($_GET['step'])) + $step = 0; + else + $step = (int) $_GET['step']; + + $this->header(); + switch ($step) { + case 0 : + $this->greet(); + break; + case 1 : + check_admin_referer('import-upload'); + $this->select_authors(); + break; + case 2: + check_admin_referer('import-wordpress'); + $this->import(); + break; + } + $this->footer(); + } + + function WP_Import() { + // Nothing. + } +} + +$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')); + +?> -- cgit