Completed
Push — release/1.7 ( 6f5add...c516c4 )
by Ravinder
1042:53 queued 1042:50
created

uninstall.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Uninstall Give
4
 *
5
 * @package     Give
6
 * @subpackage  Uninstall
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
14
	exit;
15
}
16
17
// Load Give file.
18
include_once( 'give.php' );
19
20
global $wpdb, $wp_roles;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
21
22
23
if ( give_get_option( 'uninstall_on_delete' ) === 'on' ) {
24
25
	// Delete All the Custom Post Types.
26
	$give_taxonomies = array( 'form_category', 'form_tag', 'give_log_type' );
27
	$give_post_types = array( 'give_forms', 'give_payment', 'give_log' );
28
	foreach ( $give_post_types as $post_type ) {
29
30
		$give_taxonomies = array_merge( $give_taxonomies, get_object_taxonomies( $post_type ) );
31
		$items           = get_posts( array(
32
			'post_type'   => $post_type,
33
			'post_status' => 'any',
34
			'numberposts' => - 1,
35
			'fields'      => 'ids',
36
		) );
37
38
		if ( $items ) {
39
			foreach ( $items as $item ) {
40
				wp_delete_post( $item, true );
41
			}
42
		}
43
	}
44
45
	// Delete All the Terms & Taxonomies.
46
	foreach ( array_unique( array_filter( $give_taxonomies ) ) as $taxonomy ) {
47
48
		$terms = $wpdb->get_results( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('%s') ORDER BY t.name ASC", $taxonomy ) );
49
50
		// Delete Terms.
51
		if ( $terms ) {
52
			foreach ( $terms as $term ) {
53
				$wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $term->term_taxonomy_id ) );
54
				$wpdb->delete( $wpdb->terms, array( 'term_id' => $term->term_id ) );
55
			}
56
		}
57
58
		// Delete Taxonomies.
59
		$wpdb->delete( $wpdb->term_taxonomy, array( 'taxonomy' => $taxonomy ), array( '%s' ) );
60
	}
61
62
	// Delete the Plugin Pages.
63
	$give_created_pages = array( 'success_page', 'failure_page', 'history_page' );
64
	foreach ( $give_created_pages as $p ) {
65
		$page = give_get_option( $p, false );
66
		if ( $page ) {
67
			wp_delete_post( $page, true );
68
		}
69
	}
70
71
	// Delete Capabilities.
72
	Give()->roles->remove_caps();
73
74
	// Delete the Roles.
75
	$give_roles = array( 'give_manager', 'give_accountant', 'give_worker' );
76
	foreach ( $give_roles as $role ) {
77
		remove_role( $role );
78
	}
79
80
	// Remove all database tables.
81
	$wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'give_donors' );
82
	$wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'give_customers' );
83
	$wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'give_customermeta' );
84
85
	// Cleanup Cron Events.
86
	wp_clear_scheduled_hook( 'give_daily_scheduled_events' );
87
	wp_clear_scheduled_hook( 'give_daily_cron' );
88
	wp_clear_scheduled_hook( 'give_weekly_cron' );
89
90
	// Get all options.
91
	$give_option_names = $wpdb->get_results(
92
		$wpdb->prepare(
93
			"SELECT option_name FROM {$wpdb->options} where option_name LIKE '%%%s%%'",
94
			'give'
95
		),
96
		ARRAY_A
97
	);
98
99
	if ( ! empty( $give_option_names ) ) {
100
		// Convert option name to transient or option name.
101
		$new_give_option_names = array();
102
103
		foreach ( $give_option_names as $option ) {
104
			$new_give_option_names[] = ( false !== strpos( $option['option_name'], '_transient_' ) )
105
				? str_replace( '_transient_', '', $option['option_name'] )
106
				: $option['option_name'];
107
		}
108
109
		$give_option_names = $new_give_option_names;
110
111
		// Delete all the Plugin Options.
112
		foreach ( $give_option_names as $option ) {
113
			if ( false !== strpos( $option, '_transient_' ) ) {
114
				delete_transient( $option );
115
			} else {
116
				delete_option( $option );
117
			}
118
		}
119
	}
120
}
121