PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / V3.0.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder vV3.0.2
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 / MailerLite / RecordApiHelper.php

RecordApiHelper.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder V3.0.2, at includes/Core/Integration/MailerLite/RecordApiHelper.php

230 lines 7.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * MailerLite Record Api
5 */
6
7 namespace BitCode\BitForm\Core\Integration\MailerLite;
8
9 use BitCode\BitForm\Core\Database\FormEntryLogModel;
10 use BitCode\BitForm\Core\Util\ApiResponse as UtilApiResponse;
11 use BitCode\BitForm\Core\Util\HttpHelper;
12
13 /**
14 * Provide functionality for Record insert, upsert
15 */
16 class RecordApiHelper
17 {
18 private $_integrationID;
19 private $_baseUrl;
20
21 private $_defaultHeader;
22
23 private $_logID;
24
25 private $_logResponse;
26
27 private $_entryID;
28
29 private $_actions;
30
31 public function __construct($auth_token, $integId, $logID, $entryID, $actions, $version)
32 {
33 $this->_integrationID = $integId;
34 if ('v2' === $version) {
35 $this->_baseUrl = 'https://connect.mailerlite.com/api/';
36 $this->_defaultHeader = [
37 'Authorization' => "Bearer $auth_token"
38 ];
39 } else {
40 $this->_baseUrl = 'https://api.mailerlite.com/api/v2/';
41 $this->_defaultHeader = [
42 'X-Mailerlite-Apikey' => $auth_token
43 ];
44 }
45 $this->_logID = $logID;
46 $this->_logResponse = new UtilApiResponse();
47 $this->_entryID = $entryID;
48 $this->_actions = $actions;
49 }
50
51 public function existSubscriber($auth_token, $email)
52 {
53 if (empty($auth_token)) {
54 wp_send_json_error(
55 __(
56 'Requested parameter is empty',
57 'bit-form'
58 ),
59 400
60 );
61 }
62
63 $apiEndpoints = $this->_baseUrl . "subscribers/$email";
64
65 $response = HttpHelper::get($apiEndpoints, null, $this->_defaultHeader);
66 if (property_exists($response, 'error') || (isset($response->message) && in_array($response->message, ['Resource does not exist.', 'Resource not found.'], true))) {
67 return false;
68 } else {
69 return true;
70 }
71 }
72
73 public function enableDoubleOptIn($auth_token)
74 {
75 if (empty($auth_token)) {
76 wp_send_json_error(
77 __(
78 'Requested parameter is empty',
79 'bit-form'
80 ),
81 400
82 );
83 }
84
85 $apiEndpoints = $this->_baseUrl . 'settings/double_optin';
86 $requestParams = [
87 'enable' => true
88 ];
89
90 HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
91 }
92
93 public function addSubscriber($auth_token, $groupIds, $type, $finalData)
94 {
95 $apiEndpoints = $this->_baseUrl . 'subscribers';
96 $splitGroupIds = null;
97 if (!empty($groupIds)) {
98 $splitGroupIds = explode(',', $groupIds);
99 }
100
101 if (empty($finalData['email'])) {
102 return ['success'=>false, 'message'=>'Required field Email is empty', 'code'=>400];
103 }
104 if ('https://connect.mailerlite.com/api/' === $this->_baseUrl) {
105 $requestParams = [
106 'email' => $finalData['email'],
107 'status' => $type ? $type : 'active',
108 ];
109 } else {
110 $requestParams = [
111 'email' => $finalData['email'],
112 'type' => $type ? $type : 'active',
113 ];
114 }
115
116 foreach ($finalData as $key => $value) {
117 if ('email' !== $key) {
118 // if ('name' === $key) {
119 // $requestParams[$key] = $value;
120 // } else {
121 $requestParams['fields'][$key] = $value;
122 // }
123 }
124 }
125
126 $requestParams['fields'] = !empty($requestParams['fields']) ? (object) $requestParams['fields'] : [];
127 $email = $finalData['email'];
128 $isExist = $this->existSubscriber($auth_token, $email);
129 $response = null;
130
131 if ($isExist && !empty($this->_actions->update)) {
132 if (!empty($this->_actions->double_opt_in)) {
133 $this->enableDoubleOptIn($auth_token);
134 }
135 if (!empty($groupIds)) {
136 if ('https://connect.mailerlite.com/api/' === $this->_baseUrl) {
137 $requestParams['groups'] = $splitGroupIds;
138 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
139 } else {
140 for ($i = 0; $i < count($splitGroupIds); $i++) {
141 $apiEndpoints = $this->_baseUrl . 'groups/' . $splitGroupIds[$i] . '/subscribers';
142 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
143 };
144 }
145 return $response;
146 }
147 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
148 $response->update = true;
149 } elseif ($isExist && empty($this->_actions->update)) {
150 return ['success'=>false, 'message'=>'Subscriber already exist', 'code'=>400];
151 } else {
152 if (!empty($this->_actions->double_opt_in)) {
153 $this->enableDoubleOptIn($auth_token);
154 }
155 if (!empty($groupIds)) {
156 if ('https://connect.mailerlite.com/api/' === $this->_baseUrl) {
157 $requestParams['groups'] = $splitGroupIds;
158 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
159 } else {
160 for ($i = 0; $i < count($splitGroupIds); $i++) {
161 $apiEndpoints = $this->_baseUrl . 'groups/' . $splitGroupIds[$i] . '/subscribers';
162 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
163 };
164 }
165 return $response;
166 }
167 $response = HttpHelper::post($apiEndpoints, $requestParams, $this->_defaultHeader);
168 }
169 return $response;
170 }
171
172 public function generateReqDataFromFieldMap($data, $fieldMap)
173 {
174 $dataFinal = [];
175
176 foreach ($fieldMap as $value) {
177 $triggerValue = $value->formField;
178 $actionValue = $value->mailerLiteFormField;
179 if ('custom' === $triggerValue) {
180 $dataFinal[$actionValue] = $value->customValue;
181 } elseif (!is_null($data[$triggerValue])) {
182 $dataFinal[$actionValue] = $data[$triggerValue];
183 }
184 }
185
186 return $dataFinal;
187 }
188
189 public function executeRecordApi(
190 $groupId,
191 $type,
192 $fieldValues,
193 $fieldMap,
194 $auth_token,
195 $formId
196 ) {
197 $fieldData = [];
198 $attributes = [];
199 $model = new FormEntryLogModel();
200 $fieldData['attributes'] = (object) $attributes;
201
202 $recordApiResponse = null;
203 if ($this->_entryID) {
204 $result = $model->entryLogCheck($this->_entryID, $this->_integrationID);
205 if (!count($result) || isset($result->errors['result_empty'])) {
206 $finalData = $this->generateReqDataFromFieldMap($fieldValues, $fieldMap);
207 $recordApiResponse = $this->addSubscriber($auth_token, $groupId, $type, $finalData);
208
209 if (empty($recordApiResponse)) {
210 $recordApiResponse = ['success' => true, 'id' => $fieldData['email']];
211 }
212 }
213 }
214
215 $entryDetails = [
216 'formId' => $formId,
217 'entryId' => $this->_entryID,
218 'fieldValues' => $fieldValues
219 ];
220
221 if (isset($recordApiResponse->data->id) || isset($recordApiResponse->id)) {
222 $res = ['success'=>true, 'message'=>isset($recordApiResponse->update) ? 'Subscriber has been updated successfully' : 'Subscriber has been created successfully', 'code'=>200];
223 $this->_logResponse->apiResponse($this->_logID, $this->_integrationID, ['type' => 'record', 'type_name' =>isset($recordApiResponse->update) ? 'update' : 'insert'], 'success', $res, $entryDetails);
224 } else {
225 $this->_logResponse->apiResponse($this->_logID, $this->_integrationID, ['type' => 'record', 'type_name' => isset($recordApiResponse->update) ? 'update' : 'insert'], 'error', $recordApiResponse, $entryDetails);
226 }
227 return $recordApiResponse;
228 }
229 }
230