PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 5.4.0
Defender Security – Malware Scanner, Login Security & Firewall v5.4.0
6.3.0 6.2.3 6.2.4 6.2.0 6.2.1 6.2.2 6.1.0 5.3.1 5.4.0 5.4.1 5.5.0 5.5.1 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.7.2 5.8.0 5.8.1 5.9.0 6.0.0 6.0.1 3.0.1 3.1.0 All 141 releases
defender-security / uninstall.php

uninstall.php in Defender Security – Malware Scanner, Login Security & Firewall 5.4.0, at uninstall.php

134 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // Exit if uninstall is not called from WordPress.
3 if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
4 exit();
5 }
6
7 /**
8 * Drop custom tables.
9 *
10 * @since 2.4
11 */
12 function defender_drop_custom_tables() {
13 global $wpdb;
14
15 $wpdb->hide_errors();
16
17 defender_drop_custom_fk_constraint( $wpdb->prefix . 'defender_quarantine' );
18
19 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_email_log" );
20 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_scan_item" );
21 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_scan" );
22 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_lockout_log" );
23 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_lockout" );
24 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_audit_log" );
25 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_unlockout" );
26 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_antibot" );
27 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}defender_quarantine" );
28 }
29
30 /**
31 * Drop custom tables.
32 *
33 * @since 4.0.0
34 */
35 function defender_drop_custom_fk_constraint( string $table_name ): void {
36 global $wpdb;
37
38 $results = $wpdb->get_results(
39 "SELECT CONSTRAINT_NAME
40 FROM information_schema.TABLE_CONSTRAINTS
41 WHERE CONSTRAINT_SCHEMA = '{$wpdb->dbname}'
42 AND CONSTRAINT_TYPE = 'FOREIGN KEY'
43 AND TABLE_NAME = '{$table_name}'"
44 );
45
46 if ( $results ) {
47 foreach ( $results as $fk ) {
48 $wpdb->query( "ALTER TABLE {$table_name} DROP FOREIGN KEY {$fk->CONSTRAINT_NAME}" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
49 }
50 }
51 }
52
53 require_once __DIR__ . DIRECTORY_SEPARATOR . 'wp-defender.php';
54 require_once __DIR__ . DIRECTORY_SEPARATOR . 'extra/hub-connector/connector.php';
55 \WPMUDEV\Hub\Connector::get();
56 $settings = wd_di()->get( \WP_Defender\Model\Setting\Main_Setting::class );
57 $uninstall_data = isset( $settings->uninstall_data ) && 'remove' === $settings->uninstall_data;
58 $uninstall_settings = isset( $settings->uninstall_settings ) && 'reset' === $settings->uninstall_settings;
59
60 if ( $uninstall_settings || $uninstall_data ) {
61 // Turn off Audit_Logging so that hooks are not processed after deleting the table or resetting settings.
62 $audit = wd_di()->get( \WP_Defender\Model\Setting\Audit_Logging::class );
63 $audit->enabled = false;
64 $audit->save();
65 $advanced_tools = wd_di()->get( \WP_Defender\Controller\Advanced_Tools::class );
66 }
67 // Only Settings.
68 if ( $uninstall_settings ) {
69 // Remove all settings of Advanced Tools.
70 $advanced_tools->remove_settings();
71 wd_di()->get( \WP_Defender\Controller\Audit_Logging::class )->remove_settings();
72 wd_di()->get( \WP_Defender\Controller\Dashboard::class )->remove_settings();
73 wd_di()->get( \WP_Defender\Controller\Security_Tweaks::class )->remove_settings();
74 wd_di()->get( \WP_Defender\Controller\Scan::class )->remove_settings();
75 // Start of Firewall parent and submodules.
76 wd_di()->get( \WP_Defender\Controller\Firewall::class )->remove_settings();
77 // End.
78 wd_di()->get( \WP_Defender\Controller\Notification::class )->remove_settings();
79 wd_di()->get( \WP_Defender\Controller\Two_Factor::class )->remove_settings();
80 wd_di()->get( \WP_Defender\Controller\Blocklist_Monitor::class )->remove_settings();
81 wd_di()->get( \WP_Defender\Controller\Main_Setting::class )->remove_settings();
82 wd_di()->get( \WP_Defender\Controller\Onboard::class )->remove_settings();
83 // Delete plugin options.
84 delete_option( 'wp_defender' );
85 delete_site_option( 'wp_defender' );
86 delete_option( 'wd_db_version' );
87 delete_site_option( 'wd_db_version' );
88 delete_site_option( 'wpdefender_config_clear_active_tag' );
89 delete_site_option( 'wpdefender_preset_configs_transient_time' );
90 delete_site_option( 'wp_defender_config_default' );
91 delete_site_option( 'disable-xml-rpc' );
92 // Because not call remove_settings from WAF and Onboard controllers.
93 delete_site_transient( 'def_waf_status' );
94 delete_site_option( 'wp_defender_is_activated' );
95 delete_site_transient( \WP_Defender\Component\Blacklist_Lockout::IP_LIST_KEY );
96 }
97 // Only Data.
98 if ( $uninstall_data ) {
99 wd_di()->get( \WP_Defender\Controller\Audit_Logging::class )->remove_data();
100 wd_di()->get( \WP_Defender\Controller\Dashboard::class )->remove_data();
101 wd_di()->get( \WP_Defender\Controller\Security_Tweaks::class )->remove_data();
102 wd_di()->get( \WP_Defender\Controller\Scan::class )->remove_data();
103 // Start of Firewall parent and submodules.
104 wd_di()->get( \WP_Defender\Controller\Firewall::class )->remove_data();
105 // End.
106 wd_di()->get( \WP_Defender\Controller\Notification::class )->remove_data();
107 wd_di()->get( \WP_Defender\Controller\Two_Factor::class )->remove_data();
108 wd_di()->get( \WP_Defender\Component\Backup_Settings::class )->clear_configs();
109 // Remove all data of Advanced Tools.
110 $advanced_tools->remove_data();
111 defender_drop_custom_tables();
112 delete_site_transient( \WP_Defender\Behavior\Scan\Plugin_Integrity::$org_slugs );
113 delete_site_transient( \WP_Defender\Behavior\Scan\Plugin_Integrity::$org_responses );
114 delete_site_transient( \WP_Defender\Controller\Firewall_Logs::AKISMET_BLOCKED_IPS );
115 }
116
117 if ( class_exists( 'WP_Defender\Controller\Quarantine' ) ) {
118 // Quarantine.
119 // All decision making logic added inside the quarantine component core method on_uninstall.
120 wd_di()->get( \WP_Defender\Controller\Quarantine::class )->remove_data();
121 }
122
123 // Complete cleaning.
124 if ( $uninstall_settings && $uninstall_data ) {
125 delete_site_option( 'wd_nofresh_install' );
126 \WP_Defender\Component\Feature_Modal::delete_modal_key();
127 \WP_Defender\Controller\Data_Tracking::delete_modal_key();
128 \WP_Defender\Component\Rate::clean_up();
129 \WP_Defender\Component\Firewall::delete_slugs();
130 }
131 // Remains from old versions.
132 delete_site_option( 'wd_audit_cached' );
133 delete_site_option( 'wd_show_ip_detection_notice' );
134