Skip to content
4 changes: 2 additions & 2 deletions bitwpfi.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Plugin Name: Bit Integrations
* Plugin URI: https://bitapps.pro/bit-integrations
* Description: Bit Integrations is a platform that integrates with over 250+ 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.4.4
* Version: 2.4.5
* Author: Automation & Integration Plugin - Bit Apps
* Author URI: https://bitapps.pro
* Text Domain: bit-integrations
Expand All @@ -24,7 +24,7 @@
$btcbi_db_version = '1.1';

// Define most essential constants.
define('BTCBI_VERSION', '2.4.4');
define('BTCBI_VERSION', '2.4.5');
define('BTCBI_PLUGIN_MAIN_FILE', __FILE__);

require_once plugin_dir_path(__FILE__) . 'includes/loader.php';
Expand Down
18 changes: 11 additions & 7 deletions frontend-dev/src/Utils/StaticData/tutorialLinks.js
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ const tutorialLinks = {
docLink: 'https://bit-integrations.com/wp-docs/actions/mailster-integrations-as-an-action/'
},
wpforo: {
youTubeLink: '#',
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/wpforo-integrations-as-an-action/'
},
dokan: {
Expand All @@ -587,25 +587,29 @@ const tutorialLinks = {
docLink: 'https://bit-integrations.com/wp-docs/actions/drip-integrations/'
},
jetEngine: {
youTubeLink: '#',
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/jetengine-integrations-as-an-action/'
},
highLevel: {
youTubeLink: '#',
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/gohighlevel-integrations/'
},
theEventsCalendar: {
youTubeLink: '#',
youTubeLink: '',
docLink:
'https://bit-integrations.com/wp-docs/actions/the-events-calendar-integrations-as-an-action/'
},
lmfwc: {
youTubeLink: '#',
docLink: '#'
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/license-manager-for-woocommerce-integrations/'
},
voxel: {
youTubeLink: '#',
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/voxel-integrations-as-an-action/'
},
smartSuite: {
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/smartsuite-integrations/'
}
}
export default tutorialLinks
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
/* eslint-disable no-param-reassign */

import { useRecoilValue } from 'recoil'
import { $btcbi } from '../../../GlobalStates'
import { __ } from '../../../Utils/i18nwrap'
import TableCheckBox from '../../Utilities/TableCheckBox'

