PluginProbe
bbPress / 2.6.17
bbPress v2.6.17
2.6.17 trunk 2.0 2.0-beta-1 2.0-beta-2b 2.0-beta-3 2.0-beta-3b 2.0-rc-2 2.0-rc-3 2.0-rc-4 2.0-rc-5 2.0.1 2.0.2 2.0.3 2.1 2.1-beta-1 2.1-rc1 2.1-rc2 2.1-rc3 2.1-rc4 2.1.1 2.1.2 2.1.3 2.2 2.2.1 All 72 releases
bbpress / includes / admin / converters / FluxBB.php

FluxBB.php in bbPress 2.6.17, at includes/admin/converters/FluxBB.php

686 lines 18.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * bbPress FluxBB Converter
5 *
6 * @package bbPress
7 * @subpackage Converters
8 */
9
10 /**
11 * Implementation of FluxBB Forum converter.
12 *
13 * @since 2.5.0 bbPress (r5138)
14 *
15 * @link Codex Docs https://codex.bbpress.org/import-forums/fluxbb
16 */
17 class FluxBB extends BBP_Converter_Base {
18
19 /**
20 * Main Constructor
21 *
22 */
23 public function __construct() {
24 parent::__construct();
25 }
26
27 /**
28 * Sets up the field mappings
29 */
30 public function setup_globals() {
31
32 /** Forum Section *****************************************************/
33
34 // Old forum id (Stored in postmeta)
35 $this->field_map[] = array(
36 'from_tablename' => 'forums',
37 'from_fieldname' => 'id',
38 'to_type' => 'forum',
39 'to_fieldname' => '_bbp_old_forum_id'
40 );
41
42 // Forum topic count (Stored in postmeta)
43 $this->field_map[] = array(
44 'from_tablename' => 'forums',
45 'from_fieldname' => 'num_topics',
46 'to_type' => 'forum',
47 'to_fieldname' => '_bbp_topic_count'
48 );
49
50 // Forum reply count (Stored in postmeta)
51 $this->field_map[] = array(
52 'from_tablename' => 'forums',
53 'from_fieldname' => 'num_posts',
54 'to_type' => 'forum',
55 'to_fieldname' => '_bbp_reply_count'
56 );
57
58 // Forum total topic count (Stored in postmeta)
59 $this->field_map[] = array(
60 'from_tablename' => 'forums',
61 'from_fieldname' => 'num_topics',
62 'to_type' => 'forum',
63 'to_fieldname' => '_bbp_total_topic_count'
64 );
65
66 // Forum total reply count (Stored in postmeta)
67 $this->field_map[] = array(
68 'from_tablename' => 'forums',
69 'from_fieldname' => 'num_posts',
70 'to_type' => 'forum',
71 'to_fieldname' => '_bbp_total_reply_count'
72 );
73
74 // Forum title.
75 $this->field_map[] = array(
76 'from_tablename' => 'forums',
77 'from_fieldname' => 'forum_name',
78 'to_type' => 'forum',
79 'to_fieldname' => 'post_title'
80 );
81
82 // Forum slug (Clean name to avoid conflicts)
83 $this->field_map[] = array(
84 'from_tablename' => 'forums',
85 'from_fieldname' => 'forum_name',
86 'to_type' => 'forum',
87 'to_fieldname' => 'post_name',
88 'callback_method' => 'callback_slug'
89 );
90
91 // Forum description.
92 $this->field_map[] = array(
93 'from_tablename' => 'forums',
94 'from_fieldname' => 'forum_desc',
95 'to_type' => 'forum',
96 'to_fieldname' => 'post_content',
97 'callback_method' => 'callback_null'
98 );
99
100 // Forum display order (Starts from 1)
101 $this->field_map[] = array(
102 'from_tablename' => 'forums',
103 'from_fieldname' => 'disp_position',
104 'to_type' => 'forum',
105 'to_fieldname' => 'menu_order'
106 );
107
108 // Forum type (Set a default value 'forum', Stored in postmeta)
109 $this->field_map[] = array(
110 'to_type' => 'forum',
111 'to_fieldname' => '_bbp_forum_type',
112 'default' => 'forum'
113 );
114
115 // Forum status (Set a default value 'open', Stored in postmeta)
116 $this->field_map[] = array(
117 'to_type' => 'forum',
118 'to_fieldname' => '_bbp_status',
119 'default' => 'open'
120 );
121
122 // Forum dates.
123 $this->field_map[] = array(
124 'to_type' => 'forum',
125 'to_fieldname' => 'post_date',
126 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
127 );
128 $this->field_map[] = array(
129 'to_type' => 'forum',
130 'to_fieldname' => 'post_date_gmt',
131 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
132 );
133 $this->field_map[] = array(
134 'to_type' => 'forum',
135 'to_fieldname' => 'post_modified',
136 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
137 );
138 $this->field_map[] = array(
139 'to_type' => 'forum',
140 'to_fieldname' => 'post_modified_gmt',
141 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
142 );
143
144 /** Forum Subscriptions Section ***************************************/
145
146 // Subscribed forum ID (Stored in usermeta)
147 $this->field_map[] = array(
148 'from_tablename' => 'forum_subscriptions',
149 'from_fieldname' => 'forum_id',
150 'to_type' => 'forum_subscriptions',
151 'to_fieldname' => '_bbp_forum_subscriptions'
152 );
153
154 // Subscribed user ID (Stored in usermeta)
155 $this->field_map[] = array(
156 'from_tablename' => 'forum_subscriptions',
157 'from_fieldname' => 'user_id',
158 'to_type' => 'forum_subscriptions',
159 'to_fieldname' => 'user_id',
160 'callback_method' => 'callback_userid'
161 );
162
163 /** Topic Section *****************************************************/
164
165 // Old topic id (Stored in postmeta)
166 $this->field_map[] = array(
167 'from_tablename' => 'topics',
168 'from_fieldname' => 'id',
169 'to_type' => 'topic',
170 'to_fieldname' => '_bbp_old_topic_id'
171 );
172
173 // Topic reply count (Stored in postmeta)
174 $this->field_map[] = array(
175 'from_tablename' => 'topics',
176 'from_fieldname' => 'num_replies',
177 'to_type' => 'topic',
178 'to_fieldname' => '_bbp_reply_count',
179 'callback_method' => 'callback_topic_reply_count'
180 );
181
182 // Topic total reply count (Includes unpublished replies, Stored in postmeta)
183 $this->field_map[] = array(
184 'from_tablename' => 'topics',
185 'from_fieldname' => 'num_replies',
186 'to_type' => 'topic',
187 'to_fieldname' => '_bbp_total_reply_count',
188 'callback_method' => 'callback_topic_reply_count'
189 );
190
191 // Topic parent forum id (If no parent, then 0, Stored in postmeta)
192 $this->field_map[] = array(
193 'from_tablename' => 'topics',
194 'from_fieldname' => 'forum_id',
195 'to_type' => 'topic',
196 'to_fieldname' => '_bbp_forum_id',
197 'callback_method' => 'callback_forumid'
198 );
199
200 // Topic author.
201 // Note: We join the 'posts' table because 'topics' table does include numeric user id.
202 $this->field_map[] = array(
203 'from_tablename' => 'posts',
204 'from_fieldname' => 'poster_id',
205 'join_tablename' => 'topics',
206 'join_type' => 'INNER',
207 'join_expression' => 'ON topics.first_post_id = posts.id',
208 'to_type' => 'topic',
209 'to_fieldname' => 'post_author',
210 'callback_method' => 'callback_userid'
211 );
212
213 // Topic Author ip (Stored in postmeta)
214 // Note: We join the 'posts' table because 'topics' table does not include author IP addresses.
215 $this->field_map[] = array(
216 'from_tablename' => 'posts',
217 'from_fieldname' => 'poster_ip',
218 'join_tablename' => 'topics',
219 'join_type' => 'INNER',
220 'join_expression' => 'ON topics.first_post_id = posts.id',
221 'to_type' => 'topic',
222 'to_fieldname' => '_bbp_author_ip'
223 );
224
225 // Topic content.
226 // Note: We join the 'posts' table because 'topics' table does not include topic content.
227 $this->field_map[] = array(
228 'from_tablename' => 'posts',
229 'from_fieldname' => 'message',
230 'join_tablename' => 'topics',
231 'join_type' => 'INNER',
232 'join_expression' => 'ON topics.first_post_id = posts.id',
233 'to_type' => 'topic',
234 'to_fieldname' => 'post_content',
235 'callback_method' => 'callback_html'
236 );
237
238 // Topic title.
239 $this->field_map[] = array(
240 'from_tablename' => 'topics',
241 'from_fieldname' => 'subject',
242 'to_type' => 'topic',
243 'to_fieldname' => 'post_title'
244 );
245
246 // Topic slug (Clean name to avoid conflicts)
247 $this->field_map[] = array(
248 'from_tablename' => 'topics',
249 'from_fieldname' => 'subject',
250 'to_type' => 'topic',
251 'to_fieldname' => 'post_name',
252 'callback_method' => 'callback_slug'
253 );
254
255 // Topic parent forum id (If no parent, then 0)
256 $this->field_map[] = array(
257 'from_tablename' => 'topics',
258 'from_fieldname' => 'forum_id',
259 'to_type' => 'topic',
260 'to_fieldname' => 'post_parent',
261 'callback_method' => 'callback_forumid'
262 );
263
264 // Sticky status (Stored in postmeta)
265 $this->field_map[] = array(
266 'from_tablename' => 'topics',
267 'from_fieldname' => 'sticky',
268 'to_type' => 'topic',
269 'to_fieldname' => '_bbp_old_sticky_status_id',
270 'callback_method' => 'callback_sticky_status'
271 );
272
273 // Topic dates.
274 $this->field_map[] = array(
275 'from_tablename' => 'topics',
276 'from_fieldname' => 'posted',
277 'to_type' => 'topic',
278 'to_fieldname' => 'post_date',
279 'callback_method' => 'callback_datetime'
280 );
281 $this->field_map[] = array(
282 'from_tablename' => 'topics',
283 'from_fieldname' => 'posted',
284 'to_type' => 'topic',
285 'to_fieldname' => 'post_date_gmt',
286 'callback_method' => 'callback_datetime'
287 );
288 $this->field_map[] = array(
289 'from_tablename' => 'topics',
290 'from_fieldname' => 'posted',
291 'to_type' => 'topic',
292 'to_fieldname' => 'post_modified',
293 'callback_method' => 'callback_datetime'
294 );
295 $this->field_map[] = array(
296 'from_tablename' => 'topics',
297 'from_fieldname' => 'posted',
298 'to_type' => 'topic',
299 'to_fieldname' => 'post_modified_gmt',
300 'callback_method' => 'callback_datetime'
301 );
302 $this->field_map[] = array(
303 'from_tablename' => 'topics',
304 'from_fieldname' => 'posted',
305 'to_type' => 'topic',
306 'to_fieldname' => '_bbp_last_active_time',
307 'callback_method' => 'callback_datetime'
308 );
309
310 // Topic status (Open = 0 or Closed = 1, FluxBB v1.5.3)
311 $this->field_map[] = array(
312 'from_tablename' => 'topics',
313 'from_fieldname' => 'closed',
314 'to_type' => 'topic',
315 'to_fieldname' => '_bbp_old_closed_status_id',
316 'callback_method' => 'callback_topic_status'
317 );
318
319 /** Tags Section ******************************************************/
320
321 /**
322 * FluxBB v1.5.3 Forums do not support topic tags out of the box
323 */
324
325 /** Topic Subscriptions Section ***************************************/
326
327 // Subscribed topic ID (Stored in usermeta)
328 $this->field_map[] = array(
329 'from_tablename' => 'topic_subscriptions',
330 'from_fieldname' => 'topic_id',
331 'to_type' => 'topic_subscriptions',
332 'to_fieldname' => '_bbp_subscriptions'
333 );
334
335 // Subscribed user ID (Stored in usermeta)
336 $this->field_map[] = array(
337 'from_tablename' => 'topic_subscriptions',
338 'from_fieldname' => 'user_id',
339 'to_type' => 'topic_subscriptions',
340 'to_fieldname' => 'user_id',
341 'callback_method' => 'callback_userid'
342 );
343
344 /** Reply Section *****************************************************/
345
346 // Old reply id (Stored in postmeta)
347 $this->field_map[] = array(
348 'from_tablename' => 'posts',
349 'from_fieldname' => 'id',
350 'to_type' => 'reply',
351 'to_fieldname' => '_bbp_old_reply_id'
352 );
353
354 // Reply parent forum id (If no parent, then 0, Stored in postmeta)
355 $this->field_map[] = array(
356 'from_tablename' => 'posts',
357 'from_fieldname' => 'topic_id',
358 'to_type' => 'reply',
359 'to_fieldname' => '_bbp_forum_id',
360 'callback_method' => 'callback_topicid_to_forumid'
361 );
362
363 // Reply parent topic id (If no parent, then 0, Stored in postmeta)
364 $this->field_map[] = array(
365 'from_tablename' => 'posts',
366 'from_fieldname' => 'topic_id',
367 'to_type' => 'reply',
368 'to_fieldname' => '_bbp_topic_id',
369 'callback_method' => 'callback_topicid'
370 );
371
372 // Reply author ip (Stored in postmeta)
373 $this->field_map[] = array(
374 'from_tablename' => 'posts',
375 'from_fieldname' => 'poster_ip',
376 'to_type' => 'reply',
377 'to_fieldname' => '_bbp_author_ip'
378 );
379
380 // Reply author.
381 $this->field_map[] = array(
382 'from_tablename' => 'posts',
383 'from_fieldname' => 'poster_id',
384 'to_type' => 'reply',
385 'to_fieldname' => 'post_author',
386 'callback_method' => 'callback_userid'
387 );
388
389 // Reply content.
390 $this->field_map[] = array(
391 'from_tablename' => 'posts',
392 'from_fieldname' => 'message',
393 'to_type' => 'reply',
394 'to_fieldname' => 'post_content',
395 'callback_method' => 'callback_html'
396 );
397
398 // Reply parent topic id (If no parent, then 0)
399 $this->field_map[] = array(
400 'from_tablename' => 'posts',
401 'from_fieldname' => 'topic_id',
402 'to_type' => 'reply',
403 'to_fieldname' => 'post_parent',
404 'callback_method' => 'callback_topicid'
405 );
406
407 // Reply dates.
408 $this->field_map[] = array(
409 'from_tablename' => 'posts',
410 'from_fieldname' => 'posted',
411 'to_type' => 'reply',
412 'to_fieldname' => 'post_date',
413 'callback_method' => 'callback_datetime'
414 );
415 $this->field_map[] = array(
416 'from_tablename' => 'posts',
417 'from_fieldname' => 'posted',
418 'to_type' => 'reply',
419 'to_fieldname' => 'post_date_gmt',
420 'callback_method' => 'callback_datetime'
421 );
422 $this->field_map[] = array(
423 'from_tablename' => 'posts',
424 'from_fieldname' => 'posted',
425 'to_type' => 'reply',
426 'to_fieldname' => 'post_modified',
427 'callback_method' => 'callback_datetime'
428 );
429 $this->field_map[] = array(
430 'from_tablename' => 'posts',
431 'from_fieldname' => 'posted',
432 'to_type' => 'reply',
433 'to_fieldname' => 'post_modified_gmt',
434 'callback_method' => 'callback_datetime'
435 );
436
437 /** User Section ******************************************************/
438
439 // Store old user id (Stored in usermeta)
440 $this->field_map[] = array(
441 'from_tablename' => 'users',
442 'from_fieldname' => 'id',
443 'to_type' => 'user',
444 'to_fieldname' => '_bbp_old_user_id'
445 );
446
447 // Store old user password (Stored in usermeta serialized with salt)
448 $this->field_map[] = array(
449 'from_tablename' => 'users',
450 'from_fieldname' => 'password',
451 'to_type' => 'user',
452 'to_fieldname' => '_bbp_password',
453 'callback_method' => 'callback_savepass'
454 );
455
456 // Store old user salt (This is only used for the SELECT row info for the above password save)
457 // $this->field_map[] = array(
458 // 'from_tablename' => 'users',
459 // 'from_fieldname' => 'salt',
460 // 'to_type' => 'user',
461 // 'to_fieldname' => ''
462 // );
463
464 // User password verify class (Stored in usermeta for verifying password)
465 $this->field_map[] = array(
466 'to_type' => 'users',
467 'to_fieldname' => '_bbp_class',
468 'default' => 'FluxBB'
469 );
470
471 // User name.
472 $this->field_map[] = array(
473 'from_tablename' => 'users',
474 'from_fieldname' => 'username',
475 'to_type' => 'user',
476 'to_fieldname' => 'user_login'
477 );
478
479 // User nice name.
480 $this->field_map[] = array(
481 'from_tablename' => 'users',
482 'from_fieldname' => 'username',
483 'to_type' => 'user',
484 'to_fieldname' => 'user_nicename'
485 );
486
487 // User email.
488 $this->field_map[] = array(
489 'from_tablename' => 'users',
490 'from_fieldname' => 'email',
491 'to_type' => 'user',
492 'to_fieldname' => 'user_email'
493 );
494
495 // User homepage.
496 $this->field_map[] = array(
497 'from_tablename' => 'users',
498 'from_fieldname' => 'url',
499 'to_type' => 'user',
500 'to_fieldname' => 'user_url'
501 );
502
503 // User registered.
504 $this->field_map[] = array(
505 'from_tablename' => 'users',
506 'from_fieldname' => 'registered',
507 'to_type' => 'user',
508 'to_fieldname' => 'user_registered',
509 'callback_method' => 'callback_datetime'
510 );
511
512 // User display name.
513 $this->field_map[] = array(
514 'from_tablename' => 'users',
515 'from_fieldname' => 'realname',
516 'to_type' => 'user',
517 'to_fieldname' => 'display_name'
518 );
519
520 // User AIM (Stored in usermeta)
521 $this->field_map[] = array(
522 'from_tablename' => 'users',
523 'from_fieldname' => 'aim',
524 'to_type' => 'user',
525 'to_fieldname' => '_bbp_fluxbb_user_aim'
526 );
527
528 // User Yahoo (Stored in usermeta)
529 $this->field_map[] = array(
530 'from_tablename' => 'users',
531 'from_fieldname' => 'yahoo',
532 'to_type' => 'user',
533 'to_fieldname' => '_bbp_fluxbb_user_yim'
534 );
535
536 // Store Jabber
537 $this->field_map[] = array(
538 'from_tablename' => 'users',
539 'from_fieldname' => 'jabber',
540 'to_type' => 'user',
541 'to_fieldname' => '_bbp_fluxbb_user_jabber'
542 );
543
544 // Store ICQ (Stored in usermeta)
545 $this->field_map[] = array(
546 'from_tablename' => 'users',
547 'from_fieldname' => 'icq',
548 'to_type' => 'user',
549 'to_fieldname' => '_bbp_fluxbb_user_icq'
550 );
551
552 // Store MSN (Stored in usermeta)
553 $this->field_map[] = array(
554 'from_tablename' => 'users',
555 'from_fieldname' => 'msn',
556 'to_type' => 'user',
557 'to_fieldname' => '_bbp_fluxbb_user_msn'
558 );
559
560 // Store Location (Stored in usermeta)
561 $this->field_map[] = array(
562 'from_tablename' => 'users',
563 'from_fieldname' => 'location',
564 'to_type' => 'user',
565 'to_fieldname' => '_bbp_fluxbb_user_location'
566 );
567
568 // Store Signature (Stored in usermeta)
569 $this->field_map[] = array(
570 'from_tablename' => 'users',
571 'from_fieldname' => 'signature',
572 'to_type' => 'user',
573 'to_fieldname' => '_bbp_fluxbb_user_sig',
574 'callback_method' => 'callback_html'
575 );
576
577 // Store Admin Note (Stored in usermeta)
578 $this->field_map[] = array(
579 'from_tablename' => 'users',
580 'from_fieldname' => 'admin_note',
581 'to_type' => 'user',
582 'to_fieldname' => '_bbp_fluxbb_user_admin_note'
583 );
584 }
585
586 /**
587 * This method allows us to indicates what is or is not converted for each
588 * converter.
589 */
590 public function info() {
591 return '';
592 }
593
594 /**
595 * This method is to save the salt and password together. That
596 * way when we authenticate it we can get it out of the database
597 * as one value. Array values are auto sanitized by WordPress.
598 */
599 public function callback_savepass( $field, $row ) {
600 $pass_array = array(
601 'hash' => $field,
602 'salt' => $row['salt']
603 );
604
605 return $pass_array;
606 }
607
608 /**
609 * This method is to take the pass out of the database and compare
610 * to a pass the user has typed in.
611 */
612 public function authenticate_pass( $password, $serialized_pass ) {
613
614 // Unserialize the password, with safeguards
615 $pass_array = unserialize(
616 $serialized_pass,
617 array(
618 'allowed_classes' => false,
619 'max_depth' => 1
620 )
621 );
622
623 // Bail if missing values
624 if ( ! is_array( $pass_array ) || ! isset( $pass_array['hash'], $pass_array['salt'] ) ) {
625 return false;
626 }
627
628 // Return comparison
629 return hash_equals(
630 $pass_array['hash'],
631 md5( md5( $password ) . $pass_array['salt'] )
632 );
633 }
634
635 /**
636 * Translate the post status from FluxBB v1.5.3 numerics to WordPress's strings.
637 *
638 * @param int $status FluxBB v1.5.3 numeric topic status
639 * @return string WordPress safe
640 */
641 public function callback_topic_status( $status = 0 ) {
642 switch ( $status ) {
643 case 1 :
644 $status = 'closed';
645 break;
646
647 case 0 :
648 default :
649 $status = 'publish';
650 break;
651 }
652 return $status;
653 }
654
655 /**
656 * Translate the topic sticky status type from FluxBB v1.5.3 numerics to WordPress's strings.
657 *
658 * @param int $status FluxBB v1.5.3 numeric forum type
659 * @return string WordPress safe
660 */
661 public function callback_sticky_status( $status = 0 ) {
662 switch ( $status ) {
663 case 1 :
664 $status = 'sticky'; // FluxBB Sticky 'sticky = 1'
665 break;
666
667 case 0 :
668 default :
669 $status = 'normal'; // FluxBB Normal Topic 'sticky = 0'
670 break;
671 }
672 return $status;
673 }
674
675 /**
676 * Verify the topic/reply count.
677 *
678 * @param int $count FluxBB v1.5.3 topic/reply counts
679 * @return string WordPress safe
680 */
681 public function callback_topic_reply_count( $count = 1 ) {
682 $count = absint( (int) $count - 1 );
683 return $count;
684 }
685 }
686