Skip to:
Content

bbPress.org

Ticket #1991: 1991.diff

File 1991.diff, 14.6 KB (added by netweb, 9 years ago)
  • includes/admin/converters/vBulletin.php

    diff --git a/includes/admin/converters/vBulletin.php b/includes/admin/converters/vBulletin.php
    index 03d6a42..a0afcb3 100644
    a b  
    11<?php
    22
    33/**
    4  * vBulletin Converter
     4 * Implementation of vBulletin v4.x Converter.
    55 *
    6  * @since bbPress (r)
     6 * @since bbPress (r4724)
     7 * @link Codex Docs http://codex.bbpress.org/import-forums/vbulletin
    78 */
    89class vBulletin extends BBP_Converter_Base {
    910
    class vBulletin extends BBP_Converter_Base { 
    3233                        'to_fieldname'   => '_bbp_forum_id'
    3334                );
    3435
    35                 // Forum parent id (If no parent, than 0. Stored in postmeta)
     36                // Forum parent id (If no parent, then 0. Stored in postmeta)
    3637                $this->field_map[] = array(
    3738                        'from_tablename' => 'forum',
    3839                        'from_fieldname' => 'parentid',
    class vBulletin extends BBP_Converter_Base { 
    4041                        'to_fieldname'   => '_bbp_forum_parent_id'
    4142                );
    4243
     44                // Forum topic count (Stored in postmeta)
     45                $this->field_map[] = array(
     46                        'from_tablename' => 'forum',
     47                        'from_fieldname' => 'threadcount',
     48                        'to_type'        => 'forum',
     49                        'to_fieldname'   => '_bbp_topic_count'
     50                );
     51
     52                // Forum reply count (Stored in postmeta)
     53                $this->field_map[] = array(
     54                        'from_tablename' => 'forum',
     55                        'from_fieldname' => 'replycount',
     56                        'to_type'        => 'forum',
     57                        'to_fieldname'   => '_bbp_reply_count'
     58                );
     59
    4360                // Forum title.
    4461                $this->field_map[] = array(
    4562                        'from_tablename' => 'forum',
    class vBulletin extends BBP_Converter_Base { 
    7491                        'to_fieldname'   => 'menu_order'
    7592                );
    7693
    77                 // Forum date update.
     94                // Forum dates.
    7895                $this->field_map[] = array(
    7996                        'to_type'      => 'forum',
    8097                        'to_fieldname' => 'post_date',
    class vBulletin extends BBP_Converter_Base { 
    106123                        'to_fieldname'   => '_bbp_topic_id'
    107124                );
    108125
    109                 // Forum id (Stored in postmeta)
     126                // Topic parent forum id (If no parent, then 0. Stored in postmeta)
    110127                $this->field_map[] = array(
    111128                        'from_tablename'  => 'thread',
    112129                        'from_fieldname'  => 'forumid',
    class vBulletin extends BBP_Converter_Base { 
    115132                        'callback_method' => 'callback_forumid'
    116133                );
    117134
     135                // Topic reply count (Stored in postmeta)
     136                $this->field_map[] = array(
     137                        'from_tablename'  => 'thread',
     138                        'from_fieldname'  => 'replycount',
     139                        'to_type'         => 'topic',
     140                        'to_fieldname'    => '_bbp_reply_count',
     141                        'callback_method' => 'callback_topic_reply_count'
     142                );
     143
    118144                // Topic author.
    119145                $this->field_map[] = array(
    120146                        'from_tablename'  => 'thread',
    class vBulletin extends BBP_Converter_Base { 
    141167                        'callback_method' => 'callback_slug'
    142168                );
    143169
    144                 // Forum id (If no parent, than 0)
     170                // Topic parent forum id (If no parent, then 0)
    145171                $this->field_map[] = array(
    146172                        'from_tablename'  => 'thread',
    147173                        'from_fieldname'  => 'forumid',
    class vBulletin extends BBP_Converter_Base { 
    163189                        'callback_method' => 'callback_html'
    164190                );
    165191
    166                 // Topic date update.
     192                // Topic dates.
    167193                $this->field_map[] = array(
    168194                        'from_tablename'  => 'thread',
    169195                        'from_fieldname'  => 'dateline',
    class vBulletin extends BBP_Converter_Base { 
    192218                        'to_fieldname'    => 'post_modified_gmt',
    193219                        'callback_method' => 'callback_datetime'
    194220                );
     221                $this->field_map[] = array(
     222                        'from_tablename' => 'thread',
     223                        'from_fieldname' => 'lastpost',
     224                        'to_type'        => 'topic',
     225                        'to_fieldname'   => '_bbp_last_active_time',
     226                        'callback_method' => 'callback_datetime'
     227                );
     228
     229                // Topic status (Open or Closed)
     230                $this->field_map[] = array(
     231                        'from_tablename'  => 'thread',
     232                        'from_fieldname'  => 'open',
     233                        'to_type'         => 'topic',
     234                        'to_fieldname'    => 'post_status',
     235                        'callback_method' => 'callback_topic_status'
     236                );
    195237
    196238                /** Tags Section ******************************************************/
    197239
    class vBulletin extends BBP_Converter_Base { 
    204246                        'callback_method' => 'callback_topicid'
    205247                );
    206248
    207                 // Tags text.
     249                // Taxonomy ID.
     250                $this->field_map[] = array(
     251                        'from_tablename'  => 'tagcontent',
     252                        'from_fieldname'  => 'tagid',
     253                        'to_type'         => 'tags',
     254                        'to_fieldname'    => 'taxonomy'
     255                );
     256
     257                // Term text.
    208258                $this->field_map[] = array(
    209259                        'from_tablename'  => 'tag',
    210260                        'from_fieldname'  => 'tagtext',
    class vBulletin extends BBP_Converter_Base { 
    215265                        'to_fieldname'    => 'name'
    216266                );
    217267
    218                 /** Post Section ******************************************************/
     268                /** Reply Section *****************************************************/
    219269
    220                 // Post id (Stores in postmeta)
     270                // Reply id (Stored in postmeta)
    221271                $this->field_map[] = array(
    222272                        'from_tablename'  => 'post',
    223273                        'from_fieldname'  => 'postid',
    224                         'from_expression' => 'WHERE post.parentid != 0',
    225274                        'to_type'         => 'reply',
    226275                        'to_fieldname'    => '_bbp_post_id'
    227276                );
    228277
    229                 // Forum id (Stores in postmeta)
     278                // Reply parent forum id (If no parent, then 0. Stored in postmeta)
    230279                $this->field_map[] = array(
    231                         'from_tablename'  => 'post',
    232                         'from_fieldname'  => 'threadid',
     280                        'from_tablename'  => 'thread',
     281                        'from_fieldname'  => 'forumid',
     282                        'join_tablename'  => 'post',
     283                        'join_type'       => 'INNER',
     284                        'join_expression' => 'USING (threadid) WHERE post.parentid != 0',
    233285                        'to_type'         => 'reply',
    234286                        'to_fieldname'    => '_bbp_forum_id',
    235287                        'callback_method' => 'callback_topicid_to_forumid'
    236288                );
    237289
    238                 // Topic id (Stores in postmeta)
     290                // Reply parent topic id (If no parent, then 0. Stored in postmeta)
    239291                $this->field_map[] = array(
    240292                        'from_tablename'  => 'post',
    241293                        'from_fieldname'  => 'threadid',
    class vBulletin extends BBP_Converter_Base { 
    244296                        'callback_method' => 'callback_topicid'
    245297                );
    246298
    247                 // Author ip.
     299                // Reply author ip (Stored in postmeta)
    248300                $this->field_map[] = array(
    249301                        'from_tablename' => 'post',
    250302                        'from_fieldname' => 'ipaddress',
    class vBulletin extends BBP_Converter_Base { 
    252304                        'to_fieldname'   => '_bbp_author_ip'
    253305                );
    254306
    255                 // Post author.
     307                // Reply author.
    256308                $this->field_map[] = array(
    257309                        'from_tablename'  => 'post',
    258310                        'from_fieldname'  => 'userid',
    class vBulletin extends BBP_Converter_Base { 
    261313                        'callback_method' => 'callback_userid'
    262314                );
    263315
    264                 // Topic title.
     316                // Reply title.
     317                // Note: We join the thread table because post table does not include topic title.
    265318                $this->field_map[] = array(
    266                         'from_tablename' => 'post',
    267                         'from_fieldname' => 'title',
    268                         'to_type'        => 'reply',
    269                         'to_fieldname'   => 'post_title'
    270                 );
    271 
    272                 // Topic slug (Clean name)
    273                 $this->field_map[] = array(
    274                         'from_tablename'  => 'post',
     319                        'from_tablename'  => 'thread',
    275320                        'from_fieldname'  => 'title',
     321                        'join_tablename'  => 'post',
     322                        'join_type'       => 'INNER',
     323                        'join_expression' => 'USING (threadid) WHERE post.parentid != 0',
    276324                        'to_type'         => 'reply',
    277                         'to_fieldname'    => 'post_name',
    278                         'callback_method' => 'callback_slug'
     325                        'to_fieldname'    => 'post_title',
     326                        'callback_method' => 'callback_reply_title'
    279327                );
    280328
    281                 // Post content.
     329                // Reply content.
    282330                $this->field_map[] = array(
    283331                        'from_tablename'  => 'post',
    284332                        'from_fieldname'  => 'pagetext',
    class vBulletin extends BBP_Converter_Base { 
    287335                        'callback_method' => 'callback_html'
    288336                );
    289337
    290                 // Topic id (If no parent, than 0)
     338                // Reply parent topic id (If no parent, then 0)
    291339                $this->field_map[] = array(
    292340                        'from_tablename'  => 'post',
    293341                        'from_fieldname'  => 'threadid',
    class vBulletin extends BBP_Converter_Base { 
    296344                        'callback_method' => 'callback_topicid'
    297345                );
    298346
    299                 // Topic date update.
     347                // Reply dates.
    300348                $this->field_map[] = array(
    301349                        'from_tablename'  => 'post',
    302350                        'from_fieldname'  => 'dateline',
    class vBulletin extends BBP_Converter_Base { 
    328376
    329377                /** User Section ******************************************************/
    330378
    331                 // Store old User id (Stores in usermeta)
     379                // Store old User id (Stored in usermeta)
    332380                $this->field_map[] = array(
    333381                        'from_tablename' => 'user',
    334382                        'from_fieldname' => 'userid',
    class vBulletin extends BBP_Converter_Base { 
    336384                        'to_fieldname'   => '_bbp_user_id'
    337385                );
    338386
    339                 // Store old User password (Stores in usermeta serialized with salt)
     387                // Store old User password (Stored in usermeta serialized with salt)
    340388                $this->field_map[] = array(
    341389                        'from_tablename'  => 'user',
    342390                        'from_fieldname'  => 'password',
    class vBulletin extends BBP_Converter_Base { 
    345393                        'callback_method' => 'callback_savepass'
    346394                );
    347395
    348                 // Store old User Salt (This is only used for the SELECT row info for
    349                 // the above password save)
     396                // Store old User Salt (This is only used for the SELECT row info for the above password save)
    350397                $this->field_map[] = array(
    351398                        'from_tablename' => 'user',
    352399                        'from_fieldname' => 'salt',
    class vBulletin extends BBP_Converter_Base { 
    354401                        'to_fieldname'   => ''
    355402                );
    356403
    357                 // User password verify class (Stores in usermeta for verifying password)
     404                // User password verify class (Stored in usermeta for verifying password)
    358405                $this->field_map[] = array(
    359406                        'to_type'      => 'user',
    360407                        'to_fieldname' => '_bbp_class',
    class vBulletin extends BBP_Converter_Base { 
    369416                        'to_fieldname'   => 'user_login'
    370417                );
    371418
    372                 // User nice name.
    373                 $this->field_map[] = array(
    374                         'from_tablename' => 'user',
    375                         'from_fieldname' => 'user_nicename',
    376                         'to_type'        => 'user',
    377                         'to_fieldname'   => 'user_nicename'
    378                 );
    379 
    380419                // User email.
    381420                $this->field_map[] = array(
    382421                        'from_tablename' => 'user',
    class vBulletin extends BBP_Converter_Base { 
    402441                        'callback_method' => 'callback_datetime'
    403442                );
    404443
    405                 // User aim.
     444                // User AIM (Stored in usermeta)
    406445                $this->field_map[] = array(
    407446                        'from_tablename' => 'user',
    408447                        'from_fieldname' => 'aim',
    class vBulletin extends BBP_Converter_Base { 
    410449                        'to_fieldname'   => 'aim'
    411450                );
    412451
    413                 // User yahoo.
     452                // User Yahoo (Stored in usermeta)
    414453                $this->field_map[] = array(
    415454                        'from_tablename' => 'user',
    416455                        'from_fieldname' => 'yahoo',
    417456                        'to_type'        => 'user',
    418457                        'to_fieldname'   => 'yim'
    419458                );
     459
     460                // User ICQ (Stored in usermeta)
     461                $this->field_map[] = array(
     462                        'from_tablename' => 'user',
     463                        'from_fieldname' => 'icq',
     464                        'to_type'        => 'user',
     465                        'to_fieldname'   => '_bbp_vbulletin_user_icq'
     466                );
     467
     468                // User MSN (Stored in usermeta)
     469                $this->field_map[] = array(
     470                        'from_tablename' => 'user',
     471                        'from_fieldname' => 'msn',
     472                        'to_type'        => 'user',
     473                        'to_fieldname'   => '_bbp_vbulletin_user_msn'
     474                );
     475
     476                // User Skype (Stored in usermeta)
     477                $this->field_map[] = array(
     478                        'from_tablename' => 'user',
     479                        'from_fieldname' => 'skype',
     480                        'to_type'        => 'user',
     481                        'to_fieldname'   => '_bbp_vbulletin_user_skype'
     482                );
    420483        }
    421484
    422485        /**
    class vBulletin extends BBP_Converter_Base { 
    427490                return '';
    428491        }
    429492
     493
    430494        /**
    431495         * This method is to save the salt and password together.  That
    432496         * way when we authenticate it we can get it out of the database
    class vBulletin extends BBP_Converter_Base { 
    440504        /**
    441505         * This method is to take the pass out of the database and compare
    442506         * to a pass the user has typed in.
     507         *
     508         * vBulletin passwords do not work, change to use code from below plugin
     509         * @link http://wordpress.org/extend/plugins/vb-user-copy/
     510         * @link http://plugins.trac.wordpress.org/browser/vb-user-copy/trunk/vb_user_copy.php
    443511         */
    444512        public function authenticate_pass( $password, $serialized_pass ) {
    445513                $pass_array = unserialize( $serialized_pass );
    446514                return ( $pass_array['hash'] == md5( md5( $password ) . $pass_array['salt'] ) );
    447515        }
     516
     517        /**
     518         * Verify the topic reply count.
     519         *
     520         * @param int $count vBulletin v4.x reply count
     521         * @return string WordPress safe
     522         */
     523        public function callback_topic_reply_count( $count = 1 ) {
     524                $count = absint( (int) $count - 1 );
     525                return $count;
     526        }
     527
     528        /**
     529         * Set the reply title
     530         *
     531         * @param string $title vBulletin v4.x topic title of this reply
     532         * @return string Prefixed topic title, or empty string
     533         */
     534        public function callback_reply_title( $title = '' ) {
     535                $title = !empty( $title ) ? __( 'Re: ', 'bbpress' ) . html_entity_decode( $title ) : '';
     536                return $title;
     537        }
     538
     539        /**
     540         * Translate the post status from vBulletin numeric's to WordPress's strings.
     541         *
     542         * @param int $status vBulletin v4.x numeric topic status
     543         * @return string WordPress safe
     544         */
     545        public function callback_topic_status( $status = 1 ) {
     546                switch ( $status ) {
     547                        case 0 :
     548                                $status = 'closed';
     549                                break;
     550
     551                        case 1  :
     552                        default :
     553                                $status = 'publish';
     554                                break;
     555                }
     556                return $status;
     557        }
     558
     559        /**
     560         * This callback processes any custom parser.php attributes and custom code with preg_replace
     561         */
     562        protected function callback_html( $field ) {
     563
     564                // Strips vBulletin custom HTML first from $field before parsing $field to parser.php
     565                $vbulletin_markup = $field;
     566                $vbulletin_markup = html_entity_decode ( $vbulletin_markup );
     567
     568                // Replace '[QUOTE]' with '<blockquote>'
     569                $vbulletin_markup = preg_replace ( '/\[QUOTE\]/'         , '<blockquote>'                           , $vbulletin_markup );
     570                // Replace '[QUOTE=User Name($1);PostID($2)]' with '<em>@$1 $2 wrote:</em><blockquote>"
     571                $vbulletin_markup = preg_replace ( '/\[QUOTE=(.*?);(.*?)\]/' , '<em>@$1 $2 wrote:</em><blockquote>' , $vbulletin_markup );
     572                // Replace '[/QUOTE]' with '</blockquote>'
     573                $vbulletin_markup = preg_replace ( '/\[\/QUOTE\]/'       , '</blockquote>'                          , $vbulletin_markup );
     574                // Replace '[MENTION=###($1)]User Name($2)[/MENTION]' with '@$2"
     575                $vbulletin_markup = preg_replace ( '/\[MENTION=(.*?)\](.*?)\[\/MENTION\]/' , '@$2'                  , $vbulletin_markup );
     576
     577                // Replace '[video=youtube;$1]$2[/video]' with '$2"
     578                $vbulletin_markup = preg_replace ( '/\[video\=youtube;(.*?)\](.*?)\[\/video\]/' , '$2'                  , $vbulletin_markup );
     579
     580                // Now that vBulletin custom HTML has been stripped put the cleaned HTML back in $field
     581                $field = $vbulletin_markup;
     582
     583                // Parse out any bbCodes in $field with the BBCode 'parser.php'
     584                require_once( bbpress()->admin->admin_dir . 'parser.php' );
     585                $bbcode = BBCode::getInstance();
     586                $bbcode->enable_smileys = false;
     587                $bbcode->smiley_regex   = false;
     588                return html_entity_decode( $bbcode->Parse( $field ) );
     589
     590        }
    448591}