Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions backend/Admin/Admin_Bar.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,22 @@ public function AdminAssets($current_screen)
wp_enqueue_script('MODULE' . Config::SLUG . '-index', $devUrl . '/main.jsx', [], Config::VERSION, true);
} else {
wp_enqueue_script('MODULE' . Config::SLUG . '-index', Config::get('ASSET_URI') . '/main.' . Config::VERSION . '.js', $deps, Config::VERSION, true);

$manifestPath = Config::get('BASEDIR') . 'assets/.vite/manifest.json';
if (file_exists($manifestPath)) {
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
$manifest = json_decode(file_get_contents($manifestPath), true);
if (!empty($manifest['main.jsx']['css'])) {

Choose a reason for hiding this comment

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

medium

The result of json_decode should be verified as an array before accessing its keys. If the manifest file is missing, unreadable, or contains invalid JSON, json_decode will return null. Attempting to access the main.jsx offset on a null value will trigger a TypeError in PHP 8.0+.

                if (is_array($manifest) && !empty($manifest['main.jsx']['css'])) {

foreach ($manifest['main.jsx']['css'] as $index => $cssFile) {
wp_enqueue_style(
Config::SLUG . '-main-' . $index,
Config::get('ASSET_URI') . '/' . $cssFile,
[],
Config::VERSION
);
}
}
}
}

if (!wp_script_is('wp-tinymce')) {
Expand Down
2 changes: 1 addition & 1 deletion backend/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class Config

public const VAR_PREFIX = 'bit_integrations_';

public const VERSION = '2.7.9';
public const VERSION = '2.7.10';

public const DB_VERSION = '1.1';

Expand Down
4 changes: 2 additions & 2 deletions bitwpfi.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Plugin Name: Bit Integrations
* Plugin URI: https://bitapps.pro/bit-integrations
* Description: Bit Integrations is a platform that integrates with over 300+ different platforms to help with various tasks on your WordPress site, like WooCommerce, Form builder, Page builder, LMS, Sales funnels, Bookings, CRM, Webhooks, Email marketing, Social media and Spreadsheets, etc
* Version: 2.7.9
* Version: 2.7.10
* Author: Automation & Integration Plugin - Bit Apps
* Author URI: https://bitapps.pro
* Text Domain: bit-integrations
Expand Down Expand Up @@ -33,7 +33,7 @@
*
* @deprecated 2.7.8 Use Config::VERSION instead.
*/
define('BTCBI_VERSION', '2.7.9');
define('BTCBI_VERSION', '2.7.10');
/**
* deprecated since version 2.7.8.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleCustomValue, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { $appConfigState } from '../../../GlobalStates'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import CustomField from './CustomField'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useState } from 'react'
import BackIcn from '../../../Icons/BackIcn'
import bitsFetch from '../../../Utils/bitsFetch'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import LoaderSm from '../../Loaders/LoaderSm'
import Note from '../../Utilities/Note'
import { refreshConvertKitForm } from './ConvertKitCommonFunc'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import bitsFetch from '../../../Utils/bitsFetch'
import { create } from 'mutative'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { addFieldMap, delFieldMap, handleCustomValue, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { $appConfigState } from '../../../GlobalStates'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { sortByField } from '../../../Utils/Helpers'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { addFieldMap, delFieldMap } from './IntegrationHelpers'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import TagifyInput from '../../Utilities/TagifyInput'
import {
addFieldMap,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useRecoilValue } from 'recoil'
import { useEffect } from 'react'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import MtInput from '../../Utilities/MtInput'
import TagifyInput from '../../Utilities/TagifyInput'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useRecoilValue } from 'recoil'
import { useEffect } from 'react'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import {
addFieldMap,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useRecoilValue } from 'recoil'
import { useEffect } from 'react'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { $appConfigState } from '../../../GlobalStates'
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/components/AllIntegrations/NewInteg.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,8 @@ export default function NewInteg({ allIntegURL }) {
if (!window.opener && !Object.keys(flow).length) {
navigate('/flow/new')
}
}, [flow, navigate])
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
Comment on lines +187 to +188

Choose a reason for hiding this comment

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

medium

Bypassing the exhaustive-deps rule by emptying the dependency array and using a lint suppression is risky. Since the effect logic depends on the flow state and the navigate function, they should be included in the dependency array to ensure the effect has access to the latest values. If the intention is to run this check only once on mount, including the dependencies is still safe as the condition !Object.keys(flow).length will simply evaluate to false on subsequent updates once the flow is populated.

  }, [flow, navigate])


const NewIntegs = () => {
switch (integUrlName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import CustomField from './CustomField'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import CustomField from './CustomField'
import { addFieldMap, delFieldMap, handleCustomValue, handleFieldMapping } from './IntegrationHelpers'
import TagifyInput from '../../Utilities/TagifyInput'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { useRecoilValue } from 'recoil'
import { $appConfigState } from '../../../GlobalStates'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import CustomField from './CustomField'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useRecoilValue } from 'recoil'
import { useEffect } from 'react'
import { __ } from '../../../Utils/i18nwrap'
import { __, sprintf } from '../../../Utils/i18nwrap'
import MtInput from '../../Utilities/MtInput'
import { addFieldMap, delFieldMap, handleFieldMapping } from './IntegrationHelpers'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Triggers/ActionHook.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import bitsFetch from '../../Utils/bitsFetch'
import CustomFetcherHelper, { resetActionHookFlowData } from '../../Utils/CustomFetcherHelper'
import GetLogo from '../../Utils/GetLogo'
import { extractValueFromPath } from '../../Utils/Helpers'
import { __ } from '../../Utils/i18nwrap'
import { __, sprintf } from '../../Utils/i18nwrap'
import hooklist from '../../Utils/StaticData/hooklist'
import LoaderSm from '../Loaders/LoaderSm'
import ConfirmModal from '../Utilities/ConfirmModal'
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Triggers/CustomTrigger.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { useRecoilState, useSetRecoilState } from 'recoil'
import { $flowStep, $formFields, $newFlow } from '../../GlobalStates'
import bitsFetch from '../../Utils/bitsFetch'
import CustomFetcherHelper, { resetActionHookFlowData } from '../../Utils/CustomFetcherHelper'
import { __ } from '../../Utils/i18nwrap'
import { __, sprintf } from '../../Utils/i18nwrap'
import Loader from '../Loaders/Loader'
import LoaderSm from '../Loaders/LoaderSm'
import CopyTextTrigger from '../Utilities/CopyTextTrigger'
Expand Down
71 changes: 17 additions & 54 deletions frontend/src/pages/ChangelogToggle.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,83 +48,46 @@ const changeLog = [
label: __('Improvements', 'bit-integrations'),
headClass: 'new-improvement',
itemClass: 'feature-list',
items: []
},
{
label: __('Bug Fixes', 'bit-integrations'),
headClass: 'fixes',
itemClass: 'fixes-list',
items: [
{
label: 'Refactor',
desc: 'Refactored integration controllers, routes, and helpers for cleaner namespace consistency.',
label: 'Blank page',
desc: 'Fixed blank page issue on integrations authorization screen across multiple integration field maps and triggers.',
isPro: false
},
{
label: 'Architecture',
desc: 'Restructured project to backend/frontend architecture for better code organization.',
label: 'Redirect',
desc: 'Fixed redirect issue after saving a new integration.',
isPro: false
},
{
label: 'Cleanup',
desc: 'Cleaned up deprecated code and improved version upgrade handling with prefix consistency.',
label: 'Style Breaks',
desc: 'Fixed style issue in the admin bar.',
isPro: false
},
{
label: 'Stability',
desc: 'Refined redirect, debug-log, slow-query lint issues and updated Google Sheets integration handling.',
isPro: false
},
{
label: 'Authentication',
desc: 'Fixed OAuth2 redirect URL issues and resolved namespace issues in trigger checks for improved reliability.',
isPro: false
label: 'Triggers Loading',
desc: 'Fixed active triggers loading issue',
isPro: true
}
]
},
{
label: __('Bug Fixes', 'bit-integrations'),
headClass: 'fixes',
itemClass: 'fixes-list',
items: []
},
{
label: __('Security', 'bit-integrations'),
headClass: 'fixes',
itemClass: 'fixes-list',
items: [
{
label: 'Vulnerability Fixes',
desc: 'Fixed SQL injection vulnerabilities and hardened API helpers and admin components.',
isPro: false
},
{
label: 'Query Safety',
desc: 'Improved SQL query handling with better placeholder usage and defensive checks across integrations.',
isPro: false
}
]
items: []
},
{
label: __('Compatibility & Compliance', 'bit-integrations'),
headClass: 'new-improvement',
itemClass: 'feature-list',
items: [
{
label: 'WordPress Standards',
desc: 'Resolved WPCS and Plugin Check warnings, including hook/query compliance updates.',
isPro: false
},
{
label: 'Query Suppression',
desc: 'Normalized cached lookup/direct query suppression handling to align with current checks.',
isPro: false
},
{
label: 'Plugin Check',
desc: 'Added translators comments and ordered placeholders for WP Plugin Check compliance.',
isPro: false
},
{
label: 'Translation Support',
desc: 'Fixed production build POT file generation issues for better translation support.',
isPro: false
}
]
items: []
}
]

Expand Down
11 changes: 10 additions & 1 deletion readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Tags: automation, automator, google sheets connector, zapier, WooCommerce Integr
Requires at least: 5.1
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 2.7.9
Stable tag: 2.7.10
License: GPLv2 or later

Perfect Automation and integration plugin: Connect 300+ platforms and automate CRM, Email marketing tools, Google Sheets, Contact forms, LMS and more
Expand Down Expand Up @@ -718,6 +718,15 @@ Bit Integrations follows WordPress coding standards and best practices to ensure

== Changelog ==

= 2.7.9 - 2.7.10 =
_Release Date - 23rd February 2026_

- **Bug Fixes**
- Fixed blank page issue on integrations authorization screen across multiple integration field maps and triggers.
- Fixed redirect issue after saving a new integration.
- Fixed style issue in the admin bar.
- Fixed active triggers loading issue (Pro).

= 2.7.8 =
_Release Date - 20th February 2026_

Expand Down
Loading
Loading