[ Index ] |
PHP Cross Reference of BBPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * bbPress Converter 5 * 6 * Based on the hard work of Adam Ellis 7 * 8 * @package bbPress 9 * @subpackage Administration 10 */ 11 12 // Exit if accessed directly 13 defined( 'ABSPATH' ) || exit; 14 15 if ( ! class_exists( 'BBP_Converter' ) ) : 16 /** 17 * Main BBP_Converter Class 18 */ 19 class BBP_Converter { 20 21 /** 22 * @var int Number of rows 23 */ 24 public $max = 0; 25 26 /** 27 * @var int Start 28 */ 29 public $start = 0; 30 31 /** 32 * @var int Step in converter process 33 */ 34 public $step = 0; 35 36 /** 37 * @var int Number of rows 38 */ 39 public $rows = 0; 40 41 /** 42 * @var int Maximum number of converter steps 43 */ 44 public $max_steps = 17; 45 46 /** 47 * @var int Number of rows in the current step 48 */ 49 public $rows_in_step = 0; 50 51 /** 52 * @var int Percent complete of current step 53 */ 54 public $step_percentage = 0; 55 56 /** 57 * @var int Percent complete of all step 58 */ 59 public $total_percentage = 0; 60 61 /** 62 * @var int Name of source forum platform 63 */ 64 public $platform = ''; 65 66 /** 67 * @var BBP_Converter_Base Type of converter to use 68 */ 69 public $converter = null; 70 71 /** 72 * @var string Path to included platforms 73 */ 74 public $converters_dir = ''; 75 76 /** 77 * @var array Map of steps to methods 78 */ 79 private $steps = array( 80 1 => 'sync_table', 81 2 => 'users', 82 3 => 'passwords', 83 4 => 'forums', 84 5 => 'forum_hierarchy', 85 6 => 'forum_subscriptions', 86 7 => 'topics', 87 8 => 'topics_authors', 88 9 => 'stickies', 89 10 => 'super_stickies', 90 11 => 'closed_topics', 91 12 => 'topic_tags', 92 13 => 'topic_subscriptions', 93 14 => 'topic_favorites', 94 15 => 'replies', 95 16 => 'reply_authors', 96 17 => 'reply_hierarchy' 97 ); 98 99 /** 100 * The main bbPress Converter loader 101 * 102 * @since 2.1.0 bbPress (r3813) 103 */ 104 public function __construct() { 105 $this->setup_globals(); 106 $this->setup_actions(); 107 } 108 109 /** 110 * Admin globals 111 * 112 * @since 2.6.0 bbPress (r6598) 113 */ 114 public function setup_globals() { 115 $this->converters_dir = bbp_setup_admin()->admin_dir . 'converters/'; 116 } 117 118 /** 119 * Setup the default actions 120 * 121 * @since 2.1.0 bbPress (r3813) 122 */ 123 public function setup_actions() { 124 125 // Attach to the admin head with our ajax requests cycle and css 126 add_action( 'admin_head-tools_page_bbp-converter', array( $this, 'admin_head' ) ); 127 128 // Attach to the admin ajax request to process cycles 129 add_action( 'wp_ajax_bbp_converter_process', array( $this, 'process_callback' ) ); 130 } 131 132 /** 133 * Admin scripts 134 * 135 * @since 2.1.0 bbPress (r3813) 136 */ 137 public function admin_head() { 138 139 // Enqueue scripts 140 wp_enqueue_script( 'bbp-converter' ); 141 142 // Localize JS 143 wp_localize_script( 'bbp-converter', 'BBP_Converter', array( 144 145 // Nonce 146 'ajax_nonce' => wp_create_nonce( 'bbp_converter_process' ), 147 148 // UI State 149 'state' => array( 150 'delay' => (int) get_option( '_bbp_converter_delay_time', 2 ), 151 'started' => (bool) get_option( '_bbp_converter_step', 0 ), 152 'running' => false, 153 'status' => false, 154 'step_percent' => $this->step_percentage, 155 'total_percent' => $this->total_percentage 156 ), 157 158 // Strings 159 'strings' => array( 160 161 // Button text 162 'button_start' => esc_html__( 'Start', 'bbpress' ), 163 'button_continue' => esc_html__( 'Continue', 'bbpress' ), 164 165 // Start button clicked 166 'start_start' => esc_html__( 'Starting Import...', 'bbpress' ), 167 'start_continue' => esc_html__( 'Continuing Import...', 'bbpress' ), 168 169 // Import 170 'import_complete' => esc_html__( 'Import Finished.', 'bbpress' ), 171 'import_stopped_user' => esc_html__( 'Import Stopped (by User.)', 'bbpress' ), 172 'import_error_halt' => esc_html__( 'Import Halted (Error.)', 'bbpress' ), 173 'import_error_db' => esc_html__( 'Database Connection Failed.', 'bbpress' ), 174 175 // Status 176 'status_complete' => esc_html__( 'Finished', 'bbpress' ), 177 'status_stopped' => esc_html__( 'Stopped', 'bbpress' ), 178 'status_starting' => esc_html__( 'Starting', 'bbpress' ), 179 'status_up_next' => esc_html__( 'Doing step %s...', 'bbpress' ), 180 'status_counting' => esc_html__( 'Next in %s seconds...', 'bbpress' ) 181 ) 182 ) ); 183 } 184 185 /** 186 * Callback processor 187 * 188 * @since 2.1.0 bbPress (r3813) 189 */ 190 public function process_callback() { 191 192 // Ready the converter 193 $this->check_access(); 194 $this->maybe_set_memory(); 195 $this->maybe_restart(); 196 $this->setup_options(); 197 $this->maybe_update_options(); 198 199 // Bail if no converter 200 if ( ! empty( $this->converter ) ) { 201 $this->do_steps(); 202 } 203 } 204 205 /** 206 * Wrap the converter output in HTML, so styling can be applied 207 * 208 * @since 2.1.0 bbPress (r4052) 209 * 210 * @param string $output 211 */ 212 private function converter_response( $output = '' ) { 213 214 // Sanitize output 215 $output = wp_kses_data( $output ); 216 217 // Maybe prepend the step 218 if ( ! empty( $this->step ) ) { 219 220 // Include percentage 221 if ( ! empty( $this->rows_in_step ) ) { 222 $progress = sprintf( '<span class="step">%s.</span><span class="output">%s</span><span class="mini-step">%s</span>', $this->step, $output, $this->step_percentage . '%' ); 223 224 // Don't include percentage 225 } else { 226 $progress = sprintf( '<span class="step">%s.</span><span class="output">%s</span>', $this->step, $output ); 227 } 228 229 // Raw text 230 } else { 231 $progress = $output; 232 } 233 234 // Output 235 wp_send_json_success( array( 236 'query' => get_option( '_bbp_converter_query', '' ), 237 'current_step' => $this->step, 238 'final_step' => $this->max_steps, 239 'rows_in_step' => $this->rows_in_step, 240 'step_percent' => $this->step_percentage, 241 'total_percent' => $this->total_percentage, 242 'progress' => $progress 243 ) ); 244 } 245 246 /** 247 * Attempt to increase memory and set other system settings 248 * 249 * @since 2.6.0 bbPress (r6460) 250 */ 251 private function maybe_set_memory() { 252 253 // Filter args 254 $r = apply_filters( 'bbp_converter_php_ini_overrides', array( 255 'implicit_flush' => '1', 256 'memory_limit' => '256M', 257 'max_execution_time' => HOUR_IN_SECONDS * 6 258 ) ); 259 260 // Get disabled PHP functions (to avoid using them) 261 $disabled = explode( ',', @ini_get( 'disable_functions' ) ); 262 263 // Maybe avoid terminating when the client goes away (if function is not disabled) 264 if ( ! in_array( 'ignore_user_abort', $disabled, true ) ) { 265 @ignore_user_abort( true ); 266 } 267 268 // Maybe set memory & time limits, and flush style (if function is not disabled) 269 if ( ! in_array( 'ini_set', $disabled, true ) ) { 270 foreach ( $r as $key => $value ) { 271 @ini_set( $key, $value ); 272 } 273 } 274 } 275 276 /** 277 * Maybe restart the converter 278 * 279 * @since 2.6.0 bbPress (r6460) 280 */ 281 private function maybe_restart() { 282 283 // Save step and count so that it can be restarted. 284 if ( ! get_option( '_bbp_converter_step' ) || ! empty( $_POST['_bbp_converter_restart'] ) ) { 285 $this->step = 1; 286 $this->start = 0; 287 $this->step_percentage = 0; 288 $this->total_percentage = 0; 289 $this->rows_in_step = 0; 290 $this->maybe_update_options(); 291 } 292 } 293 294 /** 295 * Maybe update options 296 * 297 * @since 2.6.0 bbPress (r6637) 298 */ 299 private function maybe_update_options() { 300 301 // Default options 302 $options = array( 303 304 // Step & Start 305 '_bbp_converter_step' => $this->step, 306 '_bbp_converter_start' => $this->start, 307 '_bbp_converter_rows_in_step' => $this->rows_in_step, 308 309 // Halt 310 '_bbp_converter_halt' => ! empty( $_POST['_bbp_converter_halt'] ) 311 ? (int) $_POST['_bbp_converter_halt'] 312 : 0, 313 314 // Rows (bound between 1 and 5000) 315 '_bbp_converter_rows' => ! empty( $_POST['_bbp_converter_rows'] ) 316 ? min( max( (int) $_POST['_bbp_converter_rows'], 1 ), 5000 ) 317 : 0, 318 319 // Platform 320 '_bbp_converter_platform' => ! empty( $_POST['_bbp_converter_platform' ] ) 321 ? sanitize_text_field( $_POST['_bbp_converter_platform' ] ) 322 : '', 323 324 // Convert Users 325 '_bbp_converter_convert_users' => ! empty( $_POST['_bbp_converter_convert_users'] ) 326 ? (bool) $_POST['_bbp_converter_convert_users'] 327 : false, 328 329 // DB User 330 '_bbp_converter_db_user' => ! empty( $_POST['_bbp_converter_db_user'] ) 331 ? sanitize_text_field( $_POST['_bbp_converter_db_user'] ) 332 : '', 333 334 // DB Password 335 '_bbp_converter_db_pass' => ! empty( $_POST['_bbp_converter_db_pass'] ) 336 ? sanitize_text_field( $_POST['_bbp_converter_db_pass'] ) 337 : '', 338 339 // DB Name 340 '_bbp_converter_db_name' => ! empty( $_POST['_bbp_converter_db_name'] ) 341 ? sanitize_text_field( $_POST['_bbp_converter_db_name'] ) 342 : '', 343 344 // DB Server 345 '_bbp_converter_db_server' => ! empty( $_POST['_bbp_converter_db_server'] ) 346 ? sanitize_text_field( $_POST['_bbp_converter_db_server'] ) 347 : '', 348 349 // DB Port 350 '_bbp_converter_db_port' => ! empty( $_POST['_bbp_converter_db_port'] ) 351 ? (int) sanitize_text_field( $_POST['_bbp_converter_db_port'] ) 352 : '', 353 354 // DB Table Prefix 355 '_bbp_converter_db_prefix' => ! empty( $_POST['_bbp_converter_db_prefix'] ) 356 ? sanitize_text_field( $_POST['_bbp_converter_db_prefix'] ) 357 : '' 358 ); 359 360 // Update/delete options 361 foreach ( $options as $key => $value ) { 362 update_option( $key, $value ); 363 } 364 } 365 366 /** 367 * Setup converter options 368 * 369 * @since 2.6.0 bbPress (r6460) 370 */ 371 private function setup_options() { 372 373 // Set starting point & rows 374 $this->step = (int) get_option( '_bbp_converter_step', 1 ); 375 $this->start = (int) get_option( '_bbp_converter_start', 0 ); 376 $this->rows = (int) get_option( '_bbp_converter_rows', 100 ); 377 $this->rows_in_step = (int) get_option( '_bbp_converter_rows_in_step', 0 ); 378 379 // Set boundaries 380 $this->max = ( $this->start + $this->rows ) - 1; 381 382 // Set platform 383 $this->platform = get_option( '_bbp_converter_platform' ); 384 385 // Total percentage 386 $this->total_percentage = round( ( $this->step / $this->max_steps ) * 100, 2 ); 387 388 // Total mini steps 389 if ( $this->rows_in_step > 0 ) { 390 $total_mini_steps = ceil( $this->rows_in_step / $this->rows ); 391 $current_mini_step = ceil( $this->start / $this->rows ); 392 $this->step_percentage = round( ( $current_mini_step / $total_mini_steps ) * 100, 2 ); 393 } else { 394 $this->step_percentage = 0; 395 } 396 397 // Maybe include the appropriate converter. 398 if ( ! empty( $this->platform ) ) { 399 $this->converter = bbp_new_converter( $this->platform ); 400 } 401 } 402 403 /** 404 * Check that user can access the converter 405 * 406 * @since 2.6.0 bbPress (r6460) 407 */ 408 private function check_access() { 409 410 // Bail if user cannot view import page 411 if ( ! current_user_can( 'bbp_tools_import_page' ) ) { 412 wp_die( '0' ); 413 } 414 415 // Verify intent 416 check_ajax_referer( 'bbp_converter_process' ); 417 } 418 419 /** 420 * Reset the converter 421 * 422 * @since 2.6.0 bbPress (r6460) 423 */ 424 private function reset() { 425 update_option( '_bbp_converter_step', 0 ); 426 update_option( '_bbp_converter_start', 0 ); 427 update_option( '_bbp_converter_rows_in_step', 0 ); 428 update_option( '_bbp_converter_query', '' ); 429 } 430 431 /** 432 * Bump the step and reset the start 433 * 434 * @since 2.6.0 bbPress (r6460) 435 */ 436 private function bump_step() { 437 438 // Next step 439 $next_step = (int) ( $this->step + 1 ); 440 441 // Don't let step go over max 442 $step = ( $next_step <= $this->max_steps ) 443 ? $next_step 444 : 0; 445 446 // Update step and start at 0 447 update_option( '_bbp_converter_step', $step ); 448 update_option( '_bbp_converter_start', 0 ); 449 update_option( '_bbp_converter_rows_in_step', 0 ); 450 } 451 452 /** 453 * Bump the start within the current step 454 * 455 * @since 2.6.0 bbPress (r6460) 456 */ 457 private function bump_start() { 458 459 // Set rows in step from option 460 $this->rows_in_step = get_option( '_bbp_converter_rows_in_step', 0 ); 461 462 // Get rows to start from 463 $start = (int) ( $this->start + $this->rows ); 464 465 // Enforce maximum if exists 466 if ( $this->rows_in_step > 0 ) { 467 468 // Start cannot be larger than total rows 469 if ( $start > $this->rows_in_step ) { 470 $start = $this->rows_in_step; 471 } 472 473 // Max can't be greater than total rows 474 if ( $this->max > $this->rows_in_step ) { 475 $this->max = $this->rows_in_step; 476 } 477 } 478 479 // Update the start option 480 update_option( '_bbp_converter_start', $start ); 481 } 482 483 /** 484 * Do the converter step 485 * 486 * @since 2.6.0 bbPress (r6460) 487 */ 488 private function do_steps() { 489 490 // Step exists in map, and method exists 491 if ( isset( $this->steps[ $this->step ] ) && method_exists( $this, "step_{$this->steps[ $this->step ]}" ) ) { 492 return call_user_func( array( $this, "step_{$this->steps[ $this->step ]}" ) ); 493 } 494 495 // Done! 496 $this->step_done(); 497 } 498 499 /** Steps *****************************************************************/ 500 501 /** 502 * Maybe clean the sync table 503 * 504 * @since 2.6.0 bbPress (r6513) 505 */ 506 private function step_sync_table() { 507 if ( true === $this->converter->clean ) { 508 if ( $this->converter->clean() ) { 509 $this->bump_step(); 510 $this->sync_table( true ); 511 512 empty( $this->start ) 513 ? $this->converter_response( esc_html__( 'Readying sync-table', 'bbpress' ) ) 514 : $this->converter_response( esc_html__( 'Sync-table ready', 'bbpress' ) ); 515 } else { 516 $this->bump_start(); 517 $this->converter_response( sprintf( esc_html__( 'Deleting previously converted data (%1$s through %2$s)', 'bbpress' ), $this->start, $this->max ) ); 518 } 519 520 $this->converter->clean = false; 521 } else { 522 $this->bump_step(); 523 $this->sync_table( false ); 524 $this->converter_response( esc_html__( 'Skipping sync-table clean-up', 'bbpress' ) ); 525 } 526 } 527 528 /** 529 * Maybe convert users 530 * 531 * @since 2.6.0 bbPress (r6513) 532 */ 533 private function step_users() { 534 if ( true === $this->converter->convert_users ) { 535 if ( $this->converter->convert_users( $this->start ) ) { 536 $this->bump_step(); 537 538 empty( $this->start ) 539 ? $this->converter_response( esc_html__( 'No users to import', 'bbpress' ) ) 540 : $this->converter_response( esc_html__( 'All users imported', 'bbpress' ) ); 541 } else { 542 $this->bump_start(); 543 $this->converter_response( sprintf( esc_html__( 'Converting users (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 544 } 545 } else { 546 $this->bump_step(); 547 $this->converter_response( esc_html__( 'Skipping user clean-up', 'bbpress' ) ); 548 } 549 } 550 551 /** 552 * Maybe clean up passwords 553 * 554 * @since 2.6.0 bbPress (r6513) 555 */ 556 private function step_passwords() { 557 if ( true === $this->converter->convert_users ) { 558 if ( $this->converter->clean_passwords( $this->start ) ) { 559 $this->bump_step(); 560 561 empty( $this->start ) 562 ? $this->converter_response( esc_html__( 'No passwords to clear', 'bbpress' ) ) 563 : $this->converter_response( esc_html__( 'All passwords cleared', 'bbpress' ) ); 564 } else { 565 $this->bump_start(); 566 $this->converter_response( sprintf( esc_html__( 'Delete default WordPress user passwords (%1$s through %2$s)', 'bbpress' ), $this->start, $this->max ) ); 567 } 568 } else { 569 $this->bump_step(); 570 $this->converter_response( esc_html__( 'Skipping password clean-up', 'bbpress' ) ); 571 } 572 } 573 574 /** 575 * Maybe convert forums 576 * 577 * @since 2.6.0 bbPress (r6513) 578 */ 579 private function step_forums() { 580 if ( $this->converter->convert_forums( $this->start ) ) { 581 $this->bump_step(); 582 583 empty( $this->start ) 584 ? $this->converter_response( esc_html__( 'No forums to import', 'bbpress' ) ) 585 : $this->converter_response( esc_html__( 'All forums imported', 'bbpress' ) ); 586 } else { 587 $this->bump_start(); 588 $this->converter_response( sprintf( esc_html__( 'Converting forums (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 589 } 590 } 591 592 /** 593 * Maybe walk the forum hierarchy 594 * 595 * @since 2.6.0 bbPress (r6513) 596 */ 597 private function step_forum_hierarchy() { 598 if ( $this->converter->convert_forum_parents( $this->start ) ) { 599 $this->bump_step(); 600 601 empty( $this->start ) 602 ? $this->converter_response( esc_html__( 'No forum parents to import', 'bbpress' ) ) 603 : $this->converter_response( esc_html__( 'All forum parents imported', 'bbpress' ) ); 604 } else { 605 $this->bump_start(); 606 $this->converter_response( sprintf( esc_html__( 'Calculating forum hierarchy (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 607 } 608 } 609 610 /** 611 * Maybe convert forum subscriptions 612 * 613 * @since 2.6.0 bbPress (r6513) 614 */ 615 private function step_forum_subscriptions() { 616 if ( $this->converter->convert_forum_subscriptions( $this->start ) ) { 617 $this->bump_step(); 618 619 empty( $this->start ) 620 ? $this->converter_response( esc_html__( 'No forum subscriptions to import', 'bbpress' ) ) 621 : $this->converter_response( esc_html__( 'All forum subscriptions imported', 'bbpress' ) ); 622 } else { 623 $this->bump_start(); 624 $this->converter_response( sprintf( esc_html__( 'Converting forum subscriptions (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 625 } 626 } 627 628 /** 629 * Maybe convert topics 630 * 631 * @since 2.6.0 bbPress (r6513) 632 */ 633 private function step_topics() { 634 if ( $this->converter->convert_topics( $this->start ) ) { 635 $this->bump_step(); 636 637 empty( $this->start ) 638 ? $this->converter_response( esc_html__( 'No topics to import', 'bbpress' ) ) 639 : $this->converter_response( esc_html__( 'All topics imported', 'bbpress' ) ); 640 } else { 641 $this->bump_start(); 642 $this->converter_response( sprintf( esc_html__( 'Converting topics (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 643 } 644 } 645 646 /** 647 * Maybe convert topic authors (anonymous) 648 * 649 * @since 2.6.0 bbPress (r6513) 650 */ 651 private function step_topics_authors() { 652 if ( $this->converter->convert_anonymous_topic_authors( $this->start ) ) { 653 $this->bump_step(); 654 655 empty( $this->start ) 656 ? $this->converter_response( esc_html__( 'No anonymous topic authors to import', 'bbpress' ) ) 657 : $this->converter_response( esc_html__( 'All anonymous topic authors imported', 'bbpress' ) ); 658 } else { 659 $this->bump_start(); 660 $this->converter_response( sprintf( esc_html__( 'Converting anonymous topic authors (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 661 } 662 } 663 664 /** 665 * Maybe convert sticky topics (not super stickies) 666 * 667 * @since 2.6.0 bbPress (r6513) 668 */ 669 private function step_stickies() { 670 if ( $this->converter->convert_topic_stickies( $this->start ) ) { 671 $this->bump_step(); 672 673 empty( $this->start ) 674 ? $this->converter_response( esc_html__( 'No stickies to import', 'bbpress' ) ) 675 : $this->converter_response( esc_html__( 'All stickies imported', 'bbpress' ) ); 676 } else { 677 $this->bump_start(); 678 $this->converter_response( sprintf( esc_html__( 'Calculating topic stickies (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 679 } 680 } 681 682 /** 683 * Maybe convert super-sticky topics (not per-forum) 684 * 685 * @since 2.6.0 bbPress (r6513) 686 */ 687 private function step_super_stickies() { 688 if ( $this->converter->convert_topic_super_stickies( $this->start ) ) { 689 $this->bump_step(); 690 691 empty( $this->start ) 692 ? $this->converter_response( esc_html__( 'No super stickies to import', 'bbpress' ) ) 693 : $this->converter_response( esc_html__( 'All super stickies imported', 'bbpress' ) ); 694 } else { 695 $this->bump_start(); 696 $this->converter_response( sprintf( esc_html__( 'Calculating topic super stickies (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 697 } 698 } 699 700 /** 701 * Maybe close converted topics 702 * 703 * @since 2.6.0 bbPress (r6513) 704 */ 705 private function step_closed_topics() { 706 if ( $this->converter->convert_topic_closed_topics( $this->start ) ) { 707 $this->bump_step(); 708 709 empty( $this->start ) 710 ? $this->converter_response( esc_html__( 'No closed topics to import', 'bbpress' ) ) 711 : $this->converter_response( esc_html__( 'All closed topics imported', 'bbpress' ) ); 712 } else { 713 $this->bump_start(); 714 $this->converter_response( sprintf( esc_html__( 'Calculating closed topics (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 715 } 716 } 717 718 /** 719 * Maybe convert topic tags 720 * 721 * @since 2.6.0 bbPress (r6513) 722 */ 723 private function step_topic_tags() { 724 if ( $this->converter->convert_tags( $this->start ) ) { 725 $this->bump_step(); 726 727 empty( $this->start ) 728 ? $this->converter_response( esc_html__( 'No topic tags to import', 'bbpress' ) ) 729 : $this->converter_response( esc_html__( 'All topic tags imported', 'bbpress' ) ); 730 } else { 731 $this->bump_start(); 732 $this->converter_response( sprintf( esc_html__( 'Converting topic tags (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 733 } 734 } 735 736 /** 737 * Maybe convert topic subscriptions 738 * 739 * @since 2.6.0 bbPress (r6513) 740 */ 741 private function step_topic_subscriptions() { 742 if ( $this->converter->convert_topic_subscriptions( $this->start ) ) { 743 $this->bump_step(); 744 745 empty( $this->start ) 746 ? $this->converter_response( esc_html__( 'No topic subscriptions to import', 'bbpress' ) ) 747 : $this->converter_response( esc_html__( 'All topic subscriptions imported', 'bbpress' ) ); 748 } else { 749 $this->bump_start(); 750 $this->converter_response( sprintf( esc_html__( 'Converting topic subscriptions (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 751 } 752 } 753 754 /** 755 * Maybe convert topic favorites 756 * 757 * @since 2.6.0 bbPress (r6513) 758 */ 759 private function step_topic_favorites() { 760 if ( $this->converter->convert_favorites( $this->start ) ) { 761 $this->bump_step(); 762 763 empty( $this->start ) 764 ? $this->converter_response( esc_html__( 'No favorites to import', 'bbpress' ) ) 765 : $this->converter_response( esc_html__( 'All favorites imported', 'bbpress' ) ); 766 } else { 767 $this->bump_start(); 768 $this->converter_response( sprintf( esc_html__( 'Converting favorites (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 769 } 770 } 771 772 /** 773 * Maybe convert replies 774 * 775 * @since 2.6.0 bbPress (r6513) 776 */ 777 private function step_replies() { 778 if ( $this->converter->convert_replies( $this->start ) ) { 779 $this->bump_step(); 780 781 empty( $this->start ) 782 ? $this->converter_response( esc_html__( 'No replies to import', 'bbpress' ) ) 783 : $this->converter_response( esc_html__( 'All replies imported', 'bbpress' ) ); 784 } else { 785 $this->bump_start(); 786 $this->converter_response( sprintf( esc_html__( 'Converting replies (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 787 } 788 } 789 790 /** 791 * Maybe convert reply authors (anonymous) 792 * 793 * @since 2.6.0 bbPress (r6513) 794 */ 795 private function step_reply_authors() { 796 if ( $this->converter->convert_anonymous_reply_authors( $this->start ) ) { 797 $this->bump_step(); 798 799 empty( $this->start ) 800 ? $this->converter_response( esc_html__( 'No anonymous reply authors to import', 'bbpress' ) ) 801 : $this->converter_response( esc_html__( 'All anonymous reply authors imported', 'bbpress' ) ); 802 } else { 803 $this->bump_start(); 804 $this->converter_response( sprintf( esc_html__( 'Converting anonymous reply authors (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 805 } 806 } 807 808 /** 809 * Maybe convert the threaded reply hierarchy 810 * 811 * @since 2.6.0 bbPress (r6513) 812 */ 813 private function step_reply_hierarchy() { 814 if ( $this->converter->convert_reply_to_parents( $this->start ) ) { 815 $this->bump_step(); 816 817 empty( $this->start ) 818 ? $this->converter_response( esc_html__( 'No threaded replies to import', 'bbpress' ) ) 819 : $this->converter_response( esc_html__( 'All threaded replies imported', 'bbpress' ) ); 820 } else { 821 $this->bump_start(); 822 $this->converter_response( sprintf( esc_html__( 'Calculating threaded replies parents (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) ); 823 } 824 } 825 826 /** 827 * Done! 828 * 829 * @since 2.6.0 bbPress (r6513) 830 */ 831 private function step_done() { 832 $this->reset(); 833 $this->converter_response( esc_html__( 'Import Finished', 'bbpress' ) ); 834 } 835 836 /** Helper Table **********************************************************/ 837 838 /** 839 * Create Tables for fast syncing 840 * 841 * @since 2.1.0 bbPress (r3813) 842 */ 843 public static function sync_table( $drop = false ) { 844 845 // Setup DB 846 $bbp_db = bbp_db(); 847 $table_name = $bbp_db->prefix . 'bbp_converter_translator'; 848 $table_exists = $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name; 849 850 // Maybe drop the sync table 851 if ( ( true === $drop ) && ( true === $table_exists ) ) { 852 $bbp_db->query( "DROP TABLE {$table_name}" ); 853 } 854 855 // Maybe include the upgrade functions, for dbDelta() 856 if ( ! function_exists( 'dbDelta' ) ) { 857 require_once ABSPATH . '/wp-admin/includes/upgrade.php'; 858 } 859 860 // Defaults 861 $sql = array(); 862 $charset_collate = ''; 863 864 // https://bbpress.trac.wordpress.org/ticket/3145 865 $max_index_length = 75; 866 867 // Maybe override the character set 868 if ( ! empty( $bbp_db->charset ) ) { 869 $charset_collate .= "DEFAULT CHARACTER SET {$bbp_db->charset}"; 870 } 871 872 // Maybe override the collation 873 if ( ! empty( $bbp_db->collate ) ) { 874 $charset_collate .= " COLLATE {$bbp_db->collate}"; 875 } 876 877 /** Translator ********************************************************/ 878 879 $sql[] = "CREATE TABLE {$table_name} ( 880 meta_id mediumint(8) unsigned not null auto_increment, 881 value_type varchar(25) null, 882 value_id bigint(20) unsigned not null default '0', 883 meta_key varchar({$max_index_length}) null, 884 meta_value varchar({$max_index_length}) null, 885 PRIMARY KEY (meta_id), 886 KEY value_id (value_id), 887 KEY meta_join (meta_key({$max_index_length}), meta_value({$max_index_length})) 888 ) {$charset_collate}"; 889 890 dbDelta( $sql ); 891 } 892 } 893 endif;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Dec 6 01:00:52 2024 | Cross-referenced by PHPXref 0.7.1 |