query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . $submex_table ) ); } // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- no API deletes options by prefix. foreach ( array( '', '_transient_', '_transient_timeout_' ) as $submex_prefix ) { // Pro (submex_pro_, its gateways' submex_submex_) and add-ons (submex_cr_) share the prefix; their own uninstall removes what is theirs. $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s AND option_name NOT LIKE %s AND option_name NOT LIKE %s AND option_name NOT LIKE %s AND option_name <> %s", $wpdb->esc_like( $submex_prefix . 'submex_' ) . '%', $wpdb->esc_like( $submex_prefix . 'submex_pro_' ) . '%', $wpdb->esc_like( $submex_prefix . 'submex_cr_' ) . '%', $wpdb->esc_like( $submex_prefix . 'submex_submex_' ) . '%', 'submex_delete_data_on_uninstall' ) ); } // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching foreach ( array( 'submex_dismissed_notices', '_submex_fluentcrm_added_tags', '_submex_fluentcrm_added_lists' ) as $submex_user_meta ) { delete_metadata( 'user', 0, $submex_user_meta, '', true ); } if ( function_exists( 'as_unschedule_all_actions' ) ) { foreach ( array( 'submex_scheduled_renewal', 'submex_renewal_reminder', 'submex_reactivated_email', 'submex_sweep_overdue', 'submex_settle_paid_renewal', 'submex_resolve_pending_renewal', 'submex_daily_snapshot', 'submex_paypal_process_webhook' ) as $submex_action ) { // Hook alone: given a group as well, Action Scheduler only matches actions queued with no arguments. as_unschedule_all_actions( $submex_action ); } } // Pro and the add-ons read this when they are deleted, so it goes only with the last of them. $submex_extensions = array_filter( array_keys( get_plugins() ), static fn( string $file ): bool => in_array( basename( $file ), array( 'submex-pro.php', 'submex-content-restriction.php' ), true ) ); if ( ! $submex_extensions ) { delete_option( 'submex_delete_data_on_uninstall' ); } wp_cache_flush();