Skip to content

Bump version v2.9.0#187

Merged
RishadAlam merged 3 commits into
mainfrom
fix/plugin-review-team-issues
Jun 27, 2026
Merged

Bump version v2.9.0#187
RishadAlam merged 3 commits into
mainfrom
fix/plugin-review-team-issues

Conversation

@RishadAlam

Copy link
Copy Markdown
Member

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 IntegrationStepThree conditional-logic props across all 28 action root components, hoists nested switch components to module-level memo() 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-logic IntegrationStepThree props so all actions support conditional execution, and fixes the two pre-existing react-hooks/static-components lint errors plus three plugin-check warnings flagged by WordPress Plugin Check.

Related Links

Type of Change

  • 🐛 Bug fix
  • ✨ New feature
  • 💥 Breaking change
  • 📚 Documentation update
  • ⚡ Improvement
  • 🔄 Code refactor

Key Changes

Frontend — Integration registrations

  • Added missing case branches in IntegInfo.jsx, NewInteg.jsx, and EditInteg.jsx for 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.
  • Fixed duplicate lazy-import declarations in IntegInfo.jsx (removed repeated MoreConvertWishlistAuthorization and WebbaBookingAuthorization).

Frontend — Conditional logic support

  • Completed IntegrationStepThree across 28 action root JSX files by adding dataConf, setDataConf, and formFields props, enabling conditional logic on the Step 3 save screen for all integrations.

Frontend — Lint fixes

  • Hoisted IntegrationInfo (in IntegInfo.jsx) and NewIntegs (in NewInteg.jsx) from render-body functions to module-level memo() components, matching the IntegType pattern in EditInteg.jsx. Closure variables are now passed as props, resolving both react-hooks/static-components lint errors.

Backend — Plugin-check fixes

  • Added wp_cache_get/wp_cache_set to WebbaBookingController::resolveTable() so the SHOW TABLES query is cached per request, satisfying DirectDatabaseQuery.NoCaching.
  • Added PluginCheck.Security.DirectDB.UnescapedDBParameter to the phpcs:ignore on the bookings and coupons dropdown queries in WebbaBookingController.

Release

  • Bumped version to 2.9.0 in bitwpfi.php, Config.php, and readme.txt (stable tag + "350+ platforms").
  • Added v2.9.0 changelog entry to readme.txt and updated ChangelogToggle.jsx with the in-app changelog UI (release date, new triggers, new actions, bug fixes).

Checklist

  • Code follows project style guidelines
  • Self-review completed
  • Tests added/updated
  • Documentation updated if needed
  • README updated if needed

Changelog

  • New Triggers: MainWP — 12 new events added (Pro).
  • New Triggers: Webba Booking Calendar — 11 new events added (Pro).
  • New Triggers: WSMS (WP SMS) — 5 new events added (Pro).
  • New Actions: Webba Booking Calendar — 13 new events added (Pro).
  • New Actions: Sender — 9 new events added (Pro).
  • New Actions: MainWP — 8 new events added (Pro).
  • New Actions: WSMS (WP SMS) — 7 new events added (Pro).
  • New Actions: Instasent — 6 new events added (Pro).
  • New Actions: MasterStudyLms — 4 new events added (Pro).
  • Improvement: Conditional logic is now available on the Step 3 save screen across all action integrations.
  • Fix: Resolved lint errors and WordPress Plugin Check warnings in the Webba Booking controller.

…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.
@RishadAlam RishadAlam changed the title feat: register v2.9.0 integrations and complete conditional logic support Bump version v2.9.0 Jun 27, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +107 to +115
'WebbaBooking',
'B2BKing',
'FormyChat',
'MainWP',
'SureDash',
'WpErp',
'WpDataTables',
'GiveWp',
'SenseiLMS'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The array customFormIntegrations contains duplicate entries for 'B2BKing' and 'SureDash'. Removing these duplicates keeps the list clean and prevents any potential redundant processing or unexpected behavior.

  'WebbaBooking',
  'FormyChat',
  'MainWP',
  'WpErp',
  'WpDataTables',
  'GiveWp',
  'SenseiLMS'

Comment on lines +223 to 237
$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;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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;
        }

Comment on lines +216 to +217
const IntegrationInfo = memo(({ integrationConf, location }) => {
switch (integrationConf.type) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
const IntegrationInfo = memo(({ integrationConf, location }) => {
switch (integrationConf.type) {
const IntegrationInfo = memo(({ integrationConf = {}, location }) => {
switch (integrationConf?.type) {

@github-actions

Copy link
Copy Markdown

✅ WordPress Plugin Check Report

✅ Status: Passed

📊 Report

All checks passed! No errors or warnings found.


🤖 Generated by WordPress Plugin Check Action • Learn more about Plugin Check

@RishadAlam RishadAlam merged commit 4319cd0 into main Jun 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants