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