Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
e6190ad
fix: security vulnerabilities and improve error handling
RishadAlam Feb 14, 2026
d7c45fc
fix: security vulnerabilities in API helpers and admin components
RishadAlam Feb 14, 2026
50915cb
fix SQL injection vulnerabilities
RishadAlam Feb 14, 2026
72496b8
refactor: updated controllers, helpers, and route files for all integ…
RishadAlam Feb 14, 2026
016ced6
fix: filter hooks prefix
RishadAlam Feb 14, 2026
45a8ef6
fix: update GoogleSheet integration and remove OneClickCredentialCont…
RishadAlam Feb 14, 2026
3f3f2e4
Fix: Update composer namespace and add source code documentation
RishadAlam Feb 14, 2026
e482da7
fix: WordPress coding standards violations
RishadAlam Feb 16, 2026
1ca0341
chore: plugin check changes
RishadAlam Feb 16, 2026
41c1d4c
fix: plugin-check warnings and harden hook/query lint compliance
RishadAlam Feb 16, 2026
3f3778a
refactor: resolve Plugin Check DB warnings and refine PHPCS suppressions
RishadAlam Feb 16, 2026
7e811da
Normalize PHPCS DirectQuery suppression on cached lookup queries
RishadAlam Feb 16, 2026
79b2723
refactor: address redirect, debug-log, and slow-query lint warnings
RishadAlam Feb 16, 2026
bfbb1bb
chore: bump version to 2.7.8
RishadAlam Feb 16, 2026
f46cec5
refactor: update external services
RishadAlam Feb 16, 2026
2d0c4b2
feat: plugin check yml file added
RishadAlam Feb 16, 2026
5270f01
refactor: sanitize pro actions event hooks
RishadAlam Feb 16, 2026
d7e73ca
refactor: namespace updated
RishadAlam Feb 17, 2026
3fdcab1
refactor: pro triggers fetching filter hook updated
RishadAlam Feb 17, 2026
7ed09c6
fix: check trigger exist namespace issue
RishadAlam Feb 17, 2026
934f92b
fix: exec commands
RishadAlam Feb 17, 2026
f983a13
fix: bad webp files naming
RishadAlam Feb 17, 2026
ab7886f
fix: add translators comments and ordered placeholders for WP Plugin …
RishadAlam Feb 17, 2026
bbdfa57
refactor: restructure project to backend/frontend architecture
anisurov Feb 18, 2026
07c7fd1
refactor: cleanup deprecated code and improve version upgrade handling
abdul-kaioum Feb 18, 2026
b9950ee
fix: deprecreated prefix
RishadAlam Feb 18, 2026
cd22b5b
chore: added deprecated elements doc
RishadAlam Feb 18, 2026
35d160a
refactor: convert btcbi_ prefixed hooks, cache keys, and options to b…
RishadAlam Feb 19, 2026
544968a
docs: update deprecated.md with cache keys, missing hooks, and option…
RishadAlam Feb 19, 2026
3c15a21
fix build plugin path
RishadAlam Feb 19, 2026
f32190f
fix: plugin check issue fixed
RishadAlam Feb 19, 2026
de87962
fix: production build pot file issue
RishadAlam Feb 19, 2026
2ebfbad
fix: oaouth 2 redirect url issue fixed
RishadAlam Feb 19, 2026
25d0a7e
fix: sprintf import issue
RishadAlam Feb 19, 2026
de72737
refactor: readme updated
RishadAlam Feb 20, 2026
19e94fc
refactor: chengelog updated
RishadAlam Feb 20, 2026
f6b6c26
refactor: bubbyboss fetch group sql query
RishadAlam Feb 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
120 changes: 120 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
module.exports = {
env: {
browser: true,
es6: true,
commonjs: true
},
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parser: '@typescript-eslint/parser',
parserOptions: {
project: './tsconfig.json'
// sourceType: 'module',
// requireConfigFile: false,
// ecmaFeatures: {
// jsx: true
// },
// ecmaVersion: 8,
// sourceType: 'module',
// settings: {
// 'import/parsers': {
// '@typescript-eslint/parser': ['.ts', '.tsx','.js','.jsx']
// },
// 'import/resolver': {
// typescript: {},
// node: {
// extensions: ['.js', '.jsx', '.ts', '.tsx']
// }
// }
// }
},
extends: [
'eslint:recommended',
'plugin:prettier/recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
'plugin:import/errors',
'plugin:import/recommended',
'plugin:react/jsx-runtime',
'plugin:jsx-a11y/recommended',
'airbnb',
'prettier',
'plugin:json/recommended',
'plugin:storybook/recommended',
'plugin:cypress/recommended',
'prettier'
],
plugins: ['react', 'react-hooks', 'jsx-a11y', 'import', 'promise', 'cypress', 'prettier'],
ignorePatterns: ['vite.config.js', 'commitlint.config.js'],
rules: {
indent: 'off',
allowImplicit: 0,
semi: ['error', 'never'],
camelcase: 'error',
'react/require-default-props': [0, { functions: 'ignore' }],
'template-curly-spacing': 'off',
'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }],
'react/destructuring-assignment': 0,
'arrow-parens': 0,
'react/prop-types': 0,
'max-len': ['error', { code: 350 }],
'linebreak-style': ['error', 'unix'],
'react-hooks/exhaustive-deps': 'warn',
'react/jsx-uses-react': 'off',
'react/react-in-jsx-scope': 'off',
'object-curly-newline': [
'error',
{
ImportDeclaration: { consistent: true },
ExportDeclaration: { consistent: true },
ObjectPattern: { consistent: true },
ObjectExpression: { consistent: true }
}
],
'array-callback-return': 'off',
'consistent-return': 'off',
'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }],
'import/no-extraneous-dependencies': [
'error',
{ devDependencies: ['**/*.test.tsx', '**/*.test.ts'] }
],
'import/no-duplicates': 'error',
'import/no-self-import': 'error',
'import/no-relative-packages': 'error',
'import/no-relative-parent-imports': 'error',
'import/consistent-type-specifier-style': ['error', 'prefer-inline'],
'@typescript-eslint/consistent-type-imports': 'error',
'import/no-empty-named-blocks': 'error',
'import/no-extraneous-dependencies': 'error',
'import/no-import-module-exports': 'error',
'import/newline-after-import': 'error',
'import/no-useless-path-segments': ['error', { noUselessIndex: true }],
'@typescript-eslint/no-non-null-assertion': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/indent': 'off',
'@typescript-eslint/semi': 'off',
'prettier/prettier': [
'warn',
{
// "importOrder": [
// "^(^react$|@react|react)",
// "<THIRD_PARTY_MODULES>",
// "^@/(.*)$",
// "^[./]"
// ],
// "importOrderSeparation": true,
// "importOrderSortSpecifiers": true,
// ...require('./.prettierrc'),
}
],
'react/no-unknown-property': ['error', { ignore: ['css'] }],
'no-param-reassign': ['error', { props: true, ignorePropertyModificationsForRegex: ['(d|D)raft'] }]
// 'react/jsx-first-prop-new-line': [2, 'multiline'],
// 'react/jsx-max-props-per-line': [1, { maximum: 1, when: 'multiline' }],
// // 'react/jsx-indent-props': [0, 0],
// 'react/jsx-closing-bracket-location': [2, 'tag-aligned'],
// 'implicit-arrow-linebreak': [0, 'beside'],
}
}
6 changes: 2 additions & 4 deletions .github/build
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@ fi

