Bump version v2.9.0#187
Conversation
…mponents Move the IntegrationInfo switch component in IntegInfo.jsx and the NewIntegs switch component in NewInteg.jsx out of render body into module-level memo() components, matching the IntegType pattern in EditInteg.jsx. Closure variables (integrationConf, location, integUrlName, allIntegURL, flow, setFlow) are now passed as props, fixing the react-hooks/static-components lint errors. Also: minor i18n comment and formatting fixes in MainWP RecordApiHelper and ChangelogToggle.
Add wp_cache_get/set to resolveTable() SHOW TABLES query to satisfy DirectDatabaseQuery.NoCaching, and add PluginCheck.Security.DirectDB.UnescapedDBParameter to the phpcs:ignore on the bookings and coupons dropdown queries.
There was a problem hiding this comment.
Code Review
This pull request bumps the plugin version to 2.9.0, updates the changelog and readme files, and introduces several improvements and bug fixes. Notably, it implements query caching for Webba Booking table resolution and refactors the frontend IntegInfo component by extracting and memoizing IntegrationInfo to optimize rendering. Additionally, various integration components are updated to pass configuration and loading props down to step-three components. The review feedback highlights a few key areas for improvement: removing duplicate entries in the customFormIntegrations array, caching a specific string like 'not_exists' instead of null in WordPress to avoid unreliable cache hits, and using optional chaining with a default fallback for integrationConf to prevent potential runtime crashes.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| 'WebbaBooking', | ||
| 'B2BKing', | ||
| 'FormyChat', | ||
| 'MainWP', | ||
| 'SureDash', | ||
| 'WpErp', | ||
| 'WpDataTables', | ||
| 'GiveWp', | ||
| 'SenseiLMS' |
There was a problem hiding this comment.
| $cached = wp_cache_get($cacheKey, 'bit-integrations'); | ||
| if ($cached !== false) { | ||
| return $cached; | ||
| } | ||
|
|
||
| global $wpdb; | ||
|
|
||
| $table = get_option('wbk_db_prefix', '') . $suffix; | ||
|
|
||
| // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- table existence check, result cached below | ||
| if ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $wpdb->esc_like($table))) !== $table) { | ||
| wp_cache_set($cacheKey, null, 'bit-integrations'); | ||
|
|
||
| return; | ||
| } |
There was a problem hiding this comment.
In WordPress, caching null with wp_cache_set can be unreliable because some object cache backends (such as Redis or Memcached) may treat null as a cache miss or return false (which is indistinguishable from a cache miss). To ensure that non-existent tables are reliably cached and do not trigger redundant database queries, consider caching a specific string like 'not_exists' instead.
$cached = wp_cache_get($cacheKey, 'bit-integrations');
if ($cached !== false) {
return $cached === 'not_exists' ? null : $cached;
}
global $wpdb;
$table = get_option('wbk_db_prefix', '') . $suffix;
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- table existence check, result cached below
if ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $wpdb->esc_like($table))) !== $table) {
wp_cache_set($cacheKey, 'not_exists', 'bit-integrations');
return null;
}| const IntegrationInfo = memo(({ integrationConf, location }) => { | ||
| switch (integrationConf.type) { |
There was a problem hiding this comment.
To prevent potential runtime crashes if integrationConf is null or undefined (for example, if the fetch fails or returns empty flow details), use optional chaining and provide a default object fallback.
| const IntegrationInfo = memo(({ integrationConf, location }) => { | |
| switch (integrationConf.type) { | |
| const IntegrationInfo = memo(({ integrationConf = {}, location }) => { | |
| switch (integrationConf?.type) { |
✅ WordPress Plugin Check Report
📊 ReportAll checks passed! No errors or warnings found. 🤖 Generated by WordPress Plugin Check Action • Learn more about Plugin Check |
Description
Release PR for v2.9.0. Registers 5 new Pro integrations (MainWP, Webba Booking, Sender, WSMS/WP SMS, Instasent) and 4 new MasterStudyLms actions in the frontend integration switchboards, completes
IntegrationStepThreeconditional-logic props across all 28 action root components, hoists nested switch components to module-levelmemo()to fix lint errors, and resolves plugin-check warnings in the Webba Booking controller. Also bumps the version, readme changelog, and in-app changelog UI.Motivation & Context
The v2.9.0 cycle added 5 new Pro integrations and 4 new MasterStudyLms actions whose backend/trigger code was already merged via feature branches. This PR wires them into the frontend integration switchboards (
IntegInfo,NewInteg,EditInteg), completes the conditional-logicIntegrationStepThreeprops so all actions support conditional execution, and fixes the two pre-existingreact-hooks/static-componentslint errors plus three plugin-check warnings flagged by WordPress Plugin Check.Related Links
Type of Change
Key Changes
Frontend — Integration registrations
IntegInfo.jsx,NewInteg.jsx, andEditInteg.jsxfor MainWP, Webba Booking, Sender, WSMS (WP SMS), Instasent, Ultimate Affiliate Pro, Bookly, FluentCart, and User Registration & Membership so the new integrations render in info/new/edit routes.IntegInfo.jsx(removed repeatedMoreConvertWishlistAuthorizationandWebbaBookingAuthorization).Frontend — Conditional logic support
IntegrationStepThreeacross 28 action root JSX files by addingdataConf,setDataConf, andformFieldsprops, enabling conditional logic on the Step 3 save screen for all integrations.Frontend — Lint fixes
IntegrationInfo(inIntegInfo.jsx) andNewIntegs(inNewInteg.jsx) from render-body functions to module-levelmemo()components, matching theIntegTypepattern inEditInteg.jsx. Closure variables are now passed as props, resolving bothreact-hooks/static-componentslint errors.Backend — Plugin-check fixes
wp_cache_get/wp_cache_settoWebbaBookingController::resolveTable()so theSHOW TABLESquery is cached per request, satisfyingDirectDatabaseQuery.NoCaching.PluginCheck.Security.DirectDB.UnescapedDBParameterto thephpcs:ignoreon the bookings and coupons dropdown queries inWebbaBookingController.Release
bitwpfi.php,Config.php, andreadme.txt(stable tag + "350+ platforms").readme.txtand updatedChangelogToggle.jsxwith the in-app changelog UI (release date, new triggers, new actions, bug fixes).Checklist
Changelog