diff --git a/.github/workflows/plugin-check.yml b/.github/workflows/plugin-check.yml
new file mode 100644
index 000000000..f88d2c71f
--- /dev/null
+++ b/.github/workflows/plugin-check.yml
@@ -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
diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index c25aafb6f..ca7f99e64 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -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,
diff --git a/bitwpfi.php b/bitwpfi.php
index 9ee69c3ad..85f07a808 100644
--- a/bitwpfi.php
+++ b/bitwpfi.php
@@ -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.7
+ * Version: 2.7.8
* Author: Automation & Integration Plugin - Bit Apps
* Author URI: https://bitapps.pro
* Text Domain: bit-integrations
@@ -24,7 +24,7 @@
$btcbi_db_version = '1.1';
// Define most essential constants.
-define('BTCBI_VERSION', '2.7.7');
+define('BTCBI_VERSION', '2.7.8');
define('BTCBI_PLUGIN_MAIN_FILE', __FILE__);
require_once plugin_dir_path(__FILE__) . 'includes/loader.php';
diff --git a/composer.json b/composer.json
index 9364ae75a..fc1a07b1f 100644
--- a/composer.json
+++ b/composer.json
@@ -4,7 +4,7 @@
"license": "GPL-2.0-or-later",
"autoload": {
"psr-4": {
- "BitCode\\FI\\": "includes/"
+ "BitApps\\Integrations\\": "includes/"
}
},
"require-dev": {
diff --git a/external-services.md b/external-services.md
new file mode 100644
index 000000000..7e4f94766
--- /dev/null
+++ b/external-services.md
@@ -0,0 +1,2260 @@
+# External Services Documentation
+
+Bit Integrations connects to various third-party external services to enable automation workflows between WordPress and 300+ platforms. This document provides comprehensive information about all external services used by this plugin, including what data is sent, when it's sent, and links to each service's terms of service and privacy policies.
+
+**Important**: Data is only sent to external services when you actively configure and enable an integration. No data is transmitted unless you explicitly create a workflow that connects to a specific service.
+
+---
+
+## Table of Contents
+
+- [Google Services](#google-services)
+- [Zoho Services](#zoho-services)
+- [Meta (Facebook) Services](#meta-facebook-services)
+- [Email Marketing Services](#email-marketing-services)
+- [CRM Services](#crm-services)
+- [Project Management Services](#project-management-services)
+- [Communication Services](#communication-services)
+- [Storage Services](#storage-services)
+- [Automation Platform Services](#automation-platform-services)
+- [Learning Management Systems](#learning-management-systems)
+- [E-commerce Services](#e-commerce-services)
+- [Marketing Automation Services](#marketing-automation-services)
+- [Other Third-Party Services](#other-third-party-services)
+
+---
+
+## Google Services
+
+### Google Sheets
+
+**Service URL**: `https://sheets.googleapis.com/` and `https://oauth2.googleapis.com/`
+
+**What it does**: Enables syncing form submissions, WooCommerce orders, user registrations, and other WordPress data to Google Sheets spreadsheets.
+
+**Data sent**:
+
+- User-configured field mappings (name, email, custom fields, etc.)
+- OAuth credentials for authentication
+- Spreadsheet IDs and worksheet names
+- Data is sent when a configured trigger event occurs (e.g., form submission, new order)
+
+**When data is sent**: When a workflow is triggered based on configured events (form submissions, purchases, registrations, etc.).
+
+**Terms of Service**: [Google Terms of Service](https://policies.google.com/terms)
+**Privacy Policy**: [Google Privacy Policy](https://policies.google.com/privacy)
+
+---
+
+### Google Calendar
+
+**Service URL**: `https://www.googleapis.com/calendar/` and `https://oauth2.googleapis.com/`
+
+**What it does**: Creates calendar events automatically when WordPress actions occur (bookings, registrations, etc.).
+
+**Data sent**:
+
+- Event details (title, description, date/time, location)
+- OAuth credentials for authentication
+- User email addresses for event invitations
+- Data is sent when a configured trigger occurs
+
+**When data is sent**: When a workflow is triggered based on configured events.
+
+**Terms of Service**: [Google Terms of Service](https://policies.google.com/terms)
+**Privacy Policy**: [Google Privacy Policy](https://policies.google.com/privacy)
+
+---
+
+### Google Drive
+
+**Service URL**: `https://www.googleapis.com/drive/` and `https://oauth2.googleapis.com/`
+
+**What it does**: Uploads files from WordPress forms, media library, or other sources to Google Drive folders.
+
+**Data sent**:
+
+- File contents and metadata
+- OAuth credentials for authentication
+- Folder IDs and file names
+- Data is sent when file upload workflows are triggered
+
+**When data is sent**: When a workflow with file upload is triggered.
+
+**Terms of Service**: [Google Terms of Service](https://policies.google.com/terms)
+**Privacy Policy**: [Google Privacy Policy](https://policies.google.com/privacy)
+
+---
+
+### Google Contacts
+
+**Service URL**: `https://people.googleapis.com/` and `https://oauth2.googleapis.com/`
+
+**What it does**: Syncs contact information from WordPress to Google Contacts.
+
+**Data sent**:
+
+- Contact details (names, emails, phone numbers, addresses)
+- OAuth credentials for authentication
+- Custom fields as configured
+- Data is sent when contact-related workflows are triggered
+
+**When data is sent**: When a workflow is triggered based on configured events.
+
+**Terms of Service**: [Google Terms of Service](https://policies.google.com/terms)
+**Privacy Policy**: [Google Privacy Policy](https://policies.google.com/privacy)
+
+---
+
+## Zoho Services
+
+### Zoho CRM
+
+**Service URL**: `https://www.zohoapis.{dataCenter}/crm/`
+
+**What it does**: Syncs leads, contacts, deals, and other CRM data from WordPress to Zoho CRM.
+
+**Data sent**:
+
+- Contact information (name, email, phone, address)
+- Custom field data as configured in workflows
+- Lead and deal information
+- OAuth credentials for authentication
+- Data is sent when configured trigger events occur
+
+**When data is sent**: When workflows are triggered based on form submissions, purchases, or other configured events.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Campaigns
+
+**Service URL**: `https://campaigns.zoho.{dataCenter}/`
+
+**What it does**: Adds subscribers to email marketing lists in Zoho Campaigns.
+
+**Data sent**:
+
+- Subscriber information (email, name, custom fields)
+- List IDs and contact preferences
+- Authentication tokens
+- Data is sent when subscription workflows are triggered
+
+**When data is sent**: When users opt-in via forms or other configured triggers.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Desk
+
+**Service URL**: `https://desk.zoho.{dataCenter}/`
+
+**What it does**: Creates support tickets in Zoho Desk from WordPress forms or other sources.
+
+**Data sent**:
+
+- Ticket details (subject, description, priority)
+- Contact information (name, email)
+- File attachments when configured
+- Department and organization IDs
+- Authentication tokens
+
+**When data is sent**: When ticket creation workflows are triggered.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Sheet
+
+**Service URL**: `https://sheet.zoho.{dataCenter}/`
+
+**What it does**: Syncs data from WordPress to Zoho Sheet spreadsheets.
+
+**Data sent**:
+
+- User-configured field mappings
+- Spreadsheet and worksheet identifiers
+- Authentication tokens
+- Data records based on trigger events
+
+**When data is sent**: When configured workflow triggers occur.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Bigin
+
+**Service URL**: `https://www.zohoapis.{dataCenter}/bigin/`
+
+**What it does**: Syncs pipeline and contact data to Zoho Bigin CRM.
+
+**Data sent**:
+
+- Contact and company information
+- Pipeline and deal data
+- Custom fields as configured
+- Authentication tokens
+
+**When data is sent**: When CRM sync workflows are triggered.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Marketing Hub
+
+**Service URL**: `https://marketinghub.zoho.{dataCenter}/`
+
+**What it does**: Manages leads and email subscribers in Zoho Marketing Hub.
+
+**Data sent**:
+
+- Lead information (name, email, custom fields)
+- List subscriptions
+- Authentication tokens
+
+**When data is sent**: When lead generation workflows are triggered.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Recruit
+
+**Service URL**: `https://recruit.zoho.{dataCenter}/`
+
+**What it does**: Manages candidate applications and job postings.
+
+**Data sent**:
+
+- Candidate information (resume, contact details)
+- Job application data
+- File attachments (resumes, documents)
+- Authentication tokens
+
+**When data is sent**: When recruitment workflows are triggered.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+### Zoho Flow
+
+**Service URL**: `https://flow.zoho.{dataCenter}/`
+
+**What it does**: Triggers automation workflows in Zoho Flow.
+
+**Data sent**:
+
+- Webhook payload data as configured
+- Trigger event information
+- Authentication data
+
+**When data is sent**: When configured trigger events occur in WordPress.
+
+**Terms of Service**: [Zoho Terms of Service](https://www.zoho.com/terms.html)
+**Privacy Policy**: [Zoho Privacy Policy](https://www.zoho.com/privacy.html)
+
+---
+
+## Meta (Facebook) Services
+
+### WhatsApp Business API
+
+**Service URL**: `https://graph.facebook.com/v20.0/`
+
+**What it does**: Sends WhatsApp messages to users via WhatsApp Business API.
+
+**Data sent**:
+
+- Phone numbers
+- Message content and templates
+- Business Account IDs
+- Access tokens for authentication
+- Data is sent when messaging workflows are triggered
+
+**When data is sent**: When configured trigger events occur (form submissions, order confirmations, etc.).
+
+**Terms of Service**: [Meta Terms of Service](https://www.facebook.com/terms.php)
+**Privacy Policy**: [Meta Privacy Policy](https://www.facebook.com/privacy/policy/)
+**WhatsApp Business Terms**: [WhatsApp Business Terms](https://www.whatsapp.com/legal/business-terms)
+
+---
+
+## Email Marketing Services
+
+### Mailchimp
+
+**Service URL**: `https://{{dc}}.api.mailchimp.com/`
+
+**What it does**: Manages email subscribers and audience lists in Mailchimp.
+
+**Data sent**:
+
+- Subscriber information (email, name, custom merge fields)
+- List IDs and audience segments
+- Tag assignments
+- API keys for authentication
+
+**When data is sent**: When users subscribe via forms or other configured triggers.
+
+**Terms of Service**: [Mailchimp Terms of Use](https://mailchimp.com/legal/terms/)
+**Privacy Policy**: [Mailchimp Privacy Policy](https://mailchimp.com/legal/privacy/)
+
+---
+
+### ActiveCampaign
+
+**Service URL**: Account-specific URL (e.g., `https://account.api-us1.com/`)
+
+**What it does**: Manages contacts, lists, and automation in ActiveCampaign.
+
+**Data sent**:
+
+- Contact information (email, name, phone, address)
+- Custom field data
+- List subscriptions and tags
+- API credentials
+
+**When data is sent**: When contact management workflows are triggered.
+
+**Terms of Service**: [ActiveCampaign Terms of Service](https://www.activecampaign.com/legal/terms-of-service)
+**Privacy Policy**: [ActiveCampaign Privacy Policy](https://www.activecampaign.com/legal/privacy-policy)
+
+---
+
+### SendinBlue (Brevo)
+
+**Service URL**: `https://api.sendinblue.com/` or `https://api.brevo.com/`
+
+**What it does**: Manages email contacts and sends transactional emails.
+
+**Data sent**:
+
+- Contact details (email, name, attributes)
+- List IDs
+- Email content for transactional emails
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Brevo Terms and Conditions](https://www.brevo.com/legal/termsofuse/)
+**Privacy Policy**: [Brevo Privacy Policy](https://www.brevo.com/legal/privacypolicy/)
+
+---
+
+### MailerLite
+
+**Service URL**: `https://api.mailerlite.com/`
+
+**What it does**: Manages subscribers and email campaigns in MailerLite.
+
+**Data sent**:
+
+- Subscriber information (email, name, custom fields)
+- Group assignments
+- API keys for authentication
+
+**When data is sent**: When subscription workflows are triggered.
+
+**Terms of Service**: [MailerLite Terms of Service](https://www.mailerlite.com/legal/terms-of-service)
+**Privacy Policy**: [MailerLite Privacy Policy](https://www.mailerlite.com/legal/privacy-policy)
+
+---
+
+### ConvertKit
+
+**Service URL**: `https://api.convertkit.com/`
+
+**What it does**: Manages email subscribers and automation sequences.
+
+**Data sent**:
+
+- Subscriber email addresses and names
+- Tag and form IDs
+- Custom field data
+- API keys and secrets
+
+**When data is sent**: When email opt-in workflows are triggered.
+
+**Terms of Service**: [ConvertKit Terms of Service](https://convertkit.com/terms)
+**Privacy Policy**: [ConvertKit Privacy Policy](https://convertkit.com/privacy)
+
+---
+
+### GetResponse
+
+**Service URL**: `https://api.getresponse.com/`
+
+**What it does**: Manages email contacts and marketing campaigns.
+
+**Data sent**:
+
+- Contact information (email, name, custom fields)
+- Campaign and list assignments
+- API keys
+
+**When data is sent**: When marketing automation workflows are triggered.
+
+**Terms of Service**: [GetResponse Terms of Service](https://www.getresponse.com/legal/terms-of-service)
+**Privacy Policy**: [GetResponse Privacy Policy](https://www.getresponse.com/legal/privacy)
+
+---
+
+### Klaviyo
+
+**Service URL**: `https://a.klaviyo.com/`
+
+**What it does**: Manages customer profiles and email/SMS marketing for e-commerce.
+
+**Data sent**:
+
+- Customer profiles (email, phone, name)
+- Purchase history and order data
+- Custom properties
+- List memberships
+- API keys
+
+**When data is sent**: When e-commerce or marketing workflows are triggered.
+
+**Terms of Service**: [Klaviyo Terms of Service](https://www.klaviyo.com/legal/terms-of-service)
+**Privacy Policy**: [Klaviyo Privacy Policy](https://www.klaviyo.com/legal/privacy)
+
+---
+
+### SendGrid
+
+**Service URL**: `https://api.sendgrid.com/`
+
+**What it does**: Sends transactional and marketing emails via SendGrid.
+
+**Data sent**:
+
+- Email addresses (sender and recipients)
+- Email content (subject, body, attachments)
+- API keys for authentication
+
+**When data is sent**: When email sending workflows are triggered.
+
+**Terms of Service**: [SendGrid Terms of Service](https://www.twilio.com/legal/tos)
+**Privacy Policy**: [SendGrid Privacy Policy](https://www.twilio.com/legal/privacy)
+
+---
+
+### Moosend
+
+**Service URL**: `https://api.moosend.com/`
+
+**What it does**: Manages email subscribers and marketing automation.
+
+**Data sent**:
+
+- Subscriber details (email, name, custom fields)
+- Mailing list IDs
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Moosend Terms of Service](https://moosend.com/terms/)
+**Privacy Policy**: [Moosend Privacy Policy](https://moosend.com/privacy-policy/)
+
+---
+
+### Omnisend
+
+**Service URL**: `https://api.omnisend.com/`
+
+**What it does**: Manages e-commerce email and SMS marketing.
+
+**Data sent**:
+
+- Contact information (email, phone)
+- Purchase data and order history
+- Custom properties
+- API keys
+
+**When data is sent**: When e-commerce marketing workflows are triggered.
+
+**Terms of Service**: [Omnisend Terms of Use](https://www.omnisend.com/terms-of-use/)
+**Privacy Policy**: [Omnisend Privacy Policy](https://www.omnisend.com/privacy/)
+
+---
+
+### Drip
+
+**Service URL**: `https://api.getdrip.com/`
+
+**What it does**: Manages subscribers and e-commerce marketing automation.
+
+**Data sent**:
+
+- Subscriber information (email, name, tags)
+- E-commerce events and order data
+- Custom fields
+- API tokens
+
+**When data is sent**: When marketing automation workflows are triggered.
+
+**Terms of Service**: [Drip Terms of Service](https://www.drip.com/terms)
+**Privacy Policy**: [Drip Privacy Policy](https://www.drip.com/privacy)
+
+---
+
+### Sendy
+
+**Service URL**: User's self-hosted installation URL
+
+**What it does**: Manages email subscribers in self-hosted Sendy installations.
+
+**Data sent**:
+
+- Subscriber email addresses and names
+- List IDs
+- Custom fields
+- API keys
+
+**When data is sent**: When subscription workflows are triggered.
+
+**Terms of Service**: Varies by installation
+**Privacy Policy**: Varies by installation
+
+---
+
+### MailPoet
+
+**Service URL**: `https://api.mailpoet.com/` (for sending service)
+
+**What it does**: Manages email subscribers within WordPress using MailPoet plugin.
+
+**Data sent**:
+
+- Subscriber information (email, name, custom fields)
+- List subscriptions
+- Sending service data (when using MailPoet Sending Service)
+
+**When data is sent**: When subscription workflows are triggered; email content sent when using MailPoet Sending Service.
+
+**Terms of Service**: [MailPoet Terms of Service](https://www.mailpoet.com/terms/)
+**Privacy Policy**: [MailPoet Privacy Policy](https://www.mailpoet.com/privacy-notice/)
+
+---
+
+### SendPulse
+
+**Service URL**: `https://api.sendpulse.com/`
+
+**What it does**: Manages multi-channel marketing (email, SMS, web push).
+
+**Data sent**:
+
+- Contact information (email, phone, name)
+- Mailing list data
+- Custom variables
+- API credentials
+
+**When data is sent**: When multi-channel marketing workflows are triggered.
+
+**Terms of Service**: [SendPulse Terms of Service](https://sendpulse.com/legal/termsofuse)
+**Privacy Policy**: [SendPulse Privacy Policy](https://sendpulse.com/legal/privacy)
+
+---
+
+### Acumbamail
+
+**Service URL**: `https://acumbamail.com/api/`
+
+**What it does**: Manages email marketing campaigns and subscribers.
+
+**Data sent**:
+
+- Subscriber data (email, name, custom fields)
+- List assignments
+- API authentication tokens
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Acumbamail Terms](https://acumbamail.com/terminos-condiciones/)
+**Privacy Policy**: [Acumbamail Privacy Policy](https://acumbamail.com/politica-privacidad/)
+
+---
+
+### EmailOctopus
+
+**Service URL**: `https://emailoctopus.com/api/`
+
+**What it does**: Manages email lists and campaigns.
+
+**Data sent**:
+
+- Email addresses and contact details
+- List IDs
+- Custom fields
+- API keys
+
+**When data is sent**: When subscriber management workflows are triggered.
+
+**Terms of Service**: [EmailOctopus Terms of Service](https://emailoctopus.com/legal/terms)
+**Privacy Policy**: [EmailOctopus Privacy Policy](https://emailoctopus.com/legal/privacy)
+
+---
+
+### BenchMark
+
+**Service URL**: `https://clientapi.benchmarkemail.com/`
+
+**What it does**: Manages email contacts and marketing campaigns.
+
+**Data sent**:
+
+- Contact information (email, name, fields)
+- List subscriptions
+- API credentials
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Benchmark Terms of Service](https://www.benchmarkemail.com/terms-of-service/)
+**Privacy Policy**: [Benchmark Privacy Policy](https://www.benchmarkemail.com/privacy-policy/)
+
+---
+
+### ElasticEmail
+
+**Service URL**: `https://api.elasticemail.com/`
+
+**What it does**: Sends emails and manages email contacts.
+
+**Data sent**:
+
+- Email content and addresses
+- Contact list data
+- API keys
+
+**When data is sent**: When email sending workflows are triggered.
+
+**Terms of Service**: [Elastic Email Terms of Service](https://elasticemail.com/resources/usage-policies/terms-of-use/)
+**Privacy Policy**: [Elastic Email Privacy Policy](https://elasticemail.com/resources/usage-policies/privacy-policy/)
+
+---
+
+## CRM Services
+
+### HubSpot
+
+**Service URL**: `https://api.hubapi.com/`
+
+**What it does**: Manages contacts, companies, deals, and tickets in HubSpot CRM.
+
+**Data sent**:
+
+- Contact information (email, name, phone, address)
+- Company and deal data
+- Custom properties
+- Activity and engagement data
+- API keys or OAuth tokens
+
+**When data is sent**: When CRM workflows are triggered by form submissions, purchases, or other events.
+
+**Terms of Service**: [HubSpot Terms of Service](https://legal.hubspot.com/terms-of-service)
+**Privacy Policy**: [HubSpot Privacy Policy](https://legal.hubspot.com/privacy-policy)
+
+---
+
+### Salesforce
+
+**Service URL**: Account-specific (e.g., `https://yourinstance.salesforce.com/`)
+
+**What it does**: Manages leads, contacts, opportunities, and custom objects in Salesforce.
+
+**Data sent**:
+
+- Lead and contact information
+- Opportunity and account data
+- Custom object data
+- OAuth credentials
+
+**When data is sent**: When Salesforce integration workflows are triggered.
+
+**Terms of Service**: [Salesforce Terms of Service](https://www.salesforce.com/company/legal/agreements/)
+**Privacy Policy**: [Salesforce Privacy Policy](https://www.salesforce.com/company/privacy/)
+
+---
+
+### Pipedrive
+
+**Service URL**: `https://api.pipedrive.com/`
+
+**What it does**: Manages deals, contacts, and organizations in Pipedrive CRM.
+
+**Data sent**:
+
+- Contact and organization details
+- Deal information and pipeline data
+- Custom fields
+- API tokens
+
+**When data is sent**: When CRM sync workflows are triggered.
+
+**Terms of Service**: [Pipedrive Terms of Service](https://www.pipedrive.com/en/terms-of-service/us)
+**Privacy Policy**: [Pipedrive Privacy Policy](https://www.pipedrive.com/en/privacy)
+
+---
+
+### Insightly
+
+**Service URL**: `https://api.insightly.com/` or regional variants
+
+**What it does**: Manages contacts, organizations, and opportunities in Insightly CRM.
+
+**Data sent**:
+
+- Contact and organization data
+- Opportunity information
+- Custom fields
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Insightly Terms of Service](https://www.insightly.com/terms-of-service)
+**Privacy Policy**: [Insightly Privacy Policy](https://www.insightly.com/privacy-policy)
+
+---
+
+### CapsuleCRM
+
+**Service URL**: `https://api.capsulecrm.com/`
+
+**What it does**: Manages contacts and sales opportunities in Capsule CRM.
+
+**Data sent**:
+
+- Contact information (name, email, address)
+- Opportunity and case data
+- Tags and custom fields
+- API tokens
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Capsule CRM Terms](https://capsulecrm.com/terms/)
+**Privacy Policy**: [Capsule CRM Privacy Policy](https://capsulecrm.com/privacy/)
+
+---
+
+### Copper CRM
+
+**Service URL**: `https://api.copper.com/`
+
+**What it does**: Manages people, companies, and opportunities in Copper CRM.
+
+**Data sent**:
+
+- Person and company information
+- Opportunity and project data
+- Custom fields
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Copper Terms of Service](https://www.copper.com/terms)
+**Privacy Policy**: [Copper Privacy Policy](https://www.copper.com/privacy)
+
+---
+
+### FreshSales (Freshworks CRM)
+
+**Service URL**: Account-specific (e.g., `https://domain.myfreshworks.com/crm/sales/`)
+
+**What it does**: Manages leads, contacts, accounts, and deals in Freshsales CRM.
+
+**Data sent**:
+
+- Lead and contact details
+- Account and deal information
+- Custom fields
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Freshworks Terms of Service](https://www.freshworks.com/terms/)
+**Privacy Policy**: [Freshworks Privacy Policy](https://www.freshworks.com/privacy/)
+
+---
+
+### Salesmate
+
+**Service URL**: `https://apis.salesmate.io/`
+
+**What it does**: Manages contacts, companies, and deals in Salesmate CRM.
+
+**Data sent**:
+
+- Contact and company information
+- Deal and activity data
+- Custom fields
+- API credentials
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Salesmate Terms of Service](https://www.salesmate.io/terms-of-service/)
+**Privacy Policy**: [Salesmate Privacy Policy](https://www.salesmate.io/privacy-policy/)
+
+---
+
+### Salesflare
+
+**Service URL**: `https://api.salesflare.com/`
+
+**What it does**: Manages contacts, accounts, and opportunities in Salesflare CRM.
+
+**Data sent**:
+
+- Contact and account information
+- Opportunity data
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Salesflare Terms](https://salesflare.com/terms)
+**Privacy Policy**: [Salesflare Privacy](https://salesflare.com/privacy)
+
+---
+
+### Agiled CRM
+
+**Service URL**: `https://app.agiled.app/` and API endpoints
+
+**What it does**: Manages contacts, deals, and projects in Agiled CRM.
+
+**Data sent**:
+
+- Contact and company information
+- Deal and project data
+- Custom fields
+- API tokens
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Agiled Terms](https://agiled.app/terms-and-conditions)
+**Privacy Policy**: [Agiled Privacy Policy](https://agiled.app/privacy-policy)
+
+---
+
+### Nimble
+
+**Service URL**: `https://api.nimble.com/`
+
+**What it does**: Manages contacts and relationships in Nimble CRM.
+
+**Data sent**:
+
+- Contact information
+- Notes and activities
+- Tags and custom fields
+- OAuth credentials
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Nimble Terms of Service](https://www.nimble.com/terms-of-service/)
+**Privacy Policy**: [Nimble Privacy Policy](https://www.nimble.com/privacy-policy/)
+
+---
+
+### OneHashCRM
+
+**Service URL**: User's self-hosted or cloud instance URL
+
+**What it does**: Manages leads, contacts, and deals in OneHash CRM.
+
+**Data sent**:
+
+- Lead and contact data
+- Deal information
+- Custom fields
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [OneHash Terms](https://onehash.ai/terms)
+**Privacy Policy**: [OneHash Privacy Policy](https://onehash.ai/privacy-policy)
+
+---
+
+### NutshellCRM
+
+**Service URL**: `https://api.nutshell.com/`
+
+**What it does**: Manages contacts, leads, and sales processes in Nutshell CRM.
+
+**Data sent**:
+
+- Contact and company information
+- Lead and opportunity data
+- Custom fields
+- API credentials
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [Nutshell Terms of Service](https://www.nutshell.com/terms)
+**Privacy Policy**: [Nutshell Privacy Policy](https://www.nutshell.com/privacy)
+
+---
+
+### CompanyHub
+
+**Service URL**: `https://api.companyhub.com/`
+
+**What it does**: Manages contacts, companies, and deals in CompanyHub CRM.
+
+**Data sent**:
+
+- Contact and company records
+- Deal and pipeline data
+- Custom fields
+- API tokens
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: [CompanyHub Terms](https://companyhub.com/terms-of-service/)
+**Privacy Policy**: [CompanyHub Privacy Policy](https://companyhub.com/privacy-policy/)
+
+---
+
+### ClinchPad
+
+**Service URL**: `https://www.clinchpad.com/api/`
+
+**What it does**: Manages leads and sales pipeline in ClinchPad CRM.
+
+**Data sent**:
+
+- Lead information
+- Pipeline and deal data
+- Contact details
+- API keys
+
+**When data is sent**: When leads or deals are created via configured workflows.
+
+**Terms of Service**: [ClinchPad Terms](https://clinchpad.com/terms-of-service)
+**Privacy Policy**: [ClinchPad Privacy Policy](https://clinchpad.com/privacy-policy)
+
+---
+
+### MoxieCRM (PropovoiceCRM)
+
+**Service URL**: Integration via WordPress plugins
+
+**What it does**: Manages customer relationships within WordPress.
+
+**Data sent**:
+
+- Contact information
+- Deal and invoice data
+- Project details
+- Internal to WordPress installation
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: Based on plugin and hosting
+**Privacy Policy**: Based on plugin and hosting
+
+---
+
+### PerfexCRM
+
+**Service URL**: User's self-hosted installation URL
+
+**What it does**: Manages customers, leads, projects, and invoices in self-hosted Perfex CRM.
+
+**Data sent**:
+
+- Customer and lead information
+- Project and task data
+- Invoice details
+- Custom fields
+- API keys
+
+**When data is sent**: When CRM workflows are triggered.
+
+**Terms of Service**: Varies by installation
+**Privacy Policy**: Varies by installation
+
+---
+
+### Flowlu
+
+**Service URL**: `https://api.flowlu.com/`
+
+**What it does**: Manages CRM, projects, and collaboration in Flowlu.
+
+**Data sent**:
+
+- Contact and organization data
+- Opportunity information
+- Project and task data
+- API tokens
+
+**When data is sent**: When CRM or project workflows are triggered.
+
+**Terms of Service**: [Flowlu Terms of Service](https://www.flowlu.com/terms/)
+**Privacy Policy**: [Flowlu Privacy Policy](https://www.flowlu.com/privacy/)
+
+---
+
+### LionDesk
+
+**Service URL**: `https://api.liondesk.com/`
+
+**What it does**: Real estate CRM for managing contacts and transactions.
+
+**Data sent**:
+
+- Contact information
+- Transaction details
+- Notes and activities
+- API credentials
+
+**When data is sent**: When real estate CRM workflows are triggered.
+
+**Terms of Service**: [LionDesk Terms](https://www.liondesk.com/terms-of-service/)
+**Privacy Policy**: [LionDesk Privacy Policy](https://www.liondesk.com/privacy-policy/)
+
+---
+
+### HighLevel (GoHighLevel)
+
+**Service URL**: `https://rest.gohighlevel.com/`
+
+**What it does**: All-in-one marketing and CRM platform for agencies.
+
+**Data sent**:
+
+- Contact information
+- Opportunity and pipeline data
+- Appointment details
+- Custom fields
+- API tokens
+
+**When data is sent**: When CRM or marketing workflows are triggered.
+
+**Terms of Service**: [HighLevel Terms of Service](https://www.gohighlevel.com/terms-of-service)
+**Privacy Policy**: [HighLevel Privacy Policy](https://www.gohighlevel.com/privacy-policy)
+
+---
+
+### SuiteDash
+
+**Service URL**: User's SuiteDash instance URL
+
+**What it does**: Manages clients, projects, and business operations.
+
+**Data sent**:
+
+- Client information
+- Project and file data
+- Invoice details
+- API keys
+
+**When data is sent**: When business management workflows are triggered.
+
+**Terms of Service**: [SuiteDash Terms](https://suitedash.com/terms-of-service/)
+**Privacy Policy**: [SuiteDash Privacy Policy](https://suitedash.com/privacy-policy/)
+
+---
+
+### Vbout
+
+**Service URL**: `https://api.vbout.com/`
+
+**What it does**: Marketing automation and CRM platform.
+
+**Data sent**:
+
+- Contact information
+- List subscriptions
+- Behavioral data
+- API credentials
+
+**When data is sent**: When marketing automation workflows are triggered.
+
+**Terms of Service**: [Vbout Terms of Service](https://www.vbout.com/terms/)
+**Privacy Policy**: [Vbout Privacy Policy](https://www.vbout.com/privacy/)
+
+---
+
+## Project Management Services
+
+### Trello
+
+**Service URL**: `https://api.trello.com/`
+
+**What it does**: Creates cards, lists, and manages boards in Trello.
+
+**Data sent**:
+
+- Card details (title, description, due date)
+- Board and list IDs
+- Member assignments
+- Attachment data
+- API keys and tokens
+
+**When data is sent**: When project management workflows are triggered.
+
+**Terms of Service**: [Trello Terms of Service](https://www.atlassian.com/legal/customer-agreement)
+**Privacy Policy**: [Atlassian Privacy Policy](https://www.atlassian.com/legal/privacy-policy)
+
+---
+
+### Asana
+
+**Service URL**: `https://app.asana.com/api/`
+
+**What it does**: Creates and manages tasks and projects in Asana.
+
+**Data sent**:
+
+- Task details (name, description, due date)
+- Project and workspace IDs
+- Assignee information
+- API tokens
+
+**When data is sent**: When task management workflows are triggered.
+
+**Terms of Service**: [Asana Terms of Service](https://asana.com/terms)
+**Privacy Policy**: [Asana Privacy Policy](https://asana.com/terms#privacy-policy)
+
+---
+
+### ClickUp
+
+**Service URL**: `https://api.clickup.com/`
+
+**What it does**: Manages tasks, lists, and projects in ClickUp.
+
+**Data sent**:
+
+- Task information (name, description, priority)
+- List and folder IDs
+- Assignee details
+- Custom fields
+- API tokens
+
+**When data is sent**: When project workflows are triggered.
+
+**Terms of Service**: [ClickUp Terms](https://clickup.com/terms)
+**Privacy Policy**: [ClickUp Privacy Policy](https://clickup.com/privacy)
+
+---
+
+## Communication Services
+
+### Slack
+
+**Service URL**: `https://slack.com/api/`
+
+**What it does**: Sends messages and notifications to Slack channels.
+
+**Data sent**:
+
+- Message content
+- Channel IDs
+- User mentions
+- File attachments when configured
+- Webhook URLs or API tokens
+
+**When data is sent**: When notification workflows are triggered.
+
+**Terms of Service**: [Slack Terms of Service](https://slack.com/terms-of-service)
+**Privacy Policy**: [Slack Privacy Policy](https://slack.com/privacy-policy)
+
+---
+
+### Telegram
+
+**Service URL**: `https://api.telegram.org/`
+
+**What it does**: Sends messages to Telegram chats or channels.
+
+**Data sent**:
+
+- Message text
+- Chat IDs
+- Bot tokens
+- Media files when configured
+
+**When data is sent**: When messaging workflows are triggered.
+
+**Terms of Service**: [Telegram Terms of Service](https://telegram.org/tos)
+**Privacy Policy**: [Telegram Privacy Policy](https://telegram.org/privacy)
+
+---
+
+### Discord
+
+**Service URL**: `https://discord.com/api/`
+
+**What it does**: Sends messages to Discord channels via webhooks or bot.
+
+**Data sent**:
+
+- Message content
+- Webhook URLs
+- Embed data
+- File attachments when configured
+
+**When data is sent**: When Discord notification workflows are triggered.
+
+**Terms of Service**: [Discord Terms of Service](https://discord.com/terms)
+**Privacy Policy**: [Discord Privacy Policy](https://discord.com/privacy)
+
+---
+
+### Twilio
+
+**Service URL**: `https://api.twilio.com/`
+
+**What it does**: Sends SMS messages via Twilio service.
+
+**Data sent**:
+
+- Phone numbers (sender and recipient)
+- SMS message content
+- Account SID and Auth Token
+
+**When data is sent**: When SMS workflows are triggered.
+
+**Terms of Service**: [Twilio Terms of Service](https://www.twilio.com/legal/tos)
+**Privacy Policy**: [Twilio Privacy Policy](https://www.twilio.com/legal/privacy)
+
+---
+
+## Storage Services
+
+### Dropbox
+
+**Service URL**: `https://api.dropboxapi.com/`
+
+**What it does**: Uploads files to Dropbox folders.
+
+**Data sent**:
+
+- File contents and metadata
+- Folder paths
+- OAuth tokens
+
+**When data is sent**: When file upload workflows are triggered.
+
+**Terms of Service**: [Dropbox Terms of Service](https://www.dropbox.com/terms)
+**Privacy Policy**: [Dropbox Privacy Policy](https://www.dropbox.com/privacy)
+
+---
+
+### OneDrive
+
+**Service URL**: `https://graph.microsoft.com/` (Microsoft Graph API)
+
+**What it does**: Uploads files to OneDrive storage.
+
+**Data sent**:
+
+- File contents and metadata
+- Folder paths
+- OAuth tokens
+
+**When data is sent**: When file upload workflows are triggered.
+
+**Terms of Service**: [Microsoft Services Agreement](https://www.microsoft.com/servicesagreement)
+**Privacy Policy**: [Microsoft Privacy Statement](https://privacy.microsoft.com/privacystatement)
+
+---
+
+### pCloud
+
+**Service URL**: `https://api.pcloud.com/`
+
+**What it does**: Uploads files to pCloud storage.
+
+**Data sent**:
+
+- File contents and metadata
+- Folder identifiers
+- Authentication tokens
+
+**When data is sent**: When file upload workflows are triggered.
+
+**Terms of Service**: [pCloud Terms of Service](https://www.pcloud.com/terms_and_conditions.html)
+**Privacy Policy**: [pCloud Privacy Policy](https://www.pcloud.com/privacy_policy.html)
+
+---
+
+## Automation Platform Services
+
+### Zapier
+
+**Service URL**: Webhook URLs provided by Zapier
+
+**What it does**: Triggers Zapier workflows (Zaps) to connect with 5000+ apps.
+
+**Data sent**:
+
+- Webhook payload data as configured in workflows
+- Can include any WordPress data based on user configuration
+- Data is sent to user-provided webhook URLs
+
+**When data is sent**: When configured trigger events occur in WordPress.
+
+**Terms of Service**: [Zapier Terms of Service](https://zapier.com/terms)
+**Privacy Policy**: [Zapier Privacy Policy](https://zapier.com/privacy)
+
+---
+
+### Make (Integromat)
+
+**Service URL**: Webhook URLs provided by Make
+
+**What it does**: Triggers Make scenarios to automate workflows across apps.
+
+**Data sent**:
+
+- Webhook payload data as configured
+- Can include any WordPress data based on user configuration
+
+**When data is sent**: When configured trigger events occur in WordPress.
+
+**Terms of Service**: [Make Terms of Service](https://www.make.com/en/terms-of-service)
+**Privacy Policy**: [Make Privacy Policy](https://www.make.com/en/privacy-policy)
+
+---
+
+### Pabbly Connect
+
+**Service URL**: Webhook URLs provided by Pabbly
+
+**What it does**: Triggers Pabbly workflows to connect various applications.
+
+**Data sent**:
+
+- Webhook payload data as configured
+- User-defined WordPress data
+
+**When data is sent**: When configured trigger events occur in WordPress.
+
+**Terms of Service**: [Pabbly Terms of Service](https://www.pabbly.com/terms-conditions/)
+**Privacy Policy**: [Pabbly Privacy Policy](https://www.pabbly.com/privacy-policy/)
+
+---
+
+### N8N
+
+**Service URL**: User's self-hosted or cloud N8N instance
+
+**What it does**: Triggers N8N workflows for automation.
+
+**Data sent**:
+
+- Webhook payload data as configured
+- User-defined data based on workflows
+
+**When data is sent**: When configured trigger events occur in WordPress.
+
+**Terms of Service**: [N8N Terms](https://n8n.io/legal/terms/) (for cloud)
+**Privacy Policy**: [N8N Privacy](https://n8n.io/legal/privacy/) (for cloud)
+
+---
+
+### Integrately
+
+**Service URL**: Webhook URLs provided by Integrately
+
+**What it does**: Triggers Integrately automations.
+
+**Data sent**:
+
+- Webhook payload data
+- User-configured WordPress data
+
+**When data is sent**: When configured trigger events occur.
+
+**Terms of Service**: [Integrately Terms](https://integrately.com/terms-of-service)
+**Privacy Policy**: [Integrately Privacy Policy](https://integrately.com/privacy-policy)
+
+---
+
+### KonnectzIT
+
+**Service URL**: Webhook URLs provided by KonnectzIT
+
+**What it does**: Triggers KonnectzIT workflows.
+
+**Data sent**:
+
+- Webhook payload data
+- User-configured data
+
+**When data is sent**: When configured triggers occur.
+
+**Terms of Service**: [KonnectzIT Terms](https://www.konnectzit.com/terms-of-service/)
+**Privacy Policy**: [KonnectzIT Privacy Policy](https://www.konnectzit.com/privacy-policy/)
+
+---
+
+### SureTriggers (OttoKit)
+
+**Service URL**: Integration with SureTriggers WordPress plugin
+
+**What it does**: Triggers SureTriggers workflows within WordPress.
+
+**Data sent**:
+
+- Internal WordPress data exchange
+- May connect to external services via SureTriggers
+
+**When data is sent**: When configured trigger events occur.
+
+**Terms of Service**: [SureTriggers Terms](https://suretriggers.com/terms-and-conditions/)
+**Privacy Policy**: [SureTriggers Privacy Policy](https://suretriggers.com/privacy-policy/)
+
+---
+
+### SyncSpider
+
+**Service URL**: `https://www.syncspider.com/` API endpoints
+
+**What it does**: Synchronizes data between applications.
+
+**Data sent**:
+
+- Configured WordPress data
+- API credentials
+
+**When data is sent**: When sync workflows are triggered.
+
+**Terms of Service**: [SyncSpider Terms](https://syncspider.com/terms-and-conditions/)
+**Privacy Policy**: [SyncSpider Privacy Policy](https://syncspider.com/privacy-policy/)
+
+---
+
+### Albato
+
+**Service URL**: Webhook URLs provided by Albato
+
+**What it does**: Automates workflows between applications.
+
+**Data sent**:
+
+- Webhook payload data
+- User-configured data
+
+**When data is sent**: When configured triggers occur.
+
+**Terms of Service**: [Albato Terms](https://albato.com/terms)
+**Privacy Policy**: [Albato Privacy Policy](https://albato.com/privacy)
+
+---
+
+### SperseIO
+
+**Service URL**: Webhook URLs provided by SperseIO
+
+**What it does**: Automates business workflows.
+
+**Data sent**:
+
+- Webhook payload data
+- User-configured data
+
+**When data is sent**: When configured triggers occur.
+
+**Terms of Service**: [SperseIO Terms](https://www.sperse.io/terms-conditions/)
+**Privacy Policy**: [SperseIO Privacy Policy](https://www.sperse.io/privacy-policy/)
+
+---
+
+### AntApps
+
+**Service URL**: Webhook URLs provided by AntApps
+
+**What it does**: Triggers AntApps automations.
+
+**Data sent**:
+
+- Webhook payload data
+- User-configured data
+
+**When data is sent**: When configured triggers occur.
+
+**Terms of Service**: Check AntApps website
+**Privacy Policy**: Check AntApps website
+
+---
+
+## Learning Management Systems
+
+### LearnDash (via WooCommerce or Direct)
+
+Note: LearnDash is a WordPress plugin. Data stays within WordPress unless connected to external services via other integrations.
+
+---
+
+### TutorLMS (via WooCommerce or Direct)
+
+Note: TutorLMS is a WordPress plugin. Data stays within WordPress unless connected to external services via other integrations.
+
+---
+
+### Academy LMS
+
+Note: Academy LMS is a WordPress plugin. Data stays within WordPress unless connected to external services.
+
+---
+
+### MasterStudy LMS
+
+Note: MasterStudy LMS is a WordPress plugin. Data stays within WordPress unless connected to external services.
+
+---
+
+### LifterLMS
+
+Note: LifterLMS is a WordPress plugin. Data stays within WordPress unless connected to external services.
+
+---
+
+### Zoom (for webinars and meetings)
+
+**Service URL**: `https://api.zoom.us/`
+
+**What it does**: Creates meetings and webinars, manages registrations.
+
+**Data sent**:
+
+- Meeting/webinar details
+- Registrant information (name, email)
+- OAuth credentials
+
+**When data is sent**: When meeting/webinar workflows are triggered.
+
+**Terms of Service**: [Zoom Terms of Service](https://explore.zoom.us/en/terms/)
+**Privacy Policy**: [Zoom Privacy Statement](https://explore.zoom.us/en/privacy/)
+
+---
+
+## E-commerce Services
+
+Note: WooCommerce, GiveWP, SureCart, and other WordPress plugins process data within WordPress. Data is only sent externally when integrated with other external services through Bit Integrations.
+
+---
+
+## Marketing Automation Services
+
+### Mautic
+
+**Service URL**: User's self-hosted or cloud Mautic instance
+
+**What it does**: Manages contacts and marketing automation campaigns.
+
+**Data sent**:
+
+- Contact information
+- Behavioral data
+- Campaign assignments
+- API credentials
+
+**When data is sent**: When marketing automation workflows are triggered.
+
+**Terms of Service**: [Mautic Terms](https://www.mautic.org/terms-of-service) or per installation
+**Privacy Policy**: [Mautic Privacy](https://www.mautic.org/privacy-policy) or per installation
+
+---
+
+### Encharge
+
+**Service URL**: `https://api.encharge.io/`
+
+**What it does**: Marketing automation for SaaS and digital businesses.
+
+**Data sent**:
+
+- User and contact data
+- Event tracking data
+- Custom fields
+- API keys
+
+**When data is sent**: When user behavior or form submissions trigger workflows.
+
+**Terms of Service**: [Encharge Terms](https://encharge.io/terms)
+**Privacy Policy**: [Encharge Privacy Policy](https://encharge.io/privacy)
+
+---
+
+### Lemlist
+
+**Service URL**: `https://api.lemlist.com/`
+
+**What it does**: Email outreach and campaign management.
+
+**Data sent**:
+
+- Lead information
+- Campaign assignments
+- Email addresses
+- API keys
+
+**When data is sent**: When outreach workflows are triggered.
+
+**Terms of Service**: [Lemlist Terms](https://www.lemlist.com/terms-of-service)
+**Privacy Policy**: [Lemlist Privacy Policy](https://www.lemlist.com/privacy-policy)
+
+---
+
+### Woodpecker
+
+**Service URL**: `https://api.woodpecker.co/`
+
+**What it does**: Cold email automation and follow-ups.
+
+**Data sent**:
+
+- Prospect information
+- Email content and campaign data
+- API keys
+
+**When data is sent**: When email outreach workflows are triggered.
+
+**Terms of Service**: [Woodpecker Terms](https://woodpecker.co/terms/)
+**Privacy Policy**: [Woodpecker Privacy Policy](https://woodpecker.co/privacy-policy/)
+
+---
+
+### Gravitec
+
+**Service URL**: `https://gravitec.net/` API endpoints
+
+**What it does**: Web push notification service.
+
+**Data sent**:
+
+- Subscriber tokens
+- Notification content
+- Segmentation data
+- API keys
+
+**When data is sent**: When push notification workflows are triggered.
+
+**Terms of Service**: [Gravitec Terms](https://gravitec.net/terms-of-service/)
+**Privacy Policy**: [Gravitec Privacy Policy](https://gravitec.net/privacy-policy/)
+
+---
+
+### SystemeIO
+
+**Service URL**: `https://api.systeme.io/api`
+
+**What it does**: All-in-one marketing platform for course creation, email marketing, and sales funnels.
+
+**Data sent**:
+
+- Contact information (email, name, tags)
+- Course enrollment data
+- Purchase information
+- Custom field data
+- API keys
+
+**When data is sent**: When marketing automation or course enrollment workflows are triggered.
+
+**Terms of Service**: [Systeme.io Terms](https://systeme.io/terms-and-conditions)
+**Privacy Policy**: [Systeme.io Privacy Policy](https://systeme.io/privacy-policy)
+
+---
+
+## Other Third-Party Services
+
+### Airtable
+
+**Service URL**: `https://api.airtable.com/`
+
+**What it does**: Syncs data to Airtable databases/tables.
+
+**Data sent**:
+
+- Record data as configured
+- Table and base identifiers
+- API keys
+
+**When data is sent**: When database sync workflows are triggered.
+
+**Terms of Service**: [Airtable Terms of Service](https://www.airtable.com/company/terms-of-service)
+**Privacy Policy**: [Airtable Privacy Policy](https://www.airtable.com/company/privacy)
+
+---
+
+### Notion
+
+**Service URL**: `https://api.notion.com/`
+
+**What it does**: Creates and updates pages and databases in Notion.
+
+**Data sent**:
+
+- Page content and properties
+- Database records
+- OAuth tokens
+
+**When data is sent**: When Notion workflows are triggered.
+
+**Terms of Service**: [Notion Terms of Service](https://www.notion.so/Terms-and-Privacy-28ffdd083dc3473e9c2da6ec011b58ac)
+**Privacy Policy**: [Notion Privacy Policy](https://www.notion.so/Privacy-Policy-3468d120cf614d4c9014c09f6adc9091)
+
+---
+
+### SmartSuite
+
+**Service URL**: `https://app.smartsuite.com/api/`
+
+**What it does**: Manages records in SmartSuite collaborative work management platform.
+
+**Data sent**:
+
+- Record data
+- App and table identifiers
+- API tokens
+
+**When data is sent**: When SmartSuite workflows are triggered.
+
+**Terms of Service**: [SmartSuite Terms](https://www.smartsuite.com/terms-of-service)
+**Privacy Policy**: [SmartSuite Privacy Policy](https://www.smartsuite.com/privacy-policy)
+
+---
+
+### Freshdesk
+
+**Service URL**: Account-specific (e.g., `https://domain.freshdesk.com/api/`)
+
+**What it does**: Creates support tickets and manages contacts in Freshdesk.
+
+**Data sent**:
+
+- Ticket details (subject, description, priority)
+- Contact information
+- Custom fields
+- API keys
+
+**When data is sent**: When support ticket workflows are triggered.
+
+**Terms of Service**: [Freshworks Terms of Service](https://www.freshworks.com/terms/)
+**Privacy Policy**: [Freshworks Privacy Policy](https://www.freshworks.com/privacy/)
+
+---
+
+### Zendesk
+
+**Service URL**: Account-specific (e.g., `https://subdomain.zendesk.com/api/`)
+
+**What it does**: Creates tickets and manages contacts in Zendesk.
+
+**Data sent**:
+
+- Ticket information
+- User/contact details
+- Custom fields
+- API tokens
+
+**When data is sent**: When ticket creation workflows are triggered.
+
+**Terms of Service**: [Zendesk Terms of Service](https://www.zendesk.com/company/agreements-and-terms/master-subscription-agreement/)
+**Privacy Policy**: [Zendesk Privacy Policy](https://www.zendesk.com/company/agreements-and-terms/privacy-policy/)
+
+---
+
+### Keap (Infusionsoft)
+
+**Service URL**: `https://api.infusionsoft.com/`
+
+**What it does**: Manages contacts, sales, and marketing automation.
+
+**Data sent**:
+
+- Contact information
+- Tags and custom fields
+- Order data
+- OAuth credentials
+
+**When data is sent**: When CRM and marketing workflows are triggered.
+
+**Terms of Service**: [Keap Terms of Service](https://keap.com/legal/terms-of-service)
+**Privacy Policy**: [Keap Privacy Policy](https://keap.com/legal/privacy-policy)
+
+---
+
+### Demio
+
+**Service URL**: `https://my.demio.com/api/`
+
+**What it does**: Manages webinar registrations in Demio.
+
+**Data sent**:
+
+- Registrant information (name, email)
+- Webinar IDs
+- Custom fields
+- API keys
+
+**When data is sent**: When webinar registration workflows are triggered.
+
+**Terms of Service**: [Demio Terms of Service](https://demio.com/terms)
+**Privacy Policy**: [Demio Privacy Policy](https://demio.com/privacy)
+
+---
+
+### Livestorm
+
+**Service URL**: `https://api.livestorm.co/`
+
+**What it does**: Manages event registrations for webinars and meetings.
+
+**Data sent**:
+
+- Participant information
+- Event IDs
+- Custom fields
+- API tokens
+
+**When data is sent**: When event registration workflows are triggered.
+
+**Terms of Service**: [Livestorm Terms](https://livestorm.co/terms)
+**Privacy Policy**: [Livestorm Privacy Policy](https://livestorm.co/privacy)
+
+---
+
+### Fabman
+
+**Service URL**: `https://fabman.io/api/`
+
+**What it does**: Manages memberships and resource bookings for makerspaces and coworking spaces.
+
+**Data sent**:
+
+- Member information
+- Booking data
+- API keys
+
+**When data is sent**: When membership or booking workflows are triggered.
+
+**Terms of Service**: [Fabman Terms](https://fabman.io/terms/)
+**Privacy Policy**: [Fabman Privacy Policy](https://fabman.io/privacy/)
+
+---
+
+### DirectIQ
+
+**Service URL**: `https://www.directiq.com/` API endpoints
+
+**What it does**: Email marketing and newsletter management.
+
+**Data sent**:
+
+- Subscriber information
+- List assignments
+- API credentials
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [DirectIQ Terms](https://www.directiq.com/terms-of-service)
+**Privacy Policy**: [DirectIQ Privacy Policy](https://www.directiq.com/privacy-policy)
+
+---
+
+### GetGist
+
+**Service URL**: `https://api.getgist.com/`
+
+**What it does**: Marketing automation, live chat, and email marketing.
+
+**Data sent**:
+
+- Contact information
+- Event tracking data
+- Custom properties
+- API keys
+
+**When data is sent**: When marketing workflows are triggered.
+
+**Terms of Service**: [Gist Terms of Service](https://getgist.com/terms/)
+**Privacy Policy**: [Gist Privacy Policy](https://getgist.com/privacy/)
+
+---
+
+### Bento
+
+**Service URL**: `https://app.bentonow.com/api/`
+
+**What it does**: Email marketing and automation platform.
+
+**Data sent**:
+
+- Subscriber data
+- Event tracking
+- Tags and custom properties
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Bento Terms](https://www.bentonow.com/terms)
+**Privacy Policy**: [Bento Privacy Policy](https://www.bentonow.com/privacy)
+
+---
+
+### Campaign Monitor
+
+**Service URL**: `https://api.createsend.com/`
+
+**What it does**: Email marketing campaign management.
+
+**Data sent**:
+
+- Subscriber information
+- List IDs
+- Custom fields
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Campaign Monitor Terms](https://www.campaignmonitor.com/policies/)
+**Privacy Policy**: [Campaign Monitor Privacy](https://www.campaignmonitor.com/policies/)
+
+---
+
+### Constant Contact
+
+**Service URL**: `https://api.cc.email/v3/` and `https://authz.constantcontact.com/`
+
+**What it does**: Email marketing platform for managing contacts, lists, and campaigns.
+
+**Data sent**:
+
+- Contact information (email, name, phone, address)
+- List memberships
+- Tags and custom fields
+- OAuth credentials
+- API keys
+
+**When data is sent**: When contact and email marketing workflows are triggered.
+
+**Terms of Service**: [Constant Contact Terms of Service](https://www.constantcontact.com/legal/terms-and-conditions)
+**Privacy Policy**: [Constant Contact Privacy Policy](https://www.constantcontact.com/legal/privacy-statement)
+
+---
+
+### MailRelay
+
+**Service URL**: `https://api.mailrelay.com/`
+
+**What it does**: Email marketing and newsletter service.
+
+**Data sent**:
+
+- Subscriber data
+- Group assignments
+- Custom fields
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [MailRelay Terms](https://mailrelay.com/en/terms-and-conditions)
+**Privacy Policy**: [MailRelay Privacy](https://mailrelay.com/en/privacy-policy)
+
+---
+
+### MailUp
+
+**Service URL**: `https://services.mailup.com/`
+
+**What it does**: Email and SMS marketing platform.
+
+**Data sent**:
+
+- Contact information
+- List subscriptions
+- Custom fields
+- API credentials
+
+**When data is sent**: When marketing workflows are triggered.
+
+**Terms of Service**: [MailUp Terms](https://www.mailup.com/terms-of-service/)
+**Privacy Policy**: [MailUp Privacy Policy](https://www.mailup.com/privacy-policy/)
+
+---
+
+### Mailercloud
+
+**Service URL**: `https://cloudapi.mailercloud.com/`
+
+**What it does**: Email marketing automation.
+
+**Data sent**:
+
+- Contact details
+- List assignments
+- Custom fields
+- API keys
+
+**When data is sent**: When email workflows are triggered.
+
+**Terms of Service**: [Mailercloud Terms](https://www.mailercloud.com/terms-of-service)
+**Privacy Policy**: [Mailercloud Privacy](https://www.mailercloud.com/privacy-policy)
+
+---
+
+### Mailify (Sarbacane)
+
+**Service URL**: `https://api.mailify.com/`
+
+**What it does**: Email and SMS marketing platform.
+
+**Data sent**:
+
+- Contact information
+- List subscriptions
+- API credentials
+
+**When data is sent**: When marketing workflows are triggered.
+
+**Terms of Service**: [Mailify Terms](https://www.mailify.com/en/legal-notice)
+**Privacy Policy**: [Mailify Privacy](https://www.mailify.com/en/privacy-policy)
+
+---
+
+### Mailjet
+
+**Service URL**: `https://api.mailjet.com/`
+
+**What it does**: Email delivery and marketing platform.
+
+**Data sent**:
+
+- Email content and addresses
+- Contact list data
+- API keys
+
+**When data is sent**: When email sending workflows are triggered.
+
+**Terms of Service**: [Mailjet Terms](https://www.mailjet.com/legal/terms-of-use/)
+**Privacy Policy**: [Mailjet Privacy](https://www.mailjet.com/legal/privacy-policy/)
+
+---
+
+### Mailster
+
+Note: Mailster is a WordPress plugin. Data stays within WordPress unless connected to external email sending services.
+
+---
+
+### MailBluster
+
+**Service URL**: `https://api.mailbluster.com/`
+
+**What it does**: Email marketing service built on Amazon SES.
+
+**Data sent**:
+
+- Contact information
+- List data
+- Email content
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [MailBluster Terms](https://mailbluster.com/terms-of-service)
+**Privacy Policy**: [MailBluster Privacy Policy](https://mailbluster.com/privacy-policy)
+
+---
+
+### MailMint
+
+Note: MailMint is a WordPress-based email marketing plugin. Data stays within WordPress unless connected to external email sending services.
+
+---
+
+### MailerPress
+
+Note: MailerPress is a WordPress plugin. Data stays within WordPress unless using external sending services.
+
+---
+
+### KirimEmail
+
+**Service URL**: `https://api.kirimemail.com/`
+
+**What it does**: Email marketing service (Indonesia focused).
+
+**Data sent**:
+
+- Subscriber information
+- List data
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [KirimEmail Terms](https://www.kirim.email/terms)
+**Privacy Policy**: [KirimEmail Privacy](https://www.kirim.email/privacy)
+
+---
+
+### Rapidmail
+
+**Service URL**: `https://apiv3.emailsys.net/`
+
+**What it does**: Email marketing service.
+
+**Data sent**:
+
+- Recipient data
+- List assignments
+- API credentials
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [Rapidmail Terms](https://www.rapidmail.com/terms-and-conditions)
+**Privacy Policy**: [Rapidmail Privacy](https://www.rapidmail.com/privacy-policy)
+
+---
+
+### Selzy
+
+**Service URL**: `https://api.selzy.com/`
+
+**What it does**: Email marketing automation.
+
+**Data sent**:
+
+- Contact information
+- List subscriptions
+- API keys
+
+**When data is sent**: When email workflows are triggered.
+
+**Terms of Service**: [Selzy Terms](https://selzy.com/en/legal/terms/)
+**Privacy Policy**: [Selzy Privacy](https://selzy.com/en/legal/privacy/)
+
+---
+
+### SendFox
+
+**Service URL**: `https://api.sendfox.com/`
+
+**What it does**: Email marketing for content creators.
+
+**Data sent**:
+
+- Contact information
+- List subscriptions
+- API tokens
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [SendFox Terms](https://sendfox.com/terms)
+**Privacy Policy**: [SendFox Privacy](https://sendfox.com/privacy)
+
+---
+
+### Smaily
+
+**Service URL**: `https://api.smaily.com/`
+
+**What it does**: Email marketing automation.
+
+**Data sent**:
+
+- Subscriber data
+- List assignments
+- API credentials
+
+**When data is sent**: When email workflows are triggered.
+
+**Terms of Service**: [Smaily Terms](https://smaily.com/terms/)
+**Privacy Policy**: [Smaily Privacy](https://smaily.com/privacy/)
+
+---
+
+### ZagoMail
+
+**Service URL**: `https://api.zagomail.com/`
+
+**What it does**: Email marketing service.
+
+**Data sent**:
+
+- Contact information
+- List data
+- API keys
+
+**When data is sent**: When email marketing workflows are triggered.
+
+**Terms of Service**: [ZagoMail Terms](https://www.zagomail.com/terms-of-service)
+**Privacy Policy**: [ZagoMail Privacy](https://www.zagomail.com/privacy-policy)
+
+---
+
+### Line
+
+**Service URL**: `https://api.line.me/`
+
+**What it does**: Sends messages via Line messaging platform.
+
+**Data sent**:
+
+- Message content
+- User IDs
+- Channel access tokens
+
+**When data is sent**: When Line messaging workflows are triggered.
+
+**Terms of Service**: [Line Terms of Use](https://terms.line.me/line_terms/)
+**Privacy Policy**: [Line Privacy Policy](https://line.me/en/terms/policy/)
+
+---
+
+## Important Notes
+
+1. **User Control**: All external service connections are completely opt-in. Data is never sent to any external service unless you explicitly configure an integration.
+
+2. **API Keys and Credentials**: This plugin stores API keys, OAuth tokens, and credentials in your WordPress database (encrypted where possible). These credentials are used solely to authenticate with the services you choose to integrate.
+
+3. **Data Mapping**: You have complete control over what data is sent to each service through the field mapping interface.
+
+4. **Webhooks**: For webhook-based integrations, data is sent to URLs you provide. You are responsible for ensuring these webhook endpoints are secure and comply with privacy regulations.
+
+5. **Logging**: Integration logs are stored locally in your WordPress database for debugging purposes. You can control log retention in plugin settings.
+
+6. **GDPR and Privacy Compliance**: When using this plugin to send data to external services, you are responsible for:
+ - Obtaining appropriate user consent
+ - Providing privacy notices to your users
+ - Ensuring compliance with GDPR, CCPA, and other applicable regulations
+ - Reviewing the privacy policies and terms of service for each external service you use
+
+7. **Data Security**: Always use HTTPS for your WordPress site and ensure WordPress, this plugin, and all other plugins are kept up to date.
+
+8. **Third-Party Responsibility**: This plugin acts as a data processor. The third-party services you connect to have their own data processing practices. Please review their respective privacy policies and terms of service.
+
+---
+
+## Contact and Support
+
+If you have questions about how this plugin uses external services or data privacy:
+
+- **Support**: [https://tawk.to/chat/60eac4b6d6e7610a49aab375/1faah0r3e](https://tawk.to/chat/60eac4b6d6e7610a49aab375/1faah0r3e)
+- **Documentation**: [https://bit-integrations.com/wp-docs/](https://bit-integrations.com/wp-docs/)
+- **Website**: [https://bit-integrations.com/](https://bit-integrations.com/)
+
+---
+
+**Last Updated**: February 14, 2026
diff --git a/frontend-dev/pnpm-lock.yaml b/frontend-dev/pnpm-lock.yaml
index f301da372..90abc8d4a 100644
--- a/frontend-dev/pnpm-lock.yaml
+++ b/frontend-dev/pnpm-lock.yaml
@@ -10,13 +10,13 @@ importers:
dependencies:
'@babel/traverse':
specifier: ^7.28.5
- version: 7.28.5
+ version: 7.29.0
'@bumaga/tabs':
specifier: ^0.2.0
version: 0.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@microlink/react-json-view':
specifier: ^1.27.0
- version: 1.27.0(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 1.27.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@monaco-editor/react':
specifier: ^4.7.0
version: 4.7.0(monaco-editor@0.55.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -25,7 +25,7 @@ importers:
version: 4.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@yaireo/tagify':
specifier: ^4.35.6
- version: 4.35.6(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 4.36.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames:
specifier: ^2.5.1
version: 2.5.1
@@ -34,7 +34,7 @@ importers:
version: 1.1.0
lodash:
specifier: ^4.17.21
- version: 4.17.21
+ version: 4.17.23
mutative:
specifier: ^0.5.0
version: 0.5.0
@@ -43,7 +43,7 @@ importers:
version: 0.4.5
prettier:
specifier: ^3.7.4
- version: 3.7.4
+ version: 3.8.1
react:
specifier: ^18.3.1
version: 18.3.1
@@ -73,13 +73,13 @@ importers:
version: 2.0.3(react@18.3.1)
react-router:
specifier: ^6.30.2
- version: 6.30.2(react@18.3.1)
+ version: 6.30.3(react@18.3.1)
react-router-dom:
specifier: ^6.30.2
- version: 6.30.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-sortablejs:
specifier: ^6.1.4
- version: 6.1.4(@types/sortablejs@1.15.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sortablejs@1.15.6)
+ version: 6.1.4(@types/sortablejs@1.15.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sortablejs@1.15.7)
react-table:
specifier: ^7.8.0
version: 7.8.0(react@18.3.1)
@@ -100,13 +100,13 @@ importers:
version: 0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
recoil-nexus:
specifier: ^0.5.1
- version: 0.5.1(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(recoil@0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)
+ version: 0.5.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(recoil@0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)
regenerator-runtime:
specifier: ^0.13.11
version: 0.13.11
sortablejs:
specifier: ^1.15.6
- version: 1.15.6
+ version: 1.15.7
swr:
specifier: ^1.3.0
version: 1.3.0(react@18.3.1)
@@ -119,34 +119,34 @@ importers:
devDependencies:
'@babel/core':
specifier: ^7.28.5
- version: 7.28.5
+ version: 7.29.0
'@babel/eslint-parser':
specifier: ^7.28.5
- version: 7.28.5(@babel/core@7.28.5)(eslint@8.57.1)
+ version: 7.28.6(@babel/core@7.29.0)(eslint@8.57.1)
'@babel/plugin-proposal-class-properties':
specifier: ^7.18.6
- version: 7.18.6(@babel/core@7.28.5)
+ version: 7.18.6(@babel/core@7.29.0)
'@babel/plugin-proposal-private-methods':
specifier: ^7.18.6
- version: 7.18.6(@babel/core@7.28.5)
+ version: 7.18.6(@babel/core@7.29.0)
'@babel/plugin-transform-react-jsx':
specifier: ^7.27.1
- version: 7.27.1(@babel/core@7.28.5)
+ version: 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-regenerator':
specifier: ^7.28.4
- version: 7.28.4(@babel/core@7.28.5)
+ version: 7.29.0(@babel/core@7.29.0)
'@babel/plugin-transform-runtime':
specifier: ^7.28.5
- version: 7.28.5(@babel/core@7.28.5)
+ version: 7.29.0(@babel/core@7.29.0)
'@babel/preset-env':
specifier: ^7.28.5
- version: 7.28.5(@babel/core@7.28.5)
+ version: 7.29.0(@babel/core@7.29.0)
'@babel/preset-react':
specifier: ^7.28.5
- version: 7.28.5(@babel/core@7.28.5)
+ version: 7.28.5(@babel/core@7.29.0)
'@babel/runtime':
specifier: ^7.28.4
- version: 7.28.4
+ version: 7.28.6
'@testing-library/jest-dom':
specifier: ^5.17.0
version: 5.17.0
@@ -158,16 +158,16 @@ importers:
version: 13.5.0(@testing-library/dom@7.31.2)
'@vitejs/plugin-react':
specifier: ^4.7.0
- version: 4.7.0(vite@4.5.14(@types/node@25.0.3)(sass@1.97.0)(terser@5.44.1))
+ version: 4.7.0(vite@4.5.14(@types/node@25.2.3)(sass@1.97.3)(terser@5.46.0))
'@wordpress/babel-plugin-makepot':
specifier: ^4.4.0
- version: 4.4.0(@babel/core@7.28.5)
+ version: 4.4.0(@babel/core@7.29.0)
'@wordpress/i18n':
specifier: ^3.20.0
version: 3.20.0
babel-loader:
specifier: ^8.4.1
- version: 8.4.1(@babel/core@7.28.5)(webpack@5.104.0)
+ version: 8.4.1(@babel/core@7.29.0)(webpack@5.105.2)
eslint:
specifier: ^8.57.1
version: 8.57.1
@@ -212,49 +212,49 @@ importers:
version: 3.0.2
sass:
specifier: ^1.96.0
- version: 1.97.0
+ version: 1.97.3
vite:
specifier: ^4.5.14
- version: 4.5.14(@types/node@25.0.3)(sass@1.97.0)(terser@5.44.1)
+ version: 4.5.14(@types/node@25.2.3)(sass@1.97.3)(terser@5.46.0)
packages:
'@adobe/css-tools@4.4.4':
resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==}
- '@babel/code-frame@7.27.1':
- resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.28.5':
- resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.28.5':
- resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
engines: {node: '>=6.9.0'}
- '@babel/eslint-parser@7.28.5':
- resolution: {integrity: sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==}
+ '@babel/eslint-parser@7.28.6':
+ resolution: {integrity: sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
- '@babel/generator@7.28.5':
- resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.27.3':
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.27.2':
- resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.28.5':
- resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
+ '@babel/helper-create-class-features-plugin@7.28.6':
+ resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -265,8 +265,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-define-polyfill-provider@0.6.5':
- resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==}
+ '@babel/helper-define-polyfill-provider@0.6.6':
+ resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -278,12 +278,12 @@ packages:
resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.27.1':
- resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.28.3':
- resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -292,8 +292,8 @@ packages:
resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.27.1':
- resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
engines: {node: '>=6.9.0'}
'@babel/helper-remap-async-to-generator@7.27.1':
@@ -302,8 +302,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-replace-supers@7.27.1':
- resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+ '@babel/helper-replace-supers@7.28.6':
+ resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -324,16 +324,16 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-wrap-function@7.28.3':
- resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==}
+ '@babel/helper-wrap-function@7.28.6':
+ resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.28.4':
- resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.5':
- resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ '@babel/parser@7.29.0':
+ resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -361,8 +361,8 @@ packages:
peerDependencies:
'@babel/core': ^7.13.0
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3':
- resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==}
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6':
+ resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -387,20 +387,20 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-import-assertions@7.27.1':
- resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
+ '@babel/plugin-syntax-import-assertions@7.28.6':
+ resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-import-attributes@7.27.1':
- resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-jsx@7.27.1':
- resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -417,14 +417,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-async-generator-functions@7.28.0':
- resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==}
+ '@babel/plugin-transform-async-generator-functions@7.29.0':
+ resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-async-to-generator@7.27.1':
- resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==}
+ '@babel/plugin-transform-async-to-generator@7.28.6':
+ resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -435,32 +435,32 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-block-scoping@7.28.5':
- resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==}
+ '@babel/plugin-transform-block-scoping@7.28.6':
+ resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-class-properties@7.27.1':
- resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
+ '@babel/plugin-transform-class-properties@7.28.6':
+ resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-class-static-block@7.28.3':
- resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==}
+ '@babel/plugin-transform-class-static-block@7.28.6':
+ resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.12.0
- '@babel/plugin-transform-classes@7.28.4':
- resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==}
+ '@babel/plugin-transform-classes@7.28.6':
+ resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-computed-properties@7.27.1':
- resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
+ '@babel/plugin-transform-computed-properties@7.28.6':
+ resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -471,8 +471,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-dotall-regex@7.27.1':
- resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
+ '@babel/plugin-transform-dotall-regex@7.28.6':
+ resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -483,8 +483,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
- resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0':
+ resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -495,14 +495,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-explicit-resource-management@7.28.0':
- resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==}
+ '@babel/plugin-transform-explicit-resource-management@7.28.6':
+ resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-exponentiation-operator@7.28.5':
- resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==}
+ '@babel/plugin-transform-exponentiation-operator@7.28.6':
+ resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -525,8 +525,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-json-strings@7.27.1':
- resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
+ '@babel/plugin-transform-json-strings@7.28.6':
+ resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -537,8 +537,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-logical-assignment-operators@7.28.5':
- resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==}
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6':
+ resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -555,14 +555,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-modules-commonjs@7.27.1':
- resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
+ '@babel/plugin-transform-modules-commonjs@7.28.6':
+ resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-modules-systemjs@7.28.5':
- resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==}
+ '@babel/plugin-transform-modules-systemjs@7.29.0':
+ resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -573,8 +573,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
- resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
+ '@babel/plugin-transform-named-capturing-groups-regex@7.29.0':
+ resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -585,20 +585,20 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
- resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6':
+ resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-numeric-separator@7.27.1':
- resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
+ '@babel/plugin-transform-numeric-separator@7.28.6':
+ resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-object-rest-spread@7.28.4':
- resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==}
+ '@babel/plugin-transform-object-rest-spread@7.28.6':
+ resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -609,14 +609,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-optional-catch-binding@7.27.1':
- resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
+ '@babel/plugin-transform-optional-catch-binding@7.28.6':
+ resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-optional-chaining@7.28.5':
- resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==}
+ '@babel/plugin-transform-optional-chaining@7.28.6':
+ resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -627,14 +627,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-private-methods@7.27.1':
- resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
+ '@babel/plugin-transform-private-methods@7.28.6':
+ resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-private-property-in-object@7.27.1':
- resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
+ '@babel/plugin-transform-private-property-in-object@7.28.6':
+ resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -669,8 +669,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx@7.27.1':
- resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==}
+ '@babel/plugin-transform-react-jsx@7.28.6':
+ resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -681,14 +681,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-regenerator@7.28.4':
- resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==}
+ '@babel/plugin-transform-regenerator@7.29.0':
+ resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-regexp-modifiers@7.27.1':
- resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
+ '@babel/plugin-transform-regexp-modifiers@7.28.6':
+ resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -699,8 +699,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-runtime@7.28.5':
- resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==}
+ '@babel/plugin-transform-runtime@7.29.0':
+ resolution: {integrity: sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -711,8 +711,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-spread@7.27.1':
- resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
+ '@babel/plugin-transform-spread@7.28.6':
+ resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -741,8 +741,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-unicode-property-regex@7.27.1':
- resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
+ '@babel/plugin-transform-unicode-property-regex@7.28.6':
+ resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -753,14 +753,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-unicode-sets-regex@7.27.1':
- resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
+ '@babel/plugin-transform-unicode-sets-regex@7.28.6':
+ resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/preset-env@7.28.5':
- resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==}
+ '@babel/preset-env@7.29.0':
+ resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -776,24 +776,24 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/runtime-corejs3@7.28.4':
- resolution: {integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==}
+ '@babel/runtime-corejs3@7.29.0':
+ resolution: {integrity: sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==}
engines: {node: '>=6.9.0'}
- '@babel/runtime@7.28.4':
- resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
+ '@babel/runtime@7.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines: {node: '>=6.9.0'}
- '@babel/template@7.27.2':
- resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.28.5':
- resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.5':
- resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
'@bumaga/tabs@0.2.0':
@@ -934,8 +934,8 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.9.0':
- resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -1012,8 +1012,8 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@microlink/react-json-view@1.27.0':
- resolution: {integrity: sha512-/IwWmMuRR2edvxrRYRBJzjyi4vGvIn/ltM8wqesz+HLZsoGKIUgwiwEkblOLZqXj8BGWmeRnyAdCqf0uACqRFw==}
+ '@microlink/react-json-view@1.27.1':
+ resolution: {integrity: sha512-HUhKcaXB8QQvOWYNBXm8p6x6SPvXzmWjc0gP6GHN+kdpWOwniUdikJe9+GHB4/tuft92idaHXTxhDJZEMW966g==}
engines: {node: '>=17'}
peerDependencies:
react: '>= 15'
@@ -1044,93 +1044,93 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@parcel/watcher-android-arm64@2.5.1':
- resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [android]
- '@parcel/watcher-darwin-arm64@2.5.1':
- resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [darwin]
- '@parcel/watcher-darwin-x64@2.5.1':
- resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [darwin]
- '@parcel/watcher-freebsd-x64@2.5.1':
- resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [freebsd]
- '@parcel/watcher-linux-arm-glibc@2.5.1':
- resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
- '@parcel/watcher-linux-arm-musl@2.5.1':
- resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
- resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
- '@parcel/watcher-linux-arm64-musl@2.5.1':
- resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
- '@parcel/watcher-linux-x64-glibc@2.5.1':
- resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
- '@parcel/watcher-linux-x64-musl@2.5.1':
- resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
- '@parcel/watcher-win32-arm64@2.5.1':
- resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
- '@parcel/watcher-win32-ia32@2.5.1':
- resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
- '@parcel/watcher-win32-x64@2.5.1':
- resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
- '@parcel/watcher@2.5.1':
- resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
engines: {node: '>= 10.0.0'}
'@popperjs/core@2.11.8':
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- '@remix-run/router@1.23.1':
- resolution: {integrity: sha512-vDbaOzF7yT2Qs4vO6XV1MHcJv+3dgR1sT+l3B8xxOVhUC336prMvqrvsLL/9Dnw2xr6Qhz4J0dmS0llNAbnUmQ==}
+ '@remix-run/router@1.23.2':
+ resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==}
engines: {node: '>=14.0.0'}
'@rolldown/pluginutils@1.0.0-beta.27':
@@ -1139,8 +1139,8 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@sinclair/typebox@0.34.41':
- resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==}
+ '@sinclair/typebox@0.34.48':
+ resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==}
'@tannin/compile@1.1.0':
resolution: {integrity: sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==}
@@ -1226,14 +1226,14 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- '@types/lodash@4.17.21':
- resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==}
+ '@types/lodash@4.17.23':
+ resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==}
- '@types/node@25.0.3':
- resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
+ '@types/node@25.2.3':
+ resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
- '@types/react@19.2.7':
- resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
'@types/sortablejs@1.15.9':
resolution: {integrity: sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==}
@@ -1329,8 +1329,8 @@ packages:
'@xtuc/long@4.2.2':
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
- '@yaireo/tagify@4.35.6':
- resolution: {integrity: sha512-+UsaVuU3osYwmiie8YrbMkpyEInet2el3t+8lKf9j27RsACESmOvM5QtI0MwmzFdjMSAGwqdp7UjRqOo8GJrnA==}
+ '@yaireo/tagify@4.36.0':
+ resolution: {integrity: sha512-pq7z1E0sWWPNTp8gUzWI7yNbILtVbA2qBAGMfn5bDu3ttLLWxW4k0sdKB/RkSZfimqxr0dTr3UNjwIUl49/LDw==}
engines: {node: '>=16.15.0', npm: '>=9.0.0'}
peerDependencies:
prop-types: '>15.5.7'
@@ -1381,8 +1381,8 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
ansi-colors@1.1.0:
resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
@@ -1478,8 +1478,8 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- axe-core@4.11.0:
- resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==}
+ axe-core@4.11.1:
+ resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines: {node: '>=4'}
axobject-query@4.1.0:
@@ -1493,8 +1493,8 @@ packages:
'@babel/core': ^7.0.0
webpack: '>=2'
- babel-plugin-polyfill-corejs2@0.4.14:
- resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==}
+ babel-plugin-polyfill-corejs2@0.4.15:
+ resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -1503,8 +1503,13 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- babel-plugin-polyfill-regenerator@0.6.5:
- resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==}
+ babel-plugin-polyfill-corejs3@0.14.0:
+ resolution: {integrity: sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.6:
+ resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -1517,8 +1522,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.9.8:
- resolution: {integrity: sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==}
+ baseline-browser-mapping@2.9.19:
+ resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
hasBin: true
big.js@5.2.2:
@@ -1566,8 +1571,8 @@ packages:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001760:
- resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==}
+ caniuse-lite@1.0.30001770:
+ resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==}
chalk@0.4.0:
resolution: {integrity: sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==}
@@ -1589,8 +1594,8 @@ packages:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
- ci-info@4.3.1:
- resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
engines: {node: '>=8'}
classnames@2.3.1:
@@ -1673,11 +1678,11 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- core-js-compat@3.47.0:
- resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==}
+ core-js-compat@3.48.0:
+ resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
- core-js-pure@3.47.0:
- resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==}
+ core-js-pure@3.48.0:
+ resolution: {integrity: sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -1742,10 +1747,9 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
- detect-libc@1.0.3:
- resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
- engines: {node: '>=0.10'}
- hasBin: true
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
@@ -1771,8 +1775,8 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.267:
- resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+ electron-to-chromium@1.5.286:
+ resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1787,8 +1791,8 @@ packages:
encoding@0.1.13:
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
- enhanced-resolve@5.18.4:
- resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
+ enhanced-resolve@5.19.0:
+ resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
engines: {node: '>=10.13.0'}
error-ex@1.3.4:
@@ -1983,8 +1987,8 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
esrecurse@4.3.0:
@@ -2031,8 +2035,8 @@ packages:
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
- fastq@1.19.1:
- resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
@@ -2136,7 +2140,7 @@ packages:
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
globals@13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
@@ -2517,8 +2521,8 @@ packages:
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
@@ -2596,6 +2600,10 @@ packages:
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ node-exports-info@1.6.0:
+ resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==}
+ engines: {node: '>= 0.4'}
+
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
@@ -2765,8 +2773,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier@3.7.4:
- resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ prettier@3.8.1:
+ resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'}
hasBin: true
@@ -2873,15 +2881,15 @@ packages:
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
engines: {node: '>=0.10.0'}
- react-router-dom@6.30.2:
- resolution: {integrity: sha512-l2OwHn3UUnEVUqc6/1VMmR1cvZryZ3j3NzapC2eUXO1dB0sYp5mvwdjiXhpUbRb21eFow3qSxpP8Yv6oAU824Q==}
+ react-router-dom@6.30.3:
+ resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==}
engines: {node: '>=14.0.0'}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
- react-router@6.30.2:
- resolution: {integrity: sha512-H2Bm38Zu1bm8KUE5NVWRMzuIyAV8p/JrOaBJAwVmp37AXG72+CZJlEBw6pdn9i5TBgLMhNDgijS4ZlblpHyWTA==}
+ react-router@6.30.3:
+ resolution: {integrity: sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==}
engines: {node: '>=14.0.0'}
peerDependencies:
react: '>=16.8'
@@ -3034,8 +3042,9 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
- resolve@2.0.0-next.5:
- resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ resolve@2.0.0-next.6:
+ resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==}
+ engines: {node: '>= 0.4'}
hasBin: true
reusify@1.1.0:
@@ -3076,8 +3085,8 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- sass@1.97.0:
- resolution: {integrity: sha512-KR0igP1z4avUJetEuIeOdDlwaUDvkH8wSx7FdSjyYBS3dpyX3TzHfAMO0G1Q4/3cdjcmi3r7idh+KCmKqS+KeQ==}
+ sass@1.97.3:
+ resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -3149,8 +3158,8 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
- sortablejs@1.15.6:
- resolution: {integrity: sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==}
+ sortablejs@1.15.7:
+ resolution: {integrity: sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
@@ -3295,8 +3304,8 @@ packages:
uglify-js:
optional: true
- terser@5.44.1:
- resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==}
+ terser@5.46.0:
+ resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
engines: {node: '>=10'}
hasBin: true
@@ -3465,16 +3474,16 @@ packages:
terser:
optional: true
- watchpack@2.4.4:
- resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
+ watchpack@2.5.1:
+ resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
engines: {node: '>=10.13.0'}
- webpack-sources@3.3.3:
- resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
+ webpack-sources@3.3.4:
+ resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==}
engines: {node: '>=10.13.0'}
- webpack@5.104.0:
- resolution: {integrity: sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==}
+ webpack@5.105.2:
+ resolution: {integrity: sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -3501,8 +3510,8 @@ packages:
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
- which-typed-array@1.1.19:
- resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ which-typed-array@1.1.20:
+ resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
engines: {node: '>= 0.4'}
which@2.0.2:
@@ -3570,25 +3579,25 @@ snapshots:
'@adobe/css-tools@4.4.4': {}
- '@babel/code-frame@7.27.1':
+ '@babel/code-frame@7.29.0':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.28.5': {}
+ '@babel/compat-data@7.29.0': {}
- '@babel/core@7.28.5':
+ '@babel/core@7.29.0':
dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
debug: 4.4.3
@@ -3598,59 +3607,59 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/eslint-parser@7.28.5(@babel/core@7.28.5)(eslint@8.57.1)':
+ '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
eslint: 8.57.1
eslint-visitor-keys: 2.1.0
semver: 6.3.1
- '@babel/generator@7.28.5':
+ '@babel/generator@7.29.1':
dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.29.0
- '@babel/helper-compilation-targets@7.27.2':
+ '@babel/helper-compilation-targets@7.28.6':
dependencies:
- '@babel/compat-data': 7.28.5
+ '@babel/compat-data': 7.29.0
'@babel/helper-validator-option': 7.27.1
browserslist: 4.28.1
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)':
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.29.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)':
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
regexpu-core: 6.4.0
semver: 6.3.1
- '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)':
+ '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
debug: 4.4.3
lodash.debounce: 4.0.8
resolve: 1.22.11
@@ -3661,55 +3670,55 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.28.5':
dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-imports@7.27.1':
+ '@babel/helper-module-imports@7.28.6':
dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-imports': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.29.0
- '@babel/helper-plugin-utils@7.27.1': {}
+ '@babel/helper-plugin-utils@7.28.6': {}
- '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)':
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.5
+ '@babel/helper-wrap-function': 7.28.6
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)':
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
@@ -3719,603 +3728,603 @@ snapshots:
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helper-wrap-function@7.28.3':
+ '@babel/helper-wrap-function@7.28.6':
dependencies:
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helpers@7.28.4':
+ '@babel/helpers@7.28.6':
dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.5
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
- '@babel/parser@7.28.5':
+ '@babel/parser@7.29.0':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.29.0
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)':
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.5)':
+ '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.5)':
+ '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)':
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
- '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)':
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)':
+ '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)':
+ '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)':
+ '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-compilation-targets': 7.28.6
'@babel/helper-globals': 7.28.0
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/template': 7.27.2
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/template': 7.28.6
- '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)':
+ '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)':
+ '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)':
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/types': 7.28.5
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)':
+ '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.28.5)':
+ '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5)
- babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/preset-env@7.28.5(@babel/core@7.28.5)':
+ '@babel/preset-env@7.29.0(@babel/core@7.29.0)':
dependencies:
- '@babel/compat-data': 7.28.5
- '@babel/core': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/compat-data': 7.29.0
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)
- '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5)
- '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5)
- '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5)
- '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5)
- '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
- '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5)
- '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5)
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5)
- babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
- core-js-compat: 3.47.0
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0)
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)
+ babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0)
+ core-js-compat: 3.48.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)':
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/types': 7.28.5
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/types': 7.29.0
esutils: 2.0.3
- '@babel/preset-react@7.28.5(@babel/core@7.28.5)':
+ '@babel/preset-react@7.28.5(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
- '@babel/runtime-corejs3@7.28.4':
+ '@babel/runtime-corejs3@7.29.0':
dependencies:
- core-js-pure: 3.47.0
+ core-js-pure: 3.48.0
- '@babel/runtime@7.28.4': {}
+ '@babel/runtime@7.28.6': {}
- '@babel/template@7.27.2':
+ '@babel/template@7.28.6':
dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
- '@babel/traverse@7.28.5':
+ '@babel/traverse@7.29.0':
dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.5
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/types': 7.28.5
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
debug: 4.4.3
transitivePeerDependencies:
- supports-color
- '@babel/types@7.28.5':
+ '@babel/types@7.29.0':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
@@ -4392,7 +4401,7 @@ snapshots:
'@esbuild/win32-x64@0.18.20':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)':
+ '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
@@ -4437,18 +4446,18 @@ snapshots:
'@jest/pattern@30.0.1':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
jest-regex-util: 30.0.1
'@jest/schemas@30.0.5':
dependencies:
- '@sinclair/typebox': 0.34.41
+ '@sinclair/typebox': 0.34.48
'@jest/types@26.6.2':
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
'@types/yargs': 15.0.20
chalk: 4.1.2
@@ -4458,7 +4467,7 @@ snapshots:
'@jest/schemas': 30.0.5
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
'@types/yargs': 17.0.35
chalk: 4.1.2
@@ -4486,13 +4495,13 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
- '@microlink/react-json-view@1.27.0(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@microlink/react-json-view@1.27.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
react: 18.3.1
react-base16-styling: 0.9.1
react-dom: 18.3.1(react@18.3.1)
react-lifecycles-compat: 3.0.4
- react-textarea-autosize: 8.5.9(@types/react@19.2.7)(react@18.3.1)
+ react-textarea-autosize: 8.5.9(@types/react@19.2.14)(react@18.3.1)
transitivePeerDependencies:
- '@types/react'
@@ -4521,78 +4530,78 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
+ fastq: 1.20.1
- '@parcel/watcher-android-arm64@2.5.1':
+ '@parcel/watcher-android-arm64@2.5.6':
optional: true
- '@parcel/watcher-darwin-arm64@2.5.1':
+ '@parcel/watcher-darwin-arm64@2.5.6':
optional: true
- '@parcel/watcher-darwin-x64@2.5.1':
+ '@parcel/watcher-darwin-x64@2.5.6':
optional: true
- '@parcel/watcher-freebsd-x64@2.5.1':
+ '@parcel/watcher-freebsd-x64@2.5.6':
optional: true
- '@parcel/watcher-linux-arm-glibc@2.5.1':
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-arm-musl@2.5.1':
+ '@parcel/watcher-linux-arm-musl@2.5.6':
optional: true
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-arm64-musl@2.5.1':
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
optional: true
- '@parcel/watcher-linux-x64-glibc@2.5.1':
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-x64-musl@2.5.1':
+ '@parcel/watcher-linux-x64-musl@2.5.6':
optional: true
- '@parcel/watcher-win32-arm64@2.5.1':
+ '@parcel/watcher-win32-arm64@2.5.6':
optional: true
- '@parcel/watcher-win32-ia32@2.5.1':
+ '@parcel/watcher-win32-ia32@2.5.6':
optional: true
- '@parcel/watcher-win32-x64@2.5.1':
+ '@parcel/watcher-win32-x64@2.5.6':
optional: true
- '@parcel/watcher@2.5.1':
+ '@parcel/watcher@2.5.6':
dependencies:
- detect-libc: 1.0.3
+ detect-libc: 2.1.2
is-glob: 4.0.3
- micromatch: 4.0.8
node-addon-api: 7.1.1
+ picomatch: 4.0.3
optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.1
- '@parcel/watcher-darwin-arm64': 2.5.1
- '@parcel/watcher-darwin-x64': 2.5.1
- '@parcel/watcher-freebsd-x64': 2.5.1
- '@parcel/watcher-linux-arm-glibc': 2.5.1
- '@parcel/watcher-linux-arm-musl': 2.5.1
- '@parcel/watcher-linux-arm64-glibc': 2.5.1
- '@parcel/watcher-linux-arm64-musl': 2.5.1
- '@parcel/watcher-linux-x64-glibc': 2.5.1
- '@parcel/watcher-linux-x64-musl': 2.5.1
- '@parcel/watcher-win32-arm64': 2.5.1
- '@parcel/watcher-win32-ia32': 2.5.1
- '@parcel/watcher-win32-x64': 2.5.1
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
optional: true
'@popperjs/core@2.11.8': {}
- '@remix-run/router@1.23.1': {}
+ '@remix-run/router@1.23.2': {}
'@rolldown/pluginutils@1.0.0-beta.27': {}
'@rtsao/scc@1.1.0': {}
- '@sinclair/typebox@0.34.41': {}
+ '@sinclair/typebox@0.34.48': {}
'@tannin/compile@1.1.0':
dependencies:
@@ -4609,8 +4618,8 @@ snapshots:
'@testing-library/dom@7.31.2':
dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/runtime': 7.28.4
+ '@babel/code-frame': 7.29.0
+ '@babel/runtime': 7.28.6
'@types/aria-query': 4.2.2
aria-query: 4.2.2
chalk: 4.1.2
@@ -4621,25 +4630,25 @@ snapshots:
'@testing-library/jest-dom@5.17.0':
dependencies:
'@adobe/css-tools': 4.4.4
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@types/testing-library__jest-dom': 5.14.9
aria-query: 5.3.2
chalk: 3.0.0
css.escape: 1.5.1
dom-accessibility-api: 0.5.16
- lodash: 4.17.21
+ lodash: 4.17.23
redent: 3.0.0
'@testing-library/react@11.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@testing-library/dom': 7.31.2
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@testing-library/user-event@13.5.0(@testing-library/dom@7.31.2)':
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@testing-library/dom': 7.31.2
'@tippyjs/react@4.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -4652,24 +4661,24 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.29.0
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.29.0
'@types/base16@1.0.5': {}
@@ -4704,13 +4713,13 @@ snapshots:
'@types/json5@0.0.29': {}
- '@types/lodash@4.17.21': {}
+ '@types/lodash@4.17.23': {}
- '@types/node@25.0.3':
+ '@types/node@25.2.3':
dependencies:
undici-types: 7.16.0
- '@types/react@19.2.7':
+ '@types/react@19.2.14':
dependencies:
csstype: 3.2.3
@@ -4737,15 +4746,15 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-react@4.7.0(vite@4.5.14(@types/node@25.0.3)(sass@1.97.0)(terser@5.44.1))':
+ '@vitejs/plugin-react@4.7.0(vite@4.5.14(@types/node@25.2.3)(sass@1.97.3)(terser@5.46.0))':
dependencies:
- '@babel/core': 7.28.5
- '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 4.5.14(@types/node@25.0.3)(sass@1.97.0)(terser@5.44.1)
+ vite: 4.5.14(@types/node@25.2.3)(sass@1.97.3)(terser@5.46.0)
transitivePeerDependencies:
- supports-color
@@ -4825,22 +4834,22 @@ snapshots:
'@webassemblyjs/ast': 1.14.1
'@xtuc/long': 4.2.2
- '@wordpress/babel-plugin-makepot@4.4.0(@babel/core@7.28.5)':
+ '@wordpress/babel-plugin-makepot@4.4.0(@babel/core@7.29.0)':
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
gettext-parser: 1.4.0
- lodash: 4.17.21
+ lodash: 4.17.23
'@wordpress/hooks@2.12.3':
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@wordpress/i18n@3.20.0':
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@wordpress/hooks': 2.12.3
gettext-parser: 1.4.0
- lodash: 4.17.21
+ lodash: 4.17.23
memize: 1.1.0
sprintf-js: 1.1.3
tannin: 1.2.0
@@ -4849,7 +4858,7 @@ snapshots:
'@xtuc/long@4.2.2': {}
- '@yaireo/tagify@4.35.6(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@yaireo/tagify@4.36.0(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
prop-types: 15.8.1
react: 18.3.1
@@ -4871,17 +4880,17 @@ snapshots:
add-px-to-style@1.0.0: {}
- ajv-formats@2.1.1(ajv@8.17.1):
+ ajv-formats@2.1.1(ajv@8.18.0):
optionalDependencies:
- ajv: 8.17.1
+ ajv: 8.18.0
ajv-keywords@3.5.2(ajv@6.12.6):
dependencies:
ajv: 6.12.6
- ajv-keywords@5.1.0(ajv@8.17.1):
+ ajv-keywords@5.1.0(ajv@8.18.0):
dependencies:
- ajv: 8.17.1
+ ajv: 8.18.0
fast-deep-equal: 3.1.3
ajv@6.12.6:
@@ -4891,7 +4900,7 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- ajv@8.17.1:
+ ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
fast-uri: 3.1.0
@@ -4920,8 +4929,8 @@ snapshots:
aria-query@4.2.2:
dependencies:
- '@babel/runtime': 7.28.4
- '@babel/runtime-corejs3': 7.28.4
+ '@babel/runtime': 7.28.6
+ '@babel/runtime-corejs3': 7.29.0
aria-query@5.3.2: {}
@@ -5006,40 +5015,48 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
- axe-core@4.11.0: {}
+ axe-core@4.11.1: {}
axobject-query@4.1.0: {}
- babel-loader@8.4.1(@babel/core@7.28.5)(webpack@5.104.0):
+ babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.105.2):
dependencies:
- '@babel/core': 7.28.5
+ '@babel/core': 7.29.0
find-cache-dir: 3.3.2
loader-utils: 2.0.4
make-dir: 3.1.0
schema-utils: 2.7.1
- webpack: 5.104.0
+ webpack: 5.105.2
- babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5):
+ babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0):
dependencies:
- '@babel/compat-data': 7.28.5
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ '@babel/compat-data': 7.29.0
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5):
+ babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0):
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
- core-js-compat: 3.47.0
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ core-js-compat: 3.48.0
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5):
+ babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0):
dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ core-js-compat: 3.48.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
@@ -5049,7 +5066,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.9.8: {}
+ baseline-browser-mapping@2.9.19: {}
big.js@5.2.2: {}
@@ -5064,9 +5081,9 @@ snapshots:
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.8
- caniuse-lite: 1.0.30001760
- electron-to-chromium: 1.5.267
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001770
+ electron-to-chromium: 1.5.286
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -5100,7 +5117,7 @@ snapshots:
camelcase@5.3.1: {}
- caniuse-lite@1.0.30001760: {}
+ caniuse-lite@1.0.30001770: {}
chalk@0.4.0:
dependencies:
@@ -5124,7 +5141,7 @@ snapshots:
chrome-trace-event@1.0.4: {}
- ci-info@4.3.1: {}
+ ci-info@4.4.0: {}
classnames@2.3.1: {}
@@ -5198,11 +5215,11 @@ snapshots:
convert-source-map@2.0.0: {}
- core-js-compat@3.47.0:
+ core-js-compat@3.48.0:
dependencies:
browserslist: 4.28.1
- core-js-pure@3.47.0: {}
+ core-js-pure@3.48.0: {}
core-util-is@1.0.3: {}
@@ -5262,7 +5279,7 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- detect-libc@1.0.3:
+ detect-libc@2.1.2:
optional: true
doctrine@2.1.0:
@@ -5283,7 +5300,7 @@ snapshots:
dom-helpers@5.2.1:
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
csstype: 3.2.3
dompurify@3.2.7:
@@ -5296,7 +5313,7 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.267: {}
+ electron-to-chromium@1.5.286: {}
emoji-regex@8.0.0: {}
@@ -5308,7 +5325,7 @@ snapshots:
dependencies:
iconv-lite: 0.6.3
- enhanced-resolve@5.18.4:
+ enhanced-resolve@5.19.0:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
@@ -5372,7 +5389,7 @@ snapshots:
typed-array-byte-offset: 1.0.4
typed-array-length: 1.0.7
unbox-primitive: 1.1.0
- which-typed-array: 1.1.19
+ which-typed-array: 1.1.20
es-define-property@1.0.1: {}
@@ -5532,7 +5549,7 @@ snapshots:
array-includes: 3.1.9
array.prototype.flatmap: 1.3.3
ast-types-flow: 0.0.8
- axe-core: 4.11.0
+ axe-core: 4.11.1
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
@@ -5580,7 +5597,7 @@ snapshots:
object.fromentries: 2.0.8
object.values: 1.2.1
prop-types: 15.8.1
- resolve: 2.0.0-next.5
+ resolve: 2.0.0-next.6
semver: 6.3.1
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
@@ -5613,7 +5630,7 @@ snapshots:
eslint@8.57.1:
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1)
'@eslint-community/regexpp': 4.12.2
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.57.1
@@ -5630,7 +5647,7 @@ snapshots:
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
- esquery: 1.6.0
+ esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 6.0.1
@@ -5660,7 +5677,7 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 3.4.3
- esquery@1.6.0:
+ esquery@1.7.0:
dependencies:
estraverse: 5.3.0
@@ -5700,7 +5717,7 @@ snapshots:
fast-uri@3.1.0: {}
- fastq@1.19.1:
+ fastq@1.20.1:
dependencies:
reusify: 1.1.0
@@ -6033,7 +6050,7 @@ snapshots:
is-typed-array@1.1.15:
dependencies:
- which-typed-array: 1.1.19
+ which-typed-array: 1.1.20
is-utf8@0.2.1: {}
@@ -6081,7 +6098,7 @@ snapshots:
jest-message-util@30.2.0:
dependencies:
- '@babel/code-frame': 7.27.1
+ '@babel/code-frame': 7.29.0
'@jest/types': 30.2.0
'@types/stack-utils': 2.0.3
chalk: 4.1.2
@@ -6094,7 +6111,7 @@ snapshots:
jest-mock@30.2.0:
dependencies:
'@jest/types': 30.2.0
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
jest-util: 30.2.0
jest-regex-util@30.0.1: {}
@@ -6102,15 +6119,15 @@ snapshots:
jest-util@30.2.0:
dependencies:
'@jest/types': 30.2.0
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
chalk: 4.1.2
- ci-info: 4.3.1
+ ci-info: 4.4.0
graceful-fs: 4.2.11
picomatch: 4.0.3
jest-worker@27.5.1:
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -6200,7 +6217,7 @@ snapshots:
lodash.uniq@4.5.0: {}
- lodash@4.17.21: {}
+ lodash@4.17.23: {}
loose-envify@1.4.0:
dependencies:
@@ -6261,6 +6278,13 @@ snapshots:
node-addon-api@7.1.1:
optional: true
+ node-exports-info@1.6.0:
+ dependencies:
+ array.prototype.flatmap: 1.3.3
+ es-errors: 1.3.0
+ object.entries: 1.1.9
+ semver: 6.3.1
+
node-releases@2.0.27: {}
nomnom@1.8.1:
@@ -6434,7 +6458,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier@3.7.4: {}
+ prettier@3.8.1: {}
pretty-format@26.6.2:
dependencies:
@@ -6480,9 +6504,9 @@ snapshots:
react-base16-styling@0.9.1:
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
'@types/base16': 1.0.5
- '@types/lodash': 4.17.21
+ '@types/lodash': 4.17.23
base16: 1.0.0
color: 3.2.1
csstype: 3.2.3
@@ -6508,8 +6532,8 @@ snapshots:
react-gettext-parser@1.16.0:
dependencies:
- '@babel/parser': 7.28.5
- '@babel/traverse': 7.28.5
+ '@babel/parser': 7.29.0
+ '@babel/traverse': 7.29.0
colors: 1.4.0
convert-newline: 0.0.5
gettext-parser: 1.4.0
@@ -6551,25 +6575,25 @@ snapshots:
react-refresh@0.17.0: {}
- react-router-dom@6.30.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-router-dom@6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@remix-run/router': 1.23.1
+ '@remix-run/router': 1.23.2
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- react-router: 6.30.2(react@18.3.1)
+ react-router: 6.30.3(react@18.3.1)
- react-router@6.30.2(react@18.3.1):
+ react-router@6.30.3(react@18.3.1):
dependencies:
- '@remix-run/router': 1.23.1
+ '@remix-run/router': 1.23.2
react: 18.3.1
- react-sortablejs@6.1.4(@types/sortablejs@1.15.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sortablejs@1.15.6):
+ react-sortablejs@6.1.4(@types/sortablejs@1.15.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sortablejs@1.15.7):
dependencies:
'@types/sortablejs': 1.15.9
classnames: 2.3.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- sortablejs: 1.15.6
+ sortablejs: 1.15.7
tiny-invariant: 1.2.0
react-table-sticky@1.1.3: {}
@@ -6584,18 +6608,18 @@ snapshots:
prop-types: 15.8.1
react: 18.3.1
- react-textarea-autosize@8.5.9(@types/react@19.2.7)(react@18.3.1):
+ react-textarea-autosize@8.5.9(@types/react@19.2.14)(react@18.3.1):
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
react: 18.3.1
- use-composed-ref: 1.4.0(@types/react@19.2.7)(react@18.3.1)
- use-latest: 1.3.0(@types/react@19.2.7)(react@18.3.1)
+ use-composed-ref: 1.4.0(@types/react@19.2.14)(react@18.3.1)
+ use-latest: 1.3.0(@types/react@19.2.14)(react@18.3.1)
transitivePeerDependencies:
- '@types/react'
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.28.4
+ '@babel/runtime': 7.28.6
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -6639,9 +6663,9 @@ snapshots:
readdirp@4.1.2: {}
- recoil-nexus@0.5.1(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(recoil@0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3):
+ recoil-nexus@0.5.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(recoil@0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3):
dependencies:
- '@types/react': 19.2.7
+ '@types/react': 19.2.14
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
recoil: 0.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -6724,9 +6748,12 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- resolve@2.0.0-next.5:
+ resolve@2.0.0-next.6:
dependencies:
+ es-errors: 1.3.0
is-core-module: 2.16.1
+ node-exports-info: 1.6.0
+ object-keys: 1.1.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -6769,13 +6796,13 @@ snapshots:
safer-buffer@2.1.2: {}
- sass@1.97.0:
+ sass@1.97.3:
dependencies:
chokidar: 4.0.3
immutable: 5.1.4
source-map-js: 1.2.1
optionalDependencies:
- '@parcel/watcher': 2.5.1
+ '@parcel/watcher': 2.5.6
scheduler@0.23.2:
dependencies:
@@ -6790,9 +6817,9 @@ snapshots:
schema-utils@4.3.3:
dependencies:
'@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
+ ajv: 8.18.0
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ ajv-keywords: 5.1.0(ajv@8.18.0)
semver@5.7.2: {}
@@ -6866,7 +6893,7 @@ snapshots:
slash@3.0.0: {}
- sortablejs@1.15.6: {}
+ sortablejs@1.15.7: {}
source-map-js@1.2.1: {}
@@ -7016,16 +7043,16 @@ snapshots:
tapable@2.3.0: {}
- terser-webpack-plugin@5.3.16(webpack@5.104.0):
+ terser-webpack-plugin@5.3.16(webpack@5.105.2):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
serialize-javascript: 6.0.2
- terser: 5.44.1
- webpack: 5.104.0
+ terser: 5.46.0
+ webpack: 5.105.2
- terser@5.44.1:
+ terser@5.46.0:
dependencies:
'@jridgewell/source-map': 0.3.11
acorn: 8.15.0
@@ -7141,28 +7168,28 @@ snapshots:
dependencies:
punycode: 2.3.1
- use-composed-ref@1.4.0(@types/react@19.2.7)(react@18.3.1):
+ use-composed-ref@1.4.0(@types/react@19.2.14)(react@18.3.1):
dependencies:
react: 18.3.1
optionalDependencies:
- '@types/react': 19.2.7
+ '@types/react': 19.2.14
use-constant@1.1.1(react@18.3.1):
dependencies:
react: 18.3.1
- use-isomorphic-layout-effect@1.2.1(@types/react@19.2.7)(react@18.3.1):
+ use-isomorphic-layout-effect@1.2.1(@types/react@19.2.14)(react@18.3.1):
dependencies:
react: 18.3.1
optionalDependencies:
- '@types/react': 19.2.7
+ '@types/react': 19.2.14
- use-latest@1.3.0(@types/react@19.2.7)(react@18.3.1):
+ use-latest@1.3.0(@types/react@19.2.14)(react@18.3.1):
dependencies:
react: 18.3.1
- use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.7)(react@18.3.1)
+ use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.14)(react@18.3.1)
optionalDependencies:
- '@types/react': 19.2.7
+ '@types/react': 19.2.14
util-deprecate@1.0.2: {}
@@ -7180,25 +7207,25 @@ snapshots:
remove-trailing-separator: 1.1.0
replace-ext: 1.0.1
- vite@4.5.14(@types/node@25.0.3)(sass@1.97.0)(terser@5.44.1):
+ vite@4.5.14(@types/node@25.2.3)(sass@1.97.3)(terser@5.46.0):
dependencies:
esbuild: 0.18.20
postcss: 8.5.6
rollup: 3.29.5
optionalDependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.2.3
fsevents: 2.3.3
- sass: 1.97.0
- terser: 5.44.1
+ sass: 1.97.3
+ terser: 5.46.0
- watchpack@2.4.4:
+ watchpack@2.5.1:
dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
- webpack-sources@3.3.3: {}
+ webpack-sources@3.3.4: {}
- webpack@5.104.0:
+ webpack@5.105.2:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -7210,7 +7237,7 @@ snapshots:
acorn-import-phases: 1.0.4(acorn@8.15.0)
browserslist: 4.28.1
chrome-trace-event: 1.0.4
- enhanced-resolve: 5.18.4
+ enhanced-resolve: 5.19.0
es-module-lexer: 2.0.0
eslint-scope: 5.1.1
events: 3.3.0
@@ -7222,9 +7249,9 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.16(webpack@5.104.0)
- watchpack: 2.4.4
- webpack-sources: 3.3.3
+ terser-webpack-plugin: 5.3.16(webpack@5.105.2)
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -7252,7 +7279,7 @@ snapshots:
isarray: 2.0.5
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
- which-typed-array: 1.1.19
+ which-typed-array: 1.1.20
which-collection@1.0.2:
dependencies:
@@ -7265,7 +7292,7 @@ snapshots:
which-module@2.0.1: {}
- which-typed-array@1.1.19:
+ which-typed-array@1.1.20:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
diff --git a/frontend-dev/pot-to-php.js b/frontend-dev/pot-to-php.js
index 0986fe4e8..af0c7534b 100644
--- a/frontend-dev/pot-to-php.js
+++ b/frontend-dev/pot-to-php.js
@@ -18,10 +18,62 @@ const fileHeader =
'()+-_,]/g, '_')}_i18n_strings = array(`,
+ '$btcbi_i18n_strings = array('
].join(NEWLINE) + NEWLINE
-const fileFooter = NEWLINE + [');', '/* THIS IS THE END OF THE GENERATED FILE */'].join(NEWLINE) + NEWLINE
+const fileFooter =
+ NEWLINE + [');', '/* THIS IS THE END OF THE GENERATED FILE */'].join(NEWLINE) + NEWLINE
+
+const PLACEHOLDER_REGEX = /%(\d+\$)?[sdfeEgGoxXbcu]/g
+
+/**
+ * Builds a "translators:" PHP comment for strings containing placeholders.
+ * Uses the extracted comment from the POT file if available, otherwise auto-generates one.
+ *
+ * @param {object} translation The translation object from gettext-parser.
+ * @return {string} A PHP comment line with leading TAB indent, or empty string if no placeholders.
+ */
+function buildTranslatorsComment(translation) {
+ const extracted = (translation.comments && translation.comments.extracted) || ''
+ if (extracted.toLowerCase().includes('translators:')) {
+ return `${TAB}/* ${extracted.trim()} */${NEWLINE}`
+ }
+
+ const numbered = numberPlaceholders(translation.msgid)
+ const placeholders = numbered.match(PLACEHOLDER_REGEX)
+ if (!placeholders) return ''
+
+ if (placeholders.length === 1) {
+ return `${TAB}/* translators: ${placeholders[0]}: placeholder */${NEWLINE}`
+ }
+
+ const description = placeholders.map((p, i) => `${i + 1}: ${p} placeholder`).join(' ')
+ return `${TAB}/* translators: ${description} */${NEWLINE}`
+}
+
+/**
+ * Numbers unordered printf placeholders when a string contains more than one.
+ * Converts e.g. "%s ... %s" to "%1$s ... %2$s". Already-numbered placeholders
+ * (like %1$s) are left untouched.
+ *
+ * @param {string} input The string to process.
+ * @return {string} The string with numbered placeholders, or unchanged if 0-1 placeholders.
+ */
+function numberPlaceholders(input) {
+ const matches = input.match(PLACEHOLDER_REGEX)
+ if (!matches || matches.length <= 1) return input
+
+ const hasUnordered = matches.some(m => !/^\%\d+\$/.test(m))
+ if (!hasUnordered) return input
+
+ let counter = 0
+ return input.replace(PLACEHOLDER_REGEX, match => {
+ if (/^\%\d+\$/.test(match)) return match
+ counter++
+ const specifier = match.slice(1)
+ return `%${counter}$${specifier}`
+ })
+}
/**
* Escapes single quotes.
@@ -48,21 +100,26 @@ function convertTranslationToPHP(translation, textdomain, context = '') {
let original = translation.msgid
if (original !== '') {
+ const translatorsComment = buildTranslatorsComment(translation)
original = escapeSingleQuotes(original)
+ const ordered = escapeSingleQuotes(numberPlaceholders(translation.msgid))
if (isEmpty(translation.msgid_plural)) {
+ php += translatorsComment
if (isEmpty(context)) {
- php += `${TAB}'${original}' => __('${original}', '${textdomain}')`
+ php += `${TAB}'${original}' => __('${ordered}', '${textdomain}')`
} else {
- php += `${TAB}'${original}' => _x('${original}', '${translation.msgctxt}', '${textdomain}')`
+ php += `${TAB}'${original}' => _x('${ordered}', '${translation.msgctxt}', '${textdomain}')`
}
} else {
const plural = escapeSingleQuotes(translation.msgid_plural)
+ const orderedPlural = escapeSingleQuotes(numberPlaceholders(translation.msgid_plural))
+ php += translatorsComment
if (isEmpty(context)) {
- php += `${TAB}'${original}' => _n_noop('${original}', '${plural}', '${textdomain}')`
+ php += `${TAB}'${original}' => _n_noop('${ordered}', '${orderedPlural}', '${textdomain}')`
} else {
- php += `${TAB}'${original}' => _nx_noop('${original}', '${plural}', '${translation.msgctxt}', '${textdomain}')`
+ php += `${TAB}'${original}' => _nx_noop('${ordered}', '${orderedPlural}', '${translation.msgctxt}', '${textdomain}')`
}
}
}
@@ -80,8 +137,8 @@ function convertPOTToPHP(potFile, phpFile, options) {
const translations = parsedPO.translations[context]
const newOutput = Object.values(translations)
- .map((translation) => convertTranslationToPHP(translation, options.textdomain, context))
- .filter((php) => php !== '')
+ .map(translation => convertTranslationToPHP(translation, options.textdomain, context))
+ .filter(php => php !== '')
output = [...output, ...newOutput]
}
@@ -92,5 +149,5 @@ function convertPOTToPHP(potFile, phpFile, options) {
}
convertPOTToPHP(args[0], args[1], {
- textdomain: args[2],
+ textdomain: args[2]
})
diff --git a/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheet.jsx b/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheet.jsx
index 59acde23d..d747c9cb7 100644
--- a/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheet.jsx
+++ b/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheet.jsx
@@ -31,19 +31,6 @@ function GoogleSheet({ formFields, setFlow, flow, allIntegURL }) {
actions: {}
})
- useEffect(() => {
- if (sheetConf.oneClickAuthCredentials === undefined) {
- const requestParams = {
- actionName: 'googleSheet'
- }
- bitsFetch(null, 'get/credentials', requestParams, 'Get').then(res => {
- setSheetConf(prevConf => {
- return { ...prevConf, oneClickAuthCredentials: res.data }
- })
- })
- }
- }, [])
-
const nextPage = () => {
setTimeout(() => {
document.getElementById('btcd-settings-wrp').scrollTop = 0
diff --git a/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheetAuthorization.jsx b/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheetAuthorization.jsx
index 53f3e94b4..6c2707ade 100644
--- a/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheetAuthorization.jsx
+++ b/frontend-dev/src/components/AllIntegrations/GoogleSheet/GoogleSheetAuthorization.jsx
@@ -33,30 +33,6 @@ export default function GoogleSheetAuthorization({
const [authData, setAuthData] = useState([])
const [authInfo, setAuthInfo] = useRecoilState(authInfoAtom)
const [selectedAuthType, setSelectedAuthType] = useState('Custom Authorization')
- // const [selectedUserId, setSelectedUserId] = useState(null)
-
- //Commented for one click authorization
-
- // const handleChange = (option) => {
- // setSelectedAuthType(option)
- // setIsAuthorized(false)
-
- // setSheetConf((prevConf) => ({
- // ...prevConf,
- // selectedAuthType: option,
- // ...(option === "One Click Authorization" && process.env.NODE_ENV !== 'development'
- // ? {
- // clientId: '',
- // clientSecret: '',
- // }
- // : {}),
- // }))
-
- // if (option === "One Click Authorization") {
- // processAuth(option);
- // }
- // setIsLoading(false);
- // };
const processAuth = option => {
handleAuthorize(sheetConf, option, setError, setIsLoading)
@@ -76,26 +52,6 @@ export default function GoogleSheetAuthorization({
})
}
- // useEffect(() => {
- // if (step === 1) {
- // getAuthData()
- // }
- // }, [])
-
- // useEffect(() => {
-
- // if (step === 1 && isEdit) {
-
- // const authIdExists = authData.find(auth => auth.id === sheetConf.authId);
-
- // if (authIdExists) {
- // setSelectedUserId(sheetConf.authId)
- // } else {
- // setSelectedUserId(null)
- // }
- // }
- // }, [authData])
-
const handleVerificationCode = async authInfo => {
await tokenHelper(
authInfo,
@@ -109,7 +65,6 @@ export default function GoogleSheetAuthorization({
setSnackbar
)
setAuthInfo(undefined)
- // getAuthData()
}
useEffect(() => {
@@ -128,13 +83,6 @@ export default function GoogleSheetAuthorization({
}
const nextPage = () => {
- // const selectedAuth = authData.find((item) => item.id === selectedUserId)
- // setSheetConf((prevConf) => ({
- // ...prevConf,
- // tokenDetails: selectedAuth ? selectedAuth.tokenDetails : '',
- // authId: selectedAuth ? selectedAuth.id : '',
- // }))
-
setTimeout(() => {
document.getElementById('btcd-settings-wrp').scrollTop = 0
}, 300)
@@ -152,16 +100,6 @@ export default function GoogleSheetAuthorization({
)}
{googleSheet?.docLink && }
- {/*
-
Choose channel
-
- */}
-
{selectedAuthType === 'Custom Authorization' && (
@@ -258,19 +196,6 @@ export default function GoogleSheetAuthorization({
}}
/>
)}
- {/* {authData.length > 0 &&
- <>
-
Choose your connected account
-
- >
- } */}
{isAuthorized && selectedAuthType === 'One Click Authorization' && (
)}
- {/*

*/}
-
+
+
{inte.type}
))}
diff --git a/frontend-dev/src/pages/ChangelogToggle.jsx b/frontend-dev/src/pages/ChangelogToggle.jsx
index 291e49344..204b44037 100644
--- a/frontend-dev/src/pages/ChangelogToggle.jsx
+++ b/frontend-dev/src/pages/ChangelogToggle.jsx
@@ -11,7 +11,7 @@ import { __, sprintf } from '../Utils/i18nwrap'
// const source = !btcbi.isPro ? 'bit-integrations' : 'bit-integrations-pro'
// const dealURL = `https://bitapps.pro/new-year-deal/#bit-integrations-pricing`
-const releaseDate = '2nd February 2026'
+const releaseDate = '16th February 2026'
// Changelog items format [{ 'label': '', 'desc': '', 'isPro': true }]
const changeLog = [
@@ -19,110 +19,79 @@ const changeLog = [
label: __('Note', 'bit-integrations'),
headClass: 'new-note',
itemClass: '',
- items: [
- {
- label:
- 'Bit Assist and Bit Social integrations are now available in the Free Plugin! Enjoy enhanced automation and social features today! 🎉',
- desc: '',
- isPro: false
- }
- ]
+ items: []
},
{
label: __('New Actions', 'bit-integrations'),
headClass: 'new-integration',
itemClass: 'integration-list',
- items: [
- {
- label: 'SEOPress',
- desc: '01 events Added.',
- isPro: true
- },
- {
- label: 'Fabman',
- desc: '05 events Added.',
- isPro: true
- }
- ]
+ items: []
},
{
label: __('New Triggers', 'bit-integrations'),
headClass: 'new-trigger',
itemClass: 'integration-list',
- items: [
- {
- label: 'SEOPress',
- desc: '04 events Added.',
- isPro: true
- },
- {
- label: 'Thrive Leads',
- desc: '02 events Added.',
- isPro: true
- }
- ]
+ items: []
},
{
label: __('New Features', 'bit-integrations'),
headClass: 'new-feature',
itemClass: 'feature-list',
+ items: []
+ },
+ {
+ label: __('Improvements', 'bit-integrations'),
+ headClass: 'new-improvement',
+ itemClass: 'feature-list',
items: [
{
- label: 'GoHighLevel',
- desc: 'Added Tags Utilities to REST API v2 for better integration.',
- isPro: true
+ label: 'Refactor',
+ desc: 'Refactored integration controllers, routes, and helpers for cleaner namespace consistency.',
+ isPro: false
},
{
- label: 'RapidMail',
- desc: 'Introduced Force Subscribe Utilities for enhanced subscription management.',
+ label: 'Stability',
+ desc: 'Refined redirect, debug-log, slow-query lint issues and updated Google Sheets integration handling.',
isPro: false
}
]
},
{
- label: __('Improvements', 'bit-integrations'),
- headClass: 'new-improvement',
- itemClass: 'feature-list',
+ label: __('Bug Fixes', 'bit-integrations'),
+ headClass: 'fixes',
+ itemClass: 'fixes-list',
items: []
},
{
- label: __('Bug Fixes', 'bit-integrations'),
+ label: __('Security', 'bit-integrations'),
headClass: 'fixes',
itemClass: 'fixes-list',
items: [
{
- label: 'Hotfix',
- desc: 'Fixed the issue where the selected trigger hook was empty, preventing the trigger from firing correctly.',
- isPro: true
- },
- {
- label: 'Malware Fix',
- desc: 'Resolved malware issue detected in the file php-cs-fixer.phar in the plugin directory.',
- isPro: true
- },
- {
- label: 'Amelia Booking',
- desc: 'Resolved issue with Multi-Select/Checkbox field values not saving correctly.',
- isPro: true
- },
- {
- label: 'WooCommerce',
- desc: 'Fixed issue with Checkout Metadata not displaying properly.',
+ label: 'Hardening',
+ desc: 'Addressed reported security vulnerabilities in API helpers and admin components.',
isPro: false
},
{
- label: 'WPForms',
- desc: 'Corrected problem with Payment Fields not functioning as expected.',
+ label: 'Query Safety',
+ desc: 'Improved SQL query handling and defensive checks across integrations.',
isPro: false
- },
+ }
+ ]
+ },
+ {
+ label: __('Compatibility & Compliance', 'bit-integrations'),
+ headClass: 'new-improvement',
+ itemClass: 'feature-list',
+ items: [
{
- label: 'WP User Registration',
- desc: 'Resolved trimming issue with Meta Fields during registration.',
+ label: 'WordPress Standards',
+ desc: 'Resolved WPCS and Plugin Check warnings, including hook/query compliance updates.',
isPro: false
},
{
- label: 'Bit Assist',
- desc: 'Resolved form submit entries null data issue.',
+ label: 'Query Suppression',
+ desc: 'Normalized cached lookup/direct query suppression handling to align with current checks.',
isPro: false
}
]
diff --git a/frontend-dev/src/resource/img/integ/Zoom Meeting.webp b/frontend-dev/src/resource/img/integ/Zoom Meeting.webp
deleted file mode 100644
index 73d00eaaa..000000000
Binary files a/frontend-dev/src/resource/img/integ/Zoom Meeting.webp and /dev/null differ
diff --git a/frontend-dev/src/resource/img/integ/brevo(SendinBlue).webp b/frontend-dev/src/resource/img/integ/brevo.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/brevo(SendinBlue).webp
rename to frontend-dev/src/resource/img/integ/brevo.webp
diff --git a/frontend-dev/src/resource/img/integ/kit(ConvertKit).webp b/frontend-dev/src/resource/img/integ/convertKit.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/kit(ConvertKit).webp
rename to frontend-dev/src/resource/img/integ/convertKit.webp
diff --git a/frontend-dev/src/resource/img/integ/make(Integromat).webp b/frontend-dev/src/resource/img/integ/make.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/make(Integromat).webp
rename to frontend-dev/src/resource/img/integ/make.webp
diff --git a/frontend-dev/src/resource/img/integ/ottoKit(SureTriggers).webp b/frontend-dev/src/resource/img/integ/ottoKit.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/ottoKit(SureTriggers).webp
rename to frontend-dev/src/resource/img/integ/ottoKit.webp
diff --git a/frontend-dev/src/resource/img/integ/sarbacane(Mailify).webp b/frontend-dev/src/resource/img/integ/sarbacane.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/sarbacane(Mailify).webp
rename to frontend-dev/src/resource/img/integ/sarbacane.webp
diff --git a/frontend-dev/src/resource/img/integ/zohoMarketingAutomation(ZohoMarketingHub).webp b/frontend-dev/src/resource/img/integ/zohoMarketingAutomation.webp
similarity index 100%
rename from frontend-dev/src/resource/img/integ/zohoMarketingAutomation(ZohoMarketingHub).webp
rename to frontend-dev/src/resource/img/integ/zohoMarketingAutomation.webp
diff --git a/includes/Actions/ACPT/ACPTController.php b/includes/Actions/ACPT/ACPTController.php
index 18adbcb5e..af0fc8825 100644
--- a/includes/Actions/ACPT/ACPTController.php
+++ b/includes/Actions/ACPT/ACPTController.php
@@ -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;
/**
@@ -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'));
}
diff --git a/includes/Actions/ACPT/ACPTHelper.php b/includes/Actions/ACPT/ACPTHelper.php
index f686841a3..10fa2fe7a 100644
--- a/includes/Actions/ACPT/ACPTHelper.php
+++ b/includes/Actions/ACPT/ACPTHelper.php
@@ -1,9 +1,9 @@
false,
+ // translators: %s: Placeholder value
'message' => \sprintf(__('Required field %s is empty', 'bit-integrations'), $label),
'code' => 422,
];
@@ -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;
}
@@ -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,
];
diff --git a/includes/Actions/ACPT/RecordApiHelper.php b/includes/Actions/ACPT/RecordApiHelper.php
index d257e1bad..26ae1cb1f 100644
--- a/includes/Actions/ACPT/RecordApiHelper.php
+++ b/includes/Actions/ACPT/RecordApiHelper.php
@@ -4,10 +4,10 @@
* ACPT Record Api
*/
-namespace BitCode\FI\Actions\ACPT;
+namespace BitApps\Integrations\Actions\ACPT;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -111,9 +111,11 @@ public function createOrUpdateTaxonomy($finalData, $fieldValues, $isUpdate = fal
$path = $isUpdate ? '/taxonomy/' . $slug : '/taxonomy';
$apiEndpoint = $this->apiUrl . $path;
- $hook = 'btcbi_acpt_' . ($isUpdate ? 'update' : 'create') . '_taxonomy';
-
- $response = apply_filters($hook, false, $apiEndpoint, $this->apikey, $finalData);
+ if ($isUpdate) {
+ $response = apply_filters('btcbi_acpt_update_taxonomy', false, $apiEndpoint, $this->apikey, $finalData);
+ } else {
+ $response = apply_filters('btcbi_acpt_create_taxonomy', false, $apiEndpoint, $this->apikey, $finalData);
+ }
return ACPTHelper::validateResponse($response);
}
@@ -195,9 +197,11 @@ public function createOrUpdateOptionPage($finalData, $isUpdate = false)
$path = $isUpdate ? '/option-page/' . $finalData['menuSlug'] : '/option-page';
$apiEndpoint = $this->apiUrl . $path;
- $hook = 'btcbi_acpt_' . ($isUpdate ? 'update' : 'create') . '_option_page';
-
- $response = apply_filters($hook, false, $apiEndpoint, $this->apikey, wp_json_encode($finalData));
+ if ($isUpdate) {
+ $response = apply_filters('btcbi_acpt_update_option_page', false, $apiEndpoint, $this->apikey, wp_json_encode($finalData));
+ } else {
+ $response = apply_filters('btcbi_acpt_create_option_page', false, $apiEndpoint, $this->apikey, wp_json_encode($finalData));
+ }
return ACPTHelper::validateResponse($response);
}
diff --git a/includes/Actions/ACPT/Routes.php b/includes/Actions/ACPT/Routes.php
index 93b4904f9..981f2b9fb 100644
--- a/includes/Actions/ACPT/Routes.php
+++ b/includes/Actions/ACPT/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\ACPT\ACPTController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ACPT\ACPTController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('acpt_authentication', [ACPTController::class, 'authentication']);
diff --git a/includes/Actions/AcademyLms/AcademyLmsController.php b/includes/Actions/AcademyLms/AcademyLmsController.php
index 8d20d4d6d..ed7a0f31a 100644
--- a/includes/Actions/AcademyLms/AcademyLmsController.php
+++ b/includes/Actions/AcademyLms/AcademyLmsController.php
@@ -1,8 +1,12 @@
type;
if (!class_exists('Academy')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not installed or activated', 'bit-integrations'), 'Academy Lms'));
}
@@ -121,6 +128,7 @@ public static function completeLesson($selectedCourse, $selectedLesson)
$course_id = $selectedCourse[0];
$topic_type = 'lesson';
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using Academy LMS's own hook for compatibility
do_action('academy/frontend/before_mark_topic_complete', $topic_type, $course_id, $topic_id, $user_id);
$option_name = 'academy_course_' . $course_id . '_completed_topics';
@@ -133,6 +141,7 @@ public static function completeLesson($selectedCourse, $selectedLesson)
}
$saved_topics_lists = wp_json_encode($saved_topics_lists);
update_user_meta($user_id, $option_name, $saved_topics_lists);
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using Academy LMS's own hook for compatibility
do_action('academy/frontend/after_mark_topic_complete', $topic_type, $course_id, $topic_id, $user_id);
return 'Lesson Completed';
@@ -150,6 +159,7 @@ public static function completeCourse($selectedCourse)
// hash is unique.
do {
$hash = substr(md5(wp_generate_password(32) . $date . $course_id . $user_id), 0, 16);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for hash validation
$hasHash = (int) $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(comment_ID) from {$wpdb->comments}
@@ -170,6 +180,7 @@ public static function completeCourse($selectedCourse)
'comment_type' => 'course_completed',
'user_id' => $user_id,
];
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct insert required for course completion
$is_complete = $wpdb->insert($wpdb->comments, $data);
do_action('academy/admin/course_complete_after', $course_id, $user_id);
@@ -186,17 +197,25 @@ public static function resetCourse($selectedCourse)
$course_id = $selectedCourse[0];
$complete_topics = "academy_course_{$course_id}_completed_topics";
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct queries needed for course reset
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->postmeta} WHERE post_id = %d AND meta_key = %s", $course_id, 'academy_course_curriculum'));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->usermeta} WHERE user_id = %d AND meta_key = %s", $user_id, $complete_topics));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->posts} WHERE post_author = %d AND post_parent = %d AND post_type = %s ", $user_id, $course_id, 'academy_enrolled'));
- $QuizIds = $wpdb->get_col($wpdb->prepare("select quiz_id from {$wpdb->prefix}academy_quiz_attempts where user_id = '14' AND course_id = %d ", $course_id));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for AcademyLMS reset lookup.
+ $QuizIds = $wpdb->get_col($wpdb->prepare("SELECT quiz_id FROM {$wpdb->prefix}academy_quiz_attempts WHERE user_id = %d AND course_id = %d", $user_id, $course_id));
if (!empty($QuizIds)) {
- $QuizIds = "'" . implode("','", $QuizIds) . "'";
+ $placeholders = implode(',', array_fill(0, \count($QuizIds), '%d'));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->prefix}academy_quiz_attempts WHERE user_id = %d AND course_id = %d", $user_id, $course_id));
- $wpdb->query($wpdb->prepare("DELETE from {$wpdb->prefix}academy_quiz_attempt_answers WHERE user_id = %d AND quiz_id in (%s) ", $user_id, $QuizIds));
+ $query_format = \sprintf("DELETE from {$wpdb->prefix}academy_quiz_attempt_answers WHERE user_id = %%d AND quiz_id in ({$placeholders})");
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Dynamic IN clause with sprintf for placeholders
+ $wpdb->query($wpdb->prepare($query_format, $user_id, ...$QuizIds));
}
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->comments} WHERE comment_agent = 'academy' AND comment_type = 'course_completed' AND comment_post_ID = %d AND user_id = %d", $course_id, $user_id));
return 'Course progress reseted';
diff --git a/includes/Actions/AcademyLms/Routes.php b/includes/Actions/AcademyLms/Routes.php
index aa7fa3bb0..a655d3623 100644
--- a/includes/Actions/AcademyLms/Routes.php
+++ b/includes/Actions/AcademyLms/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\AcademyLms\AcademyLmsController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\AcademyLms\AcademyLmsController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('academy_lms_authorize', [AcademyLmsController::class, 'Authorization']);
Route::get('academy_lms_all_course', [AcademyLmsController::class, 'getAllCourse']);
diff --git a/includes/Actions/ActionController.php b/includes/Actions/ActionController.php
index 4e6a0c658..8736e5370 100644
--- a/includes/Actions/ActionController.php
+++ b/includes/Actions/ActionController.php
@@ -1,10 +1,10 @@
get_params();
unset($params['rest_route'], $params['state']);
- if (wp_redirect($state . '&' . http_build_query($params), 302)) {
- exit;
- }
+ wp_safe_redirect($state . '&' . http_build_query($params), 302);
+ exit;
}
public static function getHostWithPort($url)
diff --git a/includes/Actions/ActiveCampaign/ActiveCampaignController.php b/includes/Actions/ActiveCampaign/ActiveCampaignController.php
index af970ba4b..d3be0cbd6 100644
--- a/includes/Actions/ActiveCampaign/ActiveCampaignController.php
+++ b/includes/Actions/ActiveCampaign/ActiveCampaignController.php
@@ -4,9 +4,9 @@
* Active Campaign Integration
*/
-namespace BitCode\FI\Actions\ActiveCampaign;
+namespace BitApps\Integrations\Actions\ActiveCampaign;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -245,6 +245,7 @@ public function execute($integrationData, $fieldValues)
|| empty($api_url)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Active Campaign'));
}
$recordApiHelper = new RecordApiHelper($api_key, $api_url, $this->_integrationID);
diff --git a/includes/Actions/ActiveCampaign/RecordApiHelper.php b/includes/Actions/ActiveCampaign/RecordApiHelper.php
index 3dc189ef7..ff3ab33aa 100644
--- a/includes/Actions/ActiveCampaign/RecordApiHelper.php
+++ b/includes/Actions/ActiveCampaign/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Active Campaign Record Api
*/
-namespace BitCode\FI\Actions\ActiveCampaign;
+namespace BitApps\Integrations\Actions\ActiveCampaign;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/ActiveCampaign/Routes.php b/includes/Actions/ActiveCampaign/Routes.php
index c5d6a796c..b5e496266 100644
--- a/includes/Actions/ActiveCampaign/Routes.php
+++ b/includes/Actions/ActiveCampaign/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ActiveCampaign\ActiveCampaignController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ActiveCampaign\ActiveCampaignController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('aCampaign_authorize', [ActiveCampaignController::class, 'activeCampaignAuthorize']);
Route::post('aCampaign_headers', [ActiveCampaignController::class, 'activeCampaignHeaders']);
diff --git a/includes/Actions/Acumbamail/AcumbamailController.php b/includes/Actions/Acumbamail/AcumbamailController.php
index cb16d297f..3f83d53f5 100644
--- a/includes/Actions/Acumbamail/AcumbamailController.php
+++ b/includes/Actions/Acumbamail/AcumbamailController.php
@@ -4,9 +4,9 @@
* Acumbamail Integration
*/
-namespace BitCode\FI\Actions\Acumbamail;
+namespace BitApps\Integrations\Actions\Acumbamail;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -125,6 +125,7 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
|| empty($auth_token)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Acumbamail'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Acumbamail/RecordApiHelper.php b/includes/Actions/Acumbamail/RecordApiHelper.php
index 92158099f..dd51ee8cc 100644
--- a/includes/Actions/Acumbamail/RecordApiHelper.php
+++ b/includes/Actions/Acumbamail/RecordApiHelper.php
@@ -4,11 +4,11 @@
* trello Record Api
*/
-namespace BitCode\FI\Actions\Acumbamail;
+namespace BitApps\Integrations\Actions\Acumbamail;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Acumbamail/Routes.php b/includes/Actions/Acumbamail/Routes.php
index 3ecd46bb6..3abc1e6fe 100644
--- a/includes/Actions/Acumbamail/Routes.php
+++ b/includes/Actions/Acumbamail/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Acumbamail\AcumbamailController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Acumbamail\AcumbamailController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('acumbamail_authorization_and_fetch_subscriber_list', [AcumbamailController::class, 'acumbamailAuthAndFetchSubscriberList']);
Route::post('acumbamail_fetch_all_list', [AcumbamailController::class, 'fetchAllLists']);
diff --git a/includes/Actions/AdvancedFormIntegration/AdvancedFormIntegrationController.php b/includes/Actions/AdvancedFormIntegration/AdvancedFormIntegrationController.php
index 9b8c5fbf3..2e9660be3 100644
--- a/includes/Actions/AdvancedFormIntegration/AdvancedFormIntegrationController.php
+++ b/includes/Actions/AdvancedFormIntegration/AdvancedFormIntegrationController.php
@@ -4,9 +4,9 @@
* AdvancedFormIntegration Integration
*/
-namespace BitCode\FI\Actions\AdvancedFormIntegration;
+namespace BitApps\Integrations\Actions\AdvancedFormIntegration;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for AdvancedFormIntegrationHandler
diff --git a/includes/Actions/Affiliate/AffiliateController.php b/includes/Actions/Affiliate/AffiliateController.php
index 022514fbb..d74dd3997 100644
--- a/includes/Actions/Affiliate/AffiliateController.php
+++ b/includes/Actions/Affiliate/AffiliateController.php
@@ -4,7 +4,7 @@
* Affiliate Integration
*/
-namespace BitCode\FI\Actions\Affiliate;
+namespace BitApps\Integrations\Actions\Affiliate;
use WP_Error;
@@ -35,17 +35,29 @@ public static function authorizeAffiliate()
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Affiliate'));
}
public static function getAllAffiliate()
{
+ $cache_key = 'btcbi_affiliate_wp_all_affiliates';
+ $cache_group = 'btcbi';
+ $affiliates = wp_cache_get($cache_key, $cache_group);
+
+ if (false !== $affiliates) {
+ return $affiliates;
+ }
+
$affiliates = [];
global $wpdb;
+ $affiliate_table = esc_sql($wpdb->prefix . 'affiliate_wp_affiliates');
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
$affiliatesIds = $wpdb->get_results(
- $wpdb->prepare('SELECT affiliate_Id FROM %1s', $wpdb->prefix . 'affiliate_wp_affiliates')
+ 'SELECT affiliate_Id FROM ' . $affiliate_table
);
+ // phpcs:enable
foreach ($affiliatesIds as $val) {
$affiliates[] = [
@@ -54,6 +66,8 @@ public static function getAllAffiliate()
];
}
+ wp_cache_set($cache_key, $affiliates, $cache_group, 10 * MINUTE_IN_SECONDS);
+
return $affiliates;
}
@@ -67,6 +81,7 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction) || empty($fieldMap)
) {
+ // translators: %s: Integration name
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Affiliate api'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Affiliate/RecordApiHelper.php b/includes/Actions/Affiliate/RecordApiHelper.php
index a49f839f6..ece4b0b34 100644
--- a/includes/Actions/Affiliate/RecordApiHelper.php
+++ b/includes/Actions/Affiliate/RecordApiHelper.php
@@ -4,10 +4,10 @@
* trello Record Api
*/
-namespace BitCode\FI\Actions\Affiliate;
+namespace BitApps\Integrations\Actions\Affiliate;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -174,6 +174,7 @@ public function execute(
$finalData
);
if ($apiResponse !== 0) {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'referral', 'type_name' => 'create-referral']), 'success', wp_json_encode(wp_sprintf(__('Created Referral id %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'referral', 'type_name' => 'create-referral']), 'error', wp_json_encode(__('Error in creating referral', 'bit-integrations')));
@@ -192,6 +193,7 @@ public function execute(
$finalData
);
if ($apiResponse !== 0) {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'referral', 'type_name' => 'create-referral']), 'success', wp_json_encode(wp_sprintf(__('Created Referral id %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'referral', 'type_name' => 'create-referral']), 'error', wp_json_encode(__('Error in creating referral', 'bit-integrations')));
diff --git a/includes/Actions/Affiliate/Routes.php b/includes/Actions/Affiliate/Routes.php
index 400d46282..4f72f66f6 100644
--- a/includes/Actions/Affiliate/Routes.php
+++ b/includes/Actions/Affiliate/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Affiliate\AffiliateController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Affiliate\AffiliateController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('affiliate_authorize', [AffiliateController::class, 'authorizeAffiliate']);
Route::post('affiliate_fetch_all_affiliate', [AffiliateController::class, 'getAllAffiliate']);
diff --git a/includes/Actions/AgiledCRM/AgiledCRMController.php b/includes/Actions/AgiledCRM/AgiledCRMController.php
index 65dd5ea88..d9965882f 100644
--- a/includes/Actions/AgiledCRM/AgiledCRMController.php
+++ b/includes/Actions/AgiledCRM/AgiledCRMController.php
@@ -4,9 +4,9 @@
* AgiledCRM Integration
*/
-namespace BitCode\FI\Actions\AgiledCRM;
+namespace BitApps\Integrations\Actions\AgiledCRM;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -246,6 +246,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Agiled CRM'));
}
diff --git a/includes/Actions/AgiledCRM/RecordApiHelper.php b/includes/Actions/AgiledCRM/RecordApiHelper.php
index d13c64d9b..c72d73f26 100644
--- a/includes/Actions/AgiledCRM/RecordApiHelper.php
+++ b/includes/Actions/AgiledCRM/RecordApiHelper.php
@@ -4,11 +4,11 @@
* AgiledCRM Record Api
*/
-namespace BitCode\FI\Actions\AgiledCRM;
+namespace BitApps\Integrations\Actions\AgiledCRM;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/AgiledCRM/Routes.php b/includes/Actions/AgiledCRM/Routes.php
index 0ff823af9..7d60da9fa 100644
--- a/includes/Actions/AgiledCRM/Routes.php
+++ b/includes/Actions/AgiledCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\AgiledCRM\AgiledCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\AgiledCRM\AgiledCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('agiled_authentication', [AgiledCRMController::class, 'authentication']);
Route::post('agiled_fetch_all_owners', [AgiledCRMController::class, 'getAllOwners']);
diff --git a/includes/Actions/Airtable/AirtableController.php b/includes/Actions/Airtable/AirtableController.php
index eed5eb171..5961cb54e 100644
--- a/includes/Actions/Airtable/AirtableController.php
+++ b/includes/Actions/Airtable/AirtableController.php
@@ -4,9 +4,9 @@
* Airtable Integration
*/
-namespace BitCode\FI\Actions\Airtable;
+namespace BitApps\Integrations\Actions\Airtable;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
diff --git a/includes/Actions/Airtable/RecordApiHelper.php b/includes/Actions/Airtable/RecordApiHelper.php
index a8bf5e2ab..1d6836d60 100644
--- a/includes/Actions/Airtable/RecordApiHelper.php
+++ b/includes/Actions/Airtable/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Airtable Record Api
*/
-namespace BitCode\FI\Actions\Airtable;
+namespace BitApps\Integrations\Actions\Airtable;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Airtable/Routes.php b/includes/Actions/Airtable/Routes.php
index e87033d99..5993a390b 100644
--- a/includes/Actions/Airtable/Routes.php
+++ b/includes/Actions/Airtable/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Airtable\AirtableController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Airtable\AirtableController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('airtable_authentication', [AirtableController::class, 'authentication']);
Route::post('airtable_fetch_all_tables', [AirtableController::class, 'getAllTables']);
diff --git a/includes/Actions/Albato/AlbatoController.php b/includes/Actions/Albato/AlbatoController.php
index 963ac2e43..c13ca7bff 100644
--- a/includes/Actions/Albato/AlbatoController.php
+++ b/includes/Actions/Albato/AlbatoController.php
@@ -4,9 +4,9 @@
* Albato Integration
*/
-namespace BitCode\FI\Actions\Albato;
+namespace BitApps\Integrations\Actions\Albato;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for AlbatoHandler
diff --git a/includes/Actions/AntApps/AntAppsController.php b/includes/Actions/AntApps/AntAppsController.php
index 7f2cd7cba..82ad21a9f 100644
--- a/includes/Actions/AntApps/AntAppsController.php
+++ b/includes/Actions/AntApps/AntAppsController.php
@@ -4,9 +4,9 @@
* Ant & Apps Integration
*/
-namespace BitCode\FI\Actions\AntApps;
+namespace BitApps\Integrations\Actions\AntApps;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for Ant&Apps
diff --git a/includes/Actions/Asana/AsanaController.php b/includes/Actions/Asana/AsanaController.php
index 74fd7e7d3..3c268fbda 100644
--- a/includes/Actions/Asana/AsanaController.php
+++ b/includes/Actions/Asana/AsanaController.php
@@ -4,9 +4,9 @@
* Asana Integration
*/
-namespace BitCode\FI\Actions\Asana;
+namespace BitApps\Integrations\Actions\Asana;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -166,6 +166,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Asana'));
}
diff --git a/includes/Actions/Asana/RecordApiHelper.php b/includes/Actions/Asana/RecordApiHelper.php
index f3306f8c0..4f509048c 100644
--- a/includes/Actions/Asana/RecordApiHelper.php
+++ b/includes/Actions/Asana/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Asana Record Api
*/
-namespace BitCode\FI\Actions\Asana;
+namespace BitApps\Integrations\Actions\Asana;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Asana/Routes.php b/includes/Actions/Asana/Routes.php
index d717ea179..34ac3470b 100644
--- a/includes/Actions/Asana/Routes.php
+++ b/includes/Actions/Asana/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Asana\AsanaController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Asana\AsanaController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('asana_authentication', [AsanaController::class, 'authentication']);
Route::post('asana_fetch_custom_fields', [AsanaController::class, 'getCustomFields']);
diff --git a/includes/Actions/AutomatorWP/AutomatorWPController.php b/includes/Actions/AutomatorWP/AutomatorWPController.php
index 18b55ed25..f521a65af 100644
--- a/includes/Actions/AutomatorWP/AutomatorWPController.php
+++ b/includes/Actions/AutomatorWP/AutomatorWPController.php
@@ -4,9 +4,9 @@
* AutomatorWP Integration
*/
-namespace BitCode\FI\Actions\AutomatorWP;
+namespace BitApps\Integrations\Actions\AutomatorWP;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for AutomatorWPHandler
diff --git a/includes/Actions/Autonami/AutonamiController.php b/includes/Actions/Autonami/AutonamiController.php
index 29767edbc..8d857640a 100644
--- a/includes/Actions/Autonami/AutonamiController.php
+++ b/includes/Actions/Autonami/AutonamiController.php
@@ -1,9 +1,9 @@
_integrationID);
diff --git a/includes/Actions/BenchMark/RecordApiHelper.php b/includes/Actions/BenchMark/RecordApiHelper.php
index f78c026db..6c5bbc463 100644
--- a/includes/Actions/BenchMark/RecordApiHelper.php
+++ b/includes/Actions/BenchMark/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Benchmark Record Api
*/
-namespace BitCode\FI\Actions\BenchMark;
+namespace BitApps\Integrations\Actions\BenchMark;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/BenchMark/Routes.php b/includes/Actions/BenchMark/Routes.php
index acea07876..aa1b75edf 100644
--- a/includes/Actions/BenchMark/Routes.php
+++ b/includes/Actions/BenchMark/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\BenchMark\BenchMarkController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\BenchMark\BenchMarkController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('benchMark_authorize', [BenchMarkController::class, 'benchMarkAuthorize']);
Route::post('benchMark_headers', [BenchMarkController::class, 'benchMarkHeaders']);
diff --git a/includes/Actions/Bento/BentoController.php b/includes/Actions/Bento/BentoController.php
index 4caf4ff24..49b71be31 100644
--- a/includes/Actions/Bento/BentoController.php
+++ b/includes/Actions/Bento/BentoController.php
@@ -4,10 +4,10 @@
* Bento Integration
*/
-namespace BitCode\FI\Actions\Bento;
+namespace BitApps\Integrations\Actions\Bento;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for Bento integration
@@ -77,6 +77,7 @@ public function execute($integrationData, $fieldValues)
$action = $integrationDetails->action;
if (empty($fieldMap) || empty($publishableKey) || empty($secretKey) || empty($siteUUID) || empty($action)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Bento'));
}
diff --git a/includes/Actions/Bento/BentoHelper.php b/includes/Actions/Bento/BentoHelper.php
index e569ac3cc..df0af429b 100644
--- a/includes/Actions/Bento/BentoHelper.php
+++ b/includes/Actions/Bento/BentoHelper.php
@@ -4,9 +4,9 @@
* Bento Record Api
*/
-namespace BitCode\FI\Actions\Bento;
+namespace BitApps\Integrations\Actions\Bento;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Bento/RecordApiHelper.php b/includes/Actions/Bento/RecordApiHelper.php
index a2a17b89c..be5d6d7ac 100644
--- a/includes/Actions/Bento/RecordApiHelper.php
+++ b/includes/Actions/Bento/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Bento Record Api
*/
-namespace BitCode\FI\Actions\Bento;
+namespace BitApps\Integrations\Actions\Bento;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -82,6 +82,7 @@ public function addEvent($finalData)
$response = apply_filters('btcbi_bento_store_event', false, $reqParams, $finalData);
+ // translators: %s: Placeholder value
return empty($response) ? (object) ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')] : $response;
}
diff --git a/includes/Actions/Bento/Routes.php b/includes/Actions/Bento/Routes.php
index fcb75a44a..764aa9011 100644
--- a/includes/Actions/Bento/Routes.php
+++ b/includes/Actions/Bento/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Bento\BentoController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Bento\BentoController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('bento_authentication', [BentoController::class, 'authentication']);
Route::post('bento_get_fields', [BentoController::class, 'getAllFields']);
diff --git a/includes/Actions/BitForm/BitFormController.php b/includes/Actions/BitForm/BitFormController.php
index 222fa1ebe..3a2034e0a 100644
--- a/includes/Actions/BitForm/BitFormController.php
+++ b/includes/Actions/BitForm/BitFormController.php
@@ -4,9 +4,9 @@
* BitForm Integration
*/
-namespace BitCode\FI\Actions\BitForm;
+namespace BitApps\Integrations\Actions\BitForm;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -212,6 +212,7 @@ public function execute($integrationData, $fieldValues)
|| empty($domainName)
|| empty($formId)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Bit From'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/BitForm/RecordApiHelper.php b/includes/Actions/BitForm/RecordApiHelper.php
index 8e36073e4..42a51c15a 100644
--- a/includes/Actions/BitForm/RecordApiHelper.php
+++ b/includes/Actions/BitForm/RecordApiHelper.php
@@ -4,11 +4,11 @@
* BitForm Record Api
*/
-namespace BitCode\FI\Actions\BitForm;
+namespace BitApps\Integrations\Actions\BitForm;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/BitForm/Routes.php b/includes/Actions/BitForm/Routes.php
index 3d1fe7423..027e8ac7d 100644
--- a/includes/Actions/BitForm/Routes.php
+++ b/includes/Actions/BitForm/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\BitForm\BitFormController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\BitForm\BitFormController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('bitForm_authorization_and_fetch_form_list', [BitFormController::class, 'bitFormAuthorization']);
Route::post('bitForm_all_form_list', [BitFormController::class, 'bitFormAllFormList']);
diff --git a/includes/Actions/BuddyBoss/BuddyBossController.php b/includes/Actions/BuddyBoss/BuddyBossController.php
index 7c91a50e7..6554a9678 100644
--- a/includes/Actions/BuddyBoss/BuddyBossController.php
+++ b/includes/Actions/BuddyBoss/BuddyBossController.php
@@ -4,7 +4,7 @@
* BuddyBoss Integration
*/
-namespace BitCode\FI\Actions\BuddyBoss;
+namespace BitApps\Integrations\Actions\BuddyBoss;
use WP_Error;
@@ -24,6 +24,7 @@ public static function authorizeBuddyBoss()
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'BuddyBoss'));
}
@@ -32,10 +33,20 @@ public static function getAllGroups()
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if (self::pluginActive()) {
global $wpdb;
- $groups = $wpdb->get_results("select id,name from {$wpdb->prefix}bp_groups");
+ $cache_key = 'btcbi_buddyboss_groups';
+ $cache_group = 'btcbi';
+ $groups = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $groups) {
+ $groups_table = esc_sql($wpdb->prefix . 'bp_groups');
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Reading BuddyBoss groups table directly; static table name.
+ $groups = $wpdb->get_results('SELECT id, name FROM ' . $groups_table);
+ wp_cache_set($cache_key, $groups, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
wp_send_json_success($groups, 200);
}
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'BuddyBoss'));
}
@@ -44,9 +55,20 @@ public static function getAllUser()
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if (self::pluginActive()) {
global $wpdb;
- $users = $wpdb->get_results("select ID,display_name from {$wpdb->prefix}users");
+ $cache_key = 'btcbi_wp_users_basic';
+ $cache_group = 'btcbi';
+ $users = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $users) {
+ $users_table = esc_sql($wpdb->users);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Reading users table directly for BuddyBoss user selection.
+ $users = $wpdb->get_results('SELECT ID, display_name FROM ' . $users_table);
+ wp_cache_set($cache_key, $users, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
+
wp_send_json_success($users, 200);
}
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'BuddyBoss'));
}
@@ -139,6 +161,7 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction)
) {
+ // translators: %s: Integration name
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'BuddyBoss'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/BuddyBoss/Hooks.php b/includes/Actions/BuddyBoss/Hooks.php
index 54d248210..9d4dc3bf4 100644
--- a/includes/Actions/BuddyBoss/Hooks.php
+++ b/includes/Actions/BuddyBoss/Hooks.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\BuddyBoss\BuddyBossController;
-use BitCode\FI\Core\Util\Hooks;
+use BitApps\Integrations\Actions\BuddyBoss\BuddyBossController;
+use BitApps\Integrations\Core\Util\Hooks;
Hooks::filter('bp_notifications_get_registered_components', [BuddyBossController::class, 'registerComponents'], 10, 2);
Hooks::filter('bp_notifications_get_notifications_for_user', [BuddyBossController::class, 'notificationForUser'], 10, 8);
diff --git a/includes/Actions/BuddyBoss/RecordApiHelper.php b/includes/Actions/BuddyBoss/RecordApiHelper.php
index 931daea6a..c3b042131 100644
--- a/includes/Actions/BuddyBoss/RecordApiHelper.php
+++ b/includes/Actions/BuddyBoss/RecordApiHelper.php
@@ -4,10 +4,10 @@
* BuddyBoss Record Api
*/
-namespace BitCode\FI\Actions\BuddyBoss;
+namespace BitApps\Integrations\Actions\BuddyBoss;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use BP_Suspend_Member;
/**
@@ -164,8 +164,10 @@ public static function FollowUser($friendId)
$following = bp_start_following($data);
}
if ($following) {
+ // translators: %s: Placeholder value
return LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'friend', 'type_name' => 'follow-user']), 'success', wp_json_encode(wp_sprintf(__('The user successfully start following a member ID - %s', 'bit-integrations'), $friendId)));
}
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'friend', 'type_name' => 'follow-user']), 'error', wp_json_encode(wp_sprintf(__('The user was already following a member ID - %s', 'bit-integrations'), $friendId)));
}
@@ -267,6 +269,7 @@ public static function posTopicForum($forum_id, $finalData)
return;
}
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'topic', 'type_name' => 'post-topic-forum']), 'success', wp_json_encode(wp_sprintf(__('Post created successfully and id is %s', 'bit-integrations'), $topic_id)));
if (
@@ -551,6 +554,7 @@ public static function subscribeForum($forumId)
return;
}
$success = bbp_add_user_subscription($user_id, (int) $forum_id);
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using BuddyBoss's own hook for compatibility
do_action('buddyBoss_subscriptions_handler', $success, $user_id, (int) $forum_id, 'bbp_subscribe');
if ($success === false && $is_subscription === false) {
@@ -580,9 +584,17 @@ public static function addPostToGroup($group_id, $friendId, $finalData)
if ('any' === $group_id) {
global $wpdb;
$statuses = ['public', 'private', 'hidden'];
- $in_str_arr = array_fill(0, \count($statuses), '%s');
- $in_str = join(',', $in_str_arr);
- $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}bp_groups WHERE status IN (%s)", $in_str));
+ $cache_key = 'btcbi_buddyboss_groups_all_statuses';
+ $cache_group = 'btcbi';
+ $results = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $results) {
+ $placeholders = implode(', ', array_fill(0, \count($statuses), '%s'));
+ $query_format = \sprintf("SELECT * FROM {$wpdb->prefix}bp_groups WHERE status IN ({$placeholders})");
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Dynamic IN clause with sprintf for placeholders.
+ $results = $wpdb->get_results($wpdb->prepare($query_format, ...$statuses));
+ wp_cache_set($cache_key, $results, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
if ($results) {
foreach ($results as $result) {
$hide_sitewide = false;
@@ -609,7 +621,15 @@ public static function addPostToGroup($group_id, $friendId, $finalData)
}
} else {
global $wpdb;
- $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}bp_groups WHERE id = %d", $group_id));
+ $cache_key = 'btcbi_buddyboss_group_' . absint($group_id);
+ $cache_group = 'btcbi';
+ $results = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $results) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for BuddyBoss groups.
+ $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}bp_groups WHERE id = %d", $group_id));
+ wp_cache_set($cache_key, $results, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
if ($results) {
foreach ($results as $result) {
$hide_sitewide = false;
@@ -886,6 +906,7 @@ public function execute(
$finalData
);
if ($apiResponse !== 0) {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'group', 'type_name' => 'create-group']), 'success', wp_json_encode(wp_sprintf(__('Group created successfully and is is %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'group', 'type_name' => 'create-group']), 'error', wp_json_encode($apiResponse));
@@ -1006,6 +1027,7 @@ public function execute(
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$apiResponse = self::addPostToGroup($group_id, $friendId, $finalData);
if (\gettype($apiResponse) === 'integer') {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-to-group']), 'success', wp_json_encode(wp_sprintf(__('Post added to group successfully and id is -> %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-to-group']), 'error', wp_json_encode($apiResponse));
@@ -1016,6 +1038,7 @@ public function execute(
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$apiResponse = self::postActivityStream($friendId, $finalData);
if (\gettype($apiResponse) === 'integer') {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-sitewide-activity']), 'success', wp_json_encode(wp_sprintf(__('Post added to sitewide activity stream successfully and id is -> %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-sitewide-activity']), 'error', wp_json_encode($apiResponse));
@@ -1026,6 +1049,7 @@ public function execute(
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$apiResponse = self::postActivityUsersStream($friendId, $finalData);
if (\gettype($apiResponse) === 'integer') {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-user-activity']), 'success', wp_json_encode(wp_sprintf(__('Post added to Users activity stream successfully and id is -> %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'post', 'type_name' => 'add-post-user-activity']), 'error', wp_json_encode($apiResponse));
@@ -1037,6 +1061,7 @@ public function execute(
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$apiResponse = self::postReplyTopicForum($forum_id, $topic_id, $finalData);
if (\gettype($apiResponse) === 'integer') {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'reply', 'type_name' => 'reply-forum-topic']), 'success', wp_json_encode(wp_sprintf(__('Reply forum topic successfully and id is -> %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'reply', 'type_name' => 'reply-forum-topic']), 'error', wp_json_encode(__('Failed to reply forum topic.', 'bit-integrations')));
diff --git a/includes/Actions/BuddyBoss/Routes.php b/includes/Actions/BuddyBoss/Routes.php
index 22e7834c7..25f1b9535 100644
--- a/includes/Actions/BuddyBoss/Routes.php
+++ b/includes/Actions/BuddyBoss/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\BuddyBoss\BuddyBossController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\BuddyBoss\BuddyBossController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('buddyBoss_authorize', [BuddyBossController::class, 'authorizeBuddyBoss']);
Route::post('fetch_all_group', [BuddyBossController::class, 'getAllGroups']);
diff --git a/includes/Actions/CampaignMonitor/CampaignMonitorController.php b/includes/Actions/CampaignMonitor/CampaignMonitorController.php
index 5e05c8bd7..0043c3af5 100644
--- a/includes/Actions/CampaignMonitor/CampaignMonitorController.php
+++ b/includes/Actions/CampaignMonitor/CampaignMonitorController.php
@@ -1,8 +1,8 @@
Code)) {
wp_send_json_success($fields, 200);
} else {
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('Field fetching failed: %s', 'bit-integrations'), $apiResponse->Message), 400);
}
}
@@ -84,6 +85,7 @@ public function execute($integrationData, $fieldValues)
$apiKey = $integrationDetails->api_key;
if (empty($fieldMap) || empty($apiKey) || empty($selectedList)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Campaign Monitor'));
}
diff --git a/includes/Actions/CampaignMonitor/RecordApiHelper.php b/includes/Actions/CampaignMonitor/RecordApiHelper.php
index 8d31c25fc..90bfe8910 100644
--- a/includes/Actions/CampaignMonitor/RecordApiHelper.php
+++ b/includes/Actions/CampaignMonitor/RecordApiHelper.php
@@ -1,10 +1,10 @@
actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Capsule CRM'));
}
diff --git a/includes/Actions/CapsuleCRM/RecordApiHelper.php b/includes/Actions/CapsuleCRM/RecordApiHelper.php
index d885dccdd..79550a944 100644
--- a/includes/Actions/CapsuleCRM/RecordApiHelper.php
+++ b/includes/Actions/CapsuleCRM/RecordApiHelper.php
@@ -4,10 +4,10 @@
* CapsuleCRM Record Api
*/
-namespace BitCode\FI\Actions\CapsuleCRM;
+namespace BitApps\Integrations\Actions\CapsuleCRM;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/CapsuleCRM/Routes.php b/includes/Actions/CapsuleCRM/Routes.php
index 12b2d5ed4..e6ebd62d1 100644
--- a/includes/Actions/CapsuleCRM/Routes.php
+++ b/includes/Actions/CapsuleCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\CapsuleCRM\CapsuleCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\CapsuleCRM\CapsuleCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('capsulecrm_authentication', [CapsuleCRMController::class, 'authentication']);
Route::post('capsulecrm_fetch_custom_fields', [CapsuleCRMController::class, 'getCustomFields']);
diff --git a/includes/Actions/Clickup/ClickupController.php b/includes/Actions/Clickup/ClickupController.php
index b528aa3bb..1878bf39b 100644
--- a/includes/Actions/Clickup/ClickupController.php
+++ b/includes/Actions/Clickup/ClickupController.php
@@ -4,9 +4,9 @@
* Clickup Integration
*/
-namespace BitCode\FI\Actions\Clickup;
+namespace BitApps\Integrations\Actions\Clickup;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -225,6 +225,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Clickup'));
}
diff --git a/includes/Actions/Clickup/RecordApiHelper.php b/includes/Actions/Clickup/RecordApiHelper.php
index 45e5f8a43..413eb500e 100644
--- a/includes/Actions/Clickup/RecordApiHelper.php
+++ b/includes/Actions/Clickup/RecordApiHelper.php
@@ -4,11 +4,12 @@
* Clickup Record Api
*/
-namespace BitCode\FI\Actions\Clickup;
+namespace BitApps\Integrations\Actions\Clickup;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
+use CURLFile;
/**
* Provide functionality for Record insert, upsert
@@ -121,7 +122,7 @@ private function uploadFile($files, $taskId)
$file = Common::filePath($file);
$result = HttpHelper::post(
$this->apiUrl . "task/{$taskId}/attachment",
- ['attachment' => curl_file_create($file)],
+ ['attachment' => new CURLFile($file)],
[
'Authorization' => $this->integrationDetails->api_key,
'Content-Type' => 'multipart/form-data',
diff --git a/includes/Actions/Clickup/Routes.php b/includes/Actions/Clickup/Routes.php
index 7c76d9bb4..3f486e49b 100644
--- a/includes/Actions/Clickup/Routes.php
+++ b/includes/Actions/Clickup/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Clickup\ClickupController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Clickup\ClickupController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('clickup_authentication', [ClickupController::class, 'authentication']);
Route::post('clickup_fetch_custom_fields', [ClickupController::class, 'getCustomFields']);
diff --git a/includes/Actions/ClinchPad/ClinchPadController.php b/includes/Actions/ClinchPad/ClinchPadController.php
index b1e701b44..f52b4748c 100644
--- a/includes/Actions/ClinchPad/ClinchPadController.php
+++ b/includes/Actions/ClinchPad/ClinchPadController.php
@@ -4,9 +4,9 @@
* ClinchPad Integration
*/
-namespace BitCode\FI\Actions\ClinchPad;
+namespace BitApps\Integrations\Actions\ClinchPad;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -134,6 +134,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'ClinchPad'));
}
diff --git a/includes/Actions/ClinchPad/RecordApiHelper.php b/includes/Actions/ClinchPad/RecordApiHelper.php
index 53c057bb4..b15c09af4 100644
--- a/includes/Actions/ClinchPad/RecordApiHelper.php
+++ b/includes/Actions/ClinchPad/RecordApiHelper.php
@@ -4,11 +4,11 @@
* ClinchPad Record Api
*/
-namespace BitCode\FI\Actions\ClinchPad;
+namespace BitApps\Integrations\Actions\ClinchPad;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/ClinchPad/Routes.php b/includes/Actions/ClinchPad/Routes.php
index da7902d8a..4c2735431 100644
--- a/includes/Actions/ClinchPad/Routes.php
+++ b/includes/Actions/ClinchPad/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ClinchPad\ClinchPadController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ClinchPad\ClinchPadController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('clinchPad_authentication', [ClinchPadController::class, 'authentication']);
Route::post('clinchPad_fetch_custom_fields', [ClinchPadController::class, 'getCustomFields']);
diff --git a/includes/Actions/CompanyHub/CompanyHubController.php b/includes/Actions/CompanyHub/CompanyHubController.php
index 417b0381b..223980a4f 100644
--- a/includes/Actions/CompanyHub/CompanyHubController.php
+++ b/includes/Actions/CompanyHub/CompanyHubController.php
@@ -4,9 +4,9 @@
* CompanyHub Integration
*/
-namespace BitCode\FI\Actions\CompanyHub;
+namespace BitApps\Integrations\Actions\CompanyHub;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -93,6 +93,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($subDomain) || empty($actionName) || empty($apiKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Company Hub'));
}
diff --git a/includes/Actions/CompanyHub/RecordApiHelper.php b/includes/Actions/CompanyHub/RecordApiHelper.php
index dcdc1db65..fcdd04113 100644
--- a/includes/Actions/CompanyHub/RecordApiHelper.php
+++ b/includes/Actions/CompanyHub/RecordApiHelper.php
@@ -4,11 +4,11 @@
* CompanyHub Record Api
*/
-namespace BitCode\FI\Actions\CompanyHub;
+namespace BitApps\Integrations\Actions\CompanyHub;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/CompanyHub/Routes.php b/includes/Actions/CompanyHub/Routes.php
index 164275e91..a5adcbb7e 100644
--- a/includes/Actions/CompanyHub/Routes.php
+++ b/includes/Actions/CompanyHub/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\CompanyHub\CompanyHubController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\CompanyHub\CompanyHubController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('company_hub_authentication', [CompanyHubController::class, 'authentication']);
Route::post('company_hub_fetch_all_contacts', [CompanyHubController::class, 'getAllContacts']);
diff --git a/includes/Actions/ConstantContact/ConstantContactController.php b/includes/Actions/ConstantContact/ConstantContactController.php
index 119a18966..2f6856751 100644
--- a/includes/Actions/ConstantContact/ConstantContactController.php
+++ b/includes/Actions/ConstantContact/ConstantContactController.php
@@ -4,11 +4,11 @@
* Constant Contact Integration
*/
-namespace BitCode\FI\Actions\ConstantContact;
+namespace BitApps\Integrations\Actions\ConstantContact;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -249,6 +249,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($auth_token)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Constant Contact'));
}
diff --git a/includes/Actions/ConstantContact/RecordApiHelper.php b/includes/Actions/ConstantContact/RecordApiHelper.php
index dd04d7709..cfc841d5f 100644
--- a/includes/Actions/ConstantContact/RecordApiHelper.php
+++ b/includes/Actions/ConstantContact/RecordApiHelper.php
@@ -4,11 +4,11 @@
* ConstantContact Record Api
*/
-namespace BitCode\FI\Actions\ConstantContact;
+namespace BitApps\Integrations\Actions\ConstantContact;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/ConstantContact/Routes.php b/includes/Actions/ConstantContact/Routes.php
index e35754016..997158122 100644
--- a/includes/Actions/ConstantContact/Routes.php
+++ b/includes/Actions/ConstantContact/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ConstantContact\ConstantContactController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ConstantContact\ConstantContactController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('cContact_generate_token', [ConstantContactController::class, 'generateTokens']);
Route::post('cContact_refresh_list', [ConstantContactController::class, 'refreshList']);
diff --git a/includes/Actions/ConvertKit/ConvertKitController.php b/includes/Actions/ConvertKit/ConvertKitController.php
index a52a85b93..545a6319c 100644
--- a/includes/Actions/ConvertKit/ConvertKitController.php
+++ b/includes/Actions/ConvertKit/ConvertKitController.php
@@ -4,9 +4,9 @@
* Convert Kit Integration
*/
-namespace BitCode\FI\Actions\ConvertKit;
+namespace BitApps\Integrations\Actions\ConvertKit;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -190,6 +190,7 @@ public function execute($integrationData, $fieldValues)
empty($api_secret)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Kit(ConvertKit)'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $api_secret, $this->_integrationID);
diff --git a/includes/Actions/ConvertKit/RecordApiHelper.php b/includes/Actions/ConvertKit/RecordApiHelper.php
index 01134b140..9feeaf0a3 100644
--- a/includes/Actions/ConvertKit/RecordApiHelper.php
+++ b/includes/Actions/ConvertKit/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Convert Kit Record Api
*/
-namespace BitCode\FI\Actions\ConvertKit;
+namespace BitApps\Integrations\Actions\ConvertKit;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/ConvertKit/Routes.php b/includes/Actions/ConvertKit/Routes.php
index c9fa0d3b8..b49f71dbf 100644
--- a/includes/Actions/ConvertKit/Routes.php
+++ b/includes/Actions/ConvertKit/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ConvertKit\ConvertKitController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ConvertKit\ConvertKitController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('convertKit_authorize', [ConvertKitController::class, 'convertKitAuthorize']);
Route::post('convertKit_headers', [ConvertKitController::class, 'convertKitHeaders']);
diff --git a/includes/Actions/CopperCRM/CopperCRMController.php b/includes/Actions/CopperCRM/CopperCRMController.php
index 30dd9d7b4..0a0747fb7 100644
--- a/includes/Actions/CopperCRM/CopperCRMController.php
+++ b/includes/Actions/CopperCRM/CopperCRMController.php
@@ -4,9 +4,9 @@
* CopperCRM Integration
*/
-namespace BitCode\FI\Actions\CopperCRM;
+namespace BitApps\Integrations\Actions\CopperCRM;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -302,6 +302,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Copper CRM'));
}
diff --git a/includes/Actions/CopperCRM/RecordApiHelper.php b/includes/Actions/CopperCRM/RecordApiHelper.php
index e47f480a1..9cb045237 100644
--- a/includes/Actions/CopperCRM/RecordApiHelper.php
+++ b/includes/Actions/CopperCRM/RecordApiHelper.php
@@ -4,11 +4,11 @@
* CopperCRM Record Api
*/
-namespace BitCode\FI\Actions\CopperCRM;
+namespace BitApps\Integrations\Actions\CopperCRM;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/CopperCRM/Routes.php b/includes/Actions/CopperCRM/Routes.php
index 445728d6f..cea1b67d7 100644
--- a/includes/Actions/CopperCRM/Routes.php
+++ b/includes/Actions/CopperCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\CopperCRM\CopperCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\CopperCRM\CopperCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('coppercrm_authentication', [CopperCRMController::class, 'authentication']);
Route::post('coppercrm_fetch_custom_fields', [CopperCRMController::class, 'getCustomFields']);
diff --git a/includes/Actions/CustomAction/CustomActionController.php b/includes/Actions/CustomAction/CustomActionController.php
index b46e87df1..00d85f76d 100644
--- a/includes/Actions/CustomAction/CustomActionController.php
+++ b/includes/Actions/CustomAction/CustomActionController.php
@@ -1,33 +1,28 @@
actionName;
if (empty($fieldMap) || empty($apiSecret) || empty($actionName) || empty($apiKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Demio'));
}
diff --git a/includes/Actions/Demio/RecordApiHelper.php b/includes/Actions/Demio/RecordApiHelper.php
index eed133678..4bb503962 100644
--- a/includes/Actions/Demio/RecordApiHelper.php
+++ b/includes/Actions/Demio/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Demio Record Api
*/
-namespace BitCode\FI\Actions\Demio;
+namespace BitApps\Integrations\Actions\Demio;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Demio/Routes.php b/includes/Actions/Demio/Routes.php
index 29ad0a944..8717e7db9 100644
--- a/includes/Actions/Demio/Routes.php
+++ b/includes/Actions/Demio/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Demio\DemioController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Demio\DemioController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('demio_authentication', [DemioController::class, 'authentication']);
Route::post('demio_fetch_all_events', [DemioController::class, 'getAllEvents']);
diff --git a/includes/Actions/DirectIq/DirectIqController.php b/includes/Actions/DirectIq/DirectIqController.php
index e4000bbb5..484425023 100644
--- a/includes/Actions/DirectIq/DirectIqController.php
+++ b/includes/Actions/DirectIq/DirectIqController.php
@@ -4,9 +4,9 @@
* DirectIQ Integration
*/
-namespace BitCode\FI\Actions\DirectIq;
+namespace BitApps\Integrations\Actions\DirectIq;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -163,6 +163,7 @@ public function execute($integrationData, $fieldValues)
if (
empty($client_id) || empty($client_secret) || empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'DirectIQ'));
}
$recordApiHelper = new RecordApiHelper($client_id, $client_secret, $this->_integrationID);
diff --git a/includes/Actions/DirectIq/RecordApiHelper.php b/includes/Actions/DirectIq/RecordApiHelper.php
index 42481b8d0..678af3e76 100644
--- a/includes/Actions/DirectIq/RecordApiHelper.php
+++ b/includes/Actions/DirectIq/RecordApiHelper.php
@@ -4,10 +4,10 @@
* DirectIQ Record Api
*/
-namespace BitCode\FI\Actions\DirectIq;
+namespace BitApps\Integrations\Actions\DirectIq;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/DirectIq/Routes.php b/includes/Actions/DirectIq/Routes.php
index 38b3e3502..030b4ea04 100644
--- a/includes/Actions/DirectIq/Routes.php
+++ b/includes/Actions/DirectIq/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\DirectIq\DirectIqController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\DirectIq\DirectIqController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('directIq_authorize', [DirectIqController::class, 'directIqAuthorize']);
Route::post('directIq_headers', [DirectIqController::class, 'directIqHeaders']);
diff --git a/includes/Actions/Discord/DiscordController.php b/includes/Actions/Discord/DiscordController.php
index a126d81d2..0062cbdef 100644
--- a/includes/Actions/Discord/DiscordController.php
+++ b/includes/Actions/Discord/DiscordController.php
@@ -4,9 +4,9 @@
* discord Integration
*/
-namespace BitCode\FI\Actions\Discord;
+namespace BitApps\Integrations\Actions\Discord;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -138,6 +138,7 @@ public function execute($integrationData, $fieldValues)
|| empty($channel_id)
|| empty($body)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Discord'));
}
$recordApiHelper = new RecordApiHelper(self::APIENDPOINT, $access_token, $integrationId);
diff --git a/includes/Actions/Discord/FilesApiHelper.php b/includes/Actions/Discord/FilesApiHelper.php
index 56025dd76..39d8a6879 100644
--- a/includes/Actions/Discord/FilesApiHelper.php
+++ b/includes/Actions/Discord/FilesApiHelper.php
@@ -4,10 +4,10 @@
* Discord Files Api
*/
-namespace BitCode\FI\Actions\Discord;
+namespace BitApps\Integrations\Actions\Discord;
+use BitApps\Integrations\Core\Util\HttpHelper;
use CURLFile;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/Discord/RecordApiHelper.php b/includes/Actions/Discord/RecordApiHelper.php
index 254cc2adc..5117be619 100644
--- a/includes/Actions/Discord/RecordApiHelper.php
+++ b/includes/Actions/Discord/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Discord Record Api
*/
-namespace BitCode\FI\Actions\Discord;
+namespace BitApps\Integrations\Actions\Discord;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -70,8 +70,8 @@ public function execute($integrationDetails, $fieldValues)
];
$sendPhotoApiHelper = new FilesApiHelper($this->_accessToken);
- $recordApiResponse = $sendPhotoApiHelper->uploadFiles($this->_apiEndPoint, $data, $this->_accessToken, $integrationDetails->selectedChannel);
- $recordApiResponse = $this->sendMessages($data, $integrationDetails->selectedChannel);
+ $recordApiResponse = $sendPhotoApiHelper->uploadFiles($this->_apiEndPoint, $data, $this->_accessToken, $integrationDetails->selectedChannel);
+ $recordApiResponse = $this->sendMessages($data, $integrationDetails->selectedChannel);
} else {
$data = [
'content' => $messagesBody,
diff --git a/includes/Actions/Discord/Routes.php b/includes/Actions/Discord/Routes.php
index 3755074be..90262fe94 100644
--- a/includes/Actions/Discord/Routes.php
+++ b/includes/Actions/Discord/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Discord\DiscordController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Discord\DiscordController;
+use BitApps\Integrations\Core\Util\Route;
// Discord
Route::post('handle_authorize', [DiscordController::class, 'handleAuthorize']);
diff --git a/includes/Actions/Dokan/DokanController.php b/includes/Actions/Dokan/DokanController.php
index 23ffdf933..b02fbfed4 100644
--- a/includes/Actions/Dokan/DokanController.php
+++ b/includes/Actions/Dokan/DokanController.php
@@ -4,7 +4,7 @@
* Dokan Integration
*/
-namespace BitCode\FI\Actions\Dokan;
+namespace BitApps\Integrations\Actions\Dokan;
use WeDevs\DokanPro\Modules\Germanized\Helper;
use WP_Error;
@@ -32,6 +32,7 @@ public function authentication()
public static function checkedDokanExists()
{
if (!is_plugin_active('dokan-lite/dokan.php')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Dokan'), 400);
} else {
return true;
@@ -91,6 +92,7 @@ public function getEUFields()
wp_send_json_success($fields, 200);
}
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('EU Compliance Fields fetching failed - %s or EU Compliance Fields is not enabled', 'bit-integrations'), 'Dokan Pro'), 400);
}
diff --git a/includes/Actions/Dokan/RecordApiHelper.php b/includes/Actions/Dokan/RecordApiHelper.php
index a01e297d1..46beeb95f 100644
--- a/includes/Actions/Dokan/RecordApiHelper.php
+++ b/includes/Actions/Dokan/RecordApiHelper.php
@@ -4,11 +4,10 @@
* Dokan Record Api
*/
-namespace BitCode\FI\Actions\Dokan;
+namespace BitApps\Integrations\Actions\Dokan;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use WeDevs\DokanPro\Refund\Validator;
/**
@@ -80,12 +79,10 @@ public function formatVendorUpsertData($finalData, $actions, $module)
}
}
- if (!empty($actions) && Helper::proActionFeatExists('Dokan', 'vendorCreateActions')) {
- $filterResponse = apply_filters('btcbi_dokan_vendor_crud_actions', $module, $actions);
+ $filterResponse = apply_filters('btcbi_dokan_vendor_crud_actions', $module, $actions);
- if ($filterResponse !== $module && !empty($filterResponse)) {
- $data = array_merge($data, $filterResponse);
- }
+ if ($filterResponse !== $module && !empty($filterResponse)) {
+ $data = array_merge($data, $filterResponse);
}
return $data;
@@ -123,7 +120,8 @@ public function deleteVendor($finalData, $selectedVendor)
$id = $vendor['id'];
$vendorEmail = isset($vendor['email']) ? ' Email: ' . $vendor['email'] : '';
- return ['success' => true, 'message' => wp_sprintf(__('Vendor deleted successfully. (ID: %s %s)', 'bit-integrations'), $id, $vendorEmail)];
+ // translators: 1: Vendor ID, 2: Vendor email
+ return ['success' => true, 'message' => wp_sprintf(__('Vendor deleted successfully. (ID: %1$s %2$s)', 'bit-integrations'), $id, $vendorEmail)];
}
return ['success' => false, 'message' => __('Something went wrong!', 'bit-integrations'), 'code' => 400];
@@ -159,7 +157,8 @@ public function withdrawRequest($finalData, $selectedVendor, $selectedPaymentMet
$insertWithdraw = dokan()->withdraw->insert_withdraw($args);
if ($insertWithdraw) {
- return ['success' => true, 'message' => wp_sprintf(__('Withdraw request inserted successfully. (Vendor ID: %s Amount : %s Method: %s)', 'bit-integrations'), $args['user_id'], $args['amount'], $args['method'])];
+ // translators: 1: Vendor ID, 2: Amount, 3: Payment method
+ return ['success' => true, 'message' => wp_sprintf(__('Withdraw request inserted successfully. (Vendor ID: %1$s Amount : %2$s Method: %3$s)', 'bit-integrations'), $args['user_id'], $args['amount'], $args['method'])];
}
return ['success' => false, 'message' => __('Something went wrong!', 'bit-integrations'), 'code' => 400];
@@ -169,8 +168,9 @@ public function refundRequest($finalData)
{
if (!is_plugin_active('dokan-pro/dokan-pro.php')) {
return [
- 'success' => false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s is not installed or activated.', 'bit-integrations'), 'The Dokan Pro'),
+ 'success' => false,
'code' => 400
];
}
@@ -201,7 +201,8 @@ public function refundRequest($finalData)
$refundAmount = $refund->get_refund_amount();
$orderId = $refund->get_order_id();
- return ['success' => true, 'message' => wp_sprintf(__('Refund request added successfully. (Order ID: %s Refund Amount: %s)', 'bit-integrations'), $orderId, $refundAmount)];
+ // translators: 1: Order ID, 2: Refund amount
+ return ['success' => true, 'message' => wp_sprintf(__('Refund request added successfully. (Order ID: %1$s Refund Amount: %2$s)', 'bit-integrations'), $orderId, $refundAmount)];
}
public static function getUserIdFromEmail($email)
diff --git a/includes/Actions/Dokan/Routes.php b/includes/Actions/Dokan/Routes.php
index 912977176..c9d963de7 100644
--- a/includes/Actions/Dokan/Routes.php
+++ b/includes/Actions/Dokan/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Dokan\DokanController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Dokan\DokanController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('dokan_authentication', [DokanController::class, 'authentication']);
Route::post('dokan_fetch_eu_fields', [DokanController::class, 'getEUFields']);
diff --git a/includes/Actions/Drip/DripController.php b/includes/Actions/Drip/DripController.php
index a3d9672d7..5497c2df0 100644
--- a/includes/Actions/Drip/DripController.php
+++ b/includes/Actions/Drip/DripController.php
@@ -4,9 +4,9 @@
* Drip Integration
*/
-namespace BitCode\FI\Actions\Drip;
+namespace BitApps\Integrations\Actions\Drip;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -127,6 +127,7 @@ public function execute($integrationData, $fieldValues)
$selectedRemoveTags = $integrationDetails->selectedRemoveTags;
if (empty($api_token) || empty($fieldMap) || empty($accountId)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Drip'));
}
diff --git a/includes/Actions/Drip/RecordApiHelper.php b/includes/Actions/Drip/RecordApiHelper.php
index 848afc3b1..5c135c541 100644
--- a/includes/Actions/Drip/RecordApiHelper.php
+++ b/includes/Actions/Drip/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Drip Record Api
*/
-namespace BitCode\FI\Actions\Drip;
+namespace BitApps\Integrations\Actions\Drip;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/Drip/Routes.php b/includes/Actions/Drip/Routes.php
index 2741bd93e..bf0873c29 100644
--- a/includes/Actions/Drip/Routes.php
+++ b/includes/Actions/Drip/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Drip\DripController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Drip\DripController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('drip_authorize', [DripController::class, 'dripAuthorize']);
Route::post('drip_fetch_all_custom_fields', [DripController::class, 'getCustomFields']);
diff --git a/includes/Actions/Dropbox/DropboxController.php b/includes/Actions/Dropbox/DropboxController.php
index 0398f82b5..197b33f56 100644
--- a/includes/Actions/Dropbox/DropboxController.php
+++ b/includes/Actions/Dropbox/DropboxController.php
@@ -1,11 +1,11 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'dropbox', 'type_name' => 'file_upload']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'Dropbox'));
return false;
diff --git a/includes/Actions/Dropbox/RecordApiHelper.php b/includes/Actions/Dropbox/RecordApiHelper.php
index 39624352f..a5d2c8d44 100644
--- a/includes/Actions/Dropbox/RecordApiHelper.php
+++ b/includes/Actions/Dropbox/RecordApiHelper.php
@@ -1,11 +1,11 @@
_integrationID);
diff --git a/includes/Actions/Encharge/RecordApiHelper.php b/includes/Actions/Encharge/RecordApiHelper.php
index 786d6ecb4..3c597bc29 100644
--- a/includes/Actions/Encharge/RecordApiHelper.php
+++ b/includes/Actions/Encharge/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Encharge Record Api
*/
-namespace BitCode\FI\Actions\Encharge;
+namespace BitApps\Integrations\Actions\Encharge;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert
diff --git a/includes/Actions/Encharge/Routes.php b/includes/Actions/Encharge/Routes.php
index ed6384173..de991c80c 100644
--- a/includes/Actions/Encharge/Routes.php
+++ b/includes/Actions/Encharge/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Encharge\EnchargeController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Encharge\EnchargeController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('encharge_authorize', [EnchargeController::class, 'enChargeAuthorize']);
Route::post('encharge_headers', [EnchargeController::class, 'enchargeHeaders']);
diff --git a/includes/Actions/Fabman/FabmanController.php b/includes/Actions/Fabman/FabmanController.php
index 81b29a84f..a55c9130e 100644
--- a/includes/Actions/Fabman/FabmanController.php
+++ b/includes/Actions/Fabman/FabmanController.php
@@ -4,9 +4,9 @@
* Fabman Integration
*/
-namespace BitCode\FI\Actions\Fabman;
+namespace BitApps\Integrations\Actions\Fabman;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
class FabmanController
{
@@ -75,7 +75,6 @@ public static function execute($integrationData, $fieldValues)
$integId = $integrationData->id;
$memberId = $integrationDetails->selectedMember ?? null;
$lockVersion = $integrationDetails->selectedLockVersion ?? null;
- error_log('lockVersion: ' . $lockVersion);
$needsMemberLookup = \in_array($actionName, ['update_member', 'delete_member'])
&& ($actionName === 'delete_member' || empty($memberId));
diff --git a/includes/Actions/Fabman/RecordApiHelper.php b/includes/Actions/Fabman/RecordApiHelper.php
index 054e0bc6e..c885f84f8 100644
--- a/includes/Actions/Fabman/RecordApiHelper.php
+++ b/includes/Actions/Fabman/RecordApiHelper.php
@@ -1,10 +1,10 @@
integrationID,
['type' => 'validation', 'field' => $fieldName, 'value' => $value],
'error',
- __('Field validation failed for: ' . $fieldName, 'bit-integrations')
+ // translators: %s: Placeholder value
+ \sprintf(__('Field validation failed for: %s', 'bit-integrations'), $fieldName)
);
}
@@ -236,6 +237,7 @@ private function addLockVersionIfValid(array &$data): void
private function handleFilterResponse($response)
{
if (empty($response)) {
+ // translators: %s: Placeholder value
return (object) ['error' => \wp_sprintf(\__('%s plugin is not installed or activated', 'bit-integrations'), 'Bit Integration Pro')];
}
diff --git a/includes/Actions/Fabman/Routes.php b/includes/Actions/Fabman/Routes.php
index cc3118b52..64d4cbbb9 100644
--- a/includes/Actions/Fabman/Routes.php
+++ b/includes/Actions/Fabman/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Fabman\FabmanController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Fabman\FabmanController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('fabman_authorization', [FabmanController::class, 'authorization']);
Route::post('fabman_fetch_workspaces', [FabmanController::class, 'fetchWorkspaces']);
diff --git a/includes/Actions/FlowMattic/FlowMatticController.php b/includes/Actions/FlowMattic/FlowMatticController.php
index 45d25896b..609694bed 100644
--- a/includes/Actions/FlowMattic/FlowMatticController.php
+++ b/includes/Actions/FlowMattic/FlowMatticController.php
@@ -4,9 +4,9 @@
* FlowMattic Integration
*/
-namespace BitCode\FI\Actions\FlowMattic;
+namespace BitApps\Integrations\Actions\FlowMattic;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for FlowMatticHandler
diff --git a/includes/Actions/Flowlu/FlowluController.php b/includes/Actions/Flowlu/FlowluController.php
index 4f3aec015..a545eaa75 100644
--- a/includes/Actions/Flowlu/FlowluController.php
+++ b/includes/Actions/Flowlu/FlowluController.php
@@ -4,9 +4,9 @@
* Flowlu Integration
*/
-namespace BitCode\FI\Actions\Flowlu;
+namespace BitApps\Integrations\Actions\Flowlu;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -366,6 +366,7 @@ public function execute($integrationData, $fieldValues)
$comapnyName = $integrationDetails->company_name;
if (empty($fieldMap) || empty($apiKey) || empty($actionName) || empty($comapnyName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Flowlu'));
}
diff --git a/includes/Actions/Flowlu/RecordApiHelper.php b/includes/Actions/Flowlu/RecordApiHelper.php
index f086e8c74..ba5581b2c 100644
--- a/includes/Actions/Flowlu/RecordApiHelper.php
+++ b/includes/Actions/Flowlu/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Flowlu Record Api
*/
-namespace BitCode\FI\Actions\Flowlu;
+namespace BitApps\Integrations\Actions\Flowlu;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Flowlu/Routes.php b/includes/Actions/Flowlu/Routes.php
index 72c64018c..67a493e64 100644
--- a/includes/Actions/Flowlu/Routes.php
+++ b/includes/Actions/Flowlu/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Flowlu\FlowluController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Flowlu\FlowluController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('flowlu_authentication', [FlowluController::class, 'authentication']);
Route::post('Flowlu_all_fields', [FlowluController::class, 'getAllFields']);
diff --git a/includes/Actions/FluentCart/FluentCartController.php b/includes/Actions/FluentCart/FluentCartController.php
index e8bd916ef..4988b2c66 100644
--- a/includes/Actions/FluentCart/FluentCartController.php
+++ b/includes/Actions/FluentCart/FluentCartController.php
@@ -4,7 +4,7 @@
* FluentCart Integration
*/
-namespace BitCode\FI\Actions\FluentCart;
+namespace BitApps\Integrations\Actions\FluentCart;
use WP_Error;
diff --git a/includes/Actions/FluentCart/RecordApiHelper.php b/includes/Actions/FluentCart/RecordApiHelper.php
index 140be6e44..bea1cb98b 100644
--- a/includes/Actions/FluentCart/RecordApiHelper.php
+++ b/includes/Actions/FluentCart/RecordApiHelper.php
@@ -4,10 +4,10 @@
* FluentCart Record Api
*/
-namespace BitCode\FI\Actions\FluentCart;
+namespace BitApps\Integrations\Actions\FluentCart;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, update
@@ -48,6 +48,7 @@ public function execute($fieldValues, $fieldMap, $utilities)
$defaultResponse = [
'success' => false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')
];
diff --git a/includes/Actions/FluentCart/Routes.php b/includes/Actions/FluentCart/Routes.php
index 521f2f180..3dbcf1a05 100644
--- a/includes/Actions/FluentCart/Routes.php
+++ b/includes/Actions/FluentCart/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\FluentCart\FluentCartController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\FluentCart\FluentCartController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('fluent_cart_authorize', [FluentCartController::class, 'fluentCartAuthorize']);
Route::post('refresh_fluent_cart_products', [FluentCartController::class, 'refreshProducts']);
diff --git a/includes/Actions/FluentCrm/FluentCrmController.php b/includes/Actions/FluentCrm/FluentCrmController.php
index a7bbcb5a6..f7c450a9c 100644
--- a/includes/Actions/FluentCrm/FluentCrmController.php
+++ b/includes/Actions/FluentCrm/FluentCrmController.php
@@ -4,15 +4,15 @@
* Fluent CRM Integration
*/
-namespace BitCode\FI\Actions\FluentCrm;
+namespace BitApps\Integrations\Actions\FluentCrm;
-use WP_Error;
+use FluentCrm\App\Models\Company;
-use FluentCrm\App\Models\Tag;
+use FluentCrm\App\Models\CustomContactField;
use FluentCrm\App\Models\Lists;
-use FluentCrm\App\Models\Company;
use FluentCrm\App\Models\Subscriber;
-use FluentCrm\App\Models\CustomContactField;
+use FluentCrm\App\Models\Tag;
+use WP_Error;
/**
* Provide functionality for ZohoCrm integration
@@ -34,6 +34,7 @@ public function __construct($integrationID)
public static function checkedExistsFluentCRM()
{
if (!is_plugin_active('fluent-crm/fluent-crm.php')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Fluent CRM'), 400);
} else {
return true;
@@ -176,6 +177,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Fluent CRM'));
}
diff --git a/includes/Actions/FluentCrm/RecordApiHelper.php b/includes/Actions/FluentCrm/RecordApiHelper.php
index 7c60eb13d..ab3aa816f 100644
--- a/includes/Actions/FluentCrm/RecordApiHelper.php
+++ b/includes/Actions/FluentCrm/RecordApiHelper.php
@@ -4,9 +4,9 @@
* Fluent CRM Record Api
*/
-namespace BitCode\FI\Actions\FluentCrm;
+namespace BitApps\Integrations\Actions\FluentCrm;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Log\LogHandler;
use FluentCrm\App\Models\Subscriber;
/**
@@ -134,7 +134,7 @@ public function removeUser($data)
public function execute($fieldValues, $fieldMap, $actions, $list_id, $tags, $actionName)
{
- $fieldData = apply_filters('fluent_crm_assign_company', [], (array) $actions);
+ $fieldData = apply_filters('btcbi_fluent_crm_assign_company', [], (array) $actions);
foreach ($fieldMap as $fieldKey => $fieldPair) {
if (!empty($fieldPair->fluentCRMField)) {
diff --git a/includes/Actions/FluentCrm/Routes.php b/includes/Actions/FluentCrm/Routes.php
index 9b503c2fe..a125716dc 100644
--- a/includes/Actions/FluentCrm/Routes.php
+++ b/includes/Actions/FluentCrm/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Actions\FluentCrm\FluentCrmController;
+use BitApps\Integrations\Actions\FluentCrm\FluentCrmController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('fluent_crm_authorize', [FluentCrmController::class, 'fluentCrmAuthorize']);
Route::post('refresh_fluent_crm_lists', [FluentCrmController::class, 'fluentCrmLists']);
diff --git a/includes/Actions/FluentSupport/FluentSupportController.php b/includes/Actions/FluentSupport/FluentSupportController.php
index 7ee7ff5d9..d47451403 100644
--- a/includes/Actions/FluentSupport/FluentSupportController.php
+++ b/includes/Actions/FluentSupport/FluentSupportController.php
@@ -4,7 +4,7 @@
* Fluent Support Integration
*/
-namespace BitCode\FI\Actions\FluentSupport;
+namespace BitApps\Integrations\Actions\FluentSupport;
use FluentSupport\App\Models\Agent;
use FluentSupport\App\Models\MailBox;
@@ -34,6 +34,7 @@ public function checkAuthorization()
public function getCustomFields()
{
if (!class_exists(\FluentSupportPro\App\Services\CustomFieldsService::class)) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Fluent Support'), 400);
}
diff --git a/includes/Actions/FluentSupport/RecordApiHelper.php b/includes/Actions/FluentSupport/RecordApiHelper.php
index 6e3fddf60..8a2cc7c5f 100644
--- a/includes/Actions/FluentSupport/RecordApiHelper.php
+++ b/includes/Actions/FluentSupport/RecordApiHelper.php
@@ -4,11 +4,10 @@
* Freshdesk Record Api
*/
-namespace BitCode\FI\Actions\FluentSupport;
+namespace BitApps\Integrations\Actions\FluentSupport;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper as BtcbiHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use FluentSupport\App\Models\Customer;
use FluentSupport\App\Models\Ticket;
use FluentSupport\App\Services\Helper;
@@ -90,6 +89,7 @@ public function createTicketByExistCustomer($finalData, $customer, $attachments
}
if (isset($finalData['custom_fields']) && \is_array($finalData['custom_fields'])) {
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using Fluent Support's own hook for compatibility
$fields = apply_filters('fluent_support/ticket_custom_fields', []);
if (!empty($fields)) {
@@ -152,10 +152,9 @@ public function execute(
private static function uploadTicketFiles($finalData, $attachments, $ticket, $customer, $flowId)
{
- if (BtcbiHelper::proActionFeatExists('FluentSupport', 'uploadTicketAttachments')) {
- do_action('btcbi_fluent_support_upload_ticket_attachments', $finalData, $attachments, $ticket, $customer, $flowId);
- }
+ do_action('btcbi_fluent_support_upload_ticket_attachments', $finalData, $attachments, $ticket, $customer, $flowId);
+ // translators: %s: Placeholder value
LogHandler::save($flowId, ['type' => 'Ticket', 'type_name' => 'Upload-Ticket-Attachments'], 'error', wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro'));
}
}
diff --git a/includes/Actions/FluentSupport/Routes.php b/includes/Actions/FluentSupport/Routes.php
index 21652fab9..4b459e543 100644
--- a/includes/Actions/FluentSupport/Routes.php
+++ b/includes/Actions/FluentSupport/Routes.php
@@ -1,10 +1,11 @@
_integrationDetails, $this->_defaultHeader, $this->baseUrl);
+ $response = apply_filters('btcbi_freshsales_upsert_record', $module, $finalData, $this->_integrationDetails, $this->_defaultHeader, $this->baseUrl);
- if (\is_string($response) && $response == $module) {
- return (object) ['errors' => wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Bit Integrations Pro'), 400)];
- }
-
- return $response;
+ if (\is_string($response) && $response == $module) {
+ return $this->insertRecord($module, $finalData);
}
- return $this->insertRecord($module, $finalData);
+ return $response;
}
public function generateReqDataFromFieldMap($data, $fieldMap)
diff --git a/includes/Actions/FreshSales/Routes.php b/includes/Actions/FreshSales/Routes.php
index df6fa7f0b..c4032c3c0 100644
--- a/includes/Actions/FreshSales/Routes.php
+++ b/includes/Actions/FreshSales/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\FreshSales\FreshSalesController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\FreshSales\FreshSalesController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('FreshSales_authorization', [FreshSalesController::class, 'authorization']);
Route::post('FreshSales_refresh_fields', [FreshSalesController::class, 'getFields']);
diff --git a/includes/Actions/Freshdesk/AllFilesApiHelper.php b/includes/Actions/Freshdesk/AllFilesApiHelper.php
index ffba2a5ed..ef9044751 100644
--- a/includes/Actions/Freshdesk/AllFilesApiHelper.php
+++ b/includes/Actions/Freshdesk/AllFilesApiHelper.php
@@ -4,9 +4,9 @@
* Freshdesk Files Api
*/
-namespace BitCode\FI\Actions\Freshdesk;
+namespace BitApps\Integrations\Actions\Freshdesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use CURLFile;
/**
diff --git a/includes/Actions/Freshdesk/FilesApiHelper.php b/includes/Actions/Freshdesk/FilesApiHelper.php
index be1ff7658..c65b762c1 100644
--- a/includes/Actions/Freshdesk/FilesApiHelper.php
+++ b/includes/Actions/Freshdesk/FilesApiHelper.php
@@ -4,9 +4,9 @@
* Slack Files Api
*/
-namespace BitCode\FI\Actions\Freshdesk;
+namespace BitApps\Integrations\Actions\Freshdesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use CURLFile;
/**
diff --git a/includes/Actions/Freshdesk/FreshdeskController.php b/includes/Actions/Freshdesk/FreshdeskController.php
index 268846af5..68c6ca195 100644
--- a/includes/Actions/Freshdesk/FreshdeskController.php
+++ b/includes/Actions/Freshdesk/FreshdeskController.php
@@ -4,9 +4,9 @@
* freshdesk Integration
*/
-namespace BitCode\FI\Actions\Freshdesk;
+namespace BitApps\Integrations\Actions\Freshdesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -199,6 +199,7 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Freshdesk'));
}
$app_base_domamin = $integrationDetails->app_domain;
diff --git a/includes/Actions/Freshdesk/RecordApiHelper.php b/includes/Actions/Freshdesk/RecordApiHelper.php
index d81eb5781..c58edbd64 100644
--- a/includes/Actions/Freshdesk/RecordApiHelper.php
+++ b/includes/Actions/Freshdesk/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Freshdesk Record Api
*/
-namespace BitCode\FI\Actions\Freshdesk;
+namespace BitApps\Integrations\Actions\Freshdesk;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Freshdesk/Routes.php b/includes/Actions/Freshdesk/Routes.php
index 21d3f1c80..f28fdca91 100644
--- a/includes/Actions/Freshdesk/Routes.php
+++ b/includes/Actions/Freshdesk/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Freshdesk\FreshdeskController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Freshdesk\FreshdeskController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('freshdesk_authorization_and_fetch_tickets', [FreshdeskController::class, 'checkAuthorizationAndFetchTickets']);
Route::post('freshdesk_fetch_ticket_fields', [FreshdeskController::class, 'getAllTicketFields']);
diff --git a/includes/Actions/GamiPress/GamiPressController.php b/includes/Actions/GamiPress/GamiPressController.php
index ab4c25daa..428acbaa2 100644
--- a/includes/Actions/GamiPress/GamiPressController.php
+++ b/includes/Actions/GamiPress/GamiPressController.php
@@ -4,7 +4,7 @@
* LearnDesh Integration
*/
-namespace BitCode\FI\Actions\GamiPress;
+namespace BitApps\Integrations\Actions\GamiPress;
use WP_Error;
@@ -36,6 +36,7 @@ public static function authorizeGamiPress()
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'GamiPress'));
}
@@ -66,10 +67,25 @@ public static function getCourses()
public static function fetchAllRankType()
{
global $wpdb;
+ $cache_key = 'btcbi_gamipress_rank_types';
+ $cache_group = 'btcbi';
+ $rank_types = wp_cache_get($cache_key, $cache_group);
- return $wpdb->get_results(
- $wpdb->prepare("SELECT ID, post_name, post_title, post_type FROM %1s where post_type like 'rank-type' AND post_status = 'publish'", $wpdb->posts)
+ if (false !== $rank_types) {
+ return $rank_types;
+ }
+
+ $posts_table = esc_sql($wpdb->posts);
+
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $rank_types = $wpdb->get_results(
+ 'SELECT ID, post_name, post_title, post_type FROM ' . $posts_table . " where post_type = 'rank-type' AND post_status = 'publish'"
);
+ // phpcs:enable
+
+ wp_cache_set($cache_key, $rank_types, $cache_group, 10 * MINUTE_IN_SECONDS);
+
+ return $rank_types;
}
public static function fetchAllRankBYType($query_params)
@@ -77,9 +93,19 @@ public static function fetchAllRankBYType($query_params)
$selectRankType = $query_params->domainName;
global $wpdb;
- $ranks = $wpdb->get_results(
- $wpdb->prepare("SELECT ID, post_name, post_title, post_type FROM %1s where post_type like %s AND post_status = 'publish'", $wpdb->posts, $selectRankType)
- );
+ $cache_key = 'btcbi_gamipress_ranks_' . md5((string) $selectRankType);
+ $cache_group = 'btcbi';
+ $ranks = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $ranks) {
+ $posts_table = esc_sql($wpdb->posts);
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $ranks = $wpdb->get_results(
+ $wpdb->prepare('SELECT ID, post_name, post_title, post_type FROM ' . $posts_table . " where post_type like %s AND post_status = 'publish'", $selectRankType)
+ );
+ // phpcs:enable
+ wp_cache_set($cache_key, $ranks, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
wp_send_json_success($ranks);
}
@@ -87,10 +113,25 @@ public static function fetchAllRankBYType($query_params)
public static function fetchAllAchievementType()
{
global $wpdb;
+ $cache_key = 'btcbi_gamipress_achievement_types';
+ $cache_group = 'btcbi';
+ $achievement_types = wp_cache_get($cache_key, $cache_group);
+
+ if (false !== $achievement_types) {
+ return $achievement_types;
+ }
- return $wpdb->get_results(
- $wpdb->prepare("SELECT ID, post_name, post_title, post_type FROM %1s WHERE post_type LIKE 'achievement-type' AND post_status = 'publish' ORDER BY post_title ASC", $wpdb->posts)
+ $posts_table = esc_sql($wpdb->posts);
+
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $achievement_types = $wpdb->get_results(
+ 'SELECT ID, post_name, post_title, post_type FROM ' . $posts_table . " WHERE post_type = 'achievement-type' AND post_status = 'publish' ORDER BY post_title ASC"
);
+ // phpcs:enable
+
+ wp_cache_set($cache_key, $achievement_types, $cache_group, 10 * MINUTE_IN_SECONDS);
+
+ return $achievement_types;
}
public static function fetchAllAchievementBYType($query_params)
@@ -98,9 +139,19 @@ public static function fetchAllAchievementBYType($query_params)
$selectAchievementType = $query_params->achievementType;
global $wpdb;
- $awards = $wpdb->get_results(
- $wpdb->prepare("SELECT ID, post_name, post_title, post_type FROM %1s where post_type like %s AND post_status = 'publish'", $wpdb->posts, $selectAchievementType)
- );
+ $cache_key = 'btcbi_gamipress_achievements_' . md5((string) $selectAchievementType);
+ $cache_group = 'btcbi';
+ $awards = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $awards) {
+ $posts_table = esc_sql($wpdb->posts);
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $awards = $wpdb->get_results(
+ $wpdb->prepare('SELECT ID, post_name, post_title, post_type FROM ' . $posts_table . " where post_type like %s AND post_status = 'publish'", $selectAchievementType)
+ );
+ // phpcs:enable
+ wp_cache_set($cache_key, $awards, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
array_unshift($awards, ['ID' => 'Any', 'post_name' => 'any_achievement', 'post_title' => 'Any Achievement']);
@@ -110,9 +161,20 @@ public static function fetchAllAchievementBYType($query_params)
public static function fetchAllPointType()
{
global $wpdb;
- $points = $wpdb->get_results(
- $wpdb->prepare("SELECT ID, post_name, post_title, post_type FROM %1s WHERE post_type LIKE 'points-type' AND post_status = 'publish' ORDER BY post_title ASC", $wpdb->posts)
- );
+ $cache_key = 'btcbi_gamipress_point_types';
+ $cache_group = 'btcbi';
+ $points = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $points) {
+ $posts_table = esc_sql($wpdb->posts);
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $points = $wpdb->get_results(
+ 'SELECT ID, post_name, post_title, post_type FROM ' . $posts_table . " WHERE post_type = 'points-type' AND post_status = 'publish' ORDER BY post_title ASC"
+ );
+ // phpcs:enable
+ wp_cache_set($cache_key, $points, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
+
wp_send_json_success($points);
}
diff --git a/includes/Actions/GamiPress/RecordApiHelper.php b/includes/Actions/GamiPress/RecordApiHelper.php
index 762e1feb3..e12408696 100644
--- a/includes/Actions/GamiPress/RecordApiHelper.php
+++ b/includes/Actions/GamiPress/RecordApiHelper.php
@@ -4,10 +4,10 @@
* GamiPress Record Api
*/
-namespace BitCode\FI\Actions\GamiPress;
+namespace BitApps\Integrations\Actions\GamiPress;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -132,7 +132,8 @@ public function execute(
if ($mainAction === '1') {
$apiResponse = self::addRankToUser($integrationDetails->selectedRank, $mainAction);
if ($apiResponse) {
- LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-rank']), 'success', wp_json_encode(wp_sprintf(__('Added successfully, post id %s and post title %s', 'bit-integrations'), $apiResponse->ID, $apiResponse->post_title)));
+ // translators: %s: Placeholder value
+ LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-rank']), 'success', wp_json_encode(wp_sprintf(__('Added successfully, post id %1$s and post title %2$s', 'bit-integrations'), $apiResponse->ID, $apiResponse->post_title)));
} else {
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-rank']), 'error', wp_json_encode(__('Failed to add rank', 'bit-integrations')));
}
@@ -153,6 +154,7 @@ public function execute(
if (!empty($point) && is_numeric($point)) {
$apiResponse = self::addPointToUser($integrationDetails->selectedPointType, $point, $mainAction);
if ($apiResponse) {
+ // translators: %s: Placeholder value
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-point']), 'success', wp_json_encode(wp_sprintf(__('Point added successfully and total points are %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-point']), 'error', wp_json_encode(__('Failed to add point', 'bit-integrations')));
@@ -165,7 +167,8 @@ public function execute(
if ($mainAction === '4') {
$apiResponse = self::addRankToUser($integrationDetails->selectedRank, $mainAction);
if ($apiResponse) {
- LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'revoke', 'type_name' => 'revoke-rank']), 'success', wp_json_encode(wp_sprintf(__('Revoked rank successfully, post id %s and post title %s', 'bit-integrations'), $apiResponse->ID, $apiResponse->post_title)));
+ // translators: %s: Placeholder value
+ LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'revoke', 'type_name' => 'revoke-rank']), 'success', wp_json_encode(wp_sprintf(__('Revoked rank successfully, post id %1$s and post title %2$s', 'bit-integrations'), $apiResponse->ID, $apiResponse->post_title)));
} else {
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'revoke', 'type_name' => 'revoke-rank']), 'error', wp_json_encode(__('Failed to revoke rank', 'bit-integrations')));
}
@@ -186,6 +189,7 @@ public function execute(
if (!empty($point) && is_numeric($point)) {
$apiResponse = self::addPointToUser($integrationDetails->selectedPointType, $point, $mainAction);
if ($apiResponse) {
+ // translators: %s: Placeholder value
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-point']), 'success', wp_json_encode(wp_sprintf(__('Point revoked successfully and total points are %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::getIntegrationId(), wp_json_encode(['type' => 'insert', 'type_name' => 'update-point']), 'error', wp_json_encode(__('Failed to revoke point', 'bit-integrations')));
diff --git a/includes/Actions/GamiPress/Routes.php b/includes/Actions/GamiPress/Routes.php
index 5f888d280..d5bec37ec 100644
--- a/includes/Actions/GamiPress/Routes.php
+++ b/includes/Actions/GamiPress/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\GamiPress\GamiPressController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GamiPress\GamiPressController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('gamiPress_authorize', [GamiPressController::class, 'authorizeGamiPress']);
Route::post('gamiPress_fetch_all_rank_type', [GamiPressController::class, 'fetchAllRankType']);
diff --git a/includes/Actions/GetResponse/GetResponseController.php b/includes/Actions/GetResponse/GetResponseController.php
index 5b61bf6fc..9770d13bc 100644
--- a/includes/Actions/GetResponse/GetResponseController.php
+++ b/includes/Actions/GetResponse/GetResponseController.php
@@ -4,9 +4,9 @@
* GetResponse Integration
*/
-namespace BitCode\FI\Actions\GetResponse;
+namespace BitApps\Integrations\Actions\GetResponse;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -149,6 +149,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($auth_token) || empty($campaignId)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'GetResponse'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/GetResponse/RecordApiHelper.php b/includes/Actions/GetResponse/RecordApiHelper.php
index 9637a8a84..06bab156b 100644
--- a/includes/Actions/GetResponse/RecordApiHelper.php
+++ b/includes/Actions/GetResponse/RecordApiHelper.php
@@ -4,12 +4,11 @@
* GetResponse Record Api
*/
-namespace BitCode\FI\Actions\GetResponse;
+namespace BitApps\Integrations\Actions\GetResponse;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -76,7 +75,7 @@ public function addContactToCampaign($auth_token, $selectedTags, $finalData, $ca
}
}
- if (isset($this->_integrationDetails->dayOfCycle) && Helper::proActionFeatExists('GetResponse', 'autoResponderDay')) {
+ if (isset($this->_integrationDetails->dayOfCycle)) {
$requestParams = apply_filters('btcbi_getresponse_autoresponder_day', $requestParams, $this->_integrationDetails->dayOfCycle);
}
diff --git a/includes/Actions/GetResponse/Routes.php b/includes/Actions/GetResponse/Routes.php
index 74010a755..258f2169e 100644
--- a/includes/Actions/GetResponse/Routes.php
+++ b/includes/Actions/GetResponse/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\GetResponse\GetResponseController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GetResponse\GetResponseController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('getresponse_fetch_all_tags', [GetResponseController::class, 'fetchAllTags']);
Route::post('getresponse_authentication', [GetResponseController::class, 'authentication']);
diff --git a/includes/Actions/Getgist/GetgistController.php b/includes/Actions/Getgist/GetgistController.php
index 43b05f462..c60984ded 100644
--- a/includes/Actions/Getgist/GetgistController.php
+++ b/includes/Actions/Getgist/GetgistController.php
@@ -1,8 +1,8 @@
createGiveWpDonar($finalData);
if (!empty($response)) {
+ // translators: %s: Placeholder value
LogHandler::save($integId, wp_json_encode(['type' => 'create-donar', 'type_name' => 'create-donar-giveWp']), 'success', wp_json_encode(wp_sprintf(__('Donar crated successfully and id is %s', 'bit-integrations'), $response)));
} else {
LogHandler::save($integId, wp_json_encode(['type' => 'create-donar', 'type_name' => 'create-donar-giveWp']), 'error', wp_json_encode(__('Failed to create donar', 'bit-integrations')));
diff --git a/includes/Actions/GiveWp/Routes.php b/includes/Actions/GiveWp/Routes.php
index 894906414..e03dd9e81 100644
--- a/includes/Actions/GiveWp/Routes.php
+++ b/includes/Actions/GiveWp/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\GiveWp\GiveWpController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GiveWp\GiveWpController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('giveWp_authorize', [GiveWpController::class, 'authorizeGiveWp']);
diff --git a/includes/Actions/GoogleCalendar/GoogleCalendarController.php b/includes/Actions/GoogleCalendar/GoogleCalendarController.php
index b925c80a0..ff505dcdc 100644
--- a/includes/Actions/GoogleCalendar/GoogleCalendarController.php
+++ b/includes/Actions/GoogleCalendar/GoogleCalendarController.php
@@ -1,11 +1,11 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'record', 'type_name' => 'insert']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'GoogleCalendar'));
return false;
diff --git a/includes/Actions/GoogleCalendar/RecordApiHelper.php b/includes/Actions/GoogleCalendar/RecordApiHelper.php
index a7d485df6..71ac5d766 100644
--- a/includes/Actions/GoogleCalendar/RecordApiHelper.php
+++ b/includes/Actions/GoogleCalendar/RecordApiHelper.php
@@ -1,13 +1,13 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'record', 'type_name' => 'insert']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'GoogleContact'));
return false;
diff --git a/includes/Actions/GoogleContacts/RecordApiHelper.php b/includes/Actions/GoogleContacts/RecordApiHelper.php
index 8fefbf35e..5cbf59d4b 100644
--- a/includes/Actions/GoogleContacts/RecordApiHelper.php
+++ b/includes/Actions/GoogleContacts/RecordApiHelper.php
@@ -1,10 +1,10 @@
'addresses,biographies,emailAddresses,names,phoneNumbers'
// ];
+ $response = wp_remote_get($imageLocation);
+ if (is_wp_error($response)) {
+ return $response;
+ }
+ $imageData = wp_remote_retrieve_body($response);
+
$dataNew = [
- 'photoBytes' => base64_encode(file_get_contents($imageLocation)),
+ 'photoBytes' => base64_encode($imageData),
'personFields' => 'addresses,biographies,emailAddresses,names,phoneNumbers'
];
diff --git a/includes/Actions/GoogleContacts/Routes.php b/includes/Actions/GoogleContacts/Routes.php
index 0c3e0ff6e..239cfbb9f 100644
--- a/includes/Actions/GoogleContacts/Routes.php
+++ b/includes/Actions/GoogleContacts/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\GoogleContacts\GoogleContactsController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GoogleContacts\GoogleContactsController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('googleContacts_authorization', [GoogleContactsController::class, 'authorization']);
diff --git a/includes/Actions/GoogleDrive/GoogleDriveController.php b/includes/Actions/GoogleDrive/GoogleDriveController.php
index d9a4b7669..044a7e051 100644
--- a/includes/Actions/GoogleDrive/GoogleDriveController.php
+++ b/includes/Actions/GoogleDrive/GoogleDriveController.php
@@ -1,11 +1,11 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'googleDrive', 'type_name' => 'file_upload']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'GoogleDrive'));
return false;
diff --git a/includes/Actions/GoogleDrive/RecordApiHelper.php b/includes/Actions/GoogleDrive/RecordApiHelper.php
index cb52f65a4..4565e94cf 100644
--- a/includes/Actions/GoogleDrive/RecordApiHelper.php
+++ b/includes/Actions/GoogleDrive/RecordApiHelper.php
@@ -1,10 +1,10 @@
handleAllFiles($file, $actions, $folder);
} else {
- error_log(print_r(['action' => $actions], true));
$response = $this->uploadFile($folder, $file);
$this->storeInState($response);
$this->deleteFile($file, $actions);
diff --git a/includes/Actions/GoogleDrive/Routes.php b/includes/Actions/GoogleDrive/Routes.php
index 1bd922b93..5d13615a0 100644
--- a/includes/Actions/GoogleDrive/Routes.php
+++ b/includes/Actions/GoogleDrive/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\GoogleDrive\GoogleDriveController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GoogleDrive\GoogleDriveController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('googleDrive_authorization', [GoogleDriveController::class, 'authorization']);
Route::post('googleDrive_get_all_folders', [GoogleDriveController::class, 'getAllFolders']);
diff --git a/includes/Actions/GoogleSheet/GoogleSheetController.php b/includes/Actions/GoogleSheet/GoogleSheetController.php
index 89f6e5257..cd20c51f5 100644
--- a/includes/Actions/GoogleSheet/GoogleSheetController.php
+++ b/includes/Actions/GoogleSheet/GoogleSheetController.php
@@ -4,11 +4,14 @@
* ZohoSheet Integration
*/
-namespace BitCode\FI\Actions\GoogleSheet;
+namespace BitApps\Integrations\Actions\GoogleSheet;
+if (! defined('ABSPATH')) {
+ exit;
+}
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
-use BitCode\FI\Flow\FlowController;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for ZohoCrm integration
@@ -262,6 +265,7 @@ public function execute($integrationData, $fieldValues)
|| empty($worksheetName)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Google sheet'));
}
diff --git a/includes/Actions/GoogleSheet/RecordApiHelper.php b/includes/Actions/GoogleSheet/RecordApiHelper.php
index 39346f85a..aaf5e7ac5 100644
--- a/includes/Actions/GoogleSheet/RecordApiHelper.php
+++ b/includes/Actions/GoogleSheet/RecordApiHelper.php
@@ -4,11 +4,11 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\GoogleSheet;
+namespace BitApps\Integrations\Actions\GoogleSheet;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,upsert
@@ -62,7 +62,7 @@ public function execute($spreadsheetId, $worksheetName, $headerRow, $header, $ac
{
$fieldData = [];
$allHeaders = $defaultConf->headers->{$spreadsheetId}->{$worksheetName}->{$headerRow};
-
+
foreach ($fieldMap as $fieldKey => $fieldPair) {
if (!empty($fieldPair->googleSheetField)) {
if ($fieldPair->formField === 'custom' && isset($fieldPair->customValue)) {
@@ -81,12 +81,12 @@ public function execute($spreadsheetId, $worksheetName, $headerRow, $header, $ac
$values[] = '';
}
}
-
+
$data = [];
$data['range'] = "{$worksheetName}!{$headerRow}";
$data['majorDimension'] = "{$header}";
$data['values'][] = $values;
-
+
$recordApiResponse = $this->insertRecord($spreadsheetId, $worksheetName, $header, $headerRow, wp_json_encode($data));
$type = 'insert';
if (isset($recordApiResponse->error)) {
diff --git a/includes/Actions/GoogleSheet/Routes.php b/includes/Actions/GoogleSheet/Routes.php
index e52155659..5eabc8ae2 100644
--- a/includes/Actions/GoogleSheet/Routes.php
+++ b/includes/Actions/GoogleSheet/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\GoogleSheet\GoogleSheetController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\GoogleSheet\GoogleSheetController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('gsheet_generate_token', [GoogleSheetController::class, 'generateTokens']);
Route::post('gsheet_refresh_spreadsheets', [GoogleSheetController::class, 'refreshSpreadsheetsAjaxHelper']);
diff --git a/includes/Actions/Gravitec/GravitecController.php b/includes/Actions/Gravitec/GravitecController.php
index a2e31761d..3ca1a96c7 100644
--- a/includes/Actions/Gravitec/GravitecController.php
+++ b/includes/Actions/Gravitec/GravitecController.php
@@ -4,9 +4,9 @@
* Gravitec Integration
*/
-namespace BitCode\FI\Actions\Gravitec;
+namespace BitApps\Integrations\Actions\Gravitec;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -54,6 +54,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($appKey) || empty($actionName) || empty($appSecret)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Gravitec'));
}
diff --git a/includes/Actions/Gravitec/RecordApiHelper.php b/includes/Actions/Gravitec/RecordApiHelper.php
index 706df0f74..d454749fa 100644
--- a/includes/Actions/Gravitec/RecordApiHelper.php
+++ b/includes/Actions/Gravitec/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Gravitec Record Api
*/
-namespace BitCode\FI\Actions\Gravitec;
+namespace BitApps\Integrations\Actions\Gravitec;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Gravitec/Routes.php b/includes/Actions/Gravitec/Routes.php
index 98ccdca81..b755c128a 100644
--- a/includes/Actions/Gravitec/Routes.php
+++ b/includes/Actions/Gravitec/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\Gravitec\GravitecController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Gravitec\GravitecController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('gravitec_authentication', [GravitecController::class, 'authentication']);
diff --git a/includes/Actions/Groundhogg/GroundhoggController.php b/includes/Actions/Groundhogg/GroundhoggController.php
index 70abedcd1..0488e49e7 100644
--- a/includes/Actions/Groundhogg/GroundhoggController.php
+++ b/includes/Actions/Groundhogg/GroundhoggController.php
@@ -4,9 +4,9 @@
* Groundhogg Integration
*/
-namespace BitCode\FI\Actions\Groundhogg;
+namespace BitApps\Integrations\Actions\Groundhogg;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -90,6 +90,7 @@ public function execute($integrationData, $fieldValues)
if (
empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Groundhogg'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Groundhogg/RecordApiHelper.php b/includes/Actions/Groundhogg/RecordApiHelper.php
index 140bf7ce6..015488f63 100644
--- a/includes/Actions/Groundhogg/RecordApiHelper.php
+++ b/includes/Actions/Groundhogg/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Groundhogg Record Api
*/
-namespace BitCode\FI\Actions\Groundhogg;
+namespace BitApps\Integrations\Actions\Groundhogg;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Groundhogg/Routes.php b/includes/Actions/Groundhogg/Routes.php
index 75583916f..dedef3fd1 100644
--- a/includes/Actions/Groundhogg/Routes.php
+++ b/includes/Actions/Groundhogg/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Groundhogg\GroundhoggController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Groundhogg\GroundhoggController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('groundhogg_authorization_and_fetch_contacts', [GroundhoggController::class, 'fetchAllContacts']);
Route::post('groundhogg_fetch_all_tags', [GroundhoggController::class, 'groundhoggFetchAllTags']);
diff --git a/includes/Actions/HighLevel/HighLevelController.php b/includes/Actions/HighLevel/HighLevelController.php
index 492fcf3df..76a6aceaf 100644
--- a/includes/Actions/HighLevel/HighLevelController.php
+++ b/includes/Actions/HighLevel/HighLevelController.php
@@ -4,9 +4,9 @@
* HighLevel Integration
*/
-namespace BitCode\FI\Actions\HighLevel;
+namespace BitApps\Integrations\Actions\HighLevel;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -318,10 +318,12 @@ public function execute($integrationData, $fieldValues)
$selectedTask = self::getStringParam($integrationDetails, 'selectedTask');
if (empty($apiKey) || empty($fieldMap)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', \sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'HighLevel'));
}
if ($version === 'v2' && $locationId === '') {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', \sprintf(__('module, location_id is required for %s v2 api', 'bit-integrations'), 'HighLevel'));
}
diff --git a/includes/Actions/HighLevel/RecordApiHelper.php b/includes/Actions/HighLevel/RecordApiHelper.php
index 94ade9f5d..3c59b5de9 100644
--- a/includes/Actions/HighLevel/RecordApiHelper.php
+++ b/includes/Actions/HighLevel/RecordApiHelper.php
@@ -4,12 +4,11 @@
* HighLevel Record Api
*/
-namespace BitCode\FI\Actions\HighLevel;
+namespace BitApps\Integrations\Actions\HighLevel;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
@@ -46,6 +45,7 @@ public function __construct($apiKey, $integId, $version = 'v1', $locationId = ''
$this->v2DefaultResponse = [
'success' => false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro'),
'code' => 400
];
@@ -350,12 +350,10 @@ private static function formatContactData($finalData, $selectedOptions, $actions
}
if ((isset($selectedOptions['selectedTags']) && !empty($selectedOptions['selectedTags'])) || !empty($actions)) {
- if (Helper::proActionFeatExists('HighLevel', 'contactUtilities')) {
- $filterResponse = apply_filters('btcbi_high_level_contact_utilities', $module, $selectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_high_level_contact_utilities', $module, $selectedOptions, $actions);
- if ($filterResponse !== $module && !empty($filterResponse)) {
- $apiRequestData = array_merge($apiRequestData, $filterResponse);
- }
+ if ($filterResponse !== $module && !empty($filterResponse)) {
+ $apiRequestData = array_merge($apiRequestData, $filterResponse);
}
}
@@ -376,12 +374,10 @@ private static function formatOpportunityData($finalData, $selectedOptions, $act
$apiRequestData['companyName'] = !empty($finalData['companyName']) ? $finalData['companyName'] : '';
if (!empty($selectedOptions['selectedTags'])) {
- if (Helper::proActionFeatExists('HighLevel', 'opportunityUtilities')) {
- $filterResponse = apply_filters('btcbi_high_level_opportunity_utilities', $module, $selectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_high_level_opportunity_utilities', $module, $selectedOptions, $actions);
- if ($filterResponse !== $module && !empty($filterResponse)) {
- $apiRequestData = array_merge($apiRequestData, $filterResponse);
- }
+ if ($filterResponse !== $module && !empty($filterResponse)) {
+ $apiRequestData = array_merge($apiRequestData, $filterResponse);
}
}
diff --git a/includes/Actions/HighLevel/Routes.php b/includes/Actions/HighLevel/Routes.php
index b17aa2d3f..f0a95b402 100644
--- a/includes/Actions/HighLevel/Routes.php
+++ b/includes/Actions/HighLevel/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\HighLevel\HighLevelController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\HighLevel\HighLevelController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('highLevel_authorization', [HighLevelController::class, 'highLevelAuthorization']);
Route::post('get_highLevel_contact_custom_fields', [HighLevelController::class, 'getCustomFields']);
diff --git a/includes/Actions/Hubspot/HubspotController.php b/includes/Actions/Hubspot/HubspotController.php
index 0830bb895..322d7d810 100644
--- a/includes/Actions/Hubspot/HubspotController.php
+++ b/includes/Actions/Hubspot/HubspotController.php
@@ -1,9 +1,9 @@
$data];
- if ($update && Helper::proActionFeatExists('Hubspot', 'updateEntity')) {
+ if ($update) {
$id = $this->existsEntity('tickets', 'subject', $data['subject']);
return empty($id)
@@ -177,7 +176,7 @@ private function insertTicket($finalData, &$typeName)
private function handleDeal($finalData, &$typeName, $update = false)
{
- if ($update && Helper::proActionFeatExists('Hubspot', 'updateEntity')) {
+ if ($update) {
$id = $this->existsEntity('deals', 'dealname', $finalData['dealname']);
return empty($id)
@@ -245,6 +244,7 @@ private function updateEntity($id, $finalData, $actionName, &$typeName)
$response = apply_filters('btcbi_hubspot_update_entity', $id, $finalData, $actionName, $this->defaultHeader);
if (\is_string($response) && $response == $id) {
+ // translators: %s: Plugin name
return (object) ['errors' => wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Bit Integrations Pro')];
}
diff --git a/includes/Actions/Hubspot/Routes.php b/includes/Actions/Hubspot/Routes.php
index 90d83f5e0..d3be0f01c 100644
--- a/includes/Actions/Hubspot/Routes.php
+++ b/includes/Actions/Hubspot/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Actions\Hubspot\HubspotController;
+use BitApps\Integrations\Actions\Hubspot\HubspotController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('hubSpot_authorization', [HubspotController::class, 'authorization']);
Route::post('getFields', [HubspotController::class, 'getFields']);
diff --git a/includes/Actions/Insightly/InsightlyController.php b/includes/Actions/Insightly/InsightlyController.php
index bc2ae8270..8b8aca2d9 100644
--- a/includes/Actions/Insightly/InsightlyController.php
+++ b/includes/Actions/Insightly/InsightlyController.php
@@ -4,9 +4,9 @@
* Insightly Integration
*/
-namespace BitCode\FI\Actions\Insightly;
+namespace BitApps\Integrations\Actions\Insightly;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -255,6 +255,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Insightly'));
}
diff --git a/includes/Actions/Insightly/RecordApiHelper.php b/includes/Actions/Insightly/RecordApiHelper.php
index 9d64021de..58d4c9f01 100644
--- a/includes/Actions/Insightly/RecordApiHelper.php
+++ b/includes/Actions/Insightly/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Insightly Record Api
*/
-namespace BitCode\FI\Actions\Insightly;
+namespace BitApps\Integrations\Actions\Insightly;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Insightly/Routes.php b/includes/Actions/Insightly/Routes.php
index aa81650e8..eebb96fcd 100644
--- a/includes/Actions/Insightly/Routes.php
+++ b/includes/Actions/Insightly/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Insightly\InsightlyController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Insightly\InsightlyController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('insightly_authentication', [InsightlyController::class, 'authentication']);
Route::post('insightly_fetch_all_organisations', [InsightlyController::class, 'getAllOrganisations']);
diff --git a/includes/Actions/Integrately/IntegratelyController.php b/includes/Actions/Integrately/IntegratelyController.php
index 50ef7edc9..ce3aae3ce 100644
--- a/includes/Actions/Integrately/IntegratelyController.php
+++ b/includes/Actions/Integrately/IntegratelyController.php
@@ -4,9 +4,9 @@
* Integrately Integration
*/
-namespace BitCode\FI\Actions\Integrately;
+namespace BitApps\Integrations\Actions\Integrately;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for IntegratelyHandler
diff --git a/includes/Actions/Integromat/IntegromatController.php b/includes/Actions/Integromat/IntegromatController.php
index d29aa900b..37a757b82 100644
--- a/includes/Actions/Integromat/IntegromatController.php
+++ b/includes/Actions/Integromat/IntegromatController.php
@@ -4,9 +4,9 @@
* Integromat Integration
*/
-namespace BitCode\FI\Actions\Integromat;
+namespace BitApps\Integrations\Actions\Integromat;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for IntegromatHandler
diff --git a/includes/Actions/JetEngine/JetEngineController.php b/includes/Actions/JetEngine/JetEngineController.php
index bd949d919..8b2c6458a 100644
--- a/includes/Actions/JetEngine/JetEngineController.php
+++ b/includes/Actions/JetEngine/JetEngineController.php
@@ -4,7 +4,7 @@
* JetEngine Integration
*/
-namespace BitCode\FI\Actions\JetEngine;
+namespace BitApps\Integrations\Actions\JetEngine;
use Jet_Engine\Modules\Custom_Content_Types\Module;
use Jet_Engine_CPT;
@@ -34,6 +34,7 @@ public function authentication()
public static function checkedJetEngineExists()
{
if (!is_plugin_active('jet-engine/jet-engine.php')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'JetEngine Plugin'), 400);
} else {
return true;
diff --git a/includes/Actions/JetEngine/RecordApiHelper.php b/includes/Actions/JetEngine/RecordApiHelper.php
index 6d992efdd..17f0fb0fa 100644
--- a/includes/Actions/JetEngine/RecordApiHelper.php
+++ b/includes/Actions/JetEngine/RecordApiHelper.php
@@ -4,11 +4,10 @@
* JetEngine Record Api
*/
-namespace BitCode\FI\Actions\JetEngine;
+namespace BitApps\Integrations\Actions\JetEngine;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use Jet_Engine\Modules\Custom_Content_Types\Module;
/**
@@ -31,12 +30,10 @@ public function createPostType($finalData, $createCPTSelectedOptions, $actions)
$finalData['slug'] = str_replace(' ', '-', strtolower($finalData['name']));
- if (Helper::proActionFeatExists('JetEngine', 'createPostTypeActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_post_type_actions', 'createPostType', $createCPTSelectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_post_type_actions', 'createPostType', $createCPTSelectedOptions, $actions);
- if ($filterResponse !== 'createPostType' && !empty($filterResponse)) {
- $finalData = array_merge($finalData, $filterResponse);
- }
+ if ($filterResponse !== 'createPostType' && !empty($filterResponse)) {
+ $finalData = array_merge($finalData, $filterResponse);
}
jet_engine()->cpt->data->set_request($finalData);
@@ -68,12 +65,10 @@ public function createContentType($finalData, $createCPTSelectedOptions, $action
$args['capability'] = $finalData['capability'];
}
- if (Helper::proActionFeatExists('JetEngine', 'createContentTypeActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_content_type_actions', 'createContentType', $createCPTSelectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_content_type_actions', 'createContentType', $createCPTSelectedOptions, $actions);
- if ($filterResponse !== 'createContentType' && !empty($filterResponse)) {
- $args = array_merge($args, $filterResponse);
- }
+ if ($filterResponse !== 'createContentType' && !empty($filterResponse)) {
+ $args = array_merge($args, $filterResponse);
}
$ctcData['args'] = $args;
@@ -99,12 +94,10 @@ public function createTaxonomy($finalData, $taxOptions, $actions)
$finalData['slug'] = str_replace(' ', '-', strtolower($finalData['name']));
$finalData['object_type'] = explode(',', $taxOptions['selectedTaxPostTypes']);
- if (Helper::proActionFeatExists('JetEngine', 'createTaxonomyActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_taxonomy_actions', 'createTaxonomy', $taxOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_taxonomy_actions', 'createTaxonomy', $taxOptions, $actions);
- if ($filterResponse !== 'createTaxonomy' && !empty($filterResponse)) {
- $finalData = array_merge($finalData, $filterResponse);
- }
+ if ($filterResponse !== 'createTaxonomy' && !empty($filterResponse)) {
+ $finalData = array_merge($finalData, $filterResponse);
}
jet_engine()->taxonomies->data->set_request($finalData);
@@ -120,8 +113,10 @@ public function createTaxonomy($finalData, $taxOptions, $actions)
public function createRelation($finalData, $relOptions, $actions)
{
- if (empty($relOptions) || empty($relOptions['parentObject'])
- || empty($relOptions['childObject']) || empty($relOptions['selectedRelationType'])) {
+ if (
+ empty($relOptions) || empty($relOptions['parentObject'])
+ || empty($relOptions['childObject']) || empty($relOptions['selectedRelationType'])
+ ) {
return ['success' => false, 'message' => __('Request parameters are empty!', 'bit-integrations'), 'code' => 400];
}
@@ -130,12 +125,10 @@ public function createRelation($finalData, $relOptions, $actions)
$args['type'] = $relOptions['selectedRelationType'];
$args['labels'] = $finalData;
- if (Helper::proActionFeatExists('JetEngine', 'createRelationActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_relation_actions', 'createRelation', $relOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_relation_actions', 'createRelation', $relOptions, $actions);
- if ($filterResponse !== 'createRelation' && !empty($filterResponse)) {
- $args = array_merge($args, $filterResponse);
- }
+ if ($filterResponse !== 'createRelation' && !empty($filterResponse)) {
+ $args = array_merge($args, $filterResponse);
}
jet_engine()->relations->data->set_request($args);
@@ -171,12 +164,10 @@ public function updatePostType($finalData, $createCPTSelectedOptions, $actions)
$finalData['slug'] = str_replace(' ', '-', strtolower($finalData['name']));
}
- if (Helper::proActionFeatExists('JetEngine', 'createPostTypeActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_post_type_actions', 'updatePostType', $createCPTSelectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_post_type_actions', 'updatePostType', $createCPTSelectedOptions, $actions);
- if ($filterResponse !== 'updatePostType' && !empty($filterResponse)) {
- $finalData = array_merge($finalData, $filterResponse);
- }
+ if ($filterResponse !== 'updatePostType' && !empty($filterResponse)) {
+ $finalData = array_merge($finalData, $filterResponse);
}
if (empty($finalData['name'])) {
@@ -198,6 +189,7 @@ public function updatePostType($finalData, $createCPTSelectedOptions, $actions)
if ($updated && !empty($initialSlug) && !empty($finalData['slug']) && $initialSlug !== $finalData['slug']) {
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct update needed for JetEngine post type slug change
$wpdb->update(
$wpdb->posts,
[
@@ -244,12 +236,10 @@ public function updateContentType($finalData, $createCPTSelectedOptions, $action
$args['capability'] = $finalData['capability'];
}
- if (Helper::proActionFeatExists('JetEngine', 'createContentTypeActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_content_type_actions', 'updateContentType', $createCPTSelectedOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_content_type_actions', 'updateContentType', $createCPTSelectedOptions, $actions);
- if ($filterResponse !== 'updateContentType' && !empty($filterResponse)) {
- $args = array_merge($args, $filterResponse);
- }
+ if ($filterResponse !== 'updateContentType' && !empty($filterResponse)) {
+ $args = array_merge($args, $filterResponse);
}
$ctcData['args'] = $args;
@@ -291,12 +281,10 @@ public function updateTaxonomy($finalData, $taxOptions, $actions)
$finalData['slug'] = $initialSlug;
}
- if (Helper::proActionFeatExists('JetEngine', 'createTaxonomyActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_taxonomy_actions', 'updateTaxonomy', $taxOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_taxonomy_actions', 'updateTaxonomy', $taxOptions, $actions);
- if ($filterResponse !== 'updateTaxonomy' && !empty($filterResponse)) {
- $finalData = array_merge($finalData, $filterResponse);
- }
+ if ($filterResponse !== 'updateTaxonomy' && !empty($filterResponse)) {
+ $finalData = array_merge($finalData, $filterResponse);
}
jet_engine()->taxonomies->data->set_request($finalData);
@@ -312,8 +300,10 @@ public function updateTaxonomy($finalData, $taxOptions, $actions)
public function updateRelation($finalData, $relOptions, $actions)
{
- if (empty($relOptions) || empty($relOptions['parentObject'])
- || empty($relOptions['childObject']) || empty($relOptions['selectedRelationType'])) {
+ if (
+ empty($relOptions) || empty($relOptions['parentObject'])
+ || empty($relOptions['childObject']) || empty($relOptions['selectedRelationType'])
+ ) {
return ['success' => false, 'message' => 'Request parameters are empty!', 'code' => 400];
}
@@ -337,12 +327,10 @@ public function updateRelation($finalData, $relOptions, $actions)
$args['labels'] = $finalData;
- if (Helper::proActionFeatExists('JetEngine', 'createRelationActions')) {
- $filterResponse = apply_filters('btcbi_jet_engine_create_relation_actions', 'updateRelation', $relOptions, $actions);
+ $filterResponse = apply_filters('btcbi_jet_engine_create_relation_actions', 'updateRelation', $relOptions, $actions);
- if ($filterResponse !== 'updateRelation' && !empty($filterResponse)) {
- $args = array_merge($args, $filterResponse);
- }
+ if ($filterResponse !== 'updateRelation' && !empty($filterResponse)) {
+ $args = array_merge($args, $filterResponse);
}
jet_engine()->relations->data->set_request($args);
diff --git a/includes/Actions/JetEngine/Routes.php b/includes/Actions/JetEngine/Routes.php
index 449235cfc..4025eecaa 100644
--- a/includes/Actions/JetEngine/Routes.php
+++ b/includes/Actions/JetEngine/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\JetEngine\JetEngineController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\JetEngine\JetEngineController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('jetEngine_authentication', [JetEngineController::class, 'authentication']);
Route::post('jetEngine_menu_positions', [JetEngineController::class, 'getMenuPosition']);
diff --git a/includes/Actions/Keap/KeapController.php b/includes/Actions/Keap/KeapController.php
index d3ca2a6bd..4ad8876a4 100644
--- a/includes/Actions/Keap/KeapController.php
+++ b/includes/Actions/Keap/KeapController.php
@@ -4,10 +4,10 @@
* Keap Integration
*/
-namespace BitCode\FI\Actions\Keap;
+namespace BitApps\Integrations\Actions\Keap;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
/**
@@ -214,6 +214,7 @@ public function execute($integrationData, $fieldValues)
empty($tokenDetails)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Keap'));
}
diff --git a/includes/Actions/Keap/RecordApiHelper.php b/includes/Actions/Keap/RecordApiHelper.php
index b7726f0fa..4e185bcdb 100644
--- a/includes/Actions/Keap/RecordApiHelper.php
+++ b/includes/Actions/Keap/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Keap Record Api
*/
-namespace BitCode\FI\Actions\Keap;
+namespace BitApps\Integrations\Actions\Keap;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,upsert
diff --git a/includes/Actions/Keap/Routes.php b/includes/Actions/Keap/Routes.php
index edac924ef..ed246acf8 100644
--- a/includes/Actions/Keap/Routes.php
+++ b/includes/Actions/Keap/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Keap\KeapController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Keap\KeapController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('keap_generate_token', [KeapController::class, 'generateTokens']);
Route::post('keap_fetch_all_tags', [KeapController::class, 'refreshTagListAjaxHelper']);
diff --git a/includes/Actions/KirimEmail/KirimEmailController.php b/includes/Actions/KirimEmail/KirimEmailController.php
index 67ed88341..9a8463bfa 100644
--- a/includes/Actions/KirimEmail/KirimEmailController.php
+++ b/includes/Actions/KirimEmail/KirimEmailController.php
@@ -4,9 +4,9 @@
* KirimEmail Integration
*/
-namespace BitCode\FI\Actions\KirimEmail;
+namespace BitApps\Integrations\Actions\KirimEmail;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -109,6 +109,7 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Freshdesk'));
}
$recordApiHelper = new RecordApiHelper($integrationId);
diff --git a/includes/Actions/KirimEmail/RecordApiHelper.php b/includes/Actions/KirimEmail/RecordApiHelper.php
index e19622825..3363e5cda 100644
--- a/includes/Actions/KirimEmail/RecordApiHelper.php
+++ b/includes/Actions/KirimEmail/RecordApiHelper.php
@@ -1,10 +1,10 @@
[(object) ['detail' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')]]];
}
diff --git a/includes/Actions/Klaviyo/Routes.php b/includes/Actions/Klaviyo/Routes.php
index ee71f8ce4..33c812ece 100644
--- a/includes/Actions/Klaviyo/Routes.php
+++ b/includes/Actions/Klaviyo/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\Klaviyo\KlaviyoController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Klaviyo\KlaviyoController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('klaviyo_handle_authorize', [klaviyoController::class, 'handleAuthorize']);
diff --git a/includes/Actions/KonnectzIT/KonnectzITController.php b/includes/Actions/KonnectzIT/KonnectzITController.php
index 7ceb395b1..e3afe759c 100644
--- a/includes/Actions/KonnectzIT/KonnectzITController.php
+++ b/includes/Actions/KonnectzIT/KonnectzITController.php
@@ -4,9 +4,9 @@
* KonnectzIT Integration
*/
-namespace BitCode\FI\Actions\KonnectzIT;
+namespace BitApps\Integrations\Actions\KonnectzIT;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for KonnectzITHandler
diff --git a/includes/Actions/LMFWC/LMFWCController.php b/includes/Actions/LMFWC/LMFWCController.php
index 6f68977ad..34eb266a1 100644
--- a/includes/Actions/LMFWC/LMFWCController.php
+++ b/includes/Actions/LMFWC/LMFWCController.php
@@ -4,9 +4,9 @@
* LMFWC Integration
*/
-namespace BitCode\FI\Actions\LMFWC;
+namespace BitApps\Integrations\Actions\LMFWC;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -127,6 +127,7 @@ public function execute($integrationData, $fieldValues)
$module = $integrationDetails->module;
if (empty($fieldMap) || empty($apiSecret) || 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'), 'License Manager For WooCommerce'));
}
diff --git a/includes/Actions/LMFWC/RecordApiHelper.php b/includes/Actions/LMFWC/RecordApiHelper.php
index 75a90c539..66878c2db 100644
--- a/includes/Actions/LMFWC/RecordApiHelper.php
+++ b/includes/Actions/LMFWC/RecordApiHelper.php
@@ -4,11 +4,11 @@
* LMFWC Record Api
*/
-namespace BitCode\FI\Actions\LMFWC;
+namespace BitApps\Integrations\Actions\LMFWC;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -92,6 +92,7 @@ public function updateLicense($finalData)
$response = apply_filters('btcbi_lmfwc_update_licence', false, $finalData, $this->apiUrl, $this->integrationDetails, $this->defaultHeader);
if (!$response) {
+ // translators: %s: Plugin name
return (object) ['message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
@@ -109,6 +110,7 @@ public function updateGenerator($finalData)
$response = apply_filters('btcbi_lmfwc_update_generator', false, $this->apiUrl, $finalData, $this->defaultHeader, $this->integrationDetails->selectedGenerator);
if (!$response) {
+ // translators: %s: Plugin name
return (object) ['message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
@@ -135,6 +137,7 @@ public function createGenerator($finalData)
$response = apply_filters('btcbi_lmfwc_create_generator', false, $this->apiUrl, $finalData, $this->defaultHeader);
if (!$response) {
+ // translators: %s: Plugin name
return (object) ['message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
@@ -175,6 +178,7 @@ public function licenseRelatedAction($finalData, $action)
}
if (!$response) {
+ // translators: %s: Plugin name
return (object) ['message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
diff --git a/includes/Actions/LMFWC/Routes.php b/includes/Actions/LMFWC/Routes.php
index 2fc469531..d109e350c 100644
--- a/includes/Actions/LMFWC/Routes.php
+++ b/includes/Actions/LMFWC/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Actions\LMFWC\LMFWCController;
+use BitApps\Integrations\Actions\LMFWC\LMFWCController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('lmfwc_authentication', [LMFWCController::class, 'authentication']);
Route::post('lmfwc_fetch_all_customer', [LMFWCController::class, 'getAllCustomer']);
diff --git a/includes/Actions/LearnDash/LearnDashController.php b/includes/Actions/LearnDash/LearnDashController.php
index 64bc200d8..205ab5a25 100644
--- a/includes/Actions/LearnDash/LearnDashController.php
+++ b/includes/Actions/LearnDash/LearnDashController.php
@@ -4,7 +4,7 @@
* LearnDesh Integration
*/
-namespace BitCode\FI\Actions\LearnDash;
+namespace BitApps\Integrations\Actions\LearnDash;
use WP_Error;
@@ -40,6 +40,8 @@ public static function authorizeRestrictContent()
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'LearnDash'));
}
@@ -192,6 +194,9 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction)
) {
+ // translators: %s: Integration name
+
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'LearnDash'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/LearnDash/RecordApiHelper.php b/includes/Actions/LearnDash/RecordApiHelper.php
index 5c4e46eec..97ba37132 100644
--- a/includes/Actions/LearnDash/RecordApiHelper.php
+++ b/includes/Actions/LearnDash/RecordApiHelper.php
@@ -4,12 +4,12 @@
* trello Record Api
*/
-namespace BitCode\FI\Actions\LearnDash;
+namespace BitApps\Integrations\Actions\LearnDash;
+use BitApps\Integrations\Actions\Mail\MailController;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use LDLMS_DB;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Actions\Mail\MailController;
/**
* Provide functionality for Record insert, upsert
@@ -66,7 +66,8 @@ public static function createGroup(
$group_title = $finalData['title'];
$ld_group_args = [
- 'post_type' => 'groups',
+ 'post_type' => 'groups',
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using external plugin hook for compatibility
'post_status' => apply_filters('uo_create_new_group_status', 'publish'),
'post_title' => $group_title,
'post_content' => '',
@@ -455,14 +456,16 @@ public static function delete_quiz_progress($user_id, $quiz_id = null)
unset($quizz_progress[$k]);
if (!empty($statistic_ref_id)) {
if (class_exists('\LDLMS_DB')) {
- $pro_quiz_stat_table = LDLMS_DB::get_table_name('quiz_statistic');
- $pro_quiz_stat_ref_table = LDLMS_DB::get_table_name('quiz_statistic_ref');
+ $pro_quiz_stat_table = esc_sql(LDLMS_DB::get_table_name('quiz_statistic'));
+ $pro_quiz_stat_ref_table = esc_sql(LDLMS_DB::get_table_name('quiz_statistic_ref'));
} else {
- $pro_quiz_stat_table = $wpdb->prefix . 'wp_pro_quiz_statistic';
- $pro_quiz_stat_ref_table = $wpdb->prefix . 'wp_pro_quiz_statistic_ref';
+ $pro_quiz_stat_table = esc_sql($wpdb->prefix . 'wp_pro_quiz_statistic');
+ $pro_quiz_stat_ref_table = esc_sql($wpdb->prefix . 'wp_pro_quiz_statistic_ref');
}
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot be parameterized
$wpdb->query($wpdb->prepare("DELETE FROM {$pro_quiz_stat_table} WHERE statistic_ref_id = %d", $statistic_ref_id));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot be parameterized
$wpdb->query($wpdb->prepare("DELETE FROM {$pro_quiz_stat_ref_table} WHERE statistic_ref_id = %d", $statistic_ref_id));
}
}
@@ -630,11 +633,14 @@ public static function delete_user_activity($user_id, $course_id)
delete_user_meta($user_id, 'course_completed_' . $course_id);
delete_user_meta($user_id, 'learndash_course_expired_' . $course_id);
- $activity_ids = $wpdb->get_results($wpdb->prepare("SELECT activity_id FROM ' . {$wpdb->prefix} . 'learndash_user_activity WHERE course_id = %d AND user_id = %d", $course_id, $user_id));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for LearnDash activity
+ $activity_ids = $wpdb->get_results($wpdb->prepare("SELECT activity_id FROM {$wpdb->prefix}learndash_user_activity WHERE course_id = %d AND user_id = %d", $course_id, $user_id));
if ($activity_ids) {
foreach ($activity_ids as $activity_id) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}learndash_user_activity_meta WHERE activity_id = %d", $activity_id->activity_id));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}learndash_user_activity WHERE activity_id = %d", $activity_id->activity_id));
}
}
@@ -669,7 +675,8 @@ public static function reset_quiz_progress($user_id, $course_id)
$assignments = get_posts([
'post_type' => 'sfwd-assignment',
'posts_per_page' => 999,
- 'meta_query' => [
+ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required to match LearnDash assignment meta to course/lesson/user.
+ 'meta_query' => [
'relation' => 'AND',
[
'key' => 'lesson_id',
@@ -714,7 +721,8 @@ public static function get_topics_quiz($user_id, $lesson_id, $course_id)
$assignments = get_posts([
'post_type' => 'sfwd-assignment',
'posts_per_page' => 999,
- 'meta_query' => [
+ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required to match LearnDash topic assignment meta to course/topic/user.
+ 'meta_query' => [
'relation' => 'AND',
[
'key' => 'lesson_id',
@@ -749,7 +757,9 @@ public static function delete_assignments()
$assignments = self::getAssignmentList();
if ($assignments) {
foreach ($assignments as $assignment) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct queries needed for LearnDash assignments
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE ID = %d", $assignment));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE post_id = %d", $assignment));
}
}
diff --git a/includes/Actions/LearnDash/Routes.php b/includes/Actions/LearnDash/Routes.php
index 987b6be7f..6bdc7fc26 100644
--- a/includes/Actions/LearnDash/Routes.php
+++ b/includes/Actions/LearnDash/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\LearnDash\LearnDashController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\LearnDash\LearnDashController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('learnDash_authorize', [LearnDashController::class, 'authorizeRestrictContent']);
Route::post('learDash_fetch_all_course', [LearnDashController::class, 'getCourses']);
diff --git a/includes/Actions/Lemlist/LemlistController.php b/includes/Actions/Lemlist/LemlistController.php
index 347674b49..107c7ef59 100644
--- a/includes/Actions/Lemlist/LemlistController.php
+++ b/includes/Actions/Lemlist/LemlistController.php
@@ -1,8 +1,8 @@
api_key;
if (empty($fieldMap) || empty($apiKey) || empty($selectedCampaign)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Lemlist'));
}
diff --git a/includes/Actions/Lemlist/RecordApiHelper.php b/includes/Actions/Lemlist/RecordApiHelper.php
index 024b6a9f8..023c2ad02 100644
--- a/includes/Actions/Lemlist/RecordApiHelper.php
+++ b/includes/Actions/Lemlist/RecordApiHelper.php
@@ -1,9 +1,9 @@
posts);
+
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
$allCourse = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT ID, post_title FROM %1s WHERE %2s = 'publish' AND %3s = 'course' ORDER BY post_title",
- $wpdb->posts,
- $wpdb->posts . '.post_status',
- $wpdb->posts . '.post_type'
- )
+ 'SELECT ID, post_title FROM ' . $posts_table . ' WHERE ' . $posts_table . ".post_status = 'publish' AND " . $posts_table . ".post_type = 'course' ORDER BY post_title"
);
+ // phpcs:enable
+
+ wp_cache_set($cache_key, $allCourse, $cache_group, 10 * MINUTE_IN_SECONDS);
return $allCourse;
}
@@ -87,15 +96,23 @@ public static function getAllLifterLmsCourse()
public static function getAllLifterLmsMembership()
{
global $wpdb;
+ $cache_key = 'btcbi_lifterlms_memberships';
+ $cache_group = 'btcbi';
+ $allMembership = wp_cache_get($cache_key, $cache_group);
+ if (false !== $allMembership) {
+ return $allMembership;
+ }
+
+ $posts_table = esc_sql($wpdb->posts);
+
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
$allMembership = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT ID, post_title FROM %1s WHERE %2s = 'publish' AND %3s = 'llms_membership' ORDER BY post_title",
- $wpdb->posts,
- $wpdb->posts . '.post_status',
- $wpdb->posts . '.post_type'
- )
+ 'SELECT ID, post_title FROM ' . $posts_table . ' WHERE ' . $posts_table . ".post_status = 'publish' AND " . $posts_table . ".post_type = 'llms_membership' ORDER BY post_title"
);
+ // phpcs:enable
+
+ wp_cache_set($cache_key, $allMembership, $cache_group, 10 * MINUTE_IN_SECONDS);
return $allMembership;
}
@@ -109,6 +126,7 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction)
) {
+ // translators: %s: Integration name
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('Some important info are missing those are required for %s', 'bit-integrations'), 'LifterLms'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/LifterLms/RecordApiHelper.php b/includes/Actions/LifterLms/RecordApiHelper.php
index dff4dfd13..ff54b9327 100644
--- a/includes/Actions/LifterLms/RecordApiHelper.php
+++ b/includes/Actions/LifterLms/RecordApiHelper.php
@@ -1,8 +1,8 @@
\wp_sprintf(\__('%s plugin is not installed or activated', 'bit-integrations'), 'Bit Integrations Pro')];
}
diff --git a/includes/Actions/Line/Routes.php b/includes/Actions/Line/Routes.php
index 532576c1b..b4beb193d 100644
--- a/includes/Actions/Line/Routes.php
+++ b/includes/Actions/Line/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\Line\LineController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Line\LineController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('line_authorization', [LineController::class, 'authorization']);
diff --git a/includes/Actions/LionDesk/LionDeskController.php b/includes/Actions/LionDesk/LionDeskController.php
index 792168c15..3a43eddad 100644
--- a/includes/Actions/LionDesk/LionDeskController.php
+++ b/includes/Actions/LionDesk/LionDeskController.php
@@ -4,9 +4,9 @@
* LionDesk Integration
*/
-namespace BitCode\FI\Actions\LionDesk;
+namespace BitApps\Integrations\Actions\LionDesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -134,6 +134,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($tokenDetails) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'LionDesk'));
}
diff --git a/includes/Actions/LionDesk/RecordApiHelper.php b/includes/Actions/LionDesk/RecordApiHelper.php
index 327d5d4ec..4a22578e4 100644
--- a/includes/Actions/LionDesk/RecordApiHelper.php
+++ b/includes/Actions/LionDesk/RecordApiHelper.php
@@ -4,10 +4,10 @@
* LionDesk Record Api
*/
-namespace BitCode\FI\Actions\LionDesk;
+namespace BitApps\Integrations\Actions\LionDesk;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/LionDesk/Routes.php b/includes/Actions/LionDesk/Routes.php
index a5646b73c..19c5bf677 100644
--- a/includes/Actions/LionDesk/Routes.php
+++ b/includes/Actions/LionDesk/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\LionDesk\LionDeskController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\LionDesk\LionDeskController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('lionDesk_generate_token', [LionDeskController::class, 'generateTokens']);
Route::post('lionDesk_fetch_custom_fields', [LionDeskController::class, 'getCustomFields']);
diff --git a/includes/Actions/Livestorm/LivestormController.php b/includes/Actions/Livestorm/LivestormController.php
index d79f113be..c65f4d389 100644
--- a/includes/Actions/Livestorm/LivestormController.php
+++ b/includes/Actions/Livestorm/LivestormController.php
@@ -4,9 +4,9 @@
* Livestorm Integration
*/
-namespace BitCode\FI\Actions\Livestorm;
+namespace BitApps\Integrations\Actions\Livestorm;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -108,6 +108,7 @@ public function execute($integrationData, $fieldValues)
$fieldMap = $integrationDetails->field_map;
if (empty($fieldMap) || empty($apiKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Livestorm'));
}
diff --git a/includes/Actions/Livestorm/RecordApiHelper.php b/includes/Actions/Livestorm/RecordApiHelper.php
index 133c7696b..f2e74f8e3 100644
--- a/includes/Actions/Livestorm/RecordApiHelper.php
+++ b/includes/Actions/Livestorm/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Livestorm Record Api
*/
-namespace BitCode\FI\Actions\Livestorm;
+namespace BitApps\Integrations\Actions\Livestorm;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -44,9 +44,13 @@ public function registration($finalData)
$this->typeName = 'Add People to Event Session';
if (!isset($this->integrationDetails->selectedEvent) || empty($this->integrationDetails->selectedEvent)) {
+ // translators: %s: Field name
+ // translators: %s: Placeholder value
return ['success' => false, 'message' => wp_sprintf(__('Required field %s is empty', 'bit-integrations'), __('Event', 'bit-integrations')), 'code' => 400];
}
if (!isset($this->integrationDetails->selectedSession) || empty($this->integrationDetails->selectedSession)) {
+ // translators: %s: Field name
+ // translators: %s: Placeholder value
return ['success' => false, 'message' => wp_sprintf(__('Required field %s is empty', 'bit-integrations'), __('Session', 'bit-integrations')), 'code' => 400];
}
diff --git a/includes/Actions/Livestorm/Routes.php b/includes/Actions/Livestorm/Routes.php
index 890046303..6e1e90a4e 100644
--- a/includes/Actions/Livestorm/Routes.php
+++ b/includes/Actions/Livestorm/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Livestorm\LivestormController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Livestorm\LivestormController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('livestorm_authentication', [LivestormController::class, 'authentication']);
Route::post('livestorm_fetch_all_events', [LivestormController::class, 'getAllEvents']);
diff --git a/includes/Actions/Mail/MailController.php b/includes/Actions/Mail/MailController.php
index 3917c39e6..8d87dc3f8 100644
--- a/includes/Actions/Mail/MailController.php
+++ b/includes/Actions/Mail/MailController.php
@@ -1,9 +1,13 @@
id, 'Send Mail', 'failed', wp_sprintf(__('%s failed sends mail to %s', 'bit-integrations'), $flow->name, implode(', ', $mailTo)));
+ // translators: %s: Placeholder value
+ LogHandler::save($integrationData->id, 'Send Mail', 'failed', wp_sprintf(__('%1$s failed sends mail to %2$s', 'bit-integrations'), $flow->name, implode(', ', $mailTo)));
} else {
- LogHandler::save($integrationData->id, 'Send Mail', 'success', wp_sprintf(__('%s successfully sends mail to %s', 'bit-integrations'), $flow->name, implode(', ', $mailTo)));
+ // translators: %s: Placeholder value
+ LogHandler::save($integrationData->id, 'Send Mail', 'success', wp_sprintf(__('%1$s successfully sends mail to %2$s', 'bit-integrations'), $flow->name, implode(', ', $mailTo)));
}
remove_filter('wp_mail_content_type', [self::class, 'filterMailContentType']);
diff --git a/includes/Actions/MailBluster/MailBlusterController.php b/includes/Actions/MailBluster/MailBlusterController.php
index df691038d..a17d13e91 100644
--- a/includes/Actions/MailBluster/MailBlusterController.php
+++ b/includes/Actions/MailBluster/MailBlusterController.php
@@ -4,9 +4,9 @@
* MailBluster Integration
*/
-namespace BitCode\FI\Actions\MailBluster;
+namespace BitApps\Integrations\Actions\MailBluster;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -67,6 +67,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($auth_token) || empty($subscribed)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'GetResponse'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/MailBluster/RecordApiHelper.php b/includes/Actions/MailBluster/RecordApiHelper.php
index c7ee22120..283b6e8a0 100644
--- a/includes/Actions/MailBluster/RecordApiHelper.php
+++ b/includes/Actions/MailBluster/RecordApiHelper.php
@@ -4,11 +4,11 @@
* MailBluster Record Api
*/
-namespace BitCode\FI\Actions\MailBluster;
+namespace BitApps\Integrations\Actions\MailBluster;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/MailBluster/Routes.php b/includes/Actions/MailBluster/Routes.php
index 480862d3e..9a5b84170 100644
--- a/includes/Actions/MailBluster/Routes.php
+++ b/includes/Actions/MailBluster/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\MailBluster\MailBlusterController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailBluster\MailBlusterController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailBluster_authentication', [MailBlusterController::class, 'authentication']);
diff --git a/includes/Actions/MailChimp/MailChimpController.php b/includes/Actions/MailChimp/MailChimpController.php
index b5dac264a..467d0a4fc 100644
--- a/includes/Actions/MailChimp/MailChimpController.php
+++ b/includes/Actions/MailChimp/MailChimpController.php
@@ -4,11 +4,11 @@
* MailChimp Integration
*/
-namespace BitCode\FI\Actions\MailChimp;
+namespace BitApps\Integrations\Actions\MailChimp;
+use BitApps\Integrations\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for MailChimp integration
@@ -287,6 +287,7 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
|| empty($defaultDataConf)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Mail Chimp'));
}
$recordApiHelper = new RecordApiHelper($tokenDetails, $this->_integrationID, $integrationDetails);
diff --git a/includes/Actions/MailChimp/RecordApiHelper.php b/includes/Actions/MailChimp/RecordApiHelper.php
index cdfb90a28..aecfbd074 100644
--- a/includes/Actions/MailChimp/RecordApiHelper.php
+++ b/includes/Actions/MailChimp/RecordApiHelper.php
@@ -4,11 +4,10 @@
* MailChimp Record Api
*/
-namespace BitCode\FI\Actions\MailChimp;
+namespace BitApps\Integrations\Actions\MailChimp;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,upsert
@@ -41,22 +40,20 @@ public function insertRecord($listId, $data)
public function addRemoveTag($module, $listId, $data)
{
+ // translators: %s: Plugin name
$msg = wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro');
- if (Helper::proActionFeatExists('MailChimp', 'addRemoveTag')) {
- $subscriber_hash = md5(strtolower(trim($data['email_address'])));
- $endpoint = $this->_apiEndPoint() . "/lists/{$listId}/members/{$subscriber_hash}/tags";
+ $subscriber_hash = md5(strtolower(trim($data['email_address'])));
+ $endpoint = $this->_apiEndPoint() . "/lists/{$listId}/members/{$subscriber_hash}/tags";
- $response = apply_filters('btcbi_mailchimp_add_remove_tag', $module, $data, $endpoint, $this->_defaultHeader);
+ $response = apply_filters('btcbi_mailchimp_add_remove_tag', $module, $data, $endpoint, $this->_defaultHeader);
- if (\is_string($response) && $response == $module) {
- return (object) ['status' => 400, 'message' => $msg];
- }
+ if (\is_string($response) && $response == $module) {
+ LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => $module], 'error', $msg);
- return $response;
+ return (object) ['status' => 400, 'message' => $msg];
}
- LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => $module], 'error', $msg);
- return (object) ['status' => 400, 'message' => $msg];
+ return $response;
}
public function updateRecord($listId, $contactId, $data)
diff --git a/includes/Actions/MailChimp/Routes.php b/includes/Actions/MailChimp/Routes.php
index 742dd5064..de4f997da 100644
--- a/includes/Actions/MailChimp/Routes.php
+++ b/includes/Actions/MailChimp/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MailChimp\MailChimpController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailChimp\MailChimpController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mChimp_generate_token', [MailChimpController::class, 'generateTokens']);
Route::post('mChimp_refresh_audience', [MailChimpController::class, 'refreshAudience']);
diff --git a/includes/Actions/MailMint/MailMintController.php b/includes/Actions/MailMint/MailMintController.php
index 841d11bda..3b0754f92 100644
--- a/includes/Actions/MailMint/MailMintController.php
+++ b/includes/Actions/MailMint/MailMintController.php
@@ -1,11 +1,11 @@
prefix . CustomFieldSchema::$table_name;
+ $fields_table = esc_sql($wpdb->prefix . CustomFieldSchema::$table_name);
$primaryFields = get_option('mint_contact_primary_fields', Constants::$primary_contact_fields);
- $customFields = $wpdb->get_results($wpdb->prepare('SELECT title, slug, type, group_id FROM %s ', $fields_table), ARRAY_A);
+ $cache_key = 'btcbi_mailmint_custom_fields';
+ $cache_group = 'btcbi';
+ $customFields = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $customFields) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Querying MailMint custom field table directly; static table name from plugin schema.
+ $customFields = $wpdb->get_results('SELECT title, slug, type, group_id FROM `' . $fields_table . '`', ARRAY_A);
+ wp_cache_set($cache_key, $customFields, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
if (!empty($customFields)) {
$primaryFields['other'] = array_merge($primaryFields['other'], $customFields);
@@ -48,6 +58,8 @@ public static function allCustomFields()
}
wp_send_json_success($allFields, 200);
}
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Mail Mint'));
}
@@ -97,6 +109,9 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction)
) {
+ // translators: %s: Integration name
+
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Mail Mint'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/MailMint/RecordApiHelper.php b/includes/Actions/MailMint/RecordApiHelper.php
index d7d5a8d44..3771c01ad 100644
--- a/includes/Actions/MailMint/RecordApiHelper.php
+++ b/includes/Actions/MailMint/RecordApiHelper.php
@@ -1,9 +1,9 @@
createContact($selectedList, $selectedTags, $selectedSubStatus, $finalData);
if ($apiResponse && \gettype($apiResponse) === 'integer') {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, ['type' => 'create', 'type_name' => 'create contact'], 'success', wp_json_encode(wp_sprintf(__('Contact created successfully and id is %s', 'bit-integrations'), $apiResponse)));
} else {
LogHandler::save(self::$integrationID, ['type' => 'create', 'type_name' => 'create contact'], 'error', __('Failed to create contact', 'bit-integrations'));
diff --git a/includes/Actions/MailMint/Routes.php b/includes/Actions/MailMint/Routes.php
index cfe1ac514..ca2c9bdba 100644
--- a/includes/Actions/MailMint/Routes.php
+++ b/includes/Actions/MailMint/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MailMint\MailMintController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailMint\MailMintController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailmint_authorize', [MailMintController::class, 'authorizeMailMint']);
Route::post('fetch_all_mail_mint_list', [MailMintController::class, 'getAllList']);
diff --git a/includes/Actions/MailPoet/MailPoetController.php b/includes/Actions/MailPoet/MailPoetController.php
index e8c0129ae..634600cc2 100644
--- a/includes/Actions/MailPoet/MailPoetController.php
+++ b/includes/Actions/MailPoet/MailPoetController.php
@@ -4,7 +4,7 @@
* ZohoSheet Integration
*/
-namespace BitCode\FI\Actions\MailPoet;
+namespace BitApps\Integrations\Actions\MailPoet;
use WP_Error;
@@ -13,7 +13,7 @@
*/
class MailPoetController
{
- // BitCode\FI\Actions\MailPoet\MailPoetController
+ // BitApps\Integrations\Actions\MailPoet\MailPoetController
/**
* Validate if Mail Poet plugin exists or not. If not exits then terminate
@@ -96,6 +96,7 @@ public function execute($integrationData, $fieldValues)
$actions = $integrationDetails->actions;
if (empty($fieldMap)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Google sheet'));
}
diff --git a/includes/Actions/MailPoet/RecordApiHelper.php b/includes/Actions/MailPoet/RecordApiHelper.php
index 36d3867e4..dffa3eae6 100644
--- a/includes/Actions/MailPoet/RecordApiHelper.php
+++ b/includes/Actions/MailPoet/RecordApiHelper.php
@@ -4,10 +4,10 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\MailPoet;
+namespace BitApps\Integrations\Actions\MailPoet;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use Exception;
/**
@@ -43,6 +43,7 @@ public function insertRecord($subscriber, $lists, $actions)
$response = apply_filters('btcbi_mailpoet_update_subscriber', $existingSubscriber['id'], $subscriber);
if ($response === $existingSubscriber['id']) {
+ // translators: %s: Plugin name
$errorMessages = wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Bit Integrations Pro');
} elseif (!$response['success']) {
$errorMessages = $response('message');
diff --git a/includes/Actions/MailPoet/Routes.php b/includes/Actions/MailPoet/Routes.php
index e34a42038..63682515d 100644
--- a/includes/Actions/MailPoet/Routes.php
+++ b/includes/Actions/MailPoet/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MailPoet\MailPoetController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailPoet\MailPoetController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mail_poet_authorize', [MailPoetController::class, 'mailPoetAuthorize']);
Route::post('refresh_news_letter', [MailPoetController::class, 'refreshNeswLetter']);
diff --git a/includes/Actions/MailRelay/MailRelayController.php b/includes/Actions/MailRelay/MailRelayController.php
index e6f8d7440..62162a734 100644
--- a/includes/Actions/MailRelay/MailRelayController.php
+++ b/includes/Actions/MailRelay/MailRelayController.php
@@ -4,9 +4,9 @@
* MailRelay Integration
*/
-namespace BitCode\FI\Actions\MailRelay;
+namespace BitApps\Integrations\Actions\MailRelay;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -104,6 +104,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($auth_token) || empty($status)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'MailRelay'));
}
diff --git a/includes/Actions/MailRelay/RecordApiHelper.php b/includes/Actions/MailRelay/RecordApiHelper.php
index 8bc3d5b22..f000b8a46 100644
--- a/includes/Actions/MailRelay/RecordApiHelper.php
+++ b/includes/Actions/MailRelay/RecordApiHelper.php
@@ -4,12 +4,12 @@
* MailRelay Record Api
*/
-namespace BitCode\FI\Actions\MailRelay;
+namespace BitApps\Integrations\Actions\MailRelay;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/MailRelay/Routes.php b/includes/Actions/MailRelay/Routes.php
index 98fc68ef4..f3a04dd97 100644
--- a/includes/Actions/MailRelay/Routes.php
+++ b/includes/Actions/MailRelay/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MailRelay\MailRelayController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailRelay\MailRelayController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailRelay_authentication', [MailRelayController::class, 'authentication']);
Route::post('mailRelay_fetch_all_groups', [MailRelayController::class, 'getAllGroups']);
diff --git a/includes/Actions/MailerLite/MailerLiteController.php b/includes/Actions/MailerLite/MailerLiteController.php
index 8087070a0..5f1f815c3 100644
--- a/includes/Actions/MailerLite/MailerLiteController.php
+++ b/includes/Actions/MailerLite/MailerLiteController.php
@@ -4,9 +4,9 @@
* MailerLite Integration
*/
-namespace BitCode\FI\Actions\MailerLite;
+namespace BitApps\Integrations\Actions\MailerLite;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -203,6 +203,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($auth_token)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'MailerLite'));
}
$recordApiHelper = new RecordApiHelper($auth_token, $integrationDetails, $integId, $actions, $version);
diff --git a/includes/Actions/MailerLite/RecordApiHelper.php b/includes/Actions/MailerLite/RecordApiHelper.php
index 1933bf2d4..41edae983 100644
--- a/includes/Actions/MailerLite/RecordApiHelper.php
+++ b/includes/Actions/MailerLite/RecordApiHelper.php
@@ -4,11 +4,11 @@
* MailerLite Record Api
*/
-namespace BitCode\FI\Actions\MailerLite;
+namespace BitApps\Integrations\Actions\MailerLite;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -249,7 +249,9 @@ private static function handleDoubleOptIn($context, $auth_token, &$requestParams
if ($isMailerLiteV2) {
$requestParams['opted_in_at'] = gmdate('Y-m-d H:i:s');
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized on next line
if (isset($_SERVER['REMOTE_ADDR'])) {
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized below
$remoteAddr = wp_unslash($_SERVER['REMOTE_ADDR']);
$remoteAddr = sanitize_text_field($remoteAddr);
diff --git a/includes/Actions/MailerLite/Routes.php b/includes/Actions/MailerLite/Routes.php
index 3b2048900..69e2a195a 100644
--- a/includes/Actions/MailerLite/Routes.php
+++ b/includes/Actions/MailerLite/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MailerLite\MailerLiteController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailerLite\MailerLiteController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailerlite_authorization', [MailerLiteController::class, 'authorization']);
Route::post('mailerlite_fetch_all_groups', [MailerLiteController::class, 'fetchAllGroups']);
diff --git a/includes/Actions/MailerPress/MailerPressController.php b/includes/Actions/MailerPress/MailerPressController.php
index fe7a9c98b..3a2610e4e 100644
--- a/includes/Actions/MailerPress/MailerPressController.php
+++ b/includes/Actions/MailerPress/MailerPressController.php
@@ -4,9 +4,9 @@
* MailerPress Integration
*/
-namespace BitCode\FI\Actions\MailerPress;
+namespace BitApps\Integrations\Actions\MailerPress;
-use BitCode\FI\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\Helper;
use WP_Error;
/**
@@ -120,6 +120,7 @@ public function execute($integrationData, $fieldValues)
$tags = Helper::convertStringToArray($integrationDetails->tags ?? []);
if (empty($fieldMap)) {
+ // translators: %s: Integration name
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('Field map is required for %s api', 'bit-integrations'), 'MailerPress'));
}
@@ -140,4 +141,3 @@ public function execute($integrationData, $fieldValues)
return $mailerPressApiResponse;
}
}
-
diff --git a/includes/Actions/MailerPress/RecordApiHelper.php b/includes/Actions/MailerPress/RecordApiHelper.php
index cd95f9563..c3624eb73 100644
--- a/includes/Actions/MailerPress/RecordApiHelper.php
+++ b/includes/Actions/MailerPress/RecordApiHelper.php
@@ -4,10 +4,10 @@
* MailerPress Record Api
*/
-namespace BitCode\FI\Actions\MailerPress;
+namespace BitApps\Integrations\Actions\MailerPress;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, update
@@ -45,6 +45,7 @@ public function execute($fieldValues, $fieldMap, $lists, $tags, $mainAction)
$defaultResponse = [
'success' => false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations')
];
diff --git a/includes/Actions/MailerPress/Routes.php b/includes/Actions/MailerPress/Routes.php
index 17114d436..19708b49f 100644
--- a/includes/Actions/MailerPress/Routes.php
+++ b/includes/Actions/MailerPress/Routes.php
@@ -4,10 +4,9 @@
exit;
}
-use BitCode\FI\Actions\MailerPress\MailerPressController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MailerPress\MailerPressController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailer_press_authorize', [MailerPressController::class, 'mailerPressAuthorize']);
Route::post('refresh_mailer_press_lists', [MailerPressController::class, 'refreshLists']);
Route::post('refresh_mailer_press_tags', [MailerPressController::class, 'refreshTags']);
-
diff --git a/includes/Actions/Mailercloud/MailercloudController.php b/includes/Actions/Mailercloud/MailercloudController.php
index 30e490222..318b03596 100644
--- a/includes/Actions/Mailercloud/MailercloudController.php
+++ b/includes/Actions/Mailercloud/MailercloudController.php
@@ -4,9 +4,9 @@
* Mailercloud Integration
*/
-namespace BitCode\FI\Actions\Mailercloud;
+namespace BitApps\Integrations\Actions\Mailercloud;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -145,6 +145,7 @@ public function execute($integrationData, $fieldValues)
empty($field_map)
|| empty($authKey)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Mailercloud'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Mailercloud/RecordApiHelper.php b/includes/Actions/Mailercloud/RecordApiHelper.php
index b7a8bb0a2..93cb3208c 100644
--- a/includes/Actions/Mailercloud/RecordApiHelper.php
+++ b/includes/Actions/Mailercloud/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Mailercloud Record Api
*/
-namespace BitCode\FI\Actions\Mailercloud;
+namespace BitApps\Integrations\Actions\Mailercloud;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record Add Contact
diff --git a/includes/Actions/Mailercloud/Routes.php b/includes/Actions/Mailercloud/Routes.php
index 7c67b6806..1372cf5e0 100644
--- a/includes/Actions/Mailercloud/Routes.php
+++ b/includes/Actions/Mailercloud/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Mailercloud\MailercloudController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Mailercloud\MailercloudController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailercloud_handle_authorize', [MailercloudController::class, 'handleAuthorize']);
Route::post('mailercloud_get_all_lists', [MailercloudController::class, 'getAllLists']);
diff --git a/includes/Actions/Mailify/MailifyController.php b/includes/Actions/Mailify/MailifyController.php
index 5f290ed51..edda4acf4 100644
--- a/includes/Actions/Mailify/MailifyController.php
+++ b/includes/Actions/Mailify/MailifyController.php
@@ -1,8 +1,8 @@
api_key;
if (empty($fieldMap) || empty($accountId) || empty($apiKey) || empty($selectedList)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Mailify'));
}
diff --git a/includes/Actions/Mailify/RecordApiHelper.php b/includes/Actions/Mailify/RecordApiHelper.php
index aad56de30..46d629e45 100644
--- a/includes/Actions/Mailify/RecordApiHelper.php
+++ b/includes/Actions/Mailify/RecordApiHelper.php
@@ -1,9 +1,9 @@
field_map;
if (empty($fieldMap) || empty($secretKey) || empty($apiKey) || empty($selectedLists)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Mailjet'));
}
diff --git a/includes/Actions/Mailjet/RecordApiHelper.php b/includes/Actions/Mailjet/RecordApiHelper.php
index 12b2b4774..82f976cbd 100644
--- a/includes/Actions/Mailjet/RecordApiHelper.php
+++ b/includes/Actions/Mailjet/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Mailjet Record Api
*/
-namespace BitCode\FI\Actions\Mailjet;
+namespace BitApps\Integrations\Actions\Mailjet;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, update
diff --git a/includes/Actions/Mailjet/Routes.php b/includes/Actions/Mailjet/Routes.php
index 1c6ebc4c3..fe0739982 100644
--- a/includes/Actions/Mailjet/Routes.php
+++ b/includes/Actions/Mailjet/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Mailjet\MailjetController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Mailjet\MailjetController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailjet_authentication', [MailjetController::class, 'authentication']);
Route::post('mailjet_fetch_all_custom_fields', [MailjetController::class, 'getCustomFields']);
diff --git a/includes/Actions/Mailster/MailsterController.php b/includes/Actions/Mailster/MailsterController.php
index 0d3695a4d..2aa7396ee 100644
--- a/includes/Actions/Mailster/MailsterController.php
+++ b/includes/Actions/Mailster/MailsterController.php
@@ -4,7 +4,7 @@
* Mailster Integration
*/
-namespace BitCode\FI\Actions\Mailster;
+namespace BitApps\Integrations\Actions\Mailster;
use MailsterBlockForms;
use MailsterLists;
diff --git a/includes/Actions/Mailster/RecordApiHelper.php b/includes/Actions/Mailster/RecordApiHelper.php
index 08d73553b..8ec3f7a94 100644
--- a/includes/Actions/Mailster/RecordApiHelper.php
+++ b/includes/Actions/Mailster/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Mailster Record Api
*/
-namespace BitCode\FI\Actions\Mailster;
+namespace BitApps\Integrations\Actions\Mailster;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use MailsterSubscribers;
/**
diff --git a/includes/Actions/Mailster/Routes.php b/includes/Actions/Mailster/Routes.php
index 1eb569259..6ba632c34 100644
--- a/includes/Actions/Mailster/Routes.php
+++ b/includes/Actions/Mailster/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Mailster\MailsterController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Mailster\MailsterController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('mailster_authentication', [MailsterController::class, 'authentication']);
Route::post('mailster_fields', [MailsterController::class, 'getMailsterFields']);
diff --git a/includes/Actions/Mailup/MailupController.php b/includes/Actions/Mailup/MailupController.php
index 39fc14045..efc6ca541 100644
--- a/includes/Actions/Mailup/MailupController.php
+++ b/includes/Actions/Mailup/MailupController.php
@@ -1,9 +1,9 @@
get_results(
$wpdb->prepare(
"SELECT ID, post_title,post_content
@@ -42,6 +43,7 @@ public static function getLessonByCourse($courseId)
public static function getQuizByCourse($courseId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for MasterStudy quizzes
$quizzes = $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title,post_content
diff --git a/includes/Actions/MasterStudyLms/RecordApiHelper.php b/includes/Actions/MasterStudyLms/RecordApiHelper.php
index 881e77e49..c94f03751 100644
--- a/includes/Actions/MasterStudyLms/RecordApiHelper.php
+++ b/includes/Actions/MasterStudyLms/RecordApiHelper.php
@@ -1,14 +1,14 @@
generates_on) + (60 * 55)) < time()) {
diff --git a/includes/Actions/Mautic/RecordApiHelper.php b/includes/Actions/Mautic/RecordApiHelper.php
index 0f90d599d..7fe855afd 100644
--- a/includes/Actions/Mautic/RecordApiHelper.php
+++ b/includes/Actions/Mautic/RecordApiHelper.php
@@ -1,10 +1,10 @@
'memberpressproduct',
'posts_per_page' => 999,
'post_status' => 'publish',
- 'meta_query' => [
+ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- MemberPress products are filtered by period metadata.
+ 'meta_query' => [
'relation' => 'OR',
[
'key' => '_mepr_product_period_type',
@@ -63,12 +66,16 @@ public function getAllMembership($label = null, $option_code = 'MPPRODUCT', $arg
}
wp_send_json_success($allMembership, 200);
}
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Memberpress'));
}
public static function allPaymentGateway()
{
if (!self::pluginActive()) {
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Memberpress'));
}
$mepr_options = MeprOptions::fetch();
@@ -104,6 +111,9 @@ public function execute($integrationData, $fieldValues)
empty($integId)
|| empty($mainAction) || empty($selectedMembership)
) {
+ // translators: %s: Integration name
+
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'memberpress'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Memberpress/RecordApiHelper.php b/includes/Actions/Memberpress/RecordApiHelper.php
index 970ed84ce..cc4f0bee3 100644
--- a/includes/Actions/Memberpress/RecordApiHelper.php
+++ b/includes/Actions/Memberpress/RecordApiHelper.php
@@ -1,9 +1,9 @@
'add user', 'type_name' => 'Add the user to a membership']), 'error', wp_json_encode(__('Failed to add user to membership', 'bit-integrations')));
} else {
+ // translators: %s: Placeholder value
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'add user', 'type_name' => 'Add the user to a membership']), 'success', wp_json_encode(wp_sprintf(__('Successfully user added to the membership and id is: %s', 'bit-integrations'), $apiResponse)));
}
} elseif ($mainAction === '2') {
diff --git a/includes/Actions/Memberpress/Routes.php b/includes/Actions/Memberpress/Routes.php
index 356d87a6b..d47ee3130 100644
--- a/includes/Actions/Memberpress/Routes.php
+++ b/includes/Actions/Memberpress/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Memberpress\MemberpressController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Memberpress\MemberpressController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('memberpress_authorize', [MemberpressController::class, 'authorizeMemberpress']);
Route::post('fetch_all_membership', [MemberpressController::class, 'getAllMembership']);
diff --git a/includes/Actions/Moosend/MoosendController.php b/includes/Actions/Moosend/MoosendController.php
index 3bb05edeb..304df1b33 100644
--- a/includes/Actions/Moosend/MoosendController.php
+++ b/includes/Actions/Moosend/MoosendController.php
@@ -4,9 +4,9 @@
* Moosend Integration
*/
-namespace BitCode\FI\Actions\Moosend;
+namespace BitApps\Integrations\Actions\Moosend;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -58,6 +58,7 @@ public function execute($integrationData, $fieldValues)
empty($field_map)
|| empty($authKey)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Moosend'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/Moosend/MoosendHelper.php b/includes/Actions/Moosend/MoosendHelper.php
index 91eafc2e7..54d8e77c2 100644
--- a/includes/Actions/Moosend/MoosendHelper.php
+++ b/includes/Actions/Moosend/MoosendHelper.php
@@ -4,7 +4,7 @@
* Moosend Record Api
*/
-namespace BitCode\FI\Actions\Moosend;
+namespace BitApps\Integrations\Actions\Moosend;
/**
* Provide functionality for Record Subscribe , Unsubscribe, Unsubscribe from list
diff --git a/includes/Actions/Moosend/RecordApiHelper.php b/includes/Actions/Moosend/RecordApiHelper.php
index 7c3cdfe9c..71aaa6b20 100644
--- a/includes/Actions/Moosend/RecordApiHelper.php
+++ b/includes/Actions/Moosend/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Moosend Record Api
*/
-namespace BitCode\FI\Actions\Moosend;
+namespace BitApps\Integrations\Actions\Moosend;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record Subscribe , Unsubscribe, Unsubscribe from list
diff --git a/includes/Actions/Moosend/Routes.php b/includes/Actions/Moosend/Routes.php
index 3672f5412..10bfc550d 100644
--- a/includes/Actions/Moosend/Routes.php
+++ b/includes/Actions/Moosend/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\Moosend\MoosendController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Moosend\MoosendController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('moosend_handle_authorize', [MoosendController::class, 'handleAuthorize']);
diff --git a/includes/Actions/MoxieCRM/MoxieCRMController.php b/includes/Actions/MoxieCRM/MoxieCRMController.php
index 7c06d5768..555e728a6 100644
--- a/includes/Actions/MoxieCRM/MoxieCRMController.php
+++ b/includes/Actions/MoxieCRM/MoxieCRMController.php
@@ -4,9 +4,9 @@
* MoxieCRM Integration
*/
-namespace BitCode\FI\Actions\MoxieCRM;
+namespace BitApps\Integrations\Actions\MoxieCRM;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -227,6 +227,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'MoxieCRM'));
}
diff --git a/includes/Actions/MoxieCRM/RecordApiHelper.php b/includes/Actions/MoxieCRM/RecordApiHelper.php
index 7326f9503..6ac155506 100644
--- a/includes/Actions/MoxieCRM/RecordApiHelper.php
+++ b/includes/Actions/MoxieCRM/RecordApiHelper.php
@@ -4,10 +4,10 @@
* MoxieCRM Record Api
*/
-namespace BitCode\FI\Actions\MoxieCRM;
+namespace BitApps\Integrations\Actions\MoxieCRM;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/MoxieCRM/Routes.php b/includes/Actions/MoxieCRM/Routes.php
index de8f54fce..70192e20b 100644
--- a/includes/Actions/MoxieCRM/Routes.php
+++ b/includes/Actions/MoxieCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\MoxieCRM\MoxieCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\MoxieCRM\MoxieCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('moxiecrm_authentication', [MoxieCRMController::class, 'authentication']);
// Route::post('moxiecrm_fetch_custom_fields', [MoxieCRMController::class, 'getCustomFields']);
diff --git a/includes/Actions/N8n/N8nController.php b/includes/Actions/N8n/N8nController.php
index 4a2fea4c0..3ac7d4d08 100644
--- a/includes/Actions/N8n/N8nController.php
+++ b/includes/Actions/N8n/N8nController.php
@@ -4,9 +4,9 @@
* N8n Integration
*/
-namespace BitCode\FI\Actions\N8n;
+namespace BitApps\Integrations\Actions\N8n;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for N8nHandler
diff --git a/includes/Actions/Newsletter/NewsletterController.php b/includes/Actions/Newsletter/NewsletterController.php
index 762ac2f2a..016a6bcd7 100644
--- a/includes/Actions/Newsletter/NewsletterController.php
+++ b/includes/Actions/Newsletter/NewsletterController.php
@@ -4,7 +4,7 @@
* Newsletter Integration
*/
-namespace BitCode\FI\Actions\Newsletter;
+namespace BitApps\Integrations\Actions\Newsletter;
use WP_Error;
diff --git a/includes/Actions/Newsletter/RecordApiHelper.php b/includes/Actions/Newsletter/RecordApiHelper.php
index 540e0197a..125bffa05 100644
--- a/includes/Actions/Newsletter/RecordApiHelper.php
+++ b/includes/Actions/Newsletter/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Newsletter Record Api
*/
-namespace BitCode\FI\Actions\Newsletter;
+namespace BitApps\Integrations\Actions\Newsletter;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use TNP;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
/**
* Provide functionality for Record insert, update
diff --git a/includes/Actions/Newsletter/Routes.php b/includes/Actions/Newsletter/Routes.php
index 0ed73b70f..797f4cea0 100644
--- a/includes/Actions/Newsletter/Routes.php
+++ b/includes/Actions/Newsletter/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\Newsletter\NewsletterController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Newsletter\NewsletterController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('newsletter_authentication', [NewsletterController::class, 'authentication']);
diff --git a/includes/Actions/Nimble/NimbleController.php b/includes/Actions/Nimble/NimbleController.php
index 4af285960..7dfdf02e7 100644
--- a/includes/Actions/Nimble/NimbleController.php
+++ b/includes/Actions/Nimble/NimbleController.php
@@ -4,9 +4,9 @@
* Nimble Integration
*/
-namespace BitCode\FI\Actions\Nimble;
+namespace BitApps\Integrations\Actions\Nimble;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -119,6 +119,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($apiKey) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Nimble'));
}
diff --git a/includes/Actions/Nimble/RecordApiHelper.php b/includes/Actions/Nimble/RecordApiHelper.php
index d07dd184f..ec590cfba 100644
--- a/includes/Actions/Nimble/RecordApiHelper.php
+++ b/includes/Actions/Nimble/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Nimble Record Api
*/
-namespace BitCode\FI\Actions\Nimble;
+namespace BitApps\Integrations\Actions\Nimble;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Nimble/Routes.php b/includes/Actions/Nimble/Routes.php
index eeecadf2e..326fdc406 100644
--- a/includes/Actions/Nimble/Routes.php
+++ b/includes/Actions/Nimble/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Nimble\NimbleController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Nimble\NimbleController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('nimble_authentication', [NimbleController::class, 'authentication']);
Route::post('nimble_fetch_all_fields', [NimbleController::class, 'getAllFields']);
diff --git a/includes/Actions/Notion/NotionController.php b/includes/Actions/Notion/NotionController.php
index 2a44955a6..b3a8c60b7 100644
--- a/includes/Actions/Notion/NotionController.php
+++ b/includes/Actions/Notion/NotionController.php
@@ -1,8 +1,8 @@
actionName;
if (empty($fieldMap) || empty($userName) || empty($apiToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'NutshellCRM'));
}
diff --git a/includes/Actions/NutshellCRM/RecordApiHelper.php b/includes/Actions/NutshellCRM/RecordApiHelper.php
index 26517a8cf..2f38f5871 100644
--- a/includes/Actions/NutshellCRM/RecordApiHelper.php
+++ b/includes/Actions/NutshellCRM/RecordApiHelper.php
@@ -4,10 +4,10 @@
* NutshellCRM Record Api
*/
-namespace BitCode\FI\Actions\NutshellCRM;
+namespace BitApps\Integrations\Actions\NutshellCRM;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/NutshellCRM/Routes.php b/includes/Actions/NutshellCRM/Routes.php
index cb8cb97fb..6ff9d9a30 100644
--- a/includes/Actions/NutshellCRM/Routes.php
+++ b/includes/Actions/NutshellCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\NutshellCRM\NutshellCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\NutshellCRM\NutshellCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('nutshellcrm_authentication', [NutshellCRMController::class, 'authentication']);
Route::post('nutshellcrm_fetch_all_contacts', [NutshellCRMController::class, 'getContacts']);
diff --git a/includes/Actions/OmniSend/OmniSendController.php b/includes/Actions/OmniSend/OmniSendController.php
index a0d687640..b0b871841 100644
--- a/includes/Actions/OmniSend/OmniSendController.php
+++ b/includes/Actions/OmniSend/OmniSendController.php
@@ -4,10 +4,10 @@
* OmniSend Integration
*/
-namespace BitCode\FI\Actions\OmniSend;
+namespace BitApps\Integrations\Actions\OmniSend;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for OmniSend integration
@@ -62,6 +62,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($api_key)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'OmniSend'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/OmniSend/RecordApiHelper.php b/includes/Actions/OmniSend/RecordApiHelper.php
index c7c80f15c..784daa4de 100644
--- a/includes/Actions/OmniSend/RecordApiHelper.php
+++ b/includes/Actions/OmniSend/RecordApiHelper.php
@@ -4,11 +4,11 @@
* OmniSend Record Api
*/
-namespace BitCode\FI\Actions\OmniSend;
+namespace BitApps\Integrations\Actions\OmniSend;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -80,7 +80,7 @@ public function addContact(
$requestParams[$key] = $value;
}
}
-
+
return HttpHelper::post($apiEndpoints, wp_json_encode($requestParams), $this->_defaultHeader);
}
@@ -109,7 +109,7 @@ public function execute(
$customFieldMap
) {
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
- $customProperties = apply_filters('btcbi_omnisend_custom_properties', (object) [], $customFieldMap,$fieldValues);
+ $customProperties = apply_filters('btcbi_omnisend_custom_properties', (object) [], $customFieldMap, $fieldValues);
$apiResponse = $this->addContact(
$channels,
$emailStatus,
diff --git a/includes/Actions/OmniSend/Routes.php b/includes/Actions/OmniSend/Routes.php
index 6d19cd127..9d121d959 100644
--- a/includes/Actions/OmniSend/Routes.php
+++ b/includes/Actions/OmniSend/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\OmniSend\OmniSendController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\OmniSend\OmniSendController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('Omnisend_authorization', [OmniSendController::class, 'authorization']);
diff --git a/includes/Actions/OneDrive/OneDriveController.php b/includes/Actions/OneDrive/OneDriveController.php
index 49c9b43d2..813a21648 100644
--- a/includes/Actions/OneDrive/OneDriveController.php
+++ b/includes/Actions/OneDrive/OneDriveController.php
@@ -1,11 +1,11 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'oneDrive', 'type_name' => 'file_upload']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'OneDrive'));
return false;
diff --git a/includes/Actions/OneDrive/RecordApiHelper.php b/includes/Actions/OneDrive/RecordApiHelper.php
index 2399a4fc1..7af718eed 100644
--- a/includes/Actions/OneDrive/RecordApiHelper.php
+++ b/includes/Actions/OneDrive/RecordApiHelper.php
@@ -1,10 +1,10 @@
domain;
if (empty($fieldMap) || empty($apiKey) || empty($apiSecret) || empty($actionName) || empty($domain)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'OneHashCRM'));
}
diff --git a/includes/Actions/OneHashCRM/RecordApiHelper.php b/includes/Actions/OneHashCRM/RecordApiHelper.php
index 801d1b9ba..7a91ee4d4 100644
--- a/includes/Actions/OneHashCRM/RecordApiHelper.php
+++ b/includes/Actions/OneHashCRM/RecordApiHelper.php
@@ -4,10 +4,10 @@
* OneHashCRM Record Api
*/
-namespace BitCode\FI\Actions\OneHashCRM;
+namespace BitApps\Integrations\Actions\OneHashCRM;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/OneHashCRM/Routes.php b/includes/Actions/OneHashCRM/Routes.php
index f207ac675..3cacbe6e3 100644
--- a/includes/Actions/OneHashCRM/Routes.php
+++ b/includes/Actions/OneHashCRM/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\OneHashCRM\OneHashCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\OneHashCRM\OneHashCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('onehashcrm_authentication', [OneHashCRMController::class, 'authentication']);
diff --git a/includes/Actions/PCloud/PCloudController.php b/includes/Actions/PCloud/PCloudController.php
index 0a38c69e8..2ca7321f7 100644
--- a/includes/Actions/PCloud/PCloudController.php
+++ b/includes/Actions/PCloud/PCloudController.php
@@ -1,10 +1,10 @@
flow_details->tokenDetails->access_token)) {
+ // translators: %s: Service name
LogHandler::save($this->integrationID, wp_json_encode(['type' => 'pCloud', 'type_name' => 'file_upload']), 'error', wp_sprintf(__('Not Authorization By %s', 'bit-integrations'), 'PCloud'));
return false;
diff --git a/includes/Actions/PCloud/RecordApiHelper.php b/includes/Actions/PCloud/RecordApiHelper.php
index 102021581..d5d760e97 100644
--- a/includes/Actions/PCloud/RecordApiHelper.php
+++ b/includes/Actions/PCloud/RecordApiHelper.php
@@ -1,10 +1,10 @@
get_results(
- $wpdb->prepare('SELECT * FROM %1s ORDER BY id ASC', $wpdb->pmpro_membership_levels)
- );
+ $levels = wp_cache_get($cache_key, $cache_group);
+ if (false === $levels) {
+ $membership_table = esc_sql($wpdb->pmpro_membership_levels);
+
+ // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared
+ $levels = $wpdb->get_results(
+ 'SELECT * FROM ' . $membership_table . ' ORDER BY id ASC'
+ );
+ // phpcs:enable
+
+ wp_cache_set($cache_key, $levels, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
$allLevels = [];
diff --git a/includes/Actions/PaidMembershipPro/RecordApiHelper.php b/includes/Actions/PaidMembershipPro/RecordApiHelper.php
index 5f8eaa964..fbe5dd81f 100644
--- a/includes/Actions/PaidMembershipPro/RecordApiHelper.php
+++ b/includes/Actions/PaidMembershipPro/RecordApiHelper.php
@@ -1,9 +1,9 @@
get_row($wpdb->prepare("SELECT * FROM {$wpdb->pmpro_membership_levels} WHERE id = %d", $membership_level));
+ $cache_key = 'btcbi_pmpro_membership_level_' . absint($membership_level);
+ $cache_group = 'btcbi';
+ $pmpro_membership_level = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $pmpro_membership_level) {
+ $membership_table = esc_sql($wpdb->pmpro_membership_levels);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Reading PMPro levels table directly; static table name from PMPro.
+ $pmpro_membership_level = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $membership_table . ' WHERE id = %d', $membership_level));
+ wp_cache_set($cache_key, $pmpro_membership_level, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
if (null === $pmpro_membership_level) {
LogHandler::save(self::$integrationID, wp_json_encode(['type' => 'add user', 'type_name' => 'Add the user to a membership level']), 'error', wp_json_encode(__('There is no membership level with the specified ID.', 'bit-integrations')));
diff --git a/includes/Actions/PaidMembershipPro/Routes.php b/includes/Actions/PaidMembershipPro/Routes.php
index 5df2bb657..3d42c0bab 100644
--- a/includes/Actions/PaidMembershipPro/Routes.php
+++ b/includes/Actions/PaidMembershipPro/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\PaidMembershipPro\PaidMembershipProController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\PaidMembershipPro\PaidMembershipProController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('paid_membership_pro_authorize', [PaidMembershipProController::class, 'authorizeMemberpress']);
Route::post('fetch_all_paid_membership_pro_level', [PaidMembershipProController::class, 'getAllPaidMembershipProLevel']);
diff --git a/includes/Actions/PerfexCRM/PerfexCRMController.php b/includes/Actions/PerfexCRM/PerfexCRMController.php
index ddb43c30e..e9e61de84 100644
--- a/includes/Actions/PerfexCRM/PerfexCRMController.php
+++ b/includes/Actions/PerfexCRM/PerfexCRMController.php
@@ -4,9 +4,9 @@
* PerfexCRM Integration
*/
-namespace BitCode\FI\Actions\PerfexCRM;
+namespace BitApps\Integrations\Actions\PerfexCRM;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -170,6 +170,7 @@ public function execute($integrationData, $fieldValues)
$domain = $integrationDetails->domain;
if (empty($fieldMap) || empty($apiToken) || empty($actionName) || empty($domain)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'PerfexCRM'));
}
diff --git a/includes/Actions/PerfexCRM/RecordApiHelper.php b/includes/Actions/PerfexCRM/RecordApiHelper.php
index 6708f9de6..07f4ba87c 100644
--- a/includes/Actions/PerfexCRM/RecordApiHelper.php
+++ b/includes/Actions/PerfexCRM/RecordApiHelper.php
@@ -4,11 +4,11 @@
* PerfexCRM Record Api
*/
-namespace BitCode\FI\Actions\PerfexCRM;
+namespace BitApps\Integrations\Actions\PerfexCRM;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/PerfexCRM/Routes.php b/includes/Actions/PerfexCRM/Routes.php
index e352587e2..b5c2ffbb9 100644
--- a/includes/Actions/PerfexCRM/Routes.php
+++ b/includes/Actions/PerfexCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\PerfexCRM\PerfexCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\PerfexCRM\PerfexCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('perfexcrm_authentication', [PerfexCRMController::class, 'authentication']);
Route::post('perfexcrm_custom_fields', [PerfexCRMController::class, 'getCustomFields']);
diff --git a/includes/Actions/PipeDrive/PipeDriveController.php b/includes/Actions/PipeDrive/PipeDriveController.php
index 152fcd106..099bced7b 100644
--- a/includes/Actions/PipeDrive/PipeDriveController.php
+++ b/includes/Actions/PipeDrive/PipeDriveController.php
@@ -4,10 +4,10 @@
* PipeDrive Integration
*/
-namespace BitCode\FI\Actions\PipeDrive;
+namespace BitApps\Integrations\Actions\PipeDrive;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for PipeDrive integration
@@ -166,6 +166,7 @@ public function execute($integrationData, $fieldValues)
empty($fieldMap)
|| empty($api_key)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'PipeDrive'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/PipeDrive/RecordApiHelper.php b/includes/Actions/PipeDrive/RecordApiHelper.php
index 716a05a58..5b542c73c 100644
--- a/includes/Actions/PipeDrive/RecordApiHelper.php
+++ b/includes/Actions/PipeDrive/RecordApiHelper.php
@@ -4,11 +4,11 @@
* PipeDrive Record Api
*/
-namespace BitCode\FI\Actions\PipeDrive;
+namespace BitApps\Integrations\Actions\PipeDrive;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/PipeDrive/Routes.php b/includes/Actions/PipeDrive/Routes.php
index 26c841fb1..e397fdae9 100644
--- a/includes/Actions/PipeDrive/Routes.php
+++ b/includes/Actions/PipeDrive/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\PipeDrive\PipeDriveController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\PipeDrive\PipeDriveController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('PipeDrive_refresh_fields', [PipeDriveController::class, 'getFields']);
Route::post('PipeDrive_fetch_meta_data', [PipeDriveController::class, 'getMetaData']);
diff --git a/includes/Actions/Pods/PodsController.php b/includes/Actions/Pods/PodsController.php
index 69d5d8705..120542a53 100644
--- a/includes/Actions/Pods/PodsController.php
+++ b/includes/Actions/Pods/PodsController.php
@@ -5,12 +5,12 @@
* Added Pods Custom Fields
*/
-namespace BitCode\FI\Actions\Pods;
+namespace BitApps\Integrations\Actions\Pods;
-use BitCode\FI\Flow\Flow;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\Helper;
+use BitApps\Integrations\Flow\Flow;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for POD integration
diff --git a/includes/Actions/PostCreation/PostCreationController.php b/includes/Actions/PostCreation/PostCreationController.php
index 2b11ba812..8615f5025 100644
--- a/includes/Actions/PostCreation/PostCreationController.php
+++ b/includes/Actions/PostCreation/PostCreationController.php
@@ -6,13 +6,13 @@
* Added ACF Custom Fields
*/
-namespace BitCode\FI\Actions\PostCreation;
+namespace BitApps\Integrations\Actions\PostCreation;
-use BitCode\FI\controller\PostController;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Flow\Flow;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\controller\PostController;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\Helper;
+use BitApps\Integrations\Flow\Flow;
+use BitApps\Integrations\Log\LogHandler;
final class PostCreationController
{
diff --git a/includes/Actions/PropovoiceCRM/FilesApiHelper.php b/includes/Actions/PropovoiceCRM/FilesApiHelper.php
index 518aa9943..bb6fdb1fa 100644
--- a/includes/Actions/PropovoiceCRM/FilesApiHelper.php
+++ b/includes/Actions/PropovoiceCRM/FilesApiHelper.php
@@ -1,6 +1,6 @@
add('field', wp_sprintf(__('Invalid file type: %s. Supported file types: %s', 'bit-integrations'), $error_file_type, $valid_file_type));
+ // translators: %s: Placeholder value
+ $reg_errors->add('field', wp_sprintf(__('Invalid file type: %1$s. Supported file types: %2$s', 'bit-integrations'), $error_file_type, $valid_file_type));
}
if (!empty($reg_errors->get_error_messages())) {
diff --git a/includes/Actions/PropovoiceCRM/PropovoiceCRMController.php b/includes/Actions/PropovoiceCRM/PropovoiceCRMController.php
index 725ed5f60..ecbc9807e 100644
--- a/includes/Actions/PropovoiceCRM/PropovoiceCRMController.php
+++ b/includes/Actions/PropovoiceCRM/PropovoiceCRMController.php
@@ -1,6 +1,6 @@
get_results("SELECT term_id, name FROM {$wpdb->terms} WHERE term_id IN (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'ndpv_tag')");
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for Propovoice tags
+ $tags = $wpdb->get_results($wpdb->prepare(
+ "SELECT term_id, name FROM {$wpdb->terms} WHERE term_id IN (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s)",
+ 'ndpv_tag'
+ ));
wp_send_json_success($tags, 200);
}
public static function leadLabel()
{
global $wpdb;
- $labels = $wpdb->get_results("SELECT term_id, name FROM {$wpdb->terms} WHERE term_id IN (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'ndpv_lead_level')");
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for Propovoice labels
+ $labels = $wpdb->get_results($wpdb->prepare(
+ "SELECT term_id, name FROM {$wpdb->terms} WHERE term_id IN (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s)",
+ 'ndpv_lead_level'
+ ));
wp_send_json_success($labels, 200);
}
@@ -48,6 +58,9 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
) {
+ // translators: %s: Integration name
+
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Propovoice CRM'));
}
$recordApiHelper = new RecordApiHelper($integrationId);
diff --git a/includes/Actions/PropovoiceCRM/RecordApiHelper.php b/includes/Actions/PropovoiceCRM/RecordApiHelper.php
index 952898786..a74d13275 100644
--- a/includes/Actions/PropovoiceCRM/RecordApiHelper.php
+++ b/includes/Actions/PropovoiceCRM/RecordApiHelper.php
@@ -1,9 +1,9 @@
_integrationID, __('New user registration', 'bit-integrations'), 'error', $message);
} else {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, __('New user registration', 'bit-integrations'), 'success', wp_sprintf(__('New user created successfully, user id : %s', 'bit-integrations'), $userId));
$this->saveMetaData($flowDetails->meta_map, $fieldValues, $userId);
@@ -167,6 +168,7 @@ private function updateUser($updatedData, $flowDetails, $fieldValues)
$message = is_wp_error($updatedUser) ? $updatedUser->get_error_message() : 'error';
LogHandler::save($this->_integrationID, __('User update', 'bit-integrations'), 'error', $message);
} else {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, __('User update', 'bit-integrations'), 'success', wp_sprintf(__('User updated successfully, user id : %s', 'bit-integrations'), $updatedUser));
$this->saveMetaData($flowDetails->meta_map, $fieldValues, $updatedUser);
$this->notification($flowDetails, $updatedUser);
diff --git a/includes/Actions/RestrictContent/RecordApiHelper.php b/includes/Actions/RestrictContent/RecordApiHelper.php
index 63c1f912c..211567203 100644
--- a/includes/Actions/RestrictContent/RecordApiHelper.php
+++ b/includes/Actions/RestrictContent/RecordApiHelper.php
@@ -4,9 +4,9 @@
* RestrictContent Record Api
*/
-namespace BitCode\FI\Actions\RestrictContent;
+namespace BitApps\Integrations\Actions\RestrictContent;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Log\LogHandler;
use RCP_Payments;
use WP_Error;
diff --git a/includes/Actions/RestrictContent/RestrictContentController.php b/includes/Actions/RestrictContent/RestrictContentController.php
index b4006a8d8..234b9fcdb 100644
--- a/includes/Actions/RestrictContent/RestrictContentController.php
+++ b/includes/Actions/RestrictContent/RestrictContentController.php
@@ -4,9 +4,9 @@
* Restrict Content Integration
*/
-namespace BitCode\FI\Actions\RestrictContent;
+namespace BitApps\Integrations\Actions\RestrictContent;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -39,6 +39,8 @@ public static function authorizeRestrictContent()
if (self::pluginActive()) {
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'Restrict Content'));
}
diff --git a/includes/Actions/RestrictContent/Routes.php b/includes/Actions/RestrictContent/Routes.php
index 9360ad5ce..aea4a11bb 100644
--- a/includes/Actions/RestrictContent/Routes.php
+++ b/includes/Actions/RestrictContent/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\RestrictContent\RestrictContentController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\RestrictContent\RestrictContentController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('restrict_authorize', [RestrictContentController::class, 'authorizeRestrictContent']);
Route::get('restrict_get_all_levels', [RestrictContentController::class, 'getAllLevels']);
diff --git a/includes/Actions/Salesflare/RecordApiHelper.php b/includes/Actions/Salesflare/RecordApiHelper.php
index 275ed78b0..3e5de18dc 100644
--- a/includes/Actions/Salesflare/RecordApiHelper.php
+++ b/includes/Actions/Salesflare/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Salesflare Record Api
*/
-namespace BitCode\FI\Actions\Salesflare;
+namespace BitApps\Integrations\Actions\Salesflare;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Salesflare/Routes.php b/includes/Actions/Salesflare/Routes.php
index c6b52fce6..f6148765a 100644
--- a/includes/Actions/Salesflare/Routes.php
+++ b/includes/Actions/Salesflare/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Salesflare\SalesflareController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Salesflare\SalesflareController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('salesflare_authentication', [SalesflareController::class, 'authentication']);
Route::post('Salesflare_custom_fields', [SalesflareController::class, 'customFields']);
diff --git a/includes/Actions/Salesflare/SalesflareController.php b/includes/Actions/Salesflare/SalesflareController.php
index b0d9629bb..d0292ff41 100644
--- a/includes/Actions/Salesflare/SalesflareController.php
+++ b/includes/Actions/Salesflare/SalesflareController.php
@@ -4,9 +4,9 @@
* Salesflare Integration
*/
-namespace BitCode\FI\Actions\Salesflare;
+namespace BitApps\Integrations\Actions\Salesflare;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -141,6 +141,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($apiKey) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Salesflare'));
}
diff --git a/includes/Actions/Salesforce/RecordApiHelper.php b/includes/Actions/Salesforce/RecordApiHelper.php
index 2f55aac9c..ea2e6ae63 100644
--- a/includes/Actions/Salesforce/RecordApiHelper.php
+++ b/includes/Actions/Salesforce/RecordApiHelper.php
@@ -1,10 +1,10 @@
id));
}
@@ -191,6 +192,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
if ($responseType === 'success' && $update) {
$message = __('Lead Updated Successfully', 'bit-integrations');
} elseif ($responseType === 'success') {
+ // translators: %s: Placeholder value
$message = wp_json_encode(wp_sprintf(__('Created lead id is : %s', 'bit-integrations'), $insertLeadResponse->id));
}
@@ -208,6 +210,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$createAccountResponse = $this->createAccount($finalData);
if (\is_object($createAccountResponse) && property_exists($createAccountResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Account', 'type_name' => 'Account-create']), 'success', wp_json_encode(wp_sprintf(__('Created account id is : %s', 'bit-integrations'), $createAccountResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Account', 'type_name' => 'Account-create']), 'error', wp_json_encode($createAccountResponse));
@@ -216,6 +219,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$insertCampaignResponse = $this->createCampaign($finalData);
if (\is_object($insertCampaignResponse) && property_exists($insertCampaignResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Campaign', 'type_name' => 'Campaign-create']), 'success', wp_json_encode(wp_sprintf(__('Created campaign id is : %s', 'bit-integrations'), $insertCampaignResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Campaign', 'type_name' => 'Campaign-create']), 'error', wp_json_encode($insertCampaignResponse));
@@ -227,6 +231,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$statusId = isset($integrationDetails->statusId) ? $integrationDetails->statusId : null;
$insertCampaignMember = $this->insertCampaignMember($campaignId, $leadId, $contactId, $statusId);
if (\is_object($insertCampaignMember) && property_exists($insertCampaignMember, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'CampaignMember', 'type_name' => 'CampaignMember-create']), 'success', wp_json_encode(wp_sprintf(__('Created campaign member id is : %s', 'bit-integrations'), $insertCampaignMember->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'CampaignMember', 'type_name' => 'CampaignMember-create']), 'error', wp_json_encode($insertCampaignMember));
@@ -239,6 +244,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$statusId = isset($integrationDetails->statusId) ? $integrationDetails->statusId : null;
$apiResponse = $this->createTask($contactId, $accountId, $subjectId, $priorityId, $statusId);
if (\is_object($apiResponse) && property_exists($apiResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Task', 'type_name' => 'Task-create']), 'success', wp_json_encode(wp_sprintf(__('Created task id is : %s', 'bit-integrations'), $apiResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Task', 'type_name' => 'Task-create']), 'error', wp_json_encode($apiResponse));
@@ -252,6 +258,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$opportunityResponse = $this->createOpportunity($finalData, $opportunityTypeId, $opportunityStageId, $opportunityLeadSourceId, $accountId, $campaignId);
if (\is_object($opportunityResponse) && property_exists($opportunityResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Opportunity', 'type_name' => 'Opportunity-create']), 'success', wp_json_encode(wp_sprintf(__('Created opportunity id is : %s', 'bit-integrations'), $opportunityResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Opportunity', 'type_name' => 'Opportunity-create']), 'error', wp_json_encode($opportunityResponse));
@@ -263,6 +270,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
$createEventResponse = $this->createEvent($finalData, $contactId, $accountId, $eventSubjectId);
if (\is_object($createEventResponse) && property_exists($createEventResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Event', 'type_name' => 'Event-create']), 'success', wp_json_encode(wp_sprintf(__('Created event id is : %s', 'bit-integrations'), $createEventResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Event', 'type_name' => 'Event-create']), 'error', wp_json_encode($createEventResponse));
@@ -282,6 +290,7 @@ public function execute($integrationDetails, $fieldValues, $fieldMap, $actions)
$createCaseResponse = $this->createCase($finalData, $actionsData);
if (\is_object($createCaseResponse) && property_exists($createCaseResponse, 'id')) {
+ // translators: %s: Placeholder value
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Case', 'type_name' => 'Case-create']), 'success', wp_json_encode(wp_sprintf(__('Created case id is : %s', 'bit-integrations'), $createCaseResponse->id)));
} else {
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'Case', 'type_name' => 'Case-create']), 'error', wp_json_encode($createCaseResponse));
@@ -401,7 +410,7 @@ public static function convertToSalesforceFormat($input)
$yy = \intval(substr($clean, -2));
// Sliding window: interpret two-digit year as closest to current year within 50 years
- $currentYear = \intval(date('Y'));
+ $currentYear = \intval(gmdate('Y'));
$century = \intval($currentYear / 100) * 100;
$fullYear = $century + $yy;
$window = 50;
diff --git a/includes/Actions/Salesforce/Routes.php b/includes/Actions/Salesforce/Routes.php
index ea2187469..f2d62cc17 100644
--- a/includes/Actions/Salesforce/Routes.php
+++ b/includes/Actions/Salesforce/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Salesforce\SalesforceController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Salesforce\SalesforceController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('selesforce_generate_token', [SalesforceController::class, 'generateTokens']);
Route::post('selesforce_custom_action', [SalesforceController::class, 'customActions']);
diff --git a/includes/Actions/Salesforce/SalesforceController.php b/includes/Actions/Salesforce/SalesforceController.php
index 412c60f80..a5f9749dc 100644
--- a/includes/Actions/Salesforce/SalesforceController.php
+++ b/includes/Actions/Salesforce/SalesforceController.php
@@ -4,10 +4,10 @@
* Selesforce Integration
*/
-namespace BitCode\FI\Actions\Salesforce;
+namespace BitApps\Integrations\Actions\Salesforce;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
class SalesforceController
diff --git a/includes/Actions/Salesmate/RecordApiHelper.php b/includes/Actions/Salesmate/RecordApiHelper.php
index b8b724a27..63c85d643 100644
--- a/includes/Actions/Salesmate/RecordApiHelper.php
+++ b/includes/Actions/Salesmate/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Salesmate Record Api
*/
-namespace BitCode\FI\Actions\Salesmate;
+namespace BitApps\Integrations\Actions\Salesmate;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Salesmate/Routes.php b/includes/Actions/Salesmate/Routes.php
index c799ce4f0..a39b62e9d 100644
--- a/includes/Actions/Salesmate/Routes.php
+++ b/includes/Actions/Salesmate/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Salesmate\SalesmateController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Salesmate\SalesmateController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('salesmate_authentication', [SalesmateController::class, 'authentication']);
Route::post('Salesmate_fields', [SalesmateController::class, 'getAllFields']);
diff --git a/includes/Actions/Salesmate/SalesmateController.php b/includes/Actions/Salesmate/SalesmateController.php
index a885b3565..e487d2fb4 100644
--- a/includes/Actions/Salesmate/SalesmateController.php
+++ b/includes/Actions/Salesmate/SalesmateController.php
@@ -4,9 +4,9 @@
* Salesmate Integration
*/
-namespace BitCode\FI\Actions\Salesmate;
+namespace BitApps\Integrations\Actions\Salesmate;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -218,6 +218,7 @@ public function execute($integrationData, $fieldValues)
$linkName = $integrationDetails->link_name;
if (empty($fieldMap) || empty($sessionToken) || empty($actionName) || empty($actionId) || empty($linkName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Salesmate'));
}
diff --git a/includes/Actions/Selzy/RecordApiHelper.php b/includes/Actions/Selzy/RecordApiHelper.php
index 70d16fd98..440ba5b97 100644
--- a/includes/Actions/Selzy/RecordApiHelper.php
+++ b/includes/Actions/Selzy/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Selzy Record Api
*/
-namespace BitCode\FI\Actions\Selzy;
+namespace BitApps\Integrations\Actions\Selzy;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record Subscribe , Unsubscribe
diff --git a/includes/Actions/Selzy/Routes.php b/includes/Actions/Selzy/Routes.php
index c0a818a01..646082810 100644
--- a/includes/Actions/Selzy/Routes.php
+++ b/includes/Actions/Selzy/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Selzy\SelzyController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Selzy\SelzyController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('selzy_handle_authorize', [SelzyController::class, 'handleAuthorize']);
Route::post('selzy_get_all_tags', [SelzyController::class, 'getAllTags']);
diff --git a/includes/Actions/Selzy/SelzyController.php b/includes/Actions/Selzy/SelzyController.php
index b0aaf39f2..b9aca8ba2 100644
--- a/includes/Actions/Selzy/SelzyController.php
+++ b/includes/Actions/Selzy/SelzyController.php
@@ -4,9 +4,9 @@
* Selzy Integration
*/
-namespace BitCode\FI\Actions\Selzy;
+namespace BitApps\Integrations\Actions\Selzy;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -116,6 +116,7 @@ public function execute($integrationData, $fieldValues)
empty($field_map)
|| empty($authKey)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Selzy'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/SendFox/RecordApiHelper.php b/includes/Actions/SendFox/RecordApiHelper.php
index 0a72d94c2..85d72d3bc 100644
--- a/includes/Actions/SendFox/RecordApiHelper.php
+++ b/includes/Actions/SendFox/RecordApiHelper.php
@@ -4,11 +4,11 @@
* SendFox Record Api
*/
-namespace BitCode\FI\Actions\SendFox;
+namespace BitApps\Integrations\Actions\SendFox;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/SendFox/Routes.php b/includes/Actions/SendFox/Routes.php
index 8ef3e3df3..dc5aeb632 100644
--- a/includes/Actions/SendFox/Routes.php
+++ b/includes/Actions/SendFox/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\SendFox\SendFoxController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SendFox\SendFoxController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('sendFox_authorize', [SendFoxController::class, 'sendFoxAuthorize']);
Route::post('sendfox_fetch_all_list', [SendFoxController::class, 'fetchContactLists']);
diff --git a/includes/Actions/SendFox/SendFoxController.php b/includes/Actions/SendFox/SendFoxController.php
index 33a7b2bbe..4a3ebb175 100644
--- a/includes/Actions/SendFox/SendFoxController.php
+++ b/includes/Actions/SendFox/SendFoxController.php
@@ -4,9 +4,9 @@
* SendFox Integration
*/
-namespace BitCode\FI\Actions\SendFox;
+namespace BitApps\Integrations\Actions\SendFox;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
class SendFoxController
@@ -85,6 +85,7 @@ public function execute($integrationData, $fieldValues)
// empty($fieldMap)||
empty($access_token)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'SendFox'));
}
$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);
diff --git a/includes/Actions/SendGrid/RecordApiHelper.php b/includes/Actions/SendGrid/RecordApiHelper.php
index def293b9c..22b23b3b3 100644
--- a/includes/Actions/SendGrid/RecordApiHelper.php
+++ b/includes/Actions/SendGrid/RecordApiHelper.php
@@ -4,11 +4,11 @@
* SendGrid Record Api
*/
-namespace BitCode\FI\Actions\SendGrid;
+namespace BitApps\Integrations\Actions\SendGrid;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, update
diff --git a/includes/Actions/SendGrid/Routes.php b/includes/Actions/SendGrid/Routes.php
index dfa9bd356..f639a9bde 100644
--- a/includes/Actions/SendGrid/Routes.php
+++ b/includes/Actions/SendGrid/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\SendGrid\SendGridController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SendGrid\SendGridController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('sendGrid_authentication', [SendGridController::class, 'authentication']);
Route::post('sendGrid_fetch_all_lists', [SendGridController::class, 'getLists']);
diff --git a/includes/Actions/SendGrid/SendGridController.php b/includes/Actions/SendGrid/SendGridController.php
index 78bd8d64d..3854ac84f 100644
--- a/includes/Actions/SendGrid/SendGridController.php
+++ b/includes/Actions/SendGrid/SendGridController.php
@@ -4,9 +4,9 @@
* SendGrid Integration
*/
-namespace BitCode\FI\Actions\SendGrid;
+namespace BitApps\Integrations\Actions\SendGrid;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -78,6 +78,7 @@ public function execute($integrationData, $fieldValues)
$fieldMap = $integrationDetails->field_map;
if (empty($fieldMap) || empty($apiKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'SendGrid'));
}
diff --git a/includes/Actions/SendPulse/RecordApiHelper.php b/includes/Actions/SendPulse/RecordApiHelper.php
index 4dda06158..7428b2a8e 100644
--- a/includes/Actions/SendPulse/RecordApiHelper.php
+++ b/includes/Actions/SendPulse/RecordApiHelper.php
@@ -1,9 +1,9 @@
['fieldValue' => 'phone', 'fieldName' => __('Phone', 'bit-integrations'), 'required' => false]
];
- if (Helper::proActionFeatExists('SendPulse', 'refreshFields')) {
- $apiEndpoint = "https://api.sendpulse.com/addressbooks/{$requestParams->list_id}/variables";
+ $apiEndpoint = "https://api.sendpulse.com/addressbooks/{$requestParams->list_id}/variables";
- $token = self::tokenExpiryCheck($requestParams->tokenDetails, $requestParams->client_id, $requestParams->client_secret);
-
- $fields = apply_filters('btcbi_sendPulse_refresh_fields', $fields, $apiEndpoint, $token->access_token);
- }
+ $token = self::tokenExpiryCheck($requestParams->tokenDetails, $requestParams->client_id, $requestParams->client_secret);
- $response['sendPulseField'] = $fields;
+ $response['sendPulseField'] = apply_filters('btcbi_sendPulse_refresh_fields', $fields, $apiEndpoint, $token->access_token);
wp_send_json_success($response);
}
@@ -112,6 +107,7 @@ public function execute($integrationData, $fieldValues)
}
if (empty($fieldMap) || empty($tokenDetails) || empty($selectedList)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'SendPulse'));
}
diff --git a/includes/Actions/SendinBlue/RecordApiHelper.php b/includes/Actions/SendinBlue/RecordApiHelper.php
index 680495d0e..4bc7e3713 100644
--- a/includes/Actions/SendinBlue/RecordApiHelper.php
+++ b/includes/Actions/SendinBlue/RecordApiHelper.php
@@ -4,11 +4,11 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\SendinBlue;
+namespace BitApps\Integrations\Actions\SendinBlue;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,upsert
diff --git a/includes/Actions/SendinBlue/Routes.php b/includes/Actions/SendinBlue/Routes.php
index 13325d46c..66a3c1534 100644
--- a/includes/Actions/SendinBlue/Routes.php
+++ b/includes/Actions/SendinBlue/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\SendinBlue\SendinBlueController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SendinBlue\SendinBlueController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('sblue_authorize', [SendinBlueController::class, 'sendinBlueAuthorize']);
Route::post('sblue_refresh_lists', [SendinBlueController::class, 'refreshlists']);
diff --git a/includes/Actions/SendinBlue/SendinBlueController.php b/includes/Actions/SendinBlue/SendinBlueController.php
index f61e41056..4b5476a94 100644
--- a/includes/Actions/SendinBlue/SendinBlueController.php
+++ b/includes/Actions/SendinBlue/SendinBlueController.php
@@ -4,9 +4,9 @@
* ZohoSheet Integration
*/
-namespace BitCode\FI\Actions\SendinBlue;
+namespace BitApps\Integrations\Actions\SendinBlue;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -199,6 +199,7 @@ public function execute($integrationData, $fieldValues)
|| empty($fieldMap)
|| empty($defaultDataConf)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Sendinblue'));
}
$recordApiHelper = new RecordApiHelper($api_key, $integId);
diff --git a/includes/Actions/Sendy/RecordApiHelper.php b/includes/Actions/Sendy/RecordApiHelper.php
index f0301ca8d..7282f9c40 100644
--- a/includes/Actions/Sendy/RecordApiHelper.php
+++ b/includes/Actions/Sendy/RecordApiHelper.php
@@ -1,10 +1,10 @@
false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations')
];
diff --git a/includes/Actions/SeoPress/Routes.php b/includes/Actions/SeoPress/Routes.php
index dd6cf5866..f67670882 100644
--- a/includes/Actions/SeoPress/Routes.php
+++ b/includes/Actions/SeoPress/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\SeoPress\SeoPressController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SeoPress\SeoPressController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('seopress_authorize', [SeoPressController::class, 'seoPressAuthorize']);
diff --git a/includes/Actions/SeoPress/SeoPressController.php b/includes/Actions/SeoPress/SeoPressController.php
index 058073d0d..a9ee6d120 100644
--- a/includes/Actions/SeoPress/SeoPressController.php
+++ b/includes/Actions/SeoPress/SeoPressController.php
@@ -4,7 +4,7 @@
* SEOPress Integration
*/
-namespace BitCode\FI\Actions\SeoPress;
+namespace BitApps\Integrations\Actions\SeoPress;
use WP_Error;
diff --git a/includes/Actions/Slack/FilesApiHelper.php b/includes/Actions/Slack/FilesApiHelper.php
index d7e66e9b5..77e144014 100644
--- a/includes/Actions/Slack/FilesApiHelper.php
+++ b/includes/Actions/Slack/FilesApiHelper.php
@@ -4,10 +4,10 @@
* Slack Files Api
*/
-namespace BitCode\FI\Actions\Slack;
+namespace BitApps\Integrations\Actions\Slack;
+use BitApps\Integrations\Core\Util\HttpHelper;
use CURLFile;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
@@ -48,6 +48,7 @@ public function uploadFiles($apiEndPoint, $data, $_accessToken)
}
$data['file'] = new CURLFile($file);
+
return HttpHelper::post(
$uploadFileEndpoint,
$data,
diff --git a/includes/Actions/Slack/RecordApiHelper.php b/includes/Actions/Slack/RecordApiHelper.php
index ad06d4652..9e7ed9be1 100644
--- a/includes/Actions/Slack/RecordApiHelper.php
+++ b/includes/Actions/Slack/RecordApiHelper.php
@@ -4,11 +4,11 @@
* Slack Record Api
*/
-namespace BitCode\FI\Actions\Slack;
+namespace BitApps\Integrations\Actions\Slack;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -59,13 +59,13 @@ public function execute($integrationDetails, $fieldValues)
$data = [
'channels' => $integrationDetails->channel_id,
'initial_comment' => $messagesBody,
- 'text' => $messagesBody,
- 'parse_mode' => $integrationDetails->parse_mode,
- 'file' => is_array($file) ? $file[0] : $file
+ 'text' => $messagesBody,
+ 'parse_mode' => $integrationDetails->parse_mode,
+ 'file' => \is_array($file) ? $file[0] : $file
];
$sendPhotoApiHelper = new FilesApiHelper($this->_accessToken);
- $recordApiResponse = $sendPhotoApiHelper->uploadFiles($this->_apiEndPoint, $data, $this->_accessToken);
+ $recordApiResponse = $sendPhotoApiHelper->uploadFiles($this->_apiEndPoint, $data, $this->_accessToken);
} else {
$data = [
'channel' => $integrationDetails->channel_id,
diff --git a/includes/Actions/Slack/Routes.php b/includes/Actions/Slack/Routes.php
index 0542697bc..56e7ea290 100644
--- a/includes/Actions/Slack/Routes.php
+++ b/includes/Actions/Slack/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Slack\SlackController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Slack\SlackController;
+use BitApps\Integrations\Core\Util\Route;
// Slack
Route::post('slack_authorization_and_fetch_channels', [SlackController::class, 'checkAuthorizationAndFetchChannels']);
diff --git a/includes/Actions/Slack/SlackController.php b/includes/Actions/Slack/SlackController.php
index 186e030cd..bdcfe403a 100644
--- a/includes/Actions/Slack/SlackController.php
+++ b/includes/Actions/Slack/SlackController.php
@@ -4,9 +4,9 @@
* slack Integration
*/
-namespace BitCode\FI\Actions\Slack;
+namespace BitApps\Integrations\Actions\Slack;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -72,6 +72,7 @@ public function execute($integrationData, $fieldValues)
|| empty($channel_id)
|| empty($body)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Slack'));
}
$recordApiHelper = new RecordApiHelper(self::APIENDPOINT, $access_token, $integrationId);
diff --git a/includes/Actions/SliceWp/RecordApiHelper.php b/includes/Actions/SliceWp/RecordApiHelper.php
index 3da85aaad..b7001a2e7 100644
--- a/includes/Actions/SliceWp/RecordApiHelper.php
+++ b/includes/Actions/SliceWp/RecordApiHelper.php
@@ -1,9 +1,9 @@
get_results($wpdb->prepare("SELECT id FROM {$wpdb->prefix}slicewp_affiliates WHERE {$wpdb->prefix}slicewp_affiliates.user_id = %d", $user_id));
return $affiliate[0]->id;
diff --git a/includes/Actions/SliceWp/Routes.php b/includes/Actions/SliceWp/Routes.php
index 4ebd9da4e..9445e363f 100644
--- a/includes/Actions/SliceWp/Routes.php
+++ b/includes/Actions/SliceWp/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\SliceWp\SliceWpController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SliceWp\SliceWpController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('slicewp_authorize', [SliceWpController::class, 'authorizeSliceWp']);
diff --git a/includes/Actions/SliceWp/SliceWpController.php b/includes/Actions/SliceWp/SliceWpController.php
index d4bb8ec69..ea7a40ccf 100644
--- a/includes/Actions/SliceWp/SliceWpController.php
+++ b/includes/Actions/SliceWp/SliceWpController.php
@@ -1,6 +1,6 @@
wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
diff --git a/includes/Actions/SmartSuite/Routes.php b/includes/Actions/SmartSuite/Routes.php
index 1bc72e016..94c16791d 100644
--- a/includes/Actions/SmartSuite/Routes.php
+++ b/includes/Actions/SmartSuite/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\SmartSuite\SmartSuiteController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SmartSuite\SmartSuiteController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('smartSuite_authentication', [SmartSuiteController::class, 'authentication']);
Route::post('smartSuite_fetch_all_solutions', [SmartSuiteController::class, 'getAllSolutions']);
diff --git a/includes/Actions/SmartSuite/SmartSuiteController.php b/includes/Actions/SmartSuite/SmartSuiteController.php
index 08a2c3417..8bbc6367d 100644
--- a/includes/Actions/SmartSuite/SmartSuiteController.php
+++ b/includes/Actions/SmartSuite/SmartSuiteController.php
@@ -4,9 +4,9 @@
* SmartSuite Integration
*/
-namespace BitCode\FI\Actions\SmartSuite;
+namespace BitApps\Integrations\Actions\SmartSuite;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
class SmartSuiteController
{
diff --git a/includes/Actions/SperseIO/SperseIOController.php b/includes/Actions/SperseIO/SperseIOController.php
index e546b2d42..8d0210735 100644
--- a/includes/Actions/SperseIO/SperseIOController.php
+++ b/includes/Actions/SperseIO/SperseIOController.php
@@ -4,9 +4,9 @@
* SperseIO Integration
*/
-namespace BitCode\FI\Actions\SperseIO;
+namespace BitApps\Integrations\Actions\SperseIO;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for SperseIOHandler
diff --git a/includes/Actions/SuiteDash/RecordApiHelper.php b/includes/Actions/SuiteDash/RecordApiHelper.php
index 6c3077aa7..c11fba387 100644
--- a/includes/Actions/SuiteDash/RecordApiHelper.php
+++ b/includes/Actions/SuiteDash/RecordApiHelper.php
@@ -4,10 +4,10 @@
* SuiteDash Record Api
*/
-namespace BitCode\FI\Actions\SuiteDash;
+namespace BitApps\Integrations\Actions\SuiteDash;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/SuiteDash/Routes.php b/includes/Actions/SuiteDash/Routes.php
index 72061c0fc..a0350c9a5 100644
--- a/includes/Actions/SuiteDash/Routes.php
+++ b/includes/Actions/SuiteDash/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\SuiteDash\SuiteDashController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\SuiteDash\SuiteDashController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('suite_dash_authentication', [SuiteDashController::class, 'authentication']);
Route::post('suite_dash_fetch_all_fields', [SuiteDashController::class, 'getAllFields']);
diff --git a/includes/Actions/SuiteDash/SuiteDashController.php b/includes/Actions/SuiteDash/SuiteDashController.php
index 6ef907f09..fb68dd68e 100644
--- a/includes/Actions/SuiteDash/SuiteDashController.php
+++ b/includes/Actions/SuiteDash/SuiteDashController.php
@@ -4,9 +4,9 @@
* SuiteDash Integration
*/
-namespace BitCode\FI\Actions\SuiteDash;
+namespace BitApps\Integrations\Actions\SuiteDash;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -115,6 +115,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($publicId) || empty($actionName) || empty($secretKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'SuiteDash'));
}
diff --git a/includes/Actions/SureCart/RecordApiHelper.php b/includes/Actions/SureCart/RecordApiHelper.php
index fdcfef905..a81121ae1 100644
--- a/includes/Actions/SureCart/RecordApiHelper.php
+++ b/includes/Actions/SureCart/RecordApiHelper.php
@@ -1,9 +1,9 @@
actionName;
if (empty($fieldMap) || empty($actionName) || empty($apiKey)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'SystemeIO'));
}
diff --git a/includes/Actions/TeamsForWooCommerceMemberships/RecordApiHelper.php b/includes/Actions/TeamsForWooCommerceMemberships/RecordApiHelper.php
index f5b3e1a06..2838f2c39 100644
--- a/includes/Actions/TeamsForWooCommerceMemberships/RecordApiHelper.php
+++ b/includes/Actions/TeamsForWooCommerceMemberships/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Teams for WooCommerce Memberships Record Api
*/
-namespace BitCode\FI\Actions\TeamsForWooCommerceMemberships;
+namespace BitApps\Integrations\Actions\TeamsForWooCommerceMemberships;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, update
@@ -53,6 +53,7 @@ public function execute($fieldValues, $fieldMap, $mainAction)
$defaultResponse = [
'success' => false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')
];
diff --git a/includes/Actions/TeamsForWooCommerceMemberships/Routes.php b/includes/Actions/TeamsForWooCommerceMemberships/Routes.php
index 86c1ae761..33fae41b4 100644
--- a/includes/Actions/TeamsForWooCommerceMemberships/Routes.php
+++ b/includes/Actions/TeamsForWooCommerceMemberships/Routes.php
@@ -1,13 +1,12 @@
type;
if (!\function_exists('tutor')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not installed or activated.', 'bit-integrations'), 'Tutor LMS'));
}
@@ -152,16 +159,29 @@ public static function resetCourse($selectedCourse)
$user_id = get_current_user_id();
$course_id = $selectedCourse[0];
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for TutorLMS reset lookup.
$completedLessonIds = $wpdb->get_col($wpdb->prepare("select post_id from {$wpdb->postmeta} where meta_key = '_tutor_course_id_for_lesson' AND meta_value = %d", $course_id));
if (\is_array($completedLessonIds) && \count($completedLessonIds)) {
$lessonMetaIds = [];
foreach ($completedLessonIds as $lesson_id) {
+ $lesson_id = absint($lesson_id);
$lessonMetaIds[] = '_tutor_completed_lesson_id_' . $lesson_id;
}
- $ids = implode("','", $lessonMetaIds);
- $wpdb->query($wpdb->prepare("DELETE from {$wpdb->usermeta} WHERE user_id = %d AND meta_key in(%s) ", $user_id, $ids));
+ // Create placeholders for IN clause
+ $placeholders = implode(', ', array_fill(0, \count($lessonMetaIds), '%s'));
+ $query = \sprintf(
+ "DELETE from {$wpdb->usermeta} WHERE user_id = %%d AND meta_key IN (%s)",
+ $placeholders
+ );
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
+ $wpdb->query(
+ $wpdb->prepare(
+ $query, // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
+ array_merge([$user_id], $lessonMetaIds)
+ )
+ );
}
$courseContents = tutils()->get_course_contents_by_id($course_id);
@@ -170,14 +190,17 @@ public static function resetCourse($selectedCourse)
foreach ($courseContents as $content) {
if ('tutor_quiz' === $content->post_type) {
$quiz_id = $content->ID;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for TutorLMS quiz cleanup
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->tutor_quiz_attempts} WHERE quiz_id = %d AND user_id = %d", $quiz_id, $user_id));
} elseif ('tutor_assignments' === $content->post_type) {
$assignment_id = $content->ID;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->comments} WHERE comment_type = 'tutor_assignment' AND user_id = %d AND comment_post_ID = %d", $user_id, $assignment_id));
}
}
}
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("DELETE from {$wpdb->comments} WHERE comment_agent = 'TutorLMSPlugin' AND comment_type = 'course_completed' AND comment_post_ID = %d AND user_id = %d", $course_id, $user_id));
return __('Course progress reseted', 'bit-integrations');
@@ -191,10 +214,12 @@ public static function completedCourse($course_id, $user_id)
$date = gmdate('Y-m-d H:i:s', tutor_time());
$hash = substr(md5(wp_generate_password(32) . $date . $course_id . $user_id), 0, 16);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for hash validation
$has_unique_hash = $wpdb->get_var($wpdb->prepare("SELECT COUNT(comment_ID) from {$wpdb->comments} WHERE comment_agent = 'TutorLMSPlugin' AND comment_type = 'course_completed' AND comment_content = %s", $hash));
while ((int) $has_unique_hash > 0) {
$hash = substr(md5(wp_generate_password(32) . $date . $course_id . $user_id), 0, 16);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$has_unique_hash = $wpdb->get_var($wpdb->prepare("SELECT COUNT(comment_ID) from {$wpdb->comments} WHERE comment_agent = 'TutorLMSPlugin' AND comment_type = 'course_completed' AND comment_content = %s", $hash));
}
@@ -210,6 +235,7 @@ public static function completedCourse($course_id, $user_id)
'user_id' => $user_id,
];
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct insert required for course completion
$wpdb->insert($wpdb->comments, $data);
do_action('tutor_course_complete_after', $course_id);
diff --git a/includes/Actions/Twilio/RecordApiHelper.php b/includes/Actions/Twilio/RecordApiHelper.php
index 90d17b84e..96e09fd08 100644
--- a/includes/Actions/Twilio/RecordApiHelper.php
+++ b/includes/Actions/Twilio/RecordApiHelper.php
@@ -1,10 +1,10 @@
update($multiSelectValues);
@@ -139,26 +139,31 @@ public static function getEventFields($fieldKey, $postField)
return [
VoxelHelper::generateFields(
$fieldKey . '_event_start_date',
+ // translators: %s: Placeholder value
wp_sprintf(__('Event Start Date (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_event_end_date',
+ // translators: %s: Placeholder value
wp_sprintf(__('Event End Date (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_event_frequency',
+ // translators: %s: Placeholder value
wp_sprintf(__('Event Frequency (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_repeat_every',
+ // translators: %s: Placeholder value
wp_sprintf(__('Event unit (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_event_until',
+ // translators: %s: Placeholder value
wp_sprintf(__('Event Until (%s)', 'bit-integrations'), $postField->get_label()),
false
)
@@ -170,16 +175,19 @@ public static function getLocationFields($fieldKey, $postField)
return [
VoxelHelper::generateFields(
$fieldKey . '_address',
+ // translators: %s: Placeholder value
wp_sprintf(__('Address (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_latitude',
+ // translators: %s: Placeholder value
wp_sprintf(__('Latitude (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_longitude',
+ // translators: %s: Placeholder value
wp_sprintf(__('Longitude (%s)', 'bit-integrations'), $postField->get_label()),
false
)
@@ -191,16 +199,19 @@ public static function getWorkHoursFields($fieldKey, $postField)
return [
VoxelHelper::generateFields(
$fieldKey . '_work_days',
+ // translators: %s: Placeholder value
wp_sprintf(__('Work Days (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_work_hours',
+ // translators: %s: Placeholder value
wp_sprintf(__('Work Hours (%s)', 'bit-integrations'), $postField->get_label()),
false
),
VoxelHelper::generateFields(
$fieldKey . '_work_status',
+ // translators: %s: Placeholder value
wp_sprintf(__('Work Status (%s)', 'bit-integrations'), $postField->get_label()),
false
)
diff --git a/includes/Actions/Voxel/VoxelTasks.php b/includes/Actions/Voxel/VoxelTasks.php
index 6a50ce41b..d2d881f04 100644
--- a/includes/Actions/Voxel/VoxelTasks.php
+++ b/includes/Actions/Voxel/VoxelTasks.php
@@ -1,6 +1,6 @@
false,
+ // translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')
];
diff --git a/includes/Actions/WPCafe/Routes.php b/includes/Actions/WPCafe/Routes.php
index 8b62ee948..8eb32b6b1 100644
--- a/includes/Actions/WPCafe/Routes.php
+++ b/includes/Actions/WPCafe/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\WPCafe\WPCafeController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WPCafe\WPCafeController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('wpcafe_authorize', [WPCafeController::class, 'wpcafeAuthorize']);
diff --git a/includes/Actions/WPCafe/WPCafeController.php b/includes/Actions/WPCafe/WPCafeController.php
index 256408d2b..980fb2a6a 100644
--- a/includes/Actions/WPCafe/WPCafeController.php
+++ b/includes/Actions/WPCafe/WPCafeController.php
@@ -4,7 +4,7 @@
* WPCafe Integration.
*/
-namespace BitCode\FI\Actions\WPCafe;
+namespace BitApps\Integrations\Actions\WPCafe;
use WP_Error;
diff --git a/includes/Actions/WPCourseware/RecordApiHelper.php b/includes/Actions/WPCourseware/RecordApiHelper.php
index 8ded798fa..1831eec37 100644
--- a/includes/Actions/WPCourseware/RecordApiHelper.php
+++ b/includes/Actions/WPCourseware/RecordApiHelper.php
@@ -1,8 +1,8 @@
topic->add($args);
if ($topicId) {
+ // translators: %s: Placeholder value
return ['success' => true, 'message' => wp_sprintf(__('New topic created, topic id: %s', 'bit-integrations'), $topicId)];
}
diff --git a/includes/Actions/WPForo/Routes.php b/includes/Actions/WPForo/Routes.php
index a3f0cb100..d925f5f93 100644
--- a/includes/Actions/WPForo/Routes.php
+++ b/includes/Actions/WPForo/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\WPForo\WPForoController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WPForo\WPForoController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('wpforo_authentication', [WPForoController::class, 'authentication']);
Route::post('wpforo_fetch_reputations', [WPForoController::class, 'getReputations']);
diff --git a/includes/Actions/WPForo/WPForoController.php b/includes/Actions/WPForo/WPForoController.php
index 237f547d2..3e5fdafb7 100644
--- a/includes/Actions/WPForo/WPForoController.php
+++ b/includes/Actions/WPForo/WPForoController.php
@@ -4,7 +4,7 @@
* WPForo Integration
*/
-namespace BitCode\FI\Actions\WPForo;
+namespace BitApps\Integrations\Actions\WPForo;
use WP_Error;
@@ -31,6 +31,7 @@ public function authentication()
public static function checkedWPForoExists()
{
if (!is_plugin_active('wpforo/wpforo.php')) {
+ // translators: %s: Plugin name
wp_send_json_error(wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'WPForo Plugin'), 400);
} else {
return true;
diff --git a/includes/Actions/WPFusion/WPFusionController.php b/includes/Actions/WPFusion/WPFusionController.php
index fc418ce34..49edb44ad 100644
--- a/includes/Actions/WPFusion/WPFusionController.php
+++ b/includes/Actions/WPFusion/WPFusionController.php
@@ -4,9 +4,9 @@
* WPFusion Integration
*/
-namespace BitCode\FI\Actions\WPFusion;
+namespace BitApps\Integrations\Actions\WPFusion;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for WPFusionHandler
diff --git a/includes/Actions/WPWebhooks/WPWebhooksController.php b/includes/Actions/WPWebhooks/WPWebhooksController.php
index 1b78c61c8..54d7593cd 100644
--- a/includes/Actions/WPWebhooks/WPWebhooksController.php
+++ b/includes/Actions/WPWebhooks/WPWebhooksController.php
@@ -4,9 +4,9 @@
* WPWebhooks Integration
*/
-namespace BitCode\FI\Actions\WPWebhooks;
+namespace BitApps\Integrations\Actions\WPWebhooks;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for WPWebhooksHandler
diff --git a/includes/Actions/WebHooks/Routes.php b/includes/Actions/WebHooks/Routes.php
index db9683724..4b39644da 100644
--- a/includes/Actions/WebHooks/Routes.php
+++ b/includes/Actions/WebHooks/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Actions\WebHooks\WebHooksController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('test_webhook', [WebHooksController::class, 'testWebhook']);
diff --git a/includes/Actions/WebHooks/WebHooksController.php b/includes/Actions/WebHooks/WebHooksController.php
index 4dc95c318..2fcdaaff4 100644
--- a/includes/Actions/WebHooks/WebHooksController.php
+++ b/includes/Actions/WebHooks/WebHooksController.php
@@ -4,11 +4,11 @@
* WebHooks Integration
*/
-namespace BitCode\FI\Actions\WebHooks;
+namespace BitApps\Integrations\Actions\WebHooks;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for webhooks
diff --git a/includes/Actions/WhatsApp/RecordApiHelper.php b/includes/Actions/WhatsApp/RecordApiHelper.php
index 76ac01b99..248aecec4 100644
--- a/includes/Actions/WhatsApp/RecordApiHelper.php
+++ b/includes/Actions/WhatsApp/RecordApiHelper.php
@@ -4,12 +4,11 @@
* WhatsApp Record Api
*/
-namespace BitCode\FI\Actions\WhatsApp;
+namespace BitApps\Integrations\Actions\WhatsApp;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
@@ -62,14 +61,10 @@ public function sendMessageWithText(
$token,
$phoneNumber
) {
- if (Helper::proActionFeatExists('WhatsApp', 'sendTextMessages')) {
- $textBody = $this->_integrationDetails->body;
- $response = apply_filters('btcbi_whatsapp_send_text_messages', $textBody, $fieldValues, $numberId, $token, $phoneNumber);
+ $textBody = $this->_integrationDetails->body;
+ $response = apply_filters('btcbi_whatsapp_send_text_messages', $textBody, $fieldValues, $numberId, $token, $phoneNumber);
- return static::handleFilterResponse($response);
- }
-
- return (object) ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
+ return static::handleFilterResponse($response);
}
public function sendMessageWithMedia(
@@ -78,13 +73,9 @@ public function sendMessageWithMedia(
$token,
$phoneNumber
) {
- if (Helper::proActionFeatExists('WhatsApp', 'sendMediaMessages')) {
- $response = apply_filters('btcbi_whatsapp_send_media_messages', $this->_integrationDetails, $fieldValues, $numberId, $token, $phoneNumber);
-
- return static::handleFilterResponse($response);
- }
+ $response = apply_filters('btcbi_whatsapp_send_media_messages', $this->_integrationDetails, $fieldValues, $numberId, $token, $phoneNumber);
- return (object) ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
+ return static::handleFilterResponse($response);
}
public function sendMessageWithContact(
@@ -93,13 +84,9 @@ public function sendMessageWithContact(
$token,
$phoneNumber
) {
- if (Helper::proActionFeatExists('WhatsApp', 'sendContactMessages')) {
- $response = apply_filters('btcbi_whatsapp_send_contact_messages', $this->_integrationDetails, $fieldValues, $numberId, $token, $phoneNumber);
-
- return static::handleFilterResponse($response);
- }
+ $response = apply_filters('btcbi_whatsapp_send_contact_messages', $this->_integrationDetails, $fieldValues, $numberId, $token, $phoneNumber);
- return (object) ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
+ return static::handleFilterResponse($response);
}
public function generateReqDataFromFieldMap($data, $fieldMap)
@@ -158,6 +145,7 @@ private function handleFilterResponse($response)
return $response;
}
+ // translators: %s: Placeholder value
return (object) ['error' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')];
}
diff --git a/includes/Actions/WhatsApp/Routes.php b/includes/Actions/WhatsApp/Routes.php
index 5352217d3..8a0846131 100644
--- a/includes/Actions/WhatsApp/Routes.php
+++ b/includes/Actions/WhatsApp/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\WhatsApp\WhatsAppController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WhatsApp\WhatsAppController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('whats_app_authorization', [WhatsAppController::class, 'authorization']);
Route::post('whats_app_all_template', [WhatsAppController::class, 'getAllTemplate']);
diff --git a/includes/Actions/WhatsApp/WhatsAppController.php b/includes/Actions/WhatsApp/WhatsAppController.php
index c15ea670f..6e5dc9bfd 100644
--- a/includes/Actions/WhatsApp/WhatsAppController.php
+++ b/includes/Actions/WhatsApp/WhatsAppController.php
@@ -4,10 +4,10 @@
* WhatsApp Integration
*/
-namespace BitCode\FI\Actions\WhatsApp;
+namespace BitApps\Integrations\Actions\WhatsApp;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for Trello integration
@@ -60,6 +60,7 @@ public function execute($integrationData, $fieldValues)
$messageType = isset($integrationDetails->messageTypeId) ? $integrationDetails->messageTypeId : $integrationDetails->messageType;
if (empty($messageType)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'WhatsApp'));
}
diff --git a/includes/Actions/WishlistMember/RecordApiHelper.php b/includes/Actions/WishlistMember/RecordApiHelper.php
index b0b1090bd..9e264e700 100644
--- a/includes/Actions/WishlistMember/RecordApiHelper.php
+++ b/includes/Actions/WishlistMember/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Wishlist Member Record Api
*/
-namespace BitCode\FI\Actions\WishlistMember;
+namespace BitApps\Integrations\Actions\WishlistMember;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
class RecordApiHelper
{
@@ -50,7 +50,7 @@ public function updateLevel($finalData)
}
return self::handleFilterResponse(
- apply_filters('wishlist_update_level', false, $finalData)
+ apply_filters('btcbi_wishlist_update_level', false, $finalData)
);
}
@@ -64,7 +64,7 @@ public function deleteLevel($finalData)
}
return self::handleFilterResponse(
- apply_filters('wishlist_delete_level', false, $finalData)
+ apply_filters('btcbi_wishlist_delete_level', false, $finalData)
);
}
@@ -84,11 +84,11 @@ public function createMember($finalData)
}
return self::handleFilterResponse(
- apply_filters('wishlist_create_member', false, $finalData, $levelId, $this->_integrationID)
+ apply_filters('btcbi_wishlist_create_member', false, $finalData, $levelId, $this->_integrationID)
);
}
- public function handleMemberEvents($finalData, $hook)
+ public function handleMemberEvents($finalData, $event)
{
if (empty($finalData['user_email'])) {
return [
@@ -97,12 +97,14 @@ public function handleMemberEvents($finalData, $hook)
];
}
- return self::handleFilterResponse(
- apply_filters($hook, false, $finalData)
- );
+ $response = 'update_member' === $event
+ ? apply_filters('btcbi_wishlist_update_member', false, $finalData)
+ : apply_filters('btcbi_wishlist_delete_member', false, $finalData);
+
+ return self::handleFilterResponse($response);
}
- public function handleMemberAddOrRemoveFromLevel($finalData, $hook)
+ public function handleMemberAddOrRemoveFromLevel($finalData, $event)
{
if (empty($finalData['user_email']) || empty($this->integrationDetails->level_id)) {
return [
@@ -111,9 +113,11 @@ public function handleMemberAddOrRemoveFromLevel($finalData, $hook)
];
}
- return self::handleFilterResponse(
- apply_filters($hook, false, $finalData, $this->integrationDetails->level_id)
- );
+ $response = 'add_member_to_level' === $event
+ ? apply_filters('btcbi_wishlist_add_member_to_level', false, $finalData, $this->integrationDetails->level_id)
+ : apply_filters('btcbi_wishlist_remove_member_from_level', false, $finalData, $this->integrationDetails->level_id);
+
+ return self::handleFilterResponse($response);
}
public function execute($fieldValues, $fieldMap, $action)
@@ -156,28 +160,28 @@ public function execute($fieldValues, $fieldMap, $action)
case 'update_member':
$type = 'member';
$type_name = 'Update Member';
- $recordApiResponse = $this->handleMemberEvents($finalData, 'wishlist_update_member');
+ $recordApiResponse = $this->handleMemberEvents($finalData, 'update_member');
break;
case 'delete_member':
$type = 'member';
$type_name = 'Delete Member';
- $recordApiResponse = $this->handleMemberEvents($finalData, 'wishlist_delete_member');
+ $recordApiResponse = $this->handleMemberEvents($finalData, 'delete_member');
break;
case 'add_member_to_level':
$type = 'member';
$type_name = 'Add Member To Level';
- $recordApiResponse = $this->handleMemberAddOrRemoveFromLevel($finalData, 'wishlist_add_member_to_level');
+ $recordApiResponse = $this->handleMemberAddOrRemoveFromLevel($finalData, 'add_member_to_level');
break;
case 'remove_member_from_level':
$type = 'member';
$type_name = 'Remove Member From Level';
- $recordApiResponse = $this->handleMemberAddOrRemoveFromLevel($finalData, 'wishlist_remove_member_from_level');
+ $recordApiResponse = $this->handleMemberAddOrRemoveFromLevel($finalData, 'remove_member_from_level');
break;
@@ -187,6 +191,7 @@ public function execute($fieldValues, $fieldMap, $action)
$recordApiResponse = [
'success' => false,
'code' => 'INVALID_ACTION',
+ // translators: %s: Placeholder value
'message' => wp_sprintf(__('The action %s is not supported.', 'bit-integrations'), $action),
];
diff --git a/includes/Actions/WishlistMember/Routes.php b/includes/Actions/WishlistMember/Routes.php
index 115bb9931..9e467dfe9 100644
--- a/includes/Actions/WishlistMember/Routes.php
+++ b/includes/Actions/WishlistMember/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\WishlistMember\WishlistMemberController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WishlistMember\WishlistMemberController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('wishlist_authorization', [WishlistMemberController::class, 'authorization']);
Route::post('get_wishlist_levels', [WishlistMemberController::class, 'getLevels']);
diff --git a/includes/Actions/WishlistMember/WishlistMemberController.php b/includes/Actions/WishlistMember/WishlistMemberController.php
index ffc920186..1196f88fa 100644
--- a/includes/Actions/WishlistMember/WishlistMemberController.php
+++ b/includes/Actions/WishlistMember/WishlistMemberController.php
@@ -4,7 +4,7 @@
* Wishlist Member Integration
*/
-namespace BitCode\FI\Actions\WishlistMember;
+namespace BitApps\Integrations\Actions\WishlistMember;
use WP_Error;
@@ -75,6 +75,7 @@ public function execute($integrationData, $fieldValues)
$action = $integrationDetails->action;
if (empty($fieldMap) || empty($action)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Wishlist Member'));
}
diff --git a/includes/Actions/WooCommerce/RecordApiHelper.php b/includes/Actions/WooCommerce/RecordApiHelper.php
index 93aa325e3..bdfab5fc7 100644
--- a/includes/Actions/WooCommerce/RecordApiHelper.php
+++ b/includes/Actions/WooCommerce/RecordApiHelper.php
@@ -4,10 +4,10 @@
* WooCommerce Record Api.
*/
-namespace BitCode\FI\Actions\WooCommerce;
+namespace BitApps\Integrations\Actions\WooCommerce;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Log\LogHandler;
use WC_Product_Download;
use WP_Error;
@@ -34,7 +34,8 @@ public function createCustomer($fieldMapCustomer, $required, $module, $fieldValu
}
if (\in_array($fieldPair->wcField, $required) && empty($fieldValues[$fieldPair->formField])) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for woocommerce %s', 'bit-integrations'), $fieldPair->wcField, $module));
+ // translators: %s: Placeholder value
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for woocommerce %2$s', 'bit-integrations'), $fieldPair->wcField, $module));
LogHandler::save($this->_integrationID, ['type' => $module, 'type_name' => 'create'], 'validation', $error);
return $error;
@@ -65,6 +66,7 @@ public function createCustomer($fieldMapCustomer, $required, $module, $fieldValu
return LogHandler::save($this->_integrationID, ['type' => 'customer', 'type_name' => 'create'], 'error', $response);
}
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using WooCommerce's own hook for compatibility
do_action('woocommerce_update_customer', $user_id);
LogHandler::save($this->_integrationID, ['type' => 'customer', 'type_name' => 'create'], 'success', $user_id);
@@ -87,7 +89,8 @@ public function findCustomer($fieldMapCustomer, $required, $module, $fieldValues
}
if (\in_array($fieldPair->wcField, $required) && empty($fieldValues[$fieldPair->formField])) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for woocommerce %s', 'bit-integrations'), $fieldPair->wcField, $module));
+ // translators: %s: Placeholder value
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for woocommerce %2$s', 'bit-integrations'), $fieldPair->wcField, $module));
LogHandler::save($this->_integrationID, ['type' => $module, 'type_name' => 'create'], 'validation', $error);
return $error;
@@ -109,6 +112,7 @@ public function changeStatusById($id, $status)
}
$order->update_status($status);
} else {
+ // translators: %s: Placeholder value
$error = new WP_Error('ORDER_NOT_FOUND', wp_sprintf(__('Order %s not found', 'bit-integrations'), $id));
LogHandler::save($this->_integrationID, ['type' => 'order status changed', 'type_name' => 'Change Status'], 'validation', $error);
@@ -129,6 +133,7 @@ public function statusChangeByOrderId($fieldData)
$order->update_status($fieldData['order_status']);
LogHandler::save($this->_integrationID, ['type' => 'order-status-change', 'type_name' => 'Change Status'], 'success', $fieldData['order_id']);
} else {
+ // translators: %s: Placeholder value
$error = new WP_Error('wrong order id', wp_sprintf(__('%s is not valid order id', 'bit-integrations'), $fieldData['order_id']));
LogHandler::save($this->_integrationID, ['type' => 'order status changed', 'type_name' => 'Change Status'], 'validation', $error);
@@ -150,6 +155,7 @@ public function changeStatus($orders, $fieldData)
}
LogHandler::save($this->_integrationID, ['type' => 'order-status-change', 'type_name' => 'Change Status'], 'success', $orderIds);
} else {
+ // translators: %s: Placeholder value
$error = new WP_Error('ORDER_NOT_FOUND', wp_sprintf(__('Order %s not found', 'bit-integrations'), $orders));
LogHandler::save($this->_integrationID, ['type' => 'order-status-change', 'type_name' => 'Change Status'], 'validation', $error);
@@ -256,7 +262,8 @@ public function execute($module, $fieldValues, $fieldMap, $uploadFieldMap, $requ
}
if (\in_array($fieldPair->wcField, $required) && empty($fieldValues[$fieldPair->formField])) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for woocommerce %s', 'bit-integrations'), $fieldPair->wcField, $module));
+ // translators: %s: Placeholder value
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for woocommerce %2$s', 'bit-integrations'), $fieldPair->wcField, $module));
LogHandler::save($this->_integrationID, ['type' => $module, 'type_name' => 'create'], 'validation', $error);
return $error;
@@ -365,6 +372,7 @@ public function execute($module, $fieldValues, $fieldMap, $uploadFieldMap, $requ
return LogHandler::save($this->_integrationID, ['type' => 'customer', 'type_name' => $entry_type], 'error', $response);
}
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using WooCommerce's own hook for compatibility
do_action('woocommerce_update_customer', $user_id);
LogHandler::save($this->_integrationID, ['type' => 'customer', 'type_name' => $entry_type], 'success', $user_id);
@@ -512,6 +520,7 @@ public function execute($module, $fieldValues, $fieldMap, $uploadFieldMap, $requ
$order->calculate_totals();
$order->save();
+ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using WooCommerce's own hook for compatibility
do_action('woocommerce_checkout_order_processed', $order->ID, [], $order);
if (is_wp_error($order) || !$order) {
@@ -618,8 +627,12 @@ public function upload_attachment($product_id, $url)
$image_url = $url;
$url_array = explode('/', $url);
$image_name = $url_array[\count($url_array) - 1];
- $image_data = file_get_contents($image_url);
+ $response = wp_remote_get($image_url);
+ if (is_wp_error($response)) {
+ return false;
+ }
+ $image_data = wp_remote_retrieve_body($response);
$upload_dir = wp_upload_dir();
$unique_file_name = wp_unique_filename($upload_dir['path'], $image_name);
$filename = basename($unique_file_name);
@@ -711,7 +724,8 @@ private function setFieldDataLine(&$fieldDataLineTemp, $fieldMapLine, $required,
}
if (\in_array($fieldPair->wcField, $required) && empty($fieldValues[$fieldPair->formField])) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for woocommerce %s', 'bit-integrations'), $fieldPair->wcField, $module));
+ // translators: %s: Placeholder value
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for woocommerce %2$s', 'bit-integrations'), $fieldPair->wcField, $module));
LogHandler::save($this->_integrationID, ['type' => $module, 'type_name' => 'create'], 'validation', $error);
return $error;
@@ -726,6 +740,7 @@ private function product_added_to_order($fieldDataLine, $module, $customer_id)
$product_id = wc_get_product_id_by_sku($lineItem->sku);
if (!$product_id) {
+ // translators: %s: Placeholder value
$error = new WP_Error('wrong product sku', wp_sprintf(__('%s is not valid product sku or product price is empty!', 'bit-integrations'), $lineItem->sku));
LogHandler::save($this->_integrationID, ['type' => $module, 'type_name' => 'create'], 'validation', $error);
diff --git a/includes/Actions/WooCommerce/Routes.php b/includes/Actions/WooCommerce/Routes.php
index df8799a92..5afd5a265 100644
--- a/includes/Actions/WooCommerce/Routes.php
+++ b/includes/Actions/WooCommerce/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\WooCommerce\WooCommerceController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\WooCommerce\WooCommerceController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('wc_authorize', [WooCommerceController::class, 'authorizeWC']);
Route::post('wc_refresh_fields', [WooCommerceController::class, 'refreshFields']);
diff --git a/includes/Actions/WooCommerce/WooCommerceController.php b/includes/Actions/WooCommerce/WooCommerceController.php
index 3c369b0e6..ff080981a 100644
--- a/includes/Actions/WooCommerce/WooCommerceController.php
+++ b/includes/Actions/WooCommerce/WooCommerceController.php
@@ -4,9 +4,9 @@
* WooCommerce Integration
*/
-namespace BitCode\FI\Actions\WooCommerce;
+namespace BitApps\Integrations\Actions\WooCommerce;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Log\LogHandler;
use WC_Data_Store;
use WP_Error;
@@ -26,6 +26,8 @@ public static function authorizeWC()
wp_send_json_success(true, 200);
}
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s must be activated!', 'bit-integrations'), 'WooCommerce'));
}
@@ -273,23 +275,18 @@ public function searchProjects($queryParams)
public static function allSubscriptionsProducts()
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Complex query for subscription products
$allSubscriptions = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT posts.ID, posts.post_title FROM %1s as posts
- LEFT JOIN %2s as rel ON (posts.ID = rel.object_id)
- WHERE rel.term_taxonomy_id IN (SELECT term_id FROM %3s WHERE slug IN ('subscription','variable-subscription'))
+ "SELECT posts.ID, posts.post_title FROM {$wpdb->posts} as posts
+ LEFT JOIN {$wpdb->term_relationships} as rel ON (posts.ID = rel.object_id)
+ WHERE rel.term_taxonomy_id IN (SELECT term_id FROM {$wpdb->terms} WHERE slug IN ('subscription','variable-subscription'))
AND posts.post_type = 'product'
AND posts.post_status = 'publish'
UNION ALL
- SELECT ID, post_title FROM %4s
+ SELECT ID, post_title FROM {$wpdb->posts}
WHERE post_type = 'shop_subscription'
AND post_status = 'publish'
- ORDER BY post_title",
- $wpdb->posts,
- $wpdb->term_relationships,
- $wpdb->terms,
- $wpdb->posts
- )
+ ORDER BY post_title"
);
$subscriptions[] = [
diff --git a/includes/Actions/WooCommerce/WooCommerceMetaFields.php b/includes/Actions/WooCommerce/WooCommerceMetaFields.php
index 6f80eac23..f1aa73cf3 100644
--- a/includes/Actions/WooCommerce/WooCommerceMetaFields.php
+++ b/includes/Actions/WooCommerce/WooCommerceMetaFields.php
@@ -4,9 +4,9 @@
* WooCommerce Fields.
*/
-namespace BitCode\FI\Actions\WooCommerce;
+namespace BitApps\Integrations\Actions\WooCommerce;
-use BitCode\FI\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\Helper;
class WooCommerceMetaFields
{
@@ -141,20 +141,16 @@ private static function getACFFields(array $types)
private static function getFlexibleCheckoutFields()
{
- if (Helper::proActionFeatExists('WC', 'getFlexibleCheckoutFields')) {
- $checkoutFields = [];
- $fields = apply_filters('btcbi_woocommerce_flexible_checkout_fields', []);
-
- foreach ($fields as $field) {
- $checkoutFields[$field->fieldName] = (object) [
- 'fieldKey' => $field->fieldKey,
- 'fieldName' => $field->fieldName
- ];
- }
-
- return $checkoutFields;
+ $checkoutFields = [];
+ $fields = apply_filters('btcbi_woocommerce_flexible_checkout_fields', []);
+
+ foreach ($fields as $field) {
+ $checkoutFields[$field->fieldName] = (object) [
+ 'fieldKey' => $field->fieldKey,
+ 'fieldName' => $field->fieldName
+ ];
}
- return [];
+ return $checkoutFields;
}
}
diff --git a/includes/Actions/WooCommerce/WooCommerceStaticFields.php b/includes/Actions/WooCommerce/WooCommerceStaticFields.php
index 5abcf76e9..eac10bf10 100644
--- a/includes/Actions/WooCommerce/WooCommerceStaticFields.php
+++ b/includes/Actions/WooCommerce/WooCommerceStaticFields.php
@@ -4,7 +4,7 @@
* WooCommerce Static Fields.
*/
-namespace BitCode\FI\Actions\WooCommerce;
+namespace BitApps\Integrations\Actions\WooCommerce;
class WooCommerceStaticFields
{
diff --git a/includes/Actions/Woodpecker/RecordApiHelper.php b/includes/Actions/Woodpecker/RecordApiHelper.php
index 2bb4da020..de3299aab 100644
--- a/includes/Actions/Woodpecker/RecordApiHelper.php
+++ b/includes/Actions/Woodpecker/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Woodpecker Record Api
*/
-namespace BitCode\FI\Actions\Woodpecker;
+namespace BitApps\Integrations\Actions\Woodpecker;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Woodpecker/Routes.php b/includes/Actions/Woodpecker/Routes.php
index 3abafea4e..48374cfe2 100644
--- a/includes/Actions/Woodpecker/Routes.php
+++ b/includes/Actions/Woodpecker/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Woodpecker\WoodpeckerController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Woodpecker\WoodpeckerController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('woodpecker_authentication', [WoodpeckerController::class, 'authentication']);
Route::post('woodpecker_fetch_all_campaigns', [WoodpeckerController::class, 'getAllCampagns']);
diff --git a/includes/Actions/Woodpecker/WoodpeckerController.php b/includes/Actions/Woodpecker/WoodpeckerController.php
index c3541c756..be70ec9ee 100644
--- a/includes/Actions/Woodpecker/WoodpeckerController.php
+++ b/includes/Actions/Woodpecker/WoodpeckerController.php
@@ -4,9 +4,9 @@
* Woodpecker Integration
*/
-namespace BitCode\FI\Actions\Woodpecker;
+namespace BitApps\Integrations\Actions\Woodpecker;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -70,6 +70,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($apiKey) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Woodpecker'));
}
diff --git a/includes/Actions/ZagoMail/RecordApiHelper.php b/includes/Actions/ZagoMail/RecordApiHelper.php
index f067b1944..dde6210e2 100644
--- a/includes/Actions/ZagoMail/RecordApiHelper.php
+++ b/includes/Actions/ZagoMail/RecordApiHelper.php
@@ -4,10 +4,10 @@
* ZagoMail Record Api
*/
-namespace BitCode\FI\Actions\ZagoMail;
+namespace BitApps\Integrations\Actions\ZagoMail;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,update, exist
diff --git a/includes/Actions/ZagoMail/Routes.php b/includes/Actions/ZagoMail/Routes.php
index dfd0983e0..1d4fe59cb 100644
--- a/includes/Actions/ZagoMail/Routes.php
+++ b/includes/Actions/ZagoMail/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZagoMail\ZagoMailController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZagoMail\ZagoMailController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zagoMail_authorize', [ZagoMailController::class, 'zagoMailAuthorize']);
Route::post('zagoMail_refresh_fields', [ZagoMailController::class, 'zagoMailRefreshFields']);
diff --git a/includes/Actions/ZagoMail/ZagoMailController.php b/includes/Actions/ZagoMail/ZagoMailController.php
index 05ef6b568..4af28533a 100644
--- a/includes/Actions/ZagoMail/ZagoMailController.php
+++ b/includes/Actions/ZagoMail/ZagoMailController.php
@@ -4,9 +4,9 @@
* ZagoMail Integration
*/
-namespace BitCode\FI\Actions\ZagoMail;
+namespace BitApps\Integrations\Actions\ZagoMail;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -214,6 +214,7 @@ public function execute($integrationData, $fieldValues)
empty($api_public_key)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Sendinblue'));
}
$recordApiHelper = new RecordApiHelper($api_public_key, $this->_integrationID);
diff --git a/includes/Actions/Zapier/ZapierController.php b/includes/Actions/Zapier/ZapierController.php
index aa155f469..4605d2f89 100644
--- a/includes/Actions/Zapier/ZapierController.php
+++ b/includes/Actions/Zapier/ZapierController.php
@@ -4,9 +4,9 @@
* Zapier Integration
*/
-namespace BitCode\FI\Actions\Zapier;
+namespace BitApps\Integrations\Actions\Zapier;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for ZapierHandler
diff --git a/includes/Actions/Zendesk/RecordApiHelper.php b/includes/Actions/Zendesk/RecordApiHelper.php
index 36370673e..7e9bd2904 100644
--- a/includes/Actions/Zendesk/RecordApiHelper.php
+++ b/includes/Actions/Zendesk/RecordApiHelper.php
@@ -4,10 +4,10 @@
* Zendesk Record Api
*/
-namespace BitCode\FI\Actions\Zendesk;
+namespace BitApps\Integrations\Actions\Zendesk;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert, upsert
diff --git a/includes/Actions/Zendesk/Routes.php b/includes/Actions/Zendesk/Routes.php
index 39a56f54c..dbec0f977 100644
--- a/includes/Actions/Zendesk/Routes.php
+++ b/includes/Actions/Zendesk/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\Zendesk\ZendeskController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\Zendesk\ZendeskController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zendesk_authentication', [ZendeskController::class, 'authentication']);
Route::post('zendesk_fetch_custom_fields', [ZendeskController::class, 'getCustomFields']);
diff --git a/includes/Actions/Zendesk/ZendeskController.php b/includes/Actions/Zendesk/ZendeskController.php
index f2e926bbc..b158d8eb2 100644
--- a/includes/Actions/Zendesk/ZendeskController.php
+++ b/includes/Actions/Zendesk/ZendeskController.php
@@ -4,9 +4,9 @@
* Zendesk Integration
*/
-namespace BitCode\FI\Actions\Zendesk;
+namespace BitApps\Integrations\Actions\Zendesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
use WP_Error;
/**
@@ -313,6 +313,7 @@ public function execute($integrationData, $fieldValues)
$actionName = $integrationDetails->actionName;
if (empty($fieldMap) || empty($authToken) || empty($actionName)) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Zendesk'));
}
diff --git a/includes/Actions/ZohoAnalytics/RecordApiHelper.php b/includes/Actions/ZohoAnalytics/RecordApiHelper.php
index d4b1aa867..d2c474acb 100644
--- a/includes/Actions/ZohoAnalytics/RecordApiHelper.php
+++ b/includes/Actions/ZohoAnalytics/RecordApiHelper.php
@@ -4,12 +4,12 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\ZohoAnalytics;
+namespace BitApps\Integrations\Actions\ZohoAnalytics;
-use BitCode\FI\Core\Util\ApiResponse as UtilApiResponse;
-use BitCode\FI\Core\Util\FieldValueHandler;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\ApiResponse as UtilApiResponse;
+use BitApps\Integrations\Core\Util\FieldValueHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Record insert,upsert
diff --git a/includes/Actions/ZohoAnalytics/Routes.php b/includes/Actions/ZohoAnalytics/Routes.php
index 8dcbd59e0..ca1b841c2 100644
--- a/includes/Actions/ZohoAnalytics/Routes.php
+++ b/includes/Actions/ZohoAnalytics/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoAnalytics\ZohoAnalyticsController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoAnalytics\ZohoAnalyticsController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zanalytics_generate_token', [ZohoAnalyticsController::class, 'generateTokens']);
Route::post('zanalytics_refresh_workspaces', [ZohoAnalyticsController::class, 'refreshWorkspacesAjaxHelper']);
diff --git a/includes/Actions/ZohoAnalytics/ZohoAnalyticsController.php b/includes/Actions/ZohoAnalytics/ZohoAnalyticsController.php
index 717d6b34a..5da2283f2 100644
--- a/includes/Actions/ZohoAnalytics/ZohoAnalyticsController.php
+++ b/includes/Actions/ZohoAnalytics/ZohoAnalyticsController.php
@@ -4,12 +4,12 @@
* ZohoAnalytics Integration
*/
-namespace BitCode\FI\Actions\ZohoAnalytics;
+namespace BitApps\Integrations\Actions\ZohoAnalytics;
-use BitCode\FI\Core\Util\ApiResponse as UtilApiResponse;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Core\Util\IpTool;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\ApiResponse as UtilApiResponse;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\IpTool;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
diff --git a/includes/Actions/ZohoBigin/FilesApiHelper.php b/includes/Actions/ZohoBigin/FilesApiHelper.php
index d90853879..bcb477fc1 100644
--- a/includes/Actions/ZohoBigin/FilesApiHelper.php
+++ b/includes/Actions/ZohoBigin/FilesApiHelper.php
@@ -4,9 +4,9 @@
* ZohoBigin Files Api
*/
-namespace BitCode\FI\Actions\ZohoBigin;
+namespace BitApps\Integrations\Actions\ZohoBigin;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/ZohoBigin/RecordApiHelper.php b/includes/Actions/ZohoBigin/RecordApiHelper.php
index dd1c1af7f..09640d92d 100644
--- a/includes/Actions/ZohoBigin/RecordApiHelper.php
+++ b/includes/Actions/ZohoBigin/RecordApiHelper.php
@@ -4,12 +4,12 @@
* ZohoBigin Record Api
*/
-namespace BitCode\FI\Actions\ZohoBigin;
+namespace BitApps\Integrations\Actions\ZohoBigin;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\DateTimeHelper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\DateTimeHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -50,7 +50,8 @@ public function execute($defaultConf, $module, $fieldValues, $fieldMap, $actions
}
if (empty($fieldData[$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho bigin, %s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
+ // translators: 1: Field name, 2: Module name
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for zoho bigin, %2$s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
LogHandler::save($this->_integID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
return $error;
@@ -136,6 +137,8 @@ public function execute($defaultConf, $module, $fieldValues, $fieldMap, $actions
$response = apply_filters('btcbi_zbigin_add_tags_to_records', $recordID, $module, $actions->selectedTags, $this->_apiDomain, $this->_defaultHeader);
if ($response === $recordID) {
+ // translators: %s: Plugin name
+ // translators: %s: Placeholder value
LogHandler::save($this->_integID, ['type' => 'tags', 'type_name' => $module], 'error', wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro'));
} elseif (\is_object($response) && isset($response->status) && $response->status === 'error') {
LogHandler::save($this->_integID, ['type' => 'tags', 'type_name' => $module], 'error', $response);
diff --git a/includes/Actions/ZohoBigin/Routes.php b/includes/Actions/ZohoBigin/Routes.php
index c592fed9d..d40589755 100644
--- a/includes/Actions/ZohoBigin/Routes.php
+++ b/includes/Actions/ZohoBigin/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoBigin\ZohoBiginController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoBigin\ZohoBiginController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zbigin_generate_token', [ZohoBiginController::class, 'generateTokens']);
Route::post('zbigin_refresh_modules', [ZohoBiginController::class, 'refreshModules']);
diff --git a/includes/Actions/ZohoBigin/ZohoBiginController.php b/includes/Actions/ZohoBigin/ZohoBiginController.php
index aa7c57acd..61c4624c5 100644
--- a/includes/Actions/ZohoBigin/ZohoBiginController.php
+++ b/includes/Actions/ZohoBigin/ZohoBiginController.php
@@ -4,11 +4,11 @@
* ZohoBigin Integration
*/
-namespace BitCode\FI\Actions\ZohoBigin;
+namespace BitApps\Integrations\Actions\ZohoBigin;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -428,6 +428,7 @@ public function execute($integrationData, $fieldValues)
|| empty($module)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
$error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Zoho Bigin'));
LogHandler::save($this->_integrationID, 'record', 'validation', $error);
diff --git a/includes/Actions/ZohoCRM/FilesApiHelper.php b/includes/Actions/ZohoCRM/FilesApiHelper.php
index dd036c8c8..f74dc75f2 100644
--- a/includes/Actions/ZohoCRM/FilesApiHelper.php
+++ b/includes/Actions/ZohoCRM/FilesApiHelper.php
@@ -4,10 +4,10 @@
* ZohoCrm Files Api
*/
-namespace BitCode\FI\Actions\ZohoCRM;
+namespace BitApps\Integrations\Actions\ZohoCRM;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
/**
* Provide functionality for Upload files
@@ -100,7 +100,17 @@ public function preparePayload($file)
$payload .= 'Content-Disposition: form-data; name="' . 'file'
. '"; filename="' . basename("{$file}") . '"' . "\r\n";
$payload .= "\r\n";
- $payload .= file_get_contents("{$file}");
+
+ if (filter_var($file, FILTER_VALIDATE_URL)) {
+ $response = wp_remote_get($file);
+ if (is_wp_error($response)) {
+ return '';
+ }
+ $payload .= wp_remote_retrieve_body($response);
+ } else {
+ $payload .= file_get_contents("{$file}");
+ }
+
$payload .= "\r\n";
}
diff --git a/includes/Actions/ZohoCRM/MetaDataApiHelper.php b/includes/Actions/ZohoCRM/MetaDataApiHelper.php
index 2de68015b..9fee46592 100644
--- a/includes/Actions/ZohoCRM/MetaDataApiHelper.php
+++ b/includes/Actions/ZohoCRM/MetaDataApiHelper.php
@@ -1,11 +1,12 @@
zohoFormField] = $this->formatFieldValue($fieldValues[$fieldPair->formField], $defaultConf->layouts->{$module}->{$layout}->fields->{$fieldPair->zohoFormField});
}
if (empty($fieldData[$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho crm, %s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
+ // translators: 1: Field name, 2: Module name
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for zoho crm, %2$s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
LogHandler::save($integId, wp_json_encode(['type' => 'record', 'type_name' => 'field']), 'validation', wp_json_encode($error));
return $error;
@@ -82,7 +83,8 @@ public function execute($integId, $defaultConf, $module, $layout, $fieldValues,
$currentLength = \strlen($fieldData[$fieldPair->zohoFormField]);
}
if ($currentLength > $requiredLength) {
- $error = new WP_Error('REQ_FIELD_LENGTH_EXCEEDED', wp_sprintf(__('zoho crm field %s\'s maximum length is %s, Given %s', 'bit-integrations'), $fieldPair->zohoFormField, $module));
+ // translators: 1: Field name, 2: Maximum length, 3: Given length
+ $error = new WP_Error('REQ_FIELD_LENGTH_EXCEEDED', wp_sprintf(__('zoho crm field %1$s\'s maximum length is %2$s, Given %3$s', 'bit-integrations'), $fieldPair->zohoFormField, $module));
LogHandler::save($integId, wp_json_encode(['type' => 'length', 'type_name' => 'field']), 'validation', wp_json_encode($error));
return $error;
@@ -122,8 +124,8 @@ public function execute($integId, $defaultConf, $module, $layout, $fieldValues,
$gclid = $fieldValues['gclid'];
} elseif (isset($fieldValues['zc_gad'])) {
$gclid = $fieldValues['zc_gad'];
- } elseif (isset($_REQUEST['zc_gad'])) {
- $zc_gad = wp_unslash($_REQUEST['zc_gad']);
+ } elseif (isset($_REQUEST['zc_gad'])) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
+ $zc_gad = wp_unslash($_REQUEST['zc_gad']); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized on next line
$gclid = sanitize_text_field($zc_gad);
}
if (!empty($gclid)) {
@@ -198,7 +200,7 @@ public function execute($integId, $defaultConf, $module, $layout, $fieldValues,
&& $recordApiResponse->data[0]->code === 'SUCCESS'
&& !empty($recordApiResponse->data[0]->details->id)
) {
- if (!empty($actions->tag_rec) && class_exists('BitCode\FI\Actions\ZohoCRM\TagApiHelper')) {
+ if (!empty($actions->tag_rec) && class_exists('BitApps\Integrations\Actions\ZohoCRM\TagApiHelper')) {
$tags = '';
$tag_rec = explode(',', $actions->tag_rec);
foreach ($tag_rec as $tag) {
diff --git a/includes/Actions/ZohoCRM/Routes.php b/includes/Actions/ZohoCRM/Routes.php
index 8ca7ad92b..d728ac754 100644
--- a/includes/Actions/ZohoCRM/Routes.php
+++ b/includes/Actions/ZohoCRM/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoCRM\ZohoCRMController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoCRM\ZohoCRMController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zcrm_get_users', [ZohoCRMController::class, 'refreshUsersAjaxHelper']);
Route::post('zcrm_get_tags', [ZohoCRMController::class, 'refreshTagListAjaxHelper']);
diff --git a/includes/Actions/ZohoCRM/TagApiHelper.php b/includes/Actions/ZohoCRM/TagApiHelper.php
index 6c161b6ad..18361fa30 100644
--- a/includes/Actions/ZohoCRM/TagApiHelper.php
+++ b/includes/Actions/ZohoCRM/TagApiHelper.php
@@ -1,11 +1,12 @@
zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
+ // translators: %s: Field name
+ // translators: %s: Placeholder value
$error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho campaigns', 'bit-integrations'), $fieldPair->zohoFormField));
// $this->_logResponse->apiResponse($this->_logID, $this->_integrationID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
diff --git a/includes/Actions/ZohoCampaigns/Routes.php b/includes/Actions/ZohoCampaigns/Routes.php
index ba82b70c8..52f84b24e 100644
--- a/includes/Actions/ZohoCampaigns/Routes.php
+++ b/includes/Actions/ZohoCampaigns/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoCampaigns\ZohoCampaignsController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoCampaigns\ZohoCampaignsController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zcampaigns_generate_token', [ZohoCampaignsController::class, 'generateTokens']);
Route::post('zcampaigns_refresh_lists', [ZohoCampaignsController::class, 'refreshLists']);
diff --git a/includes/Actions/ZohoCampaigns/ZohoCampaignsController.php b/includes/Actions/ZohoCampaigns/ZohoCampaignsController.php
index 7f18fe2c0..e90746f52 100644
--- a/includes/Actions/ZohoCampaigns/ZohoCampaignsController.php
+++ b/includes/Actions/ZohoCampaigns/ZohoCampaignsController.php
@@ -4,13 +4,13 @@
* ZohoCampaigns Integration
*/
-namespace BitCode\FI\Actions\ZohoCampaigns;
+namespace BitApps\Integrations\Actions\ZohoCampaigns;
-use BitCode\FI\Core\Util\ApiResponse as UtilApiResponse;
+use BitApps\Integrations\Core\Util\ApiResponse as UtilApiResponse;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
diff --git a/includes/Actions/ZohoCreator/FilesApiHelper.php b/includes/Actions/ZohoCreator/FilesApiHelper.php
index c5f216cf3..94e014bd6 100644
--- a/includes/Actions/ZohoCreator/FilesApiHelper.php
+++ b/includes/Actions/ZohoCreator/FilesApiHelper.php
@@ -4,9 +4,9 @@
* ZohoCreator Files Api
*/
-namespace BitCode\FI\Actions\ZohoCreator;
+namespace BitApps\Integrations\Actions\ZohoCreator;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/ZohoCreator/RecordApiHelper.php b/includes/Actions/ZohoCreator/RecordApiHelper.php
index e7ed77dfc..53d11504a 100644
--- a/includes/Actions/ZohoCreator/RecordApiHelper.php
+++ b/includes/Actions/ZohoCreator/RecordApiHelper.php
@@ -4,12 +4,12 @@
* ZohoCreator Record Api
*/
-namespace BitCode\FI\Actions\ZohoCreator;
+namespace BitApps\Integrations\Actions\ZohoCreator;
-use BitCode\FI\Core\Util\ApiResponse as UtilApiResponse;
-use BitCode\FI\Core\Util\DateTimeHelper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\ApiResponse as UtilApiResponse;
+use BitApps\Integrations\Core\Util\DateTimeHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -102,6 +102,7 @@ public function execute($formID, $entryID, $fieldValues, $integrationDetails)
}
}
if (empty($fieldData['data'][$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
+ // translators: %s: Placeholder value
$error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho creator', 'bit-integrations'), $fieldPair->zohoFormField));
// $this->_logResponse->apiResponse($this->_logID, $this->_integrationID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
diff --git a/includes/Actions/ZohoCreator/Routes.php b/includes/Actions/ZohoCreator/Routes.php
index 49839c815..5dba91eb4 100644
--- a/includes/Actions/ZohoCreator/Routes.php
+++ b/includes/Actions/ZohoCreator/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoCreator\ZohoCreatorController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoCreator\ZohoCreatorController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zcreator_generate_token', [ZohoCreatorController::class, 'generateTokens']);
Route::post('zcreator_refresh_applications', [ZohoCreatorController::class, 'refreshApplicationsAjaxHelper']);
diff --git a/includes/Actions/ZohoCreator/ZohoCreatorController.php b/includes/Actions/ZohoCreator/ZohoCreatorController.php
index afeaceddc..a48533b7e 100644
--- a/includes/Actions/ZohoCreator/ZohoCreatorController.php
+++ b/includes/Actions/ZohoCreator/ZohoCreatorController.php
@@ -4,10 +4,10 @@
* ZohoCreator Integration
*/
-namespace BitCode\FI\Actions\ZohoCreator;
+namespace BitApps\Integrations\Actions\ZohoCreator;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Core\Util\IpTool;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\IpTool;
/**
* Provide functionality for ZohoCrm integration
diff --git a/includes/Actions/ZohoDesk/FilesApiHelper.php b/includes/Actions/ZohoDesk/FilesApiHelper.php
index cea76352a..fb677facf 100644
--- a/includes/Actions/ZohoDesk/FilesApiHelper.php
+++ b/includes/Actions/ZohoDesk/FilesApiHelper.php
@@ -4,9 +4,9 @@
* ZohoDesk Files Api
*/
-namespace BitCode\FI\Actions\ZohoDesk;
+namespace BitApps\Integrations\Actions\ZohoDesk;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/ZohoDesk/RecordApiHelper.php b/includes/Actions/ZohoDesk/RecordApiHelper.php
index b1d1571f0..fb9dc706f 100644
--- a/includes/Actions/ZohoDesk/RecordApiHelper.php
+++ b/includes/Actions/ZohoDesk/RecordApiHelper.php
@@ -1,10 +1,10 @@
zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
+ // translators: %s: Placeholder value
$error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho bigin', 'bit-integrations'), $fieldPair->zohoFormField));
return LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => 'ticket-create'], 'error', $error);
diff --git a/includes/Actions/ZohoDesk/Routes.php b/includes/Actions/ZohoDesk/Routes.php
index de1f96533..8b45986ab 100644
--- a/includes/Actions/ZohoDesk/Routes.php
+++ b/includes/Actions/ZohoDesk/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoDesk\ZohoDeskController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoDesk\ZohoDeskController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zdesk_generate_token', [ZohoDeskController::class, 'generateTokens']);
Route::post('zdesk_refresh_organizations', [ZohoDeskController::class, 'refreshOrganizations']);
diff --git a/includes/Actions/ZohoDesk/ZohoDeskController.php b/includes/Actions/ZohoDesk/ZohoDeskController.php
index d52494a5c..9980abf04 100644
--- a/includes/Actions/ZohoDesk/ZohoDeskController.php
+++ b/includes/Actions/ZohoDesk/ZohoDeskController.php
@@ -4,11 +4,11 @@
* ZohoDesk Integration
*/
-namespace BitCode\FI\Actions\ZohoDesk;
+namespace BitApps\Integrations\Actions\ZohoDesk;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
-use BitCode\FI\Flow\FlowController;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for ZohoCrm integration
diff --git a/includes/Actions/ZohoFlow/ZohoFlowController.php b/includes/Actions/ZohoFlow/ZohoFlowController.php
index 2c44480ec..7b891f2dd 100644
--- a/includes/Actions/ZohoFlow/ZohoFlowController.php
+++ b/includes/Actions/ZohoFlow/ZohoFlowController.php
@@ -4,9 +4,9 @@
* ZohoFlow Integration
*/
-namespace BitCode\FI\Actions\ZohoFlow;
+namespace BitApps\Integrations\Actions\ZohoFlow;
-use BitCode\FI\Actions\WebHooks\WebHooksController;
+use BitApps\Integrations\Actions\WebHooks\WebHooksController;
/**
* Provide functionality for ZohoFlowHandler
diff --git a/includes/Actions/ZohoMarketingHub/RecordApiHelper.php b/includes/Actions/ZohoMarketingHub/RecordApiHelper.php
index 7743176f6..fafb4aad9 100644
--- a/includes/Actions/ZohoMarketingHub/RecordApiHelper.php
+++ b/includes/Actions/ZohoMarketingHub/RecordApiHelper.php
@@ -4,11 +4,11 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\ZohoMarketingHub;
+namespace BitApps\Integrations\Actions\ZohoMarketingHub;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
-use BitCode\FI\Log\LogHandler;
-use BitCode\FI\Core\Util\HttpHelper;
/**
* Provide functionality for Record insert,upsert
@@ -49,6 +49,7 @@ public function execute($list, $dataCenter, $fieldValues, $fieldMap, $required)
}
if (empty($fieldData[$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
+ // translators: %s: Placeholder value
$error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho marketing hub', 'bit-integrations'), $fieldPair->zohoFormField));
LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
diff --git a/includes/Actions/ZohoMarketingHub/Routes.php b/includes/Actions/ZohoMarketingHub/Routes.php
index aae348ef0..ee5b63e05 100644
--- a/includes/Actions/ZohoMarketingHub/Routes.php
+++ b/includes/Actions/ZohoMarketingHub/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoMarketingHub\ZohoMarketingHubController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoMarketingHub\ZohoMarketingHubController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zmarketingHub_generate_token', [ZohoMarketingHubController::class, 'generateTokens']);
Route::post('zmarketingHub_refresh_lists', [ZohoMarketingHubController::class, 'refreshLists']);
diff --git a/includes/Actions/ZohoMarketingHub/ZohoMarketingHubController.php b/includes/Actions/ZohoMarketingHub/ZohoMarketingHubController.php
index a2569b6ae..a4c309b6f 100644
--- a/includes/Actions/ZohoMarketingHub/ZohoMarketingHubController.php
+++ b/includes/Actions/ZohoMarketingHub/ZohoMarketingHubController.php
@@ -4,11 +4,11 @@
* ZohoMarketingHub Integration
*/
-namespace BitCode\FI\Actions\ZohoMarketingHub;
+namespace BitApps\Integrations\Actions\ZohoMarketingHub;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
/**
diff --git a/includes/Actions/ZohoProjects/FilesApiHelper.php b/includes/Actions/ZohoProjects/FilesApiHelper.php
index e4a1108ca..95e554dd7 100644
--- a/includes/Actions/ZohoProjects/FilesApiHelper.php
+++ b/includes/Actions/ZohoProjects/FilesApiHelper.php
@@ -4,9 +4,9 @@
* ZohoProjects Files Api
*/
-namespace BitCode\FI\Actions\ZohoProjects;
+namespace BitApps\Integrations\Actions\ZohoProjects;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/ZohoProjects/RecordApiHelper.php b/includes/Actions/ZohoProjects/RecordApiHelper.php
index 1ec4a5be1..f8893b642 100644
--- a/includes/Actions/ZohoProjects/RecordApiHelper.php
+++ b/includes/Actions/ZohoProjects/RecordApiHelper.php
@@ -4,12 +4,12 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\ZohoProjects;
+namespace BitApps\Integrations\Actions\ZohoProjects;
-use BitCode\FI\Core\Util\ApiResponse as UtilApiResponse;
-use BitCode\FI\Core\Util\FieldValueHandler;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\ApiResponse as UtilApiResponse;
+use BitApps\Integrations\Core\Util\FieldValueHandler;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -67,7 +67,8 @@ public function execute($formID, $entryID, $projectsConf, $dataCenter, $fieldMap
}
}
if (empty($fieldData[$sEvent][$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for %s', 'bit-integrations'), $fieldPair->zohoFormField, $sEvent));
+ // translators: %s: Placeholder value
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for %2$s', 'bit-integrations'), $fieldPair->zohoFormField, $sEvent));
// $this->_logResponse->apiResponse($this->_logID, $this->_integrationID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
LogHandler::save($this->_integrationID, wp_json_encode(['type' => 'record', 'type_name' => 'validation']), 'error', wp_json_encode($error));
diff --git a/includes/Actions/ZohoProjects/ZohoProjectsController.php b/includes/Actions/ZohoProjects/ZohoProjectsController.php
index 2309a69da..044a715e9 100644
--- a/includes/Actions/ZohoProjects/ZohoProjectsController.php
+++ b/includes/Actions/ZohoProjects/ZohoProjectsController.php
@@ -4,10 +4,10 @@
* ZohoProjects Integration
*/
-namespace BitCode\FI\Actions\ZohoProjects;
+namespace BitApps\Integrations\Actions\ZohoProjects;
-use BitCode\FI\Core\Util\IpTool;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\IpTool;
/**
* Provide functionality for ZohoCrm integration
diff --git a/includes/Actions/ZohoRecruit/FilesApiHelper.php b/includes/Actions/ZohoRecruit/FilesApiHelper.php
index 7d21d39ae..db10a34a8 100644
--- a/includes/Actions/ZohoRecruit/FilesApiHelper.php
+++ b/includes/Actions/ZohoRecruit/FilesApiHelper.php
@@ -4,9 +4,9 @@
* ZohoRecruit Files Api
*/
-namespace BitCode\FI\Actions\ZohoRecruit;
+namespace BitApps\Integrations\Actions\ZohoRecruit;
-use BitCode\FI\Core\Util\HttpHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
/**
* Provide functionality for Upload files
diff --git a/includes/Actions/ZohoRecruit/RecordApiHelper.php b/includes/Actions/ZohoRecruit/RecordApiHelper.php
index eeb2fa4ab..357c88aa0 100644
--- a/includes/Actions/ZohoRecruit/RecordApiHelper.php
+++ b/includes/Actions/ZohoRecruit/RecordApiHelper.php
@@ -4,12 +4,12 @@
* ZohoRecruit Record Api
*/
-namespace BitCode\FI\Actions\ZohoRecruit;
+namespace BitApps\Integrations\Actions\ZohoRecruit;
-use BitCode\FI\Core\Util\Common;
-use BitCode\FI\Core\Util\DateTimeHelper;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Log\LogHandler;
+use BitApps\Integrations\Core\Util\Common;
+use BitApps\Integrations\Core\Util\DateTimeHelper;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Log\LogHandler;
use WP_Error;
/**
@@ -52,7 +52,8 @@ public function execute($defaultConf, $module, $fieldValues, $fieldMap, $actions
}
if (empty($fieldData[$fieldPair->zohoFormField]) && \in_array($fieldPair->zohoFormField, $required)) {
- $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%s is required for zoho recruit, %s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
+ // translators: 1: Field name, 2: Module name
+ $error = new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('%1$s is required for zoho recruit, %2$s module', 'bit-integrations'), $fieldPair->zohoFormField, $module));
LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => 'field'], 'validation', $error);
return $error;
diff --git a/includes/Actions/ZohoRecruit/Routes.php b/includes/Actions/ZohoRecruit/Routes.php
index 139e81a33..90b6b689f 100644
--- a/includes/Actions/ZohoRecruit/Routes.php
+++ b/includes/Actions/ZohoRecruit/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\ZohoRecruit\ZohoRecruitController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\ZohoRecruit\ZohoRecruitController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('zrecruit_generate_token', [ZohoRecruitController::class, 'generateTokens']);
Route::post('zrecruit_refresh_modules', [ZohoRecruitController::class, 'refreshModules']);
diff --git a/includes/Actions/ZohoRecruit/ZohoRecruitController.php b/includes/Actions/ZohoRecruit/ZohoRecruitController.php
index d44a22fb3..dedec4935 100644
--- a/includes/Actions/ZohoRecruit/ZohoRecruitController.php
+++ b/includes/Actions/ZohoRecruit/ZohoRecruitController.php
@@ -4,10 +4,10 @@
* ZohoRecruit Integration
*/
-namespace BitCode\FI\Actions\ZohoRecruit;
+namespace BitApps\Integrations\Actions\ZohoRecruit;
-use BitCode\FI\Core\Util\HttpHelper;
-use BitCode\FI\Flow\FlowController;
+use BitApps\Integrations\Core\Util\HttpHelper;
+use BitApps\Integrations\Flow\FlowController;
use WP_Error;
/**
@@ -417,9 +417,11 @@ public function execute($integrationData, $fieldValues)
|| empty($module)
|| empty($fieldMap)
) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Zoho Recruit'));
}
if (empty($defaultDataConf->moduleData->{$module}->fields) || empty($defaultDataConf->modules->{$module})) {
+ // translators: %s: Placeholder value
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Zoho Recruit'));
}
if ((\intval($tokenDetails->generates_on) + (55 * 60)) < time()) {
diff --git a/includes/Actions/ZohoSheet/RecordApiHelper.php b/includes/Actions/ZohoSheet/RecordApiHelper.php
index 0d8eb1172..56fd35cae 100644
--- a/includes/Actions/ZohoSheet/RecordApiHelper.php
+++ b/includes/Actions/ZohoSheet/RecordApiHelper.php
@@ -1,10 +1,10 @@
version) ? sanitize_text_field($input->version) : '';
update_option('btcbi_changelog_version', $version);
diff --git a/includes/Admin/Admin_Bar.php b/includes/Admin/Admin_Bar.php
index 0b1700458..ce7ab9598 100644
--- a/includes/Admin/Admin_Bar.php
+++ b/includes/Admin/Admin_Bar.php
@@ -1,10 +1,14 @@
+ * @author BitApps Developer
*/
-namespace BitCode\FI\Core\Database;
+namespace BitApps\Integrations\Core\Database;
/**
* Database Migration
@@ -86,6 +86,7 @@ public static function migrate()
public static function fallbackDB()
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- Database migration for plugin rename
$wpdb->query("RENAME TABLE `{$wpdb->prefix}btcfi_log` TO `{$wpdb->prefix}btcbi_log`,
`{$wpdb->prefix}btcfi_flow` TO `{$wpdb->prefix}btcbi_flow`
`{$wpdb->prefix}btcfi_auth` TO `{$wpdb->prefix}btcbi_auth`
@@ -97,6 +98,7 @@ public static function fallbackDB()
];
foreach ($options as $key => $option) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query($wpdb->prepare("UPDATE `{$wpdb->prefix}options` SET `option_name` = %s WHERE `option_name` = %s", $option, $key));
}
}
diff --git a/includes/Core/Database/FlowModel.php b/includes/Core/Database/FlowModel.php
index 545bfad6e..640286be5 100644
--- a/includes/Core/Database/FlowModel.php
+++ b/includes/Core/Database/FlowModel.php
@@ -1,9 +1,10 @@
prefix . static::$table;
+ $tableName = esc_sql($wpdb->prefix . static::$table);
+ $intervalDays = absint($intervalDays);
- $result = $this->app_db->get_results("DELETE FROM {$tableName} WHERE {$condition}", OBJECT_K);
+ // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
+ $result = $this->app_db->get_results(
+ $wpdb->prepare(
+ 'DELETE FROM ' . $tableName . ' WHERE DATE_ADD(date(created_at), INTERVAL %d DAY) < CURRENT_DATE',
+ $intervalDays
+ ),
+ OBJECT_K
+ );
+ // phpcs:enable
return $result;
}
diff --git a/includes/Core/Database/Model.php b/includes/Core/Database/Model.php
index 4bb55cb23..3ac3c74ee 100644
--- a/includes/Core/Database/Model.php
+++ b/includes/Core/Database/Model.php
@@ -4,7 +4,7 @@
* Provides Base Model Class
*/
-namespace BitCode\FI\Core\Database;
+namespace BitApps\Integrations\Core\Database;
/**
* Undocumented class
diff --git a/includes/Core/Hooks/HookService.php b/includes/Core/Hooks/HookService.php
index 38f40d0a4..e3fffe334 100644
--- a/includes/Core/Hooks/HookService.php
+++ b/includes/Core/Hooks/HookService.php
@@ -1,11 +1,11 @@
[
- ['feat_name' => 'getAdvanceCustomHtmlFields', 'class' => '\BitApps\BTCBI_PRO\Triggers\CF7\CF7HelperPro', 'pro_init_v' => '2.1.6'],
- ],
- 'Dokan' => [
- ['feat_name' => 'vendorCreateActions', 'class' => '\BitApps\BTCBI_PRO\Actions\Dokan\DokanRecordHelper', 'pro_init_v' => '2.1.5'],
- ],
- 'FluentSupport' => [
- ['feat_name' => 'uploadTicketAttachments', 'class' => '\BitApps\BTCBI_PRO\Actions\FluentSupport\FluentSupportHelperPro', 'pro_init_v' => '2.1.7'],
- ],
- 'FreshSales' => [
- ['feat_name' => 'upsertRecord', 'class' => '\BitApps\BTCBI_PRO\Actions\FreshSales\FreshSalesRecordApiHelper', 'pro_init_v' => '2.1.1']
- ],
- 'Hubspot' => [
- ['feat_name' => 'updateEntity', 'class' => '\BitApps\BTCBI_PRO\Actions\Hubspot\HubspotHelperPro', 'pro_init_v' => '2.1.9'],
- ],
- 'GetResponse' => [
- ['feat_name' => 'autoResponderDay', 'class' => '\BitApps\BTCBI_PRO\Actions\GetResponse\GetResponseHelperPro', 'pro_init_v' => '2.1.9'],
- ],
- 'HighLevel' => [
- ['feat_name' => 'contactUtilities', 'class' => '\BitApps\BTCBI_PRO\Actions\HighLevel\HighLevelUtilitiesPro', 'pro_init_v' => '2.2.1'],
- ['feat_name' => 'opportunityUtilities', 'class' => '\BitApps\BTCBI_PRO\Actions\HighLevel\HighLevelUtilitiesPro', 'pro_init_v' => '2.2.1'],
- ],
- 'JetEngine' => [
- ['feat_name' => 'createPostTypeActions', 'class' => '\BitApps\BTCBI_PRO\Actions\JetEngine\JetEngineRecordHelper', 'pro_init_v' => '2.1.9'],
- ['feat_name' => 'createContentTypeActions', 'class' => '\BitApps\BTCBI_PRO\Actions\JetEngine\JetEngineRecordHelper', 'pro_init_v' => '2.1.9'],
- ['feat_name' => 'createTaxonomyActions', 'class' => '\BitApps\BTCBI_PRO\Actions\JetEngine\JetEngineRecordHelper', 'pro_init_v' => '2.1.9'],
- ['feat_name' => 'createRelationActions', 'class' => '\BitApps\BTCBI_PRO\Actions\JetEngine\JetEngineRecordHelper', 'pro_init_v' => '2.1.9'],
- ],
- 'MailChimp' => [
- ['feat_name' => 'addRemoveTag', 'class' => '\BitApps\BTCBI_PRO\Actions\MailChimp\MailChimpRecordHelper', 'pro_init_v' => '2.0.9']
- ],
- 'SendPulse' => [
- ['feat_name' => 'refreshFields', 'class' => '\BitApps\BTCBI_PRO\Actions\SendPulse\SendPulseHelperPro', 'pro_init_v' => '2.2.0']
- ],
- 'WC' => [
- ['feat_name' => 'getFlexibleCheckoutFields', 'class' => '\BitApps\BTCBI_PRO\Triggers\WC\WCHelperPro', 'pro_init_v' => '2.1.2'],
- ['feat_name' => 'getFlexibleCheckoutFieldsValue', 'class' => '\BitApps\BTCBI_PRO\Triggers\WC\WCHelperPro', 'pro_init_v' => '2.1.2']
- ],
- 'WhatsApp' => [
- ['feat_name' => 'sendTextMessages', 'class' => '\BitApps\BTCBI_PRO\Actions\WhatsApp\WhatsAppHelperPro', 'pro_init_v' => '2.1.6'],
- ['feat_name' => 'sendMediaMessages', 'class' => '\BitApps\BTCBI_PRO\Actions\WhatsApp\WhatsAppHelperPro', 'pro_init_v' => '2.1.6'],
- ['feat_name' => 'sendContactMessages', 'class' => '\BitApps\BTCBI_PRO\Actions\WhatsApp\WhatsAppHelperPro', 'pro_init_v' => '2.1.6'],
- ],
- ];
-}
diff --git a/includes/Core/Util/AllTriggersName.php b/includes/Core/Util/AllTriggersName.php
index b3fd6f586..ef68dfc8b 100644
--- a/includes/Core/Util/AllTriggersName.php
+++ b/includes/Core/Util/AllTriggersName.php
@@ -1,6 +1,6 @@
flow_details->value;
+ $fileContent = html_entity_decode($data->flow_details->value, ENT_QUOTES, 'UTF-8');
$fileName = $data->flow_details->randomFileName;
$checkingValue = "defined('ABSPATH')";
$isExits = str_contains($fileContent, $checkingValue);
$checkFuncIsValid = self::functionIsValid($fileContent);
-
+
if ($isExits && $checkFuncIsValid) {
- $filePath = wp_upload_dir();
- $fileLocation = "{$filePath['basedir']}/{$fileName}.php";
+ global $wp_filesystem;
+
+ if (empty($wp_filesystem)) {
+ require_once ABSPATH . '/wp-admin/includes/file.php';
+ WP_Filesystem();
+ }
+
+ $uploadDir = wp_upload_dir();
+ $fileLocation = "{$uploadDir['basedir']}/{$fileName}.php";
$data->flow_details->funcFileLocation = $fileLocation;
- file_put_contents($fileLocation, $fileContent);
+ $wp_filesystem->put_contents($fileLocation, $fileContent, FS_CHMOD_FILE);
} else {
wp_send_json_error('Your function is not valid, Failed to save file');
}
@@ -24,21 +31,7 @@ public static function functionValidateHandler($data)
public static function functionIsValid($fileContent)
{
- $temp_file = tmpfile();
-
- fwrite($temp_file, $fileContent);
-
- $filePath = stream_get_meta_data($temp_file)['uri'];
- $response = exec(escapeshellcmd("php -l {$filePath}"), $output, $return);
-
- if (str_contains($response, 'No syntax errors detected') || empty($response)) {
- fclose($temp_file);
-
- return true;
- }
-
- fclose($temp_file);
-
- return false;
+ $result = PhpSyntaxChecker::validate($fileContent);
+ return $result['is_valid'];
}
}
diff --git a/includes/Core/Util/DateTimeHelper.php b/includes/Core/Util/DateTimeHelper.php
index a6b8806c7..503409a2d 100644
--- a/includes/Core/Util/DateTimeHelper.php
+++ b/includes/Core/Util/DateTimeHelper.php
@@ -1,6 +1,6 @@
' . esc_html($siteName) . ''
- );
- $detailsTitle = esc_html__('Failure Details', 'bit-integrations');
- $flowLabel = esc_html__('Integration ID:', 'bit-integrations');
- $actionNameLabel = esc_html__('Action Name:', 'bit-integrations');
- $triggerNameLabel = esc_html__('Trigger Name:', 'bit-integrations');
- $recordTypeLabel = esc_html__('Record Type:', 'bit-integrations');
- $timeLabel = esc_html__('Time:', 'bit-integrations');
- $errorLabel = esc_html__('Error Message:', 'bit-integrations');
- $resolveText = esc_html__('To resolve this issue, please check the integration settings and logs:', 'bit-integrations');
- $viewIntegration = esc_html__('View Integration', 'bit-integrations');
- $viewLogs = esc_html__('View Logs', 'bit-integrations');
- $footerText = \sprintf(
- esc_html__('You are receiving this email because failure notifications are enabled in %s. You can disable these notifications in the plugin settings.', 'bit-integrations'),
- 'Bit Integrations'
- );
+ // Load email template
+ $templatePath = \dirname(BTCBI_PLUGIN_BASEDIR) . '/views/emails/integration-failure-notification.php';
+
+ ob_start();
+ include $templatePath;
- // Modern email template with improved structure and design
- return <<
-
-
-
-
- {$title}
-
-
-
-
-
-
-
-
-
-
- ⚠️ {$title}
-
- |
-
-
-
-
- |
-
- {$greeting}
-
-
-
-
-
- {$detailsTitle}
-
-
-
-
- |
- {$flowLabel}
- |
-
- #{$flowId}
- |
-
-
- |
- {$actionNameLabel}
- |
-
- {$actionName}
- |
-
-
- |
- {$triggerNameLabel}
- |
-
- {$triggerName}
- |
-
-
- |
- {$recordTypeLabel}
- |
-
- {$recordType}
- |
-
-
- |
- {$timeLabel}
- |
-
- {$timestamp}
- |
-
-
-
-
-
- {$errorLabel}
-
-
- {$errorMessage}
-
-
-
-
-
-
- |
-
-
-
-
- |
-
- {$footerText}
-
- |
-
-
- |
-
-
-
-
-HTML;
+ return ob_get_clean();
}
}
diff --git a/includes/Core/Util/Helper.php b/includes/Core/Util/Helper.php
index 780214e55..02fa6aa6c 100644
--- a/includes/Core/Util/Helper.php
+++ b/includes/Core/Util/Helper.php
@@ -1,8 +1,8 @@
';
- var_dump($data); // or var_dump($data);
- echo '';
- }
-
public static function isProActivate()
{
return \function_exists('btcbi_pro_activate_plugin');
}
- public static function proActionFeatExists($keyName, $featName)
- {
- $feature = static::findFeature($keyName, $featName);
-
- if (empty($feature)) {
- return false;
- }
-
- return (bool) (!empty($feature) && static::isProActivate() && \defined('BTCBI_PRO_VERSION') && version_compare(BTCBI_PRO_VERSION, $feature['pro_init_v'], '>=') && class_exists($feature['class']));
- }
-
- public static function findFeature($keyName, $featName)
- {
- $features = AllProActionFeat::$features;
-
- if (!isset($features[$keyName])) {
- return;
- }
-
- $featNames = array_column($features[$keyName], 'feat_name');
- $index = array_search($featName, $featNames);
-
- if ($index !== false) {
- return $features[$keyName][$index];
- }
-
- return [];
- }
-
public static function isUserLoggedIn()
{
return is_user_logged_in();
@@ -518,16 +494,19 @@ public static function jsonEncodeDecode($data)
public static function getPostIdFromReferer($referer)
{
- if ($referer === null) {
- $referer = $_SERVER['HTTP_REFERER'] ?? null;
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized on next line
+ if ($referer === null && isset($_SERVER['HTTP_REFERER'])) {
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized immediately
+ $referer = sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER']));
}
if (empty($referer)) {
return;
}
- $referer = wp_unslash($referer);
- $referer = sanitize_text_field($referer);
+ if (!\is_string($referer)) {
+ return;
+ }
return url_to_postid($referer);
}
diff --git a/includes/Core/Util/Hooks.php b/includes/Core/Util/Hooks.php
index 90324caf7..5336b8ae8 100644
--- a/includes/Core/Util/Hooks.php
+++ b/includes/Core/Util/Hooks.php
@@ -1,6 +1,10 @@
'ids', 'network_id' => get_current_network_id()]);
} else {
- $site_ids = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = {$wpdb->siteid};");
+ $cache_key = 'btcbi_multisite_site_ids_' . absint($wpdb->siteid);
+ $cache_group = 'btcbi';
+ $site_ids = wp_cache_get($cache_key, $cache_group);
+
+ if (false === $site_ids) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Fallback query for older multisite APIs.
+ $site_ids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = %d", $wpdb->siteid));
+ wp_cache_set($cache_key, $site_ids, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
}
return $site_ids;
diff --git a/includes/Core/Util/PhpSyntaxChecker.php b/includes/Core/Util/PhpSyntaxChecker.php
new file mode 100644
index 000000000..527670725
--- /dev/null
+++ b/includes/Core/Util/PhpSyntaxChecker.php
@@ -0,0 +1,47 @@
+ false,
+ 'message' => __('Empty code provided.', 'bit-integrations'),
+ ];
+ }
+
+ try {
+ if (\defined('TOKEN_PARSE')) {
+ token_get_all($code, TOKEN_PARSE);
+ } else {
+ token_get_all($code);
+ }
+
+ return [
+ 'is_valid' => true,
+ 'message' => __('No syntax errors detected in your function.', 'bit-integrations'),
+ ];
+ } catch (\ParseError $e) {
+ return [
+ 'is_valid' => false,
+ 'message' => $e->getMessage(),
+ ];
+ }
+ }
+
+
+}
diff --git a/includes/Core/Util/Post.php b/includes/Core/Util/Post.php
index c9752d829..4b701b6b1 100644
--- a/includes/Core/Util/Post.php
+++ b/includes/Core/Util/Post.php
@@ -1,6 +1,6 @@
gmdate('Y-m-d H:i:s'),
- '_bi_admin_email' => get_bloginfo('admin_email'),
- '_bi_date_default' => wp_date(get_option('date_format')),
- '_bi_date.m/d/y' => wp_date('m/d/y'),
- '_bi_date.d/m/y' => wp_date('d/m/y'),
- '_bi_date.y/m/d' => wp_date('y/m/d'),
- '_bi_time' => wp_date(get_option('time_format')),
- '_bi_weekday' => wp_date('l'),
+ '_bi_current_time' => gmdate('Y-m-d H:i:s'),
+ '_bi_admin_email' => get_bloginfo('admin_email'),
+ '_bi_date_default' => wp_date(get_option('date_format')),
+ '_bi_date.m/d/y' => wp_date('m/d/y'),
+ '_bi_date.d/m/y' => wp_date('d/m/y'),
+ '_bi_date.y/m/d' => wp_date('y/m/d'),
+ '_bi_time' => wp_date(get_option('time_format')),
+ '_bi_weekday' => wp_date('l'),
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized with sanitize_text_field
'_bi_http_referer_url' => isset($_SERVER['HTTP_REFERER']) ? sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER'])) : '',
'_bi_ip_address' => IpTool::getIP(),
'_bi_browser_name' => isset($browser) ? $browser : '',
diff --git a/includes/Core/Util/StoreInCache.php b/includes/Core/Util/StoreInCache.php
index 355161267..e500d04c7 100644
--- a/includes/Core/Util/StoreInCache.php
+++ b/includes/Core/Util/StoreInCache.php
@@ -1,8 +1,8 @@
prefix . 'btcbi_flow',
@@ -39,10 +45,7 @@ public function uninstall()
];
foreach ($tableArray as $tablename) {
$wpdb->query(
- $wpdb->prepare(
- 'DROP TABLE IF EXISTS %1s',
- $tablename
- )
+ "DROP TABLE IF EXISTS `{$tablename}`" // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot be parameterized
);
}
@@ -52,19 +55,19 @@ public function uninstall()
foreach ($columns as $column) {
$wpdb->query(
$wpdb->prepare(
- 'DELETE FROM %1s WHERE option_name= %2s',
- "{$wpdb->prefix}options",
- $column,
+ "DELETE FROM `{$wpdb->prefix}options` WHERE option_name = %s",
+ $column
)
);
}
$wpdb->query(
$wpdb->prepare(
- 'DELETE FROM %1s WHERE `option_name` LIKE %2s',
- "{$wpdb->prefix}options",
+ "DELETE FROM `{$wpdb->prefix}options` WHERE `option_name` LIKE %s",
'%btcbi_webhook_%'
)
);
+
+ // phpcs:enable
}
}
diff --git a/includes/Core/Util/User.php b/includes/Core/Util/User.php
index de9821b06..862a19844 100644
--- a/includes/Core/Util/User.php
+++ b/includes/Core/Util/User.php
@@ -1,6 +1,6 @@
flowID) || $param->flowID === []) {
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s can\'t be empty', 'bit-integrations'), 'Integration id'));
}
@@ -335,6 +341,7 @@ public function toggle_status($data)
$missing_field = 'Integration id';
}
if (!\is_null($missing_field)) {
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s can\'t be empty', 'bit-integrations'), $missing_field));
}
$integrationHandler = new FlowController();
@@ -514,8 +521,8 @@ public static function execute($triggered_entity, $triggered_entity_id, $data, $
*/
protected static function isActionExists($name)
{
- if (class_exists("BitCode\\FI\\Actions\\{$name}\\{$name}Controller")) {
- return "BitCode\\FI\\Actions\\{$name}\\{$name}Controller";
+ if (class_exists("BitApps\\Integrations\\Actions\\{$name}\\{$name}Controller")) {
+ return "BitApps\\Integrations\\Actions\\{$name}\\{$name}Controller";
} elseif (class_exists("BitApps\\BTCBI_PRO\\Actions\\{$name}\\{$name}Controller")) {
return "BitApps\\BTCBI_PRO\\Actions\\{$name}\\{$name}Controller";
}
@@ -532,8 +539,8 @@ protected static function isActionExists($name)
*/
protected static function isTriggerExists($name)
{
- if (class_exists("BitCode\\FI\\Triggers\\{$name}\\{$name}Controller")) {
- return "BitCode\\FI\\Triggers\\{$name}\\{$name}Controller";
+ if (class_exists("BitApps\\Integrations\\Triggers\\{$name}\\{$name}Controller")) {
+ return "BitApps\\Integrations\\Triggers\\{$name}\\{$name}Controller";
} elseif (class_exists("BitApps\\BTCBI_PRO\\Triggers\\{$name}\\{$name}Controller")) {
return "BitApps\\BTCBI_PRO\\Triggers\\{$name}\\{$name}Controller";
}
diff --git a/includes/Flow/FlowController.php b/includes/Flow/FlowController.php
index 4280b4353..3a5e9e25d 100644
--- a/includes/Flow/FlowController.php
+++ b/includes/Flow/FlowController.php
@@ -1,10 +1,10 @@
autoLogDelete($condition);
+ return $logModel->autoLogDelete($intervalDate);
}
/**
diff --git a/includes/Plugin.php b/includes/Plugin.php
index fc78c1398..dfc2eff63 100644
--- a/includes/Plugin.php
+++ b/includes/Plugin.php
@@ -1,6 +1,6 @@
['required' => true]]);
diff --git a/includes/Triggers/ActionHook/ActionHookController.php b/includes/Triggers/ActionHook/ActionHookController.php
index 6e83f27dc..372ff2178 100644
--- a/includes/Triggers/ActionHook/ActionHookController.php
+++ b/includes/Triggers/ActionHook/ActionHookController.php
@@ -1,10 +1,10 @@
triggered_entity_id)) {
- Hooks::add($flow->triggered_entity_id, [ActionHookController::class, 'handle'], 10, PHP_INT_MAX);
+ foreach ($btcbi_flows as $btcbi_flow) {
+ if (isset($btcbi_flow->triggered_entity_id)) {
+ Hooks::add($btcbi_flow->triggered_entity_id, [ActionHookController::class, 'handle'], 10, PHP_INT_MAX);
}
}
}
diff --git a/includes/Triggers/BitAssist/BitAssistController.php b/includes/Triggers/BitAssist/BitAssistController.php
index 0afba498b..664cc2b91 100644
--- a/includes/Triggers/BitAssist/BitAssistController.php
+++ b/includes/Triggers/BitAssist/BitAssistController.php
@@ -1,8 +1,8 @@
get_results($wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}btcbi_flow
WHERE status = true
diff --git a/includes/Triggers/Breakdance/BreakdanceController.php b/includes/Triggers/Breakdance/BreakdanceController.php
index 883c7c7b8..145b9b30e 100644
--- a/includes/Triggers/Breakdance/BreakdanceController.php
+++ b/includes/Triggers/Breakdance/BreakdanceController.php
@@ -1,8 +1,8 @@
self::findKeyPath($data, 'formId'), 'type' => 'text', 'label' => wp_sprintf(__('Form Id (%s)', 'bit-integrations'), $data['formId']), 'value' => $data['formId']],
+ // translators: %s: Placeholder value
['name' => self::findKeyPath($data, 'postId'), 'type' => 'text', 'label' => wp_sprintf(__('Post Id (%s)', 'bit-integrations'), $data['postId']), 'value' => $data['postId']]
];
diff --git a/includes/Triggers/Breakdance/Hooks.php b/includes/Triggers/Breakdance/Hooks.php
index ca99d59a3..a474d5660 100644
--- a/includes/Triggers/Breakdance/Hooks.php
+++ b/includes/Triggers/Breakdance/Hooks.php
@@ -4,6 +4,6 @@
exit;
}
-use BitCode\FI\Triggers\Breakdance\BreakdanceController;
+use BitApps\Integrations\Triggers\Breakdance\BreakdanceController;
// BreakdanceController::addAction();
diff --git a/includes/Triggers/Breakdance/Routes.php b/includes/Triggers/Breakdance/Routes.php
index aca147e9c..ac2983ab4 100644
--- a/includes/Triggers/Breakdance/Routes.php
+++ b/includes/Triggers/Breakdance/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Triggers\Breakdance\BreakdanceController;
+use BitApps\Integrations\Core\Util\Route;
+use BitApps\Integrations\Triggers\Breakdance\BreakdanceController;
Route::post('breakdance/test', [BreakdanceController::class, 'getTestData']);
Route::post('breakdance/test/remove', [BreakdanceController::class, 'removeTestData']);
diff --git a/includes/Triggers/CF7/CF7Controller.php b/includes/Triggers/CF7/CF7Controller.php
index 85fe6b987..cdeede066 100644
--- a/includes/Triggers/CF7/CF7Controller.php
+++ b/includes/Triggers/CF7/CF7Controller.php
@@ -1,10 +1,9 @@
'id', 'type' => 'text', 'label' => wp_sprintf(__('Form Id (%s)', 'bit-integrations'), $formData['id']), 'value' => $formData['id']],
+ // translators: %s: Placeholder value
['name' => 'form_post_id', 'type' => 'text', 'label' => wp_sprintf(__('Form Post Id (%s)', 'bit-integrations'), $formData['form_post_id']), 'value' => $formData['form_post_id']],
+ // translators: %s: Placeholder value
['name' => 'edit_post_id', 'type' => 'text', 'label' => wp_sprintf(__('Edit Post Id (%s)', 'bit-integrations'), $formData['edit_post_id']), 'value' => $formData['edit_post_id']],
];
diff --git a/includes/Triggers/Elementor/Hooks.php b/includes/Triggers/Elementor/Hooks.php
index 8cd0e8020..269ee6c17 100644
--- a/includes/Triggers/Elementor/Hooks.php
+++ b/includes/Triggers/Elementor/Hooks.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Core\Util\Hooks;
-use BitCode\FI\Triggers\Elementor\ElementorController;
+use BitApps\Integrations\Core\Util\Hooks;
+use BitApps\Integrations\Triggers\Elementor\ElementorController;
Hooks::add('elementor_pro/forms/new_record', [ElementorController::class, 'handle_elementor_submit']);
diff --git a/includes/Triggers/Elementor/Routes.php b/includes/Triggers/Elementor/Routes.php
index 8a2630df8..cada9897c 100644
--- a/includes/Triggers/Elementor/Routes.php
+++ b/includes/Triggers/Elementor/Routes.php
@@ -4,7 +4,7 @@
exit;
}
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Triggers\Elementor\ElementorController;
+use BitApps\Integrations\Core\Util\Route;
+use BitApps\Integrations\Triggers\Elementor\ElementorController;
Route::get('elementor/get', [ElementorController::class, 'getAllTasks']);
diff --git a/includes/Triggers/FallbackTrigger/FallbackHooks.php b/includes/Triggers/FallbackTrigger/FallbackHooks.php
index 0b1d42ec3..e9a6a153d 100644
--- a/includes/Triggers/FallbackTrigger/FallbackHooks.php
+++ b/includes/Triggers/FallbackTrigger/FallbackHooks.php
@@ -1,6 +1,6 @@
id)) {
if (isset($post_id)) {
@@ -172,7 +172,9 @@ public static function getFormidableFieldsValues($form, $entry_id)
$repeaterFld = $field->field_key;
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct queries needed for Formidable repeater fields
$allDividerFlds = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}frm_item_metas WHERE item_id IN (SELECT id FROM {$wpdb->prefix}frm_items WHERE parent_item_id = %d)", $entry_id));
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$allItemId = $wpdb->get_results($wpdb->prepare("SELECT id FROM {$wpdb->prefix}frm_items WHERE parent_item_id = %d", $entry_id));
$repeater = [];
@@ -1110,10 +1112,12 @@ public static function BuddyBossGetGroupInfo($group_id, $status = '', $extra = f
{
global $wpdb;
if ($status == '') {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for BuddyBoss group info
$group = $wpdb->get_results(
$wpdb->prepare("select id,name,description from {$wpdb->prefix}bp_groups where id = %d", $group_id)
);
} else {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$group = $wpdb->get_results(
$wpdb->prepare(
"SELECT id,name,description FROM {$wpdb->prefix}bp_groups WHERE id = %d AND status = %s",
@@ -1199,6 +1203,7 @@ public static function BuddyBossGetActivityInfo($activity_id, $group_id, $user_i
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for BuddyBoss activity
$activity = $wpdb->get_results($wpdb->prepare("select id,content from {$wpdb->prefix}bp_activity where id = %d", $activity_id));
$group = groups_get_group($group_id);
@@ -1638,10 +1643,22 @@ public static function getBuddyBossProfileField()
{
global $wpdb;
$table_name = $wpdb->prefix . 'bp_xprofile_fields';
+ $cache_key = 'btcbi_buddyboss_profile_fields';
+ $cache_group = 'btcbi';
- $query = $wpdb->prepare('SELECT id, type, name FROM %1s', $table_name);
+ $cached_fields = wp_cache_get($cache_key, $cache_group);
+ if (false !== $cached_fields) {
+ return $cached_fields;
+ }
+
+ $query = 'SELECT id, type, name FROM ' . esc_sql($table_name);
+
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Querying BuddyBoss custom table directly; table name is static and no user input is used.
+ $fields = $wpdb->get_results($query);
+
+ wp_cache_set($cache_key, $fields, $cache_group, 10 * MINUTE_IN_SECONDS);
- return $wpdb->get_results($query);
+ return $fields;
}
public static function buddyBossHandleUpdateProfile($user_id, $posted_field_ids, $errors, $old_values, $new_values)
@@ -2252,7 +2269,7 @@ public static function handleFormcraftSubmit($template, $meta, $content, $integr
public static function handleForminatorSubmit($entry, $form_id, $form_data)
{
- $post_id = Helper::getPostIdFromReferer($_SERVER['HTTP_REFERER']);
+ $post_id = Helper::getPostIdFromReferer(null);
if (!empty($form_id) && $flows = Flow::exists('Forminator', $form_id)) {
$data = [];
@@ -2377,6 +2394,7 @@ public static function gamipressHandleAwardAchievement($user_id, $achievement_id
}
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for GamiPress awards
$awards = $wpdb->get_results(
$wpdb->prepare('SELECT ID, post_name, post_title, post_type FROM wp_posts where id = %d', $achievement_id)
);
@@ -2741,7 +2759,7 @@ public static function happySaveImage($base64_img, $title)
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/bihappy';
if (!is_dir($upload_dir)) {
- mkdir($upload_dir, 0700);
+ wp_mkdir_p($upload_dir);
}
$upload_path = $upload_dir;
@@ -2777,7 +2795,7 @@ public static function happyGetPath($val)
public static function handleHappySubmit($submission, $form, $a)
{
- $post_id = Helper::getPostIdFromReferer($_SERVER['HTTP_REFERER']);
+ $post_id = Helper::getPostIdFromReferer(null);
$form_id = $form['ID'];
if (!empty($form_id) && $flows = Flow::exists('Happy', $form_id)) {
@@ -2816,6 +2834,7 @@ public static function jetEnginePostMetaData($meta_id, $post_id, $meta_key, $met
}
$postData = get_post($post_id);
+ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key, WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- Array payload keys, not a DB query.
$finalData = (array) $postData + ['meta_key' => $meta_key, 'meta_value' => $meta_value];
$postData = get_post($post_id);
$user_id = get_current_user_id();
@@ -2843,6 +2862,7 @@ public static function jetEnginePostMetaValueCheck($meta_id, $post_id, $meta_key
}
$postData = get_post($post_id);
+ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key, WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- Array payload keys, not a DB query.
$finalData = (array) $postData + ['meta_key' => $meta_key, 'meta_value' => $meta_value];
$postData = get_post($post_id);
$user_id = get_current_user_id();
@@ -3242,6 +3262,7 @@ public static function lifterLmsGetQuizDetail($quizId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for LifterLMS quiz details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title FROM {$wpdb->posts}
@@ -3339,6 +3360,7 @@ public static function lifterLmsGetLessonDetail($lessonId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for LifterLMS lesson details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title FROM {$wpdb->posts}
@@ -3376,6 +3398,7 @@ public static function lifterLmsGetCourseDetail($courseId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for LifterLMS course details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title FROM {$wpdb->posts}
@@ -3462,6 +3485,7 @@ public static function lifterLmsGetMembershipDetail($membershipId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for LifterLMS membership details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title FROM {$wpdb->posts}
@@ -3590,6 +3614,7 @@ public static function masterStudyGetCourseDetail($courseId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for MasterStudy course details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title,post_content FROM {$wpdb->posts}
@@ -3661,6 +3686,7 @@ public static function masterStudyGetLessonDetail($lessonId)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for MasterStudy lesson details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title,post_content FROM {$wpdb->posts}
@@ -3703,6 +3729,7 @@ public static function masterStudyGetQuizDetails($quiz_id)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for MasterStudy quiz details
return $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title,post_content FROM {$wpdb->posts}
@@ -3996,6 +4023,7 @@ public static function perchesMembershhipLevelByAdministator($level_id, $user_id
return;
}
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Direct query needed for PaidMembershipPro level details
$levels = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->pmpro_membership_levels} WHERE id = %d", $level_id));
$userData = self::paidMembershipProgetUserInfo($user_id);
$finalData = array_merge($userData, (array) $levels[0]);
@@ -4036,6 +4064,7 @@ public static function cancelMembershhipLevel($level_id, $user_id, $cancel_level
return;
}
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$levels = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->pmpro_membership_levels} WHERE id = %d", $cancel_level));
$userData = self::paidMembershipProgetUserInfo($user_id);
$finalData = array_merge($userData, (array) $levels[0]);
@@ -4058,6 +4087,7 @@ public static function perchesMembershipLevel($user_id, $morder)
$membership_id = $membership->id;
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$levels = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->pmpro_membership_levels} WHERE id = %d", $membership_id));
$userData = self::paidMembershipProgetUserInfo($user_id);
$finalData = array_merge($userData, (array) $levels[0]);
@@ -4075,6 +4105,7 @@ public static function perchesMembershipLevel($user_id, $morder)
public static function expiryMembershipLevel($user_id, $membership_id)
{
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$levels = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->pmpro_membership_levels} WHERE id = %d", $membership_id));
$userData = self::paidMembershipProgetUserInfo($user_id);
$finalData = array_merge($userData, (array) $levels[0]);
@@ -4130,12 +4161,14 @@ public static function handlePiotnetAddonFormSubmit($form_submission)
// PiotnetForms all functions
public static function handlePiotnetSubmit($fields)
{
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Third-party form submission
if (empty($_REQUEST['post_id'])) {
return;
}
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Third-party form submission
$post_id = sanitize_text_field(
- wp_unslash($_REQUEST['post_id'])
+ wp_unslash($_REQUEST['post_id']) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
);
$flows = Flow::exists('PiotnetForms', $post_id);
@@ -4683,6 +4716,7 @@ public static function studiocartNewOrderCreated($status, $order_data, $order_ty
public static function surecartPurchaseProduct($data)
{
if (!self::surecartPluginActive()) {
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s is not installed or activated.', 'bit-integrations'), 'SureCart'));
}
$accountDetails = \SureCart\Models\Account::find();
diff --git a/includes/Triggers/TriggerController.php b/includes/Triggers/TriggerController.php
index 0d1c7a5cd..d21efcda9 100644
--- a/includes/Triggers/TriggerController.php
+++ b/includes/Triggers/TriggerController.php
@@ -1,10 +1,10 @@
get_results(
$wpdb->prepare(
"SELECT meta_value FROM {$wpdb->prefix}commentmeta WHERE comment_id = %d AND meta_key = 'rating'",
diff --git a/includes/Triggers/WC/WCStaticFields.php b/includes/Triggers/WC/WCStaticFields.php
index 9880270c8..be8404d75 100644
--- a/includes/Triggers/WC/WCStaticFields.php
+++ b/includes/Triggers/WC/WCStaticFields.php
@@ -1,8 +1,8 @@
form->get();
@@ -65,6 +66,7 @@ public function getAll()
public function get_a_form($data)
{
if (!\function_exists('WPForms')) {
+ // translators: %s: Placeholder value
wp_send_json_error(wp_sprintf(__('%s is not installed or activated.', 'bit-integrations'), 'WPForms'));
}
if (empty($data->id)) {
diff --git a/includes/Triggers/Webhook/Routes.php b/includes/Triggers/Webhook/Routes.php
index 04db142f9..a02c40876 100644
--- a/includes/Triggers/Webhook/Routes.php
+++ b/includes/Triggers/Webhook/Routes.php
@@ -4,9 +4,9 @@
exit;
}
-use BitCode\FI\Core\Util\Helper;
-use BitCode\FI\Core\Util\Route;
-use BitCode\FI\Triggers\Webhook\WebhookController;
+use BitApps\Integrations\Core\Util\Helper;
+use BitApps\Integrations\Core\Util\Route;
+use BitApps\Integrations\Triggers\Webhook\WebhookController;
if (!Helper::isProActivate()) {
Route::get('webhook/new', [WebhookController::class, 'getNewHook']);
diff --git a/includes/Triggers/Webhook/WebhookController.php b/includes/Triggers/Webhook/WebhookController.php
index 26f02ed1b..3e503f18d 100644
--- a/includes/Triggers/Webhook/WebhookController.php
+++ b/includes/Triggers/Webhook/WebhookController.php
@@ -1,9 +1,9 @@
$maxDepth || !\is_array($array)) {
- error_log("Max depth reached or non-array at prefix: {$prefix}");
-
return [];
}
diff --git a/includes/controller/AuthDataController.php b/includes/controller/AuthDataController.php
index 107a8a460..bfa266087 100644
--- a/includes/controller/AuthDataController.php
+++ b/includes/controller/AuthDataController.php
@@ -1,8 +1,8 @@
prefix . Config::VAR_PREFIX . 'flow';
- $logTable = $wpdb->prefix . Config::VAR_PREFIX . 'log';
+ $cache_key = 'btcbi_analytics_flow_summary';
+ $cache_group = 'btcbi';
+ $flow = wp_cache_get($cache_key, $cache_group);
- $flow = $wpdb->get_results("
+ if (false === $flow) {
+ $flowTable = esc_sql($wpdb->prefix . Config::VAR_PREFIX . 'flow');
+ $logTable = esc_sql($wpdb->prefix . Config::VAR_PREFIX . 'log');
+
+ $query = '
SELECT
- JSON_UNQUOTE(JSON_EXTRACT(flow.flow_details, '$.type')) AS ActionName,
+ JSON_UNQUOTE(JSON_EXTRACT(flow.flow_details, \'$.type\')) AS ActionName,
flow.triggered_entity as TriggerName,
flow.status as status,
COUNT(log.flow_id) AS count
FROM
- {$flowTable} flow
+ ' . $flowTable . ' flow
LEFT JOIN
- {$logTable} log ON flow.id = log.flow_id
+ ' . $logTable . ' log ON flow.id = log.flow_id
GROUP BY
log.flow_id, ActionName, TriggerName, status
- ");
+ ';
+
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Querying plugin-owned analytics tables directly.
+ $flow = $wpdb->get_results($query);
+ wp_cache_set($cache_key, $flow, $cache_group, 10 * MINUTE_IN_SECONDS);
+ }
$additional_data['flows'] = $flow;
diff --git a/includes/controller/OneClickCredentialController.php b/includes/controller/OneClickCredentialController.php
deleted file mode 100644
index 15ea59bfc..000000000
--- a/includes/controller/OneClickCredentialController.php
+++ /dev/null
@@ -1,16 +0,0 @@
-actionName);
- $apiEndpoint = 'https://auth-apps.bitapps.pro/apps/' . $actionName;
-
- return HttpHelper::get($apiEndpoint, null, null);
- }
-}
diff --git a/includes/controller/PostController.php b/includes/controller/PostController.php
index d2fc2a8f4..ea570238a 100644
--- a/includes/controller/PostController.php
+++ b/includes/controller/PostController.php
@@ -1,8 +1,8 @@
' . esc_html($siteName) . ''
+);
+$btcbi_details_title = esc_html__('Failure Details', 'bit-integrations');
+$btcbi_flow_label = esc_html__('Integration ID:', 'bit-integrations');
+$btcbi_action_name_label = esc_html__('Action Name:', 'bit-integrations');
+$btcbi_trigger_name_label = esc_html__('Trigger Name:', 'bit-integrations');
+$btcbi_record_type_label = esc_html__('Record Type:', 'bit-integrations');
+$btcbi_time_label = esc_html__('Time:', 'bit-integrations');
+$btcbi_error_label = esc_html__('Error Message:', 'bit-integrations');
+$btcbi_resolve_text = esc_html__('To resolve this issue, please check the integration settings and logs:', 'bit-integrations');
+$btcbi_view_integration = esc_html__('View Integration', 'bit-integrations');
+$btcbi_view_logs = esc_html__('View Logs', 'bit-integrations');
+$btcbi_footer_text = sprintf(
+ // translators: %s: Placeholder value
+ esc_html__('You are receiving this email because failure notifications are enabled in %s. You can disable these notifications in the plugin settings.', 'bit-integrations'),
+ 'Bit Integrations'
+);
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚠️
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+ #
+ |
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+
+