composer i -o --no-dev --ignore-platform-reqs 2>&1 >/dev/null

cd "$PLUGIN_DIR/frontend-dev" && pnpm pda

cd "$PLUGIN_DIR"
cd "$PLUGIN_DIR" && pnpm pda

cp -r "$PLUGIN_DIR/assets" "$BUILD_DIR/assets"
cp -r "$PLUGIN_DIR/bitwpfi.php" "$BUILD_DIR/bitwpfi.php"
cp -r "$PLUGIN_DIR/build-hash.txt" "$BUILD_DIR/build-hash.txt"
cp -r "$PLUGIN_DIR/composer.json" "$BUILD_DIR/composer.json"
cp -r "$PLUGIN_DIR/includes" "$BUILD_DIR/includes"
cp -r "$PLUGIN_DIR/backend" "$BUILD_DIR/backend"
cp -r "$PLUGIN_DIR/languages" "$BUILD_DIR/languages"
cp -r "$PLUGIN_DIR/readme.txt" "$BUILD_DIR/readme.txt"
cp -r "$PLUGIN_DIR/vendor" "$BUILD_DIR/vendor"
Expand Down
9 changes: 4 additions & 5 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: 22
cache: "pnpm"
cache-dependency-path: "frontend-dev/pnpm-lock.yaml"
cache: 'pnpm'
cache-dependency-path: 'pnpm-lock.yaml'

- name: Get pnpm store directory
id: pnpm-cache
Expand All @@ -46,7 +46,6 @@ jobs:

- name: Install frontend dependencies
run: |
cd frontend-dev
pnpm install

- name: Check for SVN
Expand All @@ -64,7 +63,7 @@ jobs:
id: setup-php
uses: shivammathur/setup-php@v2
with:
php-version: "8.x"
php-version: '8.x'
tools: composer:v2, wp-cli

