PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.3.3
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.3.3
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.3, at includes/functions.php

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