Skip to content

Bump version v2.8.0#141

Merged
RishadAlam merged 7 commits intomainfrom
fix/plugin-review-team-issues
Mar 16, 2026
Merged

Bump version v2.8.0#141
RishadAlam merged 7 commits intomainfrom
fix/plugin-review-team-issues

Conversation

@RishadAlam
Copy link
Member

No description provided.

Copilot AI review requested due to automatic review settings March 16, 2026 09:45
@gemini-code-assist
Copy link

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request primarily focuses on bumping the plugin version to 2.8.0 and delivering a set of significant improvements and bug fixes. It enhances existing integrations like ActiveCampaign and WooCommerce for greater stability and accuracy, while also expanding functionality with new triggers and actions for User Registration & Membership and NotificationX. Several critical bugs across various modules have been resolved to improve overall reliability.

Highlights

  • Version Bump: The plugin has been updated to version 2.8.0.
  • ActiveCampaign Tag Management: Enhanced ActiveCampaign integration to correctly remove existing tags before applying new ones, resolving a previous bug.
  • WooCommerce Order Item Stability: Improved WooCommerce trigger reliability by adding checks for empty order items and ensuring robust product data access.
  • New Integrations: Introduced new triggers and actions for User Registration & Membership and NotificationX.
  • Forminator Quiz & Poll Feature: Added lead data to Forminator Quiz & Poll trigger payloads.
  • Key Bug Fixes: Addressed critical issues in GoHighLevel (opportunity creation), FluentBooking (field setting consistency), and Webhook (payload field mapping).
Changelog
  • backend/Actions/ActiveCampaign/RecordApiHelper.php
    • Refactored tag handling logic to ensure existing tags are properly removed before new ones are added, and added translatable messages for tag removal status.
  • backend/Config.php
    • Updated the plugin's internal version constant to 2.8.0.
  • backend/Triggers/WC/WCHelper.php
    • Added a check for empty order items and improved product data retrieval to prevent errors when product objects are missing.
  • bitwpfi.php
    • Updated the plugin version in the main plugin file header and the BTCBI_VERSION define.
  • frontend/src/components/AllIntegrations/IntegrationHelpers/WebHook/Body.jsx
    • Implemented optional chaining for formFields to safely handle cases where form fields might be undefined during payload mapping.
  • frontend/src/components/Triggers/TriggerHelpers/FluentBookingHelper/FluentBookingCommonFunction.js
    • Adjusted the logic for fetching and setting FluentBooking fields to ensure consistent data flow, especially during trigger configuration.
  • frontend/src/pages/ChangelogToggle.jsx
    • Updated the in-app changelog data to reflect the new actions, triggers, features, and bug fixes introduced in version 2.8.0.
  • languages/bit-integrations.pot
    • Updated the translation template file to reflect the new plugin version and included new translatable strings for ActiveCampaign tag management messages.
  • readme.txt
    • Updated the stable tag to 2.8.0 and added the detailed changelog entry for the new version.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/plugin-check.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@RishadAlam RishadAlam merged commit fe1cd89 into main Mar 16, 2026
2 of 3 checks passed
Copy link

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

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 version to 2.8.0 and includes several bug fixes and improvements. Key changes include a fix for ActiveCampaign tag updates, added robustness in WooCommerce helpers, and a fix for a potential crash in the WebHook UI. My review includes suggestions to improve performance in the Active-Campaign integration, enhance code readability in the WooCommerce helper, and provide a more robust fix for the WebHook component to prevent runtime errors.

Comment on lines +143 to +148
foreach ($contactTags as $contactTag) {
HttpHelper::delete("{$this->_apiEndpoint}/contactTags/{$contactTag->id}", null, $this->_defaultHeader);
$result['tags_removed'][] = HttpHelper::$responseCode === 200
? __('Tag removed successfully', 'bit-integrations')
: __('Failed to remove tag', 'bit-integrations');
}

Choose a reason for hiding this comment

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

high

This loop makes an individual API request for each tag to be deleted. If a contact has a large number of tags, this can lead to poor performance and potentially hit API rate limits. While the ActiveCampaign API may not offer a bulk delete endpoint for contact tags, it's worth double-checking if a more efficient method is available.

Additionally, the code relies on a static property HttpHelper::$responseCode to check the status of the delete operation. This is not a robust pattern as static properties can introduce side effects. It would be better to use the return value from HttpHelper::delete() to determine the outcome of the request.

