prefix . 'marginbeacon_order_risk_lines', $wpdb->prefix . 'marginbeacon_order_risk', $wpdb->prefix . 'marginbeacon_findings', $wpdb->prefix . 'marginbeacon_scans', $wpdb->prefix . 'marginbeacon_price_revisions', $wpdb->prefix . 'marginbeacon_acknowledgements', $wpdb->prefix . 'marginbeacon_operational_events', ); foreach ( $aksmb_tables as $aksmb_table ) { // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.SchemaChange $wpdb->query( "DROP TABLE IF EXISTS {$aksmb_table}" ); } $aksmb_options = array( 'aksmb_schema_version', 'aksmb_schema_verified', 'aksmb_activation_gmt', 'aksmb_settings', 'aksmb_cost_settings', 'aksmb_compatibility_state', 'aksmb_last_health', 'aksmb_entitlement_cache', 'aksmb_entitlement_state', 'aksmb_scheduled_scan', 'aksmb_category_thresholds', 'aksmb_category_assumed_costs', 'aksmb_cogs_wizard_state', 'aksmb_cogs_migration_state', 'aksmb_recent_preview_state', 'aksmb_price_seed_cursor', 'aksmb_price_seed_done_gmt', 'aksmb_price_reconcile_cursor', 'aksmb_price_reconcile_done_gmt', 'aksmb_calc_contract_fingerprint', 'aksmb_freshness_summary', 'aksmb_uninstall_delete_data', ); foreach ( $aksmb_options as $aksmb_option ) { delete_option( $aksmb_option ); } // Dynamic progress / lock options (prefix match). // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'aksmb\\_ack\\_sync\\_coupon\\_%' OR option_name LIKE 'aksmb\\_adv\\_lock\\_%' OR option_name LIKE '\\_transient\\_aksmb\\_lock\\_%' OR option_name LIKE '\\_transient\\_timeout\\_aksmb\\_lock\\_%'" ); // Pairwise batch options (prefix match). $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'aksmb\\_pairwise\\_batch\\_plan\\_%' OR option_name LIKE 'aksmb\\_pairwise\\_batch\\_aggregate\\_%' OR option_name LIKE 'aksmb\\_pairwise\\_batch\\_pair\\_%' OR option_name LIKE 'aksmb\\_pairwise\\_batch\\_lock\\_%' OR option_name = 'aksmb_pairwise_batch_index' OR option_name = 'aksmb_pairwise_batch_latest'" ); // Activation grants these capabilities to both roles; delete-mode removes both. foreach ( array( 'administrator', 'shop_manager' ) as $aksmb_role_name ) { $aksmb_role = get_role( $aksmb_role_name ); if ( $aksmb_role ) { $aksmb_role->remove_cap( 'aksmb_manage' ); $aksmb_role->remove_cap( 'aksmb_acknowledge_loss_leader' ); $aksmb_role->remove_cap( 'aksmb_view_diagnostics' ); } }