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

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

612 lines 16.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 Phorum Converter
5 *
6 * @package bbPress
7 * @subpackage Converters
8 */
9
10 /**
11 * Implementation of Phorum Forum converter.
12 *
13 * @since 2.5.0 bbPress (r5141)
14 *
15 * @link Codex Docs https://codex.bbpress.org/import-forums/phorum
16 */
17 class Phorum 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' => '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' => 'forums',
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' => 'forums',
53 'from_fieldname' => 'thread_count',
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' => 'message_count',
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' => 'display_order',
96 'to_type' => 'forum',
97 'to_fieldname' => 'menu_order'
98 );
99
100 // Forum type (Category = 1 or Forum = 0, Stored in postmeta)
101 $this->field_map[] = array(
102 'from_tablename' => 'forums',
103 'from_fieldname' => 'folder_flag',
104 'to_type' => 'forum',
105 'to_fieldname' => '_bbp_forum_type',
106 'callback_method' => 'callback_forum_type'
107 );
108
109 // Forum status (Set a default value 'open', Stored in postmeta)
110 $this->field_map[] = array(
111 'to_type' => 'forum',
112 'to_fieldname' => '_bbp_status',
113 'default' => 'open'
114 );
115
116 // Forum dates.
117 $this->field_map[] = array(
118 'to_type' => 'forum',
119 'to_fieldname' => 'post_date',
120 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
121 );
122 $this->field_map[] = array(
123 'to_type' => 'forum',
124 'to_fieldname' => 'post_date_gmt',
125 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
126 );
127 $this->field_map[] = array(
128 'to_type' => 'forum',
129 'to_fieldname' => 'post_modified',
130 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
131 );
132 $this->field_map[] = array(
133 'to_type' => 'forum',
134 'to_fieldname' => 'post_modified_gmt',
135 'default' => date( 'Y-m-d H:i:s' ) // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date
136 );
137
138 /** Topic Section *****************************************************/
139
140 // Old topic id (Stored in postmeta)
141 $this->field_map[] = array(
142 'from_tablename' => 'messages',
143 'from_fieldname' => 'thread',
144 'from_expression' => 'WHERE parent_id = 0',
145 'to_type' => 'topic',
146 'to_fieldname' => '_bbp_old_topic_id'
147 );
148
149 // Topic reply count (Stored in postmeta)
150 $this->field_map[] = array(
151 'from_tablename' => 'messages',
152 'from_fieldname' => 'thread_count',
153 'to_type' => 'topic',
154 'to_fieldname' => '_bbp_reply_count',
155 'callback_method' => 'callback_topic_reply_count'
156 );
157
158 // Topic total reply count (Includes unpublished replies, Stored in postmeta)
159 $this->field_map[] = array(
160 'from_tablename' => 'messages',
161 'from_fieldname' => 'thread_count',
162 'to_type' => 'topic',
163 'to_fieldname' => '_bbp_total_reply_count',
164 'callback_method' => 'callback_topic_reply_count'
165 );
166
167 // Topic parent forum id (If no parent, then 0, Stored in postmeta)
168 $this->field_map[] = array(
169 'from_tablename' => 'messages',
170 'from_fieldname' => 'forum_id',
171 'to_type' => 'topic',
172 'to_fieldname' => '_bbp_forum_id',
173 'callback_method' => 'callback_forumid'
174 );
175
176 // Topic author.
177 $this->field_map[] = array(
178 'from_tablename' => 'messages',
179 'from_fieldname' => 'user_id',
180 'to_type' => 'topic',
181 'to_fieldname' => 'post_author',
182 'callback_method' => 'callback_userid'
183 );
184
185 // Topic author name (Stored in postmeta as _bbp_anonymous_name)
186 $this->field_map[] = array(
187 'from_tablename' => 'messages',
188 'from_fieldname' => 'author',
189 'to_type' => 'topic',
190 'to_fieldname' => '_bbp_old_topic_author_name_id'
191 );
192
193 // Is the topic anonymous (Stored in postmeta)
194 $this->field_map[] = array(
195 'from_tablename' => 'messages',
196 'from_fieldname' => 'user_id',
197 'to_type' => 'topic',
198 'to_fieldname' => '_bbp_old_is_topic_anonymous_id',
199 'callback_method' => 'callback_check_anonymous'
200 );
201
202 // Topic Author ip (Stored in postmeta)
203 $this->field_map[] = array(
204 'from_tablename' => 'messages',
205 'from_fieldname' => 'ip',
206 'to_type' => 'topic',
207 'to_fieldname' => '_bbp_author_ip'
208 );
209
210 // Topic content.
211 $this->field_map[] = array(
212 'from_tablename' => 'messages',
213 'from_fieldname' => 'body',
214 'to_type' => 'topic',
215 'to_fieldname' => 'post_content',
216 'callback_method' => 'callback_html'
217 );
218
219 // Topic title.
220 $this->field_map[] = array(
221 'from_tablename' => 'messages',
222 'from_fieldname' => 'subject',
223 'to_type' => 'topic',
224 'to_fieldname' => 'post_title'
225 );
226
227 // Topic slug (Clean name to avoid conflicts)
228 $this->field_map[] = array(
229 'from_tablename' => 'messages',
230 'from_fieldname' => 'subject',
231 'to_type' => 'topic',
232 'to_fieldname' => 'post_name',
233 'callback_method' => 'callback_slug'
234 );
235
236 // Topic parent forum id (If no parent, then 0)
237 $this->field_map[] = array(
238 'from_tablename' => 'messages',
239 'from_fieldname' => 'forum_id',
240 'to_type' => 'topic',
241 'to_fieldname' => 'post_parent',
242 'callback_method' => 'callback_forumid'
243 );
244
245 // Topic dates.
246 $this->field_map[] = array(
247 'from_tablename' => 'messages',
248 'from_fieldname' => 'datestamp',
249 'to_type' => 'topic',
250 'to_fieldname' => 'post_date',
251 'callback_method' => 'callback_datetime'
252 );
253 $this->field_map[] = array(
254 'from_tablename' => 'messages',
255 'from_fieldname' => 'datestamp',
256 'to_type' => 'topic',
257 'to_fieldname' => 'post_date_gmt',
258 'callback_method' => 'callback_datetime'
259 );
260 $this->field_map[] = array(
261 'from_tablename' => 'messages',
262 'from_fieldname' => 'datestamp',
263 'to_type' => 'topic',
264 'to_fieldname' => 'post_modified',
265 'callback_method' => 'callback_datetime'
266 );
267 $this->field_map[] = array(
268 'from_tablename' => 'messages',
269 'from_fieldname' => 'datestamp',
270 'to_type' => 'topic',
271 'to_fieldname' => 'post_modified_gmt',
272 'callback_method' => 'callback_datetime'
273 );
274 $this->field_map[] = array(
275 'from_tablename' => 'messages',
276 'from_fieldname' => 'datestamp',
277 'to_type' => 'topic',
278 'to_fieldname' => '_bbp_last_active_time',
279 'callback_method' => 'callback_datetime'
280 );
281
282 // Topic status (Open = 0 or Closed = 1)
283 $this->field_map[] = array(
284 'from_tablename' => 'messages',
285 'from_fieldname' => 'closed',
286 'to_type' => 'topic',
287 'to_fieldname' => '_bbp_old_closed_status_id',
288 'callback_method' => 'callback_topic_status'
289 );
290
291 /** Tags Section ******************************************************/
292
293 /**
294 * Phorum v5.2.19 Forums do not support topic tags out of the box
295 */
296
297 /** Topic Subscriptions Section ***************************************/
298
299 // Subscribed topic ID (Stored in usermeta)
300 $this->field_map[] = array(
301 'from_tablename' => 'subscribers',
302 'from_fieldname' => 'thread',
303 'to_type' => 'topic_subscriptions',
304 'to_fieldname' => '_bbp_subscriptions'
305 );
306
307 // Subscribed user ID (Stored in usermeta)
308 $this->field_map[] = array(
309 'from_tablename' => 'subscribers',
310 'from_fieldname' => 'user_id',
311 'to_type' => 'topic_subscriptions',
312 'to_fieldname' => 'user_id',
313 'callback_method' => 'callback_userid'
314 );
315
316 /** Reply Section *****************************************************/
317
318 // Old reply id (Stored in postmeta)
319 $this->field_map[] = array(
320 'from_tablename' => 'messages',
321 'from_fieldname' => 'message_id',
322 'from_expression' => 'WHERE parent_id != 0',
323 'to_type' => 'reply',
324 'to_fieldname' => '_bbp_old_reply_id'
325 );
326
327 // Reply parent forum id (If no parent, then 0. Stored in postmeta)
328 $this->field_map[] = array(
329 'from_tablename' => 'messages',
330 'from_fieldname' => 'forum_id',
331 'to_type' => 'reply',
332 'to_fieldname' => '_bbp_forum_id',
333 'callback_method' => 'callback_forumid'
334 );
335
336 // Reply parent topic id (If no parent, then 0. Stored in postmeta)
337 $this->field_map[] = array(
338 'from_tablename' => 'messages',
339 'from_fieldname' => 'thread',
340 'to_type' => 'reply',
341 'to_fieldname' => '_bbp_topic_id',
342 'callback_method' => 'callback_topicid'
343 );
344
345 // Reply author ip (Stored in postmeta)
346 $this->field_map[] = array(
347 'from_tablename' => 'messages',
348 'from_fieldname' => 'ip',
349 'to_type' => 'reply',
350 'to_fieldname' => '_bbp_author_ip'
351 );
352
353 // Reply author.
354 $this->field_map[] = array(
355 'from_tablename' => 'messages',
356 'from_fieldname' => 'user_id',
357 'to_type' => 'reply',
358 'to_fieldname' => 'post_author',
359 'callback_method' => 'callback_userid'
360 );
361
362 // Reply author name (Stored in postmeta as _bbp_anonymous_name)
363 $this->field_map[] = array(
364 'from_tablename' => 'messages',
365 'from_fieldname' => 'author',
366 'to_type' => 'reply',
367 'to_fieldname' => '_bbp_old_reply_author_name_id'
368 );
369
370 // Is the reply anonymous (Stored in postmeta)
371 $this->field_map[] = array(
372 'from_tablename' => 'messages',
373 'from_fieldname' => 'user_id',
374 'to_type' => 'reply',
375 'to_fieldname' => '_bbp_old_is_reply_anonymous_id',
376 'callback_method' => 'callback_check_anonymous'
377 );
378
379 // Reply content.
380 $this->field_map[] = array(
381 'from_tablename' => 'messages',
382 'from_fieldname' => 'body',
383 'to_type' => 'reply',
384 'to_fieldname' => 'post_content',
385 'callback_method' => 'callback_html'
386 );
387
388 // Reply parent topic id (If no parent, then 0)
389 $this->field_map[] = array(
390 'from_tablename' => 'messages',
391 'from_fieldname' => 'thread',
392 'to_type' => 'reply',
393 'to_fieldname' => 'post_parent',
394 'callback_method' => 'callback_topicid'
395 );
396
397 // Reply dates.
398 $this->field_map[] = array(
399 'from_tablename' => 'messages',
400 'from_fieldname' => 'datestamp',
401 'to_type' => 'reply',
402 'to_fieldname' => 'post_date',
403 'callback_method' => 'callback_datetime'
404 );
405 $this->field_map[] = array(
406 'from_tablename' => 'messages',
407 'from_fieldname' => 'datestamp',
408 'to_type' => 'reply',
409 'to_fieldname' => 'post_date_gmt',
410 'callback_method' => 'callback_datetime'
411 );
412 $this->field_map[] = array(
413 'from_tablename' => 'messages',
414 'from_fieldname' => 'datestamp',
415 'to_type' => 'reply',
416 'to_fieldname' => 'post_modified',
417 'callback_method' => 'callback_datetime'
418 );
419 $this->field_map[] = array(
420 'from_tablename' => 'messages',
421 'from_fieldname' => 'datestamp',
422 'to_type' => 'reply',
423 'to_fieldname' => 'post_modified_gmt',
424 'callback_method' => 'callback_datetime'
425 );
426
427 /** User Section ******************************************************/
428
429 // Store old user id (Stored in usermeta)
430 $this->field_map[] = array(
431 'from_tablename' => 'users',
432 'from_fieldname' => 'user_id',
433 'to_type' => 'user',
434 'to_fieldname' => '_bbp_old_user_id'
435 );
436
437 // Store old user password (Stored in usermeta serialized with salt)
438 $this->field_map[] = array(
439 'from_tablename' => 'users',
440 'from_fieldname' => 'password',
441 'to_type' => 'user',
442 'to_fieldname' => '_bbp_password',
443 'callback_method' => 'callback_savepass'
444 );
445
446 // Store old user salt (This is only used for the SELECT row info for the above password save)
447 // $this->field_map[] = array(
448 // 'from_tablename' => 'users',
449 // 'from_fieldname' => 'salt',
450 // 'to_type' => 'user',
451 // 'to_fieldname' => ''
452 // );
453
454 // User password verify class (Stored in usermeta for verifying password)
455 $this->field_map[] = array(
456 'to_type' => 'users',
457 'to_fieldname' => '_bbp_class',
458 'default' => 'Phorum'
459 );
460
461 // User name.
462 $this->field_map[] = array(
463 'from_tablename' => 'users',
464 'from_fieldname' => 'username',
465 'to_type' => 'user',
466 'to_fieldname' => 'user_login'
467 );
468
469 // User nice name.
470 $this->field_map[] = array(
471 'from_tablename' => 'users',
472 'from_fieldname' => 'display_name',
473 'to_type' => 'user',
474 'to_fieldname' => 'user_nicename'
475 );
476
477 // User email.
478 $this->field_map[] = array(
479 'from_tablename' => 'users',
480 'from_fieldname' => 'email',
481 'to_type' => 'user',
482 'to_fieldname' => 'user_email'
483 );
484
485 // User registered.
486 $this->field_map[] = array(
487 'from_tablename' => 'users',
488 'from_fieldname' => 'date_added',
489 'to_type' => 'user',
490 'to_fieldname' => 'user_registered',
491 'callback_method' => 'callback_datetime'
492 );
493
494 // User display name.
495 $this->field_map[] = array(
496 'from_tablename' => 'users',
497 'from_fieldname' => 'real_name',
498 'to_type' => 'user',
499 'to_fieldname' => 'display_name'
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_phorum_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 forum type from Phorum v5.2.19 numerics to WordPress's strings.
563 *
564 * @param int $status Phorum v5.2.19 numeric forum type
565 * @return string WordPress safe
566 */
567 public function callback_forum_type( $status = 0 ) {
568 switch ( $status ) {
569 case 1 :
570 $status = 'category';
571 break;
572
573 case 0 :
574 default :
575 $status = 'forum';
576 break;
577 }
578 return $status;
579 }
580
581 /**
582 * Translate the post status from Phorum v5.2.19 numerics to WordPress's strings.
583 *
584 * @param int $status Phorum v5.2.19 numeric topic status
585 * @return string WordPress safe
586 */
587 public function callback_topic_status( $status = 0 ) {
588 switch ( $status ) {
589 case 1 :
590 $status = 'closed';
591 break;
592
593 case 0 :
594 default :
595 $status = 'publish';
596 break;
597 }
598 return $status;
599 }
600
601 /**
602 * Verify the topic/reply count.
603 *
604 * @param int $count Phorum v5.2.19 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