PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.7.0
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.7.0
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
← All changes | includes/API/Controller/EntryController.php +38 -653 1.92.7.0 View file →
@@ -1,671 +1,56 @@
1 1 <?php
2 2
3 3 namespace BitCode\BitForm\API\Controller;
4 4
5 +use BitCode\BitForm\Core\Database\FormModel;
5 6 use WP_Error;
6 7 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;
8 +use WP_REST_Request;
18 9
19 10 class EntryController extends WP_REST_Controller
20 11 {
21 - protected static $form;
22 - protected $formModel;
23 - protected $form_id;
24 - private $_has_upload;
25 - private $_field_label;
26 - private $_fields;
12 + protected static $form;
13 + protected $formModel;
14 + protected $form_id;
27 15
28 - function __construct()
29 - {
30 - $this->formModel = new FormModel();
31 - }
16 + public function __construct()
17 + {
18 + $this->formModel = new FormModel();
19 + }
32 20
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 - }
21 + public function googleAuth()
22 + {
23 + $state = $_GET['state'];
24 + $code = urlencode($_GET['code']);
25 + // echo $code;
26 + if (wp_redirect($state . '&code=' . $code, 302)) {
27 + exit;
41 28 }
29 + }
42 30
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 - }
31 + public function oneDriveAuth()
32 + {
33 + $state = $_GET['state'];
34 + $code = urlencode($_GET['code']);
35 + // echo $code;
36 + if (wp_redirect($state . '&code=' . $code, 302)) {
37 + exit;
51 38 }
39 + }
52 40
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;
41 + public function authRedirect(WP_REST_Request $request)
42 + {
43 + $state = $request->get_param('state');
44 + $parsed_url = parse_url(get_site_url());
45 + $site_url = $parsed_url['scheme'] . '://' . $parsed_url['host'];
46 + $site_url .= empty($parsed_url['port']) ? null : ':' . $parsed_url['port'];
47 + if (false === strpos($state, $site_url)) {
48 + return new WP_Error('404');
70 49 }
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 - }
50 + $params = $request->get_params();
51 + unset($params['rest_route'], $params['state']);
52 + if (wp_redirect($state . '&' . http_build_query($params), 302)) {
53 + exit;
81 54 }
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 - }
55 + }
671 56 }