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 / MyBB.php

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

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