Form Maker by WD – user-friendly drag & drop Form Builder plugin - Version 1.12.20

Version Description

  • Added: New file types for file upload field.
  • Improved: Editing empty mini labels.
  • Fixed: Form Submissions CSV export.
Download this release

Release Info

Developer webdorado
Plugin Icon 128x128 Form Maker by WD – user-friendly drag & drop Form Builder plugin
Version 1.12.20
Comparing to
See all releases

Code changes from version 1.12.19 to 1.12.20

admin/controllers/Generete_csv.php CHANGED
@@ -24,20 +24,56 @@ class FMControllerGenerete_csv {
24
  $params = WDW_FM_Library::get_submissions_to_export();
25
  $data = $params[0];
26
  $title = $params[1];
27
- $is_paypal_info = $params[2];
28
- $all_keys = array();
29
- foreach ( $data as $row ) {
30
- $all_keys = array_merge($all_keys, $row);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
- $keys_array = array_keys($all_keys);
33
  foreach ( $data as $key => $row ) {
34
- foreach ( $keys_array as $key1 => $value ) {
35
- if ( !array_key_exists($value, $row) ) {
36
- array_splice($row, $key1, 0, '');
 
 
 
 
37
  }
38
  }
39
- $data[$key] = $row;
 
 
 
 
 
 
 
 
40
  }
 
41
  $upload_dir = wp_upload_dir();
42
  $file_path = $upload_dir['basedir'] . '/form-maker';
43
  if ( !is_dir($file_path) ) {
@@ -48,25 +84,26 @@ class FMControllerGenerete_csv {
48
  unlink($tempfile);
49
  }
50
  $output = fopen($tempfile, "a");
 
51
  if ( $limitstart == 0 ) {
52
- fputcsv($output, str_replace('PAYPAL_', '', $keys_array), $csv_delimiter);
53
  }
54
  foreach ( $data as $record ) {
55
  fputcsv($output, $record, $csv_delimiter);
56
  }
 
57
  fclose($output);
 
58
  if ( $send_header == 1 ) {
59
  $txtfile = fopen($tempfile, "r");
60
  $txtfilecontent = fread($txtfile, filesize($tempfile));
61
  fclose($txtfile);
62
  $filename = $title . "_" . date('Ymd') . ".csv";
63
  header('Content-Encoding: UTF-8');
64
- header('content-type: application/csv; charset=UTF-8');
65
- // header('Content-Encoding: Windows-1252');
66
- // header('Content-type: text/csv; charset=Windows-1252');
67
  header("Content-Disposition: attachment; filename=\"$filename\"");
68
- // Set UTF-8 BOM.
69
- echo "\xEF\xBB\xBF";
70
  echo $txtfilecontent;
71
  unlink($tempfile);
72
  }
24
  $params = WDW_FM_Library::get_submissions_to_export();
25
  $data = $params[0];
26
  $title = $params[1];
27
+
28
+ $labels_parameters = WDW_FM_Library::get_labels_parameters( $form_id );
29
+
30
+ $sorted_label_names_original = $labels_parameters[4];
31
+ $sorted_label_names_original = array_merge(array(
32
+ 'ID',
33
+ "Submit date",
34
+ "Submitter's IP",
35
+ "Submitter's Username",
36
+ "Submitter's Email Address",
37
+ ), $sorted_label_names_original);
38
+
39
+ if (($key = array_search('stripe', $sorted_label_names_original)) !== false) {
40
+ unset($sorted_label_names_original[$key]);
41
+ }
42
+
43
+ $sorted_label_names = array();
44
+ function unique_label($sorted_label_names, $label) {
45
+ if ( in_array($label, $sorted_label_names) ) {
46
+ return unique_label($sorted_label_names, $label . '(1)');
47
+ }
48
+ else {
49
+ return $label;
50
+ }
51
+ }
52
+ foreach ( $sorted_label_names_original as $key => $label ) {
53
+ $sorted_label_names[] = unique_label($sorted_label_names, $label);
54
  }
55
+
56
  foreach ( $data as $key => $row ) {
57
+ $sorted_data = array();
58
+ foreach ( $sorted_label_names as $label ) {
59
+ if ( !array_key_exists($label, $row) ) {
60
+ $sorted_data[$label] = '';
61
+ }
62
+ else {
63
+ $sorted_data[$label] = $row[$label];
64
  }
65
  }
66
+
67
+ $data[$key] = $sorted_data;
68
+ }
69
+
70
+
71
+ foreach ( $sorted_label_names as $label ) {
72
+ if ( !array_key_exists($label, $row) ) {
73
+ $row[$label] = '';
74
+ }
75
  }
76
+
77
  $upload_dir = wp_upload_dir();
78
  $file_path = $upload_dir['basedir'] . '/form-maker';
79
  if ( !is_dir($file_path) ) {
84
  unlink($tempfile);
85
  }
86
  $output = fopen($tempfile, "a");
87
+
88
  if ( $limitstart == 0 ) {
89
+ fputcsv($output, $sorted_label_names_original, $csv_delimiter);
90
  }
91
  foreach ( $data as $record ) {
92
  fputcsv($output, $record, $csv_delimiter);
93
  }
94
+
95
  fclose($output);
96
+
97
  if ( $send_header == 1 ) {
98
  $txtfile = fopen($tempfile, "r");
99
  $txtfilecontent = fread($txtfile, filesize($tempfile));
100
  fclose($txtfile);
101
  $filename = $title . "_" . date('Ymd') . ".csv";
102
  header('Content-Encoding: UTF-8');
103
+ header('content-type: application/csv; charset=UTF-8');
 
 
104
  header("Content-Disposition: attachment; filename=\"$filename\"");
105
+ // Set UTF-8 BOM
106
+ echo "\xEF\xBB\xBF";
107
  echo $txtfilecontent;
108
  unlink($tempfile);
109
  }
admin/models/Checkpaypal.php CHANGED
@@ -66,17 +66,12 @@ class FMModelCheckpaypal {
66
  $action = "https://www.sandbox.paypal.com/cgi-bin/webscr";
67
  }
68
  $post_fields = $params['post_fields'];
69
- $curlConfig = array(
70
- CURLOPT_URL => $action,
71
- CURLOPT_POST => TRUE,
72
- CURLOPT_RETURNTRANSFER => TRUE,
73
- CURLOPT_SSL_VERIFYPEER => FALSE,
74
- CURLOPT_POSTFIELDS => $post_fields,
75
- );
76
- $curl = curl_init();
77
- curl_setopt_array($curl, $curlConfig);
78
- $response = curl_exec($curl);
79
- curl_close($curl);
80
 
81
  return $response;
82
  }
66
  $action = "https://www.sandbox.paypal.com/cgi-bin/webscr";
67
  }
68
  $post_fields = $params['post_fields'];
69
+ $response = wp_remote_post( $action, array('body' => $post_fields) );
70
+ if ( is_wp_error( $response ) ) {
71
+ $response = "";
72
+ } else {
73
+ $response = $response['body'];
74
+ }
 
 
 
 
 
75
 
76
  return $response;
77
  }
admin/views/Manage_fm.php CHANGED
@@ -985,7 +985,7 @@ $stats_labels = $params['stats_labels'];
985
  }
986
  ?>
987
  </div>
988
- <p class="description"><?php _e('Specify all email addresses, to which submitted form information will be sent. If this field is left blank, the submission email will be sent to the address provided in WordPress General Settings.', WDFM()->prefix); ?></p>
989
  </div>
990
  <div class="wd-group">
991
  <label class="wd-label" for="mail_subject"><?php _e('Subject', WDFM()->prefix); ?></label>
985
  }
986
  ?>
987
  </div>
988
+ <p class="description"><?php _e('Specify the email address(es), to which submitted form information will be sent. For multiple email addresses separate with commas.', WDFM()->prefix); ?></p>
989
  </div>
990
  <div class="wd-group">
991
  <label class="wd-label" for="mail_subject"><?php _e('Subject', WDFM()->prefix); ?></label>
admin/views/Submissions_fm.php CHANGED
@@ -1336,7 +1336,7 @@ class FMViewSubmissions_fm extends FMAdminView {
1336
  // Check if length is larger than the character limit.
1337
  if ( strlen($text) > $chars_limit && $text == strip_tags($text) ) {
1338
  // If so, cut the string at the character limit.
1339
- $new_text = substr($text, 0, $chars_limit);
1340
  // Trim off white space.
1341
  $new_text = trim($new_text);
1342
  // Add at end of text ...
1336
  // Check if length is larger than the character limit.
1337
  if ( strlen($text) > $chars_limit && $text == strip_tags($text) ) {
1338
  // If so, cut the string at the character limit.
1339
+ $new_text = mb_substr( $text, 0, $chars_limit,"utf-8" );
1340
  // Trim off white space.
1341
  $new_text = trim($new_text);
1342
  // Add at end of text ...
css/style.css CHANGED
@@ -1018,6 +1018,44 @@ li.pp_selected > span {
1018
  font-size: 12px;
1019
  }
1020
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  .show_hide,
1022
  .all_any {
1023
  width: 80px;
1018
  font-size: 12px;
1019
  }
1020
 
1021
+ #show_table .mini_label:empty {
1022
+ font-size: 12px;
1023
+ padding: 6px 0;
1024
+ background-color: rgb(241, 241, 241);
1025
+ display: block;
1026
+ margin-right: 10px;
1027
+ margin-top: 2px;
1028
+ }
1029
+
1030
+ #show_table .wdform_address .mini_label:empty,
1031
+ #show_table .wdform_date_fields .mini_label:empty,
1032
+ #show_table .mini_label_phone_number:empty,
1033
+ #show_table .mini_label_from:empty{
1034
+ margin-right: 0px;
1035
+ }
1036
+
1037
+ #show_table .mini_label_area_code:empty {
1038
+ margin-right: 15px;
1039
+ }
1040
+ #show_table .mini_label_to:empty{
1041
+ margin-left: 3px;
1042
+ margin-right: 0px;
1043
+ }
1044
+ @media screen and (max-width: 480px){
1045
+ #show_table input[type=text] {
1046
+ padding: 3px 10px;
1047
+ }
1048
+
1049
+ #show_table select {
1050
+ padding: 3px 10px;
1051
+ font-size: 13px;
1052
+ height: 26px;
1053
+ }
1054
+ }
1055
+
1056
+ .wdform_address span {
1057
+ height: 52px;
1058
+ }
1059
  .show_hide,
