273 lines
9.3 KiB
PHP
273 lines
9.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* bbPress Admin Tools Reset
|
|
*
|
|
* @package bbPress
|
|
* @subpackage Administration
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Admin reset page
|
|
*
|
|
* @since 2.0.0 bbPress (r2613)
|
|
*
|
|
*/
|
|
function bbp_admin_reset_page() {
|
|
?>
|
|
|
|
<div class="wrap">
|
|
<h1 class="wp-heading-inline"><?php esc_html_e( 'Forum Tools', 'bbpress' ); ?></h1>
|
|
<hr class="wp-header-end">
|
|
<h2 class="nav-tab-wrapper"><?php bbp_tools_admin_tabs( 'bbp-reset' ); ?></h2>
|
|
<p><?php esc_html_e( 'Revert your forums back to a brand new installation, as if bbPress were never installed. This process cannot be undone.', 'bbpress' ); ?></p>
|
|
|
|
<form class="settings" method="post" action="">
|
|
<table class="form-table">
|
|
<tbody>
|
|
<tr valign="top">
|
|
<th scope="row"><?php esc_html_e( 'The following data will be removed:', 'bbpress' ) ?></th>
|
|
<td>
|
|
<?php esc_html_e( 'All Forums', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'All Topics', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'All Replies', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'All Topic Tags', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'All Meta Data', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'Forum Settings', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'Forum Activity', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'Forum User Roles', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'Forum Moderators', 'bbpress' ); ?><br />
|
|
<?php esc_html_e( 'Importer Helper Data', 'bbpress' ); ?><br />
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<th scope="row"><?php esc_html_e( 'Delete imported users?', 'bbpress' ); ?></th>
|
|
<td>
|
|
<fieldset>
|
|
<legend class="screen-reader-text"><span><?php esc_html_e( "Say it ain't so!", 'bbpress' ); ?></span></legend>
|
|
<label><input type="checkbox" class="checkbox" name="bbpress-delete-imported-users" id="bbpress-delete-imported-users" value="1" /> <?php esc_html_e( 'This option will delete all previously imported users, and cannot be undone.', 'bbpress' ); ?></label>
|
|
<p class="description"><?php esc_html_e( 'Proceeding without this checked removes the meta-data necessary to delete these users later.', 'bbpress' ); ?></p>
|
|
</fieldset>
|
|
</td>
|
|
</tr>
|
|
<tr valign="top">
|
|
<th scope="row"><?php esc_html_e( 'Do you really want to do this?', 'bbpress' ); ?></th>
|
|
<td>
|
|
<fieldset>
|
|
<legend class="screen-reader-text"><span><?php esc_html_e( "Say it ain't so!", 'bbpress' ); ?></span></legend>
|
|
<label><input type="checkbox" class="checkbox" name="bbpress-are-you-sure" id="bbpress-are-you-sure" value="1" /> <?php esc_html_e( 'This process cannot be undone.', 'bbpress' ); ?></label>
|
|
<p class="description"><?php esc_html_e( 'Backup your database before proceeding.', 'bbpress' ); ?></p>
|
|
</fieldset>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<fieldset class="submit">
|
|
<input class="button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Reset bbPress', 'bbpress' ); ?>" />
|
|
<?php wp_nonce_field( 'bbpress-reset' ); ?>
|
|
</fieldset>
|
|
</form>
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Handle a bbPress admin area reset request.
|
|
*
|
|
* @since 2.0.0 bbPress (r2613)
|
|
*/
|
|
function bbp_admin_reset_handler() {
|
|
|
|
// Bail if not resetting.
|
|
if ( ! bbp_is_post_request() || empty( $_POST['bbpress-are-you-sure'] ) ) {
|
|
return;
|
|
}
|
|
|
|
// Only keymasters can proceed.
|
|
if ( ! bbp_is_user_keymaster() ) {
|
|
return;
|
|
}
|
|
|
|
// Bail if not referred from resetter
|
|
check_admin_referer( 'bbpress-reset' );
|
|
|
|
// Reset all of bbPress
|
|
bbp_admin_reset_database();
|
|
}
|
|
|
|
/**
|
|
* Wrapper for determining admin reset query feedback presented to a user.
|
|
*
|
|
* @since 2.6.0 bbPress (r6758)
|
|
*
|
|
* @param array $args Array of query, message, and possible responses
|
|
*
|
|
* @return string
|
|
*/
|
|
function bbp_admin_reset_query_feedback( $args = array() ) {
|
|
static $defaults = null;
|
|
|
|
// Only set defaults one time to avoid hitting the GetText API repeatedly
|
|
if ( null === $defaults ) {
|
|
$defaults = array(
|
|
'query' => '',
|
|
'message' => esc_html__( 'Resetting…', 'bbpress' ),
|
|
'responses' => array(
|
|
'success' => esc_html__( 'Success!', 'bbpress' ),
|
|
'failure' => esc_html__( 'Failed!', 'bbpress' ),
|
|
'skipped' => esc_html__( 'Skipped.', 'bbpress' )
|
|
)
|
|
);
|
|
}
|
|
|
|
// Parse arguments
|
|
$r = bbp_parse_args( $args, $defaults, 'admin_reset_query_feedback' );
|
|
|
|
// Success/Failure based on query error
|
|
if ( ! empty( $r['query'] ) ) {
|
|
$query = bbp_db()->query( $r['query'] );
|
|
$result = ! is_wp_error( $query )
|
|
? $r['responses']['success']
|
|
: $r['responses']['failure'];
|
|
|
|
// Skip if empty
|
|
} else {
|
|
$result = $r['responses']['skipped'];
|
|
}
|
|
|
|
// Return feedback
|
|
return sprintf( $r['message'], $result );
|
|
}
|
|
|
|
/**
|
|
* Perform a bbPress database reset.
|
|
*
|
|
* @since 2.6.0 bbPress
|
|
*/
|
|
function bbp_admin_reset_database() {
|
|
|
|
// Define variables.
|
|
$messages = array();
|
|
$sql_meta = array();
|
|
$bbp_db = bbp_db();
|
|
|
|
// Flush the whole cache; things are about to get ugly.
|
|
wp_cache_flush();
|
|
|
|
/** Posts *****************************************************************/
|
|
|
|
// Post types and status.
|
|
$fpt = bbp_get_forum_post_type();
|
|
$tpt = bbp_get_topic_post_type();
|
|
$rpt = bbp_get_reply_post_type();
|
|
|
|
// Get post IDs
|
|
$sql_posts = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
|
|
if ( ! empty( $sql_posts ) ) {
|
|
|
|
// Meta data
|
|
foreach ( $sql_posts as $key => $value ) {
|
|
$sql_meta[] = $key;
|
|
}
|
|
$sql_meta = implode( "', '", $sql_meta );
|
|
|
|
// Delete posts
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')",
|
|
'message' => esc_html__( 'Removing Forums, Topics, and Replies… %s', 'bbpress' )
|
|
) );
|
|
|
|
/** Post Meta *********************************************************/
|
|
|
|
if ( ! empty( $sql_posts ) ) {
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')",
|
|
'message' => esc_html__( 'Removing Forum, Topic, and Reply Meta Data… %s', 'bbpress' )
|
|
) );
|
|
}
|
|
|
|
/** Post Revisions ****************************************************/
|
|
|
|
if ( ! empty( $sql_posts ) ) {
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'",
|
|
'message' => esc_html__( 'Removing Revision Data… %s', 'bbpress' )
|
|
) );
|
|
}
|
|
}
|
|
|
|
/** Topic Tags ************************************************************/
|
|
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'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'",
|
|
'message' => esc_html__( 'Deleting Topic Tags… %s', 'bbpress' )
|
|
) );
|
|
|
|
/** User ******************************************************************/
|
|
|
|
// First, if we're deleting previously imported users, delete them now
|
|
if ( ! empty( $_POST['bbpress-delete-imported-users'] ) ) {
|
|
$sql_users = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
|
|
|
|
if ( ! empty( $sql_users ) ) {
|
|
$sql_meta = array();
|
|
foreach ( $sql_users as $key => $value ) {
|
|
$sql_meta[] = $key;
|
|
}
|
|
|
|
// Users
|
|
$sql_meta = implode( "', '", $sql_meta );
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')",
|
|
'message' => esc_html__( 'Deleting Imported Users… %s', 'bbpress' )
|
|
) );
|
|
|
|
// User meta
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')",
|
|
'message' => esc_html__( 'Deleting Imported User Meta… %s', 'bbpress' )
|
|
) );
|
|
}
|
|
}
|
|
|
|
// Next, if we still have users that were not imported delete that meta data
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'",
|
|
'message' => esc_html__( 'Deleting bbPress Specific User Meta… %s', 'bbpress' )
|
|
) );
|
|
|
|
/** Converter *************************************************************/
|
|
|
|
$table_name = $bbp_db->prefix . 'bbp_converter_translator';
|
|
if ( $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name ) {
|
|
$messages[] = bbp_admin_reset_query_feedback( array(
|
|
'query' => "DROP TABLE {$table_name}",
|
|
'message' => esc_html__( 'Dropping Conversion Table… %s', 'bbpress' )
|
|
) );
|
|
}
|
|
|
|
/** Options ***************************************************************/
|
|
|
|
bbp_delete_options();
|
|
$messages[] = esc_html__( 'Deleting Settings… Success!', 'bbpress' );
|
|
|
|
/** Roles *****************************************************************/
|
|
|
|
bbp_remove_roles();
|
|
bbp_remove_caps();
|
|
$messages[] = esc_html__( 'Removing Roles and Capabilities… Success!', 'bbpress' );
|
|
|
|
/** Output ****************************************************************/
|
|
|
|
if ( count( $messages ) ) {
|
|
foreach ( $messages as $message ) {
|
|
bbp_admin_tools_feedback( $message );
|
|
}
|
|
}
|
|
}
|