diff --git a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
index f7ab0881..62ba4f96 100644
--- a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
+++ b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
@@ -9,7 +9,10 @@ import { checkIsPro, getProLabel } from '../../Utilities/ProUtilHelpers'
import { addFieldMap, delFieldMap, handleFieldMapping } from '../IntegrationHelpers/IntegrationHelpers'
import UserRegistrationMembershipFieldMap from './UserRegistrationMembershipFieldMap'
import { refreshForms, refreshFormFields } from './UserRegistrationMembershipCommonFunc'
-import { modules } from './staticData'
+
+export const modules = [
+ { name: 'create_user', label: __('Create User', 'bit-integrations'), is_pro: true }
+]
export default function UserRegistrationMembershipIntegLayout({
formFields,
diff --git a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/staticData.js b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/staticData.js
deleted file mode 100644
index e9662f14..00000000
--- a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/staticData.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { __ } from '../../../Utils/i18nwrap'
-
-export const modules = [
- { name: 'create_user', label: __('Create User', 'bit-integrations'), is_pro: true }
-]
diff --git a/includes/Core/Util/AllTriggersName.php b/includes/Core/Util/AllTriggersName.php
index b3fd6f58..3469532b 100644
--- a/includes/Core/Util/AllTriggersName.php
+++ b/includes/Core/Util/AllTriggersName.php
@@ -132,6 +132,7 @@ public static function allTriggersName()
'Tripetto' => ['name' => 'Tripetto', 'isPro' => true, 'is_active' => false],
'TutorLms' => ['name' => 'Tutor LMS', 'isPro' => true, 'is_active' => false],
'TeamsForWooCommerceMemberships' => ['name' => 'Teams For WooCommerce Memberships', 'isPro' => true, 'is_active' => false],
+ 'UserRegistrationMembership' => ['name' => 'User Registration & Membership', 'isPro' => true, 'is_active' => false],
'UltimateMember' => ['name' => 'UltimateMember', 'isPro' => true, 'is_active' => false],
'UserFeedback' => ['name' => 'UserFeedback', 'isPro' => true, 'is_active' => false],
'Voxel' => ['name' => 'Voxel', 'isPro' => true, 'is_active' => false],
From e44105366cf5fc886e0893020cfc69e6abf892af Mon Sep 17 00:00:00 2001
From: Rishad Alam <101513331+RishadAlam@users.noreply.github.com>
Date: Tue, 10 Feb 2026 11:03:01 +0600
Subject: [PATCH 3/7] feat: user registration membership action doc link added
---
frontend-dev/src/Utils/StaticData/tutorialLinks.js | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/frontend-dev/src/Utils/StaticData/tutorialLinks.js b/frontend-dev/src/Utils/StaticData/tutorialLinks.js
index ef86b252..8c5666cd 100644
--- a/frontend-dev/src/Utils/StaticData/tutorialLinks.js
+++ b/frontend-dev/src/Utils/StaticData/tutorialLinks.js
@@ -658,6 +658,10 @@ const tutorialLinks = {
seoPress: {
youTubeLink: '',
docLink: 'https://bit-integrations.com/wp-docs/actions/seopress-integrations-as-action/'
+ },
+ userRegistrationMembership: {
+ youTubeLink: '',
+ docLink: 'https://bit-integrations.com/wp-docs/actions/user-registration-and-membership-as-action/'
}
}
export default tutorialLinks
From 46db2ec6dbccf127b62613024fc1badd2bb4a16f Mon Sep 17 00:00:00 2001
From: Rishad Alam <101513331+RishadAlam@users.noreply.github.com>
Date: Sat, 14 Feb 2026 11:06:13 +0600
Subject: [PATCH 4/7] fix: select action logo names
---
frontend-dev/src/components/Flow/New/SelectAction.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/frontend-dev/src/components/Flow/New/SelectAction.jsx b/frontend-dev/src/components/Flow/New/SelectAction.jsx
index 0eeeb080..e0288854 100644
--- a/frontend-dev/src/components/Flow/New/SelectAction.jsx
+++ b/frontend-dev/src/components/Flow/New/SelectAction.jsx
@@ -177,7 +177,7 @@ export default function SelectAction() {
{ type: 'WPCafe' },
{ type: 'Teams For WooCommerce Memberships' },
{ type: 'SeoPress' },
- { type: 'User Registration & Membership', logo_url: 'userRegistrationMembership' }
+ { type: 'User Registration & Membership', logo: 'userRegistrationMembership' }
]
const [availableIntegs, setAvailableIntegs] = useState(sortByField(integs, 'type', 'ASC') || integs)
@@ -254,7 +254,7 @@ export default function SelectAction() {
)}
-
+
{inte.type}
))}
From cb73c4c81997d44f2ec357aa335619cfe754bccf Mon Sep 17 00:00:00 2001
From: Rishad Alam <101513331+RishadAlam@users.noreply.github.com>
Date: Thu, 12 Mar 2026 11:19:39 +0600
Subject: [PATCH 5/7] refactor: userRegistrationMembership action directories
---
.../RecordApiHelper.php | 11 +-
.../UserRegistrationMembership/Routes.php | 4 +-
.../UserRegistrationMembershipController.php | 7 +-
backend/Core/Util/Common.php | 2 +-
.../UserRegistrationMembershipFieldMap.jsx | 4 +-
.../UserRegistrationMembershipIntegLayout.jsx | 4 +-
.../AllIntegrations/SeoPress/SeoPress.jsx | 1 -
.../EditUserRegistrationMembership.jsx | 75 ++++++++
.../UserRegistrationMembership.jsx | 119 ++++++++++++
.../UserRegistrationMembershipActions.jsx | 30 +++
...serRegistrationMembershipAuthorization.jsx | 84 +++++++++
.../UserRegistrationMembershipCommonFunc.js | 161 ++++++++++++++++
.../UserRegistrationMembershipFieldMap.jsx | 114 ++++++++++++
.../UserRegistrationMembershipIntegLayout.jsx | 174 ++++++++++++++++++
14 files changed, 773 insertions(+), 17 deletions(-)
rename {includes => backend}/Actions/UserRegistrationMembership/RecordApiHelper.php (87%)
rename {includes => backend}/Actions/UserRegistrationMembership/Routes.php (74%)
rename {includes => backend}/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php (92%)
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/EditUserRegistrationMembership.jsx
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembership.jsx
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipActions.jsx
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipAuthorization.jsx
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipCommonFunc.js
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipFieldMap.jsx
create mode 100644 frontend/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
diff --git a/includes/Actions/UserRegistrationMembership/RecordApiHelper.php b/backend/Actions/UserRegistrationMembership/RecordApiHelper.php
similarity index 87%
rename from includes/Actions/UserRegistrationMembership/RecordApiHelper.php
rename to backend/Actions/UserRegistrationMembership/RecordApiHelper.php
index f32d7ebf..0f79730f 100644
--- a/includes/Actions/UserRegistrationMembership/RecordApiHelper.php
+++ b/backend/Actions/UserRegistrationMembership/RecordApiHelper.php
@@ -1,12 +1,13 @@
_integrationDetails);
+ return apply_filters(Config::withPrefix('user_registration_create_user'), $defaultResponse, $fieldData, $this->_integrationDetails);
default:
return [
diff --git a/includes/Actions/UserRegistrationMembership/Routes.php b/backend/Actions/UserRegistrationMembership/Routes.php
similarity index 74%
rename from includes/Actions/UserRegistrationMembership/Routes.php
rename to backend/Actions/UserRegistrationMembership/Routes.php
index 4cb006f7..0c166eca 100644
--- a/includes/Actions/UserRegistrationMembership/Routes.php
+++ b/backend/Actions/UserRegistrationMembership/Routes.php
@@ -4,8 +4,8 @@
exit;
}
-use BitCode\FI\Actions\UserRegistrationMembership\UserRegistrationMembershipController;
-use BitCode\FI\Core\Util\Route;
+use BitApps\Integrations\Actions\UserRegistrationMembership\UserRegistrationMembershipController;
+use BitApps\Integrations\Core\Util\Route;
Route::post('user_registration_authorize', [UserRegistrationMembershipController::class, 'userRegistrationAuthorize']);
Route::post('refresh_user_registration_forms', [UserRegistrationMembershipController::class, 'refreshForms']);
diff --git a/includes/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php b/backend/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php
similarity index 92%
rename from includes/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php
rename to backend/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php
index b4807c91..4c06b8b4 100644
--- a/includes/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php
+++ b/backend/Actions/UserRegistrationMembership/UserRegistrationMembershipController.php
@@ -1,11 +1,11 @@
id);
- $response = $recordApiHelper->execute($fieldValues, $fieldMap);
- return is_wp_error($response) ? $response : $response;
+ return $recordApiHelper->execute($fieldValues, $fieldMap);
}
private function getFormFields($formId)
diff --git a/backend/Core/Util/Common.php b/backend/Core/Util/Common.php
index a6e1ac03..f48aa34e 100644
--- a/backend/Core/Util/Common.php
+++ b/backend/Core/Util/Common.php
@@ -294,7 +294,7 @@ private static function replaceFieldWithValueHelper($stringToReplaceField, $fiel
$fieldName = substr($field, 2, \strlen($field) - 3);
$smartTagValue = SmartTags::getSmartTagValue($fieldName, true);
if (isset($fieldValues[$fieldName]) && !self::isEmpty($fieldValues[$fieldName])) {
- $stringToReplaceField = !\is_array($fieldValues[$fieldName]) ? str_replace($field, $fieldValues[$fieldName], $stringToReplaceField)
+ $stringToReplaceField = !\is_array($fieldValues[$fieldName]) && !\is_object($fieldValues[$fieldName]) ? str_replace($field, $fieldValues[$fieldName], $stringToReplaceField)
: str_replace(['"' . $field . '"', $field], wp_json_encode($fieldValues[$fieldName], JSON_UNESCAPED_UNICODE), $stringToReplaceField);
} elseif (!empty($smartTagValue)) {
$stringToReplaceField = str_replace($field, $smartTagValue, $stringToReplaceField);
diff --git a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipFieldMap.jsx b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipFieldMap.jsx
index db6447ca..548aabb2 100644
--- a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipFieldMap.jsx
+++ b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipFieldMap.jsx
@@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil'
-import { $btcbi } from '../../../GlobalStates'
+import { $appConfigState } from '../../../GlobalStates'
import { __, sprintf } from '../../../Utils/i18nwrap'
import { SmartTagField } from '../../../Utils/StaticData/SmartTagField'
import TagifyInput from '../../Utilities/TagifyInput'
@@ -17,7 +17,7 @@ export default function UserRegistrationMembershipFieldMap({
userRegistrationConf,
setUserRegistrationConf
}) {
- const btcbi = useRecoilValue($btcbi)
+ const btcbi = useRecoilValue($appConfigState)
const { isPro } = btcbi
const requiredFlds =
diff --git a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
index 62ba4f96..adff766e 100644
--- a/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
+++ b/frontend-dev/src/components/AllIntegrations/UserRegistrationMembership/UserRegistrationMembershipIntegLayout.jsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from 'react'
import MultiSelect from 'react-multiple-select-dropdown-lite'
import 'react-multiple-select-dropdown-lite/dist/index.css'
import { useRecoilValue } from 'recoil'
-import { $btcbi } from '../../../GlobalStates'
+import { $appConfigState } from '../../../GlobalStates'
import { __ } from '../../../Utils/i18nwrap'
import Loader from '../../Loaders/Loader'
import { checkIsPro, getProLabel } from '../../Utilities/ProUtilHelpers'
@@ -22,7 +22,7 @@ export default function UserRegistrationMembershipIntegLayout({
isLoading,
setSnackbar
}) {
- const btcbi = useRecoilValue($btcbi)
+ const btcbi = useRecoilValue($appConfigState)
const { isPro } = btcbi
const changeHandler = (val, name) => {
diff --git a/frontend/src/components/AllIntegrations/SeoPress/SeoPress.jsx b/frontend/src/components/AllIntegrations/SeoPress/SeoPress.jsx
index b83ddbe0..c7e6e24c 100644
--- a/frontend/src/components/AllIntegrations/SeoPress/SeoPress.jsx
+++ b/frontend/src/components/AllIntegrations/SeoPress/SeoPress.jsx
@@ -85,7 +85,6 @@ export default function SeoPress({ formFields, setFlow, flow, allIntegURL }) {