PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/trave494/misipress.com/wp-content/plugins/wp-bulk-delete/includes/
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
IP: 209.182.202.254
Choose File :

Url:
Dir : //home/trave494/misipress.com/wp-content/plugins/wp-bulk-delete/includes/class-delete-api.php

<?php
/**
 * Scripts
 *
 * @package     WP_Bulk_Delete
 * @subpackage  Delerte API
 * @copyright   Copyright (c) 2016, Dharmesh Patel
 * @since       1.0
 */

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * WPBD_Delete_API class
 *
 * @since 1.0.0
 */
class WPBD_Delete_API {

	/**
	 * Get things going
	 *
	 * @since 1.0.0
	 */
	public function __construct() { /* */ }

	/**
	 * Get posts Ids.
	 *
	 * @access public
	 * @since 1.0
	 * @param array $data Delete posts form data.
	 * @return array | Posts Id.
	 */
	public function get_delete_posts_ids( $data = array() ) {
        if( wpbd_is_pro() && class_exists('WPBD_Delete_API_Pro', false) ){
            $wpbdpro = new WPBD_Delete_API_Pro();
            return $wpbdpro->get_delete_posts_ids( $data );
        }
		global $wpdb;
		if( ! empty( $data['delete_post_type'] ) &&  ! empty( $data['delete_post_status'] ) ){

            $post_types = isset( $data['delete_post_type'] ) ? $data['delete_post_type'] : array();
            if( ! is_array( $post_types ) ){
                $post_types = array( $post_types ); 
            }
            $post_types = array_map('esc_sql', $post_types );

            $post_status = isset( $data['delete_post_status'] ) ? array_map('esc_sql', $data['delete_post_status'] ) : array();
            $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
            $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
            $delete_authors = isset( $data['delete_authors'] ) ?  array_map( 'intval', $data['delete_authors'] ) : array();
            $delete_type = isset( $data['delete_type'] ) ? $data['delete_type'] : 'trash';
            $limit_post = !empty( $data['limit_post'] ) ? absint( $data['limit_post'] ) : '10000';
            $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
            $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
            if( $date_type === 'older_than') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'within_last') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            }

