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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions backend/Actions/PopupMaker/PopupMakerController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

/**
* Popup Maker Integration
*/

namespace BitApps\Integrations\Actions\PopupMaker;

use WP_Error;

/**
* Provide functionality for Popup Maker integration
*/
class PopupMakerController
{
public static function isExists()
{
if (!\defined('POPMAKE_VERSION')) {
wp_send_json_error(
__(
'Popup Maker is not activated or not installed',
'bit-integrations'
),
400
);
}
}

public function refreshPopups()
{
self::isExists();

$response['popups'] = self::postDropdown('popup');

wp_send_json_success($response, 200);
}

public function refreshThemes()
{
self::isExists();

$response['themes'] = self::postDropdown('popup_theme');

wp_send_json_success($response, 200);
}

public function execute($integrationData, $fieldValues)
{
$integrationDetails = $integrationData->flow_details;
$integId = $integrationData->id;
$fieldMap = $integrationDetails->field_map;
$utilities = isset($integrationDetails->utilities) ? $integrationDetails->utilities : [];

if (empty($fieldMap)) {
return new WP_Error('field_map_empty', __('Field map is empty', 'bit-integrations'));
}

$recordApiHelper = new RecordApiHelper($integrationDetails, $integId);

return $recordApiHelper->execute($fieldValues, $fieldMap, $utilities);
}

private static function postDropdown($postType)
{
$options = [];

$posts = get_posts(
[
'post_type' => $postType,
'post_status' => ['publish', 'draft', 'pending', 'private'],
'orderby' => 'title',
'order' => 'ASC',
'posts_per_page' => -1,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
]
);

foreach ($posts as $post) {
$options[] = (object) [
'id' => $post->ID,
'title' => $post->post_title !== '' ? $post->post_title : \sprintf('#%d', $post->ID),
];
}

return $options;
}
}
157 changes: 157 additions & 0 deletions backend/Actions/PopupMaker/RecordApiHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
<?php

/**
* Popup Maker Record Api
*/

namespace BitApps\Integrations\Actions\PopupMaker;

use BitApps\Integrations\Config;
use BitApps\Integrations\Core\Util\Common;
use BitApps\Integrations\Core\Util\Hooks;
use BitApps\Integrations\Log\LogHandler;

