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

Version Description

  • Improved: Uninstall Form Maker interface and texts.
  • Fixed: "New Form Field" button drag and drop issue in Firefox and Safari.
  • Fixed: Do not show hidden amounts in total.
  • Fixed: Failed to import form submissions when there is a single quote in the form title.
  • Fixed: Can not submit contact form when there is a condition on stripe field and stripe is not visible.
  • Added: GDPR compliance required checkbox on the front end.
  • Added: Warn user if the email address does not belong to the site domain.
Download this release

Release Info

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

Code changes from version 1.12.35 to 1.12.36

admin/controllers/Manage_fm.php CHANGED
@@ -724,6 +724,8 @@ function after_submit() {
724
  $mail_verification_post_id = (int) $this->model->get_mail_verification_post_id();
725
 
726
  $privacy_arr = array(
 
 
727
  'save_ip' => WDW_FM_Library(self::PLUGIN)->get('save_ip', 1),
728
  'save_user_id' => WDW_FM_Library(self::PLUGIN)->get('save_user_id', 1),
729
  );
@@ -1199,8 +1201,8 @@ function after_submit() {
1199
  'display_on' => 'home,post,page',
1200
  'posts_include' => '',
1201
  'pages_include' => '',
1202
- 'display_on_categories' => '',
1203
- 'current_categories' => '',
1204
  'show_for_admin' => 0,
1205
  ));
1206
  $this->model->insert_data_to_db('formmaker_views', array(
724
  $mail_verification_post_id = (int) $this->model->get_mail_verification_post_id();
725
 
726
  $privacy_arr = array(
727
+ 'gdpr_checkbox' => WDW_FM_Library(self::PLUGIN)->get('gdpr_checkbox', 0),
728
+ 'gdpr_checkbox_text' => WDW_FM_Library(self::PLUGIN)->get('gdpr_checkbox_text', __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix)),
729
  'save_ip' => WDW_FM_Library(self::PLUGIN)->get('save_ip', 1),
730
  'save_user_id' => WDW_FM_Library(self::PLUGIN)->get('save_user_id', 1),
731
  );
1201
  'display_on' => 'home,post,page',
1202
  'posts_include' => '',
1203
  'pages_include' => '',
1204
+ 'display_on_categories' => 'select_all_categories',
1205
+ 'current_categories' => 'select_all_categories',
1206
  'show_for_admin' => 0,
1207
  ));
