PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.3.6
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.3.6
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 / functions.php

functions.php in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.3.6, at includes/functions.php

1,232 lines 33.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Get a single form
5 *
6 * @since 1.0.3
7 *
8 * @param int $form_id
9 *
10 * @return false|WP_Post
11 */
12 function weform_get_form( $form_id ) {
13 return weforms()->form->get( $form_id );
14 }
15
16 /**
17 * Get contact form templates
18 *
19 * @return array
20 */
21 function weforms_get_form_template_categories() {
22
23 $categories = array(
24 'default' => array(
25 'name' => 'Default Templates',
26 'icon' => 'fa fa-bars',
27 ),
28 'registration' => array(
29 'name' => 'Registration Templates',
30 'icon' => 'fa fa-user-plus',
31 ),
32 'application' => array(
33 'name' => 'Application Templates',
34 'icon' => 'fa fa-address-card-o',
35 ),
36 'request' => array(
37 'name' => 'Request Templates',
38 'icon' => 'fa fa-hand-paper-o',
39 ),
40 'event' => array(
41 'name' => 'Event Templates',
42 'icon' => 'fa fa-calendar',
43 ),
44 'feedback' => array(
45 'name' => 'Feedback Templates',
46 'icon' => 'fa fa-comments',
47 ),
48 'employment' => array(
49 'name' => 'Employment Templates',
50 'icon' => 'fa fa-suitcase',
51 ),
52 'payment' => array(
53 'name' => 'Payment Templates',
54 'icon' => 'fa fa-money',
55 ),
56 'reservation' => array(
57 'name' => 'Reservation Templates',
58 'icon' => 'fa fa-bandcamp',
59 ),
60 'others' => array(
61 'name' => 'Others Templates',
62 'icon' => 'fa fa-info-circle',
63 ),
64 );
65
66 return apply_filters( 'weforms_form_template_categories', $categories );
67 }
68
69 /**
70 * Get entries by a form_id
71 *
72 * @param int $form_id
73 * @param array $args
74 *
75 * @return Object
76 */
77 function weforms_get_form_entries( $form_id, $args = array() ) {
78 global $wpdb;
79
80 $defaults = array(
81 'number' => 10,
82 'offset' => 0,
83 'orderby' => 'created_at',
84 'status' => 'publish',
85 'order' => 'DESC',
86 );
87
88 $r = wp_parse_args( $args, $defaults );
89
90 $query = 'SELECT id, form_id, user_id, INET_NTOA( user_ip ) as ip_address, created_at
91 FROM ' . $wpdb->weforms_entries .
92 ' WHERE form_id = ' . $form_id . ' AND status = \'' . $r['status'] . '\'' .
93 ' ORDER BY ' . $r['orderby'] . ' ' . $r['order'];
94
95 if ( ! empty( $r['offset'] ) && ! empty( $r['number'] ) ) {
96 $query .= ' LIMIT ' . $r['offset'] . ', ' . $r['number'];
97 }
98
99 $results = $wpdb->get_results( $query );
100
101 return $results;
102 }
103
104 /**
105 * Count all entries from weForms_entries table
106 *
107 * @param array $args
108 *
109 * @return int $number
110 */
111 function weforms_count_entries( $args = array() ) {
112 global $wpdb;
113
114 $defaults = array(
115 'number' => -1,
116 'offset' => 0,
117 'orderby' => 'created_at',
118 'status' => 'publish',
119 'order' => 'DESC',
120 );
121
122 $r = wp_parse_args( $args, $defaults );
123
124 $query = 'SELECT id, form_id, user_id, INET_NTOA( user_ip ) as ip_address, created_at
125 FROM ' . $wpdb->weforms_entries .
126 ' WHERE status = \'' . $r['status'] . '\'' .
127 ' ORDER BY ' . $r['orderby'] . ' ' . $r['order'];
128
129 if ( ! empty( $r['offset'] ) && ! empty( $r['number'] ) ) {
130 $query .= ' LIMIT ' . $r['offset'] . ', ' . $r['number'];
131 }
132
133 $results = $wpdb->get_results( $query );
134
135 return count($results);
136 }
137
138 /**
139 * Get payments by a form_id
140 *
141 * @param int $form_id
142 * @param array $args
143 *
144 * @return Object
145 */
146 function weforms_get_form_payments( $form_id, $args = array() ) {
147 global $wpdb;
148
149 $defaults = array(
150 'number' => 10,
151 'offset' => 0,
152 'orderby' => 'created_at',
153 'order' => 'DESC',
154 );
155
156 $r = wp_parse_args( $args, $defaults );
157
158 $query = 'SELECT * FROM ' . $wpdb->prefix . 'weforms_payments' .
159 ' WHERE form_id = ' . $form_id .
160 ' ORDER BY ' . $r['orderby'] . ' ' . $r['order'] .
161 ' LIMIT ' . $r['offset'] . ', ' . $r['number'];
162
163 $results = $wpdb->get_results( $query );
164
165 return $results;
166 }
167
168 /**
169 * Get an entry by id
170 *
171 * @param int $entry_id
172 *
173 * @return Object
174 */
175 function weforms_get_entry( $entry_id ) {
176 global $wpdb;
177
178 $cache_key = 'weforms-entry-' . $entry_id;
179 $entry = wp_cache_get( $cache_key, 'weforms' );
180
181 if ( false === $entry ) {
182 $query = 'SELECT id, form_id, user_id, user_device, referer, INET_NTOA( user_ip ) as ip_address, created_at
183 FROM ' . $wpdb->weforms_entries . '
184 WHERE id = %d';
185
186 $entry = $wpdb->get_row( $wpdb->prepare( $query, $entry_id ) );
187 wp_cache_set( $cache_key, $entry );
188 }
189
190 return $entry;
191 }
192
193 /**
194 * Insert a new entry
195 *
196 * @param array $args
197 * @param array $fields
198 *
199 * @return WP_Error|integer
200 */
201 function weforms_insert_entry( $args, $fields = array() ) {
202 global $wpdb;
203
204 $browser = weforms_get_browser();
205
206 $defaults = array(
207 'form_id' => 0,
208 'user_id' => get_current_user_id(),
209 'user_ip' => ip2long( weforms_get_client_ip() ),
210 'user_device' => $browser['name'] . '/' . $browser['platform'],
211 'referer' => $_SERVER['HTTP_REFERER'],
212 'created_at' => current_time( 'mysql' )
213 );
214
215 $r = wp_parse_args( $args, $defaults );
216
217 if ( ! $r['form_id'] ) {
218 return new WP_Error( 'no-form-id', __( 'No form ID was found.', 'weforms' ) );
219 }
220
221 if ( ! $fields ) {
222 return new WP_Error( 'no-fields', __( 'No form fields were found.', 'weforms' ) );
223 }
224
225 $success = $wpdb->insert( $wpdb->weforms_entries, $r );
226
227 if ( is_wp_error( $success ) || ! $success ) {
228 return new WP_Error( 'could-not-create', __( 'Could not create an entry', 'weforms' ) );
229 }
230
231 $entry_id = $wpdb->insert_id;
232
233 foreach ( $fields as $key => $value ) {
234 weforms_add_entry_meta( $entry_id, $key, $value );
235 }
236
237 return $entry_id;
238 }
239
240 /**
241 * Change an entry status
242 *
243 * @param int $entry_id
244 * @param string $status
245 *
246 * @return int|boolean
247 */
248 function weforms_change_entry_status( $entry_id, $status ) {
249 global $wpdb;
250
251 return $wpdb->update(
252 $wpdb->weforms_entries,
253 array(
254 'status' => $status
255 ),
256 array(
257 'id' => $entry_id
258 ),
259 array( '%s' ),
260 array( '%d' )
261 );
262 }
263
264 /**
265 * Delete an entry
266 *
267 * @param int $entry_id
268 *
269 * @return int|boolean
270 */
271 function weforms_delete_entry( $entry_id ) {
272 global $wpdb;
273
274 weforms_delete_entry_attachments( $entry_id );
275
276 $deleted = $wpdb->delete(
277 $wpdb->weforms_entries, array(
278 'id' => $entry_id
279 ), array( '%d' )
280 );
281
282 if ( $deleted ) {
283 $wpdb->delete(
284 $wpdb->weforms_entrymeta, array(
285 'weforms_entry_id' => $entry_id
286 ), array( '%d' )
287 );
288 }
289
290 return $deleted;
291 }
292
293 /**
294 * Delete attachments of an entry
295 *
296 * @param int $entry_id
297 *
298 * @since 1.3.5
299 */
300 function weforms_delete_entry_attachments( $entry_id ) {
301 $entry = weforms_get_entry( $entry_id );
302 $fields = weforms_get_form_field_labels( $entry->form_id );
303
304 if ( ! $fields ) {
305 return false;
306 }
307
308 foreach ( $fields as $meta_key => $field ) {
309 $value = weforms_get_entry_meta( $entry_id, $meta_key, true );
310
311 if ( in_array( $field['type'], array( 'image_upload', 'file_upload' ) ) ) {
312 if ( is_array( $value ) && $value ) {
313 foreach ( $value as $attachment_id ) {
314 wp_delete_attachment( $attachment_id, true );
315 }
316 }
317 }
318 }
319 }
320
321 /**
322 * Add meta data field to an entry.
323 *
324 * @param int $entry_id Entry ID.
325 * @param string $meta_key Metadata name.
326 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
327 * @param bool $unique Optional. Whether the same key should not be added.
328 * Default false.
329 * @return int|false Meta ID on success, false on failure.
330 */
331 function weforms_add_entry_meta( $entry_id, $meta_key, $meta_value, $unique = false ) {
332 return add_metadata( 'weforms_entry', $entry_id, $meta_key, $meta_value, $unique );
333 }
334
335 /**
336 * Retrieve entry meta field for a entry.
337 *
338 * @param int $entry_id Entry ID.
339 * @param string $key Optional. The meta key to retrieve. By default, returns
340 * data for all keys. Default empty.
341 * @param bool $single Optional. Whether to return a single value. Default false.
342 * @return mixed Will be an array if $single is false. Will be value of meta data
343 * field if $single is true.
344 */
345 function weforms_get_entry_meta( $entry_id, $key = '', $single = false ) {
346 return get_metadata( 'weforms_entry', $entry_id, $key, $single );
347 }
348
349 /**
350 * Update entry meta field based on entry ID.
351 *
352 * Use the $prev_value parameter to differentiate between meta fields with the
353 * same key and entry ID.
354 *
355 * If the meta field for the entry does not exist, it will be added.
356 *
357 * @param int $entry_id entry ID.
358 * @param string $meta_key Metadata key.
359 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
360 * @param mixed $prev_value Optional. Previous value to check before removing.
361 * Default empty.
362 * @return int|bool Meta ID if the key didn't exist, true on successful update,
363 * false on failure.
364 */
365 function weforms_update_entry_meta( $entry_id, $meta_key, $meta_value, $prev_value = '' ) {
366 return update_metadata( 'weforms_entry', $entry_id, $meta_key, $meta_value, $prev_value );
367 }
368
369 /**
370 * Delete everything from entry meta matching meta key.
371 *
372 * @param string $entry_meta_key Key to search for when deleting.
373 * @return bool Whether the entry meta key was deleted from the database.
374 */
375 function weforms_delete_entry_meta_by_key( $meta_key ) {
376 return delete_metadata( 'weforms_entry', null, $meta_key, '', true );
377 }
378
379 /**
380 * Retrieve entry meta fields, based on entry ID.
381 *
382 * The entry meta fields are retrieved from the cache where possible,
383 * so the function is optimized to be called more than once.
384 *
385 * @since 1.2.0
386 *
387 * @param int $entry_id Optional.
388 * @return array entry meta for the given entry.
389 */
390 function weforms_get_entry_custom( $entry_id = 0 ) {
391 $entry_id = absint( $entry_id );
392
393 return weforms_get_entry_meta( $entry_id );
394 }
395
396 /**
397 * Retrieve meta field names for a entry.
398 *
399 * If there are no meta fields, then nothing (null) will be returned.
400 *
401 * @param int $entry_id Optional.
402 * @return array|void Array of the keys, if retrieved.
403 */
404 function weforms_get_entry_custom_keys( $entry_id = 0 ) {
405 $custom = weforms_get_entry_custom( $entry_id );
406
407 if ( ! is_array( $custom ) ) {
408 return false;
409 }
410
411 if ( $keys = array_keys( $custom ) ) {
412 return $keys;
413 }
414 }
415
416 /**
417 * Get the number of entries count on a form
418 *
419 * @param int $form_id
420 *
421 * @return int
422 */
423 function weforms_count_form_entries( $form_id, $status = 'publish' ) {
424 global $wpdb;
425
426 return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT count(id) FROM ' . $wpdb->weforms_entries . ' WHERE form_id = %d AND status = %s', $form_id, $status ) );
427 }
428
429 /**
430 * Get the number of entries count on a form
431 *
432 * @param int $form_id
433 *
434 * @return int
435 */
436 function weforms_count_form_payments( $form_id ) {
437 global $wpdb;
438
439 if ( ! class_exists( 'WeForms_Payment' ) ) {
440 return 0;
441 }
442
443 return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT count(id) FROM ' . $wpdb->prefix . 'weforms_payments' . ' WHERE form_id = %d', $form_id ) );
444 }
445
446 /**
447 * Get table column heads for a form
448 *
449 * For now, return only text type fields
450 *
451 * @param int $form_id
452 *
453 * @return array
454 */
455 function weforms_get_entry_columns( $form_id, $limit = 6 ) {
456 $fields = weforms()->form->get( $form_id )->get_fields();
457 $columns = array();
458
459 // filter by input types
460 if ( $limit ) {
461
462 $fields = array_filter( $fields, function( $item ) {
463 return in_array( $item['template'], array( 'text_field', 'name_field', 'dropdown_field', 'radio_field', 'email_address', 'url_field' ) );
464 });
465 }
466
467 if ( $fields ) {
468 foreach ( $fields as $field ) {
469 $columns[ $field['name'] ] = $field['label'];
470 }
471 }
472
473 // if passed 0/false, return all collumns
474 if ( $limit && sizeof( $columns ) > $limit ) {
475 $columns = array_slice( $columns, 0, $limit ); // max 6 columns
476 }
477
478 return apply_filters( 'weforms_get_entry_columns', $columns, $form_id );
479 }
480
481 /**
482 * Get table column heads for a form
483 *
484 * For now, return only text type fields
485 *
486 * @param int $form_id
487 *
488 * @return array
489 */
490 function weforms_get_payment_columns( $form_id, $limit = 6 ) {
491 $fields = weforms()->form->get( $form_id )->get_fields();
492 $columns = array();
493
494 // filter by input types
495 if ( $limit ) {
496
497 $fields = array_filter( $fields, function( $item ) {
498 return in_array( $item['template'], array( 'text_field', 'name_field', 'dropdown_field', 'radio_field', 'email_address', 'url_field' ) );
499 });
500 }
501
502 if ( $fields ) {
503 foreach ( $fields as $field ) {
504 $columns[ $field['name'] ] = $field['label'];
505 }
506 }
507
508 // if passed 0/false, return all collumns
509 if ( $limit && sizeof( $columns ) > $limit ) {
510 $columns = array_slice( $columns, 0, $limit ); // max 6 columns
511 }
512
513 return apply_filters( 'weforms_get_entry_columns', $columns, $form_id );
514 }
515
516 /**
517 * Get fields from a form by it's meta key
518 *
519 * @param int $form_id
520 *
521 * @return array
522 */
523 function weforms_get_form_field_labels( $form_id ) {
524 $fields = weforms()->form->get( $form_id )->get_fields();
525 $exclude = array( 'step_start', 'section_break', 'recaptcha', 'shortcode', 'action_hook' );
526
527 if ( ! $fields ) {
528 return false;
529 }
530
531 $data = array();
532 foreach ( $fields as $field ) {
533 if ( empty( $field['name'] ) ) {
534 continue;
535 }
536
537 // exclude the fields
538 if ( in_array( $field['template'], $exclude ) ) {
539 continue;
540 }
541
542 $data[ $field['name'] ] = array(
543 'label' => $field['label'],
544 'type' => $field['template']
545 );
546 }
547
548 return $data;
549 }
550
551 /**
552 * Get data from an entry
553 *
554 * @param int $entry_id
555 * @param int $form_id
556 *
557 * @return false|array
558 */
559 function weforms_get_entry_data( $entry_id ) {
560 $data = array();
561 $entry = weforms_get_entry( $entry_id );
562 $fields = weforms_get_form_field_labels( $entry->form_id );
563
564 if ( ! $fields ) {
565 return false;
566 }
567
568 foreach ( $fields as $meta_key => $field ) {
569 $value = weforms_get_entry_meta( $entry_id, $meta_key, true );
570
571 if ( $field['type'] == 'textarea' ) {
572
573 $data[ $meta_key ] = weforms_format_text( $value );
574
575 } elseif ( $field['type'] == 'name' ) {
576
577 $data[ $meta_key ] = implode( ' ', explode( WeForms::$field_separator, $value ) );
578
579 } elseif ( in_array( $field['type'], array( 'image_upload', 'file_upload' ) ) ) {
580
581 $data[ $meta_key ] = '';
582
583 if ( is_array( $value ) && $value ) {
584
585 foreach ( $value as $attachment_id ) {
586
587 if ( $field['type'] == 'image_upload' ) {
588 $thumb = wp_get_attachment_image( $attachment_id, 'thumbnail' );
589 } else {
590 $thumb = get_post_field( 'post_title', $attachment_id );
591 }
592
593 $full_size = wp_get_attachment_url( $attachment_id );
594
595 $data[ $meta_key ] .= sprintf( '<a href="%s" target="_blank">%s</a> ', $full_size, $thumb );
596 }
597 }
598 } elseif ( in_array( $field['type'], array( 'checkbox', 'multiselect' ) ) ) {
599
600 $data[ $meta_key ] = explode( WeForms::$field_separator, $value );
601
602 } elseif ( $field['type'] == 'map' ) {
603
604 list( $lat, $long ) = explode( ',', $value );
605
606 $data[ $meta_key ] = array(
607 'lat' => $lat,
608 'long' => $long
609 );
610
611 } else {
612 $data[ $meta_key ] = $value;
613 }
614 }
615
616 return array(
617 'fields' => $fields,
618 'data' => $data
619 );
620 }
621
622 /**
623 * Format a text and apply WP function callbacks
624 *
625 * @param string $content
626 *
627 * @return string
628 */
629 function weforms_format_text( $content ) {
630 $content = wptexturize( $content );
631 $content = convert_smilies( $content );
632 $content = wpautop( $content );
633 $content = make_clickable( $content );
634
635 return $content;
636 }
637
638 /**
639 * Get User Agent browser and OS type
640 *
641 * @return array
642 */
643 function weforms_get_browser() {
644 $u_agent = $_SERVER['HTTP_USER_AGENT'];
645 $bname = 'Unknown';
646 $platform = 'Unknown';
647 $version = '';
648
649 // first get the platform
650 if ( preg_match( '/linux/i', $u_agent ) ) {
651 $platform = 'Linux';
652 } elseif ( preg_match( '/macintosh|mac os x/i', $u_agent ) ) {
653 $platform = 'MAC OS';
654 } elseif ( preg_match( '/windows|win32/i', $u_agent ) ) {
655 $platform = 'Windows';
656 }
657
658 // next get the name of the useragent yes seperately and for good reason
659 if ( preg_match( '/MSIE/i',$u_agent ) && ! preg_match( '/Opera/i',$u_agent ) ) {
660 $bname = 'Internet Explorer';
661 $ub = 'MSIE';
662 } elseif ( preg_match( '/Trident/i',$u_agent ) ) {
663 // this condition is for IE11
664 $bname = 'Internet Explorer';
665 $ub = 'rv';
666 } elseif ( preg_match( '/Firefox/i',$u_agent ) ) {
667 $bname = 'Mozilla Firefox';
668 $ub = 'Firefox';
669 } elseif ( preg_match( '/Chrome/i',$u_agent ) ) {
670 $bname = 'Google Chrome';
671 $ub = 'Chrome';
672 } elseif ( preg_match( '/Safari/i',$u_agent ) ) {
673 $bname = 'Apple Safari';
674 $ub = 'Safari';
675 } elseif ( preg_match( '/Opera/i',$u_agent ) ) {
676 $bname = 'Opera';
677 $ub = 'Opera';
678 } elseif ( preg_match( '/Netscape/i',$u_agent ) ) {
679 $bname = 'Netscape';
680 $ub = 'Netscape';
681 }
682
683 // finally get the correct version number
684 // Added "|:"
685 $known = array( 'Version', $ub, 'other' );
686 $pattern = '#(?<browser>' . join( '|', $known ) .
687 ')[/|: ]+(?<version>[0-9.|a-zA-Z.]*)#';
688 if ( ! preg_match_all( $pattern, $u_agent, $matches ) ) {
689 // we have no matching number just continue
690 }
691
692 // see how many we have
693 $i = count( $matches['browser'] );
694
695 if ( $i != 1 ) {
696 // we will have two since we are not using 'other' argument yet
697 // see if version is before or after the name
698 if ( strripos( $u_agent,'Version' ) < strripos( $u_agent,$ub ) ) {
699 $version = $matches['version'][0];
700 } else {
701 $version = $matches['version'][1];
702 }
703 } else {
704 $version = $matches['version'][0];
705 }
706
707 // check if we have a number
708 if ( $version == null || $version == '' ) {
709 $version = '';
710 }
711
712 return array(
713 'userAgent' => $u_agent,
714 'name' => $bname,
715 'version' => $version,
716 'platform' => $platform,
717 'pattern' => $pattern
718 );
719 }
720
721 /**
722 * Get form notification merge tags
723 *
724 * @since 1.0
725 *
726 * @return array
727 */
728 function weforms_get_merge_tags() {
729 $tags = array(
730 'form' => array(
731 'title' => __( 'Form', 'weforms' ),
732 'tags' => array(
733 'entry_id' => __( 'Entry ID', 'weforms' ),
734 'form_id' => __( 'Form ID', 'weforms' ),
735 'form_name' => __( 'Form Name', 'weforms' )
736 )
737 ),
738 'system' => array(
739 'title' => __( 'System', 'weforms' ),
740 'tags' => array(
741 'admin_email' => __( 'Site Administrator Email', 'weforms' ),
742 'date' => __( 'Date', 'weforms' ),
743 'site_name' => __( 'Site Title', 'weforms' ),
744 'site_url' => __( 'Site URL', 'weforms' ),
745 'page_title' => __( 'Embedded Page Title', 'weforms' ),
746 )
747 ),
748 'user' => array(
749 'title' => __( 'User', 'weforms' ),
750 'tags' => array(
751 'ip_address' => __( 'IP Address', 'weforms' ),
752 'user_id' => __( 'User ID', 'weforms' ),
753 'first_name' => __( 'First Name', 'weforms' ),
754 'last_name' => __( 'Last Name', 'weforms' ),
755 'display_name' => __( 'Display Name', 'weforms' ),
756 'user_email' => __( 'Email', 'weforms' ),
757 )
758 ),
759 'urls' => array(
760 'title' => __( 'URL\'s', 'weforms' ),
761 'tags' => array(
762 'url_page' => __( 'Embeded Page URL', 'weforms' ),
763 'url_referer' => __( 'Referer URL', 'weforms' ),
764 'url_login' => __( 'Login URL', 'weforms' ),
765 'url_logout' => __( 'Logout URL', 'weforms' ),
766 'url_register' => __( 'Register URL', 'weforms' ),
767 'url_lost_password' => __( 'Lost Password URL', 'weforms' ),
768 )
769 ),
770 );
771
772 return apply_filters( 'wpuf_cf_merge_tags', $tags );
773 }
774
775 /**
776 * Record a form view count
777 *
778 * @param int $form_id
779 *
780 * @return void
781 */
782 function weforms_track_form_view( $form_id ) {
783 // don't track administrators
784 if ( current_user_can( 'administrator' ) ) {
785 return;
786 }
787
788 // ability to turn this off if someone doesn't like this tracking
789 $is_enabled = apply_filters( 'weforms_track_form_view', true );
790
791 if ( ! $is_enabled ) {
792 return;
793 }
794
795 // increase the count
796 $meta_key = '_weforms_view_count';
797 $number = (int) get_post_meta( $form_id, $meta_key, true );
798
799 update_post_meta( $form_id, $meta_key, ( $number + 1 ) );
800 }
801
802 /**
803 * Get form view count of a form
804 *
805 * @param int $form_id
806 *
807 * @return int
808 */
809 function weforms_get_form_views( $form_id ) {
810 return (int) get_post_meta( $form_id, '_weforms_view_count', true );
811 }
812
813 /**
814 * Get the weForms global settings
815 *
816 * @param string $key
817 * @param mixed $default
818 *
819 * @return mixed
820 */
821 function weforms_get_settings( $key = '', $default = '' ) {
822
823 $settings = get_option( 'weforms_settings', array() );
824 $settings = apply_filters( 'weforms_get_settings', $settings );
825
826 if ( empty( $key ) ) {
827 return $settings;
828 }
829
830 if ( isset( $settings[ $key ] ) ) {
831 return $settings[ $key ];
832 }
833
834 return $default;
835 }
836
837
838 /**
839 * Update Settings
840 *
841 * @param array $updated_settings
842 *
843 * @return array
844 */
845 function weforms_update_settings( $updated_settings = array() ) {
846
847 $previuos_settings = weforms_get_settings();
848
849 $settings = array_merge( $previuos_settings, $updated_settings );
850
851 update_option( 'weforms_settings', $settings );
852
853 return $settings;
854 }
855
856 /**
857 * Form access capability for forms
858 *
859 * @since 1.0.5
860 *
861 * @return string
862 */
863 function weforms_form_access_capability() {
864 return apply_filters( 'weforms_form_access_capability', 'manage_options' );
865 }
866
867 /**
868 * Form access capability for forms
869 *
870 * @since 1.2.4
871 *
872 * @return string
873 */
874 function weforms_log_file_path() {
875 return apply_filters( 'weforms_log_file_path', WP_CONTENT_DIR . '/weforms.log' );
876 }
877
878 /**
879 * Clear the buffer
880 *
881 * prevents ajax breakage and endless loading icon. A LIFE SAVER!!!
882 *
883 * @since 1.1.0
884 *
885 * @return void
886 */
887 function weforms_clear_buffer() {
888 if ( ob_get_length() > 0 ) {
889 ob_clean();
890 }
891 }
892
893 /**
894 * Get the client IP address
895 *
896 * @since 1.1.0
897 *
898 * @return string
899 */
900 function weforms_get_client_ip() {
901 $ipaddress = '';
902
903 if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
904 $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
905 } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
906 $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
907 } elseif ( isset( $_SERVER['HTTP_X_FORWARDED'] ) ) {
908 $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
909 } elseif ( isset( $_SERVER['HTTP_FORWARDED_FOR'] ) ) {
910 $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
911 } elseif ( isset( $_SERVER['HTTP_FORWARDED'] ) ) {
912 $ipaddress = $_SERVER['HTTP_FORWARDED'];
913 } elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
914 $ipaddress = $_SERVER['REMOTE_ADDR'];
915 } else {
916 $ipaddress = 'UNKNOWN';
917 }
918
919 return $ipaddress;
920 }
921
922 /**
923 * Save form fields
924 *
925 * @since 1.1.0
926 *
927 * @param int $form_id
928 * @param array $field
929 * @param int $field_id
930 * @param int $order
931 *
932 * @return int ID of updated or inserted post
933 */
934 function weforms_insert_form_field( $form_id, $field = array(), $field_id = null, $order = 0 ) {
935
936 $args = array(
937 'post_type' => 'wpuf_input',
938 'post_parent' => $form_id,
939 'post_status' => 'publish',
940 'post_content' => maybe_serialize( wp_unslash( $field ) ),
941 'menu_order' => $order
942 );
943
944 if ( $field_id ) {
945 $args['ID'] = $field_id;
946 }
947
948 if ( $field_id ) {
949 return wp_update_post( $args );
950 } else {
951 return wp_insert_post( $args );
952 }
953 }
954
955 /**
956 * Allowed upload extensions
957 *
958 * @return array
959 */
960 function weforms_allowed_extensions() {
961 $extesions = array(
962 'images' => array(
963 'ext' => 'jpg,jpeg,gif,png,bmp',
964 'label' => __( 'Images', 'weforms' )
965 ),
966 'audio' => array(
967 'ext' => 'mp3,wav,ogg,wma,mka,m4a,ra,mid,midi',
968 'label' => __( 'Audio', 'weforms' )
969 ),
970 'video' => array(
971 'ext' => 'avi,divx,flv,mov,ogv,mkv,mp4,m4v,divx,mpg,mpeg,mpe',
972 'label' => __( 'Videos', 'weforms' )
973 ),
974 'pdf' => array(
975 'ext' => 'pdf',
976 'label' => __( 'PDF', 'weforms' )
977 ),
978 'office' => array(
979 'ext' => 'doc,ppt,pps,xls,mdb,docx,xlsx,pptx,odt,odp,ods,odg,odc,odb,odf,rtf,txt',
980 'label' => __( 'Office Documents', 'weforms' )
981 ),
982 'zip' => array(
983 'ext' => 'zip,gz,gzip,rar,7z',
984 'label' => __( 'Zip Archives', 'weforms' )
985 ),
986 'exe' => array(
987 'ext' => 'exe',
988 'label' => __( 'Executable Files', 'weforms' )
989 ),
990 'csv' => array(
991 'ext' => 'csv',
992 'label' => __( 'CSV', 'weforms' )
993 )
994 );
995
996 return apply_filters( 'weforms_allowed_extensions', $extesions );
997 }
998
999 /**
1000 * Get form integration settings
1001 *
1002 * @since 1.1.0
1003 *
1004 * @param int $form_id
1005 *
1006 * @return array
1007 */
1008 function weforms_get_form_integrations( $form_id ) {
1009 $integrations = get_post_meta( $form_id, 'integrations', true );
1010
1011 if ( ! $integrations ) {
1012 return array();
1013 }
1014
1015 return $integrations;
1016 }
1017
1018
1019 /**
1020 * Check if an integration is active
1021 *
1022 * @since 1.1.0
1023 *
1024 * @param int $form_id
1025 * @param string $integration_id
1026 *
1027 * @return boolean
1028 */
1029 function weforms_is_integration_active( $form_id, $integration_id ) {
1030 $integrations = weforms_get_form_integrations( $form_id );
1031
1032 if ( ! $integrations ) {
1033 return false;
1034 }
1035
1036 foreach ( $integrations as $id => $integration ) {
1037 if ( $integration_id == $id && $integration->enabled == true ) {
1038 return $integration;
1039 }
1040 }
1041
1042 return false;
1043 }
1044
1045
1046 /**
1047 * Get Flat UI Colors
1048 *
1049 * @return array
1050 */
1051 function weforms_get_flat_ui_colors() {
1052 return array( '#1abc9c', '#2ecc71', '#3498db', '#9b59b6', '#34495e' );
1053 }
1054
1055 /**
1056 * Get default form settings
1057 *
1058 * @return array
1059 */
1060 function weforms_get_default_form_settings() {
1061 return apply_filters(
1062 'weforms_get_default_form_settings', array(
1063 'redirect_to' => 'same',
1064 'message' => __( 'Thanks for contacting us! We will get in touch with you shortly.', 'weforms' ),
1065 'page_id' => '',
1066 'url' => '',
1067 'submit_text' => __( 'Submit Query', 'weforms' ),
1068 'schedule_form' => 'false',
1069 'schedule_start' => '',
1070 'schedule_end' => '',
1071 'sc_pending_message' => __( 'Form submission hasn\'t been started yet', 'weforms' ),
1072 'sc_expired_message' => __( 'Form submission is now closed.', 'weforms' ),
1073 'require_login' => 'false',
1074 'req_login_message' => __( 'You need to login to submit a query.', 'weforms' ),
1075 'limit_entries' => 'false',
1076 'limit_number' => '100',
1077 'limit_message' => __( 'Sorry, we have reached the maximum number of submissions.', 'weforms' ),
1078 'label_position' => 'above',
1079 'use_theme_css' => 'wpuf-style',
1080 'quiz_form' => 'no',
1081 'shuffle_question_order' => 'no',
1082 'release_grade' => 'after_submission',
1083 'respondent_can_see' => array( 'missed_questions', 'correct_answers', 'point_values' ),
1084 'total_points' => 0,
1085 'enable_multistep' => false,
1086 'multistep_progressbar_type' => 'progressive',
1087
1088 // payment
1089 'payment_paypal_images' => 'https://www.paypalobjects.com/webstatic/mktg/logo/AM_mc_vs_dc_ae.jpg',
1090
1091 'payment_paypal_label' => __( 'PayPal', 'weforms' ),
1092 'payment_stripe_label' => __( 'Credit Card', 'weforms' ),
1093 'payment_stripe_images' => array( 'visa','mastercard','amex','discover' ),
1094
1095 'payment_stripe_deactivate' => '',
1096 'stripe_mode' => 'live',
1097 'stripe_page_id' => '',
1098
1099 'stripe_override_keys' => '',
1100 'stripe_email' => '',
1101 'stripe_key' => '',
1102 'stripe_secret_key' => '',
1103 'stripe_key_test' => '',
1104 'stripe_secret_key_test' => '',
1105
1106 'stripe_prefill_email' => '',
1107 'stripe_user_email_field' => '',
1108
1109 'payment_paypal_deactivate' => '',
1110 'paypal_mode' => 'live',
1111 'paypal_type' => '_cart',
1112
1113 'paypal_override' => '',
1114 'paypal_email' => '',
1115
1116 'paypal_page_id' => '',
1117
1118 'paypal_prefill_email' => '',
1119 'paypal_user_email_field' => '',
1120 )
1121 );
1122 }
1123
1124 /**
1125 * Get default form settings
1126 *
1127 * @return array
1128 */
1129 function weforms_get_default_form_notification() {
1130 return apply_filters(
1131 'weforms_get_default_form_notification', array(
1132 'active' => 'true',
1133
1134 'type' => 'email',
1135 'smsTo' => '',
1136 'smsText' => '[{form_name}] ' . __( 'New Form Submission', 'weforms' ) . ' #{entry_id}',
1137
1138 'name' => __( 'Admin Notification', 'weforms' ),
1139 'subject' => '[{form_name}] ' . __( 'New Form Submission', 'weforms' ) . ' #{entry_id}',
1140 'to' => '{admin_email}',
1141 'replyTo' => '{field:email}',
1142 'message' => '{all_fields}',
1143 'fromName' => '{site_name}',
1144 'fromAddress' => '{admin_email}',
1145 'cc' => '',
1146 'bcc' => '',
1147 'weforms_cond' => array(
1148 'condition_status' => 'no',
1149 'cond_logic' => 'any',
1150 'conditions' => array(
1151 array(
1152 'name' => '',
1153 'operator' => '=',
1154 'option' => ''
1155 )
1156 )
1157 )
1158 )
1159 );
1160 }
1161
1162 /**
1163 * weforms_get_pain_text
1164 *
1165 * @param $value mixed
1166 *
1167 * @return string
1168 **/
1169 function weforms_get_pain_text( $value ) {
1170
1171 if ( is_serialized( $value ) ) {
1172 $value = unserialize( $value );
1173 }
1174
1175 if ( is_array( $value ) ) {
1176
1177 $string_value = array();
1178
1179 if ( is_array( $value ) ) {
1180
1181 foreach ( $value as $key => $single_value ) {
1182
1183 if ( is_array( $single_value ) || is_serialized( $single_value ) ) {
1184 $single_value = weforms_get_pain_text( $single_value );
1185 }
1186
1187 $single_value = ucwords( str_replace( array( '_', '-' ), ' ', $key ) ) . ': ' . ucwords( $single_value );
1188
1189 $string_value[] = $single_value;
1190 }
1191
1192 $value = implode( WeForms::$field_separator , $string_value );
1193 }
1194 }
1195
1196 $value = trim( strip_tags( $value ) );
1197
1198 return $value;
1199 }
1200
1201 /**
1202 * Get countries
1203 *
1204 * @since 1.1.0
1205 *
1206 * @param string $type (optional)
1207 *
1208 * @return array|string
1209 */
1210 function weforms_get_countries( $type = 'array' ) {
1211 $countries = include WEFORMS_INCLUDES . '/country-list.php';
1212
1213 if ( $type == 'json' ) {
1214 $countries = json_encode( $countries );
1215 }
1216
1217 return $countries;
1218 }
1219
1220 /**
1221 * Localize countries
1222 *
1223 * @since 1.3.5
1224 *
1225 * @return array
1226 */
1227 function weforms_localized_countries( $script ) {
1228 $script['countries'] = weforms_get_countries();
1229 return $script;
1230 }
1231 add_filter( "weforms_localized_script", "weforms_localized_countries" );
1232