PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.0
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.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
bit-form / includes / Core / Integration / Pods / PodsHandler.php

PodsHandler.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 2.0, at includes/Core/Integration/Pods/PodsHandler.php

227 lines 9.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Pod Integration
5 *
6 */
7
8 namespace BitCode\BitForm\Core\Integration\Pods;
9
10 use BitCode\BitForm\Core\Form\FormManager;
11 use BitCode\BitForm\Core\Integration\IntegrationHandler;
12 use BitCode\BitForm\Core\Util\SmartTags;
13 use BitCode\BitForm\Core\Util\WpFileHandler;
14
15 /**
16 * Provide functionality for POD integration
17 */
18 class PodsHandler {
19 private $_formID;
20 private $_wpdb;
21
22 public function __construct($integrationID, $fromID) {
23 $this->_formID = $fromID;
24
25 global $wpdb;
26 $this->_wpdb = $wpdb;
27 }
28
29 /**
30 * Helps to register ajax function's with wp
31 *
32 * @return null
33 */
34 private function smartTagMappingValue($fieldMap) {
35 $specialTagFieldValue = [];
36 $data = SmartTags::getPostUserData(true);
37 $specialTagFields = SmartTags::smartTagFieldKeys();
38
39 foreach ($fieldMap as $value) {
40 if (isset($value->formField)) {
41 $triggerValue = $value->formField;
42 if (in_array($triggerValue, $specialTagFields)) {
43 $specialTagFieldValue[$value->formField] = SmartTags::getSmartTagValue($triggerValue, $data);
44 }
45 }
46 }
47 return $specialTagFieldValue;
48 }
49
50 private function podMappingField($integrationDetails, $podField, $formFields, $fieldValues, $entryID, $postID) {
51 $string_types = [
52 'text',
53 'textarea',
54 'radio',
55 'number',
56 'oembed',
57 'password',
58 'email',
59 'pick',
60 'paragraph',
61 'wysiwyg',
62 'code',
63 'check',
64 'color',
65 'website',
66 'date',
67 'time',
68 'datetime',
69 'datetime-local',
70 'url',
71 ];
72 $fileUploadHandle = new WpFileHandler($this->_formID);
73 $podData = [];
74 foreach ($integrationDetails->pod_map as $fieldPair) {
75 foreach ($podField as $pod) {
76 foreach ($formFields as $field) {
77 if (!empty($fieldPair->podFormField) && !empty($fieldPair->formField)) {
78 if ($fieldPair->formField === $field['key'] && in_array($pod['type'], $string_types) && !empty($fieldValues[$fieldPair->formField])) {
79 $podData[$fieldPair->podFormField] = $fieldValues[$fieldPair->formField];
80 } elseif ($fieldPair->formField === $field['key'] && 'decision-box' === $field['type'] && 'boolean' === $pod['type']) {
81 if (1 === (int) $fieldValues[$fieldPair->formField] || 0 === (int) $fieldValues[$fieldPair->formField]) {
82 $podData[$fieldPair->podFormField] = $fieldValues[$fieldPair->formField];
83 }
84 } elseif ($fieldPair->formField === $field['key'] && isset($field['mul'], $field) && in_array($pod['type'], $string_types) && 'file-up' !== $field['type']) {
85 if (true === $field['mul'] && 'multi' === $pod['pick_format_type'] && !empty($fieldValues[$fieldPair->formField])) {
86 $podData[$fieldPair->podFormField] = explode(',', $fieldValues[$fieldPair->formField]);
87 } elseif (false === $field['mul'] && 'multi' === $pod['pick_format_type'] && !empty($fieldValues[$fieldPair->formField])) {
88 $podData[$fieldPair->podFormField] = $fieldValues[$fieldPair->formField];
89 }
90 } elseif ($fieldPair->formField === $field['key'] && 'file-up' === $field['type'] && 'file' === $pod['type']) {
91 if (!empty($fieldValues[$fieldPair->formField])) {
92 if ('multi' === $pod['file_format_type']) {
93 $attachmentId = $fileUploadHandle->multiFileMoveWpMedia($entryID, $fieldValues[$fieldPair->formField], $postID);
94 if (!empty($attachmentId)) {
95 update_post_meta($postID, $fieldPair->podFormField, $attachmentId);
96 update_post_meta($postID, '_pods_' . $fieldPair->podFormField, json_encode($attachmentId));
97 }
98 } elseif ('single' === $pod['file_format_type']) {
99 $attachmentId = $fileUploadHandle->singleFileMoveWpMedia($entryID, $fieldValues[$fieldPair->formField], $postID);
100 if (!empty($attachmentId)) {
101 update_post_meta($postID, $fieldPair->podFormField, $attachmentId);
102 update_post_meta($postID, '_pods_' . $fieldPair->podFormField, json_encode($attachmentId));
103 }
104 }
105 }
106 }
107 }
108 }
109 }
110 }
111 return $podData;
112 }
113
114 private function postFieldMapping($fieldData, $post_map, $formFields, $fieldValues, $postID, $entryID) {
115 $uploadFeatureImg = new WpFileHandler($this->_formID);
116 foreach ($post_map as $fieldPair) {
117 foreach ($formFields as $field) {
118 if (!empty($fieldPair->postFormField) && !empty($fieldPair->formField)) {
119 if ($fieldPair->formField === $field['key'] && '_thumbnail_id' !== $fieldPair->postFormField) {
120 $fieldData[$fieldPair->postFormField] = $fieldValues[$fieldPair->formField];
121 } elseif ($fieldPair->formField === $field['key'] && 'file-up' === $field['type'] && '_thumbnail_id' === $fieldPair->postFormField && !empty($fieldValues[$field['key']])) {
122 if (!empty($fieldValues[$field['key']])) {
123 $uploadFeatureImg->uploadFeatureImg($fieldValues[$field['key']], $entryID, $postID);
124 }
125 }
126 }
127 }
128 }
129 return $fieldData;
130 }
131
132 public function execute(IntegrationHandler $integrationHandler, $integrationData, $fieldValues, $entryID, $logID) {
133 $integrationDetails = is_string($integrationData->integration_details) ? json_decode($integrationData->integration_details) : $integrationData->integration_details;
134 $fieldData = [];
135 $taxonomy = new WpFileHandler($integrationData->form_id);
136
137 $formManger = new FormManager($integrationData->form_id);
138 $formFields = $formManger->getFields();
139 $allFields = pods($integrationDetails->post_type);
140 $podField = [];
141
142 foreach ($allFields->fields as $key => $field) {
143 $podField[$key]['type'] = $field['type'];
144 $podField[$key]['pick_format_type'] = $field['options']['pick_format_type'];
145 $podField[$key]['file_format_type'] = $field['options']['file_format_type'];
146 }
147
148 $fieldData['comment_status'] = isset($integrationDetails->comment_status) ? $integrationDetails->comment_status : '';
149 $fieldData['post_status'] = isset($integrationDetails->post_status) ? $integrationDetails->post_status : '';
150 $fieldData['post_type'] = isset($integrationDetails->post_type) ? $integrationDetails->post_type : '';
151 if (isset($integrationDetails->post_author) && 'logged_in_user' !== $integrationDetails->post_author) {
152 $fieldData['post_author'] = $integrationDetails->post_author;
153 } else {
154 $fieldData['post_author'] = get_current_user_id();
155 }
156
157 $exist_id = $fieldData['post_type'] . '_' . $entryID;
158 $sql = "SELECT * FROM `{$this->_wpdb->prefix}bitforms_form_entrymeta` WHERE `meta_key`='$exist_id' ";
159 $exist_post_id = $this->_wpdb->get_results($sql);
160 $taxanomyData = $taxonomy->taxonomyData($formFields, $fieldValues);
161
162 if ([] === $exist_post_id) {
163 $post_id = wp_insert_post(['post_title' => 'null', 'post_content' => 'null']);
164 $smartTagValue = $this->smartTagMappingValue($integrationDetails->post_map);
165 $updatedValues = $fieldValues + $smartTagValue;
166 $updateData = $this->postFieldMapping($fieldData, $integrationDetails->post_map, $formFields, $updatedValues, $post_id, $entryID);
167 $updateData['ID'] = $post_id;
168 unset($updateData['_thumbnail_id']);
169 wp_update_post($updateData, true);
170
171 if (!empty($taxanomyData)) {
172 foreach ($taxanomyData as $taxanomy) {
173 wp_set_post_terms($post_id, $taxanomy['value'], $taxanomy['term'], false);
174 }
175 }
176
177 $this->_wpdb->insert(
178 "{$this->_wpdb->prefix}bitforms_form_entrymeta",
179 [
180 'meta_key' => $fieldData['post_type'] . '_' . $entryID,
181 'meta_value' => $post_id,
182 'bitforms_form_entry_id' => $entryID,
183 ]
184 );
185
186 $smartTagValue = $this->smartTagMappingValue($integrationDetails->pod_map);
187 $updatedPodValues = $fieldValues + $smartTagValue;
188
189 $podData = $this->podMappingField($integrationDetails, $podField, $formFields, $updatedPodValues, $entryID, $post_id);
190 foreach ($podData as $key => $data) {
191 if (is_array($data)) {
192 $count = count($data);
193 for ($i = 0; $i < $count; $i++) {
194 add_post_meta($post_id, $key, $data[$i]);
195 }
196 } else {
197 add_post_meta($post_id, $key, $data);
198 }
199 }
200 } else {
201 if (!empty($taxanomyData)) {
202 foreach ($taxanomyData as $taxanomy) {
203 wp_set_post_terms($exist_post_id[0]->meta_value, $taxanomy['value'], $taxanomy['term'], false);
204 }
205 }
206 $podData = $this->podMappingField($integrationDetails, $podField, $formFields, $fieldValues, $entryID, $exist_post_id[0]->meta_value);
207 foreach ($podData as $key => $data) {
208 if (is_array($data)) {
209 $count = count($data);
210 for ($i = 0; $i < $count; $i++) {
211 delete_post_meta($exist_post_id[0]->meta_value, $key);
212 }
213 for ($i = 0; $i < $count; $i++) {
214 add_post_meta($exist_post_id[0]->meta_value, $key, $data[$i]);
215 }
216 } else {
217 update_post_meta($exist_post_id[0]->meta_value, $key, $data);
218 }
219 }
220 $updateData = $this->postFieldMapping($fieldData, $integrationDetails->post_map, $formFields, $fieldValues, $exist_post_id[0]->meta_value, $entryID);
221 $updateData['ID'] = $exist_post_id[0]->meta_value;
222 wp_update_post($updateData, true);
223 }
224 return $exist_post_id;
225 }
226 }
227