1208
  $this->model->insert_data_to_db('formmaker_views', array(
admin/controllers/elementorWidget.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class FMElementor extends \Elementor\Widget_Base {
4
+ /**
5
+ * PLUGIN = 2 points to Contact Form Maker
6
+ */
7
+ const PLUGIN = 1;
8
+
9
+ /**
10
+ * Get widget name.
11
+ *
12
+ * @return string Widget name.
13
+ */
14
+ public function get_name() {
15
+ return 'fm-elementor';
16
+ }
17
+
18
+ /**
19
+ * Get widget title.
20
+ *
21
+ * @return string Widget title.
22
+ */
23
+ public function get_title() {
24
+ return __('Form', WDFMInstance(self::PLUGIN)->prefix);
25
+ }
26
+
27
+ /**
28
+ * Get widget icon.
29
+ *
30
+ * @return string Widget icon.
31
+ */
32
+ public function get_icon() {
33
+ return 'fa fa-id-card';
34
+ }
35
+
36
+ /**
37
+ * Get widget categories.
38
+ *
39
+ * @return array Widget categories.
40
+ */
41
+ public function get_categories() {
42
+ return [ 'tenweb-widgets' ];
43
+ }
44
+
45
+ /**
46
+ * Register widget controls.
47
+ */
48
+ protected function _register_controls() {
49
+ $this->start_controls_section(
50
+ 'general',
51
+ [
52
+ 'label' => __('Form', WDFMInstance(self::PLUGIN)->prefix),
53
+ ]
54
+ );
55
+
56
+ $this->add_control(
57
+ 'form_id',
58
+ [
59
+ 'label_block' => TRUE,
60
+ 'show_label' => FALSE,
61
+ 'description' => __('Select the form to display.', WDFMInstance(self::PLUGIN)->prefix) . ' <a target="_balnk" href="' . add_query_arg(array( 'page' => 'manage_fm' ), admin_url('admin.php')) . '">' . __('Edit form', WDFMInstance(self::PLUGIN)->prefix) . '</a>',
62
+ 'type' => \Elementor\Controls_Manager::SELECT,
63
+ 'default' => 0,
64
+ 'options' => WDW_FM_Library(self::PLUGIN)->get_forms(),
65
+ ]
66
+ );
67
+
68
+ $this->end_controls_section();
69
+ }
70
+
71
+ /**
72
+ * Render widget output on the frontend.
73
+ */
74
+ protected function render() {
75
+ $settings = $this->get_settings_for_display();
76
+
77
+ echo WDFMInstance(self::PLUGIN)->fm_shortcode(array('id' => $settings['form_id']));
78
+ }
79
+ }
80
+
81
+ \Elementor\Plugin::instance()->widgets_manager->register_widget_type(new FMElementor());
admin/models/Manage_fm.php CHANGED
@@ -50,11 +50,15 @@ class FMModelManage_fm extends FMAdminModel {
50
  if ( $id != 0 ) {
51
  $row = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'formmaker WHERE id="%d"', $id));
52
  if ( $row ) {
 
 
53
  $row->save_ip = 1;
54
  $row->save_user_id = 1;
55
  if ( isset($row->privacy) ) {
56
  if ( $row->privacy ) {
57
  $privacy = json_decode($row->privacy);
 
 
58
  $row->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
59
  $row->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
60
  }
@@ -115,6 +119,8 @@ class FMModelManage_fm extends FMAdminModel {
115
  $row->header_image_url = '';
116
  $row->header_image_animation = '';
117
  $row->header_hide_image = '';
 
 
118
  $row->save_ip = 1;
119
  $row->save_user_id = 1;
120
  }
@@ -133,11 +139,15 @@ class FMModelManage_fm extends FMAdminModel {
133
  if ( $id != 0 ) {
134
  $row = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'formmaker_backup WHERE backup_id="%d"', $id));
135
  if ( $row ) {
 
 
136
  $row->save_ip = 1;
137
  $row->save_user_id = 1;
138
  if ( isset($row->privacy) ) {
139
  if ( $row->privacy ) {
140
  $privacy = json_decode($row->privacy);
 
 
141
  $row->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
142
  $row->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
143
  }
@@ -218,6 +228,8 @@ class FMModelManage_fm extends FMAdminModel {
218
  $row->mail_verify = 0;
219
  $row->mail_verify_expiretime = 0;
220
  $row->mail_verification_post_id = 0;
 
 
221
  $row->save_ip = 1;
222
  $row->save_user_id = 1;
223
  }
@@ -3515,8 +3527,8 @@ class FMModelManage_fm extends FMAdminModel {
3515
  $row->display_on = 'home,post,page';
3516
  $row->posts_include = '';
3517
  $row->pages_include = '';
3518
- $row->display_on_categories = '';
3519
- $row->current_categories = '';
3520
  $row->show_for_admin = 0;
3521
  }
3522
 
50
  if ( $id != 0 ) {
51
  $row = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'formmaker WHERE id="%d"', $id));
52
  if ( $row ) {
53
+ $row->gdpr_checkbox = 0;
54
+ $row->gdpr_checkbox_text = __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
55
  $row->save_ip = 1;
56
  $row->save_user_id = 1;
57
  if ( isset($row->privacy) ) {
58
  if ( $row->privacy ) {
59
  $privacy = json_decode($row->privacy);
60
+ $row->gdpr_checkbox = isset($privacy->gdpr_checkbox) ? $privacy->gdpr_checkbox : 0;
61
+ $row->gdpr_checkbox_text = isset($privacy->gdpr_checkbox_text) ? $privacy->gdpr_checkbox_text : __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
62
  $row->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
63
  $row->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
64
  }
119
  $row->header_image_url = '';
120
  $row->header_image_animation = '';
121
  $row->header_hide_image = '';
122
+ $row->gdpr_checkbox = 0;
123
+ $row->gdpr_checkbox_text = __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
124
  $row->save_ip = 1;
125
  $row->save_user_id = 1;
126
  }
139
  if ( $id != 0 ) {
140
  $row = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'formmaker_backup WHERE backup_id="%d"', $id));
141
  if ( $row ) {
142
+ $row->gdpr_checkbox = 0;
143
+ $row->gdpr_checkbox_text = __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
144
  $row->save_ip = 1;
145
  $row->save_user_id = 1;
146
  if ( isset($row->privacy) ) {
147
  if ( $row->privacy ) {
148
  $privacy = json_decode($row->privacy);
149
+ $row->gdpr_checkbox = isset($privacy->gdpr_checkbox) ? $privacy->gdpr_checkbox : 0;
150
+ $row->gdpr_checkbox_text = isset($privacy->gdpr_checkbox_text) ? $privacy->gdpr_checkbox_text : __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
151
  $row->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
152
  $row->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
153
  }
228
  $row->mail_verify = 0;
229
  $row->mail_verify_expiretime = 0;
230
  $row->mail_verification_post_id = 0;
231
+ $row->gdpr_checkbox = 0;
232
+ $row->gdpr_checkbox_text = __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
233
  $row->save_ip = 1;
234
  $row->save_user_id = 1;
235
  }
3527
  $row->display_on = 'home,post,page';
3528
  $row->posts_include = '';
3529
  $row->pages_include = '';
3530
+ $row->display_on_categories = 'select_all_categories';
3531
+ $row->current_categories = 'select_all_categories';
3532
  $row->show_for_admin = 0;
3533
  }
3534
 
admin/views/Manage_fm.php CHANGED
@@ -695,6 +695,8 @@ class FMViewManage_fm extends FMAdminView {
695
 
696
  wp_enqueue_script('thickbox');
697
  wp_enqueue_script('jquery-ui-widget');
 
 
698
  wp_enqueue_media();
699
  wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-form-options');
700
  wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-codemirror');
@@ -966,9 +968,9 @@ class FMViewManage_fm extends FMAdminView {
966
  <div class="wd-box-content">
967
  <div class="wd-group">
968
  <label class="wd-label"><?php _e('Send E-mail', WDFMInstance(self::PLUGIN)->prefix); ?></label>
969
- <input type="radio" name="sendemail" <?php echo $row->sendemail == 1 ? 'checked="checked"' : '' ?> id="fm_sendemail-1" class="wd-radio" value="1" onchange="fm_toggle_email_options(true)" />
970
  <label class="wd-label-radio" for="fm_sendemail-1"><?php _e('Yes', WDFMInstance(self::PLUGIN)->prefix); ?></label>
971
- <input type="radio" name="sendemail" <?php echo $row->sendemail == 0 ? 'checked="checked"' : '' ?> id="fm_sendemail-0" class="wd-radio" value="0" onchange="fm_toggle_email_options(false)" />
972
  <label class="wd-label-radio" for="fm_sendemail-0"><?php _e('No', WDFMInstance(self::PLUGIN)->prefix); ?></label>
973
  <p class="description"><?php _e('Enable this setting to send submitted information to administrators and/or the submitter.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
974
  <p class="description fm_email_options"><?php _e('In case you cannot find the submission email in your Inbox, make sure to check the Spam folder as well.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
@@ -991,6 +993,45 @@ class FMViewManage_fm extends FMAdminView {
991
  <span class="dashicons dashicons-list-view" data-id="mail"></span>
992
  <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.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
993
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
994
  <div class="wd-group wd-has-placeholder">
995
  <label class="wd-label" for="mail_subject"><?php _e('Subject', WDFMInstance(self::PLUGIN)->prefix); ?></label>
996
  <input type="text" id="mail_subject" name="mail_subject" value="<?php echo !empty($row->mail_subject) ? $row->mail_subject : '{formtitle}'; ?>" />
@@ -1028,42 +1069,8 @@ class FMViewManage_fm extends FMAdminView {
1028
  <span><?php _e('Advanced', WDFMInstance(self::PLUGIN)->prefix); ?></span>
1029
  </h2>
1030
  <div class="inside">
1031
- <div class="wd-group">
1032
- <label class="wd-label"><?php _e('Email From', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1033
- <?php
1034
- $is_other = TRUE;
1035
- for ( $i = 0; $i < $fields_count - 1; $i++ ) {
1036
- ?>
1037
- <input class="wd-radio" type="radio" name="from_mail" id="from_mail<?php echo $i; ?>" value="<?php echo(!is_numeric($fields[$i]) ? substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) : $fields[$i]); ?>" <?php echo((!is_numeric($fields[$i]) ? substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) : $fields[$i]) == $row->from_mail ? 'checked="checked"' : ''); ?> onclick="wdhide('mail_from_other_wrap'); fm_clear_input_value('mail_from_other');" />
1038
- <label class="wd-label-radio" for="from_mail<?php echo $i; ?>"><?php echo substr($fields[$i + 1], 0, strpos($fields[$i + 1], '*:*w_field_label*:*')); ?></label>
1039
- <?php
1040
- if ( !is_numeric($fields[$i]) ) {
1041
- if ( substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) == $row->from_mail ) {
1042
- $is_other = FALSE;
1043
- }
1044
- }
1045
- else {
1046
- if ( $fields[$i] == $row->from_mail ) {
1047
- $is_other = FALSE;
1048
- }
1049
- }
1050
- }
1051
- ?>
1052
- <input style="<?php echo ($fields_count == 1) ? 'display:none;' : ''; ?>" class="wd-radio" type="radio" id="other" name="from_mail" value="other" <?php echo ($is_other) ? 'checked="checked"' : ''; ?> onclick="wdshow('mail_from_other_wrap')" />
1053
- <label style="<?php echo ($fields_count == 1) ? 'display:none;' : ''; ?>" class="wd-label-radio" for="other"><?php _e('Other', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1054
- <p style="display: <?php echo ($is_other) ? 'block;' : 'none;'; ?>" id="mail_from_other_wrap">
1055
- <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" name="mail_from_other" id="mail_from_other" value="<?php echo ($is_other) ? $row->from_mail : ''; ?>" />
1056
- </p>
1057
- <p class="description"><?php _e('Specify the email address from which the administrator will receive the email.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1058
- </div>
1059
- <div class="wd-group wd-has-placeholder">
1060
- <label class="wd-label" for="from_name"><?php _e('From Name', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1061
- <input type="text" name="from_name" value="<?php echo $row->from_name; ?>" id="from_name" />
1062
- <span class="dashicons dashicons-list-view" data-id="from_name"></span>
1063
- <p class="description"><?php _e('Set the name or search for a form field which is shown as the sender’s name in submission or confirmation emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1064
- </div>
1065
- <div class="wd-group">
1066
- <label class="wd-label" for="from_name"><?php _e('Reply to (if different from "Email From")', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1067
  <?php
1068
  $is_other = TRUE;
1069
  for ( $i = 0; $i < $fields_count - 1; $i++ ) {
@@ -1156,6 +1163,22 @@ class FMViewManage_fm extends FMAdminView {
1156
  ?>
1157
  <p class="description"><?php _e('Use this setting to select the email field of your form, to which the submissions will be sent.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1158
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1159
  <div class="wd-group wd-has-placeholder">
1160
  <label class="wd-label" for="mail_subject_user"><?php _e('Subject', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1161
  <input type="text" name="mail_subject_user" value="<?php echo !empty($row->mail_subject_user) ? $row->mail_subject_user : '{formtitle}' ?>" id="mail_subject_user" class="mail_subject_user" />
@@ -1193,17 +1216,6 @@ class FMViewManage_fm extends FMAdminView {
1193
  <span><?php _e('Advanced', WDFMInstance(self::PLUGIN)->prefix); ?></span>
1194
  </h2>
1195
  <div class="inside">
1196
- <div class="wd-group">
1197
- <label class="wd-label" for="mail_from_user"><?php _e('Email From', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1198
- <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" id="mail_from_user" name="mail_from_user" value="<?php echo $row->mail_from_user; ?>" />
1199
- <p class="description"><?php _e('Specify the email address from which the submitter will receive the email.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1200
- </div>
1201
- <div class="wd-group wd-has-placeholder">
1202
- <label class="wd-label" for="mail_from_name_user"><?php _e('From Name', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1203
- <input type="text" name="mail_from_name_user" value="<?php echo $row->mail_from_name_user; ?>" id="mail_from_name_user" />
1204
- <span class="dashicons dashicons-list-view" data-id="mail_from_name_user"></span>
1205
- <p class="description"><?php _e('Set the name or search for a form field which is shown as the sender’s name in submission or confirmation emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1206
- </div>
1207
  <div class="wd-group">
1208
  <label class="wd-label" for="reply_to_user"><?php _e('Reply to (if different from "Email From")', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1209
  <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" name="reply_to_user" value="<?php echo $row->reply_to_user; ?>" id="reply_to_user" />
@@ -1847,6 +1859,19 @@ class FMViewManage_fm extends FMAdminView {
1847
  <div class="wd-table-col-70">
1848
  <div class="wd-box-section">
1849
  <div class="wd-box-content">
 
 
 
 
 
 
 
 
 
 
 
 
 
1850
  <div class="wd-group">
1851
  <label class="wd-label"><?php _e('Save User IP Address to Database', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1852
  <input type="radio" name="save_ip" <?php echo $row->save_ip == 1 ? 'checked="checked"' : '' ?> id="fm_go-save_ip-1" class="wd-radio" value="1">
@@ -2331,7 +2356,7 @@ class FMViewManage_fm extends FMAdminView {
2331
  $categories = $params['categories'];
2332
  $selected_categories = $params['selected_categories'];
2333
  $current_categories_array = $params['current_categories_array'];
2334
- $auto_check = ( in_array('select_all_categories', $selected_categories) && count($categories) == count($selected_categories) - 1 ) ? 'checked="checked"' : '';
2335
  $m = 0;
2336
  echo '<li>
2337
  <br/>
@@ -2340,7 +2365,7 @@ class FMViewManage_fm extends FMAdminView {
2340
  </li>';
2341
  foreach ( $categories as $cat_key => $category ) {
2342
  $m++;
2343
- $checked = ( in_array($cat_key, $selected_categories) ) ? 'checked="checked"' : '';
2344
  echo '<li>
2345
  <input id="cat'.$m.'" type="checkbox" name="display_on_categories[]" value="'.$cat_key.'" '.$checked.'/>
2346
  <label for="cat'.$m.'">'.$category.'</label>
695
 
696
  wp_enqueue_script('thickbox');
697
  wp_enqueue_script('jquery-ui-widget');
698
+ wp_enqueue_style('jquery-ui-tooltip');
699
+ wp_enqueue_script('jquery-ui-tooltip');
700
  wp_enqueue_media();
701
  wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-form-options');
702
  wp_enqueue_script(WDFMInstance(self::PLUGIN)->handle_prefix . '-codemirror');
968
  <div class="wd-box-content">
969
  <div class="wd-group">
970
  <label class="wd-label"><?php _e('Send E-mail', WDFMInstance(self::PLUGIN)->prefix); ?></label>
971
+ <input type="radio" name="sendemail" <?php echo $row->sendemail == 1 ? 'checked="checked"' : '' ?> id="fm_sendemail-1" class="wd-radio" value="1" onchange="fm_toggle_options('.fm_email_options', true)" />
972
  <label class="wd-label-radio" for="fm_sendemail-1"><?php _e('Yes', WDFMInstance(self::PLUGIN)->prefix); ?></label>
973
+ <input type="radio" name="sendemail" <?php echo $row->sendemail == 0 ? 'checked="checked"' : '' ?> id="fm_sendemail-0" class="wd-radio" value="0" onchange="fm_toggle_options('.fm_email_options', false)" />
974
  <label class="wd-label-radio" for="fm_sendemail-0"><?php _e('No', WDFMInstance(self::PLUGIN)->prefix); ?></label>
975
  <p class="description"><?php _e('Enable this setting to send submitted information to administrators and/or the submitter.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
976
  <p class="description fm_email_options"><?php _e('In case you cannot find the submission email in your Inbox, make sure to check the Spam folder as well.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
993
  <span class="dashicons dashicons-list-view" data-id="mail"></span>
994
  <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.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
995
  </div>
996
+ <div class="wd-group">
997
+ <label class="wd-label"><?php _e('Email From', WDFMInstance(self::PLUGIN)->prefix); ?></label>
998
+ <?php
999
+ $is_other = TRUE;
1000
+ for ( $i = 0; $i < $fields_count - 1; $i++ ) {
1001
+ ?>
1002
+ <input class="wd-radio" type="radio" name="from_mail" id="from_mail<?php echo $i; ?>" value="<?php echo(!is_numeric($fields[$i]) ? substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) : $fields[$i]); ?>" <?php echo((!is_numeric($fields[$i]) ? substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) : $fields[$i]) == $row->from_mail ? 'checked="checked"' : ''); ?> onclick="wdhide('mail_from_other_wrap'); fm_clear_input_value('mail_from_other');" />
1003
+ <label class="wd-label-radio" for="from_mail<?php echo $i; ?>"><?php echo substr($fields[$i + 1], 0, strpos($fields[$i + 1], '*:*w_field_label*:*')); ?></label>
1004
+ <?php
1005
+ if ( !is_numeric($fields[$i]) ) {
1006
+ if ( substr($fields[$i], strrpos($fields[$i], '*:*new_field*:*') + 15, strlen($fields[$i])) == $row->from_mail ) {
1007
+ $is_other = FALSE;
1008
+ }
1009
+ }
1010
+ else {
1011
+ if ( $fields[$i] == $row->from_mail ) {
1012
+ $is_other = FALSE;
1013
+ }
1014
+ }
1015
+ }
1016
+ ?>
1017
+ <input style="<?php echo ($fields_count == 1) ? 'display:none;' : ''; ?>" class="wd-radio" type="radio" id="other" name="from_mail" value="other" <?php echo ($is_other) ? 'checked="checked"' : ''; ?> onclick="wdshow('mail_from_other_wrap')" />
1018
+ <label style="<?php echo ($fields_count == 1) ? 'display:none;' : ''; ?>" class="wd-label-radio" for="other"><?php _e('Other', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1019
+ <p style="display: <?php echo ($is_other) ? 'block;' : 'none;'; ?>" id="mail_from_other_wrap">
1020
+ <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" name="mail_from_other" id="mail_from_other" value="<?php echo ($is_other) ? $row->from_mail : ''; ?>" />
1021
+ </p>
1022
+ <p class="description"><?php _e('Specify the email address from which the administrator will receive the email.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1023
+ <p class="description"><?php _e('We recommend you to use an email address belonging to your website domain.', WDFMInstance(self::PLUGIN)->prefix); ?> <span class="dashicons dashicons-editor-help wd-info" data-id="fm-email-from-info"></span></p>
1024
+ <div id="fm-email-from-info" class="fm-hide">
1025
+ <p><?php _e('If sender email address is not hosted on the same domain as your website, some hosting providers may not send the emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1026
+ <p><?php _e('In addition, relaying mail servers may consider the emails as phishing.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1027
+ </div>
1028
+ </div>
1029
+ <div class="wd-group wd-has-placeholder">
1030
+ <label class="wd-label" for="from_name"><?php _e('From Name', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1031
+ <input type="text" name="from_name" value="<?php echo $row->from_name; ?>" id="from_name" />
1032
+ <span class="dashicons dashicons-list-view" data-id="from_name"></span>
1033
+ <p class="description"><?php _e('Set the name or search for a form field which is shown as the sender’s name in submission or confirmation emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1034
+ </div>
1035
  <div class="wd-group wd-has-placeholder">
1036
  <label class="wd-label" for="mail_subject"><?php _e('Subject', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1037
  <input type="text" id="mail_subject" name="mail_subject" value="<?php echo !empty($row->mail_subject) ? $row->mail_subject : '{formtitle}'; ?>" />
1069
  <span><?php _e('Advanced', WDFMInstance(self::PLUGIN)->prefix); ?></span>
1070
  </h2>
1071
  <div class="inside">
1072
+ <div class="wd-group">
1073
+ <label class="wd-label"><?php _e('Reply to (if different from "Email From")', WDFMInstance(self::PLUGIN)->prefix); ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1074
  <?php
1075
  $is_other = TRUE;
1076
  for ( $i = 0; $i < $fields_count - 1; $i++ ) {
1163
  ?>
1164
  <p class="description"><?php _e('Use this setting to select the email field of your form, to which the submissions will be sent.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1165
  </div>
1166
+ <div class="wd-group">
1167
+ <label class="wd-label" for="mail_from_user"><?php _e('Email From', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1168
+ <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" id="mail_from_user" name="mail_from_user" value="<?php echo $row->mail_from_user; ?>" />
1169
+ <p class="description"><?php _e('Specify the email address from which the submitter will receive the email.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1170
+ <p class="description"><?php _e('We recommend you to use an email address belonging to your website domain.', WDFMInstance(self::PLUGIN)->prefix); ?> <span class="dashicons dashicons-editor-help wd-info" data-id="fm-user-email-from-info"></span></p>
1171
+ <div id="fm-user-email-from-info" class="fm-hide">
1172
+ <p><?php _e('If sender email address is not hosted on the same domain as your website, some hosting providers may not send the emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1173
+ <p><?php _e('In addition, relaying mail servers may consider the emails as phishing.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1174
+ </div>
1175
+ </div>
1176
+ <div class="wd-group wd-has-placeholder">
1177
+ <label class="wd-label" for="mail_from_name_user"><?php _e('From Name', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1178
+ <input type="text" name="mail_from_name_user" value="<?php echo $row->mail_from_name_user; ?>" id="mail_from_name_user" />
1179
+ <span class="dashicons dashicons-list-view" data-id="mail_from_name_user"></span>
1180
+ <p class="description"><?php _e('Set the name or search for a form field which is shown as the sender’s name in submission or confirmation emails.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1181
+ </div>
1182
  <div class="wd-group wd-has-placeholder">
1183
  <label class="wd-label" for="mail_subject_user"><?php _e('Subject', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1184
  <input type="text" name="mail_subject_user" value="<?php echo !empty($row->mail_subject_user) ? $row->mail_subject_user : '{formtitle}' ?>" id="mail_subject_user" class="mail_subject_user" />
1216
  <span><?php _e('Advanced', WDFMInstance(self::PLUGIN)->prefix); ?></span>
1217
  </h2>
1218
  <div class="inside">
 
 
 
 
 
 
 
 
 
 
 
1219
  <div class="wd-group">
1220
  <label class="wd-label" for="reply_to_user"><?php _e('Reply to (if different from "Email From")', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1221
  <input class="fm-validate" data-type="email" data-callback="fm_validate_email" data-callback-parameter="" data-tab-id="emailTab" data-content-id="emailTab_fieldset" type="text" name="reply_to_user" value="<?php echo $row->reply_to_user; ?>" id="reply_to_user" />
1859
  <div class="wd-table-col-70">
1860
  <div class="wd-box-section">
1861
  <div class="wd-box-content">
1862
+ <div class="wd-group">
1863
+ <label class="wd-label"><?php _e('Enable GDPR compliance checkbox.', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1864
+ <input type="radio" name="gdpr_checkbox" <?php echo $row->gdpr_checkbox == 1 ? 'checked="checked"' : '' ?> id="fm_go-gdpr_checkbox-1" class="wd-radio" value="1" onchange="fm_toggle_options('#div_gdpr_checkbox_text', true)">
1865
+ <label class="wd-label-radio" for="fm_go-gdpr_checkbox-1"><?php _e('Yes', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1866
+ <input type="radio" name="gdpr_checkbox" <?php echo $row->gdpr_checkbox == 0 ? 'checked="checked"' : '' ?> id="fm_go-gdpr_checkbox-0" class="wd-radio" value="0" onchange="fm_toggle_options('#div_gdpr_checkbox_text', false)">
1867
+ <label class="wd-label-radio" for="fm_go-gdpr_checkbox-0"><?php _e('No', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1868
+ <p class="description"><?php _e('Use this setting to enable GDPR compliance checkbox on form.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1869
+ </div>
1870
+ <div id="div_gdpr_checkbox_text" class="wd-group">
1871
+ <label class="wd-label" for="fm_go-gdpr_checkbox_text"><?php _e('GDPR compliance text.', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1872
+ <input type="text" id="fm_go-gdpr_checkbox_text" name="gdpr_checkbox_text" value="<?php echo $row->gdpr_checkbox_text; ?>">
1873
+ <p class="description"><?php _e('This text will be used for GDPR compliance checkbox. Place {{privacy_policy}} placeholder to place "Privacy Policy page" link.', WDFMInstance(self::PLUGIN)->prefix); ?></p>
1874
+ </div>
1875
  <div class="wd-group">
1876
  <label class="wd-label"><?php _e('Save User IP Address to Database', WDFMInstance(self::PLUGIN)->prefix); ?></label>
1877
  <input type="radio" name="save_ip" <?php echo $row->save_ip == 1 ? 'checked="checked"' : '' ?> id="fm_go-save_ip-1" class="wd-radio" value="1">
2356
  $categories = $params['categories'];
2357
  $selected_categories = $params['selected_categories'];
2358
  $current_categories_array = $params['current_categories_array'];
2359
+ $auto_check = ( in_array('select_all_categories', $selected_categories) ) ? 'checked="checked"' : '';
2360
  $m = 0;
2361
  echo '<li>
2362
  <br/>
2365
  </li>';
2366
  foreach ( $categories as $cat_key => $category ) {
2367
  $m++;
2368
+ $checked = ( $auto_check || in_array($cat_key, $selected_categories) ) ? 'checked="checked"' : '';
2369
  echo '<li>
2370
  <input id="cat'.$m.'" type="checkbox" name="display_on_categories[]" value="'.$cat_key.'" '.$checked.'/>
2371
  <label for="cat'.$m.'">'.$category.'</label>
admin/views/Uninstall_fm.php CHANGED
@@ -23,38 +23,37 @@ class FMViewUninstall_fm extends FMAdminView {
23
  $prefix = $wpdb->prefix;
24
  $addons = $params['addons'];
25
  ?>
26
- <form method="post" action="admin.php?page=uninstall<?php echo WDFMInstance(self::PLUGIN)->menu_postfix; ?>" style="width:95%;">
27
  <?php wp_nonce_field(WDFMInstance(self::PLUGIN)->nonce, WDFMInstance(self::PLUGIN)->nonce); ?>
28
  <div class="wrap">
29
  <div class="uninstall-banner">
30
  <div class="uninstall_icon">
31
  </div>
32
- <div class="fm-logo-title">Uninstall <?php echo WDFMInstance(self::PLUGIN)->nicename; ?></div>
33
  </div>
34
  <br />
35
  <div class="goodbye-text">
36
- Before uninstalling the plugin, please Contact our
37
- <a href="https://web-dorado.com/support/contact-us.html" target='_blank'>support team</a>. We'll do our best to help you out with your issue. We value each and every user and value what’s right for our users in everything we do.<br>
38
- However, if anyway you have made a decision to uninstall the plugin, please take a minute to
39
- <a href="https://web-dorado.com/support/contact-us.html" target='_blank'>Contact us</a> and tell what you didn't like for our plugins further improvement and development. Thank you !!!
40
- </div>
41
  <div class="goodbye-text" style="color: red;">
42
- Note, that uninstalling <?php echo WDFMInstance(self::PLUGIN)->nicename; ?> will remove all forms, submissions and other data on the plugin.<br />Please make sure you don't have any important information before you proceed.
 
 
43
  </div>
44
- <p>
45
- Deactivating <?php echo WDFMInstance(self::PLUGIN)->nicename; ?> plugin does not remove any data that may have been created, such as the Forms and the Submissions. To completely remove this plugin, you can uninstall it here.
46
- </p>
47
  <p style="color: red;">
48
- <strong>WARNING:</strong>
49
- Once uninstalled, this cannot be undone. You should use a Database Backup plugin of WordPress to back up all the data first.
50
  </p>
51
  <p style="color: red">
52
- <strong>The following WordPress Options/Tables will be DELETED:</strong>
53
  </p>
54
  <table class="widefat">
55
  <thead>
56
  <tr>
57
- <th>Database Tables</th>
58
  </tr>
59
  </thead>
60
  <tr>
@@ -95,7 +94,7 @@ class FMViewUninstall_fm extends FMAdminView {
95
  <input type="checkbox" name="Form Maker" id="check_yes" value="yes" />&nbsp;<label for="check_yes">Yes</label>
96
  </p>
97
  <p style="text-align: center;">
98
- <input type="submit" value="UNINSTALL" class="button-primary" onclick="if (check_yes.checked) { if (confirm('You are About to Uninstall <?php echo WDFMInstance(self::PLUGIN)->nicename; ?> from WordPress.\nThis Action Is Not Reversible.')) { fm_set_input_value('task', 'uninstall'); } else { return false; } } else { return false; }" />
99
  </p>
100
  </div>
101
  <input id="task" name="task" type="hidden" value="" />
23
  $prefix = $wpdb->prefix;
24
  $addons = $params['addons'];
25
  ?>
26
+ <form method="post" action="admin.php?page=uninstall<?php echo WDFMInstance(self::PLUGIN)->menu_postfix; ?>" style="width:95%;" class="fm-uninstall-form">
27
  <?php wp_nonce_field(WDFMInstance(self::PLUGIN)->nonce, WDFMInstance(self::PLUGIN)->nonce); ?>
28
  <div class="wrap">
29
  <div class="uninstall-banner">
30
  <div class="uninstall_icon">
31
  </div>
32
+ <div class="fm-logo-title"><?php _e('Uninstall', WDFMInstance(self::PLUGIN)->prefix); ?> <?php echo WDFMInstance(self::PLUGIN)->nicename; ?></div>
33
  </div>
34
  <br />
35
  <div class="goodbye-text">
36
+ <?php echo sprintf( __('Before uninstalling %s, please contact %s. We\'ll do our best to assist you with any issue. We value every user and what\'s right for our users in everything we do.', WDFMInstance(self::PLUGIN)->prefix), WDFMInstance(self::PLUGIN)->nicename, '<a href="https://web-dorado.com/support/contact-us.html" target="_blank">' . __('Web-Dorado Customer Care', WDFMInstance(self::PLUGIN)->prefix) . '</a>'); ?>
37
+ <br>
38
+ <?php echo sprintf( __('However, if you have made a decision to uninstall %s in any case, please take a minute to contact %s and let us know what you\'d like to see improved in the plugin. Thank you!', WDFMInstance(self::PLUGIN)->prefix), WDFMInstance(self::PLUGIN)->nicename, '<a href="https://web-dorado.com/support/contact-us.html" target="_blank">' . __('our team', WDFMInstance(self::PLUGIN)->prefix) . '</a>'); ?>
39
+ </div>
 
40
  <div class="goodbye-text" style="color: red;">
41
+ <?php echo sprintf( __('Note, that uninstalling %s will remove all forms, submissions and other data on the plugin.', WDFMInstance(self::PLUGIN)->prefix), WDFMInstance(self::PLUGIN)->nicename); ?>
42
+ <br>
43
+ <?php _e('Please make sure you don\'t have any important information before you proceed.', WDFMInstance(self::PLUGIN)->prefix); ?>
44
  </div>
45
+ <p><?php echo sprintf( __('Deactivating %s plugin does not remove any data that may have been created, such as the Forms and the Submissions. To completely remove this plugin, you can uninstall it here.', WDFMInstance(self::PLUGIN)->prefix), WDFMInstance(self::PLUGIN)->nicename); ?></p>
 
 
46
  <p style="color: red;">
47
+ <strong><?php _e('WARNING:', WDFMInstance(self::PLUGIN)->prefix); ?></strong>
48
+ <?php _e('Once uninstalled, this cannot be undone. You should use a Database Backup plugin of WordPress to back up all the data first.', WDFMInstance(self::PLUGIN)->prefix); ?>
49
  </p>
50
  <p style="color: red">
51
+ <strong><?php _e('The following WordPress Options/Tables will be DELETED:', WDFMInstance(self::PLUGIN)->prefix); ?></strong>
52
  </p>
53
  <table class="widefat">
54
  <thead>
55
  <tr>
56
+ <th><?php _e('Database Tables', WDFMInstance(self::PLUGIN)->prefix); ?></th>
57
  </tr>
58
  </thead>
59
  <tr>
94
  <input type="checkbox" name="Form Maker" id="check_yes" value="yes" />&nbsp;<label for="check_yes">Yes</label>
95
  </p>
96
  <p style="text-align: center;">
97
+ <input type="submit" value="UNINSTALL" class="button-primary fm-uninstall-btn" onclick="if (check_yes.checked) { if (confirm('Are you sure you wish to uninstall <?php echo WDFMInstance(self::PLUGIN)->nicename; ?> from your website?\nAll forms, submissions and other data in the plugin will be removed.')) { fm_set_input_value('task', 'uninstall'); } else { return false; } } else { return false; }" />
98
  </p>
99
  </div>
100
  <input id="task" name="task" type="hidden" value="" />
css/form_maker_frontend.css CHANGED
@@ -1034,4 +1034,7 @@ div[type="type_slider"] .label {
1034
  .fm-form .form-group {
1035
  margin: 0;
1036
  padding: 0;
 
 
 
1037
  }
1034
  .fm-form .form-group {
1035
  margin: 0;
1036
  padding: 0;
1037
+ }
1038
+ .fm-form-container .fm-form .fm-gdpr-checkbox {
1039
+ display: initial !important;
1040
  }
css/form_maker_tables.css CHANGED
@@ -4272,4 +4272,69 @@ li.pp_selected > span {
4272
 
4273
  .no-wrap {
4274
  white-space: nowrap;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4275
  }
4272
 
4273
  .no-wrap {
4274
  white-space: nowrap;
4275
+ }
4276
+
4277
+ .ui-tooltip {
4278
+ max-width: 330px;
4279
+ position: absolute;
4280
+ white-space: pre-line;
4281
+ padding: 0 10px !important;
4282
+ line-height: 0.5 !important;
4283
+ z-index: 9999;
4284
+ }
4285
+
4286
+ .ui-tooltip .ui-tooltip-content {
4287
+ font-weight: normal;
4288
+ }
4289
+
4290
+ .ui-tooltip, .tooltip-arrow:after {
4291
+ background: #666;
4292
+ }
4293
+
4294
+ .ui-tooltip {
4295
+ color: #fff;
4296
+ border-radius: 10px;
4297
+ font: bold 14px "Helvetica Neue", Sans-Serif;
4298
+ box-shadow: 0 0 7px #666;
4299
+ }
4300
+
4301
+ .ui-tooltip p {
4302
+ margin: 0;
4303
+ }
4304
+
4305
+ .tooltip-arrow {
4306
+ width: 70px;
4307
+ height: 16px;
4308
+ overflow: hidden;
4309
+ position: absolute;
4310
+ left: 50%;
4311
+ margin-left: -35px;
4312
+ bottom: -16px;
4313
+ }
4314
+
4315
+ .tooltip-arrow.top {
4316
+ top: -16px;
4317
+ bottom: auto;
4318
+ }
4319
+
4320
+ .tooltip-arrow.left {
4321
+ left: 20%;
4322
+ }
4323
+
4324
+ .tooltip-arrow:after {
4325
+ content: "";
4326
+ position: absolute;
4327
+ left: 20px;
4328
+ top: -20px;
4329
+ width: 25px;
4330
+ height: 25px;
4331
+ box-shadow: 6px 5px 9px -9px #666;
4332
+ -webkit-transform: rotate(45deg);
4333
+ -ms-transform: rotate(45deg);
4334
+ transform: rotate(45deg);
4335
+ }
4336
+
4337
+ .tooltip-arrow.top:after {
4338
+ bottom: -20px;
4339
+ top: auto;
4340
  }
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.35
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
@@ -95,8 +95,8 @@ final class WDFM {
95
  $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
96
  $this->front_urls = $this->get_front_urls();
97
  $this->main_file = plugin_basename(__FILE__);
98
- $this->plugin_version = '1.12.35';
99
- $this->db_version = '2.12.35';
100
  $this->menu_postfix = ($this->is_free == 2 ? '_fmc' : '_fm');
101
  $this->plugin_postfix = ($this->is_free == 2 ? '_fmc' : '');
102
  $this->menu_slug = 'manage' . $this->menu_postfix;
@@ -217,6 +217,32 @@ final class WDFM {
217
  add_filter( 'wp_privacy_personal_data_exporters', array($this, 'register_privacy_personal_data_exporter') );
218
  // Personal data erase.
219
  add_filter( 'wp_privacy_personal_data_erasers', array($this, 'register_privacy_personal_data_eraser') );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
221
 
222
  function add_privacy_policy_content() {
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.36
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
95
  $this->plugin_url = plugins_url(plugin_basename(dirname(__FILE__)));
96
  $this->front_urls = $this->get_front_urls();
97
  $this->main_file = plugin_basename(__FILE__);
98
+ $this->plugin_version = '1.12.36';
99
+ $this->db_version = '2.12.36';
100
  $this->menu_postfix = ($this->is_free == 2 ? '_fmc' : '_fm');
101
  $this->plugin_postfix = ($this->is_free == 2 ? '_fmc' : '');
102
  $this->menu_slug = 'manage' . $this->menu_postfix;
217
  add_filter( 'wp_privacy_personal_data_exporters', array($this, 'register_privacy_personal_data_exporter') );
218
  // Personal data erase.
219
  add_filter( 'wp_privacy_personal_data_erasers', array($this, 'register_privacy_personal_data_eraser') );
220
+
221
+ // Register widget for Elementor builder.
222
+ add_action('elementor/widgets/widgets_registered', array($this, 'register_elementor_widget'));
223
+ // Register 10Web category for Elementor widget if 10Web builder doesn't installed.
224
+ add_action('elementor/elements/categories_registered', array($this, 'register_widget_category'), 1, 1);
225
+ }
226
+
227
+ /**
228
+ * Register widget for Elementor builder.
229
+ */
230
+ public function register_elementor_widget() {
231
+ if ( defined('ELEMENTOR_PATH') && class_exists('Elementor\Widget_Base') ) {
232
+ require_once ($this->plugin_dir . '/admin/controllers/elementorWidget.php');
233
+ }
234
+ }
235
+
236
+ /**
237
+ * Register 10Web category for Elementor widget if 10Web builder doesn't installed.
238
+ *
239
+ * @param $elements_manager
240
+ */
241
+ public function register_widget_category( $elements_manager ) {
242
+ $elements_manager->add_category('tenweb-widgets', [
243
+ 'title' => __('10WEB', 'tenweb-builder'),
244
+ 'icon' => 'fa fa-plug',
245
+ ]);
246
  }
247
 
248
  function add_privacy_policy_content() {
framework/WDW_FM_Library.php CHANGED
@@ -927,8 +927,8 @@ class WDW_FM_Library {
927
  $row->display_on = 'home,post,page';
928
  $row->posts_include = '';
929
  $row->pages_include = '';
930
- $row->display_on_categories = '';
931
- $row->current_categories = '';
932
  $row->show_for_admin = 0;
933
  }
934
 
@@ -1686,6 +1686,7 @@ class WDW_FM_Library {
1686
  else {
1687
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1688
  }
 
1689
  });';
1690
  }
1691
  if ( $change ) {
@@ -1697,6 +1698,7 @@ class WDW_FM_Library {
1697
  else {
1698
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1699
  }
 
1700
  });';
1701
  }
1702
  if ( $blur ) {
@@ -1705,7 +1707,9 @@ class WDW_FM_Library {
1705
  if(' . $if . ')
1706
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display . ';
1707
  else
1708
- jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . '; });';
 
 
1709
  }
1710
  if ( $click ) {
1711
  $condition_js .= '
@@ -1716,6 +1720,7 @@ class WDW_FM_Library {
1716
  else {
1717
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1718
  }
 
1719
  });';
1720
  }
1721
  }
@@ -5241,4 +5246,55 @@ class WDW_FM_Library {
5241
 
5242
  return FALSE;
5243
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5244
  }
927
  $row->display_on = 'home,post,page';
928
  $row->posts_include = '';
929
  $row->pages_include = '';
930
+ $row->display_on_categories = 'select_all_categories';
931
+ $row->current_categories = 'select_all_categories';
932
  $row->show_for_admin = 0;
933
  }
934
 
1686
  else {
1687
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1688
  }
1689
+ set_total_value(' . $form_id . ');
1690
  });';
1691
  }
1692
  if ( $change ) {
1698
  else {
1699
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1700
  }
1701
+ set_total_value(' . $form_id . ');
1702
  });';
1703
  }
1704
  if ( $blur ) {
1707
  if(' . $if . ')
1708
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display . ';
1709
  else
1710
+ jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1711
+ set_total_value(' . $form_id . ');
1712
+ });';
1713
  }
1714
  if ( $click ) {
1715
  $condition_js .= '
1720
  else {
1721
  jQuery("#form' . $form_id . ' div[wdid=' . $field_label[$k] . ']").' . $display_none . ';
1722
  }
1723
+ set_total_value(' . $form_id . ');
1724
  });';
1725
  }
1726
  }
5246
 
5247
  return FALSE;
5248
  }
5249
+
5250
+ // TODO. This function should be replaced with WP functionality in another version. At the moment it is not.
5251
+ /**
5252
+ * Get privacy_policy_url
5253
+ *
5254
+ * @return string $url
5255
+ */
5256
+ public static function get_privacy_policy_url() {
5257
+ $permalink = '';
5258
+ $post_id = get_option( 'wp_page_for_privacy_policy' );
5259
+ if ( $post_id ) {
5260
+ $post = get_post( $post_id, OBJECT );
5261
+ if ( $post->post_status == 'publish' ) {
5262
+ $permalink = get_permalink( $post_id );
5263
+ }
5264
+ }
5265
+ return $permalink;
5266
+ }
5267
+
5268
+ public static function unique_number() {
5269
+ $use_random_number = ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) ? TRUE : FALSE;
5270
+ if ($use_random_number) {
5271
+ return mt_rand();
5272
+ }
5273
+ else {
5274
+ global $fm;
5275
+ $unique = $fm;
5276
+ $fm++;
5277
+ return $unique;
5278
+ }
5279
+ }
5280
+
5281
+ /**
5282
+ * Get forms.
5283
+ *
5284
+ * @return array
5285
+ */
5286
+ public static function get_forms() {
5287
+ global $wpdb;
5288
+ $query = "SELECT `id`, `title` FROM `" . $wpdb->prefix . "formmaker`" . (!WDFMInstance(self::PLUGIN)->is_free ? '' : ' WHERE id' . (WDFMInstance(self::PLUGIN)->is_free == 1 ? ' NOT ' : ' ') . 'IN (' . (get_option('contact_form_forms', '') != '' ? get_option('contact_form_forms') : 0) . ') ORDER BY `title`');
5289
+
5290
+ $rows = $wpdb->get_results($query);
5291
+
5292
+ $forms = array();
5293
+ $forms[0] = __('Select a form', WDFMInstance(self::PLUGIN)->prefix);
5294
+ foreach ( $rows as $row ) {
5295
+ $forms[$row->id] = $row->title;
5296
+ }
5297
+
5298
+ return $forms;
5299
+ }
5300
  }
frontend/controllers/form_maker.php CHANGED
@@ -157,7 +157,7 @@ class FMControllerForm_maker {
157
  }
158
  }
159
  foreach ( $post_cats as $single_cat ) {
160
- if ( in_array($single_cat, $categories_display) ) {
161
  $display_on_this = TRUE;
162
  }
163
  }
157
  }
158
  }
159
  foreach ( $post_cats as $single_cat ) {
160
+ if ( in_array('select_all_categories', $categories_display) || in_array($single_cat, $categories_display) ) {
161
  $display_on_this = TRUE;
162
  }
163
  }
frontend/models/form_maker.php CHANGED
@@ -1340,11 +1340,15 @@ class FMModelForm_maker {
1340
  $current_page_url = WDW_FM_Library(self::PLUGIN)->get_current_page_url();
1341
  $form = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "formmaker WHERE id= %d", $id ) );
1342
 
 
 
1343
  $form->save_ip = 1;
1344
  $form->save_user_id = 1;
1345
  if ( $form && isset($form->privacy) ) {
1346
  if ( $form->privacy ) {
1347
  $privacy = json_decode($form->privacy);
 
 
1348
  $form->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
1349
  $form->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
1350
  }
@@ -1601,6 +1605,9 @@ class FMModelForm_maker {
1601
  // for dropbox & google drive integration addons
1602
  $check_both = 0;
1603
  if ( $form->save_uploads == 0 ) {
 
 
 
1604
  if ( defined( 'WD_FM_DBOX_INT' ) && is_plugin_active( constant( 'WD_FM_DBOX_INT' ) ) ) {
1605
  $enable = $wpdb->get_var( "SELECT enable FROM " . $wpdb->prefix . "formmaker_dbox_int WHERE form_id=" . $form->id );
1606
  if ( $enable == 1 ) {
@@ -1612,10 +1619,10 @@ class FMModelForm_maker {
1612
  } else {
1613
  $dbox_folder_name = preg_replace( '/[^A-Z|a-z|0-9|\-|\\|\/]/', '', $form->title );
1614
  $dlink_dbox = '<a href="' . add_query_arg( array(
1615
- 'action' => 'WD_FM_DBOX_INT',
1616
  'addon_task' => 'upload_dbox_file',
1617
  'form_id' => $form->id,
1618
- ), admin_url( 'admin-ajax.php' ) ) . '&dbox_file_name=' . $fileName . '&dbox_folder_name=/' . $dbox_folder_name . '" >' . $fileName . '</a>';
1619
  $value .= $dlink_dbox;
1620
  }
1621
  $files[ 'tmp_name' ][ $file_key ] = $fileTemp;
1340
  $current_page_url = WDW_FM_Library(self::PLUGIN)->get_current_page_url();
1341
  $form = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "formmaker WHERE id= %d", $id ) );
1342
 
1343
+ $form->gdpr_checkbox = 0;
1344
+ $form->gdpr_checkbox_text = __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
1345
  $form->save_ip = 1;
1346
  $form->save_user_id = 1;
1347
  if ( $form && isset($form->privacy) ) {
1348
  if ( $form->privacy ) {
1349
  $privacy = json_decode($form->privacy);
1350
+ $form->gdpr_checkbox = isset($privacy->gdpr_checkbox) ? $privacy->gdpr_checkbox : 0;
1351
+ $form->gdpr_checkbox_text = isset($privacy->gdpr_checkbox_text) ? $privacy->gdpr_checkbox_text : __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
1352
  $form->save_ip = isset($privacy->save_ip) ? $privacy->save_ip : 1;
1353
  $form->save_user_id = isset($privacy->save_user_id) ? $privacy->save_user_id : 1;
1354
  }
1605
  // for dropbox & google drive integration addons
1606
  $check_both = 0;
1607
  if ( $form->save_uploads == 0 ) {
1608
+ if( !function_exists('is_plugin_active') ) {
1609
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1610
+ }
1611
  if ( defined( 'WD_FM_DBOX_INT' ) && is_plugin_active( constant( 'WD_FM_DBOX_INT' ) ) ) {
1612
  $enable = $wpdb->get_var( "SELECT enable FROM " . $wpdb->prefix . "formmaker_dbox_int WHERE form_id=" . $form->id );
1613
  if ( $enable == 1 ) {
1619
  } else {
1620
  $dbox_folder_name = preg_replace( '/[^A-Z|a-z|0-9|\-|\\|\/]/', '', $form->title );
1621
  $dlink_dbox = '<a href="' . add_query_arg( array(
1622
+ 'action' => 'WD_FM_DBOX_INT_init',
1623
  'addon_task' => 'upload_dbox_file',
1624
  'form_id' => $form->id,
1625
+ ), admin_url( 'admin-ajax.php' ) ) . '&dbox_file_name=' . $fileName . '&dbox_folder_name=/' . $dbox_folder_name . '" target="_blank">' . $fileName . '</a>';
1626
  $value .= $dlink_dbox;
1627
  }
1628
  $files[ 'tmp_name' ][ $file_key ] = $fileTemp;
frontend/views/form_maker.php CHANGED
@@ -210,6 +210,10 @@ class FMViewForm_maker {
210
  $form = $row->form_front;
211
  }
212
 
 
 
 
 
213
  // Remove unnecessary classes.
214
  $form = str_replace(array('ui-sortable-handle', 'ui-sortable-disabled', 'ui-sortable'), '', $form);
215
  foreach ( $id1s as $id1s_key => $id1 ) {
@@ -1519,19 +1523,33 @@ class FMViewForm_maker {
1519
 
1520
  $submit_onclick = 'onclick="fm_submit_form(\'' . $form_id . '\');"';
1521
  $reset_onclick = 'onclick="fm_reset_form(' . $form_id . ');"';
1522
- $disabled_button = '';
 
1523
 
1524
  if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1525
  $submit_onclick = '';
1526
  $reset_onclick = '';
1527
- $disabled_button = 'disabled="disabled"';
 
 
 
 
 
 
 
 
 
 
 
 
 
1528
  }
1529
 
1530
- $html = '<button ' . $disabled_button . ' type="button" class="button-submit" ' . $submit_onclick . ' ' . $param['attributes'] . '>' . $param['w_submit_title'] . '</button>';
1531
- $html .= '<button ' . $disabled_button . ' type="button" class="button-reset ' . $param['w_act'] . '" ' . $reset_onclick . ' ' . $param['attributes'] . '>' . $param['w_reset_title'] . '</button>';
1532
 
1533
  // Generate field.
1534
- $rep = $this->wdform_field($type, $param, $row, $html, FALSE);
1535
 
1536
  break;
1537
  }
210
  $form = $row->form_front;
211
  }
212
 
213
+ $privacy = json_decode($row->privacy);
214
+ $row->gdpr_checkbox = isset($privacy->gdpr_checkbox) ? $privacy->gdpr_checkbox : 0;
215
+ $row->gdpr_checkbox_text = isset($privacy->gdpr_checkbox_text) ? $privacy->gdpr_checkbox_text : __('I consent collecting this data and processing it according to {{privacy_policy}} of this website.', WDFMInstance(self::PLUGIN)->prefix);
216
+
217
  // Remove unnecessary classes.
218
  $form = str_replace(array('ui-sortable-handle', 'ui-sortable-disabled', 'ui-sortable'), '', $form);
219
  foreach ( $id1s as $id1s_key => $id1 ) {
1523
 
1524
  $submit_onclick = 'onclick="fm_submit_form(\'' . $form_id . '\');"';
1525
  $reset_onclick = 'onclick="fm_reset_form(' . $form_id . ');"';
1526
+ $disabled_submit = '';
1527
+ $disabled_reset = '';
1528
 
1529
  if ( WDW_FM_Library(self::PLUGIN)->elementor_is_active() ) {
1530
  $submit_onclick = '';
1531
  $reset_onclick = '';
1532
+ $disabled_submit = 'disabled="disabled"';
1533
+ $disabled_reset = 'disabled="disabled"';
1534
+ }
1535
+
1536
+ $rep = '';
1537
+ if ($row->gdpr_checkbox && $row->gdpr_checkbox_text) {
1538
+ $privacy_policy_link = ' <a href="' . WDW_FM_Library(self::PLUGIN)->get_privacy_policy_url() . '" target="_blank">' . __('Privacy Policy', BWG()->prefix) . '</a>';
1539
+ $row->gdpr_checkbox_text = str_replace('{{privacy_policy}}', $privacy_policy_link, $row->gdpr_checkbox_text);
1540
+ $gdpr_checkbox_html = '<label for="fm_privacy_policy' . $form_id . '" class="wdform-label">
1541
+ <input id="fm_privacy_policy' . $form_id . '" name="fm_privacy_policy' . $form_id . '" class="wd-flex-row fm-gdpr-checkbox" onclick="' . ($disabled_submit ? '' : 'fm_privacy_policy_check(this)') . '" type="checkbox" value="1">'
1542
+ . $row->gdpr_checkbox_text .
1543
+ '</label>';
1544
+ $rep = $this->wdform_field('type_gdpr_compliance_checkbox', $param, $row, $gdpr_checkbox_html, FALSE);
1545
+ $disabled_submit = 'disabled="disabled"';
1546
  }
1547
 
1548
+ $html = '<button ' . $disabled_submit . ' type="button" class="button-submit" ' . $submit_onclick . ' ' . $param['attributes'] . '>' . $param['w_submit_title'] . '</button>';
1549
+ $html .= '<button ' . $disabled_reset . ' type="button" class="button-reset ' . $param['w_act'] . '" ' . $reset_onclick . ' ' . $param['attributes'] . '>' . $param['w_reset_title'] . '</button>';
1550
 
1551
  // Generate field.
1552
+ $rep .= $this->wdform_field($type, $param, $row, $html, FALSE);
1553
 
1554
  break;
1555
  }
js/add_field.js CHANGED
@@ -2200,6 +2200,8 @@ function popup_ready() {
2200
  function close_window() {
2201
  if (need_enable) {
2202
  popup_ready();
 
 
2203
  }
2204
  need_enable = true;
2205
  document.getElementById('edit_table').innerHTML = "";
2200
  function close_window() {
2201
  if (need_enable) {
2202
  popup_ready();
2203
+ /* In Firfox and Safari click action is working during the drag and drop also */
2204
+ jQuery(".add-new-button").attr("onclick","popup_ready(); Enable(); return false;");
2205
  }
2206
  need_enable = true;
2207
  document.getElementById('edit_table').innerHTML = "";
js/form_maker_admin.js CHANGED
@@ -28,6 +28,56 @@ jQuery(document).ready(function () {
28
  fm_placeholders_popup(jQuery(this).data("id"));
29
  });
30
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  });
32
 
33
  function wd_insert_placeholder(id, placeholder) {
@@ -1040,4 +1090,10 @@ function getAllUrlParams(url) {
1040
  }
1041
  }
1042
  return obj;
 
 
 
 
 
 
1043
  }
28
  fm_placeholders_popup(jQuery(this).data("id"));
29
  });
30
  });
31
+
32
+ fm_disabled_uninstall_btn();
33
+ jQuery('.fm-uninstall-form #check_yes').on("click", function () {
34
+ fm_disabled_uninstall_btn();
35
+ });
36
+
37
+ /* Add tooltip to elements with "wd-info" class. */
38
+ if ( typeof jQuery(document).tooltip != "undefined" ) {
39
+ jQuery(document).tooltip({
40
+ show: null,
41
+ items: ".wd-info",
42
+ content: function () {
43
+ var element = jQuery(this);
44
+ if (element.is(".wd-info")) {
45
+ var html = jQuery('#' + jQuery(this).data("id")).html();
46
+ return html;
47
+ }
48
+ },
49
+ open: function (event, ui) {
50
+ if (typeof(event.originalEvent) === 'undefined') {
51
+ return false;
52
+ }
53
+ var $id = jQuery(ui.tooltip).attr('id');
54
+ /* close any lingering tooltips. */
55
+ jQuery('div.ui-tooltip').not('#' + $id).remove();
56
+ },
57
+ close: function (event, ui) {
58
+ ui.tooltip.hover(function () {
59
+ jQuery(this).stop(true).fadeTo(400, 1);
60
+ },
61
+ function () {
62
+ jQuery(this).fadeOut('400', function () {
63
+ jQuery(this).remove();
64
+ });
65
+ });
66
+ },
67
+ position: {
68
+ my: "center top+30",
69
+ at: "center top",
70
+ using: function (position, feedback) {
71
+ jQuery(this).css(position);
72
+ jQuery("<div>")
73
+ .addClass("tooltip-arrow")
74
+ .addClass(feedback.vertical)
75
+ .addClass(feedback.horizontal)
76
+ .appendTo(this);
77
+ }
78
+ }
79
+ });
80
+ }
81
  });
82
 
83
  function wd_insert_placeholder(id, placeholder) {
1090
  }
1091
  }
1092
  return obj;
1093
+ }
1094
+ function fm_disabled_uninstall_btn() {
1095
+ jQuery('.fm-uninstall-form .fm-uninstall-btn').prop('disabled', true);
1096
+ if( jQuery(".fm-uninstall-form #check_yes").is(':checked')) {
1097
+ jQuery('.fm-uninstall-form .fm-uninstall-btn').prop('disabled', false);
1098
+ }
1099
  }
js/form_maker_form_options.js CHANGED
@@ -22,7 +22,8 @@
22
  jQuery(document).on('change','input[name="all_stats_fields"]',function() {
23
  jQuery('.stats_filed_label').prop("checked" , this.checked);
24
  });
25
- fm_toggle_email_options(jQuery('input[name=sendemail]:checked').val() == '1' ? true : false);
 
26
 
27
  // Bind filter action on entering search key and when the user cancel the input.
28
  jQuery(".placeholders-filter").on("keyup input", function() { filter_placeholders(this); });
@@ -323,11 +324,11 @@ function codemirror_for_javascript() {
323
  }
324
  }
325
 
326
- function fm_toggle_email_options(show) {
327
  if (show) {
328
- jQuery('.fm_email_options').show();
329
  }
330
  else {
331
- jQuery('.fm_email_options').hide();
332
  }
333
  }
22
  jQuery(document).on('change','input[name="all_stats_fields"]',function() {
23
  jQuery('.stats_filed_label').prop("checked" , this.checked);
24
  });
25
+ fm_toggle_options('.fm_email_options', jQuery('input[name=sendemail]:checked').val() == '1' ? true : false);
26
+ fm_toggle_options('#div_gdpr_checkbox_text', jQuery('input[name=gdpr_checkbox]:checked').val() == '1' ? true : false);
27
 
28
  // Bind filter action on entering search key and when the user cancel the input.
29
  jQuery(".placeholders-filter").on("keyup input", function() { filter_placeholders(this); });
324
  }
325
  }
326
 
327
+ function fm_toggle_options(selector, show) {
328
  if (show) {
329
+ jQuery(selector).show();
330
  }
331
  else {
332
+ jQuery(selector).hide();
333
  }
334
  }
js/form_maker_manage.js CHANGED
@@ -53,9 +53,10 @@ function sortable_columns() {
53
  if (fm_check_something_really_important()) return false;
54
  nextID = jQuery("#add_field").next(".wdform_row").attr("wdid"); //find next row id for position
55
  jQuery("#add_field").parent().attr("id", "cur_column"); // add id cur_column to this column
56
-
57
  popup_ready();
58
  Enable();
 
 
59
  return false;
60
  }
61
  remove_empty_columns();
53
  if (fm_check_something_really_important()) return false;
54
  nextID = jQuery("#add_field").next(".wdform_row").attr("wdid"); //find next row id for position
55
  jQuery("#add_field").parent().attr("id", "cur_column"); // add id cur_column to this column
 
56
  popup_ready();
57
  Enable();
58
+ /* In Firfox and Safari click action is working during the drag and drop also */
59
+ jQuery(".add-new-button").removeAttr("onclick");
60
  return false;
61
  }
62
  remove_empty_columns();
js/main_div_front_end.js CHANGED
@@ -37,69 +37,84 @@ function set_total_value(form_id) {
37
  div_paypal_tax.html('');
38
  n = parseInt(jQuery('#counter'+form_id).val());
39
  jQuery("#form" +form_id+ " div[type='type_paypal_checkbox'], #form" +form_id+ " div[type='type_paypal_radio']").each(function() {
40
- id = jQuery(this).parent().attr('wdid');
41
- paypal_checkbox_qty = ( jQuery('#wdform_'+id+"_element_quantity"+form_id).val() ) ? jQuery('#wdform_'+id+"_element_quantity"+form_id).val() : 0;
42
- jQuery(this).find('input:checked').each(
43
- function() {
44
- label= jQuery("label[for='"+jQuery(this).attr('id')+"']").html();
45
- span_value = FormCurrency + jQuery(this).val()+(jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? ' x ' + paypal_checkbox_qty : '');
46
- total =total + jQuery(this).val() * parseInt((jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? paypal_checkbox_qty : 1));
47
- div_paypal_products.html(div_paypal_products.html()+"<div>"+label+ ' - '+ span_value+"</div>");
48
- }
49
- );
 
 
 
50
  });
51
  jQuery("#form" +form_id+ " div[type='type_paypal_shipping']").each(function() {
52
- id = jQuery(this).parent().attr('wdid');
53
- paypal_shipping_qty = ( jQuery('#wdform_'+id+"_element_quantity"+form_id).val() ) ? jQuery('#wdform_'+id+"_element_quantity"+form_id).val() : 0;
54
- jQuery(this).find('input:checked').each(
55
- function() {
56
- label= jQuery("label[for='"+jQuery(this).attr('id')+"']").html();
57
- span_value = FormCurrency + jQuery(this).val()+(jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? ' x '+ paypal_shipping_qty : '');
58
- total_shipping =total_shipping + jQuery(this).val() * parseInt((jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? paypal_shipping_qty : 1));
59
- div_paypal_products.html(div_paypal_products.html()+"<div>"+label+ ' - '+ span_value+"</div>");
60
- }
61
- );
 
 
 
62
  });
63
  jQuery("#form" +form_id+ " div[type='type_paypal_select']").each(function() {
64
- id = jQuery(this).parent().attr('wdid');
65
- paypal_select_qty = ( jQuery('#wdform_'+id+"_element_quantity"+form_id).val() ) ? jQuery('#wdform_'+id+"_element_quantity"+form_id).val() : 0;
66
- if(jQuery(this).find('select').val()!='') {
67
- label = jQuery(this).find('select option:selected').html();
68
- span_value = FormCurrency + jQuery(this).find('select').val()+(jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? ' x ' + paypal_select_qty : '');
69
- total =total + jQuery(this).find('select').val() * parseInt((jQuery('#wdform_'+id+"_element_quantity"+form_id).length!=0 ? paypal_select_qty : 1));
70
- div_paypal_products.html(div_paypal_products.html()+"<div>"+label+ ' - '+ span_value+"</div>");
 
 
 
71
  }
72
  });
73
  jQuery("#form" +form_id+ " div[type='type_paypal_price']").each(function() {
74
- id = jQuery(this).parent().attr('wdid');
75
- label = jQuery(this).find('.wdform-label').html();
76
- cents = '00';
77
- dollars = '0';
78
- if (jQuery('#wdform_' + id + "_element_dollars" + form_id).val() != '') {
79
- dollars = jQuery('#wdform_' + id + "_element_dollars" + form_id).val();
80
- }
81
- if (jQuery('#wdform_' + id + "_element_cents" + form_id).val() != '') {
82
- if (jQuery('#wdform_' + id + "_element_cents" + form_id).val().length == 1) {
83
- cents = '0' + jQuery('#wdform_' + id + "_element_cents" + form_id).val();
84
  }
85
- else {
86
- cents = jQuery('#wdform_' + id + "_element_cents" + form_id).val();
 
 
 
 
 
 
 
 
87
  }
88
- span_value = FormCurrency + dollars + '.' + cents;
89
- total = total + parseFloat(dollars + '.' + cents);
90
- div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
91
  }
92
  });
93
  jQuery("#form" +form_id+ " div[type='type_paypal_price_new']").each(function() {
94
- id = jQuery(this).parent().attr('wdid');
95
- label = jQuery(this).find('.wdform-label').html();
96
- dollars = '0';
97
- if (jQuery('#wdform_' + id + "_element" + form_id).val() != '') {
98
- dollars = jQuery('#wdform_' + id + "_element" + form_id).val();
99
- }
100
- span_value = FormCurrency + dollars;
101
- total = total + parseFloat(dollars);
102
- div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
 
 
 
103
  });
104
  var FormPaypalTax = eval("FormPaypalTax_" + form_id);
105
  if(FormPaypalTax != 0) {
@@ -1692,7 +1707,7 @@ function fm_submit_form(form_id) {
1692
 
1693
  if (window['checkStripe' + form_id] == 1) {
1694
  var jq_mainForm = jQuery("form[id='form"+form_id+"']");
1695
- if (jq_mainForm.find(".wdfm_stripe_elem").first().parent().parents(".wdform_row").css('display') != 'none') {
1696
  wdfm_call_stripe(true);
1697
  }
1698
  else {
@@ -1723,6 +1738,11 @@ function fm_reset_form(form_id) {
1723
  if ( typeof window["before_reset" + form_id] == 'function' ) {
1724
  window["before_reset" + form_id]();
1725
  }
 
 
 
 
 
1726
  jQuery.each(window['labels_and_ids'+form_id], function (index, elem) {
1727
  switch(elem) {
1728
  case "type_text":
@@ -2061,7 +2081,7 @@ function fm_check(id, form_id, all_pages) {
2061
  if (window['checkStripe' + form_id] == 1) {
2062
  var jq_mainForm = jQuery("form[id='form" + form_id + "']");
2063
  if ('none' != jq_mainForm.find(".wdfm_stripe_elem").first().closest('.wdform-page-and-images').css('display')) {
2064
- if (jq_mainForm.find(".wdfm_stripe_elem").first().parent().parents(".wdform_row").css('display') != 'none') {
2065
  if (wdfm_call_stripe(false) == false) {
2066
  return false;
2067
  }
@@ -2147,3 +2167,14 @@ function wd_change_state_input(id, form_id) {
2147
  }
2148
  }
2149
  }
 
 
 
 
 
 
 
 
 
 
 
37
  div_paypal_tax.html('');
38
  n = parseInt(jQuery('#counter'+form_id).val());
39
  jQuery("#form" +form_id+ " div[type='type_paypal_checkbox'], #form" +form_id+ " div[type='type_paypal_radio']").each(function() {
40
+ var parent_div = jQuery(this).parent();
41
+ if ('none' != parent_div.css('display')) {
42
+ var id = parent_div.attr('wdid');
43
+ paypal_checkbox_qty = (jQuery('#wdform_' + id + "_element_quantity" + form_id).val()) ? jQuery('#wdform_' + id + "_element_quantity" + form_id).val() : 0;
44
+ jQuery(this).find('input:checked').each(
45
+ function () {
46
+ label = jQuery("label[for='" + jQuery(this).attr('id') + "']").html();
47
+ span_value = FormCurrency + jQuery(this).val() + (jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? ' x ' + paypal_checkbox_qty : '');
48
+ total = total + jQuery(this).val() * parseInt((jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? paypal_checkbox_qty : 1));
49
+ div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
50
+ }
51
+ );
52
+ }
53
  });
54
  jQuery("#form" +form_id+ " div[type='type_paypal_shipping']").each(function() {
55
+ var parent_div = jQuery(this).parent();
56
+ if ('none' != parent_div.css('display')) {
57
+ var id = parent_div.attr('wdid');
58
+ paypal_shipping_qty = (jQuery('#wdform_' + id + "_element_quantity" + form_id).val()) ? jQuery('#wdform_' + id + "_element_quantity" + form_id).val() : 0;
59
+ jQuery(this).find('input:checked').each(
60
+ function () {
61
+ label = jQuery("label[for='" + jQuery(this).attr('id') + "']").html();
62
+ span_value = FormCurrency + jQuery(this).val() + (jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? ' x ' + paypal_shipping_qty : '');
63
+ total_shipping = total_shipping + jQuery(this).val() * parseInt((jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? paypal_shipping_qty : 1));
64
+ div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
65
+ }
66
+ );
67
+ }
68
  });
69
  jQuery("#form" +form_id+ " div[type='type_paypal_select']").each(function() {
70
+ var parent_div = jQuery(this).parent();
71
+ if ('none' != parent_div.css('display')) {
72
+ var id = parent_div.attr('wdid');
73
+ paypal_select_qty = (jQuery('#wdform_' + id + "_element_quantity" + form_id).val()) ? jQuery('#wdform_' + id + "_element_quantity" + form_id).val() : 0;
74
+ if (jQuery(this).find('select').val() != '') {
75
+ label = jQuery(this).find('select option:selected').html();
76
+ span_value = FormCurrency + jQuery(this).find('select').val() + (jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? ' x ' + paypal_select_qty : '');
77
+ total = total + jQuery(this).find('select').val() * parseInt((jQuery('#wdform_' + id + "_element_quantity" + form_id).length != 0 ? paypal_select_qty : 1));
78
+ div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
79
+ }
80
  }
81
  });
82
  jQuery("#form" +form_id+ " div[type='type_paypal_price']").each(function() {
83
+ var parent_div = jQuery(this).parent();
84
+ if ('none' != parent_div.css('display')) {
85
+ var id = parent_div.attr('wdid');
86
+ label = jQuery(this).find('.wdform-label').html();
87
+ cents = '00';
88
+ dollars = '0';
89
+ if (jQuery('#wdform_' + id + "_element_dollars" + form_id).val() != '') {
90
+ dollars = jQuery('#wdform_' + id + "_element_dollars" + form_id).val();
 
 
91
  }
92
+ if (jQuery('#wdform_' + id + "_element_cents" + form_id).val() != '') {
93
+ if (jQuery('#wdform_' + id + "_element_cents" + form_id).val().length == 1) {
94
+ cents = '0' + jQuery('#wdform_' + id + "_element_cents" + form_id).val();
95
+ }
96
+ else {
97
+ cents = jQuery('#wdform_' + id + "_element_cents" + form_id).val();
98
+ }
99
+ span_value = FormCurrency + dollars + '.' + cents;
100
+ total = total + parseFloat(dollars + '.' + cents);
101
+ div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
102
  }
 
 
 
103
  }
104
  });
105
  jQuery("#form" +form_id+ " div[type='type_paypal_price_new']").each(function() {
106
+ var parent_div = jQuery(this).parent();
107
+ if ('none' != parent_div.css('display')) {
108
+ var id = parent_div.attr('wdid');
109
+ label = jQuery(this).find('.wdform-label').html();
110
+ dollars = '0';
111
+ if (jQuery('#wdform_' + id + "_element" + form_id).val() != '') {
112
+ dollars = jQuery('#wdform_' + id + "_element" + form_id).val();
113
+ }
114
+ span_value = FormCurrency + dollars;
115
+ total = total + parseFloat(dollars);
116
+ div_paypal_products.html(div_paypal_products.html() + "<div>" + label + ' - ' + span_value + "</div>");
117
+ }
118
  });
119
  var FormPaypalTax = eval("FormPaypalTax_" + form_id);
120
  if(FormPaypalTax != 0) {
1707
 
1708
  if (window['checkStripe' + form_id] == 1) {
1709
  var jq_mainForm = jQuery("form[id='form"+form_id+"']");
1710
+ if (jq_mainForm.find(".wdfm_stripe_elem").first().parents(".wdform_row").parents(".wdform_row").css('display') != 'none') {
1711
  wdfm_call_stripe(true);
1712
  }
1713
  else {
1738
  if ( typeof window["before_reset" + form_id] == 'function' ) {
1739
  window["before_reset" + form_id]();
1740
  }
1741
+ var privacy_policy_check = jQuery("#fm_privacy_policy" + form_id);
1742
+ if (privacy_policy_check) {
1743
+ privacy_policy_check.prop('checked', false);
1744
+ fm_privacy_policy_check(privacy_policy_check);
1745
+ }
1746
  jQuery.each(window['labels_and_ids'+form_id], function (index, elem) {
1747
  switch(elem) {
1748
  case "type_text":
2081
  if (window['checkStripe' + form_id] == 1) {
2082
  var jq_mainForm = jQuery("form[id='form" + form_id + "']");
2083
  if ('none' != jq_mainForm.find(".wdfm_stripe_elem").first().closest('.wdform-page-and-images').css('display')) {
2084
+ if (jq_mainForm.find(".wdfm_stripe_elem").first().parents(".wdform_row").parents(".wdform_row").css('display') != 'none') {
2085
  if (wdfm_call_stripe(false) == false) {
2086
  return false;
2087
  }
2167
  }
2168
  }
2169
  }
2170
+
2171
+ function fm_privacy_policy_check(that) {
2172
+ var element = jQuery(that);
2173
+ var button = element.parents('.wdform_row').find('.button-submit');
2174
+ if (element.is(':checked')) {
2175
+ button.removeAttr('disabled');
2176
+ }
2177
+ else {
2178
+ button.attr('disabled', 'disabled');
2179
+ }
2180
+ }
readme.txt CHANGED
@@ -1,13 +1,13 @@
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: 4.6
5
  Tested up to: 4.9
6
- Stable tag: 1.12.35
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
- Form Maker is a user-friendly form builder plugin that allows to create forms for any purpose, from a simple contact form to a multi page survey
11
 
12
  == Description ==
13
 
@@ -32,8 +32,8 @@ Form Maker is a power-packed yet user-friendly form builder plugin. With an intu
32
 
33
  * **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.
34
  * **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.
35
- * **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.
36
- * **Save time** - Plugin uses an intuitive drag and drop interface, which makes it easy to create contact forms and add/remove fields.
37
  * **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.
38
  * **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.
39
  * **Awesome Support** - The team behind this plugin provides timely and effective support to all its users. We keep standards high and response time low.
@@ -162,11 +162,11 @@ Form Maker can be used for creating multiple types of forms, including contact f
162
 
163
  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.
164
 
165
- = How can I create a form with Form Maker? =
166
 
167
- Navigate to **Form Maker > Forms** page to build your very first form. This contact form creator plugin provides a few sample forms, which you can quickly edit and publish.
168
 
169
- 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.
170
 
171
  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.
172
 
@@ -174,9 +174,9 @@ To add a new field with this application form creator, drag **New Field** button
174
 
175
  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.
176
 
177
- = Can I add a custom header with text and image above my form? =
178
 
179
- 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.
180
 
181
  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.
182
 
@@ -212,13 +212,13 @@ To set a initial default theme for your forms, press on the star icon next to th
212
  Options of Form Maker Themes are divided into the following sections:
213
 
214
  * Global Parameters
215
- * Header
216
  * Content
217
  * Inputbox
218
  * Choices (Multiple and Single)
219
  * General Buttons
220
  * Pagination
221
- * Buttons
222
  * Close (Minimize) Button
223
  * Minimize Text
224
  * Other
@@ -280,17 +280,17 @@ Also, you can easily integrate the forms builder plugin with Stripe using its [S
280
 
281
  **Entries / Conversion Rate / Views.** These attributes of **Submissions** page will help you quickly view the statistics of the selected form.
282
 
283
- **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.
284
 
285
  **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.
286
 
287
- **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.
288
 
289
- *Note: Adding/Removing columns does not delete columns from the submissions table of your forms. It just hides them until you activate them again.*
290
 
291
  **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.
292
 
293
- **Delete.** If you wish to remove some or all submissions of a form, mark them as checked and select **Delete** option from **Bulk Actions.** Clicking **Apply** will delete these entries permanently.
294
 
295
  = Can user be redirected to another page after submitting the form? =
296
 
@@ -308,13 +308,13 @@ Navigate to Form Options &gt; Actions After Submissions tab, and select one of t
308
 
309
  Form Maker uses modern verification methods, such as ReCaptcha and invisible ReCaptcha. Please note that will need to obtain ReCaptcha keys to use these options. Otherwise you can use Simple Captcha and Arithmetical Captcha which use standard word verification and arithmetical expressions respectively.
310
 
311
- = Can I use Form Maker as a registration form creator? =
312
 
313
  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.
314
 
315
  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.
316
 
317
- = Is it possible to publish a form as a widget? =
318
 
319
  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.
320
 
@@ -404,7 +404,7 @@ Please note, that this problem is not caused by Form Maker plugin. It is rather
404
  * Choose the CSV file you need to view. You'll see a pop-up window with several options, you'll find the **File Origin** option along with them.
405
  * Please select **Unicode (UTF-8)** for this dropdown and click **Next** if you need to edit other options, or just **Finish** to insert the document.
406
 
407
- The special characters in the CSV submissions of your forms should appear correctly afterwards.
408
 
409
  = I do not receive any submission emails of my forms. How can this be fixed? =
410
 
@@ -452,9 +452,18 @@ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{par
452
 
453
  == Changelog ==
454
 
 
 
 
 
 
 
 
 
 
455
  = 1.12.35 =
456
  * Fixed: PDF should be generated even if sending emails is off.
457
- * Fixed: Field validation issues on multi-page forms.
458
  * Fixed: Issue with Exporting/Importing a form with special characters in header.
459
 
460
  = 1.12.34 =
@@ -467,13 +476,13 @@ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{par
467
  = 1.12.33 =
468
  * Added: Option to enable/disable WP Editor.
469
  * Added: Additional security checks against bots.
470
- * Changed: Field validation on form options page.
471
  * Fixed: Error on deactivation.
472
  * Fixed: Port for connecting to a remote Database with SQL mapping.
473
  * Fixed: Displaying Form on all posts instead of the selected.
474
- * Fixed: Filled values of payment fields should not be lost on an error.
475
  * Fixed: Form is not saved if you click Publish before the page is loaded.
476
- * Fixed: Table of fields validation.
477
  * Fixed: Add shortcode functionality on Beaver, Elementor, SiteOrigin and Visual Composer builders.
478
  * Fixed: If you Sort/Filter the data via some column, then hit next page button, the sort reverts to the default sort order.
479
  * Fixed: Select all in Submissions should apply to the current page only.
@@ -495,12 +504,12 @@ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{par
495
  * Changed: Separate buttons for deactivation.
496
 
497
  = 1.12.29 =
498
- * Fixed: Bug on empty values for some field types.
499
 
500
  = 1.12.28 =
501
  * Added: Custom javascript event, occurs after form is submitted.
502
  * Changed: Code structure refactoring.
503
- * Fixed: Bug on required fields PHP validation.
504
  * Fixed: Bug on saving a theme.
505
 
506
  = 1.12.27 =
@@ -514,7 +523,7 @@ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{par
514
  = 1.12.25 =
515
  * Changed: Updated translations.
516
  * Added: Gutenberg integration.
517
- * Fixed: Required mark for "Receive Copy" field.
518
  * Fixed: Bug on selecting options from database.
519
 
520
  = 1.12.24 =
@@ -537,7 +546,7 @@ Where **{{field_id}}** is the ID of the field you wish to prefill. Also, **{{par
537
  * Changed: DB field length.
538
 
539
  = 1.12.20 =
540
- * Added: New file types for Form Maker file upload field.
541
  * Improved: Editing empty mini labels.
542
  * Fixed: Form Submissions CSV export.
543
 
1
+ === Form Maker by WD - user-friendly drag & drop Contact Form Builder ===
2
  Contributors: webdorado,10web,wdsupport,formmakersupport
3
+ Tags: form, forms, form builder, contact form, feedback, custom form, contact, web contact form, captcha, email, form manager, survey
4
  Requires at least: 4.6
5
  Tested up to: 4.9
6
+ Stable tag: 1.12.36
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
+ Form Maker is a user-friendly contact form builder that allows to create forms for any purpose, from a simple contact form to a multi page survey
11
 
12
  == Description ==
13
 
32
 
33
  * **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.
34
  * **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.
35
+ * **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 form fields.
36
+ * **Save time** - Plugin uses an intuitive drag and drop interface, which makes it easy to create contact forms and add/remove form fields.
37
  * **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.
38
  * **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.
39
  * **Awesome Support** - The team behind this plugin provides timely and effective support to all its users. We keep standards high and response time low.
162
 
163
  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.
164
 
165
+ = How can I create a contact form with Form Maker? =
166
 
167
+ Navigate to **Form Maker > Forms** page to build your very first contact form. This contact form creator plugin provides a few sample forms, which you can quickly edit and publish.
168
 
169
+ 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 contact form by writing its title in the top **Search** input.
170
 
171
  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.
172
 
174
 
175
  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.
176
 
177
+ = Can I add a custom header with text and image above my contact form? =
178
 
179
+ This dynamic contact 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.
180
 
181
  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.
182
 
212
  Options of Form Maker Themes are divided into the following sections:
213
 
214
  * Global Parameters
215
+ * Form Header
216
  * Content
217
  * Inputbox
218
  * Choices (Multiple and Single)
219
  * General Buttons
220
  * Pagination
221
+ * Form Buttons
222
  * Close (Minimize) Button
223
  * Minimize Text
224
  * Other
280
 
281
  **Entries / Conversion Rate / Views.** These attributes of **Submissions** page will help you quickly view the statistics of the selected form.
282
 
283
+ **Export to CSV / Export to XML.** You are able to download all submissions of each contact form in **CSV** or **XML** format by clicking on these buttons.
284
 
285
  **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.
286
 
287
+ **Add/Remove Columns.** This button will help you customize the columns which display in submissions of the selected contact form. Click on the button and unmark the columns you wish to hide.
288
 
289
+ *Note: Adding/Removing columns does not delete columns from the submissions table of your contact forms. It just hides them until you activate them again.*
290
 
291
  **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.
292
 
293
+ **Delete.** If you wish to remove some or all submissions of a contact form, mark them as checked and select **Delete** option from **Bulk Actions.** Clicking **Apply** will delete these entries permanently.
294
 
295
  = Can user be redirected to another page after submitting the form? =
296
 
308
 
309
  Form Maker uses modern verification methods, such as ReCaptcha and invisible ReCaptcha. Please note that will need to obtain ReCaptcha keys to use these options. Otherwise you can use Simple Captcha and Arithmetical Captcha which use standard word verification and arithmetical expressions respectively.
310
 
311
+ = Can I use Form Maker to create a registration form? =
312
 
313
  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.
314
 
315
  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.
316
 
317
+ = Is it possible to publish a contact form as a widget? =
318
 
319
  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.
320
 
404
  * Choose the CSV file you need to view. You'll see a pop-up window with several options, you'll find the **File Origin** option along with them.
405
  * Please select **Unicode (UTF-8)** for this dropdown and click **Next** if you need to edit other options, or just **Finish** to insert the document.
406
 
407
+ The special characters in the CSV submissions of your contact forms should appear correctly afterwards.
408
 
409
  = I do not receive any submission emails of my forms. How can this be fixed? =
410
 
452
 
453
  == Changelog ==
454
 
455
+ = 1.12.36 =
456
+ * Improved: Uninstall Form Maker interface and texts.
457
+ * Fixed: "New Form Field" button drag and drop issue in Firefox and Safari.
458
+ * Fixed: Do not show hidden amounts in total.
459
+ * Fixed: Failed to import form submissions when there is a single quote in the form title.
460
+ * Fixed: Can not submit contact form when there is a condition on stripe field and stripe is not visible.
461
+ * Added: GDPR compliance required checkbox on the front end.
462
+ * Added: Warn user if the email address does not belong to the site domain.
463
+
464
  = 1.12.35 =
465
  * Fixed: PDF should be generated even if sending emails is off.
466
+ * Fixed: Form field validation issues on multi-page forms.
467
  * Fixed: Issue with Exporting/Importing a form with special characters in header.
468
 
469
  = 1.12.34 =
476
  = 1.12.33 =
477
  * Added: Option to enable/disable WP Editor.
478
  * Added: Additional security checks against bots.
479
+ * Changed: Form field validation on form options page.
480
  * Fixed: Error on deactivation.
481
  * Fixed: Port for connecting to a remote Database with SQL mapping.
482
  * Fixed: Displaying Form on all posts instead of the selected.
483
+ * Fixed: Filled values of payment form fields should not be lost on an error.
484
  * Fixed: Form is not saved if you click Publish before the page is loaded.
485
+ * Fixed: Table of fields validation on form submission.
486
  * Fixed: Add shortcode functionality on Beaver, Elementor, SiteOrigin and Visual Composer builders.
487
  * Fixed: If you Sort/Filter the data via some column, then hit next page button, the sort reverts to the default sort order.
488
  * Fixed: Select all in Submissions should apply to the current page only.
504
  * Changed: Separate buttons for deactivation.
505
 
506
  = 1.12.29 =
507
+ * Fixed: Bug on empty values for some form field types.
508
 
509
  = 1.12.28 =
510
  * Added: Custom javascript event, occurs after form is submitted.
511
  * Changed: Code structure refactoring.
512
+ * Fixed: Bug on required form fields PHP validation.
513
  * Fixed: Bug on saving a theme.
514
 
515
  = 1.12.27 =
523
  = 1.12.25 =
524
  * Changed: Updated translations.
525
  * Added: Gutenberg integration.
526
+ * Fixed: Required mark for "Receive Copy" form field.
527
  * Fixed: Bug on selecting options from database.
528
 
529
  = 1.12.24 =
546
  * Changed: DB field length.
547
 
548
  = 1.12.20 =
549
+ * Added: New file types for Form Maker file upload form field.
550
  * Improved: Editing empty mini labels.
551
  * Fixed: Form Submissions CSV export.
552