| [ Index ] |
PHP Cross Reference of Wordpress 2.7.1 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * TextPattern Importer 4 * 5 * @package WordPress 6 * @subpackage Importer 7 */ 8 9 if(!function_exists('get_comment_count')) 10 { 11 /** 12 * Get the comment count for posts. 13 * 14 * @package WordPress 15 * @subpackage Textpattern_Import 16 * 17 * @param int $post_ID Post ID 18 * @return int 19 */ 20 function get_comment_count($post_ID) 21 { 22 global $wpdb; 23 return $wpdb->get_var( $wpdb->prepare("SELECT count(*) FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) ); 24 } 25 } 26 27 if(!function_exists('link_exists')) 28 { 29 /** 30 * Check whether link already exists. 31 * 32 * @package WordPress 33 * @subpackage Textpattern_Import 34 * 35 * @param string $linkname 36 * @return int 37 */ 38 function link_exists($linkname) 39 { 40 global $wpdb; 41 return $wpdb->get_var( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_name = %s", $linkname) ); 42 } 43 } 44 45 /** 46 * TextPattern Importer Class 47 * 48 * @since unknown 49 */ 50 class Textpattern_Import { 51 52 function header() 53 { 54 echo '<div class="wrap">'; 55 screen_icon(); 56 echo '<h2>'.__('Import Textpattern').'</h2>'; 57 echo '<p>'.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'</p>'; 58 } 59 60 function footer() 61 { 62 echo '</div>'; 63 } 64 65 function greet() { 66 echo '<div class="narrow">'; 67 echo '<p>'.__('Howdy! This imports categories, users, posts, comments, and links from any Textpattern 4.0.2+ into this blog.').'</p>'; 68 echo '<p>'.__('This has not been tested on previous versions of Textpattern. Mileage may vary.').'</p>'; 69 echo '<p>'.__('Your Textpattern Configuration settings are as follows:').'</p>'; 70 echo '<form action="admin.php?import=textpattern&step=1" method="post">'; 71 wp_nonce_field('import-textpattern'); 72 $this->db_form(); 73 echo '<p class="submit"><input type="submit" name="submit" class="button" value="'.attribute_escape(__('Import')).'" /></p>'; 74 echo '</form>'; 75 echo '</div>'; 76 } 77 78 function get_txp_cats() 79 { 80 global $wpdb; 81 // General Housekeeping 82 $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); 83 set_magic_quotes_runtime(0); 84 $prefix = get_option('tpre'); 85 86 // Get Categories 87 return $txpdb->get_results('SELECT 88 id, 89 name, 90 title 91 FROM '.$prefix.'txp_category 92 WHERE type = "article"', 93 ARRAY_A); 94 } 95 96 function get_txp_users() 97 { 98 global $wpdb; 99 // General Housekeeping 100 $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); 101 set_magic_quotes_runtime(0); 102 $prefix = get_option('tpre'); 103 104 // Get Users 105 106 return $txpdb->get_results('SELECT 107 user_id, 108 name, 109 RealName, 110 email, 111 privs 112 FROM '.$prefix.'txp_users', ARRAY_A); 113 } 114 115 function get_txp_posts() 116 { 117 // General Housekeeping 118 $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); 119 set_magic_quotes_runtime(0); 120 $prefix = get_option('tpre'); 121 122 // Get Posts 123 return $txpdb->get_results('SELECT 124 ID, 125 Posted, 126 AuthorID, 127 LastMod, 128 Title, 129 Body, 130 Excerpt, 131 Category1, 132 Category2, 133 Status, 134 Keywords, 135 url_title, 136 comments_count 137 FROM '.$prefix.'textpattern 138 ', ARRAY_A); 139 } 140 141 function get_txp_comments() 142 { 143 global $wpdb; 144 // General Housekeeping 145 $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); 146 set_magic_quotes_runtime(0); 147 $prefix = get_option('tpre'); 148 149 // Get Comments 150 return $txpdb->get_results('SELECT * FROM '.$prefix.'txp_discuss', ARRAY_A); 151 } 152 153 function get_txp_links() 154 { 155 //General Housekeeping 156 $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); 157 set_magic_quotes_runtime(0); 158 $prefix = get_option('tpre'); 159 160 return $txpdb->get_results('SELECT 161 id, 162 date, 163 category, 164 url, 165 linkname, 166 description 167 FROM '.$prefix.'txp_link', 168 ARRAY_A); 169 } 170 171 function cat2wp($categories='') 172 { 173 // General Housekeeping 174 global $wpdb; 175 $count = 0; 176 $txpcat2wpcat = array(); 177 // Do the Magic 178 if(is_array($categories)) 179 { 180 echo '<p>'.__('Importing Categories...').'<br /><br /></p>'; 181 foreach ($categories as $category) 182 { 183 $count++; 184 extract($category); 185 186 187 // Make Nice Variables 188 $name = $wpdb->escape($name); 189 $title = $wpdb->escape($title); 190 191 if($cinfo = category_exists($name)) 192 { 193 $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title)); 194 } 195 else 196 { 197 $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title)); 198 } 199 $txpcat2wpcat[$id] = $ret_id; 200 } 201 202 // Store category translation for future use 203 add_option('txpcat2wpcat',$txpcat2wpcat); 204 echo '<p>'.sprintf(__ngettext('Done! <strong>%1$s</strong> category imported.', 'Done! <strong>%1$s</strong> categories imported.', $count), $count).'<br /><br /></p>'; 205 return true; 206 } 207 echo __('No Categories to Import!'); 208 return false; 209 } 210 211 function users2wp($users='') 212 { 213 // General Housekeeping 214 global $wpdb; 215 $count = 0; 216 $txpid2wpid = array(); 217 218 // Midnight Mojo 219 if(is_array($users)) 220 { 221 echo '<p>'.__('Importing Users...').'<br /><br /></p>'; 222 foreach($users as $user) 223 { 224 $count++; 225 extract($user); 226 227 // Make Nice Variables 228 $name = $wpdb->escape($name); 229 $RealName = $wpdb->escape($RealName); 230 231 if($uinfo = get_userdatabylogin($name)) 232 { 233 234 $ret_id = wp_insert_user(array( 235 'ID' => $uinfo->ID, 236 'user_login' => $name, 237 'user_nicename' => $RealName, 238 'user_email' => $email, 239 'user_url' => 'http://', 240 'display_name' => $name) 241 ); 242 } 243 else 244 { 245 $ret_id = wp_insert_user(array( 246 'user_login' => $name, 247 'user_nicename' => $RealName, 248 'user_email' => $email, 249 'user_url' => 'http://', 250 'display_name' => $name) 251 ); 252 } 253 $txpid2wpid[$user_id] = $ret_id; 254 255 // Set Textpattern-to-WordPress permissions translation 256 $transperms = array(1 => '10', 2 => '9', 3 => '5', 4 => '4', 5 => '3', 6 => '2', 7 => '0'); 257 258 // Update Usermeta Data 259 $user = new WP_User($ret_id); 260 if('10' == $transperms[$privs]) { $user->set_role('administrator'); } 261 if('9' == $transperms[$privs]) { $user->set_role('editor'); } 262 if('5' == $transperms[$privs]) { $user->set_role('editor'); } 263 if('4' == $transperms[$privs]) { $user->set_role('author'); } 264 if('3' == $transperms[$privs]) { $user->set_role('contributor'); } 265 if('2' == $transperms[$privs]) { $user->set_role('contributor'); } 266 if('0' == $transperms[$privs]) { $user->set_role('subscriber'); } 267 268 update_usermeta( $ret_id, 'wp_user_level', $transperms[$privs] ); 269 update_usermeta( $ret_id, 'rich_editing', 'false'); 270 }// End foreach($users as $user) 271 272 // Store id translation array for future use 273 add_option('txpid2wpid',$txpid2wpid); 274 275 276 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> users imported.'), $count).'<br /><br /></p>'; 277 return true; 278 }// End if(is_array($users) 279 280 echo __('No Users to Import!'); 281 return false; 282 283 }// End function user2wp() 284 285 function posts2wp($posts='') 286 { 287 // General Housekeeping 288 global $wpdb; 289 $count = 0; 290 $txpposts2wpposts = array(); 291 $cats = array(); 292 293 // Do the Magic 294 if(is_array($posts)) 295 { 296 echo '<p>'.__('Importing Posts...').'<br /><br /></p>'; 297 foreach($posts as $post) 298 { 299 $count++; 300 extract($post); 301 302 // Set Textpattern-to-WordPress status translation 303 $stattrans = array(1 => 'draft', 2 => 'private', 3 => 'draft', 4 => 'publish', 5 => 'publish'); 304 305 //Can we do this more efficiently? 306 $uinfo = ( get_userdatabylogin( $AuthorID ) ) ? get_userdatabylogin( $AuthorID ) : 1; 307 $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; 308 309 $Title = $wpdb->escape($Title); 310 $Body = $wpdb->escape($Body); 311 $Excerpt = $wpdb->escape($Excerpt); 312 $post_status = $stattrans[$Status]; 313 314 // Import Post data into WordPress 315 316 if($pinfo = post_exists($Title,$Body)) 317 { 318 $ret_id = wp_insert_post(array( 319 'ID' => $pinfo, 320 'post_date' => $Posted, 321 'post_date_gmt' => $post_date_gmt, 322 'post_author' => $authorid, 323 'post_modified' => $LastMod, 324 'post_modified_gmt' => $post_modified_gmt, 325 'post_title' => $Title, 326 'post_content' => $Body, 327 'post_excerpt' => $Excerpt, 328 'post_status' => $post_status, 329 'post_name' => $url_title, 330 'comment_count' => $comments_count) 331 ); 332 if ( is_wp_error( $ret_id ) ) 333 return $ret_id; 334 } 335 else 336 { 337 $ret_id = wp_insert_post(array( 338 'post_date' => $Posted, 339 'post_date_gmt' => $post_date_gmt, 340 'post_author' => $authorid, 341 'post_modified' => $LastMod, 342 'post_modified_gmt' => $post_modified_gmt, 343 'post_title' => $Title, 344 'post_content' => $Body, 345 'post_excerpt' => $Excerpt, 346 'post_status' => $post_status, 347 'post_name' => $url_title, 348 'comment_count' => $comments_count) 349 ); 350 if ( is_wp_error( $ret_id ) ) 351 return $ret_id; 352 } 353 $txpposts2wpposts[$ID] = $ret_id; 354 355 // Make Post-to-Category associations 356 $cats = array(); 357 $category1 = get_category_by_slug($Category1); 358 $category1 = $category1->term_id; 359 $category2 = get_category_by_slug($Category2); 360 $category2 = $category2->term_id; 361 if($cat1 = $category1) { $cats[1] = $cat1; } 362 if($cat2 = $category2) { $cats[2] = $cat2; } 363 364 if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } 365 } 366 } 367 // Store ID translation for later use 368 add_option('txpposts2wpposts',$txpposts2wpposts); 369 370 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> posts imported.'), $count).'<br /><br /></p>'; 371 return true; 372 } 373 374 function comments2wp($comments='') 375 { 376 // General Housekeeping 377 global $wpdb; 378 $count = 0; 379 $txpcm2wpcm = array(); 380 $postarr = get_option('txpposts2wpposts'); 381 382 // Magic Mojo 383 if(is_array($comments)) 384 { 385 echo '<p>'.__('Importing Comments...').'<br /><br /></p>'; 386 foreach($comments as $comment) 387 { 388 $count++; 389 extract($comment); 390 391 // WordPressify Data 392 $comment_ID = ltrim($discussid, '0'); 393 $comment_post_ID = $postarr[$parentid]; 394 $comment_approved = (1 == $visible) ? 1 : 0; 395 $name = $wpdb->escape($name); 396 $email = $wpdb->escape($email); 397 $web = $wpdb->escape($web); 398 $message = $wpdb->escape($message); 399 400 if($cinfo = comment_exists($name, $posted)) 401 { 402 // Update comments 403 $ret_id = wp_update_comment(array( 404 'comment_ID' => $cinfo, 405 'comment_post_ID' => $comment_post_ID, 406 'comment_author' => $name, 407 'comment_author_email' => $email, 408 'comment_author_url' => $web, 409 'comment_date' => $posted, 410 'comment_content' => $message, 411 'comment_approved' => $comment_approved) 412 ); 413 } 414 else 415 { 416 // Insert comments 417 $ret_id = wp_insert_comment(array( 418 'comment_post_ID' => $comment_post_ID, 419 'comment_author' => $name, 420 'comment_author_email' => $email, 421 'comment_author_url' => $web, 422 'comment_author_IP' => $ip, 423 'comment_date' => $posted, 424 'comment_content' => $message, 425 'comment_approved' => $comment_approved) 426 ); 427 } 428 $txpcm2wpcm[$comment_ID] = $ret_id; 429 } 430 // Store Comment ID translation for future use 431 add_option('txpcm2wpcm', $txpcm2wpcm); 432 433 // Associate newly formed categories with posts 434 get_comment_count($ret_id); 435 436 437 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> comments imported.'), $count).'<br /><br /></p>'; 438 return true; 439 } 440 echo __('No Comments to Import!'); 441 return false; 442 } 443 444 function links2wp($links='') 445 { 446 // General Housekeeping 447 global $wpdb; 448 $count = 0; 449 450 // Deal with the links 451 if(is_array($links)) 452 { 453 echo '<p>'.__('Importing Links...').'<br /><br /></p>'; 454 foreach($links as $link) 455 { 456 $count++; 457 extract($link); 458 459 // Make nice vars 460 $category = $wpdb->escape($category); 461 $linkname = $wpdb->escape($linkname); 462 $description = $wpdb->escape($description); 463 464 if($linfo = link_exists($linkname)) 465 { 466 $ret_id = wp_insert_link(array( 467 'link_id' => $linfo, 468 'link_url' => $url, 469 'link_name' => $linkname, 470 'link_category' => $category, 471 'link_description' => $description, 472 'link_updated' => $date) 473 ); 474 } 475 else 476 { 477 $ret_id = wp_insert_link(array( 478 'link_url' => $url, 479 'link_name' => $linkname, 480 'link_category' => $category, 481 'link_description' => $description, 482 'link_updated' => $date) 483 ); 484 } 485 $txplinks2wplinks[$link_id] = $ret_id; 486 } 487 add_option('txplinks2wplinks',$txplinks2wplinks); 488 echo '<p>'; 489 printf(__ngettext('Done! <strong>%s</strong> link imported', 'Done! <strong>%s</strong> links imported', $count), $count); 490 echo '<br /><br /></p>'; 491 return true; 492 } 493 echo __('No Links to Import!'); 494 return false; 495 } 496 497 function import_categories() 498 { 499 // Category Import 500 $cats = $this->get_txp_cats(); 501 $this->cat2wp($cats); 502 add_option('txp_cats', $cats); 503 504 505 506 echo '<form action="admin.php?import=textpattern&step=2" method="post">'; 507 wp_nonce_field('import-textpattern'); 508 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', attribute_escape(__('Import Users'))); 509 echo '</form>'; 510 511 } 512 513 function import_users() 514 { 515 // User Import 516 $users = $this->get_txp_users(); 517 $this->users2wp($users); 518 519 echo '<form action="admin.php?import=textpattern&step=3" method="post">'; 520 wp_nonce_field('import-textpattern'); 521 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', attribute_escape(__('Import Posts'))); 522 echo '</form>'; 523 } 524 525 function import_posts() 526 { 527 // Post Import 528 $posts = $this->get_txp_posts(); 529 $result = $this->posts2wp($posts); 530 if ( is_wp_error( $result ) ) 531 return $result; 532 533 echo '<form action="admin.php?import=textpattern&step=4" method="post">'; 534 wp_nonce_field('import-textpattern'); 535 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', attribute_escape(__('Import Comments'))); 536 echo '</form>'; 537 } 538 539 function import_comments() 540 { 541 // Comment Import 542 $comments = $this->get_txp_comments(); 543 $this->comments2wp($comments); 544 545 echo '<form action="admin.php?import=textpattern&step=5" method="post">'; 546 wp_nonce_field('import-textpattern'); 547 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', attribute_escape(__('Import Links'))); 548 echo '</form>'; 549 } 550 551 function import_links() 552 { 553 //Link Import 554 $links = $this->get_txp_links(); 555 $this->links2wp($links); 556 add_option('txp_links', $links); 557 558 echo '<form action="admin.php?import=textpattern&step=6" method="post">'; 559 wp_nonce_field('import-textpattern'); 560 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', attribute_escape(__('Finish'))); 561 echo '</form>'; 562 } 563 564 function cleanup_txpimport() 565 { 566 delete_option('tpre'); 567 delete_option('txp_cats'); 568 delete_option('txpid2wpid'); 569 delete_option('txpcat2wpcat'); 570 delete_option('txpposts2wpposts'); 571 delete_option('txpcm2wpcm'); 572 delete_option('txplinks2wplinks'); 573 delete_option('txpuser'); 574 delete_option('txppass'); 575 delete_option('txpname'); 576 delete_option('txphost'); 577 do_action('import_done', 'textpattern'); 578 $this->tips(); 579 } 580 581 function tips() 582 { 583 echo '<p>'.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from Textpattern, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'</p>'; 584 echo '<h3>'.__('Users').'</h3>'; 585 echo '<p>'.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn’t have that login in Textpattern, why should you have it here? Instead we have taken care to import all of your users into our system. Unfortunately there is one downside. Because both WordPress and Textpattern uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users. <strong>Every user has the same username, but their passwords are reset to password123.</strong> So <a href="%1$s">Login</a> and change it.'), get_bloginfo( 'wpurl' ) . '/wp-login.php').'</p>'; 586 echo '<h3>'.__('Preserving Authors').'</h3>'; 587 echo '<p>'.__('Secondly, we have attempted to preserve post authors. If you are the only author or contributor to your blog, then you are safe. In most cases, we are successful in this preservation endeavor. However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'</p>'; 588 echo '<h3>'.__('Textile').'</h3>'; 589 echo '<p>'.__('Also, since you’re coming from Textpattern, you probably have been using Textile to format your comments and posts. If this is the case, we recommend downloading and installing <a href="http://www.huddledmasses.org/category/development/wordpress/textile/">Textile for WordPress</a>. Trust me... You’ll want it.').'</p>'; 590 echo '<h3>'.__('WordPress Resources').'</h3>'; 591 echo '<p>'.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'</p>'; 592 echo '<ul>'; 593 echo '<li>'.__('<a href="http://www.wordpress.org">The official WordPress site</a>').'</li>'; 594 echo '<li>'.__('<a href="http://wordpress.org/support/">The WordPress support forums</a>').'</li>'; 595 echo '<li>'.__('<a href="http://codex.wordpress.org">The Codex (In other words, the WordPress Bible)</a>').'</li>'; 596 echo '</ul>'; 597 echo '<p>'.sprintf(__('That’s it! What are you waiting for? Go <a href="%1$s">login</a>!'), get_bloginfo( 'wpurl' ) . '/wp-login.php').'</p>'; 598 } 599 600 function db_form() 601 { 602 echo '<table class="form-table">'; 603 printf('<tr><th scope="row"><label for="dbuser">%s</label></th><td><input type="text" name="dbuser" id="dbuser" /></td></tr>', __('Textpattern Database User:')); 604 printf('<tr><th scope="row"><label for="dbpass">%s</label></th><td><input type="password" name="dbpass" id="dbpass" /></td></tr>', __('Textpattern Database Password:')); 605 printf('<tr><th scope="row"><label for="dbname">%s</label></th><td><input type="text" id="dbname" name="dbname" /></td></tr>', __('Textpattern Database Name:')); 606 printf('<tr><th scope="row"><label for="dbhost">%s</label></th><td><input type="text" id="dbhost" name="dbhost" value="localhost" /></td></tr>', __('Textpattern Database Host:')); 607 printf('<tr><th scope="row"><label for="dbprefix">%s</label></th><td><input type="text" name="dbprefix" id="dbprefix" /></td></tr>', __('Textpattern Table prefix (if any):')); 608 echo '</table>'; 609 } 610 611 function dispatch() 612 { 613 614 if (empty ($_GET['step'])) 615 $step = 0; 616 else 617 $step = (int) $_GET['step']; 618 $this->header(); 619 620 if ( $step > 0 ) 621 { 622 check_admin_referer('import-textpattern'); 623 624 if($_POST['dbuser']) 625 { 626 if(get_option('txpuser')) 627 delete_option('txpuser'); 628 add_option('txpuser', sanitize_user($_POST['dbuser'], true)); 629 } 630 if($_POST['dbpass']) 631 { 632 if(get_option('txppass')) 633 delete_option('txppass'); 634 add_option('txppass', sanitize_user($_POST['dbpass'], true)); 635 } 636 637 if($_POST['dbname']) 638 { 639 if(get_option('txpname')) 640 delete_option('txpname'); 641 add_option('txpname', sanitize_user($_POST['dbname'], true)); 642 } 643 if($_POST['dbhost']) 644 { 645 if(get_option('txphost')) 646 delete_option('txphost'); 647 add_option('txphost', sanitize_user($_POST['dbhost'], true)); 648 } 649 if($_POST['dbprefix']) 650 { 651 if(get_option('tpre')) 652 delete_option('tpre'); 653 add_option('tpre', sanitize_user($_POST['dbprefix'])); 654 } 655 656 657 } 658 659 switch ($step) 660 { 661 default: 662 case 0 : 663 $this->greet(); 664 break; 665 case 1 : 666 $this->import_categories(); 667 break; 668 case 2 : 669 $this->import_users(); 670 break; 671 case 3 : 672 $result = $this->import_posts(); 673 if ( is_wp_error( $result ) ) 674 echo $result->get_error_message(); 675 break; 676 case 4 : 677 $this->import_comments(); 678 break; 679 case 5 : 680 $this->import_links(); 681 break; 682 case 6 : 683 $this->cleanup_txpimport(); 684 break; 685 } 686 687 $this->footer(); 688 } 689 690 function Textpattern_Import() 691 { 692 // Nothing. 693 } 694 } 695 696 $txp_import = new Textpattern_Import(); 697 698 register_importer('textpattern', __('Textpattern'), __('Import categories, users, posts, comments, and links from a Textpattern blog.'), array ($txp_import, 'dispatch')); 699 700 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Mar 23 16:23:02 2009 | Cross-referenced by PHPXref 0.7 |