/**
* Provide functionality for Popup Maker record create, update, delete
*/
class RecordApiHelper
{
private $_integrationID;

private $_integrationDetails;

public function __construct($integrationDetails, $integId)
{
$this->_integrationDetails = $integrationDetails;
$this->_integrationID = $integId;
}

/**
* Execute the integration
*
* @param array $fieldValues Field values from trigger
* @param array $fieldMap Field mapping
* @param array $utilities Optional actions to perform
*
* @return array
*/
public function execute($fieldValues, $fieldMap, $utilities)
{
if (!\defined('POPMAKE_VERSION')) {
return [
'success' => false,
'message' => __('Popup Maker is not installed or activated', 'bit-integrations')
];
}

$fieldData = static::generateReqDataFromFieldMap($fieldMap, $fieldValues);

$mainAction = $this->_integrationDetails->mainAction ?? '';

$defaultResponse = [
'success' => false,
// translators: %s: Plugin name
'message' => wp_sprintf(__('%s plugin is not installed or activate', 'bit-integrations'), 'Bit Integrations Pro')
];

switch ($mainAction) {
case 'create_popup':
$response = Hooks::apply(Config::withPrefix('popup_maker_create_popup'), $defaultResponse, $fieldData, $utilities, $this->_integrationDetails);
$type = 'popup';
$actionType = 'create_popup';

break;

case 'update_popup':
$response = Hooks::apply(Config::withPrefix('popup_maker_update_popup'), $defaultResponse, $fieldData, $utilities, $this->_integrationDetails);
$type = 'popup';
$actionType = 'update_popup';

break;

case 'delete_popup':
$response = Hooks::apply(Config::withPrefix('popup_maker_delete_popup'), $defaultResponse, $fieldData, $utilities);
$type = 'popup';
$actionType = 'delete_popup';

break;

case 'change_popup_status':
$response = Hooks::apply(Config::withPrefix('popup_maker_change_popup_status'), $defaultResponse, $fieldData, $this->_integrationDetails);
$type = 'popup';
$actionType = 'change_popup_status';

break;

case 'reset_popup_counts':
$response = Hooks::apply(Config::withPrefix('popup_maker_reset_popup_counts'), $defaultResponse, $fieldData);
$type = 'popup';
$actionType = 'reset_popup_counts';

break;

case 'track_popup_event':
$response = Hooks::apply(Config::withPrefix('popup_maker_track_popup_event'), $defaultResponse, $fieldData, $this->_integrationDetails);
$type = 'popup';
$actionType = 'track_popup_event';

break;

case 'create_subscriber':
$response = Hooks::apply(Config::withPrefix('popup_maker_create_subscriber'), $defaultResponse, $fieldData, $utilities, $this->_integrationDetails);
$type = 'subscriber';
$actionType = 'create_subscriber';

break;

case 'update_subscriber':
$response = Hooks::apply(Config::withPrefix('popup_maker_update_subscriber'), $defaultResponse, $fieldData, $utilities, $this->_integrationDetails);
$type = 'subscriber';
$actionType = 'update_subscriber';

break;

case 'delete_subscriber':
$response = Hooks::apply(Config::withPrefix('popup_maker_delete_subscriber'), $defaultResponse, $fieldData);
$type = 'subscriber';
$actionType = 'delete_subscriber';

break;

default:
$response = [
'success' => false,
'message' => __('Invalid action', 'bit-integrations')
];
$type = 'PopupMaker';
$actionType = 'unknown';

break;
}

$responseType = isset($response['success']) && $response['success'] ? 'success' : 'error';
LogHandler::save($this->_integrationID, ['type' => $type, 'type_name' => $actionType], $responseType, $response);

return $response;
}

protected static function generateReqDataFromFieldMap($fieldMap, $fieldValues)
{
$dataFinal = [];

foreach ($fieldMap as $item) {
$triggerValue = $item->formField;
$actionValue = $item->popupMakerField;

if (empty($actionValue)) {
continue;
}

$dataFinal[$actionValue] = $triggerValue === 'custom' && isset($item->customValue)
? Common::replaceFieldWithValue($item->customValue, $fieldValues)
: $fieldValues[$triggerValue] ?? '';
}

return $dataFinal;
}
}
11 changes: 11 additions & 0 deletions backend/Actions/PopupMaker/Routes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

if (!defined('ABSPATH')) {
exit;
}

use BitApps\Integrations\Actions\PopupMaker\PopupMakerController;
use BitApps\Integrations\Core\Util\Route;

