Skip to:
Content

bbPress.org

Changeset 6759


Ignore:
Timestamp:
12/21/2017 07:02:57 PM (6 years ago)
Author:
johnjamesjacoby
Message:

Reset: DRY out the bbp_admin_reset_database() logic.

This change introduces a helper function for running queries and producing user feedback based on those results. It also introduces a Skipped result if the query is invalid or empty. Ultimately, this results in fewer repeated lines of code, fewer reused local variables, and an easier to understand code flow.

An old, leftover routine for removing forum-mod taxonomy terms was also removed, as that approach was abandoned during the 2.6 development cycle but was missed when other refactoring was done.

File:
1 edited

Legend:

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

    r6750 r6759  
    101101
    102102/**
     103 * Wrapper for determining admin reset query feedback presented to a user.
     104 *
     105 * @since 2.6.0 bbPress (r6758)
     106 *
     107 * @param array $args Array of query, message, and possible responses
     108 *
     109 * @return string
     110 */
     111function bbp_admin_reset_query_feedback( $args = array() ) {
     112    static $defaults = null;
     113
     114    // Only set defaults one time to avoid hitting the GetText API repeatedly
     115    if ( null === $defaults ) {
     116        $defaults = array(
     117            'query'     => '',
     118            'message'   => esc_html__( 'Resetting…', 'bbpress' ),
     119            'responses' => array(
     120                'success' => esc_html__( 'Success!', 'bbpress' ),
     121                'failure' => esc_html__( 'Failed!',  'bbpress' ),
     122                'skipped' => esc_html__( 'Skipped.', 'bbpress' )
     123            )
     124        );
     125    }
     126
     127    // Parse arguments
     128    $r = bbp_parse_args( $args, $defaults, 'admin_reset_query_feedback' );
     129
     130    // Success/Failure based on query error
     131    if ( ! empty( $r['query'] ) ) {
     132        $query  = bbp_db()->query( $r['query'] );
     133        $result = ! is_wp_error( $query )
     134            ? $r['responses']['success']
     135            : $r['responses']['failure'];
     136
     137    // Skip if empty
     138    } else {
     139        $result = $r['responses']['skipped'];
     140    }
     141
     142    // Return feedback
     143    return sprintf( $r['message'], $result );
     144}
     145
     146/**
    103147 * Perform a bbPress database reset.
    104148 *
     
    107151function bbp_admin_reset_database() {
    108152
    109     // Stores messages.
     153    // Define variables.
    110154    $messages = array();
    111     $failed   = esc_html__( 'Failed!',  'bbpress' );
    112     $success  = esc_html__( 'Success!', 'bbpress' );
    113 
    114     // Flush the cache; things are about to get ugly.
     155    $sql_meta = array();
     156    $bbp_db   = bbp_db();
     157
     158    // Flush the whole cache; things are about to get ugly.
    115159    wp_cache_flush();
    116160
     
    122166    $rpt = bbp_get_reply_post_type();
    123167
    124     // Define variables.
    125     $bbp_db     = bbp_db();
    126     $statement  = esc_html__( 'Deleting Posts… %s', 'bbpress' );
    127 
    128     $sql_posts  = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
    129     $sql_delete = "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')";
    130     $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    131     $messages[] = sprintf( $statement, $result );
    132 
    133     /** Post Meta *************************************************************/
    134 
     168    // Get post IDs
     169    $sql_posts = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
    135170    if ( ! empty( $sql_posts ) ) {
    136         $sql_meta = array();
     171
     172        // Meta data
    137173        foreach ( $sql_posts as $key => $value ) {
    138174            $sql_meta[] = $key;
    139175        }
    140         $statement  = esc_html__( 'Deleting Post Meta… %s', 'bbpress' );
    141         $sql_meta   = implode( "', '", $sql_meta );
    142         $sql_delete = "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')";
    143         $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    144         $messages[] = sprintf( $statement, $result );
    145     }
    146 
    147     /** Post Revisions ********************************************************/
    148 
    149     if ( ! empty( $sql_posts ) ) {
    150         $sql_meta = array();
    151         foreach ( $sql_posts as $key => $value ) {
    152             $sql_meta[] = $key;
    153         }
    154         $statement  = esc_html__( 'Deleting Post Revisions… %s', 'bbpress' );
    155         $sql_meta   = implode( "', '", $sql_meta );
    156         $sql_delete = "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'";
    157         $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    158         $messages[] = sprintf( $statement, $result );
    159     }
    160 
    161     /** Forum moderators ******************************************************/
    162 
    163     $statement  = esc_html__( 'Deleting Forum Moderators… %s', 'bbpress' );
    164     $sql_delete = "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'forum-mod'";
    165     $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    166     $messages[] = sprintf( $statement, $result );
     176        $sql_meta = implode( "', '", $sql_meta );
     177
     178        // Delete posts
     179        $messages[] = bbp_admin_reset_query_feedback( array(
     180            'query'   => "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')",
     181            'message' => esc_html__( 'Removing Forums, Topics, and Replies… %s', 'bbpress' )
     182        ) );
     183
     184        /** Post Meta *********************************************************/
     185
     186        if ( ! empty( $sql_posts ) ) {
     187            $messages[] = bbp_admin_reset_query_feedback( array(
     188                'query'   => "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')",
     189                'message' => esc_html__( 'Removing Forum, Topic, and Reply Meta Data… %s', 'bbpress' )
     190            ) );
     191        }
     192
     193        /** Post Revisions ****************************************************/
     194
     195        if ( ! empty( $sql_posts ) ) {
     196            $messages[] = bbp_admin_reset_query_feedback( array(
     197                'query'   => "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'",
     198                'message' => esc_html__( 'Removing Revision Data… %s', 'bbpress' )
     199            ) );
     200        }
     201    }
    167202
    168203    /** Topic Tags ************************************************************/
    169204
    170     $statement  = esc_html__( 'Deleting Topic Tags… %s', 'bbpress' );
    171     $sql_delete = "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag'";
    172     $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    173     $messages[] = sprintf( $statement, $result );
     205    $messages[] = bbp_admin_reset_query_feedback( array(
     206        'query'   => "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag'",
     207        'message' => esc_html__( 'Deleting Topic Tags… %s', 'bbpress' )
     208    ) );
    174209
    175210    /** User ******************************************************************/
     
    177212    // First, if we're deleting previously imported users, delete them now
    178213    if ( ! empty( $_POST['bbpress-delete-imported-users'] ) ) {
    179         $sql_users  = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
     214        $sql_users = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
     215
    180216        if ( ! empty( $sql_users ) ) {
    181217            $sql_meta = array();
     
    183219                $sql_meta[] = $key;
    184220            }
    185             $statement  = esc_html__( 'Deleting Imported Users… %s', 'bbpress' );
     221
     222            // Users
    186223            $sql_meta   = implode( "', '", $sql_meta );
    187             $sql_delete = "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')";
    188             $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    189             $messages[] = sprintf( $statement, $result );
    190             $statement  = esc_html__( 'Deleting Imported User Meta… %s', 'bbpress' );
    191             $sql_delete = "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')";
    192             $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    193             $messages[] = sprintf( $statement, $result );
     224            $messages[] = bbp_admin_reset_query_feedback( array(
     225                'query'   => "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')",
     226                'message' => esc_html__( 'Deleting Imported Users… %s', 'bbpress' )
     227            ) );
     228
     229            // User meta
     230            $messages[] = bbp_admin_reset_query_feedback( array(
     231                'query'   => "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')",
     232                'message' => esc_html__( 'Deleting Imported User Meta… %s', 'bbpress' )
     233            ) );
    194234        }
    195235    }
    196236
    197237    // Next, if we still have users that were not imported delete that meta data
    198     $statement  = esc_html__( 'Deleting User Meta… %s', 'bbpress' );
    199     $sql_delete = "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'";
    200     $result     = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
    201     $messages[] = sprintf( $statement, $result );
     238    $messages[] = bbp_admin_reset_query_feedback( array(
     239        'query'   => "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'",
     240        'message' => esc_html__( 'Deleting bbPress Specific User Meta… %s', 'bbpress' )
     241    ) );
    202242
    203243    /** Converter *************************************************************/
    204244
    205     $statement  = esc_html__( 'Deleting Conversion Table… %s', 'bbpress' );
    206245    $table_name = $bbp_db->prefix . 'bbp_converter_translator';
    207246    if ( $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name ) {
    208         $bbp_db->query( "DROP TABLE {$table_name}" );
    209         $result = $success;
    210     } else {
    211         $result = $failed;
    212     }
    213     $messages[] = sprintf( $statement, $result );
     247        $messages[] = bbp_admin_reset_query_feedback( array(
     248            'query'   => "DROP TABLE {$table_name}",
     249            'message' => esc_html__( 'Dropping Conversion Table… %s', 'bbpress' )
     250        ) );
     251    }
    214252
    215253    /** Options ***************************************************************/
    216254
    217     $statement  = esc_html__( 'Deleting Settings… %s', 'bbpress' );
    218255    bbp_delete_options();
    219     $messages[] = sprintf( $statement, $success );
     256    $messages[] = esc_html__( 'Deleting Settings… Success!', 'bbpress' );
    220257
    221258    /** Roles *****************************************************************/
    222259
    223     $statement  = esc_html__( 'Deleting Roles and Capabilities… %s', 'bbpress' );
    224260    bbp_remove_roles();
    225261    bbp_remove_caps();
    226     $messages[] = sprintf( $statement, $success );
     262    $messages[] = esc_html__( 'Removing Roles and Capabilities… Success!', 'bbpress' );
    227263
    228264    /** Output ****************************************************************/
Note: See TracChangeset for help on using the changeset viewer.