AnsPress_Admin_Ajax::ap_uninstall_data()
Description #
Uninstall actions.
Source #
File: admin/ajax.php
public static function ap_uninstall_data() {
check_ajax_referer( 'ap_uninstall_data', '__nonce' );
$data_type = ap_sanitize_unslash( 'data_type', 'r' );
$valid_data = array( 'qa', 'answers', 'options', 'userdata', 'terms', 'tables' );
global $wpdb;
// Only allow super admin to delete data.
if ( is_super_admin() && in_array( $data_type, $valid_data, true ) ) {
$done = 0;
if ( 'qa' === $data_type ) {
$count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_type='question' OR post_type='answer'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
$ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='question' OR post_type='answer' LIMIT 30" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
foreach ( (array) $ids as $id ) {
if ( false !== wp_delete_post( $id, true ) ) {
++$done;
}
}
wp_send_json(
array(
'done' => (int) $done,
'total' => (int) $count,
)
);
} elseif ( 'answers' === $data_type ) {
$count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_type='answer'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
$ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='answer' LIMIT 30" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
foreach ( (array) $ids as $id ) {
if ( false !== wp_delete_post( $id, true ) ) {
++$done;
}
}
wp_send_json(
array(
'done' => (int) $done,
'total' => (int) $count,
)
);
} elseif ( 'userdata' === $data_type ) {
$wp_filesystem = new WP_Filesystem_Direct( false );
$upload_dir = wp_upload_dir();
$avatar_dir = $upload_dir['basedir'] . '/ap_avatars';
if ( $wp_filesystem->is_dir( $avatar_dir ) ) {
$wp_filesystem->rmdir( $avatar_dir, true );
}
// Remove user roles.
AP_Roles::remove_roles();
// Delete vote meta.
$wpdb->delete( $wpdb->usermeta, [ 'meta_key' => '__up_vote_casted' ], array( '%s' ) ); // @codingStandardsIgnoreLine
$wpdb->delete( $wpdb->usermeta, [ 'meta_key' => '__down_vote_casted' ], array( '%s' ) ); // @codingStandardsIgnoreLine
wp_send_json(
array(
'done' => 1,
'total' => 0,
)
);
} elseif ( 'options' === $data_type ) {
delete_option( 'anspress_opt' );
delete_option( 'anspress_reputation_events' );
delete_option( 'anspress_addons' );
wp_send_json(
array(
'done' => 1,
'total' => 0,
)
);
} elseif ( 'terms' === $data_type ) {
$question_taxo = (array) get_object_taxonomies( 'question', 'names' );
$answer_taxo = (array) get_object_taxonomies( 'answer', 'names' );
$taxos = $question_taxo + $answer_taxo;
foreach ( (array) $taxos as $tax ) {
$terms = get_terms(
array(
'taxonomy' => $tax,
'hide_empty' => false,
'fields' => 'ids',
)
);
foreach ( (array) $terms as $t ) {
wp_delete_term( $t, $tax );
}
}
wp_send_json(
array(
'done' => 1,
'total' => 0,
)
);
} elseif ( 'tables' === $data_type ) {
$tables = array( $wpdb->ap_qameta, $wpdb->ap_votes, $wpdb->ap_views, $wpdb->ap_reputations, $wpdb->ap_subscribers, $wpdb->prefix . 'ap_notifications' );
foreach ( $tables as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS {$table}" ); // phpcs:ignore WordPress.DB
}
wp_send_json(
array(
'done' => 1,
'total' => 0,
)
);
}
}
// Send empty JSON if nothing done.
wp_send_json( array() );
}
Expand full source code Collapse full source code View on GitHub: admin/ajax.php:134
Add your comment