Skip to:
Content

bbPress.org

Changeset 5093


Ignore:
Timestamp:
09/02/2013 05:09:31 PM (12 years ago)
Author:
johnjamesjacoby
Message:

Add reply_to capability to main converter class. Props netweb. Fixes #2400.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/admin/converter.php

    r4950 r5093  
    468468                break;
    469469
     470            // STEP 9. Convert reply_to parents.
     471            case 9 :
     472                if ( $converter->convert_reply_to_parents( $start ) ) {
     473                    update_option( '_bbp_converter_step',  $step + 1 );
     474                    update_option( '_bbp_converter_start', 0         );
     475                    if ( empty( $start ) ) {
     476                        $this->converter_output( __( 'No reply_to parents to convert', 'bbpress' ) );
     477                    }
     478                } else {
     479                    update_option( '_bbp_converter_start', $max + 1 );
     480                    $this->converter_output( sprintf( __( 'Calculating reply_to parents (%1$s - %2$s)', 'bbpress' ), $min, $max ) );
     481                }
     482
     483                break;
     484
    470485            default :
    471486                delete_option( '_bbp_converter_step'  );
     
    558573     */
    559574    private $map_topicid = array();
     575
     576    /**
     577     * @var array() Map of from old reply_to ids to new reply_to ids.  It is for optimization.
     578     */
     579    private $map_reply_to = array();
    560580
    561581    /**
     
    964984                                            $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'post', 'value_id' => $post_id, 'meta_key' => $key, 'meta_value' => $value ) );
    965985                                        }
     986
     987                                        // Replies need to save their old reply_to ID for hierarchical replies association
     988                                        if ( ( 'reply' == $to_type ) && ( '_bbp_reply_to' == $key ) ) {
     989                                            add_post_meta( $post_id, '_bbp_old_reply_to', $value );
     990                                        }
    966991                                    }
    967992                                }
     
    9771002    }
    9781003
     1004    /**
     1005     * This method conerts old forum heirarchy to new bbPress heirarchy.
     1006     */
    9791007    public function convert_forum_parents( $start ) {
    9801008
     
    9941022            $parent_id = $this->callback_forumid( $row->meta_value );
    9951023            $this->wpdb->query( 'UPDATE ' . $this->wpdb->posts . ' SET post_parent = "' . $parent_id . '" WHERE ID = "' . $row->value_id . '" LIMIT 1' );
     1024            $has_update = true;
     1025        }
     1026
     1027        return ! $has_update;
     1028    }
     1029
     1030    /**
     1031     * This method conerts old reply_to post id to new bbPress reply_to post id.
     1032     */
     1033    public function convert_reply_to_parents( $start ) {
     1034
     1035        $has_update = false;
     1036
     1037        if ( !empty( $this->sync_table ) ) {
     1038            $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_old_reply_to" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows;
     1039        } else {
     1040            $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_old_reply_to" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows;
     1041        }
     1042
     1043        update_option( '_bbp_converter_query', $query );
     1044
     1045        $reply_to_array = $this->wpdb->get_results( $query );
     1046
     1047        foreach ( (array) $reply_to_array as $row ) {
     1048            $reply_to = $this->callback_reply_to( $row->meta_value );
     1049            $this->wpdb->query( 'UPDATE ' . $this->wpdb->postmeta . ' SET meta_value = "' . $reply_to . '" WHERE meta_key = "_bbp_reply_to" AND post_id = "' . $row->value_id . '" LIMIT 1' );
    9961050            $has_update = true;
    9971051        }
     
    11841238        }
    11851239        return $this->map_topicid[$field];
     1240    }
     1241
     1242    /**
     1243     * A mini cache system to reduce database calls to reply_to post id.
     1244     *
     1245     * @param string $field
     1246     * @return string
     1247     */
     1248    private function callback_reply_to( $field ) {
     1249        if ( !isset( $this->map_reply_to[$field] ) ) {
     1250            if ( !empty( $this->sync_table ) ) {
     1251                $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_reply_to" AND meta_value = "%s" LIMIT 1', $field ) );
     1252            } else {
     1253                $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_reply_to" AND meta_value = "%s" LIMIT 1', $field ) );
     1254            }
     1255
     1256            if ( !is_null( $row ) ) {
     1257                $this->map_reply_to[$field] = $row->value_id;
     1258            } else {
     1259                $this->map_reply_to[$field] = 0;
     1260            }
     1261        }
     1262        return $this->map_reply_to[$field];
    11861263    }
    11871264
Note: See TracChangeset for help on using the changeset viewer.