const formFields = useRecoilValue($formFields)
const formattedFormFields = useMemo(
() => formFields.map(field => ({ key: field.name, value: `\${${field.name}}` })),
() => formFields?.map(field => ({ key: field.name, value: `\${${field.name}}` })),

Choose a reason for hiding this comment

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

high

Using optional chaining (?.) is a good step to prevent errors when formFields is null or undefined. However, the default value for the $formFields atom is an empty object ({}), which is not an array and does not have a .map method. This will still cause a runtime error.

To make this more robust, you should check if formFields is an array before calling .map.

Suggested change
() => formFields?.map(field => ({ key: field.name, value: `\${${field.name}}` })),
() => (Array.isArray(formFields) ? formFields.map(field => ({ key: field.name, value: `\${${field.name}}` })) : []),

Comment on lines +271 to +272
'product_sku' => $product && $product->get_sku() ? $product->get_sku() : '',
'product_unit_price' => $product && $product->get_price() ? $product->get_price() : '',

Choose a reason for hiding this comment

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

medium

The added checks for the $product object are great for preventing fatal errors. However, the ternary expression can be simplified for better readability. Since get_sku() and get_price() return strings, you can make this more concise.

                'product_sku'        => $product ? $product->get_sku() : '',
                'product_unit_price' => $product ? $product->get_price() : '',

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR bumps the Bit Integrations plugin to v2.8.0 and updates release collateral (readme + in-app changelog), alongside routine frontend dependency lockfile updates and CI build workflow adjustments.

Changes:

  • Bump plugin version references to 2.8.0 and add the 2.8.0 changelog entry.
  • Update in-app changelog content and fix/adjust several integration-related behaviors (ActiveCampaign tag update flow, WooCommerce order item product access, FluentBooking fields handling, Webhook payload mapping safety).
  • Refresh pnpm-lock.yaml and update GitHub Actions workflow to use pnpm v9 + pnpm build.

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
readme.txt Updates stable tag to 2.8.0 and adds 2.8.0 changelog notes.
pnpm-lock.yaml Updates locked frontend dependency graph.
languages/bit-integrations.pot Updates POT metadata and adds new translatable strings.
frontend/src/resource/img/integ/voxel.webp Adds a new integration image asset.
frontend/src/pages/ChangelogToggle.jsx Updates the in-app changelog entries for the release.
frontend/src/components/Triggers/TriggerHelpers/FluentBookingHelper/FluentBookingCommonFunction.js Adjusts FluentBooking field fetching behavior.
frontend/src/components/AllIntegrations/IntegrationHelpers/WebHook/Body.jsx Adds null-safety to payload field mapping generation.
bitwpfi.php Bumps plugin header version and BTCBI_VERSION constant to 2.8.0.
backend/Triggers/WC/WCHelper.php Hardens WooCommerce line-item product access in order payloads.
backend/Config.php Bumps Config::VERSION to 2.8.0.
backend/Actions/ActiveCampaign/RecordApiHelper.php Refactors tag-update handling to remove existing tags before adding new ones.
.github/workflows/plugin-check.yml Pins pnpm v9 and switches build command to pnpm build.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

: __('Failed to remove tag', 'bit-integrations');
}
} else {
$result['tags_removed'] = __('No tags to remove', 'bit-integrations');
const formFields = useRecoilValue($formFields)
const formattedFormFields = useMemo(
() => formFields.map(field => ({ key: field.name, value: `\${${field.name}}` })),
() => formFields?.map(field => ({ key: field.name, value: `\${${field.name}}` })),
Comment on lines +5 to +12
"Project-Id-Version: Bit Integrations 2.7.12\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/bit-integrations\n"
"Last-Translator: developer@bitcode.pro\n"
"Language-Team: support@bitcode.pro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-03-07T09:14:31+00:00\n"
"POT-Creation-Date: 2026-03-13T05:59:46+00:00\n"
items: [
{
label: 'User Registration & Membership',
desc: '1 new events added',
desc: 'Fixed blank page issue and fieldmap disappearance issue.',
label: 'GoHighLevel',
desc: 'Fixed opportunity creation by sending the selected pipeline ID correctly.',
isPro: false
- NotificationX: 2 new events added (Pro)

- **New Actions**
- User Registration & Membership: 1 new events added (Pro)
Comment on lines +271 to +272
'product_sku' => $product && $product->get_sku() ? $product->get_sku() : '',
'product_unit_price' => $product && $product->get_price() ? $product->get_price() : '',
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.

3 participants