PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.1.1
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.1.1
3.3.1 V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 All 138 releases
bit-form / includes / Core / Integration / ZohoBigin / ZohoBiginHandler.php

ZohoBiginHandler.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.1.1, at includes/Core/Integration/ZohoBigin/ZohoBiginHandler.php

697 lines 23.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * ZohoBigin Integration
5 *
6 */
7
8 namespace BitCode\BitForm\Core\Integration\ZohoBigin;
9
10 if (!defined('ABSPATH')) {
11 exit;
12 }
13
14 use BitCode\BitForm\Core\Integration\IntegrationHandler;
15 use BitCode\BitForm\Core\Util\ApiResponse as UtilApiResponse;
16 use BitCode\BitForm\Core\Util\HttpHelper;
17 use BitCode\BitForm\Core\Util\IpTool;
18 use BitCode\BitForm\GlobalHelper;
19 use WP_Error;
20
21 /**
22 * Provide functionality for ZohoCrm integration
23 */
24 class ZohoBiginHandler
25 {
26 private $_formID;
27 private $_integrationID;
28 private $_logResponse;
29
30 public function __construct($integrationID, $fromID)
31 {
32 $this->_formID = $fromID;
33 $this->_integrationID = $integrationID;
34 $this->_logResponse = new UtilApiResponse();
35 }
36
37 /**
38 * Helps to register ajax function's with wp
39 *
40 * @return null
41 */
42 public static function registerAjax()
43 {
44 add_action('wp_ajax_bitforms_zbigin_generate_token', [__CLASS__, 'generateTokens']);
45 add_action('wp_ajax_bitforms_zbigin_refresh_modules', [__CLASS__, 'refreshModulesAjaxHelper']);
46 add_action('wp_ajax_bitforms_zbigin_refresh_notetypes', [__CLASS__, 'refreshNoteTypesAjaxHelper']);
47 add_action('wp_ajax_bitforms_zbigin_refresh_related_lists', [__CLASS__, 'refreshRelatedModulesAjaxHelper']);
48 add_action('wp_ajax_bitforms_zbigin_refresh_fields', [__CLASS__, 'getFields']);
49 add_action('wp_ajax_bitforms_zbigin_refresh_tags', [__CLASS__, 'getTagList']);
50 add_action('wp_ajax_bitforms_zbigin_refresh_users', [__CLASS__, 'getUsers']);
51 }
52
53 /**
54 * Process ajax request for generate_token
55 *
56 * @return JSON zoho bigin api response and status
57 */
58 public static function generateTokens()
59 {
60 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
61 GlobalHelper::requirePostMethod();
62
63 try {
64 $requestsParams = GlobalHelper::formatRequestData();
65 } catch (\InvalidArgumentException $e) {
66 wp_send_json_error($e->getMessage(), 400);
67 }
68
69 if (
70 empty($requestsParams->{'accounts-server'})
71 || empty($requestsParams->dataCenter)
72 || empty($requestsParams->clientId)
73 || empty($requestsParams->clientSecret)
74 || empty($requestsParams->redirectURI)
75 || empty($requestsParams->code)
76 ) {
77 wp_send_json_error(
78 __(
79 'Requested parameter is empty',
80 'bit-form'
81 ),
82 400
83 );
84 }
85
86 $apiEndpoint = \urldecode($requestsParams->{'accounts-server'}) . '/oauth/v2/token';
87 $requestParams = [
88 'grant_type' => 'authorization_code',
89 'client_id' => $requestsParams->clientId,
90 'client_secret' => $requestsParams->clientSecret,
91 'redirect_uri' => \urldecode($requestsParams->redirectURI),
92 'code' => $requestsParams->code
93 ];
94 $apiResponse = HttpHelper::post($apiEndpoint, $requestParams);
95
96 if (is_wp_error($apiResponse) || !empty($apiResponse->error)) {
97 wp_send_json_error(
98 empty($apiResponse->error) ? 'Unknown' : $apiResponse->error,
99 400
100 );
101 }
102 $apiResponse->generates_on = \time();
103 wp_send_json_success($apiResponse, 200);
104 } else {
105 wp_send_json_error(
106 __(
107 'Token expired',
108 'bit-form'
109 ),
110 401
111 );
112 }
113 }
114
115 /**
116 * Process ajax request for refresh bigin modules
117 *
118 * @return JSON bigin module data
119 */
120 public static function refreshModulesAjaxHelper()
121 {
122 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
123 $authorizationHeader = null;
124
125 GlobalHelper::requirePostMethod();
126
127 try {
128 $queryParams = GlobalHelper::formatRequestData();
129 } catch (\InvalidArgumentException $e) {
130 wp_send_json_error($e->getMessage(), 400);
131 }
132
133 if (
134 empty($queryParams->tokenDetails)
135 || empty($queryParams->dataCenter)
136 || empty($queryParams->clientId)
137 || empty($queryParams->clientSecret)
138 ) {
139 wp_send_json_error(
140 __(
141 'Requested parameter is empty',
142 'bit-form'
143 ),
144 400
145 );
146 }
147 $response = [];
148 if ((intval($queryParams->tokenDetails->generates_on) + (55 * 60)) < time()) {
149 $response['tokenDetails'] = ZohoBiginHandler::_refreshAccessToken($queryParams);
150 }
151 $modulesMetaApiEndpoint = "https://www.zohoapis.{$queryParams->dataCenter}/bigin/v1/settings/modules";
152 $authorizationHeader['Authorization'] = "Zoho-oauthtoken {$queryParams->tokenDetails->access_token}";
153 $modulesMetaResponse = HttpHelper::get($modulesMetaApiEndpoint, null, $authorizationHeader);
154 // wp_send_json_success($modulesMetaResponse, 200);
155 if (!is_wp_error($modulesMetaResponse) && (empty($modulesMetaResponse->status) || (!empty($modulesMetaResponse->status) && 'error' !== $modulesMetaResponse->status))) {
156 $retriveModuleData = $modulesMetaResponse->modules;
157 $allModules = [];
158 foreach ($retriveModuleData as $module) {
159 if (!in_array($module->api_name, ['Activities', 'Social', 'Associated_Products', 'Notes', 'Attachments'])) {
160 $allModules[$module->plural_label] = (object) [
161 'api_name' => $module->api_name,
162 'plural_label' => $module->plural_label
163 ];
164 }
165 }
166 uksort($allModules, 'strnatcasecmp');
167 $response['modules'] = $allModules;
168 } else {
169 wp_send_json_error(
170 empty($modulesMetaResponse->error) ? 'Unknown' : $modulesMetaResponse->error,
171 400
172 );
173 }
174 if (!empty($response['tokenDetails']) && !empty($queryParams->id)) {
175 ZohoBiginHandler::_saveRefreshedToken($queryParams->formID, $queryParams->id, $response['tokenDetails'], $response['modules']);
176 }
177 wp_send_json_success($response, 200);
178 } else {
179 wp_send_json_error(
180 __(
181 'Token expired',
182 'bit-form'
183 ),
184 401
185 );
186 }
187 }
188
189 /**
190 * Process ajax request for refresh bigin modules
191 *
192 * @return JSON bigin module data
193 */
194 public static function refreshRelatedModulesAjaxHelper()
195 {
196 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
197 GlobalHelper::requirePostMethod();
198
199 try {
200 $queryParams = GlobalHelper::formatRequestData();
201 } catch (\InvalidArgumentException $e) {
202 wp_send_json_error($e->getMessage(), 400);
203 }
204
205 if (
206 empty($queryParams->tokenDetails)
207 || empty($queryParams->dataCenter)
208 || empty($queryParams->clientId)
209 || empty($queryParams->clientSecret)
210 || empty($queryParams->module)
211 ) {
212 wp_send_json_error(
213 __(
214 'Requested parameter is empty',
215 'bit-form'
216 ),
217 400
218 );
219 }
220 $response = [];
221 $relatedModules = [];
222
223 $allModules = [
224 'Tasks' => (object) [
225 'api_name' => 'Tasks',
226 'plural_label' => 'Tasks'
227 ],
228 'Events' => (object) [
229 'api_name' => 'Events',
230 'plural_label' => 'Events'
231 ],
232 'Calls' => (object) [
233 'api_name' => 'Calls',
234 'plural_label' => 'Calls'
235 ],
236 ];
237 // $modulesMetaApiEndpoint = "https://www.zohoapis.{$queryParams->dataCenter}/bigin/v1/settings/related_lists";
238 // $authorizationHeader["Authorization"] = "Zoho-oauthtoken {$queryParams->tokenDetails->access_token}";
239 // $requiredParams['module'] = $queryParams->module;
240 // $modulesMetaResponse = HttpHelper::get($modulesMetaApiEndpoint, $queryParams, $authorizationHeader);
241 // wp_send_json_success($modulesMetaResponse, 200);
242 foreach ($allModules as $module) {
243 if ($module->api_name !== $queryParams->module) {
244 $relatedModules[$module->plural_label] = (object) [
245 'api_name' => $module->api_name,
246 'plural_label' => $module->plural_label
247 ];
248 }
249 }
250 uksort($relatedModules, 'strnatcasecmp');
251 $response['related_modules'] = $relatedModules;
252
253 if (!empty($response['tokenDetails']) && !empty($queryParams->id)) {
254 ZohoBiginHandler::_saveRefreshedToken($queryParams->formID, $queryParams->id, $response['tokenDetails'], $response['related_modules']);
255 }
256 wp_send_json_success($response, 200);
257 } else {
258 wp_send_json_error(
259 __(
260 'Token expired',
261 'bit-form'
262 ),
263 401
264 );
265 }
266 }
267
268 /**
269 * Process ajax request for refesh bigin layouts
270 *
271 * @return JSON bigin layout data
272 */
273 public static function getFields()
274 {
275 $authorizationHeader = null;
276 $requiredParams = null;
277 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
278 GlobalHelper::requirePostMethod();
279
280 try {
281 $queryParams = GlobalHelper::formatRequestData();
282 } catch (\InvalidArgumentException $e) {
283 wp_send_json_error($e->getMessage(), 400);
284 }
285
286 if (
287 empty($queryParams->module)
288 || empty($queryParams->tokenDetails)
289 || empty($queryParams->dataCenter)
290 || empty($queryParams->clientId)
291 || empty($queryParams->clientSecret)
292 ) {
293 wp_send_json_error(
294 __(
295 'Requested parameter is empty',
296 'bit-form'
297 ),
298 400
299 );
300 }
301 $response = [];
302 if ((intval($queryParams->tokenDetails->generates_on) + (55 * 60)) < time()) {
303 $response['tokenDetails'] = ZohoBiginHandler::_refreshAccessToken($queryParams);
304 }
305 $fieldsMetaApiEndpoint = "https://www.zohoapis.{$queryParams->dataCenter}/bigin/v1/settings/fields";
306 $authorizationHeader['Authorization'] = "Zoho-oauthtoken {$queryParams->tokenDetails->access_token}";
307 $requiredParams['module'] = $queryParams->module;
308 $fieldsMetaResponse = HttpHelper::get($fieldsMetaApiEndpoint, $requiredParams, $authorizationHeader);
309
310 if (!is_wp_error($fieldsMetaResponse) && (empty($fieldsMetaResponse->status) || (!empty($fieldsMetaResponse->status) && 'error' !== $fieldsMetaResponse->status))) {
311 $retriveFieldsData = $fieldsMetaResponse->fields;
312 $fields = [];
313 $fileUploadFields = [];
314 $requiredFields = [];
315 $requiredFileUploadFiles = [];
316 foreach ($retriveFieldsData as $field) {
317 $fields[$field->api_name] = (object) [
318 'api_name' => $field->api_name,
319 'display_label' => $field->display_label,
320 'data_type' => $field->data_type,
321 'length' => $field->length,
322 'required' => $field->system_mandatory
323 ];
324 if ($field->system_mandatory) {
325 $requiredFields[] = $field->api_name;
326 }
327 }
328
329 $fields['Pipeline'] = (object) [
330 'api_name' => 'Pipeline',
331 'display_label' => 'Pipeline',
332 'data_type' => 'text',
333 'length' => 120,
334 'required' => true
335 ];
336 $requiredFields[] = 'Pipeline';
337
338 uksort($fields, 'strnatcasecmp');
339 uksort($fileUploadFields, 'strnatcasecmp');
340 usort($requiredFields, 'strnatcasecmp');
341 usort($requiredFileUploadFiles, 'strnatcasecmp');
342
343 $fieldDetails = (object) [
344 'fields' => $fields,
345 'fileUploadFields' => $fileUploadFields,
346 'required' => $requiredFields,
347 'requiredFileUploadFields' => $requiredFileUploadFiles
348 ];
349 $response['fieldDetails'] = $fieldDetails;
350 } else {
351 wp_send_json_error(
352 'error' === $fieldsMetaResponse->status ? $fieldsMetaResponse->message : 'Unknown',
353 400
354 );
355 }
356 if (!empty($response['tokenDetails']) && $response['tokenDetails'] && !empty($queryParams->id)) {
357 $response['queryModule'] = $queryParams->module;
358 ZohoBiginHandler::_saveRefreshedToken($queryParams->formID, $queryParams->id, $response['tokenDetails'], $response);
359 }
360 wp_send_json_success($response, 200);
361 } else {
362 wp_send_json_error(
363 __(
364 'Token expired',
365 'bit-form'
366 ),
367 401
368 );
369 }
370 }
371
372 public function getTagList()
373 {
374 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
375 $authorizationHeader = null;
376
377 GlobalHelper::requirePostMethod();
378
379 try {
380 $queryParams = GlobalHelper::formatRequestData();
381 } catch (\InvalidArgumentException $e) {
382 wp_send_json_error($e->getMessage(), 400);
383 }
384 if (
385 empty($queryParams->tokenDetails)
386 || empty($queryParams->dataCenter)
387 || empty($queryParams->clientId)
388 || empty($queryParams->clientSecret)
389 || empty($queryParams->module)
390 ) {
391 wp_send_json_error(
392 __(
393 'Requested parameter is empty',
394 'bit-form'
395 ),
396 400
397 );
398 }
399
400 $response = [];
401 if ((intval($queryParams->tokenDetails->generates_on) + (55 * 60)) < time()) {
402 $response['tokenDetails'] = ZohoBiginHandler::_refreshAccessToken($queryParams);
403 }
404
405 $tagsMetaApiEndpoint = "http://www.zohoapis.{$queryParams->dataCenter}/bigin/v1/settings/tags?module={$queryParams->module}";
406 $authorizationHeader['Authorization'] = "Zoho-oauthtoken {$queryParams->tokenDetails->access_token}";
407 $tagsMetaResponse = HttpHelper::get($tagsMetaApiEndpoint, null, $authorizationHeader);
408
409 if (!is_wp_error($tagsMetaResponse)) {
410 $tags = $tagsMetaResponse->tags;
411
412 if (count($tags) > 0) {
413 $allTags = [];
414 foreach ($tags as $tag) {
415 $allTags[$tag->name] = (object) [
416 'tagId' => $tag->id,
417 'tagName' => $tag->name
418 ];
419 }
420 uksort($allTags, 'strnatcasecmp');
421 $response['tags'] = $allTags;
422 }
423 } else {
424 wp_send_json_error(
425 empty($tagsMetaResponse->data) ? 'Unknown' : $tagsMetaResponse->error,
426 400
427 );
428 }
429 if (!empty($response['tokenDetails']) && !empty($queryParams->id)) {
430 ZohoBiginHandler::_saveRefreshedToken($queryParams->formID, $queryParams->id, $response['tokenDetails'], $response['lists']);
431 }
432 wp_send_json_success($response, 200);
433 } else {
434 wp_send_json_error(
435 __(
436 'Token expired',
437 'bit-form'
438 ),
439 401
440 );
441 }
442 }
443
444 public function getUsers()
445 {
446 if (isset($_REQUEST['_ajax_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_ajax_nonce'])), 'bitforms_save')) {
447 $authorizationHeader = null;
448
449 GlobalHelper::requirePostMethod();
450
451 try {
452 $queryParams = GlobalHelper::formatRequestData();
453 } catch (\InvalidArgumentException $e) {
454 wp_send_json_error($e->getMessage(), 400);
455 }
456
457 if (
458 empty($queryParams->tokenDetails)
459 || empty($queryParams->dataCenter)
460 || empty($queryParams->clientId)
461 || empty($queryParams->clientSecret)
462 ) {
463 wp_send_json_error(
464 __(
465 'Requested parameter is empty',
466 'bit-form'
467 ),
468 400
469 );
470 }
471
472 $response = [];
473 if ((intval($queryParams->tokenDetails->generates_on) + (55 * 60)) < time()) {
474 $response['tokenDetails'] = ZohoBiginHandler::_refreshAccessToken($queryParams);
475 }
476
477 $usersMetaApiEndpoint = "https://www.zohoapis.{$queryParams->dataCenter}/bigin/v1/users";
478 $authorizationHeader['Authorization'] = "Zoho-oauthtoken {$queryParams->tokenDetails->access_token}";
479 $usersMetaResponse = HttpHelper::get($usersMetaApiEndpoint, null, $authorizationHeader);
480
481 // wp_send_json_success($usersMetaResponse, 200);
482
483 if (!is_wp_error($usersMetaResponse)) {
484 $users = $usersMetaResponse->users;
485
486 if (count($users) > 0) {
487 $allUsers = [];
488 foreach ($users as $user) {
489 $allUsers[$user->full_name] = (object) [
490 'userId' => $user->id,
491 'userName' => $user->full_name
492 ];
493 }
494 uksort($allUsers, 'strnatcasecmp');
495 $response['users'] = $allUsers;
496 }
497 } else {
498 wp_send_json_error(
499 empty($usersMetaResponse->data) ? 'Unknown' : $usersMetaResponse->error,
500 400
501 );
502 }
503 if (!empty($response['tokenDetails']) && !empty($queryParams->id)) {
504 ZohoBiginHandler::_saveRefreshedToken($queryParams->formID, $queryParams->id, $response['tokenDetails'], $response['lists']);
505 }
506 wp_send_json_success($response, 200);
507 } else {
508 wp_send_json_error(
509 __(
510 'Token expired',
511 'bit-form'
512 ),
513 401
514 );
515 }
516 }
517
518 /**
519 * Helps to refresh zoho bigin access_token
520 *
521 * @param object $apiData Contains required data for refresh access token
522 * @return string|boolean $tokenDetails API token details
523 */
524 protected static function _refreshAccessToken($apiData)
525 {
526 if (
527 empty($apiData->dataCenter)
528 || empty($apiData->clientId)
529 || empty($apiData->clientSecret)
530 || empty($apiData->tokenDetails)
531 ) {
532 return false;
533 }
534 $tokenDetails = $apiData->tokenDetails;
535
536 $dataCenter = $apiData->dataCenter;
537 $apiEndpoint = "https://accounts.zoho.{$dataCenter}/oauth/v2/token";
538 $requestParams = [
539 'grant_type' => 'refresh_token',
540 'client_id' => $apiData->clientId,
541 'client_secret' => $apiData->clientSecret,
542 'refresh_token' => $tokenDetails->refresh_token,
543 ];
544
545 $apiResponse = HttpHelper::post($apiEndpoint, $requestParams);
546 if (is_wp_error($apiResponse) || !empty($apiResponse->error)) {
547 return false;
548 }
549 $tokenDetails->generates_on = \time();
550 $tokenDetails->access_token = $apiResponse->access_token;
551 return $tokenDetails;
552 }
553
554 /**
555 * Save updated access_token to avoid unnecessary token generation
556 *
557 * @param integer $fromID ID of Integration related form
558 * @param integer $integrationID ID of Zoho bigin Integration
559 * @param object $tokenDetails refreshed token info
560 *
561 * @return null
562 */
563 protected static function _saveRefreshedToken($formID, $integrationID, $tokenDetails, $others = null)
564 {
565 if (empty($formID) || empty($integrationID)) {
566 return;
567 }
568
569 $integrationHandler = new IntegrationHandler($formID, IpTool::getUserDetail());
570 $zbiginDetails = $integrationHandler->getAIntegration($integrationID);
571
572 if (is_wp_error($zbiginDetails)) {
573 return;
574 }
575 $newDetails = json_decode($zbiginDetails[0]->integration_details);
576
577 $newDetails->tokenDetails = $tokenDetails;
578 if (!empty($others['modules'])) {
579 $newDetails->default->modules = $others['modules'];
580 }
581 if (!empty($others['related_modules'])) {
582 $newDetails->default->relatedlist['modules'] = $others['related_modules'];
583 }
584
585 $integrationHandler->updateIntegration($integrationID, $zbiginDetails[0]->integration_name, 'Zoho Bigin', wp_json_encode($newDetails), 'form');
586 }
587
588 public function execute(IntegrationHandler $integrationHandler, $integrationData, $fieldValues, $entryID, $logID)
589 {
590 $integrationDetails = is_string($integrationData->integration_details) ? json_decode($integrationData->integration_details) : $integrationData->integration_details;
591 $integID = $integrationData->id;
592 $tokenDetails = $integrationDetails->tokenDetails;
593 $module = $integrationDetails->module;
594 $fieldMap = $integrationDetails->field_map;
595 $actions = $integrationDetails->actions;
596 $defaultDataConf = $integrationDetails->default;
597
598 $entryDetails = [
599 'formId' => $this->_formID,
600 'entryId' => $entryID,
601 'fieldValues' => $fieldValues
602 ];
603 if (
604 empty($tokenDetails)
605 || empty($module)
606 || empty($fieldMap)
607 ) {
608 $error = new WP_Error('REQ_FIELD_EMPTY', __('module, fields are required for zoho bigin api', 'bit-form'));
609 $this->_logResponse->apiResponse($logID, $this->_integrationID, 'record', 'validation', $error, $entryDetails);
610 return $error;
611 }
612 $requiredParams = null;
613 if ((intval($tokenDetails->generates_on) + (55 * 60)) < time()) {
614 $requiredParams['clientId'] = $integrationDetails->clientId;
615 $requiredParams['clientSecret'] = $integrationDetails->clientSecret;
616 $requiredParams['dataCenter'] = $integrationDetails->dataCenter;
617 $requiredParams['tokenDetails'] = $tokenDetails;
618 $newTokenDetails = ZohoBiginHandler::_refreshAccessToken((object)$requiredParams);
619 if ($newTokenDetails) {
620 ZohoBiginHandler::_saveRefreshedToken($this->_formID, $this->_integrationID, $newTokenDetails);
621 $tokenDetails = $newTokenDetails;
622 }
623 }
624
625 $required = !empty($defaultDataConf->moduleData->{$module}->required) ?
626 $defaultDataConf->moduleData->{$module}->required : [];
627
628 $actions = $integrationDetails->actions;
629 $fileMap = $integrationDetails->upload_field_map;
630 $recordApiHelper = new RecordApiHelper($tokenDetails, $integID, $logID);
631 $zBiginApiResponse = $recordApiHelper->executeRecordApi(
632 $this->_formID,
633 $entryID,
634 $defaultDataConf,
635 $module,
636 $fieldValues,
637 $fieldMap,
638 $actions,
639 $required,
640 $fileMap
641 );
642 if (is_wp_error($zBiginApiResponse)) {
643 return $zBiginApiResponse;
644 }
645
646 if (
647 count($integrationDetails->relatedlists)
648 && !empty($zBiginApiResponse->response->result->row->success->details->FL[0])
649 && 'Id' === $zBiginApiResponse->response->result->row->success->details->FL[0]->val
650 ) {
651 foreach ($integrationDetails->relatedlists as $relatedlist) {
652 if (!empty($relatedlist->module)) {
653 $recordID = $zBiginApiResponse->response->result->row->success->details->FL[0]->content;
654 $relatedListModule = $relatedlist->module;
655 $defaultDataConf->moduleData->{$relatedListModule}->fields->{'SEMODULE'} = (object) [
656 'length' => \strlen($relatedListModule),
657 'required' => true,
658 'data_type' => 'string',
659 ];
660 $fieldValues['SEMODULE'] = $relatedListModule;
661 $relatedlist->field_map[] = (object)
662 [
663 'formField' => 'SEMODULE',
664 'zohoFormField' => 'SEMODULE'
665 ];
666
667 $defaultDataConf->moduleData->{$relatedListModule}->fields->{'SEID'} = (object) [
668 'length' => \strlen($recordID),
669 'required' => true,
670 'data_type' => 'string',
671 ];
672 $fieldValues['SEID'] = $recordID;
673 $relatedlist->field_map[] = (object)
674 [
675 'formField' => 'SEID',
676 'zohoFormField' => 'SEID'
677 ];
678
679 $zBiginRelatedRecResp = $recordApiHelper->executeRecordApi(
680 $this->_formID,
681 $entryID,
682 $defaultDataConf,
683 $relatedListModule,
684 $fieldValues,
685 $relatedlist->field_map,
686 $relatedlist->actions,
687 !empty($defaultDataConf->moduleData->{$relatedListModule}->required) ?
688 $defaultDataConf->moduleData->{$relatedListModule}->required : [],
689 $relatedlist->upload_field_map
690 );
691 }
692 }
693 }
694 return $zBiginApiResponse;
695 }
696 }
697