Changeset 6390 for trunk/wp-admin/import/wordpress.php
- Timestamp:
- 12/16/2007 09:34:48 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/import/wordpress.php
r6376 r6390 11 11 var $allauthornames = array (); 12 12 var $j = -1; 13 var $another_pass = false; 13 var $fetch_attachments = false; 14 var $url_remap = array (); 14 15 15 16 function header() { … … 190 191 echo '</li>'; 191 192 } 192 193 ?> 194 </ol> 195 <h2><?php _e('Import Attachments'); ?></h2> 196 <p> 197 <input type="checkbox" value="1" name="attachments" id="import-attachments" /> 198 <label for="import-attachments"><?php _e('Download and import file attachments') ?></label> 199 </p> 200 201 <?php 193 202 echo '<input type="submit" value="Submit">'.'<br />'; 194 203 echo '</form>'; 195 echo '</ol>';196 204 197 205 } … … 296 304 $post_content = str_replace('<br>', '<br />', $post_content); 297 305 $post_content = str_replace('<hr>', '<hr />', $post_content); 298 306 299 307 preg_match_all('|<category domain="tag">(.*?)</category>|is', $post, $tags); 300 308 $tags = $tags[1]; … … 334 342 335 343 echo '<li>'; 336 printf(__('Importing post <i>%s</i>...'), stripslashes($post_title));337 344 338 345 $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor 339 346 340 347 $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'); 341 $comment_post_ID = $post_id = wp_insert_post($postdata); 348 if ($post_type == 'attachment') { 349 $remote_url = $this->get_tag( $post, 'wp:attachment_url' ); 350 if ( !$remote_url ) 351 $remote_url = $guid; 352 353 $comment_post_ID = $post_id = $this->process_attachment($postdata, $remote_url); 354 if ( !$post_id or is_wp_error($post_id) ) 355 return $post_id; 356 } 357 else { 358 printf(__('Importing post <i>%s</i>...'), stripslashes($post_title)); 359 $comment_post_ID = $post_id = wp_insert_post($postdata); 360 } 361 342 362 if ( is_wp_error( $post_id ) ) 343 363 return $post_id; … … 421 441 add_post_meta( $post_id, $key, $value ); 422 442 } } 443 444 print "</li>\n"; 445 } 446 447 function process_attachment($postdata, $remote_url) { 448 if ($this->fetch_attachments and $remote_url) { 449 printf( __('Importing attachment <i>%s</i>... '), htmlspecialchars($remote_url) ); 450 $upload = $this->fetch_remote_file($postdata, $remote_url); 451 if ( is_wp_error($upload) ) { 452 printf( __('Remote file error: %s'), htmlspecialchars($upload->get_error_message()) ); 453 return $upload; 454 } 455 else { 456 print '('.size_format(filesize($upload['file'])).')'; 457 } 458 459 $postdata['guid'] = $upload['url']; 460 461 // as per wp-admin/includes/upload.php 462 $post_id = wp_insert_attachment($postdata, $upload['file']); 463 wp_update_attachment_metadata( $post_id, wp_generate_attachment_metadata( $post_id, $upload['file'] ) ); 464 return $post_id; 465 } 466 else { 467 printf( __('Skipping attachment <i>%s</i>'), htmlspecialchars($remote_url) ); 468 } 469 } 470 471 function fetch_remote_file($post, $url) { 472 $upload = wp_upload_dir($post['post_date']); 473 474 // extract the file name and extension from the url 475 $file_name = basename($url); 476 477 // get placeholder file in the upload dir with a unique sanitized filename 478 $upload = wp_upload_bits( $file_name, 0, '', $post['post_date']); 479 if ( $upload['error'] ) { 480 echo $upload['error']; 481 return new WP_Error( 'upload_dir_error', $upload['error'] ); 482 } 483 484 // fetch the remote url and write it to the placeholder file 485 $headers = wp_get_http($url, $upload['file']); 486 487 // make sure the fetch was successful 488 if ( $headers['response'] != '200' ) 489 return new WP_Error( 'import_file_error', __(sprintf('Remote file returned error response %d', intval($headers['response']))) ); 490 elseif ( isset($headers['content-length']) && filesize($upload['file']) != $headers['content-length'] ) 491 return new WP_Error( 'import_file_error', __('Remote file is incorrect size') ); 492 493 // keep track of the old and new urls so we can substitute them later 494 $this->url_remap[$url] = $upload['url']; 495 // if the remote url is redirected somewhere else, keep track of the destination too 496 if ( $headers['x-final-location'] != $url ) 497 $this->url_remap[$headers['x-final-location']] = $upload['url']; 498 499 return $upload; 500 501 } 502 503 // update url references in post bodies to point to the new local files 504 function backfill_attachment_urls() { 505 506 // make sure we do the longest urls first, in case one is a substring of another 507 function cmpr_strlen($a, $b) { 508 return strlen($b) - strlen($a); 509 } 510 uksort($this->url_remap, 'cmpr_strlen'); 511 512 global $wpdb; 513 foreach ($this->url_remap as $from_url => $to_url) { 514 $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, '%s', '%s')", $from_url, $to_url) ); 515 } 423 516 } 424 517 … … 436 529 } 437 530 438 function import($id ) {531 function import($id, $fetch_attachments = false) { 439 532 $this->id = (int) $id; 533 $this->fetch_attachments = (bool) $fetch_attachments; 440 534 441 535 $file = get_attached_file($this->id); … … 453 547 $result = $this->process_posts(); 454 548 $this->backfill_parents(); 549 $this->backfill_attachment_urls(); 455 550 wp_defer_term_counting(false); 456 551 if ( is_wp_error( $result ) ) … … 488 583 case 2: 489 584 check_admin_referer('import-wordpress'); 490 $result = $this->import( $_GET['id'] );585 $result = $this->import( $_GET['id'], $_POST['attachments'] ); 491 586 if ( is_wp_error( $result ) ) 492 587 echo $result->get_error_message();
Note: See TracChangeset
for help on using the changeset viewer.