            $mdelete_start_date = isset( $data['mdelete_start_date'] ) ? esc_sql( $data['mdelete_start_date'] ) : '';
            $mdelete_end_date = isset( $data['mdelete_end_date'] ) ? esc_sql( $data['mdelete_end_date'] ) : '';
            $mdate_type = isset( $data['mdate_type'] ) ? esc_sql( $data['mdate_type'] ) : 'mcustom_date';
            $minput_days = isset( $data['minput_days'] ) ? esc_sql( $data['minput_days'] ) : '';
            if( $mdate_type === 'molder_than') {
                $mdelete_start_date = $mdelete_end_date = '';
                if( $minput_days === "0" || $minput_days > 0){
                    $mdelete_end_date = date('Y-m-d', strtotime("-{$minput_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $mdate_type === 'mwithin_last') {
                $mdelete_start_date = $mdelete_end_date = '';
                if( $minput_days === "0" || $minput_days > 0){
                    $mdelete_start_date = date('Y-m-d', strtotime("-{$minput_days} days", strtotime(current_time('Y-m-d'))));
                }
            }

            // BY Taxonomy.
            $post_taxonomy =  isset( $data['post_taxonomy'] ) ?  esc_sql( $data['post_taxonomy'] ) : '';
            $post_taxonomy_terms =  isset( $data['post_taxonomy_terms'] ) ? array_map( 'intval', $data['post_taxonomy_terms'] ) : array();
            $d_selected_category =  isset( $data['delete_selected_category'] ) ? esc_sql( $data['delete_selected_category'] )  : '';            

            if( empty( $post_types ) || empty( $post_status ) ){
                return array();
            }

            // Query Generation.
            $query = "SELECT DISTINCT $wpdb->posts.ID FROM $wpdb->posts ";

            if( $post_taxonomy != '' && ! empty( $post_taxonomy_terms ) ) {
                
                $query .= " LEFT JOIN $wpdb->term_relationships ON( $wpdb->posts.ID = $wpdb->term_relationships.object_id )";
                $query .= " LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";
                $query .= " LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)";
            }
            
            $query .= " WHERE $wpdb->posts.post_type IN ( '" . implode( "', '", $post_types ) . "' )";  

            if( $post_taxonomy != '' && ! empty( $post_taxonomy_terms ) ) {
                $query .= " AND ( $wpdb->terms.term_id IN ( " . implode( ", ", $post_taxonomy_terms ). " )";
                $query .= " AND $wpdb->term_taxonomy.taxonomy  = '{$post_taxonomy}' )";
            }

            if( $post_taxonomy != '' && ! empty( $post_taxonomy_terms ) && !empty( $d_selected_category ) ){
                $query .= "AND $wpdb->posts.ID NOT IN (
                    SELECT $wpdb->posts.ID
                    FROM $wpdb->posts
                    LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
                    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
                    LEFT JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id )
                    WHERE $wpdb->term_taxonomy.taxonomy = '{$post_taxonomy}' AND $wpdb->terms.term_id NOT IN ( " . implode( ", ", $post_taxonomy_terms ). " ) )";
            }

            if( !empty( $post_status ) ){
                $query .= " AND $wpdb->posts.post_status IN ( '" .  implode( "', '", $post_status ) . "' )";
            }
            if( $delete_start_date != ''){
                $query .= " AND $wpdb->posts.post_date >= '{$delete_start_date} 00:00:00'";
            }
            if( $delete_end_date != ''){
                $query .= " AND $wpdb->posts.post_date <= '{$delete_end_date} 23:59:59'";
            }
            if( $mdelete_start_date != ''){
                $query .= " AND $wpdb->posts.post_modified >= '{$mdelete_start_date} 00:00:00'";
            }
            if( $mdelete_end_date != ''){
                $query .= " AND $wpdb->posts.post_modified <= '{$mdelete_end_date} 23:59:59'";
            }

            if( !empty( $delete_authors ) ){
                $query .= " AND $wpdb->posts.post_author IN ( " . implode( ",", $delete_authors ). " )";
            }

            if( is_numeric( $limit_post ) ){
                $query .= " LIMIT " . $limit_post;
            }
            
            $posts = $wpdb->get_col( $query );
            return $posts;

        }else{
            return array();
        }
	}

    /**
	 * Do Delete operation on posts.
	 *
	 * @access public
	 * @since 1.0
	 * @param array $data Posts Id.
	 * @return array | deleted posts count.
	 */
	public function do_delete_posts( $post_ids = array(), $force_delete = false, $custom_query = null ) {
		global $wpdb;
        $post_delete_count = 0;

        set_time_limit(0);
        $xt_memory_limit = (int)str_replace( 'M', '',ini_get('memory_limit' ) );
        if( $xt_memory_limit < 512 ){
            ini_set('memory_limit', '512M');
        }

        if( ! empty( $post_ids ) && count( $post_ids ) > 0 ) {
            if( $custom_query == 'custom_query' ){
                $all_posts = implode( ",",$post_ids );
                $wpdb->query( "DELETE p,pt,pm FROM " . $wpdb->posts . " p LEFT JOIN " . $wpdb->term_relationships . " pt ON pt.object_id = p.ID LEFT JOIN " . $wpdb->postmeta . " pm ON pm.post_id = p.ID WHERE p.ID IN ({$all_posts})" );
            }else{
                foreach ($post_ids as $post_id ) {
                    if( $force_delete === false ){
                        wp_trash_post( $post_id );
                    }else{
                        wp_delete_post( $post_id, true );
                    }
                }
            }
            $post_delete_count = count( $post_ids );

		}
		return $post_delete_count;
	}

    /**
     * Get Post Count by Posttype
     *
     * @access public
     * @since 1.0
     * @param array $post_type Post type.
     * @return int | posts count.
     */
    public function get_post_count( $counttype = '' ) {
        global $wpdb;

        $count = 0;

        switch( $counttype ) {
            case 'revision':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_type = %s", 'revision' ) );
                break;
            case 'auto_drafts':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status = %s", 'auto-draft' ) );
                break;
            case 'trash':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status = %s", 'trash' ) );
                break;
            case 'orphan_postmeta':
                $count = $wpdb->get_var( "SELECT COUNT(meta_id) FROM $wpdb->postmeta WHERE post_id NOT IN (SELECT ID FROM $wpdb->posts)" );
                break;
            case 'orphan_commentmeta':
                $count = $wpdb->get_var( "SELECT COUNT(meta_id) FROM $wpdb->commentmeta WHERE comment_id NOT IN (SELECT comment_ID FROM $wpdb->comments)" );
                break;
            case 'orphan_usermeta':
                $count = $wpdb->get_var( "SELECT COUNT(umeta_id) FROM $wpdb->usermeta WHERE user_id NOT IN (SELECT ID FROM $wpdb->users)" );
                break;
            case 'orphan_termmeta':
                $count = $wpdb->get_var( "SELECT COUNT(meta_id) FROM $wpdb->termmeta WHERE term_id NOT IN (SELECT term_id FROM $wpdb->terms)" );
                break;

            case 'duplicated_postmeta':
                $query = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT(meta_id) AS count FROM $wpdb->postmeta GROUP BY post_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( is_array( $query ) ) {
                    $count = array_sum( array_map( 'intval', $query ) );
                }
                break;
            case 'duplicated_commentmeta':
                $query = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT(meta_id) AS count FROM $wpdb->commentmeta GROUP BY comment_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( is_array( $query ) ) {
                    $count = array_sum( array_map( 'intval', $query ) );
                }
                break;
            case 'duplicated_usermeta':
                $query = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT(umeta_id) AS count FROM $wpdb->usermeta GROUP BY user_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( is_array( $query ) ) {
                    $count = array_sum( array_map( 'intval', $query ) );
                }
                break;
            case 'duplicated_termmeta':
                $query = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT(meta_id) AS count FROM $wpdb->termmeta GROUP BY term_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( is_array( $query ) ) {
                    $count = array_sum( array_map( 'intval', $query ) );
                }
                break;

        }
        return $count;
    }

    /**
     * Get Comment Count by status
     *
     * @access public
     * @since 1.0
     * @param array $status status
     * @return int | posts count.
     */
    public function get_comment_count( $status = '' ) {
        global $wpdb;

        $count = 0;

        switch( $status ) {
            
            case 'pending':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = %s", '0' ) );
                break;
            
            case 'spam':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = %s", 'spam' ) );
                break;
            
            case 'trash':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE (comment_approved = %s OR comment_approved = %s)", 'trash', 'post-trashed' ) );
                break;

            case 'approved':
                $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = %s", '1' ) );
                break;
            
            default: 
                $count = 0;
                break;
        }

        return $count;
    }


    /**
     * Run Cleanup
     *
     * @access public
     * @since 1.0
     * @param array $cleanuptype Cleanup type.
     * @return string | message.
     */
    public function run_cleanup( $cleanuptype = '' ){
        global $wpdb;
        $message = '';

        switch( $cleanuptype ) {
            case 'revision':
                $posts = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = %s", 'revision' ) );
                if( $posts ) {
                    foreach ( $posts as $id ) {
                        wp_delete_post_revision( intval( $id ) );
                    }

                    $message = sprintf( __( '%s Revisions Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $posts ) ) );
                }
                break;
            case 'auto_drafts':
                $posts = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_status = %s", 'auto-draft' ) );
                if( $posts ) {
                    foreach ( $posts as $id ) {
                        wp_delete_post( intval( $id ), true );
                    }

                    $message = sprintf( __( '%s Auto Drafts Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $posts ) ) );
                }
                break;
            case 'trash':
                $posts = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_status = %s", 'trash' ) );
                if( $posts ) {
                    foreach ( $posts as $id ) {
                        wp_delete_post( $id, true );
                    }

                    $message = sprintf( __( '%s Trashed Posts Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $posts ) ) );
                }
                break;

            case 'orphan_postmeta':
                $query = $wpdb->get_results( "SELECT post_id, meta_key FROM $wpdb->postmeta WHERE post_id NOT IN (SELECT ID FROM $wpdb->posts)" );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $post_id = intval( $meta->post_id );
                        if( $post_id === 0 ) {
                            $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", $post_id, $meta->meta_key ) );
                        } else {
                            delete_post_meta( $post_id, $meta->meta_key );
                        }
                    }

                    $message = sprintf( __( '%s Orphaned Post Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'orphan_commentmeta':
                $query = $wpdb->get_results( "SELECT comment_id, meta_key FROM $wpdb->commentmeta WHERE comment_id NOT IN (SELECT comment_ID FROM $wpdb->comments)" );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $comment_id = intval( $meta->comment_id );
                        if( $comment_id === 0 ) {
                            $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->commentmeta WHERE comment_id = %d AND meta_key = %s", $comment_id, $meta->meta_key ) );
                        } else {
                            delete_comment_meta( $comment_id, $meta->meta_key );
                        }
                    }

                    $message = sprintf( __( '%s Orphaned Comment Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'orphan_usermeta':
                $query = $wpdb->get_results( "SELECT user_id, meta_key FROM $wpdb->usermeta WHERE user_id NOT IN (SELECT ID FROM $wpdb->users)" );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $user_id = intval( $meta->user_id );
                        if( $user_id === 0 ) {
                            $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta->meta_key ) );
                        } else {
                            delete_user_meta( $user_id, $meta->meta_key );
                        }
                    }

                    $message = sprintf( __( '%s Orphaned User Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'orphan_termmeta':
                $query = $wpdb->get_results( "SELECT term_id, meta_key FROM $wpdb->termmeta WHERE term_id NOT IN (SELECT term_id FROM $wpdb->terms)" );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $term_id = intval( $meta->term_id );
                        if( $term_id === 0 ) {
                            $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->termmeta WHERE term_id = %d AND meta_key = %s", $term_id, $meta->meta_key ) );
                        } else {
                            delete_term_meta( $term_id, $meta->meta_key );
                        }
                    }

                    $message = sprintf( __( '%s Orphaned Term Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;

            case 'duplicated_postmeta':
                $query = $wpdb->get_results( $wpdb->prepare( "SELECT GROUP_CONCAT(meta_id ORDER BY meta_id DESC) AS ids, post_id, COUNT(*) AS count FROM $wpdb->postmeta GROUP BY post_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $ids = array_map( 'intval', explode( ',', $meta->ids ) );
                        array_pop( $ids );
                        $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_id IN (" . implode( ',', $ids ) . ") AND post_id = %d", intval( $meta->post_id ) ) );
                    }

                    $message = sprintf( __( '%s Duplicated Post Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'duplicated_commentmeta':
                $query = $wpdb->get_results( $wpdb->prepare( "SELECT GROUP_CONCAT(meta_id ORDER BY meta_id DESC) AS ids, comment_id, COUNT(*) AS count FROM $wpdb->commentmeta GROUP BY comment_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $ids = array_map( 'intval', explode( ',', $meta->ids ) );
                        array_pop( $ids );
                        $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->commentmeta WHERE meta_id IN (" . implode( ',', $ids ) . ") AND comment_id = %d", intval( $meta->comment_id ) ) );
                    }

                    $message = sprintf( __( '%s Duplicated Comment Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'duplicated_usermeta':
                $query = $wpdb->get_results( $wpdb->prepare( "SELECT GROUP_CONCAT(umeta_id ORDER BY umeta_id DESC) AS ids, user_id, COUNT(*) AS count FROM $wpdb->usermeta GROUP BY user_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $ids = array_map( 'intval', explode( ',', $meta->ids ) );
                        array_pop( $ids );
                        $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE umeta_id IN (" . implode( ',', $ids ) . ") AND user_id = %d", intval( $meta->user_id ) ) );
                    }

                    $message = sprintf( __( '%s Duplicated User Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;
            case 'duplicated_termmeta':
                $query = $wpdb->get_results( $wpdb->prepare( "SELECT GROUP_CONCAT(meta_id ORDER BY meta_id DESC) AS ids, term_id, COUNT(*) AS count FROM $wpdb->termmeta GROUP BY term_id, meta_key, meta_value HAVING count > %d", 1 ) );
                if( $query ) {
                    foreach ( $query as $meta ) {
                        $ids = array_map( 'intval', explode( ',', $meta->ids ) );
                        array_pop( $ids );
                        $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->termmeta WHERE meta_id IN (" . implode( ',', $ids ) . ") AND term_id = %d", intval( $meta->term_id ) ) );
                    }

                    $message = sprintf( __( '%s Duplicated Term Meta Cleaned up', 'wp-bulk-delete' ), number_format_i18n( sizeof( $query ) ) );
                }
                break;

        }
        return $message;
    }

    /**
     * Get Users Ids.
     *
     * @access public
     * @since 1.0
     * @param array $data Delete User form data.
     * @return array | Users Id.
     */
    public function get_delete_user_ids( $data = array() ){
        global $wpdb;

        if( empty( $data['delete_user_roles'] ) && ( $data['user_meta_key'] == '' || $data['user_meta_value'] == '' ) ){
            return array();
        }
        if( empty( $data['delete_user_roles'] ) && $data['user_email'] == '' ){
            return array();
        }
        $delete_user_roles = isset( $data['delete_user_roles'] ) ? $data['delete_user_roles'] : array();
        $delete_user_roles = array_map('esc_sql', $delete_user_roles );
        $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
        $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
        $limit_user = isset( $data['limit_user'] ) ? absint( $data['limit_user'] ) : '';
        $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
        $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
        if( $date_type === 'older_than') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        } else if( $date_type === 'within_last') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        } else if( $date_type === 'onemonth' || $date_type === 'sixmonths' || $date_type === 'oneyear' || $date_type === 'twoyear' ) {
            $delete_end_date = date( 'Y-m-d', strtotime( current_time('Y-m-d') ) );
            if( $date_type === 'onemonth' ){
                $delete_start_date = date('Y-m-d', strtotime("-30 days", strtotime(current_time('Y-m-d'))));
            }elseif( $date_type === 'sixmonths' ){
                $delete_start_date = date('Y-m-d', strtotime("-6 months", strtotime(current_time('Y-m-d'))));
            }elseif( $date_type === 'oneyear' ){
                $delete_start_date = date('Y-m-d', strtotime("-1 year", strtotime(current_time('Y-m-d'))));
            }elseif( $date_type === 'twoyear' ){
                $delete_start_date = date('Y-m-d', strtotime("-2 years", strtotime(current_time('Y-m-d'))));
            }
        }

        // By Usermeta.
        $user_meta_key =  isset( $data['user_meta_key'] ) ? esc_sql( $data['user_meta_key'] ) : '';
        $user_meta_value =  isset( $data['user_meta_value'] ) ? esc_sql( $data['user_meta_value'] ) : '';
        $user_meta_compare =  isset( $data['user_meta_compare'] ) ? $data['user_meta_compare'] : 'equal_to_str';
            
        // By Useremail.
        $user_email =  isset( $data['user_email'] ) ? esc_sql( $data['user_email'] ) : '';
        $user_email_compare =  isset( $data['user_email_compare'] ) ? $data['user_email_compare'] : 'equal_to_str';

        // Query Generation.
        $query = "SELECT DISTINCT $wpdb->users.ID FROM $wpdb->users ";

        if ( $user_meta_key != '' && $user_meta_compare != '' && $user_meta_value != '' ) {
            $query .= " INNER JOIN $wpdb->usermeta ON( $wpdb->users.ID = $wpdb->usermeta.user_id )";
        }

        if( !empty( $delete_user_roles ) ){
            $query .= " INNER JOIN $wpdb->usermeta AS mt_roles ON ( $wpdb->users.ID = mt_roles.user_id )";
        }

        $query .= ' WHERE 1=1 ';

        if ( $user_meta_key != '' && $user_meta_compare != '' && $user_meta_value != '' ) {
            $query .= " AND ( $wpdb->usermeta.meta_key = '" . $user_meta_key. "'";
            switch ( $user_meta_compare ) {
                case 'equal_to_str':
                    $query .= " AND $wpdb->usermeta.meta_value = '{$user_meta_value}' )"; 
                    break;

                case 'notequal_to_str':
                    $query .= " AND $wpdb->usermeta.meta_value != '{$user_meta_value}' )"; 
                    break;

                case 'like_str':
                    $query .= " AND $wpdb->usermeta.meta_value LIKE '%{$user_meta_value}%' )"; 
                    break;

                case 'notlike_str':
                    $query .= " AND $wpdb->usermeta.meta_value NOT LIKE '%{$user_meta_value}%' )"; 
                    break;

                case 'equal_to_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) = '{$user_meta_value}' )"; 
                    break;

                case 'notequal_to_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) != '{$user_meta_value}' )"; 
                    break;

                case 'lessthen_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) < '{$user_meta_value}' )"; 
                    break;
                    
                case 'lessthenequal_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) <= '{$user_meta_value}' )"; 
                    break;
                
                case 'greaterthen_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) > '{$user_meta_value}' )"; 
                    break;

                case 'greaterthenequal_date':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS DATE) >= '{$user_meta_value}' )"; 
                    break;

                case 'equal_to_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) = '{$user_meta_value}' )"; 
                    break;

                case 'notequal_to_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) != '{$user_meta_value}' )"; 
                    break;

                case 'lessthen_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) < '{$user_meta_value}' )"; 
                    break;
                    
                case 'lessthenequal_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) <= '{$user_meta_value}' )"; 
                    break;
                
                case 'greaterthen_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) > '{$user_meta_value}' )"; 
                    break;

                case 'greaterthenequal_number':
                    $query .= " AND CAST($wpdb->usermeta.meta_value AS SIGNED) >= '{$user_meta_value}' )"; 
                    break;

                default:
                    $query .= "  AND $wpdb->usermeta.meta_value = '{$user_meta_value}' )";
                    break;
            }
        }

        if ( !empty( $user_email ) && !empty( $user_email_compare ) ) {
            $user_email = preg_replace('/\s+/', '', explode( ",", str_replace( '\r\n', '', $user_email ) ) );

            if( count( $user_email ) > 1 ){
                $imp = "'" . implode( "','", $user_email ) . "'";
                switch ( $user_email_compare ) {
                    case 'equal_to_str':
                        $query .= " AND $wpdb->users.user_email IN ( $imp )";
                        break;

                    case 'notequal_to_str':
                        $query .= " AND $wpdb->users.user_email NOT IN ( $imp )";
                        break;

                    default:
                        $query .= " AND $wpdb->users.user_email IN ( $imp )";
                        break;
                }
            }else{
                $imp = implode( ",", $user_email );
                switch ( $user_email_compare ) {
                    case 'equal_to_str':
                        $query .= " AND ( $wpdb->users.user_email = '{$imp}' )"; 
                        break;

                    case 'notequal_to_str':
                        $query .= " AND ( $wpdb->users.user_email != '{$imp}' )"; 
                        break;

                    default:
                        $query .= "  AND ( $wpdb->users.user_email = '{$imp}' )";
                        break;
                }
            }
        }

        if( !empty( $delete_user_roles ) ){
            $subquery = array();
            foreach ($delete_user_roles as $delete_user_role ) {
                $subquery[] = "( mt_roles.meta_key = '{$wpdb->prefix}capabilities' AND mt_roles.meta_value LIKE '%".'\"'.$delete_user_role.'\"%'."' )";
            }
            $subquery = implode( ' OR ',  $subquery );
            $query .= " AND ( {$subquery} )";
        }

        if( $delete_start_date != ''){
            $query .= " AND ( $wpdb->users.user_registered >= '{$delete_start_date} 00:00:00' )";
        }
        if( $delete_end_date != ''){
            $query .= " AND ( $wpdb->users.user_registered <= '{$delete_end_date} 23:59:59' )";
        }

        $query .= " AND $wpdb->users.ID NOT IN ( ".get_current_user_id()." )";

        if( !empty( $limit_user ) ){
            if( is_numeric( $limit_user ) ){
                $query .= " ORDER BY $wpdb->users.ID ASC LIMIT " . $limit_user;    
            }
        }
        $users = $wpdb->get_col( $query );
        return $users;
    }

    /**
     * Do Delete operation on users.
     *
     * @access public
     * @since 1.0
     * @param array $data Posts Id.
     * @return array | deleted posts count.
     */
    public function do_delete_users( $user_ids = array(), $reassign_user = '') {
        $user_delete_count = 0;
        require_once(ABSPATH.'wp-admin/includes/user.php' );
        $current_user = wp_get_current_user();
        $user_ids = array_diff( $user_ids, array( $current_user->ID ) );
        if ( ! empty( $user_ids ) ){
            foreach ($user_ids as $user_id ) {
                if( $reassign_user != '' && $reassign_user > 0 ){
                    wp_delete_user( $user_id , $reassign_user );    
                }else{
                    wp_delete_user( $user_id );
                }
                
            }
            $user_delete_count = count( $user_ids );

        }
        return $user_delete_count;
    }

    /**
    * Get Comment count to be deleted.
    *
    * @access public
    * @since 1.1.0
    * @param array $data Delete comment form data.
    * @return comment count.
    */
    public function get_delete_comment_count( $data = array() ){
        if( wpbd_is_pro() && class_exists('WPBD_Delete_API_Pro', false) ){
            $wpbdpro = new WPBD_Delete_API_Pro();
            return $wpbdpro->get_delete_comment_count( $data );
        }
        global $wpdb;
        $comment_delete_count = 0;
        $delete_comment_status = isset( $data['delete_comment_status'] ) ? $data['delete_comment_status'] : array();
        $delete_comment_status = array_map('esc_sql', $delete_comment_status );
        $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
        $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
        $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
        $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
        if( $date_type === 'older_than') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        } else if( $date_type === 'within_last') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        }

        if ( ! empty( $data ) ){

            $temp_delete_query = array();

            if( ! empty( $delete_comment_status ) ){
                foreach ( $delete_comment_status as $comment_status ) {

                    switch( $comment_status ) {            
                        case 'pending':
                            $temp_delete_query[] = "comment_approved = '0'";
                            break;
                        
                        case 'spam':
                            $temp_delete_query[] = "comment_approved = 'spam'";
                            break;
                        
                        case 'trash':
                            $temp_delete_query[] = "comment_approved = 'trash' OR comment_approved = 'post-trashed'";
                            break;

                        case 'approved':
                            $temp_delete_query[] = "comment_approved = '1'";
                            break;
                    }
                    
                }
                if( !empty( $temp_delete_query ) ) {
                    $delete_comment_query = "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE 1=1";
                    $delete_comment_query .= " AND (" . implode( " OR ", $temp_delete_query ) . ")";
                }
            }
 
            if( $delete_start_date != ''){
                $delete_comment_query .= " AND ( comment_date >= '{$delete_start_date} 00:00:00' )";
            }
            if( $delete_end_date != ''){
                $delete_comment_query .= " AND ( comment_date <= '{$delete_end_date} 23:59:59' )";
            }
            $comment_delete_count = $wpdb->get_var( $delete_comment_query );
        }
        return $comment_delete_count;
    }

    /**
     * Do Delete operation on comments.
     *
     * @access public
     * @since 1.1.0
     * @param array $data $_POST.
     * @return deleted comments count.
     */
    public function do_delete_comments( $data = array() ) {
        global $wpdb;
        if( wpbd_is_pro() && class_exists('WPBD_Delete_API_Pro', false) ){
            $wpbdpro = new WPBD_Delete_API_Pro();
            return $wpbdpro->do_delete_comments( $data );
        }

        $comment_delete_count = 0;
        $delete_comment_status = isset( $data['delete_comment_status'] ) ? $data['delete_comment_status'] : array();
        $delete_comment_status = array_map('esc_sql', $delete_comment_status );
        $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
        $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
        $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
        $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
        if( $date_type === 'older_than') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        } else if( $date_type === 'within_last') {
            $delete_start_date = $delete_end_date = '';
            if( $input_days === "0" || $input_days > 0){
                $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
            }
        }

        if ( ! empty( $data ) ){

            $temp_delete_query = array();

            if( ! empty( $delete_comment_status ) ){
                foreach ( $delete_comment_status as $comment_status ) {

                    switch( $comment_status ) {            
                        case 'pending':
                            $temp_delete_query[] = "comment_approved = '0'";
                            break;
                        
                        case 'spam':
                            $temp_delete_query[] = "comment_approved = 'spam'";
                            break;
                        
                        case 'trash':
                            $temp_delete_query[] = "comment_approved = 'trash' OR comment_approved = 'post-trashed'";
                            break;
                            break;

                        case 'approved':
                            $temp_delete_query[] = "comment_approved = '1'";
                            break;
                    }
                    
                }
                if( !empty( $temp_delete_query ) ) {
                    $delete_comment_query = "DELETE FROM $wpdb->comments WHERE 1=1";
                    $delete_comment_query .= " AND (" . implode( " OR ", $temp_delete_query ) . ")";
                }
            }
 
            if( $delete_start_date != ''){
                $delete_comment_query .= " AND ( comment_date >= '{$delete_start_date} 00:00:00' )";
            }
            if( $delete_end_date != ''){
                $delete_comment_query .= " AND ( comment_date <= '{$delete_end_date} 23:59:59' )";
            }
            $comment_delete_count = $wpdb->query( $delete_comment_query );
            delete_transient('wc_count_comments');
        }
        return $comment_delete_count;
    }

    /**
     * Get postmeta Ids.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete postmeta form data.
     * @return array | Posts Id.
     */
    public function get_delete_postmeta_ids( $data = array() ) {
        global $wpdb;
        if( wpbd_is_pro() && class_exists('WPBD_Delete_API_Pro', false) ){
            $wpbdpro = new WPBD_Delete_API_Pro();
            return $wpbdpro->get_delete_postmeta_ids( $data );
        }
        if( ! empty( $data['meta_post_type'] ) &&  ! empty( $data['custom_field_key'] ) ){

            $post_type = isset( $data['meta_post_type'] ) ? esc_sql( $data['meta_post_type'] ) : '';
            $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
            $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
            $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
            $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
            if( $date_type === 'older_than') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'within_last') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            }

            // Post Query Generation.
            $postquery = "SELECT DISTINCT $wpdb->posts.ID FROM $wpdb->posts ";

            $postquery .= " WHERE $wpdb->posts.post_type = '" . $post_type . "'";  

            if( $delete_start_date != ''){
                $postquery .= " AND ( $wpdb->posts.post_date >= '{$delete_start_date} 00:00:00' )";
            }
            if( $delete_end_date != ''){
                $postquery .= " AND ( $wpdb->posts.post_date <= '{$delete_end_date} 23:59:59' )";
            }

            $metaQuery = $metaWhere = "";
            $metaWhere = $this->get_meta_where( $data );

            if( $metaWhere != '' ){
                $metaQuery = "SELECT post_id, meta_key FROM $wpdb->postmeta WHERE post_id IN ( {$postquery} ) AND ( {$metaWhere} )";    
            }else{
                return array();   
            }
            
            if( $metaQuery == '' ){
                return array();
            }
            $meta_results = $wpdb->get_results( $metaQuery );
            return $meta_results;
        }else{
            return array();
        }
    }

    /**
     * Do Delete operation on postmetas.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Postmeta results
     * @return array | deleted postmetas count.
     */
    public function do_delete_postmetas( $meta_results = array() ) {
        $post_delete_count = 0;

        if ( ! empty( $meta_results ) ){

            foreach ($meta_results as $meta ) {
                $post_id = intval( $meta->post_id );
                if( $post_id === 0 ) {
                    $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", $post_id, $meta->meta_key ) );
                } else {
                    delete_post_meta( $post_id, $meta->meta_key );
                }
            }
            $post_delete_count = number_format_i18n( sizeof( $meta_results ) );

        }
        return $post_delete_count;
    }

    /**
     * Get commentmeta Ids.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete commentmeta form data.
     * @return array | Meta results.
     */
    public function get_delete_commentmeta_ids( $data = array() ) {
        global $wpdb;
        if( $data['custom_field_key'] != '' ){

            $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
            $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
            $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
            $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
            if( $date_type === 'older_than') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'within_last') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'onemonth' || $date_type === 'sixmonths' || $date_type === 'oneyear' || $date_type === 'twoyear' ) {
                $delete_end_date = date( 'Y-m-d', strtotime( current_time('Y-m-d') ) );
                if( $date_type === 'onemonth' ){
                    $delete_start_date = date('Y-m-d', strtotime("-30 days", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'sixmonths' ){
                    $delete_start_date = date('Y-m-d', strtotime("-6 months", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'oneyear' ){
                    $delete_start_date = date('Y-m-d', strtotime("-1 year", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'twoyear' ){
                    $delete_start_date = date('Y-m-d', strtotime("-2 years", strtotime(current_time('Y-m-d'))));
                }
            }

            // Post Query Generation.
            $commentquery = "SELECT DISTINCT $wpdb->comments.comment_ID FROM $wpdb->comments WHERE 1 = 1";

            if( $delete_start_date != ''){
                $commentquery .= " AND ( $wpdb->comments.comment_date >= '{$delete_start_date} 00:00:00' )";
            }
            if( $delete_end_date != ''){
                $commentquery .= " AND ( $wpdb->comments.comment_date <= '{$delete_end_date} 23:59:59' )";
            }
           
            $metaQuery = $metaWhere = "";
            $metaWhere = $this->get_meta_where( $data );

            if( $metaWhere != '' ){
                $metaQuery = "SELECT comment_id, meta_key FROM $wpdb->commentmeta WHERE comment_id IN ( {$commentquery} ) AND ( {$metaWhere} )";    
            }else{
                return array();   
            }

            if( $metaQuery == '' ){
                return array();
            }
            $meta_results = $wpdb->get_results( $metaQuery );
            return $meta_results;
        }else{
            return array();
        }
    }

    /**
     * Do Delete operation on commentmetas.
     *
     * @access public
     * @since 1.1.0
     * @param array $data commentmeta results
     * @return array | deleted commentmeta count.
     */
    public function do_delete_commentmetas( $meta_results = array() ) {
        $post_delete_count = 0;

        if ( ! empty( $meta_results ) ){

            foreach ($meta_results as $meta ) {
                $comment_id = intval( $meta->comment_id );
                if( $comment_id === 0 ) {
                    $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->commentmeta WHERE comment_id = %d AND meta_key = %s", $comment_id, $meta->meta_key ) );
                } else {
                    delete_comment_meta( $comment_id, $meta->meta_key );
                }
            }
            $post_delete_count = number_format_i18n( sizeof( $meta_results ) );

        }
        return $post_delete_count;
    }

    /**
     * Get usermeta Ids.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete usermeta form data.
     * @return array | Meta results.
     */
    public function get_delete_usermeta_ids( $data = array() ) {
        global $wpdb;
        if( $data['custom_field_key'] != '' && !empty( $data['delete_user_roles'] ) ){
            
            $delete_user_roles = isset( $data['delete_user_roles'] ) ? $data['delete_user_roles'] : array();
            $delete_start_date = isset( $data['delete_start_date'] ) ? esc_sql( $data['delete_start_date'] ) : '';
            $delete_end_date = isset( $data['delete_end_date'] ) ? esc_sql( $data['delete_end_date'] ) : '';
            $date_type = isset( $data['date_type'] ) ? esc_sql( $data['date_type'] ) : 'custom_date';
            $input_days = isset( $data['input_days'] ) ? esc_sql( $data['input_days'] ) : '';
            if( $date_type === 'older_than') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_end_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'within_last') {
                $delete_start_date = $delete_end_date = '';
                if( $input_days === "0" || $input_days > 0){
                    $delete_start_date = date('Y-m-d', strtotime("-{$input_days} days", strtotime(current_time('Y-m-d'))));
                }
            } else if( $date_type === 'onemonth' || $date_type === 'sixmonths' || $date_type === 'oneyear' || $date_type === 'twoyear' ) {
                $delete_end_date = date( 'Y-m-d', strtotime( current_time('Y-m-d') ) );
                if( $date_type === 'onemonth' ){
                    $delete_start_date = date('Y-m-d', strtotime("-30 days", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'sixmonths' ){
                    $delete_start_date = date('Y-m-d', strtotime("-6 months", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'oneyear' ){
                    $delete_start_date = date('Y-m-d', strtotime("-1 year", strtotime(current_time('Y-m-d'))));
                }elseif( $date_type === 'twoyear' ){
                    $delete_start_date = date('Y-m-d', strtotime("-2 years", strtotime(current_time('Y-m-d'))));
                }
            }

            $userquery = "SELECT DISTINCT $wpdb->users.ID FROM $wpdb->users ";

            if( !empty( $delete_user_roles ) ){
                $i = 1;
                foreach ($delete_user_roles as $delete_user_role ) {
                    $userquery .= " INNER JOIN $wpdb->usermeta AS mt{$i} ON ( $wpdb->users.ID = mt{$i}.user_id )";    
                    $i++;
                }
            }
            $userquery .= " WHERE 1 = 1";
            if( !empty( $delete_user_roles ) ){
                $j = 1;
                $subquery = array();
                foreach ($delete_user_roles as $delete_user_role ) {
                    $subquery[]= "( mt{$j}.meta_key = '{$wpdb->prefix}capabilities' AND mt{$j}.meta_value LIKE '%\"{$delete_user_role}\"%' )";
                    $j++;
                }
                $subquery = implode( ' OR ',  $subquery );
                $userquery .= " AND ( {$subquery} )";
            }

            // User Query Generation.
            if( $delete_start_date != '' || $delete_end_date != '' ){
                
                if( $delete_start_date != '' ){
                    $userquery .= " AND ( $wpdb->users.user_registered >= '{$delete_start_date} 00:00:00' )";
                }
                if( $delete_end_date != '' ){
                    $userquery .= " AND ( $wpdb->users.user_registered <= '{$delete_end_date} 23:59:59' )";
                }
            }
           
            $metaQuery = $metaWhere = "";
            $metaWhere = $this->get_meta_where( $data );

            if( $metaWhere != '' ){
                    $metaQuery = "SELECT user_id, meta_key FROM $wpdb->usermeta WHERE user_id IN ( {$userquery} ) AND ( {$metaWhere} )";        
               
            }else{
                return array();   
            }

            if( $metaQuery == '' ){
                return array();
            }
            $meta_results = $wpdb->get_results( $metaQuery );
            return $meta_results;

        }else{
            return array();
        }
    }

    /**
     * Do Delete operation on usermetas.
     *
     * @access public
     * @since 1.1.0
     * @param array $data usermeta results
     * @return array | deleted usermeta count.
     */
    public function do_delete_usermetas( $meta_results = array() ) {
        $usermeta_delete_count = 0;
        if ( ! empty( $meta_results ) ){

            foreach ($meta_results as $meta ) {
                $user_id = intval( $meta->user_id );
                if( $user_id === 0 ) {
                    $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta->meta_key ) );
                } else {
                    delete_user_meta( $user_id, $meta->meta_key );
                }
            }
            $usermeta_delete_count = number_format_i18n( sizeof( $meta_results ) );

        }
        return $usermeta_delete_count;
    }

    /**
     * Get delete Term count.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete terms form data.
     * @return int | Term count.
     */
    public function get_delete_term_count( $data = array() ){

        if( $data['delete_post_type'] == '' &&  $data['post_taxonomy'] == '' ){
            return 0; 
        }

        return $numTerms = wp_count_terms( $data['post_taxonomy'], array( 'hide_empty'=> false ) );

    }

    /**
     * Do Delete operation on taxonomy terms.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete terms form data.
     * @return array | deleted terms count.
     */
    public function do_delete_terms( $data = array() ) {
        $terms_delete_count = 0;
        if ( ! empty( $data ) ){

            if( $data['delete_post_type'] == '' ||  $data['post_taxonomy'] == '' ){
                return $terms_delete_count;
            }

            $terms = get_terms( $data['post_taxonomy'], array( 'fields' => 'ids', 'hide_empty' => false ) );
            foreach ( $terms as $value ) {
               wp_delete_term( $value, $data['post_taxonomy'] );
            }
            $terms_delete_count = number_format_i18n( sizeof( $terms ) );
        }
        return $terms_delete_count;
    }

    /**
     * Generate WHERE condition for meta delete.
     *
     * @access public
     * @since 1.1.0
     * @param array $data Delete form data.
     * @return string | WHERE Condition for query.
     */
    function get_meta_where( $data ){
        // Costomfields
        $custom_field_key =  ( $data['custom_field_key'] ) ? esc_sql( $data['custom_field_key'] ) : '';
        $custom_field_value =  ( $data['custom_field_value'] ) ? esc_sql( $data['custom_field_value'] ) : '';
        $custom_field_compare =  ( $data['custom_field_compare'] ) ? $data['custom_field_compare'] : 'equal_to_str';
        $metaWhere = '';

        if ( $custom_field_key != '' ) {
                $metaWhere .= "( meta_key = '" . $custom_field_key. "'";

                if( $custom_field_compare != '' && $custom_field_value != '' ){
                switch ( $custom_field_compare ) {
                    case 'equal_to_str':
                        $metaWhere .= " AND meta_value = '{$custom_field_value}' )"; 
                        break;

                    case 'notequal_to_str':
                        $metaWhere .= " AND meta_value != '{$custom_field_value}' )"; 
                        break;

                    case 'like_str':
                        $metaWhere .= " AND meta_value LIKE '%{$custom_field_value}%' )"; 
                        break;

                    case 'notlike_str':
                        $metaWhere .= " AND meta_value NOT LIKE '%{$custom_field_value}%' )"; 
                        break;

                    case 'equal_to_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) = '{$custom_field_value}' )"; 
                        break;

                    case 'notequal_to_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) != '{$custom_field_value}' )"; 
                        break;

                    case 'lessthen_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) < '{$custom_field_value}' )"; 
                        break;
                        
                    case 'lessthenequal_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) <= '{$custom_field_value}' )"; 
                        break;
                    
                    case 'greaterthen_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) > '{$custom_field_value}' )"; 
                        break;

                    case 'greaterthenequal_date':
                        $metaWhere .= " AND CAST(meta_value AS DATE) >= '{$custom_field_value}' )"; 
                        break;

                    case 'equal_to_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) = '{$custom_field_value}' )"; 
                        break;

                    case 'notequal_to_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) != '{$custom_field_value}' )"; 
                        break;

                    case 'lessthen_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) < '{$custom_field_value}' )"; 
                        break;
                        
                    case 'lessthenequal_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) <= '{$custom_field_value}' )"; 
                        break;
                    
                    case 'greaterthen_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) > '{$custom_field_value}' )"; 
                        break;

                    case 'greaterthenequal_number':
                        $metaWhere .= " AND CAST(meta_value AS SIGNED) >= '{$custom_field_value}' )"; 
                        break;

                    default:
                        $metaWhere .= "  AND meta_value = '{$custom_field_value}' )";
                        break;     
                    }               
                }else{
                    $metaWhere .=" )";
                }
        }
        return $metaWhere;
    }

    /**
     * Get Plugin array
     *
     * @since 1.1.0
     * @return array
     */
    public function get_xyuls_themes_plugins(){
        return array(
            'wp-event-aggregator' => esc_html__( 'WP Event Aggregator', 'wp-bulk-delete' ),
            'import-facebook-events' => esc_html__( 'Import Facebook Events', 'wp-bulk-delete' ),
            'import-eventbrite-events' => esc_html__( 'Import Eventbrite Events', 'wp-bulk-delete' ),
            'import-meetup-events' => esc_html__( 'Import Meetup Events', 'wp-bulk-delete' ),
            'event-schema' => esc_html__( 'Event Schema / Structured Data', 'wp-bulk-delete' ),
        );
    }

    /**
     * Get Plugin Details.
     *
     * @since 1.1.0
     * @return array
     */
    public function get_wporg_plugin( $slug ){

        if( $slug == '' ){
            return false;
        }

        $transient_name = 'support_plugin_box'.$slug;
        $plugin_data = get_transient( $transient_name );
        if( false === $plugin_data ){
            if ( ! function_exists( 'plugins_api' ) ) {
                include_once ABSPATH . '/wp-admin/includes/plugin-install.php';
            }

            $plugin_data = plugins_api( 'plugin_information', array(
                'slug' => $slug,
                'is_ssl' => is_ssl(),
                'fields' => array(
                    'banners' => true,
                    'active_installs' => true,
                ),
            ) );

            if ( ! is_wp_error( $plugin_data ) ) {
                set_transient( $transient_name, $plugin_data, 24 * HOUR_IN_SECONDS );
            } else {
                // If there was a bug on the Current Request just leave
                return false;
            }           
        }
        return $plugin_data;
    }
}