Skip to:
Content

bbPress.org

Ticket #2375: Drupal.php

File Drupal.php, 14.0 KB (added by netweb, 8 years ago)

Drupal 2nd Pass

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