Route::post('refresh_popup_maker_popups', [PopupMakerController::class, 'refreshPopups']);
Route::post('refresh_popup_maker_themes', [PopupMakerController::class, 'refreshThemes']);
3 changes: 3 additions & 0 deletions frontend/src/components/AllIntegrations/EditInteg.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ const EditBookly = lazy(() => import('./Bookly/EditBookly'))
const EditSureContact = lazy(() => import('./SureContact/EditSureContact'))
const EditBrilliantDirectories = lazy(() => import('./BrilliantDirectories/EditBrilliantDirectories'))
const EditFluentCart = lazy(() => import('./FluentCart/EditFluentCart'))
const EditPopupMaker = lazy(() => import('./PopupMaker/EditPopupMaker'))
const EditNextCrm = lazy(() => import('./NextCrm/EditNextCrm'))
const EditFluentPlayer = lazy(() => import('./FluentPlayer/EditFluentPlayer'))
const EditBitCrm = lazy(() => import('./BitCrm/EditBitCrm'))
Expand Down Expand Up @@ -640,6 +641,8 @@ const IntegType = memo(({ allIntegURL, flow }) => {
return <EditBrilliantDirectories allIntegURL={allIntegURL} />
case 'FluentCart':
return <EditFluentCart allIntegURL={allIntegURL} />
case 'PopupMaker':
return <EditPopupMaker allIntegURL={allIntegURL} />
case 'FluentPlayer':
return <EditFluentPlayer allIntegURL={allIntegURL} />
case 'BitCrm':
Expand Down
13 changes: 5 additions & 8 deletions frontend/src/components/AllIntegrations/IntegInfo.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -184,13 +184,12 @@ const UltimateAffiliateProAuthorization = lazy(
() => import('./UltimateAffiliatePro/UltimateAffiliateProAuthorization')
)
const BooklyAuthorization = lazy(() => import('./Bookly/BooklyAuthorization'))
const SureContactAuthorization = lazy(
() => import('./SureContact/SureContactAuthorization')
)
const SureContactAuthorization = lazy(() => import('./SureContact/SureContactAuthorization'))
const BrilliantDirectoriesAuthorization = lazy(
() => import('./BrilliantDirectories/BrilliantDirectoriesAuthorization')
)
const FluentCartAuthorization = lazy(() => import('./FluentCart/FluentCartAuthorization'))
const PopupMakerAuthorization = lazy(() => import('./PopupMaker/PopupMakerAuthorization'))
const NextCrmAuthorization = lazy(() => import('./NextCrm/NextCrmAuthorization'))
const FluentPlayerAuthorization = lazy(() => import('./FluentPlayer/FluentPlayerAuthorization'))
const BitCrmAuthorization = lazy(() => import('./BitCrm/BitCrmAuthorization'))
Expand Down Expand Up @@ -679,14 +678,12 @@ const IntegrationInfo = memo(({ integrationConf, location, editUrl }) => {
return <SureContactAuthorization sureContactConf={integrationConf} step={1} isInfo />
case 'BrilliantDirectories':
return (
<BrilliantDirectoriesAuthorization
brilliantDirectoriesConf={integrationConf}
step={1}
isInfo
/>
<BrilliantDirectoriesAuthorization brilliantDirectoriesConf={integrationConf} step={1} isInfo />
)
case 'FluentCart':
return <FluentCartAuthorization fluentCartConf={integrationConf} step={1} isInfo />
case 'PopupMaker':
return <PopupMakerAuthorization popupMakerConf={integrationConf} step={1} isInfo />
case 'NextCrm':
return <NextCrmAuthorization nextCrmConf={integrationConf} step={1} isInfo />
case 'FluentPlayer':
Expand Down
10 changes: 10 additions & 0 deletions frontend/src/components/AllIntegrations/NewInteg.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ const Bookly = lazy(() => import('./Bookly/Bookly'))
const SureContact = lazy(() => import('./SureContact/SureContact'))
const BrilliantDirectories = lazy(() => import('./BrilliantDirectories/BrilliantDirectories'))
const FluentCart = lazy(() => import('./FluentCart/FluentCart'))
const PopupMaker = lazy(() => import('./PopupMaker/PopupMaker'))
const NextCrm = lazy(() => import('./NextCrm/NextCrm'))
const FluentPlayer = lazy(() => import('./FluentPlayer/FluentPlayer'))
const BitCrm = lazy(() => import('./BitCrm/BitCrm'))
Expand Down Expand Up @@ -1780,6 +1781,15 @@ const NewIntegs = memo(({ integUrlName, allIntegURL, flow, setFlow }) => {
setFlow={setFlow}
/>
)
case 'PopupMaker':
return (
<PopupMaker
allIntegURL={allIntegURL}
formFields={flow?.triggerData?.fields}
flow={flow}
setFlow={setFlow}
/>
)
case 'FluentPlayer':
return (
<FluentPlayer
Expand Down
Loading