Skip to:
Content

bbPress.org

Ticket #2420: PHPFusion7.php

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