-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathuninstall.php
More file actions
134 lines (120 loc) · 3.45 KB
/
Copy pathuninstall.php
File metadata and controls
134 lines (120 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
// If uninstall is not called from WordPress, exit
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit();
}
if ( defined('RSSSL_UPGRADING_TO_PRO') ) {
exit();
}
$rsssl_settings = is_multisite() ? get_site_option( 'rsssl_options' ) : get_option( 'rsssl_options' );
if ( isset( $rsssl_settings['delete_data_on_uninstall'] ) && $rsssl_settings['delete_data_on_uninstall'] ) {
// Clean up plugin data.
global $wpdb;
/*
* Option and transient records live in wp_options with predictable prefixes.
* Using SQL LIKE patterns here keeps uninstall resilient against older keys
* that may no longer be listed explicitly in the codebase.
*/
$option_patterns = [
'rsssl_%',
'rlrsssl_%',
'_transient_rsssl_%',
'_transient_timeout_rsssl_%',
'_transient_rlrsssl_%',
'_transient_timeout_rlrsssl_%',
'_site_transient_rsssl_%',
'_site_transient_timeout_rsssl_%',
'_site_transient_rlrsssl_%',
'_site_transient_timeout_rlrsssl_%',
];
foreach ( $option_patterns as $pattern ) {
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE %s",
$pattern
)
);
}
if ( is_multisite() ) {
/*
* Network-level settings and site transients are stored in sitemeta on
* multisite installs, so they need the same prefix-based cleanup there.
*/
$site_meta_patterns = [
'rsssl_%',
'rlrsssl_%',
'_site_transient_rsssl_%',
'_site_transient_timeout_rsssl_%',
'_site_transient_rlrsssl_%',
'_site_transient_timeout_rlrsssl_%',
];
foreach ( $site_meta_patterns as $pattern ) {
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->sitemeta} WHERE meta_key LIKE %s",
$pattern
)
);
}
}
/*
* User meta keys are not always stored as strict prefixes. A contains-match
* keeps the uninstall cleanup compatible with keys that embed rsssl names.
*/
$usermeta_patterns = [
'%rsssl_%',
'%rlrsssl_%',
];
foreach ( $usermeta_patterns as $pattern ) {
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE %s",
$pattern
)
);
}
require_once(ABSPATH . 'wp-admin/includes/file.php');
WP_Filesystem();
/**
* Recursively remove the plugin upload directory via WP_Filesystem.
*
* This keeps uninstall cleanup compatible with the filesystem abstraction
* WordPress has initialized for the current environment.
*
* @param string $dir Absolute path to the directory that should be removed.
*/
function rsssl_delete_directory_wpfilesystem($dir) {
global $wp_filesystem;
if ($wp_filesystem->is_dir($dir)) {
$objects = $wp_filesystem->dirlist($dir);
if (!is_array($objects)) {
return;
}
foreach (array_keys($objects) as $object) {
if ($wp_filesystem->is_dir($dir . "/" . $object)) {
rsssl_delete_directory_wpfilesystem($dir . "/" . $object);
}
else {
$wp_filesystem->delete($dir . "/" . $object);
}
}
$wp_filesystem->rmdir($dir);
}
}
$upload_dir = wp_upload_dir();
$really_simple_ssl_dir = $upload_dir['basedir'] . '/really-simple-ssl';
rsssl_delete_directory_wpfilesystem($really_simple_ssl_dir);
global $wpdb;
$table_names = array(
$wpdb->base_prefix . 'rsssl_csp_log',
$wpdb->base_prefix . 'rsssl_xmlrpc',
$wpdb->base_prefix . 'rsssl_country',
$wpdb->base_prefix . 'rsssl_login_attempts',
$wpdb->base_prefix . 'rsssl_geo_block',
$wpdb->base_prefix . 'rsssl_event_logs',
);
foreach($table_names as $table_name){
$sql = "DROP TABLE IF EXISTS $table_name";
$wpdb->query($sql);
}
}