query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_logs' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_notifications_queue' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_ip_scores' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_request_log' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_malicious_signatures' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_cache' ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'advaipbl_blocked_ips' ); // phpcs:enable // --- Borrar Opciones de la Tabla `wp_options` --- $options_to_delete = [ 'advaipbl_settings', // --- Opciones de Sistema y Legado --- 'advaipbl_db_version', 'advaipbl_admin_ip_whitelist_trigger', 'advaipbl_usm_sessions_per_page', 'advaipbl_telemetry_notice_dismissed', 'advaipbl_ip_table_migration_complete', 'advaipbl_legacy_options_cleaned', 'advaipbl_autoload_version', 'advaipbl_spamhaus_asn_list', 'advaipbl_spamhaus_last_update', 'advaipbl_waf_rules', 'advaipbl_blocked_asns', 'advaipbl_blocked_user_agents', 'advaipbl_whitelisted_user_agents', 'advaipbl_ips_whitelist', 'advaipbl_honeypot_urls', // --- Opciones de Bloqueo Migradas (Limpieza por si la migración no se ejecutó) --- 'advaipbl_ips_bloqueadas_manual', 'advaipbl_ips_bloqueadas_404', 'advaipbl_ips_bloqueadas_403', 'advaipbl_ips_bloqueadas_login', 'advaipbl_ips_bloqueadas_geoblock', 'advaipbl_ips_bloqueadas_honeypot', 'advaipbl_ips_bloqueadas_user_agent', 'advaipbl_ips_bloqueadas_waf', 'advaipbl_ips_bloqueadas_threat_score', 'advaipbl_ips_bloqueadas_rate_limit', 'advaipbl_ips_bloqueadas_asn', 'advaipbl_ips_bloqueadas_xmlrpc_block', // --- Opciones de Legado con Prefijo Antiguo --- 'advanced-ip-blocker_ips_bloqueadas_404', 'advanced-ip-blocker_ips_bloqueadas_403', 'advanced-ip-blocker_ips_bloqueadas_login', 'advanced-ip-blocker_ips_bloqueadas_honeypot', 'advanced-ip-blocker_ips_bloqueadas_user_agent', 'advanced-ip-blocker_settings', 'advanced-ip-blocker_blocked_user_agents', 'advanced-ip-blocker_whitelisted_user_agents', 'advanced-ip-blocker_ips_whitelist', 'advanced-ip-blocker_ips_bloqueadas_manual', 'advanced-ip-blocker_honeypot_urls', // --- Opciones Huérfanas de Módulos --- 'advaipbl_recaptcha_enable', 'advaipbl_recaptcha_site_key', 'advaipbl_recaptcha_secret_key', 'advaipbl_recaptcha_version', 'advaipbl_recaptcha_score_threshold', ]; foreach ( $options_to_delete as $option_name ) { delete_option( $option_name ); } // --- Borrar Transients Relacionados --- // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE `option_name` LIKE %s OR `option_name` LIKE %s", $wpdb->esc_like( '_transient_advaipbl_' ) . '%', $wpdb->esc_like( '_transient_timeout_advaipbl_' ) . '%' ) ); // Borrar Metadatos de Usuario de 2FA $usermeta_keys_to_delete = [ '_advaipbl_2fa_secret', '_advaipbl_2fa_enabled_at', '_advaipbl_2fa_backup_codes', '_advaipbl_2fa_temp_secret', '_advaipbl_2fa_setup_required', ]; $placeholders = implode( ', ', array_fill( 0, count( $usermeta_keys_to_delete ), '%s' ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE meta_key IN ({$placeholders})", $usermeta_keys_to_delete ) ); // --- Borrar Directorio de GeoIP --- $upload_dir = wp_upload_dir(); $geoip_dir = $upload_dir['basedir'] . '/advaipbl_geoip'; if ( is_dir( $geoip_dir ) ) { // phpcs:disable WordPress.WP.AlternativeFunctions function advaipbl_uninstall_recursive_rmdir( $dir ) { $files = array_diff( scandir( $dir ), array( '.', '..' ) ); foreach ( $files as $file ) { ( is_dir( "$dir/$file" ) ) ? advaipbl_uninstall_recursive_rmdir( "$dir/$file" ) : unlink( "$dir/$file" ); } return rmdir( $dir ); } advaipbl_uninstall_recursive_rmdir( $geoip_dir ); // phpcs:enable WordPress.WP.AlternativeFunctions } } // --- Limpiar Tareas de Cron SIEMPRE, sin importar la opción de borrado --- wp_clear_scheduled_hook( 'advaipbl_purge_old_logs_event' ); wp_clear_scheduled_hook( 'advaipbl_send_summary_email' ); wp_clear_scheduled_hook( 'advaipbl_update_spamhaus_list_event' ); wp_clear_scheduled_hook( 'advaipbl_send_telemetry_data_event' ); wp_clear_scheduled_hook( 'advaipbl_threat_score_decay_event' ); wp_clear_scheduled_hook( 'advaipbl_signature_analysis_event' ); wp_clear_scheduled_hook( 'advaipbl_update_geoip_db_event' ); wp_clear_scheduled_hook( 'advaipbl_cleanup_expired_cache_event' );