PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.0.0
Forumax – AI Powered Advanced Community Forum Plugin v2.0.0
2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 2.1.0 All 29 releases
bbp-core / vendor / bbpress / includes / admin / classes / class-bbp-converter.php

class-bbp-converter.php in Forumax – AI Powered Advanced Community Forum Plugin 2.0.0, at vendor/bbpress/includes/admin/classes/class-bbp-converter.php

894 lines 26.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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;
894