Skip to:
Content

bbPress.org

Ticket #2402: Kunena2.php

File Kunena2.php, 16.7 KB (added by netweb, 8 years ago)

Fixed User Mappings

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