export default function MailPoetActions({ mailPoetConf, setMailPoetConf, formFields }) {
export default function MailPoetActions({ mailPoetConf, setMailPoetConf }) {
const btcbi = useRecoilValue($btcbi)
const { isPro } = btcbi

const actionHandler = (e, type) => {
const newConf = { ...mailPoetConf }
if (type === 'update') {
Expand All @@ -23,8 +28,23 @@ export default function MailPoetActions({ mailPoetConf, setMailPoetConf, formFie
onChange={(e) => actionHandler(e, 'update')}
className="wdt-200 mt-4 mr-2"
value="user_share"
title={__('Update MailPoet', 'bit-integrations')}
subTitle={__('Update Responses with Mailpoet exist Subscriber?', 'bit-integrations')}
isInfo={!isPro}
title={`${__('Update Subscriber', 'bit-integrations')} ${isPro ? '' : `(${__('Pro', 'bit-integrations')})`}`}
subTitle={
isPro
? __(
'Update Mailpoet exist Subscriber? First name, last name, and email may not be updated.',
'bit-integrations'
)
: sprintf(
__(
'The Bit Integration Pro v(%s) or above plugin needs to be installed and activated to enable the %s feature',
'bit-integrations'
),
'2.4.1',
__('Update Subscriber', 'bit-integrations')
)
}
/>
</div>
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Loader from '../../Loaders/Loader'
import { addFieldMap } from '../IntegrationHelpers/IntegrationHelpers'
import { refreshMailpoetHeader, refreshNewsLetter } from './MailPoetCommonFunc'
import MailPoetFieldMap from './MailPoetFieldMap'
import MailPoetActions from './MailPoetActions'

export default function MailPoetIntegLayout({
formID,
Expand Down Expand Up @@ -101,6 +102,7 @@ export default function MailPoetIntegLayout({
</div>
<br />
<br />
<MailPoetActions mailPoetConf={mailPoetConf} setMailPoetConf={setMailPoetConf} formFields={formFields} />
</>
)}
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ function Post({ formFields, setFlow, flow, allIntegURL }) {
<option disabled selected>
{__('Select Author', 'bit-integrations')}
</option>
<option value="logged_in_user">Logged In User</option>
<option value="logged_in_user">{__('Logged In User', 'bit-integrations')}</option>
{users?.map((user, key) => (
<option key={`acf-${key * 2}`} value={user.ID}>
{user.display_name}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ function Post({ allIntegURL }) {
<option disabled selected>
{__('Select Author', 'bit-integrations')}
</option>
<option value="logged_in_user">{__('Logged In User', 'bit-integrations')}</option>
{users?.map((user, key) => (
<option key={`acf-${key * 2}`} value={user.ID}>
{user.display_name}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'react-multiple-select-dropdown-lite/dist/index.css'
import { useRecoilState } from 'recoil'
import { $newFlow } from '../../../GlobalStates'
import { getAllAwardByAchievementType, getAllRank } from './GamiPressHelper/GamiPressCommonFunction'
import { __ } from '../../../Utils/i18nwrap'

const GamiPressHelper = ({ flow, setFlowData, edit = false }) => {
const id = !edit ? flow?.triggerData?.formID : flow.triggered_entity_id
Expand Down
13 changes: 4 additions & 9 deletions frontend-dev/src/pages/ChangelogToggle.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default function ChangelogToggle() {

// const source = !btcbi.isPro ? 'bit-integrations' : 'bit-integrations-pro'
// const dealURL = `https://bitapps.pro/new-year-deal/#bit-integrations-pricing`
const releaseDate = '16th January 2025'
const releaseDate = '25th January 2025'

// Changelog items format [{ 'label': '', 'desc': '', 'isPro': true }]
const changeLog = [
Expand All @@ -32,24 +32,19 @@ export default function ChangelogToggle() {
label: __('New Actions', 'bit-integrations'),
headClass: 'new-integration',
itemClass: 'integration-list',
items: [{ 'label': 'SmartSuite', 'desc': '', 'isPro': false }]
items: []
},
{
label: __('New Triggers', 'bit-integrations'),
headClass: 'new-trigger',
itemClass: 'integration-list',
items: [
{ 'label': 'Advanced Ads', 'desc': '', 'isPro': true },
{ 'label': 'BuddyPress', 'desc': '', 'isPro': true },
{ 'label': 'Ninja Tables', 'desc': '', 'isPro': true },
{ 'label': 'Sensei LMS', 'desc': '', 'isPro': true }
]
items: []
},
{
label: __('New Features', 'bit-integrations'),
headClass: 'new-feature',
itemClass: 'feature-list',
items: []
items: [{ 'label': 'MailPoet', 'desc': 'Added the update subscriber feature.', 'isPro': true }]
},
{
label: __('New Improvements', 'bit-integrations'),
Expand Down
10 changes: 8 additions & 2 deletions includes/Actions/CustomApi/CustomApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

namespace BitCode\FI\Actions\CustomApi;

use BitCode\FI\Log\LogHandler;
use BitCode\FI\Core\Util\Common;
use BitCode\FI\Core\Util\HttpHelper;
use BitCode\FI\Log\LogHandler;

/**
* Provide functionality for webhooks
Expand All @@ -28,7 +28,8 @@ public static function execute($integrationDetails, $fieldValues)

if ($details->authType === 'apikey') {
if ($details->apiKeyAddTo === 'query') {
$url = "{$url}" . "{$details->key}={$details->value}";
$separator = (strpos($url, '?') !== false) ? '&' : '?';
$url = "{$url}{$separator}{$details->key}={$details->value}";
} else {
$headers = array_merge($headers, [$details->key => $details->value]);
}
Expand Down Expand Up @@ -85,6 +86,11 @@ private static function urlParserWrapper($url, $fieldValues = [])

$cleanURL = "{$Scheme}{$Usr}{$Pass}{$Host}{$Port}{$Path}";
$params = [];

if (empty($Query)) {
return $cleanURL;
}

foreach (explode('&', $Query) as $keyValue) {
if (empty($keyValue)) {
continue;
Expand Down
8 changes: 5 additions & 3 deletions includes/Actions/Dropbox/RecordApiHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

namespace BitCode\FI\Actions\Dropbox;

use BitCode\FI\Core\Util\HttpHelper;
use BitCode\FI\Log\LogHandler;
use WP_Error;
use BitCode\FI\Log\LogHandler;
use BitCode\FI\Core\Util\Common;
use BitCode\FI\Core\Util\HttpHelper;

class RecordApiHelper
{
Expand All @@ -27,7 +28,8 @@ public function uploadFile($folder, $filePath)
return false;
}

$body = file_get_contents(trim($filePath));
$body = file_get_contents(Common::filePath(trim($filePath)));

if (!$body) {
return new WP_Error(423, 'Can\'t open file!');
}
Expand Down
5 changes: 3 additions & 2 deletions includes/Actions/MailPoet/MailPoetController.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ public function execute($integrationData, $fieldValues)
$integrationDetails = $integrationData->flow_details;
$integId = $integrationData->id;
$fieldMap = $integrationDetails->field_map;
$defaultDataConf = $integrationDetails->default;
$lists = $integrationDetails->lists;
$actions = $integrationDetails->actions;

if (empty($fieldMap)) {
return new WP_Error('REQ_FIELD_EMPTY', wp_sprintf(__('module, fields are required for %s api', 'bit-integrations'), 'Google sheet'));
Expand All @@ -104,7 +104,8 @@ public function execute($integrationData, $fieldValues)
$maiPoetApiResponse = $recordApiHelper->execute(
$fieldValues,
$fieldMap,
$lists
$lists,
$actions
);

if (is_wp_error($maiPoetApiResponse)) {
Expand Down
59 changes: 43 additions & 16 deletions includes/Actions/MailPoet/RecordApiHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

use Exception;
use BitCode\FI\Log\LogHandler;
use BitCode\FI\Core\Util\Common;

/**
* Provide functionality for Record insert,upsert
Expand All @@ -20,21 +21,39 @@ class RecordApiHelper

public function __construct($integId)
{
if (!class_exists(\MailPoet\API\API::class)) {
return;
}

$this->_integrationID = $integId;
static::$mailPoet_api = \MailPoet\API\API::MP('v1');
}

public function insertRecord($subscriber, $lists)
public function insertRecord($subscriber, $lists, $actions)
{
try {
// try to find if user is already a subscriber
$existing_subscriber = static::$mailPoet_api->getSubscriber($subscriber['email']);
$existingSubscriber = static::$mailPoet_api->getSubscriber($subscriber['email']);

if (!$existing_subscriber) {
if (!$existingSubscriber) {
return static::addSubscriber($subscriber, $lists);
}

return static::addSubscribeToLists($existing_subscriber['id'], $lists);
if (!empty($actions->update)) {
$response = apply_filters('btcbi_mailpoet_update_subscriber', $existingSubscriber['id'], $subscriber);

if ($response === $existingSubscriber['id']) {
$errorMessages = wp_sprintf(__('%s is not active or not installed', 'bit-integrations'), 'Bit Integration Pro');
} elseif (!$response['success']) {
$errorMessages = $response('message');
}

if (isset($errorMessages)) {
LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => 'update'], 'error', $errorMessages);
}
}

return static::addSubscribeToLists($existingSubscriber['id'], $lists);
} catch (\MailPoet\API\MP\v1\APIException $e) {
if ($e->getCode() == 4) {
// Handle the case where the subscriber doesn't exist
Expand All @@ -56,24 +75,15 @@ public function insertRecord($subscriber, $lists)
}
}

public function execute($fieldValues, $fieldMap, $lists)
public function execute($fieldValues, $fieldMap, $lists, $actions)
{
if (!class_exists(\MailPoet\API\API::class)) {
return;
}
$fieldData = [];

foreach ($fieldMap as $fieldKey => $fieldPair) {
if (!empty($fieldPair->mailPoetField)) {
if ($fieldPair->formField == 'custom' && isset($fieldPair->customValue)) {
$fieldData[$fieldPair->mailPoetField] = $fieldPair->customValue;
} else {
$fieldData[$fieldPair->mailPoetField] = $fieldValues[$fieldPair->formField];
}
}
}
$fieldData = static::setFieldMap($fieldMap, $fieldValues);
$recordApiResponse = $this->insertRecord($fieldData, $lists, $actions);

$recordApiResponse = $this->insertRecord($fieldData, $lists);
if ($recordApiResponse['success']) {
LogHandler::save($this->_integrationID, ['type' => 'record', 'type_name' => 'insert'], 'success', $recordApiResponse);
} else {
Expand All @@ -83,6 +93,23 @@ public function execute($fieldValues, $fieldMap, $lists)
return $recordApiResponse;
}

private static function setFieldMap($fieldMap, $fieldValues)
{
$fieldData = [];

foreach ($fieldMap as $fieldPair) {
if (empty($fieldPair->mailPoetField)) {
continue;
}

$fieldData[$fieldPair->mailPoetField] = ($fieldPair->formField == 'custom' && !empty($fieldPair->customValue))
? Common::replaceFieldWithValue($fieldPair->customValue, $fieldValues)
: $fieldValues[$fieldPair->formField];
}

return $fieldData;
}

private static function addSubscriber($subscriber, $lists)
{
try {
Expand Down
2 changes: 1 addition & 1 deletion includes/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class Config

public const VAR_PREFIX = 'btcbi_';

public const VERSION = '2.4.4';
public const VERSION = '2.4.5';

public const DB_VERSION = '1.0';

Expand Down
Loading