Skip to:
Content

bbPress.org

Ticket #2420: PHPFusion.php

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