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

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