1060
  .all_any {
1061
  width: 80px;
form-maker.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Form Maker
4
  * Plugin URI: https://web-dorado.com/products/form-maker-wordpress.html
5
  * Description: This plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.
6
- * Version: 1.12.19
7
  * Author: WebDorado Form Builder Team
8
  * Author URI: https://web-dorado.com/wordpress-plugins-bundle.html
9
  * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
@@ -24,6 +24,10 @@ final class WDFM {
24
  * Plugin directory url.
25
  */
26
  public $plugin_url = '';
 
 
 
 
27
  /**
28
  * Plugin main file.
29
  */
@@ -86,11 +90,12 @@ final class WDFM {
86
  * Define Constants.
87
  */
88
  private function define_constants() {
89
- $this->plugin_dir = WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__));
90
  $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
 
91
  $this->main_file = plugin_basename(__FILE__);
92
- $this->plugin_version = '1.12.19';
93
- $this->db_version = '2.12.19';
94
  $this->menu_slug = 'manage_fm';
95
  $this->prefix = 'form_maker';
96
  $this->css_prefix = 'fm_';
@@ -249,6 +254,42 @@ final class WDFM {
249
  add_submenu_page($parent_slug, __('Add-ons', $this->prefix), __('Add-ons', $this->prefix), 'manage_options', 'extensions' . $this->menu_postfix, array($this , 'fm_extensions'));
250
  }
251
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  /**
253
  * Add per_page screen option for submissions page.
254
  */
@@ -704,23 +745,24 @@ final class WDFM {
704
  * Frontend scripts/styles.
705
  */
706
  public function register_frontend_scripts() {
707
- wp_register_style('fm-jquery-ui', $this->plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
 
708
 
709
  $fm_settings = get_option('fm_settings');
710
  $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
711
  wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
712
 
713
- wp_register_script('fm-phone_field', $this->plugin_url . '/js/intlTelInput.js', array(), $this->plugin_version);
714
 
715
- wp_register_style('fm-phone_field_css', $this->plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
716
- wp_register_style('fm-frontend', $this->plugin_url . '/css/form_maker_frontend.css', array(), $this->plugin_version);
717
 
718
- wp_register_script('fm-frontend', $this->plugin_url . '/js/main_div_front_end.js', array(), $this->plugin_version);
719
- wp_register_script('fm-gmap_form', $this->plugin_url . '/js/if_gmap_front_end.js', array(), $this->plugin_version);
720
 
721
  wp_localize_script('fm-frontend', 'fm_objectL10n', array(
722
  'states' => WDW_FM_Library::get_states(),
723
- 'plugin_url' => $this->plugin_url,
724
  'form_maker_admin_ajax' => admin_url('admin-ajax.php'),
725
  'fm_file_type_error' => addslashes(__('Can not upload this type of file', $this->prefix)),
726
  'fm_field_is_required' => addslashes(__('Field is required', $this->prefix)),
@@ -739,16 +781,16 @@ final class WDFM {
739
  $fonts = implode("|", str_replace(' ', '+', $google_fonts));
740
  wp_register_style('fm-googlefonts', 'https://fonts.googleapis.com/css?family=' . $fonts . '&subset=greek,latin,greek-ext,vietnamese,cyrillic-ext,latin-ext,cyrillic', null, null);
741
 
742
- wp_register_style('fm-animate', $this->plugin_url . '/css/fm-animate.css', array(), $this->plugin_version);
743
 
744
  wp_register_script('fm-g-recaptcha', 'https://www.google.com/recaptcha/api.js?onload=fmRecaptchaInit&render=explicit');
745
 
746
  // Register admin styles to use in frontend submissions.
747
- wp_register_script('gmap_form_back', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
748
 
749
  if (!$this->is_free) {
750
- wp_register_script('fm-file-upload', $this->plugin_url . '/js/file-upload.js', array(), $this->plugin_version);
751
- wp_register_style('fm-submissions_css', $this->plugin_url . '/css/style_submissions.css', array(), $this->plugin_version);
752
  }
753
  }
754
 
@@ -759,7 +801,7 @@ final class WDFM {
759
  $fm_settings = get_option('fm_settings');
760
  $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
761
  wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
762
- wp_register_script('fm-gmap_form_back', $this->plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
763
  }
764
 
765
  /**
3
  * Plugin Name: Form Maker
4
  * Plugin URI: https://web-dorado.com/products/form-maker-wordpress.html
5
  * Description: This plugin is a modern and advanced tool for easy and fast creating of a WordPress Form. The backend interface is intuitive and user friendly which allows users far from scripting and programming to create WordPress Forms.
6
+ * Version: 1.12.20
7
  * Author: WebDorado Form Builder Team
8
  * Author URI: https://web-dorado.com/wordpress-plugins-bundle.html
9
  * License: GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
24
  * Plugin directory url.
25
  */
26
  public $plugin_url = '';
27
+ /**
28
+ * Plugin front urls.
29
+ */
30
+ public $front_urls = array();
31
  /**
32
  * Plugin main file.
33
  */
90
  * Define Constants.
91
  */
92
  private function define_constants() {
93
+ $this->plugin_dir = WP_PLUGIN_DIR . "/" . plugin_basename(dirname(__FILE__));
94
  $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
95
+ $this->front_urls = $this->get_front_urls();
96
  $this->main_file = plugin_basename(__FILE__);
97
+ $this->plugin_version = '1.12.20';
98
+ $this->db_version = '2.12.20';
99
  $this->menu_slug = 'manage_fm';
100
  $this->prefix = 'form_maker';
101
  $this->css_prefix = 'fm_';
254
  add_submenu_page($parent_slug, __('Add-ons', $this->prefix), __('Add-ons', $this->prefix), 'manage_options', 'extensions' . $this->menu_postfix, array($this , 'fm_extensions'));
255
  }
256
 
257
+ /**
258
+ * Set front plugin url.
259
+ *
260
+ * return string $plugin_url
261
+ */
262
+ private function set_front_plugin_url() {
263
+ $plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
264
+
265
+ return $plugin_url;
266
+ }
267
+
268
+ /**
269
+ * Set front upload url.
270
+ *
271
+ * return string $upload_url
272
+ */
273
+ private function set_front_upload_url() {
274
+ $wp_upload_dir = wp_upload_dir();
275
+ $upload_url = str_replace(get_option('siteurl'), get_option('home'), $wp_upload_dir['baseurl']);
276
+
277
+ return $upload_url;
278
+ }
279
+
280
+ /**
281
+ * Get front urls.
282
+ *
283
+ * return array $urls
284
+ */
285
+ public function get_front_urls() {
286
+ $urls = array();
287
+ $urls['plugin_url'] = $this->set_front_plugin_url();
288
+ $urls['upload_url'] = $this->set_front_upload_url();
289
+
290
+ return $urls;
291
+ }
292
+
293
  /**
294
  * Add per_page screen option for submissions page.
295
  */
745
  * Frontend scripts/styles.
746
  */
747
  public function register_frontend_scripts() {
748
+ $front_plugin_url = $this->front_urls['plugin_url'];
749
+ wp_register_style('fm-jquery-ui', $front_plugin_url . '/css/jquery-ui.custom.css', array(), $this->plugin_version);
750
 
751
  $fm_settings = get_option('fm_settings');
752
  $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
753
  wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
754
 
755
+ wp_register_script('fm-phone_field', $front_plugin_url . '/js/intlTelInput.js', array(), $this->plugin_version);
756
 
757
+ wp_register_style('fm-phone_field_css', $front_plugin_url . '/css/intlTelInput.css', array(), $this->plugin_version);
758
+ wp_register_style('fm-frontend', $front_plugin_url . '/css/form_maker_frontend.css', array(), $this->plugin_version);
759
 
760
+ wp_register_script('fm-frontend', $front_plugin_url . '/js/main_div_front_end.js', array(), $this->plugin_version);
761
+ wp_register_script('fm-gmap_form', $front_plugin_url . '/js/if_gmap_front_end.js', array(), $this->plugin_version);
762
 
763
  wp_localize_script('fm-frontend', 'fm_objectL10n', array(
764
  'states' => WDW_FM_Library::get_states(),
765
+ 'plugin_url' => $front_plugin_url,
766
  'form_maker_admin_ajax' => admin_url('admin-ajax.php'),
767
  'fm_file_type_error' => addslashes(__('Can not upload this type of file', $this->prefix)),
768
  'fm_field_is_required' => addslashes(__('Field is required', $this->prefix)),
781
  $fonts = implode("|", str_replace(' ', '+', $google_fonts));
782
  wp_register_style('fm-googlefonts', 'https://fonts.googleapis.com/css?family=' . $fonts . '&subset=greek,latin,greek-ext,vietnamese,cyrillic-ext,latin-ext,cyrillic', null, null);
783
 
784
+ wp_register_style('fm-animate', $front_plugin_url . '/css/fm-animate.css', array(), $this->plugin_version);
785
 
786
  wp_register_script('fm-g-recaptcha', 'https://www.google.com/recaptcha/api.js?onload=fmRecaptchaInit&render=explicit');
787
 
788
  // Register admin styles to use in frontend submissions.
789
+ wp_register_script('gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
790
 
791
  if (!$this->is_free) {
792
+ wp_register_script('fm-file-upload', $front_plugin_url . '/js/file-upload.js', array(), $this->plugin_version);
793
+ wp_register_style('fm-submissions_css', $front_plugin_url . '/css/style_submissions.css', array(), $this->plugin_version);
794
  }
795
  }
796
 
801
  $fm_settings = get_option('fm_settings');
802
  $google_map_key = !empty($fm_settings['map_key']) ? '&key=' . $fm_settings['map_key'] : '';
803
  wp_register_script('google-maps', 'https://maps.google.com/maps/api/js?v=3.exp' . $google_map_key);
804
+ wp_register_script('fm-gmap_form_back', $front_plugin_url . '/js/if_gmap_back_end.js', array(), $this->plugin_version);
805
  }
806
 
807
  /**
framework/WDW_FM_Library.php CHANGED
@@ -2,6 +2,335 @@
2
 
3
  class WDW_FM_Library {
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  public static $fm_js_content;
6
  /**
7
  * Get request value.
@@ -3715,9 +4044,9 @@ class WDW_FM_Library {
3715
  $user_id = get_userdata($tt->user_id_wd);
3716
  $username = $user_id ? $user_id->display_name : "";
3717
  $useremail = $user_id ? $user_id->user_email : "";
3718
- $data_temp['Submission ID'] = $i;
3719
  $data_temp['Submit date'] = $date;
3720
- $data_temp['Ip'] = $ip;
3721
  $data_temp['Submitter\'s Username'] = $username;
3722
  $data_temp['Submitter\'s Email Address'] = $useremail;
3723
  $element_labels = explode(',', $tt->element_label);
@@ -4286,21 +4615,30 @@ class WDW_FM_Library {
4286
  return FALSE;
4287
  }
4288
 
4289
- mb_internal_encoding('UTF-8');
 
 
4290
 
4291
  $subject = html_entity_decode($subject, ENT_QUOTES);
4292
  $subject = stripslashes($subject);
4293
- $subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');
 
 
4294
 
4295
  $message = stripslashes($message);
 
4296
 
4297
  $headers = array();
4298
 
 
 
4299
  if ( isset($header_arr['from_name']) && $header_arr['from_name'] ) {
4300
  $from_name = $header_arr['from_name'];
4301
  $from_name = html_entity_decode($from_name, ENT_QUOTES);
4302
  $from_name = stripslashes($from_name);
4303
- $from_name = mb_encode_mimeheader($from_name, 'UTF-8', 'Q');
 
 
4304
  // $from_str .= "'" . $from_name . "' ";
4305
  self::$email_from_name = $from_name;
4306
  add_filter('wp_mail_from_name', array('WDW_FM_Library', 'mail_from_name'));
@@ -4376,6 +4714,333 @@ class WDW_FM_Library {
4376
  public static function mail_from_name() {
4377
  return self::$email_from_name;
4378
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4379
  }
4380
 
4381
  /*
2
 
3
  class WDW_FM_Library {
4
 
5
+ public static $qpKeys = array(
6
+ "\x00",
7
+ "\x01",
8
+ "\x02",
9
+ "\x03",
10
+ "\x04",
11
+ "\x05",
12
+ "\x06",
13
+ "\x07",
14
+ "\x08",
15
+ "\x09",
16
+ "\x0A",
17
+ "\x0B",
18
+ "\x0C",
19
+ "\x0D",
20
+ "\x0E",
21
+ "\x0F",
22
+ "\x10",
23
+ "\x11",
24
+ "\x12",
25
+ "\x13",
26
+ "\x14",
27
+ "\x15",
28
+ "\x16",
29
+ "\x17",
30
+ "\x18",
31
+ "\x19",
32
+ "\x1A",
33
+ "\x1B",
34
+ "\x1C",
35
+ "\x1D",
36
+ "\x1E",
37
+ "\x1F",
38
+ "\x7F",
39
+ "\x80",
40
+ "\x81",
41
+ "\x82",
42
+ "\x83",
43
+ "\x84",
44
+ "\x85",
45
+ "\x86",
46
+ "\x87",
47
+ "\x88",
48
+ "\x89",
49
+ "\x8A",
50
+ "\x8B",
51
+ "\x8C",
52
+ "\x8D",
53
+ "\x8E",
54
+ "\x8F",
55
+ "\x90",
56
+ "\x91",
57
+ "\x92",
58
+ "\x93",
59
+ "\x94",
60
+ "\x95",
61
+ "\x96",
62
+ "\x97",
63
+ "\x98",
64
+ "\x99",
65
+ "\x9A",
66
+ "\x9B",
67
+ "\x9C",
68
+ "\x9D",
69
+ "\x9E",
70
+ "\x9F",
71
+ "\xA0",
72
+ "\xA1",
73
+ "\xA2",
74
+ "\xA3",
75
+ "\xA4",
76
+ "\xA5",
77
+ "\xA6",
78
+ "\xA7",
79
+ "\xA8",
80
+ "\xA9",
81
+ "\xAA",
82
+ "\xAB",
83
+ "\xAC",
84
+ "\xAD",
85
+ "\xAE",
86
+ "\xAF",
87
+ "\xB0",
88
+ "\xB1",
89
+ "\xB2",
90
+ "\xB3",
91
+ "\xB4",
92
+ "\xB5",
93
+ "\xB6",
94
+ "\xB7",
95
+ "\xB8",
96
+ "\xB9",
97
+ "\xBA",
98
+ "\xBB",
99
+ "\xBC",
100
+ "\xBD",
101
+ "\xBE",
102
+ "\xBF",
103
+ "\xC0",
104
+ "\xC1",
105
+ "\xC2",
106
+ "\xC3",
107
+ "\xC4",
108
+ "\xC5",
109
+ "\xC6",
110
+ "\xC7",
111
+ "\xC8",
112
+ "\xC9",
113
+ "\xCA",
114
+ "\xCB",
115
+ "\xCC",
116
+ "\xCD",
117
+ "\xCE",
118
+ "\xCF",
119
+ "\xD0",
120
+ "\xD1",
121
+ "\xD2",
122
+ "\xD3",
123
+ "\xD4",
124
+ "\xD5",
125
+ "\xD6",
126
+ "\xD7",
127
+ "\xD8",
128
+ "\xD9",
129
+ "\xDA",
130
+ "\xDB",
131
+ "\xDC",
132
+ "\xDD",
133
+ "\xDE",
134
+ "\xDF",
135
+ "\xE0",
136
+ "\xE1",
137
+ "\xE2",
138
+ "\xE3",
139
+ "\xE4",
140
+ "\xE5",
141
+ "\xE6",
142
+ "\xE7",
143
+ "\xE8",
144
+ "\xE9",
145
+ "\xEA",
146
+ "\xEB",
147
+ "\xEC",
148
+ "\xED",
149
+ "\xEE",
150
+ "\xEF",
151
+ "\xF0",
152
+ "\xF1",
153
+ "\xF2",
154
+ "\xF3",
155
+ "\xF4",
156
+ "\xF5",
157
+ "\xF6",
158
+ "\xF7",
159
+ "\xF8",
160
+ "\xF9",
161
+ "\xFA",
162
+ "\xFB",
163
+ "\xFC",
164
+ "\xFD",
165
+ "\xFE",
166
+ "\xFF"
167
+ );
168
+ public static $qpReplaceValues = array(
169
+ "=00",
170
+ "=01",
171
+ "=02",
172
+ "=03",
173
+ "=04",
174
+ "=05",
175
+ "=06",
176
+ "=07",
177
+ "=08",
178
+ "=09",
179
+ "=0A",
180
+ "=0B",
181
+ "=0C",
182
+ "=0D",
183
+ "=0E",
184
+ "=0F",
185
+ "=10",
186
+ "=11",
187
+ "=12",
188
+ "=13",
189
+ "=14",
190
+ "=15",
191
+ "=16",
192
+ "=17",
193
+ "=18",
194
+ "=19",
195
+ "=1A",
196
+ "=1B",
197
+ "=1C",
198
+ "=1D",
199
+ "=1E",
200
+ "=1F",
201
+ "=7F",
202
+ "=80",
203
+ "=81",
204
+ "=82",
205
+ "=83",
206
+ "=84",
207
+ "=85",
208
+ "=86",
209
+ "=87",
210
+ "=88",
211
+ "=89",
212
+ "=8A",
213
+ "=8B",
214
+ "=8C",
215
+ "=8D",
216
+ "=8E",
217
+ "=8F",
218
+ "=90",
219
+ "=91",
220
+ "=92",
221
+ "=93",
222
+ "=94",
223
+ "=95",
224
+ "=96",
225
+ "=97",
226
+ "=98",
227
+ "=99",
228
+ "=9A",
229
+ "=9B",
230
+ "=9C",
231
+ "=9D",
232
+ "=9E",
233
+ "=9F",
234
+ "=A0",
235
+ "=A1",
236
+ "=A2",
237
+ "=A3",
238
+ "=A4",
239
+ "=A5",
240
+ "=A6",
241
+ "=A7",
242
+ "=A8",
243
+ "=A9",
244
+ "=AA",
245
+ "=AB",
246
+ "=AC",
247
+ "=AD",
248
+ "=AE",
249
+ "=AF",
250
+ "=B0",
251
+ "=B1",
252
+ "=B2",
253
+ "=B3",
254
+ "=B4",
255
+ "=B5",
256
+ "=B6",
257
+ "=B7",
258
+ "=B8",
259
+ "=B9",
260
+ "=BA",
261
+ "=BB",
262
+ "=BC",
263
+ "=BD",
264
+ "=BE",
265
+ "=BF",
266
+ "=C0",
267
+ "=C1",
268
+ "=C2",
269
+ "=C3",
270
+ "=C4",
271
+ "=C5",
272
+ "=C6",
273
+ "=C7",
274
+ "=C8",
275
+ "=C9",
276
+ "=CA",
277
+ "=CB",
278
+ "=CC",
279
+ "=CD",
280
+ "=CE",
281
+ "=CF",
282
+ "=D0",
283
+ "=D1",
284
+ "=D2",
285
+ "=D3",
286
+ "=D4",
287
+ "=D5",
288
+ "=D6",
289
+ "=D7",
290
+ "=D8",
291
+ "=D9",
292
+ "=DA",
293
+ "=DB",
294
+ "=DC",
295
+ "=DD",
296
+ "=DE",
297
+ "=DF",
298
+ "=E0",
299
+ "=E1",
300
+ "=E2",
301
+ "=E3",
302
+ "=E4",
303
+ "=E5",
304
+ "=E6",
305
+ "=E7",
306
+ "=E8",
307
+ "=E9",
308
+ "=EA",
309
+ "=EB",
310
+ "=EC",
311
+ "=ED",
312
+ "=EE",
313
+ "=EF",
314
+ "=F0",
315
+ "=F1",
316
+ "=F2",
317
+ "=F3",
318
+ "=F4",
319
+ "=F5",
320
+ "=F6",
321
+ "=F7",
322
+ "=F8",
323
+ "=F9",
324
+ "=FA",
325
+ "=FB",
326
+ "=FC",
327
+ "=FD",
328
+ "=FE",
329
+ "=FF"
330
+ );
331
+ const LINELENGTH = 72;
332
+ const LINEEND = "\n";
333
+
334
  public static $fm_js_content;
335
  /**
336
  * Get request value.
4044
  $user_id = get_userdata($tt->user_id_wd);
4045
  $username = $user_id ? $user_id->display_name : "";
4046
  $useremail = $user_id ? $user_id->user_email : "";
4047
+ $data_temp['ID'] = $i;
4048
  $data_temp['Submit date'] = $date;
4049
+ $data_temp['Submitter\'s IP'] = $ip;
4050
  $data_temp['Submitter\'s Username'] = $username;
4051
  $data_temp['Submitter\'s Email Address'] = $useremail;
4052
  $element_labels = explode(',', $tt->element_label);
4615
  return FALSE;
4616
  }
4617
 
4618
+ if ( function_exists('mb_internal_encoding') ) {
4619
+ mb_internal_encoding('UTF-8');
4620
+ }
4621
 
4622
  $subject = html_entity_decode($subject, ENT_QUOTES);
4623
  $subject = stripslashes($subject);
4624
+ if ( function_exists('mb_encode_mimeheader') ) {
4625
+ $subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');
4626
+ }
4627
 
4628
  $message = stripslashes($message);
4629
+ // $message = self::encodeQuotedPrintable($message);
4630
 
4631
  $headers = array();
4632
 
4633
+ // $headers[] = 'Content-Transfer-Encoding: QUOTED-PRINTABLE';
4634
+
4635
  if ( isset($header_arr['from_name']) && $header_arr['from_name'] ) {
4636
  $from_name = $header_arr['from_name'];
4637
  $from_name = html_entity_decode($from_name, ENT_QUOTES);
4638
  $from_name = stripslashes($from_name);
4639
+ if ( function_exists('mb_encode_mimeheader') ) {
4640
+ $from_name = mb_encode_mimeheader($from_name, 'UTF-8', 'Q');
4641
+ }
4642
  // $from_str .= "'" . $from_name . "' ";
4643
  self::$email_from_name = $from_name;
4644
  add_filter('wp_mail_from_name', array('WDW_FM_Library', 'mail_from_name'));
4714
  public static function mail_from_name() {
4715
  return self::$email_from_name;
4716
  }
4717
+
4718
+ /**
4719
+ * Get labels parameters.
4720
+ *
4721
+ * @param int $form_id
4722
+ * @param int $page_num
4723
+ * @param int $per_num
4724
+ *
4725
+ * @return array $labels_parameters
4726
+ */
4727
+ public static function get_labels_parameters($form_id, $page_num = 0, $per_num = 0) {
4728
+ global $wpdb;
4729
+ $labels = array();
4730
+ $labels_id = array();
4731
+ $form_labels = array();
4732
+ $sorted_labels_id = array();
4733
+ $label_names = array();
4734
+ $label_types = array();
4735
+ $sorted_label_types = array();
4736
+ $label_names_original = array();
4737
+ $labels_parameters = array();
4738
+ $join_query = array();
4739
+ $join_where = array();
4740
+ $join_verified = array();
4741
+ $rows_ord = array();
4742
+ $join = '';
4743
+ $query = $wpdb->prepare("SELECT `group_id`,`element_value` FROM " . $wpdb->prefix . "formmaker_submits WHERE `form_id`='%d' and `element_label` = 'verifyinfo' ", $form_id);
4744
+ $ver_emails_data = $wpdb->get_results($query);
4745
+ $ver_emails_array = array();
4746
+ if ( $ver_emails_data ) {
4747
+ foreach ( $ver_emails_data as $ver_email ) {
4748
+ $elem_label = str_replace('verified**', '', $ver_email->element_value);
4749
+ $query = $wpdb->prepare("SELECT `element_value` FROM " . $wpdb->prefix . "formmaker_submits WHERE `form_id`='%d' AND `group_id` = '%d' AND `element_label` = '%s' ", $form_id, (int) $ver_email->group_id, $elem_label);
4750
+ if ( !isset($ver_emails_array[$elem_label]) ) {
4751
+ $ver_emails_array[$elem_label] = array();
4752
+ }
4753
+ if ( !in_array($wpdb->get_var($query), $ver_emails_array[$elem_label]) ) {
4754
+ $ver_emails_array[$elem_label][] = $wpdb->get_var($query);
4755
+ }
4756
+ }
4757
+ }
4758
+ for ( $i = 0; $i < 9; $i++ ) {
4759
+ array_push($labels_parameters, NULL);
4760
+ }
4761
+ $sorted_label_names = array();
4762
+ $sorted_label_names_original = array();
4763
+ $where_labels = array();
4764
+ $where2 = array();
4765
+ $order_by = ((isset($_POST['order_by']) && esc_html(stripslashes($_POST['order_by'])) != '') ? esc_html(stripslashes($_POST['order_by'])) : 'group_id');
4766
+ $asc_or_desc = ((isset($_POST['asc_or_desc']) && $_POST['asc_or_desc'] == 'asc') ? 'asc' : 'desc');
4767
+
4768
+ $lists['hide_label_list'] = ((isset($_POST['hide_label_list'])) ? esc_html(stripslashes($_POST['hide_label_list'])) : '');
4769
+ $lists['startdate'] = ((isset($_POST['startdate'])) ? esc_html(stripslashes($_POST['startdate'])) : '');
4770
+ $lists['enddate'] = ((isset($_POST['enddate'])) ? esc_html(stripslashes($_POST['enddate'])) : '');
4771
+ $lists['ip_search'] = ((isset($_POST['ip_search'])) ? esc_html(stripslashes($_POST['ip_search'])) : '');
4772
+ $lists['username_search'] = ((isset($_POST['username_search'])) ? esc_html(stripslashes($_POST['username_search'])) : '');
4773
+ $lists['useremail_search'] = ((isset($_POST['useremail_search'])) ? esc_html(stripslashes($_POST['useremail_search'])) : '');
4774
+ $lists['id_search'] = ((isset($_POST['id_search'])) ? esc_html(stripslashes($_POST['id_search'])) : '');
4775
+ if ( $lists['ip_search'] ) {
4776
+ $where[] = 'ip LIKE "%' . $lists['ip_search'] . '%"';
4777
+ }
4778
+ if ( $lists['startdate'] != '' ) {
4779
+ $where[] = " `date`>='" . $lists['startdate'] . " 00:00:00' ";
4780
+ }
4781
+ if ( $lists['enddate'] != '' ) {
4782
+ $where[] = " `date`<='" . $lists['enddate'] . " 23:59:59' ";
4783
+ }
4784
+ if ( $lists['username_search'] ) {
4785
+ $where[] = 'user_id_wd IN (SELECT ID FROM ' . $wpdb->prefix . 'users WHERE display_name LIKE "%' . $lists['username_search'] . '%")';
4786
+ }
4787
+ if ( $lists['useremail_search'] ) {
4788
+ $where[] = 'user_id_wd IN (SELECT ID FROM ' . $wpdb->prefix . 'users WHERE user_email LIKE "%' . $lists['useremail_search'] . '%")';
4789
+ }
4790
+ if ( $lists['id_search'] ) {
4791
+ $where[] = 'group_id =' . (int) $lists['id_search'];
4792
+ }
4793
+ $where[] = 'form_id=' . $form_id . '';
4794
+ $where = (count($where) ? ' ' . implode(' AND ', $where) : '');
4795
+ if ( $order_by == 'group_id' or $order_by == 'date' or $order_by == 'ip' ) {
4796
+ $orderby = ' ORDER BY ' . $order_by . ' ' . $asc_or_desc . '';
4797
+ }
4798
+ elseif ( $order_by == 'display_name' or $order_by == 'user_email' ) {
4799
+ $orderby = ' ORDER BY (SELECT ' . $order_by . ' FROM ' . $wpdb->prefix . 'users WHERE ID=user_id_wd) ' . $asc_or_desc . '';
4800
+ }
4801
+ else {
4802
+ $orderby = "";
4803
+ }
4804
+ if ( $form_id ) {
4805
+ for ( $i = 0; $i < 9; $i++ ) {
4806
+ array_pop($labels_parameters);
4807
+ }
4808
+ $query = "SELECT distinct element_label FROM " . $wpdb->prefix . "formmaker_submits WHERE " . $where;
4809
+ $results = $wpdb->get_results($query);
4810
+ for ( $i = 0; $i < count($results); $i++ ) {
4811
+ array_push($labels, $results[$i]->element_label);
4812
+ }
4813
+ $form = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "formmaker WHERE id='%d'", $form_id));
4814
+ if ( !empty($form->label_order) && strpos($form->label_order, 'type_paypal_') ) {
4815
+ $form->label_order = $form->label_order . "item_total#**id**#Item Total#**label**#type_paypal_payment_total#****#total#**id**#Total#**label**#type_paypal_payment_total#****#0#**id**#Payment Status#**label**#type_paypal_payment_status#****#";
4816
+ }
4817
+ if ( !empty($form->label_order)) {
4818
+ $form_labels = explode('#****#', $form->label_order);
4819
+ }
4820
+ $form_labels = array_slice($form_labels, 0, count($form_labels) - 1);
4821
+ foreach ( $form_labels as $key => $form_label ) {
4822
+ $label_id = explode('#**id**#', $form_label);
4823
+ array_push($labels_id, $label_id[0]);
4824
+ $label_name_type = explode('#**label**#', $label_id[1]);
4825
+ array_push($label_names_original, $label_name_type[0]);
4826
+ $ptn = "/[^a-zA-Z0-9_]/";
4827
+ $rpltxt = "";
4828
+ $label_name = preg_replace($ptn, $rpltxt, $label_name_type[0]);
4829
+ array_push($label_names, $label_name);
4830
+ array_push($label_types, $label_name_type[1]);
4831
+ }
4832
+ foreach ( $labels_id as $key => $label_id ) {
4833
+ if ( in_array($label_id, $labels) ) {
4834
+ if ( !in_array($label_id, $sorted_labels_id) ) {
4835
+ array_push($sorted_labels_id, $label_id);
4836
+ }
4837
+ array_push($sorted_label_names, $label_names[$key]);
4838
+ array_push($sorted_label_types, $label_types[$key]);
4839
+ array_push($sorted_label_names_original, $label_names_original[$key]);
4840
+ if ( isset($_POST[$form_id . '_' . $label_id . '_search']) ) {
4841
+ $search_temp = esc_html($_POST[$form_id . '_' . $label_id . '_search']);
4842
+ }
4843
+ else {
4844
+ $search_temp = '';
4845
+ }
4846
+ $search_temp = strtolower($search_temp);
4847
+ $lists[$form_id . '_' . $label_id . '_search'] = $search_temp;
4848
+ if ( $search_temp ) {
4849
+ $join_query[] = 'search';
4850
+ $join_where[] = array( 'label' => $label_id, 'search' => $search_temp );
4851
+ }
4852
+ if ( isset($_POST[$form_id . '_' . $label_id . '_search_verified']) ) {
4853
+ $search_verified = $_POST[$form_id . '_' . $label_id . '_search_verified'];
4854
+ $lists[$form_id . '_' . $label_id . '_search_verified'] = $search_verified;
4855
+ }
4856
+ else {
4857
+ $search_verified = '';
4858
+ }
4859
+ if ( $search_verified && isset($ver_emails_array[$label_id]) ) {
4860
+ $join_query[] = 'search';
4861
+ $join_where[] = NULL;
4862
+ $join_verified[] = array(
4863
+ 'label' => $label_id,
4864
+ 'ver_search' => implode('|', $ver_emails_array[$label_id]),
4865
+ );
4866
+ }
4867
+ }
4868
+ }
4869
+ if ( strpos($order_by, "_field") ) {
4870
+ if ( in_array(str_replace("_field", "", $order_by), $labels) ) {
4871
+ $join_query[] = 'sort';
4872
+ $join_where[] = array( 'label' => str_replace("_field", "", $order_by) );
4873
+ }
4874
+ }
4875
+ $cols = 'group_id';
4876
+ if ( $order_by == 'date' or $order_by == 'ip' ) {
4877
+ $cols = 'group_id, date, ip';
4878
+ }
4879
+ $ver_where = '';
4880
+ if ( !empty($join_verified) ) {
4881
+ foreach ( $join_verified as $key_ver => $join_ver ) {
4882
+ $ver_where .= '(element_label="' . $join_ver['label'] . '" AND element_value REGEXP "' . $join_ver['ver_search'] . '" ) AND';
4883
+ }
4884
+ }
4885
+ switch ( count($join_query) ) {
4886
+ case 0:
4887
+ $join = 'SELECT distinct group_id FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $where;
4888
+ break;
4889
+ case 1:
4890
+ if ( $join_query[0] == 'sort' ) {
4891
+ $join = 'SELECT group_id FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $where . ' AND element_label="' . $join_where[0]['label'] . '" ';
4892
+ $join_count = 'SELECT count(group_id) FROM ' . $wpdb->prefix . 'formmaker_submits WHERE form_id="' . $form_id . '" AND element_label="' . $join_where[0]['label'] . '" ';
4893
+ $orderby = ' ORDER BY `element_value` ' . $asc_or_desc;
4894
+ }
4895
+ else {
4896
+ if ( isset($join_where[0]['search']) ) {
4897
+ $join = 'SELECT group_id FROM ' . $wpdb->prefix . 'formmaker_submits WHERE element_label="' . $join_where[0]['label'] . '" AND (element_value LIKE "%' . $join_where[0]['search'] . '%" OR element_value LIKE "%' . str_replace(' ', '@@@', $join_where[0]['search']) . '%") AND ' . $where;
4898
+ }
4899
+ else {
4900
+ $join = 'SELECT group_id FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $ver_where . $where;
4901
+ }
4902
+ }
4903
+ break;
4904
+ default:
4905
+ if ( !empty($join_verified) ) {
4906
+ if ( isset($join_where[0]['search']) ) {
4907
+ $join = 'SELECT t.group_id from (SELECT t1.group_id from (SELECT ' . $cols . ' FROM ' . $wpdb->prefix . 'formmaker_submits WHERE (element_label="' . $join_where[0]['label'] . '" AND (element_value LIKE "%' . $join_where[0]['search'] . '%" OR element_value LIKE "%' . str_replace(' ', '@@@', $join_where[0]['search']) . '%")) AND ' . $where . ' ) as t1 JOIN (SELECT group_id FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $ver_where . $where . ') as t2 ON t1.group_id = t2.group_id) as t ';
4908
+ }
4909
+ else {
4910
+ $join = 'SELECT t.group_id FROM (SELECT ' . $cols . ' FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $ver_where . $where . ') as t ';
4911
+ }
4912
+ }
4913
+ else {
4914
+ $join = 'SELECT t.group_id FROM (SELECT ' . $cols . ' FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $where . ' AND element_label="' . $join_where[0]['label'] . '" AND (element_value LIKE "%' . $join_where[0]['search'] . '%" OR element_value LIKE "%' . str_replace(' ', '@@@', $join_where[0]['search']) . '%" )) as t ';
4915
+ }
4916
+ for ( $key = 1; $key < count($join_query); $key++ ) {
4917
+ if ( $join_query[$key] == 'sort' ) {
4918
+ if ( isset($join_where[$key]) ) {
4919
+ $join .= 'LEFT JOIN (SELECT group_id as group_id' . $key . ', element_value FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $where . ' AND element_label="' . $join_where[$key]['label'] . '") as t' . $key . ' ON t' . $key . '.group_id' . $key . '=t.group_id ';
4920
+ $orderby = ' ORDER BY t' . $key . '.`element_value` ' . $asc_or_desc . '';
4921
+ }
4922
+ }
4923
+ else {
4924
+ if ( isset($join_where[$key]) ) {
4925
+ $join .= 'INNER JOIN (SELECT group_id as group_id' . $key . ' FROM ' . $wpdb->prefix . 'formmaker_submits WHERE ' . $where . ' AND element_label="' . $join_where[$key]['label'] . '" AND (element_value LIKE "%' . $join_where[$key]['search'] . '%" OR element_value LIKE "%' . str_replace(' ', '@@@', $join_where[$key]['search']) . '%")) as t' . $key . ' ON t' . $key . '.group_id' . $key . '=t.group_id ';
4926
+ }
4927
+ }
4928
+ }
4929
+ break;
4930
+ }
4931
+ $pos = strpos($join, 'SELECT t.group_id');
4932
+ if ( $pos === FALSE ) {
4933
+ $query = str_replace(array(
4934
+ 'SELECT group_id',
4935
+ 'SELECT distinct group_id',
4936
+ ), array( 'SELECT count(distinct group_id)', 'SELECT count(distinct group_id)' ), $join);
4937
+ }
4938
+ else {
4939
+ $query = str_replace('SELECT t.group_id', 'SELECT count(t.group_id)', $join);
4940
+ }
4941
+ $total = $wpdb->get_var($query);
4942
+ $query_sub_count = "SELECT count(distinct group_id) from " . $wpdb->prefix . "formmaker_submits";
4943
+ $sub_count = (int) $wpdb->get_var($query_sub_count);
4944
+ $query = $join . ' ' . $orderby . ' LIMIT ' . $page_num . ', '.$per_num;
4945
+ $results = $wpdb->get_results($query);
4946
+ for ( $i = 0; $i < count($results); $i++ ) {
4947
+ array_push($rows_ord, $results[$i]->group_id);
4948
+ }
4949
+ $query1 = $join . ' ' . $orderby;
4950
+ $searched_group_ids = $wpdb->get_results($query1);
4951
+ $searched_ids = array();
4952
+ for ( $i = 0; $i < count($searched_group_ids); $i++ ) {
4953
+ array_push($searched_ids, $searched_group_ids[$i]->group_id);
4954
+ }
4955
+ $where2 = array();
4956
+ $where2[] = "group_id='0'";
4957
+ foreach ( $rows_ord as $rows_ordd ) {
4958
+ $where2[] = "group_id='" . $rows_ordd . "'";
4959
+ }
4960
+ $where2 = (count($where2) ? ' WHERE ' . implode(' OR ', $where2) . '' : '');
4961
+ $query = 'SELECT * FROM ' . $wpdb->prefix . 'formmaker_submits ' . $where2;
4962
+ $rows = $wpdb->get_results($query);
4963
+ $group_ids = $rows_ord;
4964
+ $lists['total'] = $total;
4965
+ $lists['limit'] = $per_num;
4966
+ $where_choices = $where;
4967
+ array_push($labels_parameters, $sorted_labels_id);
4968
+ array_push($labels_parameters, $sorted_label_types);
4969
+ array_push($labels_parameters, $lists);
4970
+ array_push($labels_parameters, $sorted_label_names);
4971
+ array_push($labels_parameters, $sorted_label_names_original);
4972
+ array_push($labels_parameters, $rows);
4973
+ array_push($labels_parameters, $group_ids);
4974
+ array_push($labels_parameters, $where_choices);
4975
+ array_push($labels_parameters, $searched_ids);
4976
+ }
4977
+
4978
+ return $labels_parameters;
4979
+ }
4980
+
4981
+ /**
4982
+ * Encode a given string with the QUOTED_PRINTABLE mechanism and wrap the lines.
4983
+ *
4984
+ * @param string $str
4985
+ * @param int $lineLength Line length; defaults to {@link LINELENGTH}
4986
+ * @param string $lineEnd Line end; defaults to {@link LINEEND}
4987
+ *
4988
+ * @return string
4989
+ */
4990
+ public static function encodeQuotedPrintable( $str, $lineLength = self::LINELENGTH, $lineEnd = self::LINEEND ) {
4991
+ $out = '';
4992
+ $str = self::_encodeQuotedPrintable($str);
4993
+ // Split encoded text into separate lines
4994
+ while ( strlen($str) > 0 ) {
4995
+ $ptr = strlen($str);
4996
+ if ( $ptr > $lineLength ) {
4997
+ $ptr = $lineLength;
4998
+ }
4999
+ // Ensure we are not splitting across an encoded character
5000
+ $pos = strrpos(substr($str, 0, $ptr), '=');
5001
+ if ( $pos !== FALSE && $pos >= $ptr - 2 ) {
5002
+ $ptr = $pos;
5003
+ }
5004
+ // Check if there is a space at the end of the line and rewind
5005
+ if ( $ptr > 0 && $str[$ptr - 1] == ' ' ) {
5006
+ --$ptr;
5007
+ }
5008
+ // Add string and continue
5009
+ $out .= substr($str, 0, $ptr) . '=' . $lineEnd;
5010
+ $str = substr($str, $ptr);
5011
+ }
5012
+ $out = rtrim($out, $lineEnd);
5013
+ $out = rtrim($out, '=');
5014
+
5015
+ return $out;
5016
+ }
5017
+
5018
+ /**
5019
+ * Converts a string into quoted printable format.
5020
+ *
5021
+ * @param string $str
5022
+ *
5023
+ * @return string
5024
+ */
5025
+ private static function _encodeQuotedPrintable( $str ) {
5026
+ $str = str_replace('=', '=3D', $str);
5027
+ $str = str_replace(self::$qpKeys, self::$qpReplaceValues, $str);
5028
+ $str = rtrim($str);
5029
+
5030
+ return $str;
5031
+ }
5032
+
5033
+ /**
5034
+ * decode a quoted printable encoded string
5035
+ * The charset of the returned string depends on your iconv settings.
5036
+ *
5037
+ * @param string $string Encoded string
5038
+ *
5039
+ * @return string Decoded string
5040
+ */
5041
+ public static function decodeQuotedPrintable( $string ) {
5042
+ return quoted_printable_decode($string);
5043
+ }
5044
  }
5045
 
5046
  /*
frontend/models/form_maker.php CHANGED
@@ -55,20 +55,22 @@ class FMModelForm_maker {
55
  }
56
  $cssver = isset($form_theme['version']) ? $form_theme['version'] : 1;
57
  $this->create_css($theme_id, $form_theme, $old);
 
58
  $wp_upload_dir = wp_upload_dir();
59
  $frontend_dir ='/form-maker-frontend/';
60
- $fm_style = $wp_upload_dir['baseurl'] . $frontend_dir . 'css/fm-style-' . $theme_id . '.css';
61
  $fm_style_dir = $wp_upload_dir['basedir'] . $frontend_dir . 'css/fm-style-' . $theme_id . '.css';
62
-
63
- if( !file_exists( $fm_style_dir ) ) {
64
- if( function_exists('wp_add_inline_style') ) {
65
- wp_add_inline_style( 'fm-frontend', $this->fm_css_content );
66
- } else {
67
- echo '<style>'.$this->fm_css_content.'</style>';
68
- }
69
- } else {
70
- wp_register_style('fm-style-' . $theme_id, $fm_style, array(), $cssver);
71
- wp_enqueue_style('fm-style-' . $theme_id);
 
 
72
  }
73
 
74
  $label_id = array();
55
  }
56
  $cssver = isset($form_theme['version']) ? $form_theme['version'] : 1;
57
  $this->create_css($theme_id, $form_theme, $old);
58
+ $front_urls = WDFM()->front_urls;
59
  $wp_upload_dir = wp_upload_dir();
60
  $frontend_dir ='/form-maker-frontend/';
 
61
  $fm_style_dir = $wp_upload_dir['basedir'] . $frontend_dir . 'css/fm-style-' . $theme_id . '.css';
62
+ $fm_style_url = $front_urls['upload_url'] . $frontend_dir . 'css/fm-style-' . $theme_id . '.css';
63
+ if ( !file_exists($fm_style_dir) ) {
64
+ if ( function_exists('wp_add_inline_style') ) {
65
+ wp_add_inline_style('fm-frontend', $this->fm_css_content);
66
+ }
67
+ else {
68
+ echo '<style>' . $this->fm_css_content . '</style>';
69
+ }
70
+ }
71
+ else {
72
+ wp_register_style('fm-style-' . $theme_id, $fm_style_url, array(), $cssver);
73
+ wp_enqueue_style('fm-style-' . $theme_id);
74
  }
75
 
76
  $label_id = array();
frontend/views/form_maker.php CHANGED
@@ -1676,20 +1676,24 @@ class FMViewForm_maker {
1676
  $form_maker_front_end .= '<div class="wdform_preload"></div>';
1677
  $form_maker_front_end .= '</form>';
1678
  $jsversion = $row->jsversion ? $row->jsversion : 1;
 
 
1679
  $wp_upload_dir = wp_upload_dir();
1680
- $fm_script = $wp_upload_dir['baseurl'] . '/form-maker-frontend/js/fm-script-' . $form_id . '.js';
1681
- $fm_script_dir = $wp_upload_dir['basedir'] . '/form-maker-frontend/js/fm-script-' . $form_id . '.js';
1682
 
1683
  WDW_FM_Library::create_js($form_id);
1684
- if( !file_exists($fm_script_dir) ){
1685
- if( function_exists('wp_add_inline_script') ) {
1686
- wp_add_inline_script('fm-frontend', WDW_FM_Library::$fm_js_content);
1687
- } else {
1688
- echo '<script>'.WDW_FM_Library::$fm_js_content.'</script>';
1689
  }
1690
- } else {
1691
- wp_register_script('fm-script-' . $form_id, $fm_script, array(), $jsversion);
1692
- wp_enqueue_script('fm-script-' . $form_id);
 
 
 
 
1693
  }
1694
 
1695
  $_GET['addon_view'] = 'frontend';
1676
  $form_maker_front_end .= '<div class="wdform_preload"></div>';
1677
  $form_maker_front_end .= '</form>';
1678
  $jsversion = $row->jsversion ? $row->jsversion : 1;
1679
+ $front_urls = WDFM()->front_urls;
1680
+ $frontend_dir ='/form-maker-frontend/';
1681
  $wp_upload_dir = wp_upload_dir();
1682
+ $fm_script_dir = $wp_upload_dir['basedir'] . $frontend_dir . 'js/fm-script-' . $form_id . '.js';
1683
+ $fm_script_url = $front_urls['upload_url'] . $frontend_dir . 'js/fm-script-' . $form_id . '.js';
1684
 
1685
  WDW_FM_Library::create_js($form_id);
1686
+ if ( !file_exists($fm_script_dir) ) {
1687
+ if ( function_exists('wp_add_inline_script') ) {
1688
+ wp_add_inline_script('fm-frontend', WDW_FM_Library::$fm_js_content);
 
 
1689
  }
1690
+ else {
1691
+ echo '<script>' . WDW_FM_Library::$fm_js_content . '</script>';
1692
+ }
1693
+ }
1694
+ else {
1695
+ wp_register_script('fm-script-' . $form_id, $fm_script_url, array(), $jsversion);
1696
+ wp_enqueue_script('fm-script-' . $form_id);
1697
  }
1698
 
1699
  $_GET['addon_view'] = 'frontend';
js/add_field.js CHANGED
@@ -2304,7 +2304,7 @@ function el_select(subtype, new_id) {
2304
  function el_file_upload(subtype, new_id) {
2305
  w_attr_name = [];
2306
  w_attr_value = [];
2307
- type_file_upload(new_id, 'Upload a File', '', 'top', 'no', "form-maker", 'jpg, jpeg, png, gif, doc, docx, xls, xlsx', '2000', 'no', 'no', '', w_attr_name, w_attr_value);
2308
  }
2309
 
2310
  function el_section_break(subtype, new_id) {
@@ -2312,18 +2312,7 @@ function el_section_break(subtype, new_id) {
2312
  }
2313
 
2314
  function el_page_break(subtype, new_id) {
2315
- for (t = form_view_max; t > 0; t--) {
2316
- if (document.getElementById('form_id_tempform_view' + t)) {
2317
- last_view = t;
2318
- break;
2319
- }
2320
- }
2321
- if (document.getElementById('form_id_tempform_view' + t).getAttribute('page_title')) {
2322
- w_page_title = document.getElementById('form_id_tempform_view' + t).getAttribute('page_title');
2323
- }
2324
- else {
2325
- w_page_title = 'Untitled Page';
2326
- }
2327
  w_title = ["Next", "Previous"];
2328
  w_type = ["text", "text"];
2329
  w_class = ["wdform-page-button", "wdform-page-button"];
@@ -12406,12 +12395,12 @@ function type_range(i, w_field_label, w_field_label_size, w_field_label_pos, w_h
12406
  adding_range_input_to.setAttribute("onKeyPress", "return check_isnum_or_minus(event)");
12407
 
12408
  var adding_range_label_from = document.createElement("label");
12409
- adding_range_label_from.setAttribute("class", "mini_label");
12410
  adding_range_label_from.setAttribute("id", i + "_mini_label_from");
12411
  adding_range_label_from.innerHTML = w_mini_labels[0];
12412
 
12413
  var adding_range_label_to = document.createElement("label");
12414
- adding_range_label_to.setAttribute("class", "mini_label");
12415
  adding_range_label_to.setAttribute("id", i + "_mini_label_to");
12416
  adding_range_label_to.innerHTML = w_mini_labels[1];
12417
 
@@ -13213,7 +13202,7 @@ function type_phone(i, w_field_label, w_field_label_size, w_field_label_pos, w_h
13213
  gic.innerHTML = "-";
13214
 
13215
  var first_label = document.createElement('label');
13216
- first_label.setAttribute("class", "mini_label");
13217
  first_label.setAttribute("id", i + "_mini_label_area_code");
13218
  first_label.innerHTML = w_mini_labels[0];
13219
 
@@ -13228,7 +13217,7 @@ function type_phone(i, w_field_label, w_field_label_size, w_field_label_pos, w_h
13228
  last.setAttribute("onKeyPress", "return check_isnum(event)");
13229
 
13230
  var last_label = document.createElement('label');
13231
- last_label.setAttribute("class", "mini_label");
13232
  last_label.setAttribute("id", i + "_mini_label_phone_number");
13233
  last_label.innerHTML = w_mini_labels[1];
13234
 
2304
  function el_file_upload(subtype, new_id) {
2305
  w_attr_name = [];
2306
  w_attr_value = [];
2307
+ type_file_upload(new_id, 'Upload a File', '', 'top', 'no', "form-maker", 'jpg, jpeg, png, gif, bmp, tif, tiff, svg, pdf, txt, log, doc, docx, csv, xls, xlsx, pps, ppt, pptx, xml, mp3, mp4, wma, wav, mpg, wmv', '2000', 'no', 'no', '', w_attr_name, w_attr_value);
2308
  }
2309
 
2310
  function el_section_break(subtype, new_id) {
2312
  }
2313
 
2314
  function el_page_break(subtype, new_id) {
2315
+ w_page_title = 'Untitled Page';
 
 
 
 
 
 
 
 
 
 
 
2316
  w_title = ["Next", "Previous"];
2317
  w_type = ["text", "text"];
2318
  w_class = ["wdform-page-button", "wdform-page-button"];
12395
  adding_range_input_to.setAttribute("onKeyPress", "return check_isnum_or_minus(event)");
12396
 
12397
  var adding_range_label_from = document.createElement("label");
12398
+ adding_range_label_from.setAttribute("class", "mini_label mini_label_from");
12399
  adding_range_label_from.setAttribute("id", i + "_mini_label_from");
12400
  adding_range_label_from.innerHTML = w_mini_labels[0];
12401
 
12402
  var adding_range_label_to = document.createElement("label");
12403
+ adding_range_label_to.setAttribute("class", "mini_label mini_label_to");
12404
  adding_range_label_to.setAttribute("id", i + "_mini_label_to");
12405
  adding_range_label_to.innerHTML = w_mini_labels[1];
12406
 
13202
  gic.innerHTML = "-";
13203
 
13204
  var first_label = document.createElement('label');
13205
+ first_label.setAttribute("class", "mini_label mini_label_area_code");
13206
  first_label.setAttribute("id", i + "_mini_label_area_code");
13207
  first_label.innerHTML = w_mini_labels[0];
13208
 
13217
  last.setAttribute("onKeyPress", "return check_isnum(event)");
13218
 
13219
  var last_label = document.createElement('label');
13220
+ last_label.setAttribute("class", "mini_label mini_label_phone_number");
13221
  last_label.setAttribute("id", i + "_mini_label_phone_number");
13222
  last_label.innerHTML = w_mini_labels[1];
13223
 
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Form Maker by WD - user-friendly drag & drop Form Builder plugin ===
2
  Contributors: webdorado,10web,wdsupport,formmakersupport
3
- Tags: form, form builder, contact form, custom form, feedback, contact, contact forms, captcha, email, form manager, forms, survey
4
  Requires at least: 3.4
5
  Tested up to: 4.9
6
- Stable tag: 1.12.19
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -24,32 +24,32 @@ https://www.youtube.com/watch?v=tN3_c6MhqFk
24
 
25
 
26
 
27
- Form Maker is a power-packed yet user-friendly form builder plugin. With an intuitive drag and drop interface, form maker is the ultimate solution to help you create responsive WordPress Forms easily and in a timely manner. Add modern and functional forms to your website with a few clicks. Using the plugin you can create forms for pretty much any purpose, from simple contact forms to multi page application, registration survey and questionnaire forms with conditional fields, captcha protection, multiple choice questions and more. It will take you just a few clicks to create the forms and a couple of minutes to customize them with the available themes, styling and display options. This plugin can be a good addition to any website, so go ahead and give it a try.
28
 
29
  **Benefits**
30
 
31
- * **Better communication between your visitors and you -** Contact forms serve as a communication tool between you and your site visitors, and make it easy to get/receive orders, requests, and inquiries. If you offer memberships, courses or trainings on your website, forms are an easy way to order, apply or register online.
32
- * **Valuable User/Customer Feedback** - You are what your user/customer thinks of you! Handy forms to put together surveys and questionnaires and get feedback from your users/customers.
33
- * **One plugin, different purposes** - Whether you want to have a single form on the contact page, or multiple forms on different pages on your website, that&#39;s absolutely doable with this form builder plugin. You can create unlimited number of different forms and display them using one of the available display options.
34
- * **Save time -** Plugin uses an intuitive drag and drop interface, which makes it easy to create forms and add/remove fields to/from the forms.
35
- * **Add to the overall website design -** A well designed form can contribute to your website&#39;s overall look and feel. Custom style your forms and have them match with your website design.
36
- * **Improve accessibility -** Plugin provides four different form display options, which make your forms easily accessible. Whether you want to embed the form into a post or a page, or have it follow the visitors as they scroll up and down, you have the option to do that.
37
- * **Awesome Support -** The team behind this form builder plugin provides timely and effective support to all its users. We keep standards high and response time low.
38
 
39
 
40
  **What&#39;s in it**
41
 
42
  **MULTIPLE FORM FIELDS**
43
- Plugin comes with a myriad of form field options to let you create high performing forms. The fields you can add to the forms include: text input, multiple and single choice fields, select box, submit and reset buttons, custom HTML, 3 types of captcha protection and many more. In addition to these fields, the Premium version of the plugin offers file upload, Google Maps, and payment fields with automatic PayPal integration or Stripe integration with an add on.
44
 
45
  **FOUR FORM DISPLAY OPTIONS**
46
- There are four form display options in the plugin: Embedded, Pop-Up, Scroll-box, and Top-bar. Each of the display options has its own set of settings you can customize.
47
 
48
  **DRAG &amp; DROP**
49
- The intuitive drag-and-drop interface of the plugin makes it the most user-friendly form plugin for WordPress. Easily re-order the sequence of the form fields or move the fields between columns, sections and pages, organizing your forms in no time.
50
 
51
  **15 CUSTOMIZABLE THEMES**
52
- Plugin comes with 15 fully customizable themes that you can apply to your forms. Under the theme options you can configure pretty much any setting of the theme, personalizing options for form header, content, pagination, buttons and more. You can also create your own themes with your personal styling and features.
53
 
54
  **CUSTOM CSS EDITOR**
55
  You can use the custom CSS editor to give additional styling features to the forms.
@@ -58,16 +58,16 @@ You can use the custom CSS editor to give additional styling features to the for
58
  Send customized emails to your users as well as website administrators upon submission for any given form.
59
 
60
  **MANAGED SUBMISSIONS**
61
- View and manage the submissions for each form. See number of entries, number of views,the conversion rate and more.
62
 
63
  **CONDITIONAL FIELDS**
64
- Conditional fields feature of the plugin lets you display/hide specific fields on the forms based on the user input. This is a great way to make your forms shorter and avoid receiving irrelevant information.
65
 
66
- **PRE-BUILD** **TEMPLATES**
67
- The form builder plugin comes with 5 pre-built templates, which you can use as they are or customize to better fit your needs.
68
 
69
  **ADD-ONs**
70
- Form Maker supports 12 premium add-ons to power up your forms even further. Whether you want to integrate your forms with Mailchimp service, send out conditional emails, or give your visitors an additional payment method like Stripe. Find the full list of add-ons bellow.
71
 
72
  * [Export/Import](https://web-dorado.com/products/wordpress-form/add-ons/export-import.html)
73
  * [Save Progress](https://web-dorado.com/products/wordpress-form/add-ons/save-progress.html)
@@ -85,11 +85,11 @@ Form Maker supports 12 premium add-ons to power up your forms even further. Whet
85
  **SETTINGS/CUSTOMIZATION**
86
  _\*Some customizations described here are available in Premium version. Please refer to feature summary for additional info._
87
 
88
- Form Maker plugin provides a full range of form options and features you can tailor to your needs. Each of the forms you create will have its own set of form and display settings. Under the form settings you can choose a theme for each form, adjust email options, choose what happens after the user submits the form, set conditional logic, and choose one of the available payment options, such as PayPal and Stripe (add-on). Under the form display options you can adjust the settings for each form display type.
89
 
90
- The available form themes are fully configurable, allowing you make the necessary adjustments to the form header,content, input box,buttons, choices, pagination, and add custom CSS. You can change the header background color, adjust the parameters for title, description and header image,customize the parameters for buttons, adjust the settings for single and multiple choice questions, and many more. The changes you make to the form settings will immediately be displayed in the form preview next to the settings box.
91
 
92
- With conditional fields option you can set to hide/show specific fields on the form based on the selections your visitors make. You just choose the field you want to show or hide, then set the conditions based on which the field will appear on the form or will be hidden. Form Maker plugin features a user-friendly interface, which makes it easy to create, style and customize the forms.
93
 
94
 
95
  **[Premium version adds](https://web-dorado.com/products/wordpress-form.html)**
@@ -117,12 +117,12 @@ After downloading the ZIP file,
117
 
118
  If the installation does not succeed, please contact us for help.
119
 
120
- After the installation is finished, you can go ahead and start working on your forms. Navigate to **Form Maker &gt; Forms** page to build your very first form. Form Maker plugin provides a few sample forms, which you can quickly edit and publish.
121
 
122
  Using **Form Maker &gt; Forms** page, you can manage existing forms, perform Bulk Actions, such as Publish, Unpublish, Duplicate or Delete. Select the necessary form, choose the bulk action, then press Apply. Also, you can search for your form by writing its title in the top Search input.
123
 
124
  **Adding Fields**
125
- To add a new field to your form, drag New Field button to the area where you wish to place the field. The field editor toolbox will be opened automatically. Click on the field set from which you are going to choose the field, for instance, User Info Fields. Press Name button from this field set to add a Name input to your form. Then click Add and the field will be placed to the area you selected initially.
126
 
127
  It is also possible to search among the fields when adding a new field to your form. Use Filter input at the top left corner of fields toolbox. For example, you can search &quot;phone&quot; and all Phone fields will be filtered.
128
 
@@ -149,9 +149,9 @@ After adding your form fields and updating your form, you are able to Undo or Re
149
 
150
  You can create web forms free of additional coding, with just a few clicks. The functionality of Form Maker is excellent for any kind of online questionnaires.
151
 
152
- Form Maker can be used for creating multiple types of forms, including contact forms, evaluation, application forms, quizzes/tests or surveys, online order forms and etc. Form Maker includes various types of fields which can be modified and/or edited.
153
 
154
- Whether you are a WordPress beginner or a web guru, Form Maker is the perfect choice. The dynamic web form builder plugin comes with clean visual tools and options, and you do not need to have any web development skills to build a form.
155
 
156
  = How can I create a form with Form Maker? =
157
 
@@ -159,23 +159,23 @@ Navigate to **Form Maker > Forms** page to build your very first form. This cont
159
 
160
  Using **Form Maker > Forms** page, you can manage existing forms, perform **Bulk Actions,** such as **Publish, Unpublish, Duplicate** or **Delete.** Select the necessary form, choose the bulk action, then press **Apply.** Also, you can search for your form by writing its title in the top **Search** input.
161
 
162
- Press **Add New** button from this page, and you will be redirected to **Form Editor** page. Make sure to write a **Title** for this form, then choose the **Theme** which sets the appearance of your form. In case you wish to display the form with the same style as your website theme, select **Inherit From Website Theme** option from **Theme** select box.
163
 
164
- To add a new field with this application form creator, drag **New Field** button to the area where you wish to place the field. The field editor toolbox will be opened automatically. Click on the field set from which you are going to choose the field, for instance, **User Info Fields.** Press **Name** button from this field set to add a Name input to your form. Then click **Add** and the field will be placed to the area you selected initially.
165
 
166
- It is also possible to search among the fields when adding a new field to your form. Use **Filter** input at the top left corner of fields toolbox. For example, you can search "phone" and all Phone fields will be filtered.
167
 
168
  = Can I add a custom header with text and image above my form? =
169
 
170
- This dynamic form builder lets you have a nice header section on your forms, which can contain additional content, as well as images with animations. Click on **Form Header** bar of your form to open its toolbox and provide a **Title.** This is the form heading, which will appear above your form. In addition, you can write a **Description** to appear right below the Title. This comes handy, in case you need to write an introduction for your form.
171
 
172
  You can also have an image on your form header and set it to appear with an animation effect. Press **Add Image** button to upload and select a picture from **WordPress Media Library.** Then choose the animation effect using Image Animation option.
173
 
174
- In case you don’t want the **Header Image** to appear on smartphones and tablets, mark **Hide Image on Mobile** option as checked.
175
 
176
- Don’t forget to **Publish/Update** the form to save the change you made.
177
 
178
- = Does Form Maker support for conditional logic and how can I use it? =
179
 
180
  Yes, another fantastic feature of this custom form creator plugin is its **Conditional Fields.** This lets you **show** or **hide** fields of your form based on certain selections submitter makes.
181
 
@@ -183,7 +183,7 @@ The structure of conditional fields in this contact form generator form builder
183
 
184
  Go to **Form Options** of your form, then click **Conditional Fields** tab to start the setup. Press **Add Condition** button to configure the first condition of your form.
185
 
186
- **Show/Hide** select box represents the action which will be completed, if all or any of the condition statements are fulfilled. Use the second drop-down menu to select the field which will be shown or hidden.
187
 
188
  Click the little **Plus (+)** icon to add the statement of your form condition.
189
 
@@ -192,7 +192,7 @@ For example, let’s assume there is a **Single Choice** field on your form titl
192
  *Show [Message] if [all] of the following match:*
193
  *[Inquiry type] is [Support request]*
194
 
195
- Make sure to hit **Update** after setting up Conditional Fields.
196
 
197
  = What styling options do the forms include? =
198
 
@@ -215,9 +215,9 @@ Options of Form Maker Themes are divided into the following sections:
215
  * Other
216
  * Custom CSS
217
 
218
- You can preview the design of each theme under Preview block. In case you created forms with multiple pages, you can change its Pagination Type, setting it to Step, Percentage or None.
219
 
220
- Custom CSS option in Themes of this offline form builder lets you write additional CSS code and customize your forms further. All CSS rules apply to this editor. Make sure to press Save after modifying the theme.
221
 
222
  = Does Form Maker use auto-respondent feature? =
223
 
@@ -225,7 +225,7 @@ You can use **Email Options** of Form Maker to send a fully customizable letter
225
 
226
  This html5 form builder plugin lets you send submitted information to one or multiple email addresses. Furthermore, you can also send a confirmation email to the submitter and let them know you have received their application.
227
 
228
- Enable Send E-mail from **Form Options &gt; Email Options** tab and start configuring mailing settings. Most options require the same configuration for Email to Administrator and Email to User. However, there are a few settings which are unique.
229
 
230
  **Email to Administrator**
231
 
@@ -235,7 +235,7 @@ This section of Email Options allows you to set up notifications of form submiss
235
 
236
  **Send to.** Use this setting to select the email field of your form, to which the submissions will be sent.
237
 
238
- Important! In case you do not have an email input created from User Info Fields &gt; Email type, the following error message will appear:
239
 
240
  &quot;There is no email field&quot;.
241
 
@@ -255,15 +255,15 @@ Note: You need to set up **Form Options > Payment Options** of your form in orde
255
 
256
  Configuring Payment Options, you can use Form Maker as an order form generator and let users make payments through your form. Default payment gateway of Form Maker is **PayPal.** Select **PayPal** as **Payment Method** from Form **Options &gt; Payment Options** tab and configure corresponding options.
257
 
258
- Also, you can easily integrate the plugin with Stripe using its [Stripe Integration add-on](https://web-dorado.com/products/wordpress-form/add-ons/stripe.html).
259
 
260
  **Payment Currency.** Choose the currency to be used for the payments made through your form. Note, that the selected currency symbol will only display on the front-end of the published form.
261
 
262
- **Tax (%)**. Specify the percentage of the tax. It will be calculated from the total payment amount of your form, and will be added to the grand total.
263
 
264
- **Checkout Mode**. Select the checkout mode for your form. Testmode will display PayPal Sandbox after submission, which allows you to run payment tests. When you are ready to receive payments, enable Production mode.
265
 
266
- **Paypal email**. Provide the email address of a valid PayPal account. This account will be used as the recipient of payments through your form.
267
 
268
  = Where can I check the submissions of my forms? =
269
 
@@ -273,11 +273,11 @@ Also, you can easily integrate the plugin with Stripe using its [Stripe Integrat
273
 
274
  **Export to CSV / Export to XML.** You are able to download all submissions of each form in **CSV** or **XML** format by clicking on these buttons.
275
 
276
- **Show Filters.** Form Maker lets you filter form submissions by values provided by user, e.g. submitter’s email address, name and more. Press **Show Filters** button, write the values you wish to search with, then press **Search.** Click **Reset** button to clear the filters.
277
 
278
  **Add/Remove Columns.** This button will help you customize the columns which display in submissions of the selected form. Click on the button and unmark the columns you wish to hide.
279
 
280
- *Note: Adding/Removing columns does not delete columns from the submissions table. It just hides them until you activate them again.*
281
 
282
  **Block IPs / Unblock IPs.** In case you are receiving spam submissions from certain IP addresses, you can block these addresses. Mark all spam submissions as checked, choose **Block IPs** option from **Bulk Actions** and press **Apply.** You are able to unblock these IP addresses anytime.
283
 
@@ -293,7 +293,7 @@ Navigate to Form Options &gt; Actions After Submissions tab, and select one of t
293
  * **Post.** Select this option to redirect users to a specific post after they hit Submit. You will then be able to select the post from Post dropdown menu.
294
  * **Page.** You can also redirect users to a selected page. Choose this option and specify the destination using Page dropdown menu.
295
  * **Custom text.** Use this action in case you wish to display a &quot;Thank you&quot; message after users submit the form. The editor box accepts text, basic HTML, as well as values of form fields. Include them to the content by pressing on the top buttons indicating form fields.
296
- * **URL.** Configure redirection to any page with this action after submission. Mark URL option, then provide the absolute path of the link to the input that appears.
297
 
298
  = What verification methods does Form Maker use? =
299
 
@@ -301,19 +301,19 @@ Form Maker uses modern verification methods, such as ReCaptcha and invisible ReC
301
 
302
  = Can I use Form Maker as a registration form creator? =
303
 
304
- You can register users on your website with the help of [WordPress Registration add-on](https://web-dorado.com/products/wordpress-form/add-ons/registration.html). Install the add on and use it alonside the free version of Form Maker plugin.
305
 
306
  You are able to ask users to provide username, email address and password for their account. The registration of users is done upon completing the form created by this visual form builder plugin.
307
 
308
  = Is it possible to publish a form as a widget? =
309
 
310
- You can publish your form not only using **Display Options** of this web form builder plugin, but also as a widget. Go to **Appearance > Widgets** page to place your form on any widget area of your website theme.
311
 
312
  Search for **Form Maker widget** and drag it to the widget area where you wish to place your form. Specify a **Title** for the widget and choose the form you wish to publish. Press **Save** after making these changes.
313
 
314
  = Can the form submissions be shown to site visitors? =
315
 
316
- **Pro version** of Form Maker plugin allows you to publish submissions on front-end of your website.
317
 
318
  This form creator plugin lets you select user roles which will be able to view the published submissions. This can be done from **Form Options > General Options** section. Also, in the same section, you are able to choose fields to hide from front-end submissions.
319
 
@@ -321,21 +321,41 @@ Firstly, add/edit the page or post, where you wish to publish the submissions of
321
 
322
  **Select a Form.** Use this drop-down to choose the form, submissions of which you would like to publish.
323
 
324
- **Select Date Range.** You can display submissions from a specific date range. Use this option to select **From** and **To** dates.
325
 
326
  **Select fields.** Use this option to choose which columns to show on the form. Uncheck the options, which you need to hide on front-end submissions.
327
 
328
  **Export to / Show.** These two settings are responsible for showing the rest of the attributes of front-end submissions. You can enable/disable **CSV/XML** export buttons, **Statistics, Views, Conversion Rate** and other additional information.
329
 
330
- After configuring all necessary options, press **Insert.** Publish your page with submissions, and you will be able to view them on front-end.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
 
332
 
333
  == Changelog ==
334
 
 
 
 
 
 
335
  = 1.12.19 =
336
- * Fixed: Submissions table view for long texts.
337
- * Fixed: Phone field in Email.
338
- * Fixed: Page break bug.
339
 
340
  = 1.12.18 =
341
  * Changed: improved Form Submissions view: added tooltips for long labels of form fields.
@@ -516,7 +536,7 @@ After configuring all necessary options, press **Insert.** Publish your page wit
516
  * Changed: New logo
517
 
518
  = 1.10.8 =
519
- * Added: New field type: Phone with flag
520
  * Fixed: Bug on captcha reset
521
 
522
  = 1.10.7 =
@@ -530,7 +550,7 @@ After configuring all necessary options, press **Insert.** Publish your page wit
530
  * Fixed: Bug on matrix field
531
 
532
  = 1.10.5 =
533
- * Fixed: JS conflict on Form submission
534
 
535
  = 1.10.4 =
536
  * Fixed: Conflict with Yoast SEO plugin
@@ -587,7 +607,7 @@ After configuring all necessary options, press **Insert.** Publish your page wit
587
  * Changed: Featured plugins page
588
 
589
  = 1.9.8 =
590
- * Fixed: Unexpected behavior on pressing "Enter" key on back end
591
 
592
  = 1.9.7 =
593
  * Fixed: JS error on incorrect Google Maps API key
@@ -617,7 +637,7 @@ After configuring all necessary options, press **Insert.** Publish your page wit
617
  * Added: New field type: Date Range
618
 
619
  = 1.8.41 =
620
- * Fixed: Bug on conditional fields (for multiple forms on the same page)
621
 
622
  = 1.8.40 =
623
  * Changed: Style of required field asterisk
@@ -710,7 +730,7 @@ Removed: deprecated Number field
710
  * Changed: Matrix field display in email
711
 
712
  = 1.8.13 =
713
- * Fixed: Style in form edit page
714
  * Fixed: Bug in PayPal options
715
 
716
  = 1.8.12 =
@@ -893,7 +913,7 @@ Minor bug fixed
893
  * New: Arithmetic Captcha
894
 
895
  = 1.7.55 =
896
- * New: Undo/Rendo form
897
 
898
  = 1.7.54 =
899
  bug in conditional fields fixed
@@ -995,7 +1015,7 @@ bug fixed in email content
995
  remove fancybox lightbox
996
 
997
  = 1.7.24 =
998
- display php function to publish form
999
 
1000
  = 1.7.23 =
1001
  bug in Recaptcha fixed
@@ -1040,13 +1060,13 @@ line break in custom text in email
1040
  bug fixed in required radio field
1041
 
1042
  = 1.7.7 =
1043
- bug fixed in adding new form
1044
 
1045
  = 1.7.6 =
1046
  new email options, conditional fileds
1047
 
1048
  = 1.7.5 =
1049
- conflict with jetpack fixed
1050
 
1051
  = 1.7.4 =
1052
  bug fixed in form options
@@ -1059,7 +1079,7 @@ bug fixed in email options
1059
 
1060
  = 1.7 =
1061
  Div structured, responsive form
1062
- Editable form layout
1063
  New themes
1064
 
1065
  = 1.6.6 =
@@ -1092,9 +1112,10 @@ New themes
1092
  - Recapthca form field
1093
  * Pagebreak of the [Wordpress Form](http://wordpress.org/plugins/form-maker/) Maker: This can be used to break the form into distinct pages.
1094
  * Section Break of the Form Maker: This option allows adding a section break to the form page.
1095
- * For each form certain types of statistical data are available in the form builder:
1096
- * Entries of a form: The number of submitted forms in the form builder.
1097
  * Views of a form: The number of times the form has been viewed.
1098
  * Conversion Rate of a form: The percentage of submitted forms to the overall number of views.
 
1099
  = 1.0.0 =
1100
  Initial version
1
  === Form Maker by WD - user-friendly drag & drop Form Builder plugin ===
2
  Contributors: webdorado,10web,wdsupport,formmakersupport
3
+ Tags: form, form builder, contact form, custom form, feedback, contact, web contact form, captcha, email, form manager, forms, survey
4
  Requires at least: 3.4
5
  Tested up to: 4.9
6
+ Stable tag: 1.12.20
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
24
 
25
 
26
 
27
+ Form Maker is a power-packed yet user-friendly form builder plugin. With an intuitive drag and drop interface, this plugin is the ultimate solution to help you create responsive WordPress Forms easily and in a timely manner. Add modern and functional questionnaires to your website with a few clicks. Using the plugin you can create forms for pretty much any purpose, from simple contact form to multi-page application, registration survey and questionnaire with conditional fields, captcha protection, multiple choice questions and more. It will take you just a few clicks to create them and a couple of minutes to customize with the available themes, styling and display options. This plugin can be a good addition to any website, so go ahead and give it a try.
28
 
29
  **Benefits**
30
 
31
+ * **Better communication between your visitors and you** - Contact forms serve as a communication tool between you and your site visitors, and make it easy to get/receive orders, requests, and inquiries. If you offer memberships, courses or trainings on your website, forms are an easy way to order, apply or register online.
32
+ * **Valuable User/Customer Feedback** - You are what your user/customer thinks of you! The plugin lets you put together surveys and questionnaires and get feedback from your users/customers.
33
+ * **One plugin, different purposes** - Whether you want to have a single form on the contact us page, or multiple, on different pages on your website, that&#39;s absolutely doable with this plugin. You can create unlimited number of different forms and display them using one of the available display options. Please note, that free version is limited to 7 fields.
34
+ * **Save time** - Plugin uses an intuitive drag and drop interface, which makes it easy to create contact forms and add/remove fields.
35
+ * **Add to the overall website design** - A well designed contact form can contribute to your website&#39;s overall look and feel. Customize its style and have it match with your website design.
36
+ * **Improve accessibility** - Plugin provides four different display options, which make your contact forms easily accessible. Whether you want to embed the form into a post or a page, or have it follow the visitors as they scroll up and down, you have the option to do that.
37
+ * **Awesome Support** - The team behind this plugin provides timely and effective support to all its users. We keep standards high and response time low.
38
 
39
 
40
  **What&#39;s in it**
41
 
42
  **MULTIPLE FORM FIELDS**
43
+ Plugin comes with a myriad of field options to let you create high performing forms. The fields you can add include: text input, multiple and single choice fields, select box, submit and reset buttons, custom HTML, 3 types of captcha protection and many more. In addition to these fields, the Premium version of the plugin offers file upload, Google Maps, and payment fields with automatic PayPal integration or Stripe integration with an add on.
44
 
45
  **FOUR FORM DISPLAY OPTIONS**
46
+ There are four display options in the plugin: Embedded, Pop-Up, Scroll-box, and Top-bar. Each of the display options has its own set of settings you can customize.
47
 
48
  **DRAG &amp; DROP**
49
+ The intuitive drag-and-drop interface of the plugin makes it the most user-friendly form plugin for WordPress. Easily re-order the sequence of the fields or move them between columns, sections and pages, organizing your forms in no time.
50
 
51
  **15 CUSTOMIZABLE THEMES**
52
+ Plugin comes with 15 fully customizable themes that you can apply to your forms. Under the theme options you can configure pretty much any setting of the theme, personalizing options for header, content, pagination, buttons and more. You can also create your own themes with your personal styling and features.
53
 
54
  **CUSTOM CSS EDITOR**
55
  You can use the custom CSS editor to give additional styling features to the forms.
58
  Send customized emails to your users as well as website administrators upon submission for any given form.
59
 
60
  **MANAGED SUBMISSIONS**
61
+ View and manage the submissions for each form. See number of entries, number of views, the conversion rate and more.
62
 
63
  **CONDITIONAL FIELDS**
64
+ Conditional fields feature of the plugin lets you display/hide specific fields based on the user input. This is a great way to make your forms shorter and avoid receiving irrelevant information.
65
 
66
+ **PRE-BUILD TEMPLATES**
67
+ The plugin comes with 5 pre-built templates, which you can use as they are or customize to better fit your needs.
68
 
69
  **ADD-ONs**
70
+ Form Maker supports 12 premium add-ons to power up your forms even further. Whether you want to integrate them with Mailchimp service, send out conditional emails, or give your visitors an additional payment method like Stripe. Find the full list of add-ons bellow.
71
 
72
  * [Export/Import](https://web-dorado.com/products/wordpress-form/add-ons/export-import.html)
73
  * [Save Progress](https://web-dorado.com/products/wordpress-form/add-ons/save-progress.html)
85
  **SETTINGS/CUSTOMIZATION**
86
  _\*Some customizations described here are available in Premium version. Please refer to feature summary for additional info._
87
 
88
+ Form Maker plugin provides a full range of options and features you can tailor to your needs. Each of the entries you create will have its own set of options and display settings. Under the options you can choose a theme for each form, adjust email options, choose what happens after the user submits, set conditional logic, and choose one of the available payment options, such as PayPal and Stripe (add-on). Under the display settings you can adjust the options for each form display type.
89
 
90
+ The available themes are fully configurable, allowing you make the necessary adjustments to the header, content, input box, buttons, choices, pagination, and add custom CSS. You can change the header background color, adjust the parameters for title, description and header image,customize the parameters for buttons, adjust the settings for single and multiple choice questions, and many more. The changes you make to the settings will immediately be displayed in the form preview next to the settings box.
91
 
92
+ With conditional fields option you can set to hide/show specific fields based on the selections your visitors make. You just choose the field you want to show or hide, then set the conditions based on which the field will appear or will be hidden. The plugin features a user-friendly interface, which makes it easy to create, style and customize the forms.
93
 
94
 
95
  **[Premium version adds](https://web-dorado.com/products/wordpress-form.html)**
117
 
118
  If the installation does not succeed, please contact us for help.
119
 
120
+ After the installation is finished, you can go ahead and start working on your contact forms. Navigate to **Form Maker &gt; Forms** page to build your very first form. Form Maker plugin provides a few sample forms, which you can quickly edit and publish.
121
 
122
  Using **Form Maker &gt; Forms** page, you can manage existing forms, perform Bulk Actions, such as Publish, Unpublish, Duplicate or Delete. Select the necessary form, choose the bulk action, then press Apply. Also, you can search for your form by writing its title in the top Search input.
123
 
124
  **Adding Fields**
125
+ To add a new field to your form, drag New Field button to the area where you wish to place the field. The field editor toolbox will be opened automatically. Click on the field set from which you are going to choose the field, for instance, User Info Fields. Press Name button from this field set to add a Name input to your contact form. Then click Add and the field will be placed to the area you selected initially.
126
 
127
  It is also possible to search among the fields when adding a new field to your form. Use Filter input at the top left corner of fields toolbox. For example, you can search &quot;phone&quot; and all Phone fields will be filtered.
128
 
149
 
150
  You can create web forms free of additional coding, with just a few clicks. The functionality of Form Maker is excellent for any kind of online questionnaires.
151
 
152
+ Form Maker can be used for creating multiple types of forms, including contact forms, evaluation form, application forms, quizzes/tests or survey forms, online order forms and etc. Form Maker includes various types of fields which can be modified and/or edited.
153
 
154
+ Whether you are a WordPress beginner or a web guru, Form Maker is the perfect choice. The dynamic web form builder tool comes with clean visual tools and options, and you do not need to have any web development skills to build a form.
155
 
156
  = How can I create a form with Form Maker? =
157
 
159
 
160
  Using **Form Maker > Forms** page, you can manage existing forms, perform **Bulk Actions,** such as **Publish, Unpublish, Duplicate** or **Delete.** Select the necessary form, choose the bulk action, then press **Apply.** Also, you can search for your form by writing its title in the top **Search** input.
161
 
162
+ Press **Add New** button from **Forms** page, and you will be redirected to **Form Editor** page. Make sure to write a **Title** for this contact form, then choose the **Theme** which sets the appearance of your form. In case you wish to display the contact form with the same style as your website theme, select **Inherit From Website Theme** option from **Theme** select box.
163
 
164
+ To add a new field with this application form creator, drag **New Field** button to the area where you wish to place the field. The field editor toolbox of Form Maker will be opened automatically. Click on the field set from which you are going to choose the form field, for instance, **User Info Fields.** Press **Name** button from this field set to add a Name input to your form. Then click **Add** and the field will be placed to the area of the form you selected initially.
165
 
166
+ It is also possible to search among the form builder fields when adding a new field to your form. Use **Filter** input at the top left corner of fields toolbox. For example, you can search "phone" and all Phone fields will be filtered.
167
 
168
  = Can I add a custom header with text and image above my form? =
169
 
170
+ This dynamic form builder lets you have a nice header section on your forms, which can contain additional content, as well as images with animations. Click on **Form Header** bar of your form to open its toolbox and provide a **Title.** This is the form heading, which will appear above your form. In addition, you can write a **Description** to appear right below the Title of your form. This comes handy, in case you need to write an introduction for your form.
171
 
172
  You can also have an image on your form header and set it to appear with an animation effect. Press **Add Image** button to upload and select a picture from **WordPress Media Library.** Then choose the animation effect using Image Animation option.
173
 
174
+ In case you don’t want the **Header Image** of your forms to appear on smartphones and tablets, mark **Hide Image on Mobile** option as checked.
175
 
176
+ Make sure to **Publish/Update** the form to save the change you made.
177
 
178
+ = Does Form Maker support conditional logic and how can I use it? =
179
 
180
  Yes, another fantastic feature of this custom form creator plugin is its **Conditional Fields.** This lets you **show** or **hide** fields of your form based on certain selections submitter makes.
181
 
183
 
184
  Go to **Form Options** of your form, then click **Conditional Fields** tab to start the setup. Press **Add Condition** button to configure the first condition of your form.
185
 
186
+ **Show/Hide** select box of this form builder plugin represents the action which will be completed, if all or any of the condition statements are fulfilled. Use the second drop-down menu to select the form builder field which will be shown or hidden.
187
 
188
  Click the little **Plus (+)** icon to add the statement of your form condition.
189
 
192
  *Show [Message] if [all] of the following match:*
193
  *[Inquiry type] is [Support request]*
194
 
195
+ Make sure to hit **Update** after setting up Conditional Fields on your Form Maker.
196
 
197
  = What styling options do the forms include? =
198
 
215
  * Other
216
  * Custom CSS
217
 
218
+ You can preview the design of each form theme under Preview block. In case you created forms with multiple pages, you can change its Pagination Type, setting it to Step, Percentage or None.
219
 
220
+ Custom CSS option in Themes of this offline form builder lets you write additional CSS code and customize your forms further. All CSS rules apply to this editor. Make sure to press Save after modifying the form theme.
221
 
222
  = Does Form Maker use auto-respondent feature? =
223
 
225
 
226
  This html5 form builder plugin lets you send submitted information to one or multiple email addresses. Furthermore, you can also send a confirmation email to the submitter and let them know you have received their application.
227
 
228
+ Enable Send E-mail from **Form Options &gt; Email Options** tab and start configuring mailing settings. Most options require the same configuration for Email to Administrator and Email to User on the forms. However, there are a few settings which are unique.
229
 
230
  **Email to Administrator**
231
 
235
 
236
  **Send to.** Use this setting to select the email field of your form, to which the submissions will be sent.
237
 
238
+ Important! In case you do not have an email input created from User Info Fields &gt; Email type on your form, the following error message will appear:
239
 
240
  &quot;There is no email field&quot;.
241
 
255
 
256
  Configuring Payment Options, you can use Form Maker as an order form generator and let users make payments through your form. Default payment gateway of Form Maker is **PayPal.** Select **PayPal** as **Payment Method** from Form **Options &gt; Payment Options** tab and configure corresponding options.
257
 
258
+ Also, you can easily integrate the forms builder plugin with Stripe using its [Stripe Integration add-on](https://web-dorado.com/products/wordpress-form/add-ons/stripe.html).
259
 
260
  **Payment Currency.** Choose the currency to be used for the payments made through your form. Note, that the selected currency symbol will only display on the front-end of the published form.
261
 
262
+ **Tax (%).** Specify the percentage of the tax for your payment form. It will be calculated from the total payment amount of your form, and will be added to the grand total.
263
 
264
+ **Checkout Mode.** Select the checkout mode for your form. Testmode will display PayPal Sandbox after submission, which allows you to run payment tests. When you are ready to receive payments, enable Production mode.
265
 
266
+ **Paypal email.** Provide the email address of a valid PayPal account. This account will be used as the recipient of payments through your form.
267
 
268
  = Where can I check the submissions of my forms? =
269
 
273
 
274
  **Export to CSV / Export to XML.** You are able to download all submissions of each form in **CSV** or **XML** format by clicking on these buttons.
275
 
276
+ **Show Filters.** Form Maker lets you filter form submissions by values provided by user, e.g. submitter’s email address, name and more. Press **Show Filters** button on form submissions, write the values you wish to search with, then press **Search.** Click **Reset** button to clear the filters.
277
 
278
  **Add/Remove Columns.** This button will help you customize the columns which display in submissions of the selected form. Click on the button and unmark the columns you wish to hide.
279
 
280
+ *Note: Adding/Removing columns does not delete columns from the submissions table of your forms. It just hides them until you activate them again.*
281
 
282
  **Block IPs / Unblock IPs.** In case you are receiving spam submissions from certain IP addresses, you can block these addresses. Mark all spam submissions as checked, choose **Block IPs** option from **Bulk Actions** and press **Apply.** You are able to unblock these IP addresses anytime.
283
 
293
  * **Post.** Select this option to redirect users to a specific post after they hit Submit. You will then be able to select the post from Post dropdown menu.
294
  * **Page.** You can also redirect users to a selected page. Choose this option and specify the destination using Page dropdown menu.
295
  * **Custom text.** Use this action in case you wish to display a &quot;Thank you&quot; message after users submit the form. The editor box accepts text, basic HTML, as well as values of form fields. Include them to the content by pressing on the top buttons indicating form fields.
296
+ * **URL.** Configure redirection from your forms to any page with this action after submission. Mark URL option, then provide the absolute path of the link to the input that appears.
297
 
298
  = What verification methods does Form Maker use? =
299
 
301
 
302
  = Can I use Form Maker as a registration form creator? =
303
 
304
+ You can register users on your website with the help of Form Maker [WordPress Registration add-on](https://web-dorado.com/products/wordpress-form/add-ons/registration.html). Install the add on and use it alongside the free version of Form Maker plugin.
305
 
306
  You are able to ask users to provide username, email address and password for their account. The registration of users is done upon completing the form created by this visual form builder plugin.
307
 
308
  = Is it possible to publish a form as a widget? =
309
 
310
+ You can publish your form not only using **Display Options** of the web form builder tool, but also as a widget. Go to **Appearance > Widgets** page to place your form on any widget area of your website theme.
311
 
312
  Search for **Form Maker widget** and drag it to the widget area where you wish to place your form. Specify a **Title** for the widget and choose the form you wish to publish. Press **Save** after making these changes.
313
 
314
  = Can the form submissions be shown to site visitors? =
315
 
316
+ **Premium version** of Form Maker plugin allows you to publish submissions on front-end of your website.
317
 
318
  This form creator plugin lets you select user roles which will be able to view the published submissions. This can be done from **Form Options > General Options** section. Also, in the same section, you are able to choose fields to hide from front-end submissions.
319
 
321
 
322
  **Select a Form.** Use this drop-down to choose the form, submissions of which you would like to publish.
323
 
324
+ **Select Date Range.** You can display form submissions from a specific date range. Use this option to select **From** and **To** dates.
325
 
326
  **Select fields.** Use this option to choose which columns to show on the form. Uncheck the options, which you need to hide on front-end submissions.
327
 
328
  **Export to / Show.** These two settings are responsible for showing the rest of the attributes of front-end submissions. You can enable/disable **CSV/XML** export buttons, **Statistics, Views, Conversion Rate** and other additional information.
329
 
330
+ After configuring all necessary options, press **Insert.** Publish your page with form submissions, and you will be able to view them on front-end.
331
+
332
+ = Can I let users choose between PayPal or offline payments when submitting the form? =
333
+
334
+ **Premium version** of this handy forms plugin has the features and functions to achieve this. You need to use **Conditional Fields** and **Payment Fields** of the plugin. Here are the necessary steps.
335
+
336
+ Firstly, add one **Single Choice** field from **Basic Fields** of Form Maker plugin. It should contain the following two options:
337
+
338
+ * Pay with PayPal
339
+ * Pay offline
340
+
341
+ Afterwards, add two sets of almost identical fields, one of them created with regular form fields, second - with **Payment fields.**
342
+
343
+ Then you can set conditions from **Form Options > Conditional Fields,** if the user chooses PayPal, payment fields will appear, otherwise, regular fields will.
344
+
345
+ The user will not be redirected to PayPal if they make their selections using regular form fields.
346
 
347
 
348
  == Changelog ==
349
 
350
+ = 1.12.20 =
351
+ * Added: New file types for file upload field.
352
+ * Improved: Editing empty mini labels.
353
+ * Fixed: Form Submissions CSV export.
354
+
355
  = 1.12.19 =
356
+ * Fixed: Form Submissions table view for long texts.
357
+ * Fixed: Displaying phone field value in email notification.
358
+ * Fixed: Bug on deleting a Page break.
359
 
360
  = 1.12.18 =
361
  * Changed: improved Form Submissions view: added tooltips for long labels of form fields.
536
  * Changed: New logo
537
 
538
  = 1.10.8 =
539
+ * Added: New form field type: Phone with flag
540
  * Fixed: Bug on captcha reset
541
 
542
  = 1.10.7 =
550
  * Fixed: Bug on matrix field
551
 
552
  = 1.10.5 =
553
+ * Fixed: JS conflict on contact form submission
554
 
555
  = 1.10.4 =
556
  * Fixed: Conflict with Yoast SEO plugin
607
  * Changed: Featured plugins page
608
 
609
  = 1.9.8 =
610
+ * Fixed: Unexpected behavior on pressing "Enter" key on back end form creator page
611
 
612
  = 1.9.7 =
613
  * Fixed: JS error on incorrect Google Maps API key
637
  * Added: New field type: Date Range
638
 
639
  = 1.8.41 =
640
+ * Fixed: Bug on conditional fields (for multiple contact forms on the same page)
641
 
642
  = 1.8.40 =
643
  * Changed: Style of required field asterisk
730
  * Changed: Matrix field display in email
731
 
732
  = 1.8.13 =
733
+ * Fixed: Style in form builder edit page
734
  * Fixed: Bug in PayPal options
735
 
736
  = 1.8.12 =
913
  * New: Arithmetic Captcha
914
 
915
  = 1.7.55 =
916
+ * New: Undo/Redo form
917
 
918
  = 1.7.54 =
919
  bug in conditional fields fixed
1015
  remove fancybox lightbox
1016
 
1017
  = 1.7.24 =
1018
+ display php function to publish contact form
1019
 
1020
  = 1.7.23 =
1021
  bug in Recaptcha fixed
1060
  bug fixed in required radio field
1061
 
1062
  = 1.7.7 =
1063
+ bug fixed in adding new contact form
1064
 
1065
  = 1.7.6 =
1066
  new email options, conditional fileds
1067
 
1068
  = 1.7.5 =
1069
+ conflict with Jetpack Contact Form module fixed
1070
 
1071
  = 1.7.4 =
1072
  bug fixed in form options
1079
 
1080
  = 1.7 =
1081
  Div structured, responsive form
1082
+ Editable html form layout
1083
  New themes
1084
 
1085
  = 1.6.6 =
1112
  - Recapthca form field
1113
  * Pagebreak of the [Wordpress Form](http://wordpress.org/plugins/form-maker/) Maker: This can be used to break the form into distinct pages.
1114
  * Section Break of the Form Maker: This option allows adding a section break to the form page.
1115
+ * For each form certain types of statistical data are available in the form builder tool:
1116
+ * Entries of a form: The number of submitted forms in the form builder tool.
1117
  * Views of a form: The number of times the form has been viewed.
1118
  * Conversion Rate of a form: The percentage of submitted forms to the overall number of views.
1119
+
1120
  = 1.0.0 =
1121
  Initial version