PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.5.0
Forumax – AI Powered Advanced Community Forum Plugin v2.5.0
2.5.0 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 All 30 releases
bbp-core / lib / bbpress / includes / admin / converters / XenForo.php

XenForo.php in Forumax – AI Powered Advanced Community Forum Plugin 2.5.0, at lib/bbpress/includes/admin/converters/XenForo.php

851 lines 25.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 XenForo Converter
5 *
6 * @package bbPress
7 * @subpackage Converters
8 */
9
10 /**
11 * Implementation of XenForo converter.
12 *
13 * @since 2.5.0 bbPress (r5145)
14 *
15 * @link Codex Docs https://codex.bbpress.org/import-forums/xenforo
16 */
17 class XenForo 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 // Setup smiley URL & path
33 $this->bbcode_parser_properties = array(
34 'smiley_url' => false,
35 'smiley_dir' => false
36 );
37
38 /** Forum Section *****************************************************/
39
40 // Old forum id (Stored in postmeta)
41 $this->field_map[] = array(
42 'from_tablename' => 'node',
43 'from_fieldname' => 'node_id',
44 'to_type' => 'forum',
45 'to_fieldname' => '_bbp_old_forum_id'
46 );
47
48 // Forum parent id (If no parent, then 0. Stored in postmeta)
49 $this->field_map[] = array(
50 'from_tablename' => 'node',
51 'from_fieldname' => 'parent_node_id',
52 'to_type' => 'forum',
53 'to_fieldname' => '_bbp_old_forum_parent_id'
54 );
55
56 // Forum topic count (Stored in postmeta)
57 // Note: We join the 'forum' table because 'node' does not include topic counts.
58 $this->field_map[] = array(
59 'from_tablename' => 'forum',
60 'from_fieldname' => 'discussion_count',
61 'join_tablename' => 'node',
62 'join_type' => 'LEFT',
63 'join_expression' => 'USING (node_id) WHERE node.node_type_id = "Category" OR node.node_type_id = "Forum" ',
64 'to_type' => 'forum',
65 'to_fieldname' => '_bbp_topic_count'
66 );
67
68 // Forum reply count (Stored in postmeta)
69 // Note: We join the 'forum' table because 'node' does not include reply counts.
70 $this->field_map[] = array(
71 'from_tablename' => 'forum',
72 'from_fieldname' => 'message_count',
73 'join_tablename' => 'node',
74 'join_type' => 'LEFT',
75 'join_expression' => 'USING (node_id) WHERE node.node_type_id = "Category" OR node.node_type_id = "Forum" ',
76 'to_type' => 'forum',
77 'to_fieldname' => '_bbp_reply_count'
78 );
79
80 // Forum total topic count (Includes unpublished topics, Stored in postmeta)
81 // Note: We join the 'forum' table because 'node' does not include topic counts.
82 $this->field_map[] = array(
83 'from_tablename' => 'forum',
84 'from_fieldname' => 'discussion_count',
85 'join_tablename' => 'node',
86 'join_type' => 'LEFT',
87 'join_expression' => 'USING (node_id) WHERE node.node_type_id = "Category" OR node.node_type_id = "Forum" ',
88 'to_type' => 'forum',
89 'to_fieldname' => '_bbp_total_topic_count'
90 );
91
92 // Forum total reply count (Includes unpublished replies, Stored in postmeta)
93 // Note: We join the 'forum' table because 'node' does not include reply counts.
94 $this->field_map[] = array(
95 'from_tablename' => 'forum',
96 'from_fieldname' => 'message_count',
97 'join_tablename' => 'node',
98 'join_type' => 'LEFT',
99 'join_expression' => 'USING (node_id) WHERE node.node_type_id = "Category" OR node.node_type_id = "Forum" ',
100 'to_type' => 'forum',
101 'to_fieldname' => '_bbp_total_reply_count'
102 );
103
104 // Forum title.
105 $this->field_map[] = array(
106 'from_tablename' => 'node',
107 'from_fieldname' => 'title',
108 'to_type' => 'forum',
109 'to_fieldname' => 'post_title'
110 );
111
112 // Forum slug (Clean name to avoid confilcts)
113 // 'node_name' only has slug for explictly named forums
114 $this->field_map[] = array(
115 'from_tablename' => 'node',
116 'from_fieldname' => 'node_name',
117 'to_type' => 'forum',
118 'to_fieldname' => 'post_name',
119 'callback_method' => 'callback_slug'
120 );
121
122 // Forum description.
123 $this->field_map[] = array(
124 'from_tablename' => 'node',
125 'from_fieldname' => 'description',
126 'to_type' => 'forum',
127 'to_fieldname' => 'post_content',
128 'callback_method' => 'callback_null'
129 );
130
131 // Forum display order (Starts from 1)
132 $this->field_map[] = array(
133 'from_tablename' => 'node',
134 'from_fieldname' => 'display_order',
135 'to_type' => 'forum',
136 'to_fieldname' => 'menu_order'
137 );
138
139 // Forum type (Category = Category or Forum = Forum, Stored in postmeta)
140 $this->field_map[] = array(
141 'from_tablename' => 'node',
142 'from_fieldname' => 'node_type_id',
143 'to_type' => 'forum',
144 'to_fieldname' => '_bbp_forum_type',
145 'callback_method' => 'callback_forum_type'
146 );
147
148 // Forum status (Unlocked = 1 or Locked = 0, Stored in postmeta)
149 // Note: We join the 'forum' table because 'node' does not include forum status.
150 $this->field_map[] = array(
151 'from_tablename' => 'forum',
152 'from_fieldname' => 'allow_posting',
153 'join_tablename' => 'node',
154 'join_type' => 'LEFT',
155 'join_expression' => 'USING (node_id) WHERE node.node_type_id = "Category" OR node.node_type_id = "Forum" ',
156 'to_type' => 'forum',
157 'to_fieldname' => '_bbp_status',
158 'callback_method' => 'callback_forum_status'
159 );
160
161 // Forum dates.
162 $this->field_map[] = array(
163 'to_type' => 'forum',
164 'to_fieldname' => 'post_date',
165 'default' => date('Y-m-d H:i:s')
166 );
167 $this->field_map[] = array(
168 'to_type' => 'forum',
169 'to_fieldname' => 'post_date_gmt',
170 'default' => date('Y-m-d H:i:s')
171 );
172 $this->field_map[] = array(
173 'to_type' => 'forum',
174 'to_fieldname' => 'post_modified',
175 'default' => date('Y-m-d H:i:s')
176 );
177 $this->field_map[] = array(
178 'to_type' => 'forum',
179 'to_fieldname' => 'post_modified_gmt',
180 'default' => date('Y-m-d H:i:s')
181 );
182
183 /** Forum Subscriptions Section ***************************************/
184
185 // Subscribed forum ID (Stored in usermeta)
186 $this->field_map[] = array(
187 'from_tablename' => 'forum_watch',
188 'from_fieldname' => 'node_id',
189 'to_type' => 'forum_subscriptions',
190 'to_fieldname' => '_bbp_forum_subscriptions'
191 );
192
193 // Subscribed user ID (Stored in usermeta)
194 $this->field_map[] = array(
195 'from_tablename' => 'forum_watch',
196 'from_fieldname' => 'user_id',
197 'to_type' => 'forum_subscriptions',
198 'to_fieldname' => 'user_id',
199 'callback_method' => 'callback_userid'
200 );
201
202 /** Topic Section *****************************************************/
203
204 // Old topic id (Stored in postmeta)
205 $this->field_map[] = array(
206 'from_tablename' => 'thread',
207 'from_fieldname' => 'thread_id',
208 'to_type' => 'topic',
209 'to_fieldname' => '_bbp_old_topic_id'
210 );
211
212 // Topic reply count (Stored in postmeta)
213 $this->field_map[] = array(
214 'from_tablename' => 'thread',
215 'from_fieldname' => 'reply_count',
216 'to_type' => 'topic',
217 'to_fieldname' => '_bbp_reply_count',
218 'callback_method' => 'callback_topic_reply_count'
219 );
220
221 // Topic total reply count (Includes unpublished replies, Stored in postmeta)
222 $this->field_map[] = array(
223 'from_tablename' => 'thread',
224 'from_fieldname' => 'reply_count',
225 'to_type' => 'topic',
226 'to_fieldname' => '_bbp_total_reply_count',
227 'callback_method' => 'callback_topic_reply_count'
228 );
229
230 // Topic parent forum id (If no parent, then 0. Stored in postmeta)
231 $this->field_map[] = array(
232 'from_tablename' => 'thread',
233 'from_fieldname' => 'node_id',
234 'to_type' => 'topic',
235 'to_fieldname' => '_bbp_forum_id',
236 'callback_method' => 'callback_forumid'
237 );
238
239 // Topic author.
240 $this->field_map[] = array(
241 'from_tablename' => 'thread',
242 'from_fieldname' => 'user_id',
243 'to_type' => 'topic',
244 'to_fieldname' => 'post_author',
245 'callback_method' => 'callback_userid'
246 );
247
248 // Topic author name (Stored in postmeta as _bbp_anonymous_name)
249 $this->field_map[] = array(
250 'from_tablename' => 'thread',
251 'from_fieldname' => 'username',
252 'to_type' => 'topic',
253 'to_fieldname' => '_bbp_old_topic_author_name_id'
254 );
255
256 // Is the topic anonymous (Stored in postmeta)
257 $this->field_map[] = array(
258 'from_tablename' => 'thread',
259 'from_fieldname' => 'user_id',
260 'to_type' => 'topic',
261 'to_fieldname' => '_bbp_old_is_topic_anonymous_id',
262 'callback_method' => 'callback_check_anonymous'
263 );
264
265 // Topic title.
266 $this->field_map[] = array(
267 'from_tablename' => 'thread',
268 'from_fieldname' => 'title',
269 'to_type' => 'topic',
270 'to_fieldname' => 'post_title'
271 );
272
273 // Topic slug (Clean name to avoid conflicts)
274 $this->field_map[] = array(
275 'from_tablename' => 'thread',
276 'from_fieldname' => 'title',
277 'to_type' => 'topic',
278 'to_fieldname' => 'post_name',
279 'callback_method' => 'callback_slug'
280 );
281
282 // Topic content.
283 // Note: We join the 'post' table because 'thread' table does not include content.
284 $this->field_map[] = array(
285 'from_tablename' => 'post',
286 'from_fieldname' => 'message',
287 'join_tablename' => 'thread',
288 'join_type' => 'INNER',
289 'join_expression' => 'ON thread.first_post_id = post.post_id',
290 'to_type' => 'topic',
291 'to_fieldname' => 'post_content',
292 'callback_method' => 'callback_html'
293 );
294
295 // Topic status (Visible or Deleted)
296 $this->field_map[] = array(
297 'from_tablename' => 'thread',
298 'from_fieldname' => 'discussion_state',
299 'to_type' => 'topic',
300 'to_fieldname' => 'post_status',
301 'callback_method' => 'callback_status'
302 );
303
304 // Topic status (Open = 1 or Closed = 0)
305 $this->field_map[] = array(
306 'from_tablename' => 'thread',
307 'from_fieldname' => 'discussion_open',
308 'to_type' => 'topic',
309 'to_fieldname' => '_bbp_old_closed_status_id',
310 'callback_method' => 'callback_topic_status'
311 );
312
313 // Topic parent forum id (If no parent, then 0)
314 $this->field_map[] = array(
315 'from_tablename' => 'thread',
316 'from_fieldname' => 'node_id',
317 'to_type' => 'topic',
318 'to_fieldname' => 'post_parent',
319 'callback_method' => 'callback_forumid'
320 );
321
322 // Sticky status (Stored in postmeta)
323 $this->field_map[] = array(
324 'from_tablename' => 'thread',
325 'from_fieldname' => 'sticky',
326 'to_type' => 'topic',
327 'to_fieldname' => '_bbp_old_sticky_status_id',
328 'callback_method' => 'callback_sticky_status'
329 );
330
331 // Topic dates.
332 $this->field_map[] = array(
333 'from_tablename' => 'thread',
334 'from_fieldname' => 'post_date',
335 'to_type' => 'topic',
336 'to_fieldname' => 'post_date',
337 'callback_method' => 'callback_datetime'
338 );
339 $this->field_map[] = array(
340 'from_tablename' => 'thread',
341 'from_fieldname' => 'post_date',
342 'to_type' => 'topic',
343 'to_fieldname' => 'post_date_gmt',
344 'callback_method' => 'callback_datetime'
345 );
346 $this->field_map[] = array(
347 'from_tablename' => 'thread',
348 'from_fieldname' => 'last_post_date',
349 'to_type' => 'topic',
350 'to_fieldname' => 'post_modified',
351 'callback_method' => 'callback_datetime'
352 );
353 $this->field_map[] = array(
354 'from_tablename' => 'thread',
355 'from_fieldname' => 'last_post_date',
356 'to_type' => 'topic',
357 'to_fieldname' => 'post_modified_gmt',
358 'callback_method' => 'callback_datetime'
359 );
360 $this->field_map[] = array(
361 'from_tablename' => 'thread',
362 'from_fieldname' => 'last_post_date',
363 'to_type' => 'topic',
364 'to_fieldname' => '_bbp_last_active_time',
365 'callback_method' => 'callback_datetime'
366 );
367
368 /** Tags Section ******************************************************/
369
370 /**
371 * XenForo Forums do not support topic tags out of the box
372 */
373
374 /** Topic Subscriptions Section ***************************************/
375
376 // Subscribed topic ID (Stored in usermeta)
377 $this->field_map[] = array(
378 'from_tablename' => 'thread_watch',
379 'from_fieldname' => 'thread_id',
380 'to_type' => 'topic_subscriptions',
381 'to_fieldname' => '_bbp_subscriptions'
382 );
383
384 // Subscribed user ID (Stored in usermeta)
385 $this->field_map[] = array(
386 'from_tablename' => 'thread_watch',
387 'from_fieldname' => 'user_id',
388 'to_type' => 'topic_subscriptions',
389 'to_fieldname' => 'user_id',
390 'callback_method' => 'callback_userid'
391 );
392
393 /** Reply Section *****************************************************/
394
395 // Old reply id (Stored in postmeta)
396 $this->field_map[] = array(
397 'from_tablename' => 'post',
398 'from_fieldname' => 'post_id',
399 'to_type' => 'reply',
400 'to_fieldname' => '_bbp_old_reply_id'
401 );
402
403 // Join the 'thread' table to exclude topics from being imported as replies
404 $this->field_map[] = array(
405 'from_tablename' => 'thread',
406 'from_fieldname' => 'thread_id',
407 'join_tablename' => 'post',
408 'join_type' => 'LEFT',
409 'join_expression' => 'USING (thread_id) WHERE thread.first_post_id != post.post_id',
410 'to_type' => 'reply'
411 );
412
413 // Reply parent forum id (If no parent, then 0. Stored in postmeta)
414 $this->field_map[] = array(
415 'from_tablename' => 'post',
416 'from_fieldname' => 'thread_id',
417 'to_type' => 'reply',
418 'to_fieldname' => '_bbp_forum_id',
419 'callback_method' => 'callback_topicid_to_forumid'
420 );
421
422 // Reply parent topic id (If no parent, then 0. Stored in postmeta)
423 $this->field_map[] = array(
424 'from_tablename' => 'post',
425 'from_fieldname' => 'thread_id',
426 'to_type' => 'reply',
427 'to_fieldname' => '_bbp_topic_id',
428 'callback_method' => 'callback_topicid'
429 );
430
431 // Reply author.
432 $this->field_map[] = array(
433 'from_tablename' => 'post',
434 'from_fieldname' => 'user_id',
435 'to_type' => 'reply',
436 'to_fieldname' => 'post_author',
437 'callback_method' => 'callback_userid'
438 );
439
440 // Reply status (Visible or Deleted)
441 $this->field_map[] = array(
442 'from_tablename' => 'post',
443 'from_fieldname' => 'message_state',
444 'to_type' => 'reply',
445 'to_fieldname' => 'post_status',
446 'callback_method' => 'callback_status'
447 );
448
449 // Reply author name (Stored in postmeta as _bbp_anonymous_name)
450 $this->field_map[] = array(
451 'from_tablename' => 'post',
452 'from_fieldname' => 'username',
453 'to_type' => 'reply',
454 'to_fieldname' => '_bbp_old_reply_author_name_id'
455 );
456
457 // Is the reply anonymous (Stored in postmeta)
458 $this->field_map[] = array(
459 'from_tablename' => 'post',
460 'from_fieldname' => 'user_id',
461 'to_type' => 'reply',
462 'to_fieldname' => '_bbp_old_is_reply_anonymous_id',
463 'callback_method' => 'callback_check_anonymous'
464 );
465
466 // Reply content.
467 $this->field_map[] = array(
468 'from_tablename' => 'post',
469 'from_fieldname' => 'message',
470 'to_type' => 'reply',
471 'to_fieldname' => 'post_content',
472 'callback_method' => 'callback_html'
473 );
474
475 // Reply parent topic id (If no parent, then 0)
476 $this->field_map[] = array(
477 'from_tablename' => 'post',
478 'from_fieldname' => 'thread_id',
479 'to_type' => 'reply',
480 'to_fieldname' => 'post_parent',
481 'callback_method' => 'callback_topicid'
482 );
483
484 // Reply dates.
485 $this->field_map[] = array(
486 'from_tablename' => 'post',
487 'from_fieldname' => 'post_date',
488 'to_type' => 'reply',
489 'to_fieldname' => 'post_date',
490 'callback_method' => 'callback_datetime'
491 );
492 $this->field_map[] = array(
493 'from_tablename' => 'post',
494 'from_fieldname' => 'post_date',
495 'to_type' => 'reply',
496 'to_fieldname' => 'post_date_gmt',
497 'callback_method' => 'callback_datetime'
498 );
499 $this->field_map[] = array(
500 'from_tablename' => 'post',
501 'from_fieldname' => 'post_date',
502 'to_type' => 'reply',
503 'to_fieldname' => 'post_modified',
504 'callback_method' => 'callback_datetime'
505 );
506 $this->field_map[] = array(
507 'from_tablename' => 'post',
508 'from_fieldname' => 'post_date',
509 'to_type' => 'reply',
510 'to_fieldname' => 'post_modified_gmt',
511 'callback_method' => 'callback_datetime'
512 );
513
514 /** User Section ******************************************************/
515
516 // Store old user id (Stored in usermeta)
517 $this->field_map[] = array(
518 'from_tablename' => 'user',
519 'from_fieldname' => 'user_id',
520 'to_type' => 'user',
521 'to_fieldname' => '_bbp_old_user_id'
522 );
523
524 /* // User password.
525 // Note: We join the 'user_authenticate' table because 'user' does not include password.
526 $this->field_map[] = array(
527 'from_tablename' => 'user_authenticate',
528 'from_fieldname' => 'data',
529 'join_tablename' => 'user',
530 'join_type' => 'LEFT',
531 'join_expression' => 'USING (user_id)',
532 'to_type' => 'user',
533 'to_fieldname' => '_bbp_converter_password'
534 );
535
536 // Store old User password (Stored in usermeta serialized with salt)
537 $this->field_map[] = array(
538 'from_tablename' => 'user',
539 'from_fieldname' => 'password',
540 'to_type' => 'user',
541 'to_fieldname' => '_bbp_password',
542 'callback_method' => 'callback_savepass'
543 );
544
545 // Store old User Salt (This is only used for the SELECT row info for the above password save)
546 $this->field_map[] = array(
547 'from_tablename' => 'user',
548 'from_fieldname' => 'salt',
549 'to_type' => 'user',
550 'to_fieldname' => ''
551 );
552 */
553 // User password verify class (Stored in usermeta for verifying password)
554 $this->field_map[] = array(
555 'to_type' => 'user',
556 'to_fieldname' => '_bbp_class',
557 'default' => 'XenForo'
558 );
559
560 // User name.
561 $this->field_map[] = array(
562 'from_tablename' => 'user',
563 'from_fieldname' => 'username',
564 'to_type' => 'user',
565 'to_fieldname' => 'user_login'
566 );
567
568 // User email.
569 $this->field_map[] = array(
570 'from_tablename' => 'user',
571 'from_fieldname' => 'email',
572 'to_type' => 'user',
573 'to_fieldname' => 'user_email'
574 );
575
576 // User homepage.
577 // Note: We join the 'user_profile' table because 'user' does not include user homepage.
578 $this->field_map[] = array(
579 'from_tablename' => 'user_profile',
580 'from_fieldname' => 'homepage',
581 'join_tablename' => 'user',
582 'join_type' => 'LEFT',
583 'join_expression' => 'USING (user_id)',
584 'to_type' => 'user',
585 'to_fieldname' => 'user_url'
586 );
587
588 // User registered.
589 $this->field_map[] = array(
590 'from_tablename' => 'user',
591 'from_fieldname' => 'register_date',
592 'to_type' => 'user',
593 'to_fieldname' => 'user_registered',
594 'callback_method' => 'callback_datetime'
595 );
596
597 // User display name.
598 $this->field_map[] = array(
599 'from_tablename' => 'user',
600 'from_fieldname' => 'username',
601 'to_type' => 'user',
602 'to_fieldname' => 'display_name'
603 );
604
605 // Store Custom Title (Stored in usermeta)
606 $this->field_map[] = array(
607 'from_tablename' => 'user',
608 'from_fieldname' => 'custom_title',
609 'to_type' => 'user',
610 'to_fieldname' => '_bbp_xenforo_user_custom_title'
611 );
612
613 // Store Status (Stored in usermeta)
614 // Note: We join the 'user_profile' table because 'user' does not include user custom XenForo field user status.
615 $this->field_map[] = array(
616 'from_tablename' => 'user_profile',
617 'from_fieldname' => 'status',
618 'join_tablename' => 'user',
619 'join_type' => 'LEFT',
620 'join_expression' => 'USING (user_id)',
621 'to_type' => 'user',
622 'to_fieldname' => '_bbp_xenforo_user_status'
623 );
624
625 // Store Signature (Stored in usermeta)
626 // Note: We join the 'user_profile' table because 'user' does not include user custom XenForo field user signature.
627 $this->field_map[] = array(
628 'from_tablename' => 'user_profile',
629 'from_fieldname' => 'signature',
630 'join_tablename' => 'user',
631 'join_type' => 'LEFT',
632 'join_expression' => 'USING (user_id)',
633 'to_fieldname' => '_bbp_xenforo_user_sig',
634 'to_type' => 'user',
635 'callback_method' => 'callback_html'
636 );
637
638 // Store Location (Stored in usermeta)
639 // Note: We join the 'user_profile' table because 'user' does not include user custom XenForo field user location.
640 $this->field_map[] = array(
641 'from_tablename' => 'user_profile',
642 'from_fieldname' => 'location',
643 'join_tablename' => 'user',
644 'join_type' => 'LEFT',
645 'join_expression' => 'USING (user_id)',
646 'to_type' => 'user',
647 'to_fieldname' => '_bbp_xenforo_user_location'
648 );
649
650 // Store Occupation (Stored in usermeta)
651 // Note: We join the 'user_profile' table because 'user' does not include user custom XenForo field user occupation.
652 $this->field_map[] = array(
653 'from_tablename' => 'user_profile',
654 'from_fieldname' => 'occupation',
655 'join_tablename' => 'user',
656 'join_type' => 'LEFT',
657 'join_expression' => 'USING (user_id)',
658 'to_type' => 'user',
659 'to_fieldname' => '_bbp_xenforo_user_occupation'
660 );
661
662 // Store About (Stored in usermeta)
663 // Note: We join the 'user_profile' table because 'user' does not include user custom XenForo field user about.
664 $this->field_map[] = array(
665 'from_tablename' => 'user_profile',
666 'from_fieldname' => 'about',
667 'join_tablename' => 'user',
668 'join_type' => 'LEFT',
669 'join_expression' => 'USING (user_id)',
670 'to_type' => 'user',
671 'to_fieldname' => '_bbp_xenforo_user_about',
672 'callback_method' => 'callback_html'
673 );
674 }
675
676 /**
677 * This method allows us to indicates what is or is not converted for each
678 * converter.
679 */
680 public function info() {
681 return '';
682 }
683
684 /**
685 * This method is to save the salt and password together. That
686 * way when we authenticate it we can get it out of the database
687 * as one value. Array values are auto sanitized by WordPress.
688 */
689 public function translate_savepass( $field, $row ) {
690 $pass_array = array( 'hash' => $field, 'salt' => $row['salt'] );
691 return $pass_array;
692 }
693
694 /**
695 * This method is to take the pass out of the database and compare
696 * to a pass the user has typed in.
697 */
698 public function authenticate_pass( $password, $serialized_pass ) {
699 $pass_array = unserialize( $serialized_pass );
700 switch( $pass_array['hashFunc'] ) {
701 case 'sha256':
702 return ( $pass_array['hash'] == hash( 'sha256', hash( 'sha256', $password ) . $pass_array['salt'] ) );
703 case 'sha1':
704 return ( $pass_array['hash'] == sha1( sha1( $password ) . $pass_array['salt'] ) );
705 }
706 }
707
708 /**
709 * Translate the forum type from XenForo Capitalised case to WordPress's non-capatilise case strings.
710 *
711 * @param int $status XenForo numeric forum type
712 * @return string WordPress safe
713 */
714 public function callback_forum_type( $status = 1 ) {
715 switch ( $status ) {
716 case 'Category' :
717 $status = 'category';
718 break;
719
720 case 'Forum' :
721 default :
722 $status = 'forum';
723 break;
724 }
725 return $status;
726 }
727
728 /**
729 * Translate the forum status from XenForo numerics to WordPress's strings.
730 *
731 * @param int $status XenForo numeric forum status
732 * @return string WordPress safe
733 */
734 public function callback_forum_status( $status = 1 ) {
735 switch ( $status ) {
736 case 0 :
737 $status = 'closed';
738 break;
739
740 case 1 :
741 default :
742 $status = 'open';
743 break;
744 }
745 return $status;
746 }
747
748 /**
749 * Translate the post status from XenForo to WordPress' strings.
750 *
751 * @param int $status XenForo post status
752 * @return string WordPress safe
753 */
754 public function callback_status( $status = 1 ) {
755 switch ( $status ) {
756 case 'deleted' :
757 $status = 'pending'; // bbp_get_pending_status_id()
758 break;
759
760 case 'visible' :
761 default :
762 $status = 'publish'; // bbp_get_public_status_id()
763 break;
764 }
765 return $status;
766 }
767
768 /**
769 * Translate the topic status from XenForo numerics to WordPress's strings.
770 *
771 * @param int $status XenForo numeric topic status
772 * @return string WordPress safe
773 */
774 public function callback_topic_status( $status = 1 ) {
775 switch ( $status ) {
776 case 0 :
777 $status = 'closed';
778 break;
779
780 case 1 :
781 default :
782 $status = 'publish';
783 break;
784 }
785 return $status;
786 }
787
788 /**
789 * Translate the topic sticky status type from XenForo numerics to WordPress's strings.
790 *
791 * @param int $status XenForo numeric forum type
792 * @return string WordPress safe
793 */
794 public function callback_sticky_status( $status = 0 ) {
795 switch ( $status ) {
796 case 1 :
797 $status = 'sticky'; // XenForo Sticky 'sticky = 1'
798 break;
799
800 case 0 :
801 default :
802 $status = 'normal'; // XenForo Normal Topic 'sticky = 0'
803 break;
804 }
805 return $status;
806 }
807
808 /**
809 * Verify the topic reply count.
810 *
811 * @param int $count XenForo reply count
812 * @return string WordPress safe
813 */
814 public function callback_topic_reply_count( $count = 1 ) {
815 $count = absint( (int) $count - 1 );
816 return $count;
817 }
818
819 /**
820 * This callback processes any custom parser.php attributes and custom code with preg_replace
821 */
822 protected function callback_html( $field ) {
823
824 // Strips Xenforo custom HTML first from $field before parsing $field to parser.php
825 $xenforo_markup = $field;
826 $xenforo_markup = html_entity_decode( $xenforo_markup );
827
828 // Replace '[QUOTE]' with '<blockquote>'
829 $xenforo_markup = preg_replace( '/\[QUOTE\]/', '<blockquote>', $xenforo_markup );
830 // Replace '[/QUOTE]' with '</blockquote>'
831 $xenforo_markup = preg_replace( '/\[\/QUOTE\]/', '</blockquote>', $xenforo_markup );
832 // Replace '[QUOTE=User Name($1)]' with '<em>@$1 wrote:</em><blockquote>"
833 $xenforo_markup = preg_replace( '/\[quote=\"(.*?)\,\spost\:\s(.*?)\,\s\member\:\s(.*?)\"\](.*?)\[\/quote\]/', '<em>@$1 wrote:</em><blockquote>', $xenforo_markup );
834 // Replace '[/quote]' with '</blockquote>'
835 $xenforo_markup = preg_replace( '/\[\/quote\]/', '</blockquote>', $xenforo_markup );
836
837 // Replace '[media=youtube]$1[/media]' with '$1"
838 $xenforo_markup = preg_replace( '/\[media\=youtube\](.*?)\[\/media\]/', 'https://youtu.be/$1', $xenforo_markup );
839 // Replace '[media=dailymotion]$1[/media]' with '$1"
840 $xenforo_markup = preg_replace( '/\[media\=dailymotion\](.*?)\[\/media\]/', 'https://www.dailymotion.com/video/$1', $xenforo_markup );
841 // Replace '[media=vimeo]$1[/media]' with '$1"
842 $xenforo_markup = preg_replace( '/\[media\=vimeo\](.*?)\[\/media\]/', 'https://vimeo.com/$1', $xenforo_markup );
843
844 // Now that Xenforo custom HTML has been stripped put the cleaned HTML back in $field
845 $field = $xenforo_markup;
846
847 // Parse out any bbCodes in $field with the BBCode 'parser.php'
848 return parent::callback_html( $field );
849 }
850 }
851