PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.6.17
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.6.17
1.6.7 1.6.8 1.6.9 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.20 1.6.21 1.6.22 1.6.23 1.6.24 1.6.25 1.6.26 1.6.27 1.6.28 1.6.3 1.6.4 1.6.5 1.6.6 All 74 releases
weforms / includes / class-form-entry.php

class-form-entry.php in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.6.17, at includes/class-form-entry.php

455 lines 17.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Single Form Entry Class
5 *
6 * @since 1.1.0
7 */
8 class WeForms_Form_Entry {
9
10 /**
11 * The form object
12 *
13 * @var \WeForms_Form
14 */
15 private $form;
16
17 /**
18 * Entry id
19 *
20 * @var int
21 */
22 public $id = 0;
23
24 /**
25 * The form id
26 *
27 * @var int
28 */
29 public $form_id = 0;
30
31 /**
32 * The user id
33 *
34 * @var int
35 */
36 public $user_id = 0;
37
38 /**
39 * IP Address
40 *
41 * @var string
42 */
43 public $ip_address = '127.0.0.1';
44
45 /**
46 * The device of the user
47 *
48 * @var string
49 */
50 public $device = '';
51
52 /**
53 * Referer URL
54 *
55 * @var string
56 */
57 public $referer = '';
58
59 /**
60 * Entry creation date
61 *
62 * @var string
63 */
64 public $created = '0000-00-00 00:00:00';
65
66 /**
67 * Form fields
68 *
69 * @var array
70 */
71 public $fields = [];
72
73 /**
74 * Form fields raw data
75 *
76 * @var array
77 */
78 public $raw_fields = [];
79
80 /**
81 * The constructor
82 *
83 * @param int $entry_id
84 * @param \WeForms_Form $form
85 */
86 public function __construct( $entry_id, $form ) {
87 $this->id = $entry_id;
88 $this->form = $form;
89
90 $this->populate_entry_data();
91 }
92
93 /**
94 * Populate the class with data
95 *
96 * @TODO: Abstract this
97 *
98 * @return void
99 */
100 public function populate_entry_data() {
101 global $wpdb;
102
103 // return if we populated the already, ensures single db call
104 if ( $this->form_id ) {
105 return;
106 }
107
108 $grid_css_added = false;
109 $grid_css = '<style>.wpufTable {display: table; width: 100%; } .wpufTableRow {display: table-row; } .wpufTableRow:nth-child(even) {background-color: #f5f5f5; } .wpufTableHeading {background-color: #eee; display: table-header-group; font-weight: bold; } .wpufTableCell, .wpufTableHead {border: none; display: table-cell; padding: 3px 10px; } .wpufTableFoot {background-color: #eee; display: table-footer-group; font-weight: bold; } .wpufTableBody {display: table-row-group; }</style>';
110
111 $values = [];
112
113 $query = "SELECT * FROM {$wpdb->weforms_entries} as entry
114 LEFT JOIN {$wpdb->weforms_entrymeta} AS meta ON entry.id = meta.weforms_entry_id
115 WHERE entry.id = {$this->id}";
116
117 $results = $wpdb->get_results( $query );
118
119 if ( $results ) {
120 $first_row = reset( $results );
121
122 $this->form_id = (int) $first_row->form_id;
123 $this->user_id = (int) $first_row->user_id;
124 $this->ip_address = long2ip( $first_row->user_ip );
125 $this->device = $first_row->user_device;
126 $this->referer = $first_row->referer;
127 $this->created = $first_row->created_at;
128
129 $this->fields = $this->form->get_field_values();
130 $this->raw_fields = $this->fields;
131
132 foreach ( $results as $result ) {
133 if ( array_key_exists( $result->meta_key, $this->fields ) ) {
134 $field = $this->fields[ $result->meta_key ];
135 $value = $result->meta_value;
136
137 $this->raw_fields[ $result->meta_key ]['value'] = $value;
138
139 if ( $field['type'] == 'textarea_field' ) {
140 $value = weforms_format_text( $value );
141 } elseif ( $field['type'] == 'name_field' ) {
142 $value = implode( ' ', explode( WeForms::$field_separator, $value ) );
143 } elseif ( in_array( $field['type'], [ 'dropdown_field', 'radio_field' ] ) ) {
144 if ( isset( $field['options'] ) && $field['options'] ) {
145 if ( isset( $field['options'][ $value ] ) ) {
146 $value = $field['options'][ $value ];
147 }
148 }
149 } elseif ( in_array( $field['type'], [ 'multiple_select', 'checkbox_field' ] ) ) {
150 $value = explode( WeForms::$field_separator, $value );
151 $temp_value = $value;
152
153 if ( is_array( $value ) && $value ) {
154 $new_array = [];
155
156 foreach ( $value as $option_key ) {
157 if ( is_array( $field['options'] ) && array_key_exists( $option_key, $field['options'] ) ) {
158 $new_array[] = $field['options'][ $option_key ];
159 } else {
160 $new_array[] = $option_key;
161 }
162 }
163
164 $value = $new_array;
165 }
166 } elseif ( in_array( $field['type'], [ 'image_upload', 'file_upload' ] ) ) {
167 $file_field = '';
168 $value = maybe_unserialize( $value );
169
170 if ( is_array( $value ) && $value ) {
171 foreach ( $value as $attachment_id ) {
172 if ( $field['type'] == 'image_upload' ) {
173 $thumb = wp_get_attachment_image( $attachment_id, 'thumbnail' );
174 } else {
175 $thumb = get_post_field( 'post_title', $attachment_id );
176 }
177
178 $full_size = wp_get_attachment_url( $attachment_id );
179
180 $file_field .= sprintf( '<a href="%s" target="_blank">%s</a> ', $full_size, $thumb );
181 }
182 }
183
184 $value = $file_field;
185 } elseif ( $field['type'] == 'google_map' ) {
186 list( $address, $lat, $long ) = explode( '||', $value );
187
188 $value = [
189 'address' => $address,
190 'lat' => trim( $lat ),
191 'long' => trim( $long ),
192 ];
193 } elseif ( $field['type'] == 'multiple_product' ) {
194 $field_value = unserialize( $value );
195
196 $serialized_value = [];
197
198 if ( is_array( $field_value ) ) {
199 foreach ( $field_value as $key => $sfv ) {
200 if ( is_array( $sfv ) ) {
201 $v = [];
202
203 foreach ( $sfv as $key => $sv ) {
204 $sv = str_replace( [ '_', '-' ], ' ', $key ) . ': ' . $sv;
205 $sv = ucwords( $sv );
206 $v[] = $sv;
207 }
208
209 $serialized_value[] = implode( '<br> ', $v );
210 }
211 }
212
213 $value = implode( '<br> <br> ', $serialized_value );
214 }
215 } elseif ( $field['type'] == 'checkbox_grid' ) {
216 $entry_value = unserialize( $value );
217
218 if ( $entry_value ) {
219 $return = '';
220 $check = '';
221
222 if ( !$grid_css_added ) {
223 $return = $grid_css;
224 $grid_css_added = true;
225 }
226
227 $new_val = [];
228
229 foreach ( $entry_value as $key => $option_value ) {
230 $new_val[ $key ] = $option_value;
231 }
232
233 if ( $field['grid_rows'] && count( $field['grid_rows'] ) > 0 && $field['grid_columns'] && count( $field['grid_columns'] ) > 0 ) {
234 $return .= '<div class="wpufTable">
235 <div class="wpufTableHeading">
236 <div class="wpufTableRow">
237 <div class="wpufTableHead">&nbsp;</div>';
238
239 foreach ( $field['grid_columns'] as $column ) {
240 $return .= '<div class="wpufTableHead">' . $column . '</div>';
241 }
242
243 $return .= '</div>
244 </div>
245 <div class="wpufTableBody">';
246
247 foreach ( $field['grid_rows'] as $row_key => $row_value ) {
248 $return .= '<div class="wpufTableRow">
249 <div class="wpufTableHead">' . $row_value . '</div>';
250
251 foreach ( $field['grid_columns'] as $column_key => $column_value ) {
252 if ( isset( $new_val[ $row_key ] ) ) {
253 $check = ( in_array( $column_value, $new_val[ $row_key ] ) ) ? 'checked ' : '';
254 }
255
256 $return .= '<div class="wpufTableCell">
257 <label class="wpuf-radio-inline">
258 <input
259 name="' . $field['name'] . '[' . $row_key . '][]"
260 class="wpuf_' . $field['name'] . '_' . $this->form_id . '"
261 type="checkbox"
262 value="' . esc_attr( $column_value ) . '"'
263 . $check . 'disabled
264 />
265 </label>
266 </div>';
267 }
268
269 $return .= '</div>';
270 }
271
272 $return .= '</div>
273 </div>';
274 }
275
276 $value = $return;
277 }
278 } elseif ( $field['type'] == 'multiple_choice_grid' ) {
279 $entry_value = unserialize( $value );
280
281 if ( $entry_value ) {
282 $return = '';
283 $check = '';
284
285 if ( !$grid_css_added ) {
286 $return = $grid_css;
287 $grid_css_added = true;
288 }
289
290 $new_val = [];
291
292 foreach ( $entry_value as $key => $option_value ) {
293 $new_val[ $key ] = $option_value;
294 }
295
296 if ( $field['grid_rows'] && count( $field['grid_rows'] ) > 0 && $field['grid_columns'] && count( $field['grid_columns'] ) > 0 ) {
297 $return .= '<div class="wpufTable">
298 <div class="wpufTableHeading">
299 <div class="wpufTableRow">
300 <div class="wpufTableHead">&nbsp;</div>';
301
302 foreach ( $field['grid_columns'] as $column ) {
303 $return .= '<div class="wpufTableHead">' . $column . '</div>';
304 }
305
306 $return .= '</div>
307 </div>
308 <div class="wpufTableBody">';
309
310 foreach ( $field['grid_rows'] as $row_key => $row_value ) {
311 $return .= '<div class="wpufTableRow">
312 <div class="wpufTableHead">' . $row_value . '</div>';
313
314 foreach ( $field['grid_columns'] as $column_key => $column_value ) {
315 if ( isset( $new_val[ $row_key ] ) ) {
316 $check = ( $new_val[ $row_key ] == $column_value ) ? 'checked ' : '';
317 }
318
319 $return .= '<div class="wpufTableCell">
320 <label class="wpuf-radio-inline">
321 <input
322 name="' . $field['name'] . '[' . $row_key . ']"
323 class="wpuf_' . $field['name'] . '_' . $this->form_id . '"
324 type="radio"
325 value="' . esc_attr( $column_value ) . '"'
326 . $check . 'disabled
327 />
328 </label>
329 </div>';
330 }
331
332 $return .= '</div>';
333 }
334
335 $return .= '</div>
336 </div>';
337 }
338
339 $value = $return;
340 }
341 } elseif ( $field['type'] == 'address_field' || is_serialized( $value ) ) {
342 $field_value = unserialize( $value );
343
344 $serialized_value = [];
345
346 if ( is_array( $field_value ) ) {
347 foreach ( $field_value as $key => $sfv ) {
348 $sfv = str_replace( [ '_', '-' ], ' ', $key ) . ': ' . $sfv;
349 $sfv = ucwords( $sfv );
350 $serialized_value[] = $sfv;
351 }
352
353 $value = implode( '<br> ', $serialized_value );
354 }
355 } elseif ( $field['type'] == 'signature_field' ) {
356 $url = $value;
357
358 if ( isset( $_REQUEST['action'] ) != 'weforms_pdf_download' ) {
359 $url = content_url() . '/' . $value;
360 $value = sprintf( '<img src="%s">', $url );
361 $value .= sprintf( '<a style="margin-left: -200px" href="%s">Download</a>', $url );
362 }
363 else{
364 $value = sprintf( '<img src="%s">', $url );
365 }
366 }
367
368 $this->fields[ $result->meta_key ]['value'] = apply_filters( 'weforms_entry_meta_field', $value, $field );
369 }
370 }
371 }
372 }
373
374 /**
375 * Get entry fields
376 *
377 * @return array
378 */
379 public function get_fields() {
380 return $this->fields;
381 }
382
383 /**
384 * Get entry fields
385 *
386 * @return array
387 */
388 public function get_raw_fields() {
389 return $this->raw_fields;
390 }
391
392 /**
393 * Get entry metadata
394 *
395 * @return array
396 */
397 public function get_metadata() {
398 return [
399 'id' => $this->id,
400 'form_id' => $this->form_id,
401 'form_title' => $this->form->get_name(),
402 'user' => $this->user_id ? get_user_by( 'id', $this->user_id )->display_name : false,
403 'ip_address' => $this->ip_address,
404 'device' => $this->device,
405 'referer' => $this->referer,
406 'created' => date_i18n( 'F j, Y g:i a', strtotime( $this->created ) ),
407 ];
408 }
409
410 /**
411 * Get entry metadata
412 *
413 * @return array
414 */
415 public function get_payment_data() {
416 global $wpdb;
417
418 if ( !class_exists( 'WeForms_Payment' ) ) {
419 return;
420 }
421
422 return $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}weforms_payments WHERE entry_id = {$this->id} " );
423 }
424
425 /**
426 * Get Form from entry id.
427 *
428 * @param int $entry_id The entry id.
429 * @global object $wpdb The Wordpress database object.
430 *
431 * @return object The form object.
432 */
433 public static function get_form( $entry_id ) {
434 $form_id = self::get_form_id( $entry_id );
435
436 return ! empty( $form_id ) ? weforms()->form->get( $form_id ) : null;
437 }
438
439 /**
440 * Get form id from entry id.
441 *
442 * @param int $entry_id The entry id.
443 * @global object $wpdb The Wordpress database object.
444 *
445 * @return int The form id.
446 */
447 public static function get_form_id( $entry_id ) {
448 global $wpdb;
449
450 $results = $wpdb->get_results( "SELECT form_id FROM {$wpdb->prefix}weforms_entries WHERE id = {$entry_id} " );
451
452 return ! empty( $results[0]->form_id ) ? $results[0]->form_id : null;
453 }
454 }
455