- name: Determine if this is a release or push
Expand Down Expand Up @@ -96,7 +95,7 @@ jobs:
env:
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
BUILD_DIR: "${{ github.workspace }}/build/${{ env.PLUGIN_SLUG }}"
BUILD_DIR: '${{ github.workspace }}/build/${{ env.PLUGIN_SLUG }}'
SLUG: ${{ env.PLUGIN_SLUG }}
- name: Upload release asset
if: steps.build-plugin.outputs.free_exists == 'true'
Expand Down
95 changes: 95 additions & 0 deletions .github/workflows/plugin-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: WordPress Plugin Check

on:
push:
branches:
- main
pull_request:
branches:
- main

env:
PLUGIN_SLUG: bit-integrations

jobs:
plugin-check:
name: Plugin Check
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: "8.1"
coverage: none
tools: composer:v2, wp-cli

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "dir=$(pnpm store path --silent)" >> $GITHUB_OUTPUT

- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Setup package cache
uses: actions/cache@v4
with:
path: |
${{ steps.pnpm-cache.outputs.dir }}
${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-plugin-check-${{ hashFiles('**/pnpm-lock.yaml', '**/composer.lock') }}
restore-keys: |
${{ runner.os }}-plugin-check-

- name: Install dependencies
run: |
composer install --prefer-dist --no-progress --no-dev --optimize-autoloader
pnpm install --frozen-lockfile

- name: Build plugin
run: |
pnpm production
bash .github/copy-assets

- name: WordPress Plugin Check
uses: wordpress/plugin-check-action@v1
with:
build-dir: "./build/${{ env.PLUGIN_SLUG }}"
exclude-directories: |
vendor
node_modules
categories: |
general
security
performance
accessibility
plugin_repo
checks: |
i18n_usage
late_escaping
plugin_header
plugin_readme
file_type
performant_wp_query_params
plugin_updater
enqueued_scripts_size
plugin_review_phpcs
trademarks
11 changes: 2 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
.idea
locale.pot
assets/
languages/

vendor/
node_modules

composer.lock
package-lock.json
pnpm-lock.yaml
yarn.lock
yarn-error.log

.php-cs-fixer.cache
build-hash.txt
build/
build/
.port
4 changes: 2 additions & 2 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
__DIR__ . '/vendor',
])
->in([
__DIR__ . '/includes',
__DIR__ . '/backend',
__DIR__ . '/views',
])
->ignoreVCSIgnored(true);
Expand Down Expand Up @@ -80,7 +80,7 @@
'multiline_whitespace_before_semicolons' => false,
'no_whitespace_before_comma_in_array' => true,
'native_function_casing' => true,
'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => false],
'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => false, 'exclude' => ['defined']],
'new_with_braces' => true,
'no_alias_language_construct_call' => true,
'no_alternative_syntax' => true,
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"search.useGlobalIgnoreFiles": false,
"search.useParentIgnoreFiles": false,
"prettier.enable": true,
"prettier.prettierPath": "frontend-dev/node_modules/prettier/index.cjs",
"prettier.prettierPath": "node_modules/prettier/index.cjs",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* ACPT Integration
*/

namespace BitCode\FI\Actions\ACPT;
namespace BitApps\Integrations\Actions\ACPT;

use BitCode\FI\Core\Util\HttpHelper;
use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;

/**
Expand Down Expand Up @@ -46,6 +46,7 @@ public function execute($integrationData, $fieldValues)
$module = $integrationDetails->module;

if (empty($fieldMap) || empty($module) || empty($apiKey) || empty($baseUrl)) {
// translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'ACPT'));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?php

namespace BitCode\FI\Actions\ACPT;
namespace BitApps\Integrations\Actions\ACPT;

use BitCode\FI\Core\Util\Common;
use BitCode\FI\Core\Util\Helper;
use BitApps\Integrations\Core\Util\Common;
use BitApps\Integrations\Core\Util\Helper;

class ACPTHelper
{
Expand Down Expand Up @@ -38,6 +38,7 @@ public static function cptValidateRequired($finalData)
if (empty($finalData[$key])) {
return [
'success' => false,
// translators: %s: Placeholder value
'message' => \sprintf(__('Required field %s is empty', 'bit-integrations'), $label),
'code' => 422,
];
Expand Down Expand Up @@ -129,6 +130,7 @@ public static function prepareTaxonomyData($finalData, $fieldValues, $integratio
public static function validateResponse($response)
{
return !$response
// translators: %s: Plugin name
? ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integration Pro')]
: $response;
}
Expand All @@ -144,6 +146,7 @@ private static function validateFields($requiredFields, $finalData)
if (empty($finalData[$key])) {
return [
'success' => false,
// translators: %s: Placeholder value
'message' => \sprintf(__('Required field %s is empty', 'bit-integrations'), $label),
'code' => 422,
];
Expand Down
Loading
Loading