Skip to:
Content

bbPress.org

Ticket #2379: PunBB.php

File PunBB.php, 18.2 KB (added by netweb, 13 years ago)

PunBB 2nd Pass - Fixed Topics, Replies, User Nice Name ‘user_nicename’ & Display Name ‘user_displayname’, User MSN

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