PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 1.9
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v1.9
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.9, at includes/API/Controller/EntryController.php

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