query($wpdb->prepare('DROP TABLE IF EXISTS %i', Store::table($flx_security_name))); } foreach (['schema', 'settings', 'connection', 'installation', 'sync', 'snapshot', 'authorization', 'error', 'feedback', 'test', 'retry_after', 'inventory_dirty', 'disconnects', 'resume_attempts'] as $flx_security_name) { Store::remove($flx_security_name); } // Remove only this installation's session-scoped transients and user dismissal preferences. foreach (['authorization', 'feedback'] as $flx_security_name) { $flx_security_prefix = (is_multisite() ? '_site_transient_' : '_transient_').Store::personalPrefix($flx_security_name); // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Uninstall must enumerate fresh, scoped transient names; native APIs delete each value and its cache below. $flx_security_keys = is_multisite() ? $wpdb->get_col($wpdb->prepare('SELECT meta_key FROM %i WHERE site_id=%d AND meta_key LIKE %s', $wpdb->sitemeta, get_current_network_id(), $wpdb->esc_like($flx_security_prefix).'%')) : $wpdb->get_col($wpdb->prepare('SELECT option_name FROM %i WHERE option_name LIKE %s', $wpdb->options, $wpdb->esc_like($flx_security_prefix).'%')); // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching foreach ($flx_security_keys as $flx_security_key) { if (is_multisite()) delete_site_transient(substr($flx_security_key, strlen('_site_transient_'))); else delete_transient(substr($flx_security_key, strlen('_transient_'))); } if (is_multisite()) delete_site_option('flx_security_'.$flx_security_name); else delete_option('flx_security_'.$flx_security_name); } // phpcs:ignore WordPress.DB.DirectDatabaseQuery -- Opt-in cleanup removes only this installation's plugin preference key. $wpdb->query($wpdb->prepare('DELETE FROM %i WHERE meta_key=%s', $wpdb->usermeta, 'flx_security_notices_'.substr(hash('sha256', Store::table('plugins')), 0, 16))); delete_site_transient('flx_security_notice_inventory'); delete_site_transient('flx_security_release'); delete_site_transient('flx_security_identity_retry'); }