Skip to:
Content

bbPress.org

Ticket #2375: Drupal7.php

File Drupal7.php, 16.2 KB (added by netweb, 7 years ago)

Drupal7.php replaces Drupal.php

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