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

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

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