PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 1.4
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v1.4
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 2.10.2 All 137 releases
bit-form / includes / API / Controller / EntryController.php

EntryController.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 1.4, at includes/API/Controller/EntryController.php

664 lines 28.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace BitCode\BitForm\API\Controller;
4
5 use WP_Error;
6 use WP_REST_Controller;
7 use BitCode\BitForm\Core\Util\IpTool;
8 use BitCode\BitForm\Core\Util\FileHandler;
9 use BitCode\BitForm\Core\Database\ApiModel;
10 use BitCode\BitForm\Core\Database\FormModel;
11 use BitCode\BitForm\Admin\Form\AdminFormManager;
12 use BitCode\BitForm\Core\Database\FormEntryModel;
13 use BitCode\BitForm\Core\Database\FormEntryLogModel;
14 use BitCode\BitForm\Core\WorkFlow\WorkFlowRunHelper;
15 use BitCode\BitForm\Core\Database\FormEntryMetaModel;
16 use BitCode\BitForm\Core\Form\Validator\FormFieldValidator;
17
18 class EntryController extends WP_REST_Controller
19 {
20 protected static $form;
21 protected $formModel;
22 protected $form_id;
23 private $_has_upload;
24 private $_field_label;
25 private $_fields;
26
27 function __construct()
28 {
29 $this->formModel = new FormModel();
30 }
31
32 public function googleAuth()
33 {
34 $state = $_GET['state'];
35 $code = urlencode($_GET['code']);
36 // echo $code;
37 if (wp_redirect($state . '&code=' . $code, 302)) {
38 exit;
39 }
40 }
41
42 public function form_content($formID)
43 {
44 $form = $this->formModel->get(
45 [
46 "id",
47 "form_content",
48 "form_name",
49 'created_at',
50 'views',
51 'entries',
52 'status'
53 ],
54 array(
55 'id' => $formID
56 )
57 );
58 return $form;
59 }
60
61 public function get_forms()
62 {
63 $db = new ApiModel();
64 $forms = $db->getForm();
65 if (count($forms) > 0) {
66 return rest_ensure_response(['forms' => $forms, 'status' => 200, 'code' => 4000, 'success' => true]);
67 } else {
68 return rest_ensure_response(['forms' => [], 'status' => 200, 'code' => 3910, 'message' => 'No forms available.', 'success' => true]);
69 }
70 }
71
72 public function get_fields($request)
73 {
74 if (!empty($request['form_id'])) {
75 $formManager = new AdminFormManager($request['form_id']);
76 if (!$formManager->isExist()) {
77 $error = ['message' => 'No Form with ID "<form_id>".', 'code' => '3200'];
78 wp_send_json_error($error, 404);
79 }
80 $db = new ApiModel();
81 $fields = $db->getField($request['form_id']);
82 $workFlows = $db->getWorkFlow($request['form_id']);
83 $fieldsKey = $formManager->getFieldsKey();
84 $unset_types = ['razorpay', 'paypal', 'recaptcha'];
85 if (!empty($fields)) {
86 $filedsData = json_decode($fields[0]->form_content);
87 foreach ($filedsData->fields as $key => $field) {
88 if (in_array($field->typ, $unset_types)) {
89 unset($filedsData->fields->$key);
90 unset($fieldsKey[$key]);
91 }
92 }
93 $data = ['fields' => $filedsData->fields, 'fieldkeys' => $fieldsKey, 'workflows' => $workFlows, 'workflow_key_name' => 'workflow'];
94 return rest_ensure_response(['fields' => $data, 'status' => 200, 'code' => 4000, 'success' => true]);
95 } else {
96 return rest_ensure_response(['fields' => [], 'status' => 200, 'code' => 3920, 'message' => 'No fields available', 'success' => true]);
97 }
98 }
99 }
100
101 private function fieldSanitize($form_fields, $data,$fieldKey)
102 {
103 $submitted_data = [];
104 $message = [];
105 foreach($_POST as $key => $da) {
106 if(!in_array($key,$fieldKey)){
107 $message[$key] = "No field named ".$key." found.";
108 }
109 }
110 if ($message != []) {
111 $data = ['message' => $message, 'code' => 3710];
112 wp_send_json_success($data, 200);
113 }
114
115 foreach ($form_fields as $key => $field) {
116 if (array_key_exists($field['key'], $data) && $field['type'] != 'file-up') {
117 $submitted_data[$field['key']] = sanitize_text_field($data[$field['key']]);
118 } else if (!array_key_exists($field['key'], $data) && $field['type'] != 'file-up') {
119 $submitted_data[$field['key']] = '';
120 }
121 }
122 return $submitted_data;
123 }
124
125 private function fieldTypeValidation($form_fields, $data)
126 {
127 $message = [];
128 $string_types = array("text", "textarea", "radio", "color", "email","decision-box");
129 foreach ($form_fields as $key => $field) {
130 if (isset($data[$field['key']])) {
131 if ($field['type'] == 'file-up' && gettype($data[$field['key']]) != 'array') {
132 $message[$field['key']] = "Data type mismatch. Value for the " . $field['key'] . " field must be of type FILE";
133 } else if (in_array($field['type'], $string_types) && gettype($data[$field['key']]) != 'string') {
134 $message[$field['key']] = "Data type mismatch. Value for the " . $field['key'] . " field must be of type STRING";
135 } else if ($field['type'] == 'check' && gettype($data[$field['key']]) != 'array') {
136 $message[$field['key']] = "Data type mismatch. Value for the " . $field['key'] . " field must be of type Array";
137 }
138 }
139 }
140 if ($message != []) {
141 $data = ['message' => $message, 'code' => 3120];
142 wp_send_json_success($data, 200);
143 }
144 return $message;
145 }
146 public function entry_store($request)
147 {
148 $formID = $request['form_id'];
149 $formManager = new AdminFormManager($request['form_id']);
150 if (!$formManager->isExist()) {
151 $data = ['message' => 'No Form with ID "<form_id>"', 'code' => '3200'];
152 wp_send_json_error($data, 400);
153 }
154 $formEntryModel = new FormEntryModel();
155 $ipTool = new IpTool();
156 $user_details = $ipTool->getUserDetail();
157 $entryMeta = new FormEntryMetaModel();
158 $form_fields = $this->getFields($formID);
159 $fieldsKey = $formManager->getFieldsKey();
160 $this->fieldTypeValidation($form_fields, $_POST);
161 $submitted_data = $this->fieldSanitize($form_fields, $_POST,$fieldsKey );
162 $formFieldValidator = new FormFieldValidator($form_fields, $submitted_data, $_FILES);
163 $validateField = $formFieldValidator->validate('create', $formID);
164 if (!$validateField) {
165 $errorMessage = count($formFieldValidator->getMessage()) > 0 ?
166 $formFieldValidator->getMessage() : __("Internal error occured!!!", 'bitform');
167 $error = ['errors' => $errorMessage, 'code' => 3070];
168 wp_send_json_error($error, 422);
169 }
170 $entry_id = $formEntryModel->insert(
171 array(
172 'form_id' => $formID,
173 'user_id' => $user_details['id'],
174 'user_ip' => $user_details['ip'],
175 'user_device' => $user_details['device'],
176 'referer' => $user_details['page'],
177 'status' => 0,
178 'created_at' => $user_details['time']
179 )
180 );
181 $submitted_fields = $this->getFormContentWithValue($submitted_data, $formID)->fields;
182 $formManageer = new AdminFormManager($formID);
183 $file_fields = $formManageer->getUploadFields($formID);
184 $fileHandler = new FileHandler;
185 $workFlowRunHelper = new WorkFlowRunHelper($formID);
186 if (isset($_POST['workflow'])) {
187 $workFlowIds = is_array($_POST['workflow']) ? implode(",", $_POST['workflow']) : $_POST['workflow'];
188 $workFlowreturnedOnSubmit = $workFlowRunHelper->executeOnSubmit(
189 'create',
190 $submitted_fields,
191 $submitted_data,
192 $entry_id,
193 null,
194 $workFlowIds
195 );
196 unset($workFlowreturnedOnSubmit['data']);
197 }
198 if (!empty($workFlowreturnedOnSubmit['fields'])) {
199 $submitted_data = $workFlowreturnedOnSubmit['fields'];
200 unset($workFlowreturnedOnSubmit['fields']);
201 }
202 unset($submitted_data['workflow']);
203 foreach ($_FILES as $file_name => $file_details) {
204 if ($file_fields && in_array($file_name, $file_fields)) {
205 $filePath = $fileHandler->moveUploadedFiles($file_details, $formID, $entry_id);
206 if (!empty($filePath)) {
207 $submitted_data[$file_name] = $filePath;
208 }
209 }
210 }
211 foreach ($submitted_data as $key => $value) {
212 $entryMeta->insert(
213 array(
214 'bitforms_form_entry_id' => $entry_id,
215 'meta_key' => $key,
216 'meta_value' => is_string($submitted_data[$key]) ?
217 $submitted_data[$key] :
218 wp_json_encode($submitted_data[$key])
219 )
220 );
221 }
222 return rest_ensure_response(['status' => 200, 'code' => 4000, 'message' => 'Data Added Successfully!!', 'success' => true]);
223 }
224
225 public function getFormContentWithValue($defaultValues, $formID)
226 {
227 $form_content = \json_decode($this->form_content($formID)[0]->form_content);
228 if (!is_array($defaultValues)) {
229 return $form_content;
230 }
231 foreach ($form_content->fields as $fieldKey => $fieldDetails) {
232 // $field_name = empty($fieldDetails->lbl) ? null : \preg_replace('/[\`\~\!\@\#\$\'\.\s\?\+\-\*\&\|\/\\!]/', '_', $fieldDetails->lbl);
233 if ((isset($fieldDetails->mul) || $fieldDetails->typ === 'check') && isset($defaultValues[$fieldKey])) {
234 if (is_array($defaultValues[$fieldKey])) {
235 $fieldDetails->val =
236 wp_json_encode(
237 array_map('sanitize_text_field', $defaultValues[$fieldKey])
238 );
239 } else {
240 $fieldDetails->val = sanitize_text_field($defaultValues[$fieldKey]);
241 }
242 } elseif (isset($defaultValues[$fieldKey])) {
243 $fieldDetails->val = is_string($defaultValues[$fieldKey]) ?
244 sanitize_text_field($defaultValues[$fieldKey]) :
245 sanitize_text_field($defaultValues[$fieldKey][count($defaultValues[$fieldKey]) - 1]);
246 }
247 }
248 return $form_content;
249 }
250
251 public function getFields($formID)
252 {
253 if (!is_null($this->_fields)) {
254 return $this->_fields;
255 }
256 $form_content = \json_decode($this->form_content($formID)[0]->form_content);
257 $layout = $form_content->layout;
258 $fields = $form_content->fields;
259 $field_details = array();
260 foreach ($fields as $key => $field) {
261 if ($field->typ === 'recaptcha') {
262 continue;
263 }
264 $field_type = $field->typ;
265 $field_details[$key]['label'] = empty($field->lbl) ? null : $field->lbl;
266 $field_details[$key]['type'] = $field_type;
267 $field_details[$key]['key'] = $key;
268 if (isset($field->mul)) {
269 $field_details[$key]['mul'] = $field->mul;
270 }
271 if ($field_type === 'file-up' && isset($field->exts)) {
272 $field_details[$key]['valid']['type'] = $field->exts;
273 }
274 if (isset($field->valid) && !is_null($field->valid)) {
275 if (isset($field->valid->req)) {
276 $field_details[$key]['valid']['req'] = $field->valid->req;
277 }
278 if (isset($field->valid->reqMsg)) {
279 $field_details[$key]['valid']['reqMsg'] = $field->valid->reqMsg;
280 }
281 if (isset($field->valid->typMsg)) {
282 $field_details[$key]['valid']['typMsg'] = $field->valid->typMsg;
283 }
284 }
285 }
286 $unset_types = ['razorpay', 'paypal', 'recaptcha'];
287
288 foreach ($field_details as $key => $field) {
289 if (in_array($field['type'], $unset_types)) {
290 unset($field_details[$key]);
291 }
292 }
293 $this->_fields = $field_details;
294 return $field_details;
295 }
296
297 public function entry_update($request)
298 {
299 $formEntryModel = new FormEntryModel();
300 $entryID = $request['entry_id'];
301 if($_SERVER['REQUEST_METHOD']=='PUT'){
302 $requestData = $request->get_params();
303 unset($requestData['entry_id']);
304 }else{
305 $requestData = $_POST;
306 }
307 $apiModel = new ApiModel();
308 $forms = $apiModel->getFormId($entryID);
309 if ($forms === []) {
310 $data = ['message' => 'No record with ID "<entry_id>".', 'code' => '3100'];
311 wp_send_json_error($data, 404);
312 }
313 $formID = $forms[0]->form_id;
314 $formEntryLogModel = new FormEntryLogModel();
315 $apiModel = new ApiModel();
316 $formOldData = $apiModel->get_form_value($entryID);
317 $key = null;
318 $entryMeta = new FormEntryMetaModel();
319 $ipTool = new IpTool();
320 $user_details = $ipTool->getUserDetail();
321 $form_fields = $this->getFields($formID);
322 $field_map = [];
323 foreach ($formOldData as $index => $data) {
324 foreach ($form_fields as $field_key => $field) {
325 if ($data->meta_key == $field['key']) {
326 $field_map[$field_key] = $field['key'];
327 }
328 }
329 }
330 $this->fieldTypeValidation($form_fields, $requestData);
331 $formManageer = new AdminFormManager($formID);
332 $fieldsKey = $formManageer->getFieldsKey();
333 $updatedValue = $this->fieldSanitize($form_fields, $requestData,$fieldsKey);
334 $formFieldValidator = new FormFieldValidator($form_fields, $requestData, $_FILES);
335 $validateField = $formFieldValidator->validate('edit', $formID);
336 if (!$validateField) {
337 $errorMessage = count($formFieldValidator->getMessage()) > 0 ?
338 $formFieldValidator->getMessage() : __("Internal error occured !!!", 'bitform');
339 $error = ['errors' => $errorMessage, 'code' => 3070];
340 wp_send_json_error($error, 422);
341 }
342 $formEntry = $formEntryModel->update(
343 array(
344 "user_id" => $user_details['id'],
345 "user_ip" => $user_details['ip'],
346 "user_device" => $user_details['device'],
347 "status" => 0,
348 "updated_at" => $user_details['time']
349 ),
350 array(
351 'form_id' => $formID,
352 'id' => $entryID
353 )
354 );
355 $log_id = null;
356 if ($formEntry) {
357 $log_id = $formEntryLogModel->form_log_insert(
358 array(
359 "user_id" => $user_details['id'],
360 "action_type" => "update",
361 "log_type" => "entry",
362 "ip" => $user_details['ip'],
363 "form_entry_id" => $entryID,
364 "form_id" => $formID,
365 "created_at" => $user_details['time'],
366 )
367 );
368 }
369 if (is_wp_error($formEntry) || !$formEntry) {
370 $data = ['message' => 'No record with ID "<entry_id>', 'code' => '3100'];
371 wp_send_json_error($data, 404);
372 }
373 $file_fields = $this->getUploadFields($formID);
374 if (count($file_fields) > 0) {
375 $fileHandler = new FileHandler();
376 foreach ($file_fields as $file_name) {
377 if (!empty($_FILES[$file_name]['name'])) {
378 $meta_value = $fileHandler->moveUploadedFiles($_FILES[$file_name], $formID, $entryID);
379 if (!empty($meta_value)) {
380 $updatedValue[$file_name] = wp_json_encode($meta_value);
381 }
382 }
383 }
384 }
385 unset($updatedValue['_ajax_nonce']);
386 unset($_REQUEST['g-recaptcha-response']);
387 $workFlowRunHelper = new WorkFlowRunHelper($formID);
388 if (isset($requestData['workflow'])) {
389 $workFlowIds = is_array($requestData['workflow']) ? implode(",", $requestData['workflow']) : $requestData['workflow'];
390 $workFlowreturnedOnSubmit = $workFlowRunHelper->executeOnSubmit(
391 'edit',
392 $this->getFormContentWithValue($updatedValue, $formID)->fields,
393 $updatedValue,
394 $entryID,
395 $log_id,
396 $workFlowIds
397 );
398 if (!empty($workFlowreturnedOnSubmit['fields'])) {
399 $updatedValue = $workFlowreturnedOnSubmit['fields'];
400 unset($workFlowreturnedOnSubmit['fields']);
401 }
402 }
403 $formEntryMetaUpdateStatus = $entryMeta->update(
404 $updatedValue,
405 array(
406 'bitforms_form_entry_id' => $entryID
407 )
408 );
409 if (is_wp_error($formEntryMetaUpdateStatus) || isset($newFileInsertStatus) && is_wp_error($newFileInsertStatus)) {
410 return $formEntryMetaUpdateStatus;
411 }
412 $updatedValue = array_merge($formEntryMetaUpdateStatus, array('entry_id' => $entryID));
413 if (empty($workFlowreturnedOnSubmit['message'])) {
414 $workFlowreturnedOnSubmit['message'] = __('Entry Updated Successfully', 'bitform');
415 }
416 $workFlowreturnedOnSubmit['updatedData'] = $updatedValue;
417 $counter = 0;
418 for ($i = 0; $i < count($formOldData); $i++) {
419 if (array_key_exists($formOldData[$i]->meta_key . '_old', $updatedValue)) {
420 unset($updatedValue[$formOldData[$i]->meta_key . '_old']);
421 }
422 if (in_array($formOldData[$i]->meta_key, $file_fields)) {
423 if (
424 empty($_FILES[$formOldData[$i]->meta_key]['name'])
425 || (is_array($_FILES[$formOldData[$i]->meta_key]['name'])
426 && count($_FILES[$formOldData[$i]->meta_key]['name']) === 1
427 && empty($_FILES[$formOldData[$i]->meta_key]['name'][0]))
428 ) {
429 unset($updatedValue[$formOldData[$i]->meta_key]);
430 continue;
431 }
432 if (is_array($_FILES[$formOldData[$i]->meta_key]['name']) && !in_array($_FILES[$formOldData[$i]->meta_key]['name'], json_decode($formOldData[$i]->meta_value))) {
433 $key[$i] = '${' . $formOldData[$i]->meta_key . '} file was Updated To ' . json_encode($_FILES[$formOldData[$i]->meta_key]['name']);
434 } elseif (!is_array($_FILES[$formOldData[$i]->meta_key]['name']) && !in_array($_FILES[$formOldData[$i]->meta_key]['name'], json_decode($formOldData[$i]->meta_value))) {
435 $key[$i] = '${' . $formOldData[$i]->meta_key . '} file was Updated To ' . $_FILES[$formOldData[$i]->meta_key]['name'];
436 }
437 unset($updatedValue[$formOldData[$i]->meta_key]);
438 } else {
439 if(isset($updatedValue[$formOldData[$i]->meta_key])){
440 if (is_array($updatedValue[$formOldData[$i]->meta_key])) {
441 if (json_decode($formOldData[$i]->meta_value) !== $updatedValue[$formOldData[$i]->meta_key]) {
442 $key[$i] = '${' . $formOldData[$i]->meta_key . '} was Updated From ' . implode(',', json_decode($formOldData[$i]->meta_value)) . ' To ' . implode(",", $updatedValue[$formOldData[$i]->meta_key]);
443 }
444 } elseif (is_string($updatedValue[$formOldData[$i]->meta_key]) && !empty($updatedValue[$formOldData[$i]->meta_key])) {
445 if ($formOldData[$i]->meta_value !== $updatedValue[$formOldData[$i]->meta_key]) {
446 $key[$i] = '${' . $formOldData[$i]->meta_key . '} was Updated' . ($formOldData[$i]->meta_value ? ' From ' . $formOldData[$i]->meta_value : '') . ' To ' . $updatedValue[$formOldData[$i]->meta_key];
447 }
448 }
449 }
450
451 }
452 $counter++;
453 }
454 $newField = array_keys(array_diff_key($formEntryMetaUpdateStatus, $field_map));
455 for ($i = 0; $i < count($newField); $i++) {
456 if (is_array($updatedValue[$newField[$i]])) {
457 if (!empty($updatedValue[$newField[$i]])) {
458 $key[$counter + $i] = '${' . $newField[$i] . '} Updated To ' . implode(",", $updatedValue[$newField[$i]]);
459 }
460 } elseif (is_string($newField[$i])) {
461 if (!empty($updatedValue[$newField[$i]])) {
462 $key[$counter + $i] = '${' . $newField[$i] . '} Updated To ' . $updatedValue[$newField[$i]];
463 }
464 }
465 }
466 if ($key !== null) {
467 $logUpdate = implode("b::f", (array) $key);
468 $apiModel->logUpdate($logUpdate, $log_id);
469 }
470 return rest_ensure_response(['status' => 200, 'code' => 4000, 'message' => 'Data Updated Successfully', 'success' => true]);
471 }
472
473 public function getUploadFields($formID)
474 {
475 if (!is_null($this->_has_upload)) {
476 return $this->_has_upload;
477 }
478 $upload_fields = array();
479 $form_field_details = $this->getFields($formID);
480 foreach ($form_field_details as $field_name => $__field_detail) {
481 if (isset($__field_detail['type']) && $__field_detail['type'] === 'file-up') {
482 $upload_fields[] = $field_name;
483 }
484 }
485 $this->_has_upload = $upload_fields;
486 return $upload_fields;
487 }
488
489 public function entry_delete($request)
490 {
491 $entries['entry_id'] = $request['entry_id'];
492 $apiModel = new ApiModel();
493 $forms = $apiModel->getFormId($entries['entry_id']);
494 if ($forms === []) {
495 $data = ['message' => 'No record with ID "<entry_id>".', 'code' => '3100'];
496 wp_send_json_error($data, 404);
497 }
498 $formID = $forms[0]->form_id;
499 $formManager = new AdminFormManager($formID);
500 if (!$formManager->isExist()) {
501 $data = ['message' => 'No form found. Please check and try again', 'code' => '3130'];
502 wp_send_json_error($data, 404);
503 }
504 $workFlowRunHelper = new WorkFlowRunHelper($formID);
505 $workFlowreturnedOnDelete = $workFlowRunHelper->executeOnDelete(
506 $formManager,
507 $formID,
508 $entries
509 );
510 if (isset($workFlowreturnedOnDelete['entries'])) {
511 if (count($workFlowreturnedOnDelete['entries']) === 0) {
512 return ["message" => __('Entry Deletetion prevented by workflow', 'bitform')];
513 } elseif (count($workFlowreturnedOnDelete['entries']) === count($entries)) {
514 $message = __('Entry Deleted successfully', 'bitform');
515 } else {
516 $result['prevented'] = array_diff($entries, $workFlowreturnedOnDelete['entries']);
517 $entries = $workFlowreturnedOnDelete['entries'];
518 $message = __('Entry Deleted successfully, Some prevented by workflow', 'bitform');
519 }
520 } else {
521 $message = __('Entry Deleted successfully', 'bitform');
522 }
523 global $wpdb;
524 $prefix = $wpdb->prefix;
525 $formEntryModel = new FormEntryModel();
526 $delete_status = $formEntryModel->bulkDelete(
527 array(
528 "`{$prefix}bitforms_form_entries`.`id`" => $entries,
529 "`{$prefix}bitforms_form_entries`.`form_id`" => $formID,
530 )
531 );
532 if (file_exists(BITFORMS_UPLOAD_DIR . DIRECTORY_SEPARATOR . $formID)) {
533 $fileHandler = new FileHandler();
534 foreach ($entries as $enrtyKey => $entryID) {
535 $fileEntries = BITFORMS_UPLOAD_DIR . DIRECTORY_SEPARATOR . $formID . DIRECTORY_SEPARATOR . $entryID;
536 if (file_exists($fileEntries)) {
537 $fileHandler->rmrf($fileEntries);
538 }
539 }
540 }
541 $count = $formEntryModel->count(
542 array(
543 'form_id' => $formID,
544 )
545 );
546 $formManager->resetSubmissionCount(intval($count[0]->count));
547 if (is_wp_error($delete_status)) {
548 return new WP_Error('entry_not_exists', __("Form entry deletion failed", "bitform"));
549 }
550 $result['message'] = $message;
551 return rest_ensure_response(['status' => 200, 'code' => 4000, 'message' => $message, 'success' => true]);
552 }
553 public function entry_view($request)
554 {
555 $entryID = $request['entry_id'];
556 $apiModel = new ApiModel();
557 $forms = $apiModel->getFormId($entryID);
558 if ($forms === []) {
559 $data = ['message' => 'No record with ID "<entry_id>".', 'code' => '3100'];
560 wp_send_json_error($data, 404);
561 }
562 $formID = $forms[0]->form_id;
563 $formManager = new AdminFormManager($formID);
564 if (!$formManager->isExist()) {
565 $data = ['message' => 'No form was found. Please check and try again', 'code' => 3130];
566 wp_send_json_error($data, 404);
567 }
568 $formEntryModel = new FormEntryModel();
569 $entryMeta = new FormEntryMetaModel();
570
571 $formEntry = $formEntryModel->get(
572 "*",
573 array(
574 'form_id' => $formID,
575 'id' => $entryID,
576 )
577 );
578 if (!$formEntry) {
579 $data = ['message' => 'No Entry with ID"', 'code' => 3100];
580 wp_send_json_error($data, 404);
581 }
582 $formEntryMeta = $entryMeta->get(
583 array(
584 'meta_key',
585 'meta_value',
586 ),
587 array(
588 'bitforms_form_entry_id' => $entryID,
589 )
590 );
591 $entries = array();
592 foreach ($formEntryMeta as $key => $value) {
593 $entries[$value->meta_key] = $value->meta_value;
594 }
595 $formContent = $formManager->getFormContent();
596 $fieldsKey = $formManager->getFieldsKey();
597 $form_fields = $formContent->fields;
598 foreach ($form_fields as $key => $value) {
599 // $field_name = preg_replace('/[\`\~\!\@\#\$\'\.\s\?\+\-\*\&\|\/\\!]/', '_', $value->lbl);
600 if (isset($entries[$key])) {
601 $form_fields->{$key}->val = $entries[$key];
602 $form_fields->{$key}->name = $key;
603 }
604 }
605
606 $formData = array(
607 'fields' => $form_fields,
608 'fieldsKey' => $fieldsKey,
609 );
610 return rest_ensure_response(['data' => $formData, 'status' => 200, 'success' => true]);
611 }
612 public function getEntryResponse($request)
613 {
614 $formId = wp_unslash($request['id']);
615 $limit = !empty($request['per_page']) ? wp_unslash($request['per_page']) : 200;
616 if ($limit > 200) {
617 $data = ['message' => 'A maximum of 200 records can be fetched per request', 'code' => 3970];
618 wp_send_json_success($data, 200);
619 }
620 $offset = !empty($request['page']) ? wp_unslash($request['page']) : null;
621 $formManager = new AdminFormManager($formId);
622 if (!$formManager->isExist()) {
623 $data = ['message' => 'No form was found. Please check and try again', 'code' => 3130];
624 wp_send_json_error($data, 404);
625 }
626 $formEntry = new FormEntryModel();
627 $entries = $formEntry->get(
628 'id',
629 array(
630 'form_id' => $formId,
631 ),
632 null,
633 null,
634 'created_at',
635 'DESC'
636 );
637 if (is_wp_error($entries)) {
638 if ($entries->get_code() === 'result_empty') {
639 return rest_ensure_response(['data' => [], 'status' => 200, 'message' => 'form is empty', 'success' => true]);
640 }
641 return $entries;
642 }
643 $formFields = $formManager->getFieldLabel(true);
644 $entryMeta = new FormEntryMetaModel();
645 $formEntries = $entryMeta->getEntryMeta($formFields, $entries, $limit, $offset);
646 foreach ($formFields as $field) {
647 foreach ($formEntries['entries'] as $entry) {
648 if (isset($field['key'], $entry) && $field['type'] == 'file-up') {
649 $key = $field['key'];
650 if (is_array(json_decode($entry->$key))) {
651 $fileData = array();
652 foreach (json_decode($entry->$key) as $file) {
653 $path = "bitforms/bitforms-file/?formID=$formId&entryID=$entry->entry_id&fileID=$file";
654 $fileData[] = site_url($path, null);
655 }
656 $entry->$key = wp_json_encode($fileData, JSON_UNESCAPED_SLASHES);
657 }
658 }
659 }
660 }
661 return rest_ensure_response(['data' => $formEntries, 'status' => 200, 'success' => true]);
662 }
663 }
664