Skip to:
Content

bbPress.org

Ticket #2163: Mingle.php

File Mingle.php, 12.9 KB (added by netweb, 9 years ago)

Fixed: Prevent topic content being imported as a reply

Line 
1<?php
2
3/**
4 * Implementation of Mingle Forums converter.
5 *
6 * @since bbPress (r4689)
7 */
8class Mingle extends BBP_Converter_Base {
9
10        /**
11         * Main constructor
12         *
13         * @uses Mingle::setup_globals()
14         */
15        function __construct() {
16                parent::__construct();
17                $this->setup_globals();
18        }
19
20        /**
21         * Sets up the field mappings
22         */
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' => 'forum_forums',
31                        'from_fieldname' => 'id',
32                        'to_type'        => 'forum',
33                        'to_fieldname'   => '_bbp_forum_id'
34                );
35
36                // Forum parent id (If no parent, than 0. Stored in postmeta)
37                $this->field_map[] = array(
38                        'from_tablename' => 'forum_forums',
39                        'from_fieldname' => 'parent_id',
40                        'to_type'        => 'forum',
41                        'to_fieldname'   => '_bbp_parent_id'
42                );
43
44                // Forum title.
45                $this->field_map[] = array(
46                        'from_tablename' => 'forum_forums',
47                        'from_fieldname' => 'name',
48                        'to_type'        => 'forum',
49                        'to_fieldname'   => 'post_title'
50                );
51
52                // Forum slug (Clean name to avoid confilcts)
53                $this->field_map[] = array(
54                        'from_tablename'  => 'forum_forums',
55                        'from_fieldname'  => 'name',
56                        'to_type'         => 'forum',
57                        'to_fieldname'    => 'post_name',
58                        'callback_method' => 'callback_slug'
59                );
60                // Forum description.
61                $this->field_map[] = array(
62                        'from_tablename'  => 'forum_forums',
63                        'from_fieldname'  => 'description',
64                        'to_type'         => 'forum',
65                        'to_fieldname'    => 'post_content',
66                        'callback_method' => 'callback_null'
67                );
68
69                // Forum display order (Starts from 1)
70                $this->field_map[] = array(
71                        'from_tablename' => 'forum_forums',
72                        'from_fieldname' => 'sort',
73                        'to_type'        => 'forum',
74                        'to_fieldname'   => 'menu_order'
75                );
76
77                // Forum dates.
78                $this->field_map[] = array(
79                        'to_type'        => 'forum',
80                        'to_fieldname'   => 'post_date',
81                        'default'        => date('Y-m-d H:i:s')
82                );
83                $this->field_map[] = array(
84                        'to_type'        => 'forum',
85                        'to_fieldname'   => 'post_date_gmt',
86                        'default'        => date('Y-m-d H:i:s')
87                );
88                $this->field_map[] = array(
89                        'to_type'        => 'forum',
90                        'to_fieldname'   => 'post_modified',
91                        'default'        => date('Y-m-d H:i:s')
92                );
93                $this->field_map[] = array(
94                        'to_type'        => 'forum',
95                        'to_fieldname'   => 'post_modified_gmt',
96                        'default'        => date('Y-m-d H:i:s')
97                );
98
99                /** Topic Section ******************************************************/
100
101                // Topic id (Stored in postmeta)
102                $this->field_map[] = array(
103                        'from_tablename' => 'forum_threads',
104                        'from_fieldname' => 'id',
105                        'to_type'        => 'topic',
106                        'to_fieldname'   => '_bbp_topic_id'
107                );
108
109                // Topic parent forum id (Stored in postmeta)
110                $this->field_map[] = array(
111                        'from_tablename'  => 'forum_threads',
112                        'from_fieldname'  => 'parent_id',
113                        'to_type'         => 'topic',
114                        'to_fieldname'    => '_bbp_forum_id',
115                        'callback_method' => 'callback_forumid'
116                );
117
118                // Topic author.
119                $this->field_map[] = array(
120                        'from_tablename'  => 'forum_threads',
121                        'from_fieldname'  => 'starter',
122                        'to_type'         => 'topic',
123                        'to_fieldname'    => 'post_author',
124                        'callback_method' => 'callback_userid'
125                );
126
127                // Topic content.
128                // Note: We join the forum_posts table because forum_topics do not have topic content.
129                $this->field_map[] = array(
130                        'from_tablename'  => 'forum_posts',
131                        'from_fieldname'  => 'text',
132                        'join_tablename'  => 'forum_threads',
133                        'join_type'       => 'INNER',
134                        'join_expression' => 'USING (subject)',
135                        'to_type'         => 'topic',
136                        'to_fieldname'    => 'post_content',
137                        'callback_method' => 'callback_html'
138                );
139                // Topic title.
140                $this->field_map[] = array(
141                        'from_tablename' => 'forum_threads',
142                        'from_fieldname' => 'subject',
143                        'to_type'        => 'topic',
144                        'to_fieldname'   => 'post_title'
145                );
146
147                // Topic slug (Clean name to avoid conflicts)
148                $this->field_map[] = array(
149                        'from_tablename'  => 'forum_threads',
150                        'from_fieldname'  => 'subject',
151                        'to_type'         => 'topic',
152                        'to_fieldname'    => 'post_name',
153                        'callback_method' => 'callback_slug'
154                );
155
156                // Topic parent forum id (If no parent, 0)
157                $this->field_map[] = array(
158                        'from_tablename'  => 'forum_threads',
159                        'from_fieldname'  => 'parent_id',
160                        'to_type'         => 'topic',
161                        'to_fieldname'    => 'post_parent',
162                        'callback_method' => 'callback_forumid'
163                );
164
165                // Topic dates.
166                $this->field_map[] = array(
167                        'from_tablename'  => 'forum_threads',
168                        'from_fieldname'  => 'date',
169                        'to_type'         => 'topic',
170                        'to_fieldname'    => 'post_date',
171                        'callback_method' => 'callback_datetime'
172                );
173                $this->field_map[] = array(
174                        'from_tablename'  => 'forum_threads',
175                        'from_fieldname'  => 'date',
176                        'to_type'         => 'topic',
177                        'to_fieldname'    => 'post_date_gmt',
178                        'callback_method' => 'callback_datetime'
179                );
180                $this->field_map[] = array(
181                        'from_tablename'  => 'forum_threads',
182                        'from_fieldname'  => 'last_post',
183                        'to_type'         => 'topic',
184                        'to_fieldname'    => 'post_modified',
185                        'callback_method' => 'callback_datetime'
186                );
187                $this->field_map[] = array(
188                        'from_tablename'  => 'forum_threads',
189                        'from_fieldname'  => 'last_post',
190                        'to_type'         => 'topic',
191                        'to_fieldname'    => 'post_modified_gmt',
192                        'callback_method' => 'callback_datetime'
193                );
194                $this->field_map[] = array(
195                        'from_tablename' => 'forum_threads',
196                        'from_fieldname' => 'last_post',
197                        'to_type'        => 'topic',
198                        'to_fieldname'   => '_bbp_last_active_time'
199                );
200
201                // Topic status (Open or Closed)
202                $this->field_map[] = array(
203                        'from_tablename'  => 'forum_threads',
204                        'from_fieldname'  => 'closed',
205                        'to_type'         => 'topic',
206                        'to_fieldname'    => 'post_status',
207                        'callback_method' => 'callback_topic_status'
208                );
209
210                /** Tags Section ******************************************************/
211                /*
212                /* Mingle Forums do not support topic tags
213        */
214       
215                /** Reply Section ******************************************************/
216
217                // Reply post id. Stores in postmeta.
218                $this->field_map[] = array(
219                        'from_tablename' => 'forum_posts',
220                        'from_fieldname' => 'id',
221                        'to_type'        => 'reply',
222                        'to_fieldname'   => '_bbp_post_id'
223                );
224
225                // Join the 'forum_threads' table to only import replies
226                // Hacky to say the least, but it gets the job done!
227                $this->field_map[] = array(
228                        'from_tablename'  => 'forum_threads',
229                        'from_fieldname'  => 'date',
230                        'join_tablename'  => 'forum_posts',
231                        'join_type'       => 'INNER',
232                        'join_expression' => 'ON forum_posts.parent_id = forum_threads.id',
233                        'from_expression' => 'WHERE forum_threads.subject != forum_posts.subject',
234                        'to_type'         => 'reply',
235                        'to_fieldname'    => '_bbp_last_active_time'
236                );
237
238                // Forum id (Stored in postmeta)
239                $this->field_map[] = array(
240                        'from_tablename'  => 'forum_posts',
241                        'from_fieldname'  => 'parent_id',
242                        'to_type'         => 'reply',
243                        'to_fieldname'    => '_bbp_forum_id',
244                        'callback_method' => 'callback_topicid_to_forumid'
245                );
246
247                // Topic id (Stores in postmeta)
248                $this->field_map[] = array(
249                        'from_tablename'  => 'forum_posts',
250                        'from_fieldname'  => 'id',
251                        'to_type'         => 'reply',
252                        'to_fieldname'    => '_bbp_topic_id',
253                        'callback_method' => 'callback_topicid'
254                );
255
256                // Reply author.
257                $this->field_map[] = array(
258                        'from_tablename'  => 'forum_posts',
259                        'from_fieldname'  => 'author_id',
260                        'to_type'         => 'reply',
261                        'to_fieldname'    => 'post_author',
262                        'callback_method' => 'callback_userid'
263                );
264
265                // Topic title (for reply title)
266                $this->field_map[] = array(
267                        'from_tablename' => 'forum_posts',
268                        'from_fieldname' => 'subject',
269                        'to_type'        => 'reply',
270                        'to_fieldname'   => 'post_title'
271                );
272
273                // Reply slug (Clean name to avoid conflicts)
274                $this->field_map[] = array(
275                        'from_tablename'  => 'forum_posts',
276                        'from_fieldname'  => 'subject',
277                        'to_type'         => 'reply',
278                        'to_fieldname'    => 'post_name',
279                        'callback_method' => 'callback_slug'
280                );
281
282                // Reply content.
283                $this->field_map[] = array(
284                        'from_tablename'  => 'forum_posts',
285                        'from_fieldname'  => 'text',
286                        'to_type'         => 'reply',
287                        'to_fieldname'    => 'post_content',
288                        'callback_method' => 'callback_html'
289                );
290
291                // Reply parent topic id (If no parent, than 0)
292                $this->field_map[] = array(
293                        'from_tablename'  => 'forum_posts',
294                        'from_fieldname'  => 'parent_id',
295                        'to_type'         => 'reply',
296                        'to_fieldname'    => 'post_parent',
297                        'callback_method' => 'callback_topicid'
298                );
299
300                // Reply dates.
301                $this->field_map[] = array(
302                        'from_tablename'  => 'forum_posts',
303                        'from_fieldname'  => 'date',
304                        'to_type'         => 'reply',
305                        'to_fieldname'    => 'post_date',
306                        'callback_method' => 'callback_datetime'
307                );
308                $this->field_map[] = array(
309                        'from_tablename'  => 'forum_posts',
310                        'from_fieldname'  => 'date',
311                        'to_type'         => 'reply',
312                        'to_fieldname'    => 'post_date_gmt',
313                        'callback_method' => 'callback_datetime'
314                );
315                $this->field_map[] = array(
316                        'from_tablename'  => 'forum_posts',
317                        'from_fieldname'  => 'date',
318                        'to_type'         => 'reply',
319                        'to_fieldname'    => 'post_modified',
320                        'callback_method' => 'callback_datetime'
321                );
322                $this->field_map[] = array(
323                        'from_tablename'  => 'forum_posts',
324                        'from_fieldname'  => 'date',
325                        'to_type'         => 'reply',
326                        'to_fieldname'    => 'post_modified_gmt',
327                        'callback_method' => 'callback_datetime'
328                );
329
330                /** User Section ******************************************************/
331
332                // Store old User id (Stored in usermeta)
333                $this->field_map[] = array(
334                        'from_tablename' => 'users',
335                        'from_fieldname' => 'ID',
336                        'to_type'        => 'user',
337                        'to_fieldname'   => '_bbp_user_id'
338                );
339
340                // Store old User password (Stored in usermeta)
341                $this->field_map[] = array(
342                        'from_tablename' => 'users',
343                        'from_fieldname' => 'user_pass',
344                        'to_type'        => 'user',
345                        'to_fieldname'   => '_bbp_password'
346                );
347
348                // User name.
349                $this->field_map[] = array(
350                        'from_tablename' => 'users',
351                        'from_fieldname' => 'user_login',
352                        'to_type'        => 'user',
353                        'to_fieldname'   => 'user_login'
354                );
355
356                // User nice name.
357                $this->field_map[] = array(
358                        'from_tablename' => 'users',
359                        'from_fieldname' => 'user_nicename',
360                        'to_type'        => 'user',
361                        'to_fieldname'   => 'user_nicename'
362                );
363
364                // User email.
365                $this->field_map[] = array(
366                        'from_tablename' => 'users',
367                        'from_fieldname' => 'user_email',
368                        'to_type'        => 'user',
369                        'to_fieldname'   => 'user_email'
370                );
371
372                // User homepage.
373                $this->field_map[] = array(
374                        'from_tablename' => 'users',
375                        'from_fieldname' => 'user_url',
376                        'to_type'        => 'user',
377                        'to_fieldname'   => 'user_url'
378                );
379
380                // User registered.
381                $this->field_map[] = array(
382                        'from_tablename' => 'users',
383                        'from_fieldname' => 'user_registered',
384                        'to_type'        => 'user',
385                        'to_fieldname'   => 'user_registered'
386                );
387
388                // User status.
389                $this->field_map[] = array(
390                        'from_tablename' => 'users',
391                        'from_fieldname' => 'user_status',
392                        'to_type'        => 'user',
393                        'to_fieldname'   => 'user_status'
394                );
395
396                // User display name.
397                $this->field_map[] = array(
398                        'from_tablename' => 'users',
399                        'from_fieldname' => 'display_name',
400                        'to_type'        => 'user',
401                        'to_fieldname'   => 'display_name'
402                );
403        }
404       
405        /**
406         * This method allows us to indicates what is or is not converted for each
407         * converter.
408         */
409        public function info()
410        {
411                return '';
412        }
413
414        /**
415         * This method is to save the salt and password together. That
416         * way when we authenticate it we can get it out of the database
417         * as one value. Array values are auto sanitized by wordpress.
418         */
419        public function callback_savepass( $field, $row ) {
420                return false;
421        }
422
423        /**
424         * This method is to take the pass out of the database and compare
425         * to a pass the user has typed in.
426         */
427        public function authenticate_pass( $password, $serialized_pass ) {
428                return false;
429        }
430
431        /**
432         * Translate the post status from Mingle numeric's to WordPress's strings.
433         *
434         * @param int $status Mingle v1.x numeric topic status
435         * @return string WordPress safe
436         */
437        public function callback_topic_status( $status = 0 ) {
438                switch ( $status ) {
439                        case 1 :
440                                $status = 'closed';
441                                break;
442
443                        case 0  :
444                        default :
445                                $status = 'publish';
446                                break;
447                }
448                return $status;
449        }
450
451        /**
452        * This callback processes any custom BBCodes with parser.php
453        */ 
454        protected function callback_html( $field ) { 
455                require_once( bbpress()->admin->admin_dir . 'parser.php' ); 
456                $bbcode = BBCode::getInstance(); 
457                $bbcode->enable_smileys = false; 
458                $bbcode->smiley_regex   = false; 
459                return html_entity_decode( $bbcode->Parse( $field ) ); 
460        } 
461
462}