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

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

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