Skip to:
Content

bbPress.org

Changeset 4393


Ignore:
Timestamp:
11/11/2012 09:30:59 PM (9 years ago)
Author:
johnjamesjacoby
Message:

BuddyPress:

  • First pass attempt at repairing BuddyPress group forum relationships.
  • Includes new tool for looping through converted forums and updating group meta.
  • See #1669.
File:
1 edited

Legend:

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

    r4347 r4393  
    162162        10 => array( 'bbp-sync-forum-visibility',  __( 'Recalculate private and hidden forums',               'bbpress' ), 'bbp_admin_repair_forum_visibility'         ),
    163163        15 => array( 'bbp-sync-all-topics-forums', __( 'Recalculate last activity in each topic and forum',   'bbpress' ), 'bbp_admin_repair_freshness'                ),
    164         20 => array( 'bbp-forum-topics',           __( 'Count topics in each forum',                          'bbpress' ), 'bbp_admin_repair_forum_topic_count'        ),
    165         25 => array( 'bbp-forum-replies',          __( 'Count replies in each forum',                         'bbpress' ), 'bbp_admin_repair_forum_reply_count'        ),
    166         30 => array( 'bbp-topic-replies',          __( 'Count replies in each topic',                         'bbpress' ), 'bbp_admin_repair_topic_reply_count'        ),
    167         35 => array( 'bbp-topic-voices',           __( 'Count voices in each topic',                          'bbpress' ), 'bbp_admin_repair_topic_voice_count'        ),
    168         40 => array( 'bbp-topic-hidden-replies',   __( 'Count spammed & trashed replies in each topic',       'bbpress' ), 'bbp_admin_repair_topic_hidden_reply_count' ),
    169         45 => array( 'bbp-user-replies',           __( 'Count topics for each user',                          'bbpress' ), 'bbp_admin_repair_user_topic_count'         ),
    170         50 => array( 'bbp-user-topics',            __( 'Count replies for each user',                         'bbpress' ), 'bbp_admin_repair_user_reply_count'         ),
    171         55 => array( 'bbp-user-favorites',         __( 'Remove trashed topics from user favorites',           'bbpress' ), 'bbp_admin_repair_user_favorites'           ),
    172         60 => array( 'bbp-user-subscriptions',     __( 'Remove trashed topics from user subscriptions',       'bbpress' ), 'bbp_admin_repair_user_subscriptions'       ),
    173         65 => array( 'bbp-user-role-map',          __( 'Remap existing users to default forum roles',             'bbpress' ), 'bbp_admin_repair_user_roles'               )
     164        20 => array( 'bbp-group-forums',           __( 'Repair BuddyPress Group Forum relationships',         'bbpress' ), 'bbp_admin_repair_group_forum_relationship' ),
     165        25 => array( 'bbp-forum-topics',           __( 'Count topics in each forum',                          'bbpress' ), 'bbp_admin_repair_forum_topic_count'        ),
     166        30 => array( 'bbp-forum-replies',          __( 'Count replies in each forum',                         'bbpress' ), 'bbp_admin_repair_forum_reply_count'        ),
     167        35 => array( 'bbp-topic-replies',          __( 'Count replies in each topic',                         'bbpress' ), 'bbp_admin_repair_topic_reply_count'        ),
     168        40 => array( 'bbp-topic-voices',           __( 'Count voices in each topic',                          'bbpress' ), 'bbp_admin_repair_topic_voice_count'        ),
     169        45 => array( 'bbp-topic-hidden-replies',   __( 'Count spammed & trashed replies in each topic',       'bbpress' ), 'bbp_admin_repair_topic_hidden_reply_count' ),
     170        50 => array( 'bbp-user-replies',           __( 'Count topics for each user',                          'bbpress' ), 'bbp_admin_repair_user_topic_count'         ),
     171        55 => array( 'bbp-user-topics',            __( 'Count replies for each user',                         'bbpress' ), 'bbp_admin_repair_user_reply_count'         ),
     172        60 => array( 'bbp-user-favorites',         __( 'Remove trashed topics from user favorites',           'bbpress' ), 'bbp_admin_repair_user_favorites'           ),
     173        65 => array( 'bbp-user-subscriptions',     __( 'Remove trashed topics from user subscriptions',       'bbpress' ), 'bbp_admin_repair_user_subscriptions'       ),
     174        70 => array( 'bbp-user-role-map',          __( 'Remap existing users to default forum roles',         'bbpress' ), 'bbp_admin_repair_user_roles'               )
    174175    );
    175176    ksort( $repair_list );
     
    288289
    289290    return array( 0, sprintf( $statement, __( 'Complete!', 'bbpress' ) ) );
     291}
     292
     293/**
     294 * Repair group forum ID mappings after a bbPress 1.1 to bbPress 2.2 conversion
     295 *
     296 * @since bbPress (r4395)
     297 *
     298 * @global WPDB $wpdb
     299 * @return If a wp_error() occurs and no converted forums are found
     300 */
     301function bbp_admin_repair_group_forum_relationship() {
     302    global $wpdb;
     303
     304    $statement = __( 'Repairing BuddyPress group-forum relationships… %s', 'bbpress' );
     305    $count     = 0;
     306
     307    // Copy the BuddyPress filter here, incase BuddyPress is not active
     308    $prefix    = apply_filters( 'bp_core_get_table_prefix', $wpdb->base_prefix );
     309    $tablename = $prefix . 'groups_groupmeta';
     310
     311    // Get the converted forum IDs
     312    $forum_ids = $wpdb->query( "SELECT `forum`.`ID`, `forummeta`.`meta_value`
     313                                FROM `{$wpdb->posts}` AS `forum`
     314                                    LEFT JOIN `{$wpdb->postmeta}` AS `forummeta`
     315                                        ON `forum`.`ID` = `forummeta`.`post_id`
     316                                        AND `forummeta`.`meta_key` = '_bbp_forum_id'
     317                                WHERE `forum`.`post_type` = 'forum'
     318                                GROUP BY `forum`.`ID`;" );
     319
     320    // Bail if forum IDs returned an error
     321    if ( is_wp_error( $forum_ids ) || empty( $wpdb->last_result ) )
     322        return array( 2, sprintf( $statement, __( 'Failed!', 'bbpress' ) ) );
     323
     324    // Stash the last results
     325    $results = $wpdb->last_result;
     326
     327    // Update each group forum
     328    foreach ( $results as $group_forums ) {
     329
     330        // Only update if is a converted forum
     331        if ( ! isset( $group_forums->meta_value ) )
     332            continue;
     333
     334        // Attempt to update group meta
     335        $updated = $wpdb->query( "UPDATE `{$tablename}` SET `meta_value` = '{$group_forums->ID}' WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->meta_value}';" );
     336
     337        // Bump the count
     338        if ( !empty( $updated ) && ! is_wp_error( $updated ) ) {
     339            ++$count;
     340        }
     341    }
     342
     343    // Complete results
     344    $result = sprintf( __( 'Complete! %s group forums updated.', 'bbpress' ), bbp_number_format( $count ) );
     345    return array( 0, sprintf( $statement, $result ) );
    290346}
    291347
Note: See TracChangeset for help on using the changeset viewer.