Formidable Forms – Form Builder for WordPress - Version 4.08

Version Description

  • New: Added confirmation before forms are deleted in bulk.
  • Allow a value to pass validation if the entered value matches the placeholder setting.
  • Fix: Email addresses were not being sent to Akismet for logged out users, and resulting in some false positive spam.
  • Fix: Some sites have been getting duplicate entries days apart. This issue should be fixed.
  • Fix: Searching when switching between forms no longer triggers the confirmation message when leaving the page.
Download this release

Release Info

Developer sswells
Plugin Icon 128x128 Formidable Forms – Form Builder for WordPress
Version 4.08
Comparing to
See all releases

Code changes from version 4.07.01 to 4.08

classes/controllers/FrmAddonsController.php CHANGED
@@ -25,6 +25,9 @@ class FrmAddonsController {
25
  'formidable-pro-upgrade',
26
  'FrmAddonsController::upgrade_to_pro'
27
  );
 
 
 
28
  }
29
  }
30
 
@@ -86,7 +89,7 @@ class FrmAddonsController {
86
  * @return array
87
  */
88
  private static function fallback_plugin_list() {
89
- return array(
90
  'formidable-pro' => array(
91
  'title' => 'Formidable Forms',
92
  'link' => 'pricing/',
@@ -156,6 +159,16 @@ class FrmAddonsController {
156
  'excerpt' => 'Allow users to text their votes for polls created by Formidable Forms, or send SMS notifications when entries are submitted or updated.',
157
  ),
158
  );
 
 
 
 
 
 
 
 
 
 
159
  }
160
 
161
  /**
@@ -165,6 +178,18 @@ class FrmAddonsController {
165
  * @return string
166
  */
167
  public static function get_pro_download_url() {
 
 
 
 
 
 
 
 
 
 
 
 
168
  $pro_cred_store = 'frmpro-credentials';
169
  $pro_wpmu_store = 'frmpro-wpmu-sitewide';
170
  if ( is_multisite() && get_site_option( $pro_wpmu_store ) ) {
@@ -186,12 +211,14 @@ class FrmAddonsController {
186
  // this is a fix for licenses saved in the past
187
  $license = strtoupper( $license );
188
  }
 
 
189
 
190
- $api = new FrmFormApi( $license );
191
- $downloads = $api->get_api_info();
192
- $pro = isset( $downloads['93790'] ) ? $downloads['93790'] : array();
193
-
194
- return isset( $pro['url'] ) ? $pro['url'] : '';
195
  }
196
 
197
  /**
@@ -209,7 +236,7 @@ class FrmAddonsController {
209
  $type = isset( $addons['error']['type'] ) ? $addons['error']['type'] : $type;
210
  }
211
 
212
- $pro = isset( $addons['93790'] ) ? $addons['93790'] : array();
213
  if ( $type === 'free' ) {
214
  $type = isset( $pro['type'] ) ? $pro['type'] : $type;
215
  if ( $type === 'free' ) {
@@ -230,6 +257,44 @@ class FrmAddonsController {
230
  * @since 4.0.01
231
  */
232
  public static function is_license_expired() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  $installed_addons = apply_filters( 'frm_installed_addons', array() );
234
  if ( empty( $installed_addons ) || ! isset( $installed_addons['formidable_pro'] ) ) {
235
  return false;
@@ -238,12 +303,7 @@ class FrmAddonsController {
238
  'formidable_pro' => $installed_addons['formidable_pro'],
239
  );
240
 
241
- $version_info = self::fill_update_addon_info( $installed_addons );
242
- if ( ! isset( $version_info['error'] ) ) {
243
- return false;
244
- }
245
-
246
- return $version_info['error'];
247
  }
248
 
249
  /**
@@ -759,7 +819,8 @@ class FrmAddonsController {
759
  // The plugin was installed, but not active. Download it now.
760
  self::ajax_install_addon();
761
  } else {
762
- $response['active'] = true;
 
763
  }
764
 
765
  echo json_encode( $response );
@@ -773,24 +834,40 @@ class FrmAddonsController {
773
 
774
  self::install_addon_permissions();
775
 
 
 
 
 
 
 
 
 
 
 
 
776
  // Set the current screen to avoid undefined notices.
777
- global $hook_suffix;
778
- set_current_screen();
 
 
779
 
780
  self::maybe_show_cred_form();
781
 
782
  $installed = self::install_addon();
 
 
 
783
  self::maybe_activate_addon( $installed );
784
-
785
- // Send back a response.
786
- echo json_encode( __( 'Your plugin has been installed. Please reload the page to see more options.', 'formidable' ) );
787
- wp_die();
788
  }
789
 
790
  /**
791
  * @since 3.04.02
792
  */
793
  private static function maybe_show_cred_form() {
 
 
 
 
794
  // Start output bufferring to catch the filesystem form if credentials are needed.
795
  ob_start();
796
 
@@ -808,10 +885,15 @@ class FrmAddonsController {
808
  }
809
 
810
  if ( $show_form ) {
811
- //$form = ob_get_clean();
812
- //TODO: test this: echo json_encode( array( 'form' => $form ) );
813
- echo json_encode( array( 'form' => __( 'Sorry, you\'re site requires FTP authentication. Please install plugins manaully.', 'formidable' ) ) );
814
- wp_die();
 
 
 
 
 
815
  }
816
 
817
  ob_end_clean();
@@ -835,7 +917,14 @@ class FrmAddonsController {
835
  // Flush the cache and return the newly installed plugin basename.
836
  wp_cache_flush();
837
 
838
- return $installer->plugin_info();
 
 
 
 
 
 
 
839
  }
840
 
841
  /**
@@ -903,8 +992,14 @@ class FrmAddonsController {
903
  if ( is_wp_error( $activate ) ) {
904
  // Ignore the invalid header message that shows with nested plugins.
905
  if ( $activate->get_error_code() !== 'no_plugin_header' ) {
906
- echo json_encode( array( 'error' => $activate->get_error_message() ) );
907
- wp_die();
 
 
 
 
 
 
908
  }
909
  }
910
  }
@@ -923,6 +1018,100 @@ class FrmAddonsController {
923
  }
924
  }
925
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
926
  /**
927
  * @since 3.04.03
928
  * @deprecated 3.06
25
  'formidable-pro-upgrade',
26
  'FrmAddonsController::upgrade_to_pro'
27
  );
28
+ } elseif ( 'formidable-pro-upgrade' === FrmAppHelper::get_param( 'page' ) ) {
29
+ wp_safe_redirect( admin_url( 'admin.php?page=formidable' ) );
30
+ exit;
31
  }
32
  }
33
 
89
  * @return array
90
  */
91
  private static function fallback_plugin_list() {
92
+ $list = array(
93
  'formidable-pro' => array(
94
  'title' => 'Formidable Forms',
95
  'link' => 'pricing/',
159
  'excerpt' => 'Allow users to text their votes for polls created by Formidable Forms, or send SMS notifications when entries are submitted or updated.',
160
  ),
161
  );
162
+
163
+ $defaults = array(
164
+ 'released' => '',
165
+ );
166
+
167
+ foreach ( $list as $k => $info ) {
168
+ $info['slug'] = $k;
169
+ $list[ $k ] = array_merge( $defaults, $info );
170
+ }
171
+ return $list;
172
  }
173
 
174
  /**
178
  * @return string
179
  */
180
  public static function get_pro_download_url() {
181
+ $license = self::get_pro_license();
182
+ $api = new FrmFormApi( $license );
183
+ $downloads = $api->get_api_info();
184
+ $pro = self::get_pro_from_addons( $downloads );
185
+
186
+ return isset( $pro['url'] ) ? $pro['url'] : '';
187
+ }
188
+
189
+ /**
190
+ * @since 4.08
191
+ */
192
+ public static function get_pro_license() {
193
  $pro_cred_store = 'frmpro-credentials';
194
  $pro_wpmu_store = 'frmpro-wpmu-sitewide';
195
  if ( is_multisite() && get_site_option( $pro_wpmu_store ) ) {
211
  // this is a fix for licenses saved in the past
212
  $license = strtoupper( $license );
213
  }
214
+ return $license;
215
+ }
216
 
217
+ /**
218
+ * @since 4.08
219
+ */
220
+ private static function get_pro_from_addons( $addons ) {
221
+ return isset( $addons['93790'] ) ? $addons['93790'] : array();
222
  }
223
 
224
  /**
236
  $type = isset( $addons['error']['type'] ) ? $addons['error']['type'] : $type;
237
  }
238
 
239
+ $pro = self::get_pro_from_addons( $addons );
240
  if ( $type === 'free' ) {
241
  $type = isset( $pro['type'] ) ? $pro['type'] : $type;
242
  if ( $type === 'free' ) {
257
  * @since 4.0.01
258
  */
259
  public static function is_license_expired() {
260
+ $version_info = self::get_primary_license_info();
261
+ if ( ! isset( $version_info['error'] ) ) {
262
+ return false;
263
+ }
264
+
265
+ return $version_info['error'];
266
+ }
267
+
268
+ /**
269
+ * @since 4.08
270
+ *
271
+ * @return boolean|int false or the number of days until expiration.
272
+ */
273
+ public static function is_license_expiring() {
274
+ $version_info = self::get_primary_license_info();
275
+ if ( ! isset( $version_info['active_sub'] ) || $version_info['active_sub'] !== 'no' ) {
276
+ // Check for a subscription first.
277
+ return false;
278
+ }
279
+
280
+ if ( ! isset( $version_info['error'] ) || empty( $version_info['expires'] ) ) {
281
+ // It's either invalid or already expired.
282
+ return false;
283
+ }
284
+
285
+ $expiration = $version_info['expires'];
286
+ $days_left = ( $expiration - time() ) / DAY_IN_SECONDS;
287
+ if ( $days_left > 30 ) {
288
+ return false;
289
+ }
290
+
291
+ return $days_left;
292
+ }
293
+
294
+ /**
295
+ * @since 4.08
296
+ */
297
+ private static function get_primary_license_info() {
298
  $installed_addons = apply_filters( 'frm_installed_addons', array() );
299
  if ( empty( $installed_addons ) || ! isset( $installed_addons['formidable_pro'] ) ) {
300
  return false;
303
  'formidable_pro' => $installed_addons['formidable_pro'],
304
  );
305
 
306
+ return self::fill_update_addon_info( $installed_addons );
 
 
 
 
 
307
  }
308
 
309
  /**
819
  // The plugin was installed, but not active. Download it now.
820
  self::ajax_install_addon();
821
  } else {
822
+ $response['active'] = true;
823
+ $response['success'] = true;
824
  }
825
 
826
  echo json_encode( $response );
834
 
835
  self::install_addon_permissions();
836
 
837
+ self::download_and_activate();
838
+
839
+ // Send back a response.
840
+ echo json_encode( __( 'Your plugin has been installed. Please reload the page to see more options.', 'formidable' ) );
841
+ wp_die();
842
+ }
843
+
844
+ /**
845
+ * @since 4.08
846
+ */
847
+ private static function download_and_activate() {
848
  // Set the current screen to avoid undefined notices.
849
+ if ( is_admin() ) {
850
+ global $hook_suffix;
851
+ set_current_screen();
852
+ }
853
 
854
  self::maybe_show_cred_form();
855
 
856
  $installed = self::install_addon();
857
+ if ( is_array( $installed ) && isset( $installed['message'] ) ) {
858
+ return $installed;
859
+ }
860
  self::maybe_activate_addon( $installed );
 
 
 
 
861
  }
862
 
863
  /**
864
  * @since 3.04.02
865
  */
866
  private static function maybe_show_cred_form() {
867
+ if ( ! function_exists( 'request_filesystem_credentials' ) ) {
868
+ include_once( ABSPATH . 'wp-admin/includes/file.php' );
869
+ }
870
+
871
  // Start output bufferring to catch the filesystem form if credentials are needed.
872
  ob_start();
873
 
885
  }
886
 
887
  if ( $show_form ) {
888
+ $form = ob_get_clean();
889
+ $message = __( 'Sorry, your site requires FTP authentication. Please download plugins from FormidableForms.com and install them manually.', 'formidable' );
890
+ $data = $form;
891
+ $response = array(
892
+ 'success' => false,
893
+ 'message' => $message,
894
+ 'form' => $form,
895
+ );
896
+ wp_send_json( $response );
897
  }
898
 
899
  ob_end_clean();
917
  // Flush the cache and return the newly installed plugin basename.
918
  wp_cache_flush();
919
 
920
+ $plugin = $installer->plugin_info();
921
+ if ( empty( $plugin ) ) {
922
+ return array(
923
+ 'message' => 'Plugin was not installed. ' . $installer->result,
924
+ 'success' => false,
925
+ );
926
+ }
927
+ return $plugin;
928
  }
929
 
930
  /**
992
  if ( is_wp_error( $activate ) ) {
993
  // Ignore the invalid header message that shows with nested plugins.
994
  if ( $activate->get_error_code() !== 'no_plugin_header' ) {
995
+ if ( wp_doing_ajax() ) {
996
+ echo json_encode( array( 'error' => $activate->get_error_message() ) );
997
+ wp_die();
998
+ }
999
+ return array(
1000
+ 'message' => $activate->get_error_message(),
1001
+ 'success' => false,
1002
+ );
1003
  }
1004
  }
1005
  }
1018
  }
1019
  }
1020
 
1021
+ /**
1022
+ * @since 4.08
1023
+ */
1024
+ public static function connect_link() {
1025
+ $auth = get_option( 'frm_connect_token' );
1026
+ if ( empty( $auth ) ) {
1027
+ $auth = hash( 'sha512', wp_rand() );
1028
+ update_option( 'frm_connect_token', $auth );
1029
+ }
1030
+ $link = FrmAppHelper::admin_upgrade_link( 'connect', 'api-connect' );
1031
+ $args = array(
1032
+ 'v' => 2,
1033
+ 'siteurl' => FrmAppHelper::site_url(),
1034
+ 'url' => get_rest_url(),
1035
+ 'token' => $auth,
1036
+ 'l' => self::get_pro_license(),
1037
+ );
1038
+
1039
+ return add_query_arg( $args, $link );
1040
+ }
1041
+
1042
+ /**
1043
+ * Check the auth value for install permission.
1044
+ *
1045
+ * @since 4.08
1046
+ *
1047
+ * @return bool
1048
+ */
1049
+ public static function can_install_addon_api() {
1050
+ // Verify params present (auth & download link).
1051
+ $post_auth = FrmAppHelper::get_param( 'token', '', 'request', 'sanitize_text_field' );
1052
+ $post_url = FrmAppHelper::get_param( 'file_url', '', 'request', 'sanitize_text_field' );
1053
+
1054
+ if ( empty( $post_auth ) || empty( $post_url ) ) {
1055
+ return false;
1056
+ }
1057
+
1058
+ // Verify auth.
1059
+ $auth = get_option( 'frm_connect_token' );
1060
+ if ( empty( $auth ) || ! hash_equals( $auth, $post_auth ) ) {
1061
+ return false;
1062
+ }
1063
+
1064
+ return true;
1065
+ }
1066
+
1067
+ /**
1068
+ * Install and/or activate the add-on file.
1069
+ *
1070
+ * @since 4.08
1071
+ */
1072
+ public static function install_addon_api() {
1073
+ // Sanitize when it's used to prevent double sanitizing.
1074
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
1075
+ $_POST['plugin'] = isset( $_REQUEST['file_url'] ) ? $_REQUEST['file_url'] : ''; // Set for later use
1076
+
1077
+ $error = esc_html__( 'Could not install an upgrade. Please download from formidableforms.com and install manually.', 'formidable' );
1078
+
1079
+ // Delete so cannot replay.
1080
+ delete_option( 'frm_connect_token' );
1081
+
1082
+ // It's already installed and active.
1083
+ $active = activate_plugin( 'formidable-pro/formidable-pro.php', false, false, true );
1084
+ if ( is_wp_error( $active ) ) {
1085
+ // Download plugin now.
1086
+ $response = self::download_and_activate();
1087
+ if ( is_array( $response ) && isset( $response['success'] ) ) {
1088
+ return $response;
1089
+ }
1090
+ }
1091
+
1092
+ // If empty license, save it now.
1093
+ if ( empty( self::get_pro_license() ) && function_exists( 'load_formidable_pro' ) ) {
1094
+ load_formidable_pro();
1095
+ $license = stripslashes( FrmAppHelper::get_param( 'key', '', 'request', 'sanitize_text_field' ) );
1096
+ if ( empty( $license ) ) {
1097
+ return array(
1098
+ 'success' => false,
1099
+ 'error' => 'That site does not have a valid license key.',
1100
+ );
1101
+ }
1102
+
1103
+ $response = FrmAddon::activate_license_for_plugin( $license, 'formidable_pro' );
1104
+ if ( ! $response['success'] ) {
1105
+ // Could not activate license.
1106
+ return $response;
1107
+ }
1108
+ }
1109
+
1110
+ return array(
1111
+ 'success' => true,
1112
+ );
1113
+ }
1114
+
1115
  /**
1116
  * @since 3.04.03
1117
  * @deprecated 3.06
classes/controllers/FrmAppController.php CHANGED
@@ -461,6 +461,14 @@ class FrmAppController {
461
  );
462
 
463
  register_rest_route( 'frm-admin/v1', '/install', $args );
 
 
 
 
 
 
 
 
464
  }
465
 
466
  /**
461
  );
462
 
463
  register_rest_route( 'frm-admin/v1', '/install', $args );
464
+
465
+ $args = array(
466
+ 'methods' => 'GET',
467
+ 'callback' => 'FrmAddonsController::install_addon_api',
468
+ 'permission_callback' => 'FrmAddonsController::can_install_addon_api',
469
+ );
470
+
471
+ register_rest_route( 'frm-admin/v1', '/install-addon', $args );
472
  }
473
 
474
  /**
classes/controllers/FrmFormActionsController.php CHANGED
@@ -54,6 +54,7 @@ class FrmFormActionsController {
54
  'constantcontact' => 'FrmDefConstContactAction',
55
  'getresponse' => 'FrmDefGetResponseAction',
56
  'hubspot' => 'FrmDefHubspotAction',
 
57
  'twilio' => 'FrmDefTwilioAction',
58
  'highrise' => 'FrmDefHighriseAction',
59
  'mailpoet' => 'FrmDefMailpoetAction',
54
  'constantcontact' => 'FrmDefConstContactAction',
55
  'getresponse' => 'FrmDefGetResponseAction',
56
  'hubspot' => 'FrmDefHubspotAction',
57
+ 'zapier' => 'FrmDefZapierAction',
58
  'twilio' => 'FrmDefTwilioAction',
59
  'highrise' => 'FrmDefHighriseAction',
60
  'mailpoet' => 'FrmDefMailpoetAction',
classes/controllers/FrmFormsController.php CHANGED
@@ -983,6 +983,7 @@ class FrmFormsController {
983
  'data' => array(
984
  'medium' => 'permissions',
985
  'upgrade' => __( 'Form Permissions', 'formidable' ),
 
986
  ),
987
  ),
988
  'scheduling' => array(
983
  'data' => array(
984
  'medium' => 'permissions',
985
  'upgrade' => __( 'Form Permissions', 'formidable' ),
986
+ 'message' => __( 'Allow editing, protect forms and files, limit entries, and save drafts. Upgrade to get form and entry permissions.', 'formidable' ),
987
  ),
988
  ),
989
  'scheduling' => array(
classes/controllers/FrmStylesController.php CHANGED
@@ -416,7 +416,7 @@ class FrmStylesController {
416
  }
417
 
418
  public static function include_style_section( $atts, $sec ) {
419
- extract( $atts );
420
  $style = $atts['style'];
421
  FrmStylesHelper::prepare_color_output( $style->post_content, false );
422
 
416
  }
417
 
418
  public static function include_style_section( $atts, $sec ) {
419
+ extract( $atts ); // phpcs:ignore WordPress.PHP.DontExtract
420
  $style = $atts['style'];
421
  FrmStylesHelper::prepare_color_output( $style->post_content, false );
422
 
classes/controllers/FrmXMLController.php CHANGED
@@ -618,7 +618,7 @@ class FrmXMLController {
618
  $csv_fields = FrmField::get_all_for_form( $form_id, '', 'include', 'include' );
619
  $no_export_fields = FrmField::no_save_fields();
620
  foreach ( $csv_fields as $k => $f ) {
621
- if ( in_array( $f->type, $no_export_fields ) ) {
622
  unset( $csv_fields[ $k ] );
623
  }
624
  }
618
  $csv_fields = FrmField::get_all_for_form( $form_id, '', 'include', 'include' );
619
  $no_export_fields = FrmField::no_save_fields();
620
  foreach ( $csv_fields as $k => $f ) {
621
+ if ( in_array( $f->type, $no_export_fields, true ) ) {
622
  unset( $csv_fields[ $k ] );
623
  }
624
  }
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '4.07.01';
15
 
16
  /**
17
  * @since 1.07.02
@@ -120,13 +120,50 @@ class FrmAppHelper {
120
  */
121
  public static function renewal_message() {
122
  if ( ! FrmAddonsController::is_license_expired() ) {
 
123
  return;
124
  }
125
  ?>
126
  <div class="frm_error_style" style="text-align:left">
127
  <?php self::icon_by_class( 'frmfont frm_alert_icon' ); ?>
128
  &nbsp;
129
- <?php esc_attr_e( 'Your account has expired', 'formidable' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  <div style="float:right">
131
  <a href="<?php echo esc_url( self::admin_upgrade_link( 'form-renew', 'account/downloads/' ) ); ?>">
132
  Renew Now
@@ -1547,7 +1584,7 @@ class FrmAppHelper {
1547
  return false;
1548
  }
1549
 
1550
- extract( $atts );
1551
  ob_start();
1552
  include( $filename );
1553
  $contents = ob_get_contents();
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '4.08';
15
 
16
  /**
17
  * @since 1.07.02
120
  */
121
  public static function renewal_message() {
122
  if ( ! FrmAddonsController::is_license_expired() ) {
123
+ self::expiring_message();
124
  return;
125
  }
126
  ?>
127
  <div class="frm_error_style" style="text-align:left">
128
  <?php self::icon_by_class( 'frmfont frm_alert_icon' ); ?>
129
  &nbsp;
130
+ <?php esc_html_e( 'Your account has expired', 'formidable' ); ?>
131
+ <div style="float:right">
132
+ <a href="<?php echo esc_url( self::admin_upgrade_link( 'form-renew', 'account/downloads/' ) ); ?>">
133
+ Renew Now
134
+ </a>
135
+ </div>
136
+ </div>
137
+ <?php
138
+ }
139
+
140
+ /**
141
+ * @since 4.08
142
+ */
143
+ public static function expiring_message() {
144
+ $expiring = FrmAddonsController::is_license_expiring();
145
+ if ( ! $expiring ) {
146
+ return;
147
+ }
148
+ ?>
149
+ <div class="frm_warning_style" style="text-align:left">
150
+ <?php self::icon_by_class( 'frmfont frm_alert_icon' ); ?>
151
+ &nbsp;
152
+ <?php
153
+ printf(
154
+ esc_html(
155
+ /* translators: %1$s: start HTML tag, %2$s: end HTML tag */
156
+ _n(
157
+ 'Your form subscription expires in %1$s day%2$s.',
158
+ 'Your form subscription expires in %1$s days%2$s.',
159
+ $expiring,
160
+ 'formidable'
161
+ )
162
+ ),
163
+ '<strong>' . esc_html( number_format_i18n( $expiring ) ),
164
+ '</strong>'
165
+ );
166
+ ?>
167
  <div style="float:right">
168
  <a href="<?php echo esc_url( self::admin_upgrade_link( 'form-renew', 'account/downloads/' ) ); ?>">
169
  Renew Now
1584
  return false;
1585
  }
1586
 
1587
+ extract( $atts ); // phpcs:ignore WordPress.PHP.DontExtract
1588
  ob_start();
1589
  include( $filename );
1590
  $contents = ob_get_contents();
classes/helpers/FrmCSVExportHelper.php CHANGED
@@ -5,16 +5,16 @@ if ( ! defined( 'ABSPATH' ) ) {
5
 
6
  class FrmCSVExportHelper {
7
 
8
- protected static $separator = ', ';
9
  protected static $column_separator = ',';
10
- protected static $line_break = 'return';
11
- protected static $charset = 'UTF-8';
12
- protected static $to_encoding = 'UTF-8';
13
- protected static $wp_date_format = 'Y-m-d H:i:s';
14
- protected static $comment_count = 0;
15
- protected static $form_id = 0;
16
- protected static $headings = array();
17
- protected static $fields = array();
18
  protected static $entry;
19
  protected static $has_parent_id;
20
 
@@ -119,24 +119,89 @@ class FrmCSVExportHelper {
119
  self::print_csv_row( $headings );
120
  }
121
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  private static function csv_headings( &$headings ) {
 
 
 
123
  foreach ( self::$fields as $col ) {
124
- $field_headings = array();
125
- $separate_values = array( 'user_id', 'file', 'data', 'date' );
126
- if ( isset( $col->field_options['separate_value'] ) && $col->field_options['separate_value'] && ! in_array( $col->type, $separate_values, true ) ) {
127
- $field_headings[ $col->id . '_label' ] = strip_tags( $col->name . ' ' . __( '(label)', 'formidable' ) );
 
 
 
 
 
 
 
 
 
 
 
 
128
  }
 
 
129
 
130
- $field_headings[ $col->id ] = strip_tags( $col->name );
131
- $field_headings = apply_filters(
132
- 'frm_csv_field_columns',
133
- $field_headings,
134
- array(
135
- 'field' => $col,
136
- )
137
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
- $headings += $field_headings;
 
140
  }
141
 
142
  if ( self::$comment_count ) {
@@ -250,7 +315,7 @@ class FrmCSVExportHelper {
250
  )
251
  );
252
 
253
- if ( isset( $col->field_options['separate_value'] ) && $col->field_options['separate_value'] ) {
254
  $sep_value = FrmEntriesHelper::display_value(
255
  $field_value,
256
  $col,
@@ -306,7 +371,24 @@ class FrmCSVExportHelper {
306
  $sep = '';
307
 
308
  foreach ( self::$headings as $k => $heading ) {
309
- $row = isset( $rows[ $k ] ) ? $rows[ $k ] : '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  if ( is_array( $row ) ) {
311
  // implode the repeated field values
312
  $row = implode( self::$separator, FrmAppHelper::array_flatten( $row, 'reset' ) );
5
 
6
  class FrmCSVExportHelper {
7
 
8
+ protected static $separator = ', ';
9
  protected static $column_separator = ',';
10
+ protected static $line_break = 'return';
11
+ protected static $charset = 'UTF-8';
12
+ protected static $to_encoding = 'UTF-8';
13
+ protected static $wp_date_format = 'Y-m-d H:i:s';
14
+ protected static $comment_count = 0;
15
+ protected static $form_id = 0;
16
+ protected static $headings = array();
17
+ protected static $fields = array();
18
  protected static $entry;
19
  protected static $has_parent_id;
20
 
119
  self::print_csv_row( $headings );
120
  }
121
 
122
+ private static function field_headings( $col ) {
123
+ $field_headings = array();
124
+ $separate_values = array( 'user_id', 'file', 'data', 'date' );
125
+ if ( isset( $col->field_options['separate_value'] ) && $col->field_options['separate_value'] && ! in_array( $col->type, $separate_values, true ) ) {
126
+ $field_headings[ $col->id . '_label' ] = strip_tags( $col->name . ' ' . __( '(label)', 'formidable' ) );
127
+ }
128
+
129
+ $field_headings[ $col->id ] = strip_tags( $col->name );
130
+ $field_headings = apply_filters(
131
+ 'frm_csv_field_columns',
132
+ $field_headings,
133
+ array(
134
+ 'field' => $col,
135
+ )
136
+ );
137
+
138
+ return $field_headings;
139
+ }
140
+
141
  private static function csv_headings( &$headings ) {
142
+ $fields_by_repeater_id = array();
143
+ $repeater_ids = array();
144
+
145
  foreach ( self::$fields as $col ) {
146
+ if ( $col->form_id === self::$form_id || ! $col->field_options['in_section'] ) {
147
+ $headings += self::field_headings( $col );
148
+ } else {
149
+ $repeater_id = $col->field_options['in_section'];
150
+ $section = FrmField::getOne( $repeater_id );
151
+
152
+ if ( $section && FrmField::is_repeating_field( $section ) ) {
153
+ $headings[ 'repeater' . $repeater_id ] = array(); // set a placeholder to maintain order for repeater fields
154
+
155
+ if ( ! isset( $fields_by_repeater_id[ $repeater_id ] ) ) {
156
+ $fields_by_repeater_id[ $repeater_id ] = array();
157
+ $repeater_ids[] = $repeater_id;
158
+ }
159
+
160
+ $fields_by_repeater_id[ $repeater_id ][] = $col;
161
+ }
162
  }
163
+ }
164
+ unset( $repeater_id, $col );
165
 
166
+ if ( $repeater_ids ) {
167
+ $where = array( 'field_id' => $repeater_ids );
168
+ $repeater_meta = FrmDb::get_results( 'frm_item_metas', $where, 'field_id, meta_value' );
169
+ $max = array_fill_keys( $repeater_ids, 0 );
170
+
171
+ foreach ( $repeater_meta as $row ) {
172
+ $start = strpos( $row->meta_value, 'a:' ) + 2;
173
+ $end = strpos( $row->meta_value, ':{' );
174
+ $length = substr( $row->meta_value, $start, $end - $start );
175
+
176
+ if ( $length > $max[ $row->field_id ] ) {
177
+ $max[ $row->field_id ] = $length;
178
+ }
179
+ }
180
+ unset( $start, $end, $length, $row, $repeater_meta, $where );
181
+
182
+ $flat = array();
183
+ foreach ( $headings as $key => $heading ) {
184
+ if ( is_array( $heading ) ) {
185
+ $repeater_id = str_replace( 'repeater', '', $key );
186
+
187
+ $repeater_headings = array();
188
+ foreach ( $fields_by_repeater_id[ $repeater_id ] as $col ) {
189
+ $repeater_headings += self::field_headings( $col );
190
+ }
191
+
192
+ for ( $i = 0; $i < $max[ $repeater_id ]; $i ++ ) {
193
+ foreach ( $repeater_headings as $repeater_key => $repeater_name ) {
194
+ $flat[ $repeater_key . '[' . $i . ']' ] = $repeater_name;
195
+ }
196
+ }
197
+ } else {
198
+ $flat[ $key ] = $heading;
199
+ }
200
+ }
201
+ unset( $key, $heading, $max, $repeater_headings, $repeater_id );
202
 
203
+ $headings = $flat;
204
+ unset( $flat );
205
  }
206
 
207
  if ( self::$comment_count ) {
315
  )
316
  );
317
 
318
+ if ( ! empty( $col->field_options['separate_value'] ) ) {
319
  $sep_value = FrmEntriesHelper::display_value(
320
  $field_value,
321
  $col,
371
  $sep = '';
372
 
373
  foreach ( self::$headings as $k => $heading ) {
374
+ if ( isset( $rows[ $k ] ) ) {
375
+ $row = $rows[ $k ];
376
+ } else {
377
+ $row = '';
378
+ // array indexed data is not at $rows[ $k ]
379
+ if ( $k[ strlen( $k ) - 1 ] === ']' ) {
380
+ $start = strrpos( $k, '[' );
381
+ $key = substr( $k, 0, $start ++ );
382
+ $index = substr( $k, $start, strlen( $k ) - 1 - $start );
383
+
384
+ if ( isset( $rows[ $key ] ) && isset( $rows[ $key ][ $index ] ) ) {
385
+ $row = $rows[ $key ][ $index ];
386
+ }
387
+
388
+ unset( $start, $key, $index );
389
+ }
390
+ }
391
+
392
  if ( is_array( $row ) ) {
393
  // implode the repeated field values
394
  $row = implode( self::$separator, FrmAppHelper::array_flatten( $row, 'reset' ) );
classes/helpers/FrmEntriesListHelper.php CHANGED
@@ -336,4 +336,11 @@ class FrmEntriesListHelper extends FrmListHelper {
336
 
337
  $val = FrmEntriesHelper::prepare_display_value( $item, $field, $atts );
338
  }
 
 
 
 
 
 
 
339
  }
336
 
337
  $val = FrmEntriesHelper::prepare_display_value( $item, $field, $atts );
338
  }
339
+
340
+ /**
341
+ * @return string
342
+ */
343
+ protected function confirm_bulk_delete() {
344
+ return __( 'ALL selected entries in this form will be permanently deleted. Want to proceed?', 'formidable' );
345
+ }
346
  }
classes/helpers/FrmFormsListHelper.php CHANGED
@@ -352,4 +352,11 @@ class FrmFormsListHelper extends FrmListHelper {
352
  $val .= FrmAppHelper::truncate( strip_tags( $item->description ), 50 );
353
  }
354
  }
 
 
 
 
 
 
 
355
  }
352
  $val .= FrmAppHelper::truncate( strip_tags( $item->description ), 50 );
353
  }
354
  }
355
+
356
+ /**
357
+ * @return string
358
+ */
359
+ protected function confirm_bulk_delete() {
360
+ return __( 'ALL selected forms and their entries will be permanently deleted. Want to proceed?', 'formidable' );
361
+ }
362
  }
classes/helpers/FrmListHelper.php CHANGED
@@ -398,10 +398,25 @@ class FrmListHelper {
398
 
399
  echo "</select>\n";
400
 
 
 
 
 
 
 
 
 
401
  submit_button( __( 'Apply', 'formidable' ), 'action', '', false, array( 'id' => "doaction$two" ) );
402
  echo "\n";
403
  }
404
 
 
 
 
 
 
 
 
405
  /**
406
  * Get the current action selected from the bulk actions dropdown.
407
  *
398
 
399
  echo "</select>\n";
400
 
401
+ if ( isset( $this->_actions['bulk_delete'] ) ) {
402
+ $verify = $this->confirm_bulk_delete();
403
+
404
+ if ( $verify ) {
405
+ echo "<a id='confirm-bulk-delete-" . esc_attr( $which ) . "' class='frm-hidden' href='confirm-bulk-delete' data-frmcaution='" . esc_html__( 'Heads up', 'formidable' ) . "' data-frmverify='" . esc_attr( $verify ) . "'></a>";
406
+ }
407
+ }
408
+
409
  submit_button( __( 'Apply', 'formidable' ), 'action', '', false, array( 'id' => "doaction$two" ) );
410
  echo "\n";
411
  }
412
 
413
+ /**
414
+ * @return string if empty there will be no confirmation pop up
415
+ */
416
+ protected function confirm_bulk_delete() {
417
+ return '';
418
+ }
419
+
420
  /**
421
  * Get the current action selected from the bulk actions dropdown.
422
  *
classes/helpers/FrmXMLHelper.php CHANGED
@@ -186,10 +186,13 @@ class FrmXMLHelper {
186
 
187
  // Keep track of whether this specific form was updated or not.
188
  $imported['form_status'][ $form_id ] = 'imported';
189
- self::track_imported_child_forms( (int) $form_id, $form['parent_form_id'], $child_forms );
190
  }
191
  }
192
 
 
 
 
 
193
  self::import_xml_fields( $item->field, $form_id, $this_form, $form_fields, $imported );
194
 
195
  self::delete_removed_fields( $form_fields );
@@ -340,12 +343,11 @@ class FrmXMLHelper {
340
  */
341
  private static function maybe_update_child_form_parent_id( $imported_forms, $child_forms ) {
342
  foreach ( $child_forms as $child_form_id => $old_parent_form_id ) {
343
-
344
- if ( isset( $imported_forms[ $old_parent_form_id ] ) && $imported_forms[ $old_parent_form_id ] != $old_parent_form_id ) {
345
  // Update all children with this old parent_form_id
346
  $new_parent_form_id = (int) $imported_forms[ $old_parent_form_id ];
347
-
348
  FrmForm::update( $child_form_id, array( 'parent_form_id' => $new_parent_form_id ) );
 
349
  }
350
  }
351
  }
@@ -463,10 +465,9 @@ class FrmXMLHelper {
463
  }
464
 
465
  /**
466
- * Update the current in_section value
467
  *
468
  * @since 2.0.25
469
- *
470
  * @param int $in_section
471
  * @param array $f
472
  */
186
 
187
  // Keep track of whether this specific form was updated or not.
188
  $imported['form_status'][ $form_id ] = 'imported';
 
189
  }
190
  }
191
 
192
+ if ( $form_id ) {
193
+ self::track_imported_child_forms( (int) $form_id, $form['parent_form_id'], $child_forms );
194
+ }
195
+
196
  self::import_xml_fields( $item->field, $form_id, $this_form, $form_fields, $imported );
197
 
198
  self::delete_removed_fields( $form_fields );
343
  */
344
  private static function maybe_update_child_form_parent_id( $imported_forms, $child_forms ) {
345
  foreach ( $child_forms as $child_form_id => $old_parent_form_id ) {
346
+ if ( isset( $imported_forms[ $old_parent_form_id ] ) && (int) $imported_forms[ $old_parent_form_id ] !== (int) $old_parent_form_id ) {
 
347
  // Update all children with this old parent_form_id
348
  $new_parent_form_id = (int) $imported_forms[ $old_parent_form_id ];
 
349
  FrmForm::update( $child_form_id, array( 'parent_form_id' => $new_parent_form_id ) );
350
+ do_action( 'frm_update_child_form_parent_id', $child_form_id, $new_parent_form_id );
351
  }
352
  }
353
  }
465
  }
466
 
467
  /**
468
+ * Update the current in_section value at the beginning of the field loop
469
  *
470
  * @since 2.0.25
 
471
  * @param int $in_section
472
  * @param array $f
473
  */
classes/models/FrmAddon.php CHANGED
@@ -475,13 +475,20 @@ class FrmAddon {
475
  }
476
 
477
  $plugin_slug = FrmAppHelper::get_param( 'plugin', '', 'post', 'sanitize_text_field' );
478
- $this_plugin = self::get_addon( $plugin_slug );
479
- $response = $this_plugin->activate_license( $license );
480
 
481
  echo json_encode( $response );
482
  wp_die();
483
  }
484
 
 
 
 
 
 
 
 
 
485
  private function activate_license( $license ) {
486
  $this->set_license( $license );
487
  $this->license = $license;
475
  }
476
 
477
  $plugin_slug = FrmAppHelper::get_param( 'plugin', '', 'post', 'sanitize_text_field' );
478
+ $response = self::activate_license_for_plugin( $license, $plugin_slug );
 
479
 
480
  echo json_encode( $response );
481
  wp_die();
482
  }
483
 
484
+ /**
485
+ * @since 4.08
486
+ */
487
+ public static function activate_license_for_plugin( $license, $plugin_slug ) {
488
+ $this_plugin = self::get_addon( $plugin_slug );
489
+ return $this_plugin->activate_license( $license );
490
+ }
491
+
492
  private function activate_license( $license ) {
493
  $this->set_license( $license );
494
  $this->license = $license;
classes/models/FrmEntryMeta.php CHANGED
@@ -332,8 +332,21 @@ class FrmEntryMeta {
332
  $query = implode( ' ', $query );
333
 
334
  $cache_key = 'ids_' . FrmAppHelper::maybe_json_encode( $where ) . $order_by . 'l' . $limit . 'u' . $unique . FrmAppHelper::maybe_json_encode( $args );
 
 
 
335
 
336
- return FrmDb::check_cache( $cache_key, 'frm_entry', $query, ( $limit == ' LIMIT 1' ? 'get_var' : 'get_col' ) );
 
 
 
 
 
 
 
 
 
 
337
  }
338
 
339
  /**
@@ -343,15 +356,23 @@ class FrmEntryMeta {
343
  */
344
  private static function get_ids_query( $where, $order_by, $limit, $unique, $args, array &$query ) {
345
  global $wpdb;
346
- $query[] = 'SELECT';
347
-
348
- $defaults = array( 'return_parent_id' => false );
 
 
349
  $args = array_merge( $defaults, $args );
350
 
351
- if ( $args['return_parent_id'] ) {
352
- $query[] = $unique ? 'DISTINCT(e.parent_item_id)' : 'e.parent_item_id';
 
 
 
 
 
 
353
  } else {
354
- $query[] = $unique ? 'DISTINCT(it.item_id)' : 'it.item_id';
355
  }
356
 
357
  $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
@@ -390,8 +411,8 @@ class FrmEntryMeta {
390
 
391
  if ( strpos( $where, ' GROUP BY ' ) ) {
392
  // don't inject WHERE filtering after GROUP BY
393
- $parts = explode( ' GROUP BY ', $where );
394
- $where = $parts[0];
395
  $where .= $draft_where . $user_where;
396
  $where .= ' GROUP BY ' . $parts[1];
397
  } else {
332
  $query = implode( ' ', $query );
333
 
334
  $cache_key = 'ids_' . FrmAppHelper::maybe_json_encode( $where ) . $order_by . 'l' . $limit . 'u' . $unique . FrmAppHelper::maybe_json_encode( $args );
335
+ $type = 'get_' . ( ' LIMIT 1' === $limit ? 'var' : 'col' );
336
+ return FrmDb::check_cache( $cache_key, 'frm_entry', $query, $type );
337
+ }
338
 
339
+ /**
340
+ * Given a query including a form id and its child form ids, output an array of matching entry ids
341
+ * If a child entry id is matched, its parent will be returned in its place
342
+ *
343
+ * @param array $query
344
+ * @param array $args
345
+ * @return array
346
+ */
347
+ public static function get_top_level_entry_ids( $query, $args ) {
348
+ $args['return_parent_id_if_0_return_id'] = true;
349
+ return self::getEntryIds( $query, '', '', true, $args );
350
  }
351
 
352
  /**
356
  */
357
  private static function get_ids_query( $where, $order_by, $limit, $unique, $args, array &$query ) {
358
  global $wpdb;
359
+ $query[] = 'SELECT';
360
+ $defaults = array(
361
+ 'return_parent_id' => false,
362
+ 'return_parent_id_if_0_return_id' => false,
363
+ );
364
  $args = array_merge( $defaults, $args );
365
 
366
+ if ( $unique ) {
367
+ $query[] = 'DISTINCT';
368
+ }
369
+
370
+ if ( $args['return_parent_id_if_0_return_id'] ) {
371
+ $query[] = 'IF ( e.parent_item_id = 0, it.item_id, e.parent_item_id )';
372
+ } elseif ( $args['return_parent_id'] ) {
373
+ $query[] = 'e.parent_item_id';
374
  } else {
375
+ $query[] = 'it.item_id';
376
  }
377
 
378
  $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
411
 
412
  if ( strpos( $where, ' GROUP BY ' ) ) {
413
  // don't inject WHERE filtering after GROUP BY
414
+ $parts = explode( ' GROUP BY ', $where );
415
+ $where = $parts[0];
416
  $where .= $draft_where . $user_where;
417
  $where .= ' GROUP BY ' . $parts[1];
418
  } else {
classes/models/FrmEntryValidate.php CHANGED
@@ -113,21 +113,19 @@ class FrmEntryValidate {
113
  $errors = apply_filters( 'frm_validate_field_entry', $errors, $posted_field, $value, $args );
114
  }
115
 
 
 
 
 
 
 
116
  private static function maybe_clear_value_for_default_blank_setting( $field, &$value ) {
117
- $placeholder = FrmField::get_option( $field, 'placeholder' );
118
- $is_default = ( ! empty( $placeholder ) && $value == $placeholder );
119
- $is_label = false;
120
-
121
- if ( ! $is_default ) {
122
- $position = FrmField::get_option( $field, 'label' );
123
- if ( empty( $position ) ) {
124
- $position = FrmStylesController::get_style_val( 'position', $field->form_id );
125
- }
126
-
127
- $is_label = ( $position == 'inside' && FrmFieldsHelper::is_placeholder_field_type( $field->type ) && $value == $field->name );
128
  }
129
 
130
- if ( $is_label || $is_default ) {
131
  $value = '';
132
  }
133
  }
@@ -389,6 +387,10 @@ class FrmEntryValidate {
389
  $datas['comment_author_email'] = '';
390
  $datas['comment_author_url'] = '';
391
 
 
 
 
 
392
  $values = array_filter( $values );
393
  foreach ( $values as $value ) {
394
  if ( ! is_array( $value ) ) {
113
  $errors = apply_filters( 'frm_validate_field_entry', $errors, $posted_field, $value, $args );
114
  }
115
 
116
+ /**
117
+ * Set $value to an empty string if it matches its label
118
+ *
119
+ * @param object $field
120
+ * @param string $value
121
+ */
122
  private static function maybe_clear_value_for_default_blank_setting( $field, &$value ) {
123
+ $position = FrmField::get_option( $field, 'label' );
124
+ if ( ! $position ) {
125
+ $position = FrmStylesController::get_style_val( 'position', $field->form_id );
 
 
 
 
 
 
 
 
126
  }
127
 
128
+ if ( $position === 'inside' && FrmFieldsHelper::is_placeholder_field_type( $field->type ) && $value === $field->name ) {
129
  $value = '';
130
  }
131
  }
387
  $datas['comment_author_email'] = '';
388
  $datas['comment_author_url'] = '';
389
 
390
+ if ( isset( $values['item_meta'] ) ) {
391
+ $values = $values['item_meta'];
392
+ }
393
+
394
  $values = array_filter( $values );
395
  foreach ( $values as $value ) {
396
  if ( ! is_array( $value ) ) {
classes/models/FrmInstallerSkin.php CHANGED
@@ -67,10 +67,22 @@ class FrmInstallerSkin extends WP_Upgrader_Skin {
67
  public function error( $errors ) {
68
  if ( ! empty( $errors ) ) {
69
  if ( ! is_string( $errors ) ) {
70
- $errors = $errors->get_error_message();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
- echo json_encode( array( 'error' => $errors ) );
73
- wp_die();
74
  }
75
  }
76
 
67
  public function error( $errors ) {
68
  if ( ! empty( $errors ) ) {
69
  if ( ! is_string( $errors ) ) {
70
+ $error = $errors->get_error_message();
71
+ $message = $errors->get_error_data();
72
+ $errors = $error . ' ' . $message;
73
+ }
74
+ echo json_encode(
75
+ array(
76
+ 'error' => $errors,
77
+ 'message' => $errors,
78
+ 'success' => false,
79
+ )
80
+ );
81
+ if ( wp_doing_ajax() ) {
82
+ wp_die();
83
+ } else {
84
+ die();
85
  }
 
 
86
  }
87
  }
88
 
classes/views/frm-fields/back-end/field-captcha.php CHANGED
@@ -8,7 +8,7 @@ if ( empty( $frm_settings->pubkey ) ) {
8
  ?>
9
  <div class="howto frm_no_captcha_text"><?php
10
  /* translators: %1$s: Link HTML, %2$s: End link */
11
- printf( esc_html__( 'Your captcha will not appear on your form until you %1$sset up%2$s the Site and Secret Keys', 'formidable' ), '<a href="?page=formidable-settings">', '</a>' );
12
  ?></div>
13
  <?php } ?>
14
  <img src="<?php echo esc_url( FrmAppHelper::plugin_url() . '/images/recaptcha.png' ); ?>" class="recaptcha_placeholder" alt="reCaptcha"/>
8
  ?>
9
  <div class="howto frm_no_captcha_text"><?php
10
  /* translators: %1$s: Link HTML, %2$s: End link */
11
+ printf( esc_html__( 'Your captcha will not appear on your form until you %1$sset up%2$s the Site and Secret Keys', 'formidable' ), '<a href="?page=formidable-settings" target="_blank">', '</a>' );
12
  ?></div>
13
  <?php } ?>
14
  <img src="<?php echo esc_url( FrmAppHelper::plugin_url() . '/images/recaptcha.png' ); ?>" class="recaptcha_placeholder" alt="reCaptcha"/>
classes/views/frm-form-actions/_action_inside.php CHANGED
@@ -66,6 +66,11 @@ do_action( 'frm_additional_action_settings', $form_action, $pass_args );
66
  // Show Conditional logic indicator.
67
  if ( ! FrmAppHelper::pro_is_installed() ) {
68
  ?>
 
 
 
 
 
69
  <h3>
70
  <a href="javascript:void(0)" class="frm_show_upgrade frm_noallow" data-upgrade="<?php esc_attr_e( 'Conditional emails', 'formidable' ); ?>" data-medium="conditional-email">
71
  <?php esc_html_e( 'Use Conditional Logic', 'formidable' ); ?>
66
  // Show Conditional logic indicator.
67
  if ( ! FrmAppHelper::pro_is_installed() ) {
68
  ?>
69
+ <h3>
70
+ <a href="javascript:void(0)" class="frm_show_upgrade frm_noallow" data-upgrade="<?php esc_attr_e( 'Email attachments', 'formidable' ); ?>" data-medium="email-attachment">
71
+ <?php esc_html_e( 'Attachment', 'formidable' ); ?>
72
+ </a>
73
+ </h3>
74
  <h3>
75
  <a href="javascript:void(0)" class="frm_show_upgrade frm_noallow" data-upgrade="<?php esc_attr_e( 'Conditional emails', 'formidable' ); ?>" data-medium="conditional-email">
76
  <?php esc_html_e( 'Use Conditional Logic', 'formidable' ); ?>
classes/views/frm-form-actions/default_actions.php CHANGED
@@ -52,6 +52,14 @@ class FrmDefMlcmpAction extends FrmFormAction {
52
  }
53
  }
54
 
 
 
 
 
 
 
 
 
55
  // add twilio action
56
  class FrmDefTwilioAction extends FrmFormAction {
57
  public function __construct() {
52
  }
53
  }
54
 
55
+ // add zapier action
56
+ class FrmDefZapierAction extends FrmFormAction {
57
+ public function __construct() {
58
+ $action_ops = FrmFormAction::default_action_opts( 'frm_zapier_icon frm_show_upgrade' );
59
+ parent::__construct( 'zapier', 'Zapier', $action_ops );
60
+ }
61
+ }
62
+
63
  // add twilio action
64
  class FrmDefTwilioAction extends FrmFormAction {
65
  public function __construct() {
classes/views/frm-form-actions/email_action.php CHANGED
@@ -20,7 +20,7 @@ class FrmEmailAction extends FrmFormAction {
20
  }
21
 
22
  public function form( $form_action, $args = array() ) {
23
- extract( $args );
24
 
25
  include FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_email_settings.php';
26
  }
20
  }
21
 
22
  public function form( $form_action, $args = array() ) {
23
+ extract( $args ); // phpcs:ignore WordPress.PHP.DontExtract
24
 
25
  include FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_email_settings.php';
26
  }
classes/views/frm-settings/general.php CHANGED
@@ -6,7 +6,7 @@ if ( ! defined( 'ABSPATH' ) ) {
6
  <div class="frm_license_box">
7
  <h3 class="frm-no-border frm_no_top_margin"><?php esc_html_e( 'License Key', 'formidable' ); ?></h3>
8
  <p class="howto">
9
- <?php esc_html_e( 'Your license key provides access to automatic updates.', 'formidable' ); ?>
10
  </p>
11
 
12
  <?php do_action( 'frm_before_settings' ); ?>
6
  <div class="frm_license_box">
7
  <h3 class="frm-no-border frm_no_top_margin"><?php esc_html_e( 'License Key', 'formidable' ); ?></h3>
8
  <p class="howto">
9
+ <?php esc_html_e( 'Your license key provides access to new features and updates.', 'formidable' ); ?>
10
  </p>
11
 
12
  <?php do_action( 'frm_before_settings' ); ?>
classes/views/frm-settings/license_box.php CHANGED
@@ -5,7 +5,7 @@ if ( ! defined( 'ABSPATH' ) ) {
5
  ?>
6
  <div id="frm_license_top" class="frm_unauthorized_box">
7
  <p id="frm-connect-btns" class="frm-show-unauthorized">
8
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=formidable-settings' ) ); ?>" target="_blank" class="button-primary frm-button-primary" id="frm-settings-connect-btn">
9
  <?php esc_html_e( 'Connect an Account', 'formidable' ); ?>
10
  </a>
11
  or
5
  ?>
6
  <div id="frm_license_top" class="frm_unauthorized_box">
7
  <p id="frm-connect-btns" class="frm-show-unauthorized">
8
+ <a href="<?php echo esc_url( FrmAddonsController::connect_link() ); ?>" class="button-primary frm-button-primary">
9
  <?php esc_html_e( 'Connect an Account', 'formidable' ); ?>
10
  </a>
11
  or
css/_single_theme.css.php CHANGED
@@ -4,7 +4,7 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  }
5
 
6
  $settings = FrmStylesHelper::get_settings_for_output( $style );
7
- extract( $settings );
8
 
9
  $important = empty( $important_style ) ? '' : ' !important';
10
 
4
  }
5
 
6
  $settings = FrmStylesHelper::get_settings_for_output( $style );
7
+ extract( $settings ); // phpcs:ignore WordPress.PHP.DontExtract
8
 
9
  $important = empty( $important_style ) ? '' : ' !important';
10
 
css/frm_admin.css CHANGED
@@ -1731,6 +1731,10 @@ h2.frm-h2 + .howto {
1731
  }
1732
 
1733
  /* Add-on tiles */
 
 
 
 
1734
  .frm-addons .plugin-card-top {
1735
  height: 140px;
1736
  padding-top: 30px;
@@ -1783,13 +1787,11 @@ h2.frm-h2 + .howto {
1783
 
1784
  .frm-addon-error {
1785
  position: absolute;
1786
- width: 100%;
 
 
1787
  font-weight: bold;
1788
  text-align: center;
1789
- max-width: 291px;
1790
- margin: 0;
1791
- margin-top: -205px;
1792
- margin-left: -17px;
1793
  }
1794
 
1795
  /* Form Templates */
1731
  }
1732
 
1733
  /* Add-on tiles */
1734
+ .frm-addons .frm-card.frm-addon-not-installed {
1735
+ position: relative;
1736
+ }
1737
+
1738
  .frm-addons .plugin-card-top {
1739
  height: 140px;
1740
  padding-top: 30px;
1787
 
1788
  .frm-addon-error {
1789
  position: absolute;
1790
+ top: 55px;
1791
+ left: 10px;
1792
+ right: 10px;
1793
  font-weight: bold;
1794
  text-align: center;
 
 
 
 
1795
  }
1796
 
1797
  /* Form Templates */
formidable.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
- Version: 4.07.01
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
+ Version: 4.08
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
js/formidable.js CHANGED
@@ -151,7 +151,7 @@ function frmFrontFormJS() {
151
  }
152
 
153
  function validateForm( object ) {
154
- var r, rl, n, nl, emailFields, fields, field, value, requiredFields,
155
  errors = [];
156
 
157
  // Make sure required text field is filled in
@@ -164,7 +164,6 @@ function frmFrontFormJS() {
164
  }
165
  }
166
 
167
- emailFields = jQuery( object ).find( 'input[type=email]' ).filter( ':visible' );
168
  fields = jQuery( object ).find( 'input,select,textarea' );
169
  if ( fields.length ) {
170
  for ( n = 0, nl = fields.length; n < nl; n++ ) {
@@ -176,7 +175,9 @@ function frmFrontFormJS() {
176
  } else if ( field.type === 'number' ) {
177
  errors = checkNumberField( field, errors );
178
  } else if ( field.type === 'email' ) {
179
- errors = checkEmailField( field, errors, emailFields );
 
 
180
  } else if ( field.type === 'url' ) {
181
  errors = checkUrlField( field, errors );
182
  } else if ( field.pattern !== null ) {
@@ -209,7 +210,7 @@ function frmFrontFormJS() {
209
  }
210
 
211
  function validateField( fieldId, field ) {
212
- var key, emailFields,
213
  errors = [];
214
 
215
  var $fieldCont = jQuery( field ).closest( '.frm_form_field' );
@@ -219,8 +220,9 @@ function frmFrontFormJS() {
219
 
220
  if ( errors.length < 1 ) {
221
  if ( field.type === 'email' ) {
222
- emailFields = jQuery( field ).closest( 'form' ).find( 'input[type=email]' );
223
- errors = checkEmailField( field, errors, emailFields );
 
224
  } else if ( field.type === 'number' ) {
225
  errors = checkNumberField( field, errors );
226
  } else if ( field.type === 'url' ) {
@@ -337,34 +339,45 @@ function frmFrontFormJS() {
337
  return errors;
338
  }
339
 
340
- function checkEmailField( field, errors, emailFields ) {
341
- var isConf, re, invalidMsg, confName, match,
342
- emailAddress = field.value,
343
- fieldID = getFieldId( field, true );
344
 
345
- if ( fieldID in errors ) {
346
- return errors;
 
347
  }
348
 
349
- isConf = ( fieldID.indexOf( 'conf_' ) === 0 );
350
- if ( emailAddress !== '' || isConf ) {
351
- re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;
352
- invalidMsg = getFieldValidationMessage( field, 'data-invmsg' );
353
- if ( emailAddress !== '' && re.test( emailAddress ) === false ) {
354
- errors[ fieldID ] = invalidMsg;
355
- if ( isConf ) {
356
- errors[ fieldID.replace( 'conf_', '' ) ] = '';
357
- }
358
- } else if ( isConf ) {
359
- confName = field.name.replace( 'conf_', '' );
360
- match = emailFields.filter( '[name="' + confName + '"]' ).val();
361
- if ( match !== emailAddress ) {
362
- errors[ fieldID ] = '';
363
- errors[ fieldID.replace( 'conf_', '' ) ] = '';
364
- }
 
 
 
 
 
 
 
 
 
 
365
  }
 
 
366
  }
367
- return errors;
368
  }
369
 
370
  function checkNumberField( field, errors ) {
151
  }
152
 
153
  function validateForm( object ) {
154
+ var r, rl, n, nl, fields, field, value, requiredFields,
155
  errors = [];
156
 
157
  // Make sure required text field is filled in
164
  }
165
  }
166
 
 
167
  fields = jQuery( object ).find( 'input,select,textarea' );
168
  if ( fields.length ) {
169
  for ( n = 0, nl = fields.length; n < nl; n++ ) {
175
  } else if ( field.type === 'number' ) {
176
  errors = checkNumberField( field, errors );
177
  } else if ( field.type === 'email' ) {
178
+ errors = checkEmailField( field, errors );
179
+ } else if ( field.type === 'password' ) {
180
+ errors = checkPasswordField( field, errors );
181
  } else if ( field.type === 'url' ) {
182
  errors = checkUrlField( field, errors );
183
  } else if ( field.pattern !== null ) {
210
  }
211
 
212
  function validateField( fieldId, field ) {
213
+ var key,
214
  errors = [];
215
 
216
  var $fieldCont = jQuery( field ).closest( '.frm_form_field' );
220
 
221
  if ( errors.length < 1 ) {
222
  if ( field.type === 'email' ) {
223
+ errors = checkEmailField( field, errors );
224
+ } else if ( field.type === 'password' ) {
225
+ errors = checkPasswordField( field, errors );
226
  } else if ( field.type === 'number' ) {
227
  errors = checkNumberField( field, errors );
228
  } else if ( field.type === 'url' ) {
339
  return errors;
340
  }
341
 
342
+ function checkEmailField( field, errors ) {
343
+ var fieldID = getFieldId( field, true ),
344
+ pattern = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;
 
345
 
346
+ // validate the current field we're editing first
347
+ if ( '' !== field.value && pattern.test( field.value ) === false ) {
348
+ errors[ fieldID ] = getFieldValidationMessage( field, 'data-invmsg' );
349
  }
350
 
351
+ confirmField( field, errors );
352
+ return errors;
353
+ }
354
+
355
+ function checkPasswordField( field, errors ) {
356
+ confirmField( field, errors );
357
+ return errors;
358
+ }
359
+
360
+ function confirmField( field, errors ) {
361
+ var value, confirmValue, firstField,
362
+ fieldID = getFieldId( field, true ),
363
+ strippedId = field.id.replace( 'conf_', '' ),
364
+ strippedFieldID = fieldID.replace( 'conf_', '' ),
365
+ confirmField = document.getElementById( strippedId.replace( 'field_', 'field_conf_' ) );
366
+
367
+ if ( confirmField === null || typeof errors[ 'conf_' + strippedFieldID ] !== 'undefined' ) {
368
+ return;
369
+ }
370
+
371
+ if ( fieldID !== strippedFieldID ) {
372
+ firstField = document.getElementById( strippedId );
373
+ value = firstField.value;
374
+ confirmValue = confirmField.value;
375
+ if ( '' !== value && '' !== confirmValue && value !== confirmValue ) {
376
+ errors[ 'conf_' + strippedFieldID ] = getFieldValidationMessage( confirmField, 'data-confmsg' );
377
  }
378
+ } else {
379
+ validateField( 'conf_' + strippedFieldID, confirmField );
380
  }
 
381
  }
382
 
383
  function checkNumberField( field, errors ) {
js/formidable.min.js CHANGED
@@ -2,54 +2,55 @@ var frmFrontForm;
2
  function frmFrontFormJS(){var action="";var jsErrors=[];function maybeShowLabel(){var $field=jQuery(this),$label=$field.closest(".frm_inside_container").find(".frm_primary_label"),val=$field.val();if(val!==null&&val.length>0)$label.addClass("frm_visible");else $label.removeClass("frm_visible")}function getFieldId(field,fullID){var nameParts,fieldId,isRepeating=false,fieldName="";if(field instanceof jQuery)fieldName=field.attr("name");else fieldName=field.name;if(typeof fieldName==="undefined")fieldName=
3
  "";if(fieldName===""){if(field instanceof jQuery)fieldName=field.data("name");else fieldName=field.getAttribute("data-name");if(typeof fieldName==="undefined")fieldName="";if(fieldName!==""&&fieldName)return fieldName;return 0}nameParts=fieldName.replace("item_meta[","").replace("[]","").split("]");if(nameParts.length<1)return 0;nameParts=nameParts.filter(function(n){return n!==""});fieldId=nameParts[0];if(nameParts.length===1)return fieldId;if(nameParts[1]==="[form"||nameParts[1]==="[row_ids")return 0;
4
  if(jQuery('input[name="item_meta['+fieldId+'][form]"]').length){fieldId=nameParts[2].replace("[","");isRepeating=true}if("other"===fieldId)if(isRepeating)fieldId=nameParts[3].replace("[","");else fieldId=nameParts[1].replace("[","");if(fullID===true)if(fieldId===nameParts[0])fieldId=fieldId+"-"+nameParts[1].replace("[","");else fieldId=fieldId+"-"+nameParts[0]+"-"+nameParts[1].replace("[","");return fieldId}function disableSubmitButton($form){$form.find('input[type="submit"], input[type="button"], button[type="submit"]').attr("disabled",
5
- "disabled")}function enableSubmitButton($form){$form.find('input[type="submit"], input[type="button"], button[type="submit"]').removeAttr("disabled")}function disableSaveDraft($form){$form.find("a.frm_save_draft").css("pointer-events","none")}function enableSaveDraft($form){$form.find("a.frm_save_draft").css("pointer-events","")}function validateForm(object){var r,rl,n,nl,emailFields,fields,field,value,requiredFields,errors=[];requiredFields=jQuery(object).find(".frm_required_field:visible input, .frm_required_field:visible select, .frm_required_field:visible textarea").filter(":not(.frm_optional)");
6
- if(requiredFields.length)for(r=0,rl=requiredFields.length;r<rl;r++)errors=checkRequiredField(requiredFields[r],errors);emailFields=jQuery(object).find("input[type=email]").filter(":visible");fields=jQuery(object).find("input,select,textarea");if(fields.length)for(n=0,nl=fields.length;n<nl;n++){field=fields[n];value=field.value;if(value!=="")if(field.type==="hidden");else if(field.type==="number")errors=checkNumberField(field,errors);else if(field.type==="email")errors=checkEmailField(field,errors,
7
- emailFields);else if(field.type==="url")errors=checkUrlField(field,errors);else if(field.pattern!==null)errors=checkPatternField(field,errors)}errors=validateRecaptcha(object,errors);return errors}function maybeValidateChange(fieldId,field){if(field.type==="url")maybeAddHttpToUrl(field);if(jQuery(field).closest("form").hasClass("frm_js_validate"))validateField(fieldId,field)}function maybeAddHttpToUrl(field){var url=field.value;var matches=url.match(/^(https?|ftps?|mailto|news|feed|telnet):/);if(field.value!==
8
- ""&&matches===null)field.value="http://"+url}function validateField(fieldId,field){var key,emailFields,errors=[];var $fieldCont=jQuery(field).closest(".frm_form_field");if($fieldCont.hasClass("frm_required_field")&&!jQuery(field).hasClass("frm_optional"))errors=checkRequiredField(field,errors);if(errors.length<1)if(field.type==="email"){emailFields=jQuery(field).closest("form").find("input[type=email]");errors=checkEmailField(field,errors,emailFields)}else if(field.type==="number")errors=checkNumberField(field,
9
- errors);else if(field.type==="url")errors=checkUrlField(field,errors);else if(field.pattern!==null)errors=checkPatternField(field,errors);removeFieldError($fieldCont);if(Object.keys(errors).length>0)for(key in errors)addFieldError($fieldCont,key,errors)}function checkRequiredField(field,errors){var checkGroup,fieldClasses,tempVal,i,placeholder,val="",fieldID="",fileID=field.getAttribute("data-frmfile");if(field.type==="hidden"&&fileID===null)return errors;if(field.type==="checkbox"||field.type===
10
- "radio"){checkGroup=jQuery('input[name="'+field.name+'"]').closest(".frm_required_field").find("input:checked");jQuery(checkGroup).each(function(){val=this.value})}else if(field.type==="file"||fileID){if(typeof fileID==="undefined"){fileID=getFieldId(field,true);fileID=fileID.replace("file","")}if(typeof errors[fileID]==="undefined")val=getFileVals(fileID);fieldID=fileID}else{fieldClasses=field.className;if(fieldClasses.indexOf("frm_pos_none")!==-1)return errors;val=jQuery(field).val();if(val===null)val=
11
- "";else if(typeof val!=="string"){tempVal=val;val="";for(i=0;i<tempVal.length;i++)if(tempVal[i]!=="")val=tempVal[i]}if(fieldClasses.indexOf("frm_other_input")===-1)fieldID=getFieldId(field,true);else fieldID=getFieldId(field,false);if(fieldClasses.indexOf("frm_time_select")!==-1)fieldID=fieldID.replace("-H","").replace("-m","");placeholder=field.getAttribute("data-frmplaceholder");if(placeholder!==null&&val===placeholder)val=""}if(val===""){if(fieldID==="")fieldID=getFieldId(field,true);if(!(fieldID in
12
- errors))errors[fieldID]=getFieldValidationMessage(field,"data-reqmsg")}return errors}function getFileVals(fileID){var val="",fileFields=jQuery('input[name="file'+fileID+'"], input[name="file'+fileID+'[]"], input[name^="item_meta['+fileID+']"]');fileFields.each(function(){if(val==="")val=this.value});return val}function checkUrlField(field,errors){var fieldID,url=field.value;if(url!==""&&!/^http(s)?:\/\/(?:localhost|(?:[\da-z\.-]+\.[\da-z\.-]+))/i.test(url)){fieldID=getFieldId(field,true);if(!(fieldID in
13
- errors))errors[fieldID]=getFieldValidationMessage(field,"data-invmsg")}return errors}function checkEmailField(field,errors,emailFields){var isConf,re,invalidMsg,confName,match,emailAddress=field.value,fieldID=getFieldId(field,true);if(fieldID in errors)return errors;isConf=fieldID.indexOf("conf_")===0;if(emailAddress!==""||isConf){re=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;invalidMsg=
14
- getFieldValidationMessage(field,"data-invmsg");if(emailAddress!==""&&re.test(emailAddress)===false){errors[fieldID]=invalidMsg;if(isConf)errors[fieldID.replace("conf_","")]=""}else if(isConf){confName=field.name.replace("conf_","");match=emailFields.filter('[name="'+confName+'"]').val();if(match!==emailAddress){errors[fieldID]="";errors[fieldID.replace("conf_","")]=""}}}return errors}function checkNumberField(field,errors){var fieldID,number=field.value;if(number!==""&&isNaN(number/1)!==false){fieldID=
15
- getFieldId(field,true);if(!(fieldID in errors))errors[fieldID]=getFieldValidationMessage(field,"data-invmsg")}return errors}function checkPatternField(field,errors){var fieldID,text=field.value,format=getFieldValidationMessage(field,"pattern");if(format!==""&&text!==""){fieldID=getFieldId(field,true);if(!(fieldID in errors)){format=new RegExp("^"+format+"$","i");if(format.test(text)===false)errors[fieldID]=getFieldValidationMessage(field,"data-invmsg")}}return errors}function hasInvisibleRecaptcha(object){var recaptcha,
16
- recaptchaID,alreadyChecked;if(isGoingToPrevPage(object))return false;recaptcha=jQuery(object).find('.frm-g-recaptcha[data-size="invisible"], .g-recaptcha[data-size="invisible"]');if(recaptcha.length){recaptchaID=recaptcha.data("rid");alreadyChecked=grecaptcha.getResponse(recaptchaID);if(alreadyChecked.length===0)return recaptcha;else return false}else return false}function executeInvisibleRecaptcha(invisibleRecaptcha){var recaptchaID=invisibleRecaptcha.data("rid");grecaptcha.reset(recaptchaID);grecaptcha.execute(recaptchaID)}
17
- function validateRecaptcha(form,errors){var recaptchaID,response,fieldContainer,fieldID,$recaptcha=jQuery(form).find(".frm-g-recaptcha");if($recaptcha.length){recaptchaID=$recaptcha.data("rid");try{response=grecaptcha.getResponse(recaptchaID)}catch(e){if(jQuery(form).find('input[name="recaptcha_checked"]').length)return errors;else response=""}if(response.length===0){fieldContainer=$recaptcha.closest(".frm_form_field");fieldID=fieldContainer.attr("id").replace("frm_field_","").replace("_container",
18
- "");errors[fieldID]=""}}return errors}function getFieldValidationMessage(field,messageType){var msg=field.getAttribute(messageType);if(msg===null)msg="";return msg}function shouldJSValidate(object){var validate=jQuery(object).hasClass("frm_js_validate");if(validate&&typeof frmProForm!=="undefined"&&(frmProForm.savingDraft(object)||frmProForm.goingToPreviousPage(object)))validate=false;return validate}function getFormErrors(object,action){var fieldset;if(typeof action==="undefined")jQuery(object).find('input[name="frm_action"]').val();
19
- fieldset=jQuery(object).find(".frm_form_field");fieldset.addClass("frm_doing_ajax");jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:jQuery(object).serialize()+"&action=frm_entries_"+action+"&nonce="+frm_js.nonce,success:function(response){var formID,replaceContent,pageOrder,formReturned,contSubmit,delay,$fieldCont,key,inCollapsedSection,frmTrigger,defaultResponse={"content":"","errors":{},"pass":false};if(response===null)response=defaultResponse;response=response.replace(/^\s+|\s+$/g,"");if(response.indexOf("{")===
20
- 0)response=jQuery.parseJSON(response);else response=defaultResponse;if(typeof response.redirect!=="undefined"){jQuery(document).trigger("frmBeforeFormRedirect",[object,response]);window.location=response.redirect}else if(response.content!==""){removeSubmitLoading(jQuery(object));if(frm_js.offset!=-1)frmFrontForm.scrollMsg(jQuery(object),false);formID=jQuery(object).find('input[name="form_id"]').val();response.content=response.content.replace(/ frm_pro_form /g," frm_pro_form frm_no_hide ");replaceContent=
21
- jQuery(object).closest(".frm_forms");removeAddedScripts(replaceContent,formID);delay=maybeSlideOut(replaceContent,response.content);setTimeout(function(){var container,input,previousInput;replaceContent.replaceWith(response.content);addUrlParam(response);if(typeof frmThemeOverride_frmAfterSubmit==="function"){pageOrder=jQuery('input[name="frm_page_order_'+formID+'"]').val();formReturned=jQuery(response.content).find('input[name="form_id"]').val();frmThemeOverride_frmAfterSubmit(formReturned,pageOrder,
22
- response.content,object)}if(typeof response.recaptcha!=="undefined"){container=jQuery("#frm_form_"+formID+"_container").find(".frm_fields_container");input='<input type="hidden" name="recaptcha_checked" value="'+response.recaptcha+'">';previousInput=container.find('input[name="recaptcha_checked"]');if(previousInput.length)previousInput.replaceWith(input);else container.append(input)}afterFormSubmitted(object,response)},delay)}else if(Object.keys(response.errors).length){removeSubmitLoading(jQuery(object),
23
- "enable");contSubmit=true;removeAllErrors();$fieldCont=null;for(key in response.errors){$fieldCont=jQuery(object).find("#frm_field_"+key+"_container");if($fieldCont.length){if(!$fieldCont.is(":visible")){inCollapsedSection=$fieldCont.closest(".frm_toggle_container");if(inCollapsedSection.length){frmTrigger=inCollapsedSection.prev();if(!frmTrigger.hasClass("frm_trigger"))frmTrigger=frmTrigger.prev(".frm_trigger");frmTrigger.click()}}if($fieldCont.is(":visible")){addFieldError($fieldCont,key,response.errors);
24
- contSubmit=false}}}jQuery(object).find(".frm-g-recaptcha, .g-recaptcha").each(function(){var $recaptcha=jQuery(this),recaptchaID=$recaptcha.data("rid");if(typeof grecaptcha!=="undefined"&&grecaptcha)if(recaptchaID)grecaptcha.reset(recaptchaID);else grecaptcha.reset()});jQuery(document).trigger("frmFormErrors",[object,response]);fieldset.removeClass("frm_doing_ajax");scrollToFirstField(object);if(contSubmit)object.submit();else jQuery(object).prepend(response.error_message)}else{showFileLoading(object);
25
- object.submit()}},error:function(){jQuery(object).find('input[type="submit"], input[type="button"]').removeAttr("disabled");object.submit()}})}function afterFormSubmitted(object,response){var formCompleted=jQuery(response.content).find(".frm_message");if(formCompleted.length)jQuery(document).trigger("frmFormComplete",[object,response]);else jQuery(document).trigger("frmPageChanged",[object,response])}function removeAddedScripts(formContainer,formID){var endReplace=jQuery(".frm_end_ajax_"+formID);
26
- if(endReplace.length){formContainer.nextUntil(".frm_end_ajax_"+formID).remove();endReplace.remove()}}function maybeSlideOut(oldContent,newContent){var c,newClass="frm_slideout";if(newContent.indexOf(" frm_slide")!==-1){c=oldContent.children();if(newContent.indexOf(" frm_going_back")!==-1)newClass+=" frm_going_back";c.removeClass("frm_going_back");c.addClass(newClass);return 300}return 0}function addUrlParam(response){var url;if(history.pushState&&typeof response.page!=="undefined"){url=addQueryVar("frm_page",
27
- response.page);window.history.pushState({"html":response.html},"","?"+url)}}function addQueryVar(key,value){var kvp,i,x;key=encodeURI(key);value=encodeURI(value);kvp=document.location.search.substr(1).split("&");i=kvp.length;while(i--){x=kvp[i].split("=");if(x[0]==key){x[1]=value;kvp[i]=x.join("=");break}}if(i<0)kvp[kvp.length]=[key,value].join("=");return kvp.join("&")}function addFieldError($fieldCont,key,jsErrors){var input,id,describedBy;if($fieldCont.length&&$fieldCont.is(":visible")){$fieldCont.addClass("frm_blank_field");
28
- input=$fieldCont.find("input, select, textarea");id="frm_error_field_"+key;describedBy=input.attr("aria-describedby");if(typeof frmThemeOverride_frmPlaceError==="function")frmThemeOverride_frmPlaceError(key,jsErrors);else{$fieldCont.append('<div class="frm_error" id="'+id+'">'+jsErrors[key]+"</div>");if(typeof describedBy==="undefined")describedBy=id;else if(describedBy.indexOf(id)===-1)describedBy=describedBy+" "+id;input.attr("aria-describedby",describedBy)}input.attr("aria-invalid",true);jQuery(document).trigger("frmAddFieldError",
29
- [$fieldCont,key,jsErrors])}}function removeFieldError($fieldCont){var errorMessage=$fieldCont.find(".frm_error"),errorId=errorMessage.attr("id"),input=$fieldCont.find("input, select, textarea"),describedBy=input.attr("aria-describedby");$fieldCont.removeClass("frm_blank_field has-error");errorMessage.remove();input.attr("aria-invalid",false);if(typeof describedBy!=="undefined"){describedBy=describedBy.replace(errorId,"");input.attr("aria-describedby",describedBy)}}function removeAllErrors(){jQuery(".form-field").removeClass("frm_blank_field has-error");
30
- jQuery(".form-field .frm_error").replaceWith("");jQuery(".frm_error_style").remove()}function scrollToFirstField(object){var field=jQuery(object).find(".frm_blank_field:first");if(field.length)frmFrontForm.scrollMsg(field,object,true)}function showSubmitLoading($object){showLoadingIndicator($object);disableSubmitButton($object);disableSaveDraft($object)}function showLoadingIndicator($object){if(!$object.hasClass("frm_loading_form")&&!$object.hasClass("frm_loading_prev")){addLoadingClass($object);
31
- $object.trigger("frmStartFormLoading")}}function addLoadingClass($object){var loadingClass=isGoingToPrevPage($object)?"frm_loading_prev":"frm_loading_form";$object.addClass(loadingClass)}function isGoingToPrevPage($object){return typeof frmProForm!=="undefined"&&frmProForm.goingToPreviousPage($object)}function removeSubmitLoading($object,enable,processesRunning){var loadingForm;if(processesRunning>0)return;loadingForm=jQuery(".frm_loading_form");loadingForm.removeClass("frm_loading_form");loadingForm.removeClass("frm_loading_prev");
32
- loadingForm.trigger("frmEndFormLoading");if(enable==="enable"){enableSubmitButton(loadingForm);enableSaveDraft(loadingForm)}}function showFileLoading(object){var fileval,loading=document.getElementById("frm_loading");if(loading!==null){fileval=jQuery(object).find("input[type=file]").val();if(typeof fileval!=="undefined"&&fileval!=="")setTimeout(function(){jQuery(loading).fadeIn("slow")},2E3)}}function clearDefault(){toggleDefault(jQuery(this),"clear")}function replaceDefault(){toggleDefault(jQuery(this),
33
- "replace")}function toggleDefault($thisField,e){var thisVal,v=$thisField.data("frmval").replace(/(\n|\r\n)/g,"\r");if(v===""||typeof v==="undefined")return false;thisVal=$thisField.val().replace(/(\n|\r\n)/g,"\r");if("replace"===e){if(thisVal==="")$thisField.addClass("frm_default").val(v)}else if(thisVal==v)$thisField.removeClass("frm_default").val("")}function resendEmail(){var $link=jQuery(this),entryId=this.getAttribute("data-eid"),formId=this.getAttribute("data-fid"),label=$link.find(".frm_link_label");
34
- if(label.length<1)label=$link;label.append('<span class="frm-wait"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_send_email",entry_id:entryId,form_id:formId,nonce:frm_js.nonce},success:function(msg){var admin=document.getElementById("wpbody");if(admin===null)label.html(msg);else{label.html("");$link.after(msg)}}});return false}function confirmClick(){var message=jQuery(this).data("frmconfirm");return confirm(message)}function toggleDiv(){var div=jQuery(this).data("frmtoggle");
35
- if(jQuery(div).is(":visible"))jQuery(div).slideUp("fast");else jQuery(div).slideDown("fast");return false}function addIndexOfFallbackForIE8(){var len,from;if(!Array.prototype.indexOf)Array.prototype.indexOf=function(elt){len=this.length>>>0;from=Number(arguments[1])||0;from=from<0?Math.ceil(from):Math.floor(from);if(from<0)from+=len;for(;from<len;from++)if(from in this&&this[from]===elt)return from;return-1}}function addTrimFallbackForIE8(){if(typeof String.prototype.trim!=="function")String.prototype.trim=
36
- function(){return this.replace(/^\s+|\s+$/g,"")}}function addFilterFallbackForIE8(){var t,len,res,thisp,i,val;if(!Array.prototype.filter)Array.prototype.filter=function(fun){if(this===void 0||this===null)throw new TypeError;t=Object(this);len=t.length>>>0;if(typeof fun!=="function")throw new TypeError;res=[];thisp=arguments[1];for(i=0;i<len;i++)if(i in t){val=t[i];if(fun.call(thisp,val,i,t))res.push(val)}return res}}function addKeysFallbackForIE8(){var keys,i;if(!Object.keys)Object.keys=function(obj){keys=
37
- [];for(i in obj)if(obj.hasOwnProperty(i))keys.push(i);return keys}}return{init:function(){jQuery(document).off("submit.formidable",".frm-show-form");jQuery(document).on("submit.formidable",".frm-show-form",frmFrontForm.submitForm);jQuery(".frm-show-form input[onblur], .frm-show-form textarea[onblur]").each(function(){if(jQuery(this).val()==="")jQuery(this).blur()});jQuery(document).on("focus",".frm_toggle_default",clearDefault);jQuery(document).on("blur",".frm_toggle_default",replaceDefault);jQuery(".frm_toggle_default").blur();
38
- jQuery(document.getElementById("frm_resend_email")).click(resendEmail);jQuery(document).on("change",'.frm-show-form input[name^="item_meta"], .frm-show-form select[name^="item_meta"], .frm-show-form textarea[name^="item_meta"]',frmFrontForm.fieldValueChanged);jQuery(document).on("change keyup",".frm-show-form .frm_inside_container input, .frm-show-form .frm_inside_container select, .frm-show-form .frm_inside_container textarea",maybeShowLabel);jQuery(document).on("click","a[data-frmconfirm]",confirmClick);
39
- jQuery("a[data-frmtoggle]").click(toggleDiv);addIndexOfFallbackForIE8();addTrimFallbackForIE8();addFilterFallbackForIE8();addKeysFallbackForIE8()},getFieldId:function(field,fullID){return getFieldId(field,fullID)},renderRecaptcha:function(captcha){var formID,recaptchaID,size=captcha.getAttribute("data-size"),rendered=captcha.getAttribute("data-rid")!==null,params={"sitekey":captcha.getAttribute("data-sitekey"),"size":size,"theme":captcha.getAttribute("data-theme")};if(rendered)return;if(size==="invisible"){formID=
40
- jQuery(captcha).closest("form").find('input[name="form_id"]').val();jQuery(captcha).closest(".frm_form_field .frm_primary_label").hide();params.callback=function(token){frmFrontForm.afterRecaptcha(token,formID)}}recaptchaID=grecaptcha.render(captcha.id,params);captcha.setAttribute("data-rid",recaptchaID)},afterSingleRecaptcha:function(){var object=jQuery(".frm-show-form .g-recaptcha").closest("form")[0];frmFrontForm.submitFormNow(object)},afterRecaptcha:function(token,formID){var object=jQuery("#frm_form_"+
41
- formID+"_container form")[0];frmFrontForm.submitFormNow(object)},submitForm:function(e){frmFrontForm.submitFormManual(e,this)},submitFormManual:function(e,object){var isPro,errors,invisibleRecaptcha=hasInvisibleRecaptcha(object),classList=object.className.trim().split(/\s+/gi);if(classList&&invisibleRecaptcha.length<1){isPro=classList.indexOf("frm_pro_form")>-1;if(!isPro)return}if(jQuery("body").hasClass("wp-admin")&&jQuery(object).closest(".frmapi-form").length<1)return;e.preventDefault();if(typeof frmProForm!==
42
- "undefined"&&typeof frmProForm.submitAllowed==="function")if(!frmProForm.submitAllowed(object))return;if(invisibleRecaptcha.length){showLoadingIndicator(jQuery(object));executeInvisibleRecaptcha(invisibleRecaptcha)}else{errors=frmFrontForm.validateFormSubmit(object);if(Object.keys(errors).length===0){showSubmitLoading(jQuery(object));frmFrontForm.submitFormNow(object,classList)}}},submitFormNow:function(object){var hasFileFields,classList=object.className.trim().split(/\s+/gi);if(classList.indexOf("frm_ajax_submit")>
43
- -1){hasFileFields=jQuery(object).find('input[type="file"]').filter(function(){return!!this.value}).length;if(hasFileFields<1){action=jQuery(object).find('input[name="frm_action"]').val();frmFrontForm.checkFormErrors(object,action)}else object.submit()}else object.submit()},validateFormSubmit:function(object){if(typeof tinyMCE!=="undefined"&&jQuery(object).find(".wp-editor-wrap").length)tinyMCE.triggerSave();jsErrors=[];if(shouldJSValidate(object)){frmFrontForm.getAjaxFormErrors(object);if(Object.keys(jsErrors).length)frmFrontForm.addAjaxFormErrors(object)}return jsErrors},
44
- getAjaxFormErrors:function(object){var customErrors,key;jsErrors=validateForm(object);if(typeof frmThemeOverride_jsErrors==="function"){action=jQuery(object).find('input[name="frm_action"]').val();customErrors=frmThemeOverride_jsErrors(action,object);if(Object.keys(customErrors).length)for(key in customErrors)jsErrors[key]=customErrors[key]}return jsErrors},addAjaxFormErrors:function(object){var key,$fieldCont;removeAllErrors();for(key in jsErrors){$fieldCont=jQuery(object).find("#frm_field_"+key+
45
- "_container");if($fieldCont.length)addFieldError($fieldCont,key,jsErrors);else delete jsErrors[key]}scrollToFirstField(object)},checkFormErrors:function(object,action){getFormErrors(object,action)},checkRequiredField:function(field,errors){return checkRequiredField(field,errors)},showSubmitLoading:function($object){showSubmitLoading($object)},removeSubmitLoading:function($object,enable,processesRunning){removeSubmitLoading($object,enable,processesRunning)},scrollToID:function(id){var object=jQuery(document.getElementById(id));
46
- frmFrontForm.scrollMsg(object,false)},scrollMsg:function(id,object,animate){var newPos,m,b,screenTop,screenBottom,scrollObj="";if(typeof object==="undefined"){scrollObj=jQuery(document.getElementById("frm_form_"+id+"_container"));if(scrollObj.length<1)return}else if(typeof id==="string")scrollObj=jQuery(object).find("#frm_field_"+id+"_container");else scrollObj=id;scrollObj.focus();newPos=scrollObj.offset().top;if(!newPos||frm_js.offset==="-1")return;newPos=newPos-frm_js.offset;m=jQuery("html").css("margin-top");
47
- b=jQuery("body").css("margin-top");if(m||b)newPos=newPos-parseInt(m)-parseInt(b);if(newPos&&window.innerHeight){screenTop=document.documentElement.scrollTop||document.body.scrollTop;screenBottom=screenTop+window.innerHeight;if(newPos>screenBottom||newPos<screenTop){if(typeof animate==="undefined")jQuery(window).scrollTop(newPos);else jQuery("html,body").animate({scrollTop:newPos},500);return false}}},fieldValueChanged:function(e){var fieldId=frmFrontForm.getFieldId(this,false);if(!fieldId||typeof fieldId===
48
- "undefined")return;if(e.frmTriggered&&e.frmTriggered==fieldId)return;jQuery(document).trigger("frmFieldChanged",[this,fieldId,e]);if(e.selfTriggered!==true)maybeValidateChange(fieldId,this)},savingDraft:function(object){console.warn("DEPRECATED: function frmFrontForm.savingDraft in v3.0 use frmProForm.savingDraft");if(typeof frmProForm!=="undefined")return frmProForm.savingDraft(object)},goingToPreviousPage:function(object){console.warn("DEPRECATED: function frmFrontForm.goingToPreviousPage in v3.0 use frmProForm.goingToPreviousPage");
49
- if(typeof frmProForm!=="undefined")return frmProForm.goingToPreviousPage(object)},hideOrShowFields:function(){console.warn("DEPRECATED: function frmFrontForm.hideOrShowFields in v3.0 use frmProForm.hideOrShowFields");if(typeof frmProForm!=="undefined")frmProForm.hideOrShowFields()},hidePreviouslyHiddenFields:function(){console.warn("DEPRECATED: function frmFrontForm.hidePreviouslyHiddenFields in v3.0 use frmProForm.hidePreviouslyHiddenFields");if(typeof frmProForm!=="undefined")frmProForm.hidePreviouslyHiddenFields()},
50
- checkDependentDynamicFields:function(ids){console.warn("DEPRECATED: function frmFrontForm.checkDependentDynamicFields in v3.0 use frmProForm.checkDependentDynamicFields");if(typeof frmProForm!=="undefined")frmProForm.checkDependentDynamicFields(ids)},checkDependentLookupFields:function(ids){console.warn("DEPRECATED: function frmFrontForm.checkDependentLookupFields in v3.0 use frmProForm.checkDependentLookupFields");if(typeof frmProForm!=="undefined")frmProForm.checkDependentLookupFields(ids)},loadGoogle:function(){console.warn("DEPRECATED: function frmFrontForm.loadGoogle in v3.0 use frmProForm.loadGoogle");
51
- frmProForm.loadGoogle()},escapeHtml:function(text){return text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")},invisible:function(classes){jQuery(classes).css("visibility","hidden")},visible:function(classes){jQuery(classes).css("visibility","visible")}}}frmFrontForm=frmFrontFormJS();jQuery(document).ready(function(){frmFrontForm.init()});
52
- function frmRecaptcha(){var c,cl,captchas=jQuery(".frm-g-recaptcha");for(c=0,cl=captchas.length;c<cl;c++)frmFrontForm.renderRecaptcha(captchas[c])}function frmAfterRecaptcha(token){frmFrontForm.afterSingleRecaptcha(token)}
 
53
  function frmUpdateField(entryId,fieldId,value,message,num){jQuery(document.getElementById("frm_update_field_"+entryId+"_"+fieldId+"_"+num)).html('<span class="frm-loading-img"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_update_field_ajax",entry_id:entryId,field_id:fieldId,value:value,nonce:frm_js.nonce},success:function(){if(message.replace(/^\s+|\s+$/g,"")==="")jQuery(document.getElementById("frm_update_field_"+entryId+"_"+fieldId+"_"+num)).fadeOut("slow");else jQuery(document.getElementById("frm_update_field_"+
54
  entryId+"_"+fieldId+"_"+num)).replaceWith(message)}})}
55
  function frmDeleteEntry(entryId,prefix){console.warn("DEPRECATED: function frmDeleteEntry in v2.0.13 use frmFrontForm.deleteEntry");jQuery(document.getElementById("frm_delete_"+entryId)).replaceWith('<span class="frm-loading-img" id="frm_delete_'+entryId+'"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_destroy",entry:entryId,nonce:frm_js.nonce},success:function(html){if(html.replace(/^\s+|\s+$/g,"")==="success")jQuery(document.getElementById(prefix+entryId)).fadeOut("slow");
2
  function frmFrontFormJS(){var action="";var jsErrors=[];function maybeShowLabel(){var $field=jQuery(this),$label=$field.closest(".frm_inside_container").find(".frm_primary_label"),val=$field.val();if(val!==null&&val.length>0)$label.addClass("frm_visible");else $label.removeClass("frm_visible")}function getFieldId(field,fullID){var nameParts,fieldId,isRepeating=false,fieldName="";if(field instanceof jQuery)fieldName=field.attr("name");else fieldName=field.name;if(typeof fieldName==="undefined")fieldName=
3
  "";if(fieldName===""){if(field instanceof jQuery)fieldName=field.data("name");else fieldName=field.getAttribute("data-name");if(typeof fieldName==="undefined")fieldName="";if(fieldName!==""&&fieldName)return fieldName;return 0}nameParts=fieldName.replace("item_meta[","").replace("[]","").split("]");if(nameParts.length<1)return 0;nameParts=nameParts.filter(function(n){return n!==""});fieldId=nameParts[0];if(nameParts.length===1)return fieldId;if(nameParts[1]==="[form"||nameParts[1]==="[row_ids")return 0;
4
  if(jQuery('input[name="item_meta['+fieldId+'][form]"]').length){fieldId=nameParts[2].replace("[","");isRepeating=true}if("other"===fieldId)if(isRepeating)fieldId=nameParts[3].replace("[","");else fieldId=nameParts[1].replace("[","");if(fullID===true)if(fieldId===nameParts[0])fieldId=fieldId+"-"+nameParts[1].replace("[","");else fieldId=fieldId+"-"+nameParts[0]+"-"+nameParts[1].replace("[","");return fieldId}function disableSubmitButton($form){$form.find('input[type="submit"], input[type="button"], button[type="submit"]').attr("disabled",
5
+ "disabled")}function enableSubmitButton($form){$form.find('input[type="submit"], input[type="button"], button[type="submit"]').removeAttr("disabled")}function disableSaveDraft($form){$form.find("a.frm_save_draft").css("pointer-events","none")}function enableSaveDraft($form){$form.find("a.frm_save_draft").css("pointer-events","")}function validateForm(object){var r,rl,n,nl,fields,field,value,requiredFields,errors=[];requiredFields=jQuery(object).find(".frm_required_field:visible input, .frm_required_field:visible select, .frm_required_field:visible textarea").filter(":not(.frm_optional)");
6
+ if(requiredFields.length)for(r=0,rl=requiredFields.length;r<rl;r++)errors=checkRequiredField(requiredFields[r],errors);fields=jQuery(object).find("input,select,textarea");if(fields.length)for(n=0,nl=fields.length;n<nl;n++){field=fields[n];value=field.value;if(value!=="")if(field.type==="hidden");else if(field.type==="number")errors=checkNumberField(field,errors);else if(field.type==="email")errors=checkEmailField(field,errors);else if(field.type==="password")errors=checkPasswordField(field,errors);
7
+ else if(field.type==="url")errors=checkUrlField(field,errors);else if(field.pattern!==null)errors=checkPatternField(field,errors)}errors=validateRecaptcha(object,errors);return errors}function maybeValidateChange(fieldId,field){if(field.type==="url")maybeAddHttpToUrl(field);if(jQuery(field).closest("form").hasClass("frm_js_validate"))validateField(fieldId,field)}function maybeAddHttpToUrl(field){var url=field.value;var matches=url.match(/^(https?|ftps?|mailto|news|feed|telnet):/);if(field.value!==
8
+ ""&&matches===null)field.value="http://"+url}function validateField(fieldId,field){var key,errors=[];var $fieldCont=jQuery(field).closest(".frm_form_field");if($fieldCont.hasClass("frm_required_field")&&!jQuery(field).hasClass("frm_optional"))errors=checkRequiredField(field,errors);if(errors.length<1)if(field.type==="email")errors=checkEmailField(field,errors);else if(field.type==="password")errors=checkPasswordField(field,errors);else if(field.type==="number")errors=checkNumberField(field,errors);
9
+ else if(field.type==="url")errors=checkUrlField(field,errors);else if(field.pattern!==null)errors=checkPatternField(field,errors);removeFieldError($fieldCont);if(Object.keys(errors).length>0)for(key in errors)addFieldError($fieldCont,key,errors)}function checkRequiredField(field,errors){var checkGroup,fieldClasses,tempVal,i,placeholder,val="",fieldID="",fileID=field.getAttribute("data-frmfile");if(field.type==="hidden"&&fileID===null)return errors;if(field.type==="checkbox"||field.type==="radio"){checkGroup=
10
+ jQuery('input[name="'+field.name+'"]').closest(".frm_required_field").find("input:checked");jQuery(checkGroup).each(function(){val=this.value})}else if(field.type==="file"||fileID){if(typeof fileID==="undefined"){fileID=getFieldId(field,true);fileID=fileID.replace("file","")}if(typeof errors[fileID]==="undefined")val=getFileVals(fileID);fieldID=fileID}else{fieldClasses=field.className;if(fieldClasses.indexOf("frm_pos_none")!==-1)return errors;val=jQuery(field).val();if(val===null)val="";else if(typeof val!==
11
+ "string"){tempVal=val;val="";for(i=0;i<tempVal.length;i++)if(tempVal[i]!=="")val=tempVal[i]}if(fieldClasses.indexOf("frm_other_input")===-1)fieldID=getFieldId(field,true);else fieldID=getFieldId(field,false);if(fieldClasses.indexOf("frm_time_select")!==-1)fieldID=fieldID.replace("-H","").replace("-m","");placeholder=field.getAttribute("data-frmplaceholder");if(placeholder!==null&&val===placeholder)val=""}if(val===""){if(fieldID==="")fieldID=getFieldId(field,true);if(!(fieldID in errors))errors[fieldID]=
12
+ getFieldValidationMessage(field,"data-reqmsg")}return errors}function getFileVals(fileID){var val="",fileFields=jQuery('input[name="file'+fileID+'"], input[name="file'+fileID+'[]"], input[name^="item_meta['+fileID+']"]');fileFields.each(function(){if(val==="")val=this.value});return val}function checkUrlField(field,errors){var fieldID,url=field.value;if(url!==""&&!/^http(s)?:\/\/(?:localhost|(?:[\da-z\.-]+\.[\da-z\.-]+))/i.test(url)){fieldID=getFieldId(field,true);if(!(fieldID in errors))errors[fieldID]=
13
+ getFieldValidationMessage(field,"data-invmsg")}return errors}function checkEmailField(field,errors){var fieldID=getFieldId(field,true),pattern=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;if(""!==field.value&&pattern.test(field.value)===false)errors[fieldID]=getFieldValidationMessage(field,"data-invmsg");confirmField(field,errors);return errors}function checkPasswordField(field,errors){confirmField(field,
14
+ errors);return errors}function confirmField(field,errors){var value,confirmValue,firstField,fieldID=getFieldId(field,true),strippedId=field.id.replace("conf_",""),strippedFieldID=fieldID.replace("conf_",""),confirmField=document.getElementById(strippedId.replace("field_","field_conf_"));if(confirmField===null||typeof errors["conf_"+strippedFieldID]!=="undefined")return;if(fieldID!==strippedFieldID){firstField=document.getElementById(strippedId);value=firstField.value;confirmValue=confirmField.value;
15
+ if(""!==value&&""!==confirmValue&&value!==confirmValue)errors["conf_"+strippedFieldID]=getFieldValidationMessage(confirmField,"data-confmsg")}else validateField("conf_"+strippedFieldID,confirmField)}function checkNumberField(field,errors){var fieldID,number=field.value;if(number!==""&&isNaN(number/1)!==false){fieldID=getFieldId(field,true);if(!(fieldID in errors))errors[fieldID]=getFieldValidationMessage(field,"data-invmsg")}return errors}function checkPatternField(field,errors){var fieldID,text=
16
+ field.value,format=getFieldValidationMessage(field,"pattern");if(format!==""&&text!==""){fieldID=getFieldId(field,true);if(!(fieldID in errors)){format=new RegExp("^"+format+"$","i");if(format.test(text)===false)errors[fieldID]=getFieldValidationMessage(field,"data-invmsg")}}return errors}function hasInvisibleRecaptcha(object){var recaptcha,recaptchaID,alreadyChecked;if(isGoingToPrevPage(object))return false;recaptcha=jQuery(object).find('.frm-g-recaptcha[data-size="invisible"], .g-recaptcha[data-size="invisible"]');
17
+ if(recaptcha.length){recaptchaID=recaptcha.data("rid");alreadyChecked=grecaptcha.getResponse(recaptchaID);if(alreadyChecked.length===0)return recaptcha;else return false}else return false}function executeInvisibleRecaptcha(invisibleRecaptcha){var recaptchaID=invisibleRecaptcha.data("rid");grecaptcha.reset(recaptchaID);grecaptcha.execute(recaptchaID)}function validateRecaptcha(form,errors){var recaptchaID,response,fieldContainer,fieldID,$recaptcha=jQuery(form).find(".frm-g-recaptcha");if($recaptcha.length){recaptchaID=
18
+ $recaptcha.data("rid");try{response=grecaptcha.getResponse(recaptchaID)}catch(e){if(jQuery(form).find('input[name="recaptcha_checked"]').length)return errors;else response=""}if(response.length===0){fieldContainer=$recaptcha.closest(".frm_form_field");fieldID=fieldContainer.attr("id").replace("frm_field_","").replace("_container","");errors[fieldID]=""}}return errors}function getFieldValidationMessage(field,messageType){var msg=field.getAttribute(messageType);if(msg===null)msg="";return msg}function shouldJSValidate(object){var validate=
19
+ jQuery(object).hasClass("frm_js_validate");if(validate&&typeof frmProForm!=="undefined"&&(frmProForm.savingDraft(object)||frmProForm.goingToPreviousPage(object)))validate=false;return validate}function getFormErrors(object,action){var fieldset;if(typeof action==="undefined")jQuery(object).find('input[name="frm_action"]').val();fieldset=jQuery(object).find(".frm_form_field");fieldset.addClass("frm_doing_ajax");jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:jQuery(object).serialize()+"&action=frm_entries_"+
20
+ action+"&nonce="+frm_js.nonce,success:function(response){var formID,replaceContent,pageOrder,formReturned,contSubmit,delay,$fieldCont,key,inCollapsedSection,frmTrigger,defaultResponse={"content":"","errors":{},"pass":false};if(response===null)response=defaultResponse;response=response.replace(/^\s+|\s+$/g,"");if(response.indexOf("{")===0)response=jQuery.parseJSON(response);else response=defaultResponse;if(typeof response.redirect!=="undefined"){jQuery(document).trigger("frmBeforeFormRedirect",[object,
21
+ response]);window.location=response.redirect}else if(response.content!==""){removeSubmitLoading(jQuery(object));if(frm_js.offset!=-1)frmFrontForm.scrollMsg(jQuery(object),false);formID=jQuery(object).find('input[name="form_id"]').val();response.content=response.content.replace(/ frm_pro_form /g," frm_pro_form frm_no_hide ");replaceContent=jQuery(object).closest(".frm_forms");removeAddedScripts(replaceContent,formID);delay=maybeSlideOut(replaceContent,response.content);setTimeout(function(){var container,
22
+ input,previousInput;replaceContent.replaceWith(response.content);addUrlParam(response);if(typeof frmThemeOverride_frmAfterSubmit==="function"){pageOrder=jQuery('input[name="frm_page_order_'+formID+'"]').val();formReturned=jQuery(response.content).find('input[name="form_id"]').val();frmThemeOverride_frmAfterSubmit(formReturned,pageOrder,response.content,object)}if(typeof response.recaptcha!=="undefined"){container=jQuery("#frm_form_"+formID+"_container").find(".frm_fields_container");input='<input type="hidden" name="recaptcha_checked" value="'+
23
+ response.recaptcha+'">';previousInput=container.find('input[name="recaptcha_checked"]');if(previousInput.length)previousInput.replaceWith(input);else container.append(input)}afterFormSubmitted(object,response)},delay)}else if(Object.keys(response.errors).length){removeSubmitLoading(jQuery(object),"enable");contSubmit=true;removeAllErrors();$fieldCont=null;for(key in response.errors){$fieldCont=jQuery(object).find("#frm_field_"+key+"_container");if($fieldCont.length){if(!$fieldCont.is(":visible")){inCollapsedSection=
24
+ $fieldCont.closest(".frm_toggle_container");if(inCollapsedSection.length){frmTrigger=inCollapsedSection.prev();if(!frmTrigger.hasClass("frm_trigger"))frmTrigger=frmTrigger.prev(".frm_trigger");frmTrigger.click()}}if($fieldCont.is(":visible")){addFieldError($fieldCont,key,response.errors);contSubmit=false}}}jQuery(object).find(".frm-g-recaptcha, .g-recaptcha").each(function(){var $recaptcha=jQuery(this),recaptchaID=$recaptcha.data("rid");if(typeof grecaptcha!=="undefined"&&grecaptcha)if(recaptchaID)grecaptcha.reset(recaptchaID);
25
+ else grecaptcha.reset()});jQuery(document).trigger("frmFormErrors",[object,response]);fieldset.removeClass("frm_doing_ajax");scrollToFirstField(object);if(contSubmit)object.submit();else jQuery(object).prepend(response.error_message)}else{showFileLoading(object);object.submit()}},error:function(){jQuery(object).find('input[type="submit"], input[type="button"]').removeAttr("disabled");object.submit()}})}function afterFormSubmitted(object,response){var formCompleted=jQuery(response.content).find(".frm_message");
26
+ if(formCompleted.length)jQuery(document).trigger("frmFormComplete",[object,response]);else jQuery(document).trigger("frmPageChanged",[object,response])}function removeAddedScripts(formContainer,formID){var endReplace=jQuery(".frm_end_ajax_"+formID);if(endReplace.length){formContainer.nextUntil(".frm_end_ajax_"+formID).remove();endReplace.remove()}}function maybeSlideOut(oldContent,newContent){var c,newClass="frm_slideout";if(newContent.indexOf(" frm_slide")!==-1){c=oldContent.children();if(newContent.indexOf(" frm_going_back")!==
27
+ -1)newClass+=" frm_going_back";c.removeClass("frm_going_back");c.addClass(newClass);return 300}return 0}function addUrlParam(response){var url;if(history.pushState&&typeof response.page!=="undefined"){url=addQueryVar("frm_page",response.page);window.history.pushState({"html":response.html},"","?"+url)}}function addQueryVar(key,value){var kvp,i,x;key=encodeURI(key);value=encodeURI(value);kvp=document.location.search.substr(1).split("&");i=kvp.length;while(i--){x=kvp[i].split("=");if(x[0]==key){x[1]=
28
+ value;kvp[i]=x.join("=");break}}if(i<0)kvp[kvp.length]=[key,value].join("=");return kvp.join("&")}function addFieldError($fieldCont,key,jsErrors){var input,id,describedBy;if($fieldCont.length&&$fieldCont.is(":visible")){$fieldCont.addClass("frm_blank_field");input=$fieldCont.find("input, select, textarea");id="frm_error_field_"+key;describedBy=input.attr("aria-describedby");if(typeof frmThemeOverride_frmPlaceError==="function")frmThemeOverride_frmPlaceError(key,jsErrors);else{$fieldCont.append('<div class="frm_error" id="'+
29
+ id+'">'+jsErrors[key]+"</div>");if(typeof describedBy==="undefined")describedBy=id;else if(describedBy.indexOf(id)===-1)describedBy=describedBy+" "+id;input.attr("aria-describedby",describedBy)}input.attr("aria-invalid",true);jQuery(document).trigger("frmAddFieldError",[$fieldCont,key,jsErrors])}}function removeFieldError($fieldCont){var errorMessage=$fieldCont.find(".frm_error"),errorId=errorMessage.attr("id"),input=$fieldCont.find("input, select, textarea"),describedBy=input.attr("aria-describedby");
30
+ $fieldCont.removeClass("frm_blank_field has-error");errorMessage.remove();input.attr("aria-invalid",false);if(typeof describedBy!=="undefined"){describedBy=describedBy.replace(errorId,"");input.attr("aria-describedby",describedBy)}}function removeAllErrors(){jQuery(".form-field").removeClass("frm_blank_field has-error");jQuery(".form-field .frm_error").replaceWith("");jQuery(".frm_error_style").remove()}function scrollToFirstField(object){var field=jQuery(object).find(".frm_blank_field:first");if(field.length)frmFrontForm.scrollMsg(field,
31
+ object,true)}function showSubmitLoading($object){showLoadingIndicator($object);disableSubmitButton($object);disableSaveDraft($object)}function showLoadingIndicator($object){if(!$object.hasClass("frm_loading_form")&&!$object.hasClass("frm_loading_prev")){addLoadingClass($object);$object.trigger("frmStartFormLoading")}}function addLoadingClass($object){var loadingClass=isGoingToPrevPage($object)?"frm_loading_prev":"frm_loading_form";$object.addClass(loadingClass)}function isGoingToPrevPage($object){return typeof frmProForm!==
32
+ "undefined"&&frmProForm.goingToPreviousPage($object)}function removeSubmitLoading($object,enable,processesRunning){var loadingForm;if(processesRunning>0)return;loadingForm=jQuery(".frm_loading_form");loadingForm.removeClass("frm_loading_form");loadingForm.removeClass("frm_loading_prev");loadingForm.trigger("frmEndFormLoading");if(enable==="enable"){enableSubmitButton(loadingForm);enableSaveDraft(loadingForm)}}function showFileLoading(object){var fileval,loading=document.getElementById("frm_loading");
33
+ if(loading!==null){fileval=jQuery(object).find("input[type=file]").val();if(typeof fileval!=="undefined"&&fileval!=="")setTimeout(function(){jQuery(loading).fadeIn("slow")},2E3)}}function clearDefault(){toggleDefault(jQuery(this),"clear")}function replaceDefault(){toggleDefault(jQuery(this),"replace")}function toggleDefault($thisField,e){var thisVal,v=$thisField.data("frmval").replace(/(\n|\r\n)/g,"\r");if(v===""||typeof v==="undefined")return false;thisVal=$thisField.val().replace(/(\n|\r\n)/g,"\r");
34
+ if("replace"===e){if(thisVal==="")$thisField.addClass("frm_default").val(v)}else if(thisVal==v)$thisField.removeClass("frm_default").val("")}function resendEmail(){var $link=jQuery(this),entryId=this.getAttribute("data-eid"),formId=this.getAttribute("data-fid"),label=$link.find(".frm_link_label");if(label.length<1)label=$link;label.append('<span class="frm-wait"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_send_email",entry_id:entryId,form_id:formId,nonce:frm_js.nonce},
35
+ success:function(msg){var admin=document.getElementById("wpbody");if(admin===null)label.html(msg);else{label.html("");$link.after(msg)}}});return false}function confirmClick(){var message=jQuery(this).data("frmconfirm");return confirm(message)}function toggleDiv(){var div=jQuery(this).data("frmtoggle");if(jQuery(div).is(":visible"))jQuery(div).slideUp("fast");else jQuery(div).slideDown("fast");return false}function addIndexOfFallbackForIE8(){var len,from;if(!Array.prototype.indexOf)Array.prototype.indexOf=
36
+ function(elt){len=this.length>>>0;from=Number(arguments[1])||0;from=from<0?Math.ceil(from):Math.floor(from);if(from<0)from+=len;for(;from<len;from++)if(from in this&&this[from]===elt)return from;return-1}}function addTrimFallbackForIE8(){if(typeof String.prototype.trim!=="function")String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}}function addFilterFallbackForIE8(){var t,len,res,thisp,i,val;if(!Array.prototype.filter)Array.prototype.filter=function(fun){if(this===void 0||this===
37
+ null)throw new TypeError;t=Object(this);len=t.length>>>0;if(typeof fun!=="function")throw new TypeError;res=[];thisp=arguments[1];for(i=0;i<len;i++)if(i in t){val=t[i];if(fun.call(thisp,val,i,t))res.push(val)}return res}}function addKeysFallbackForIE8(){var keys,i;if(!Object.keys)Object.keys=function(obj){keys=[];for(i in obj)if(obj.hasOwnProperty(i))keys.push(i);return keys}}return{init:function(){jQuery(document).off("submit.formidable",".frm-show-form");jQuery(document).on("submit.formidable",
38
+ ".frm-show-form",frmFrontForm.submitForm);jQuery(".frm-show-form input[onblur], .frm-show-form textarea[onblur]").each(function(){if(jQuery(this).val()==="")jQuery(this).blur()});jQuery(document).on("focus",".frm_toggle_default",clearDefault);jQuery(document).on("blur",".frm_toggle_default",replaceDefault);jQuery(".frm_toggle_default").blur();jQuery(document.getElementById("frm_resend_email")).click(resendEmail);jQuery(document).on("change",'.frm-show-form input[name^="item_meta"], .frm-show-form select[name^="item_meta"], .frm-show-form textarea[name^="item_meta"]',
39
+ frmFrontForm.fieldValueChanged);jQuery(document).on("change keyup",".frm-show-form .frm_inside_container input, .frm-show-form .frm_inside_container select, .frm-show-form .frm_inside_container textarea",maybeShowLabel);jQuery(document).on("click","a[data-frmconfirm]",confirmClick);jQuery("a[data-frmtoggle]").click(toggleDiv);addIndexOfFallbackForIE8();addTrimFallbackForIE8();addFilterFallbackForIE8();addKeysFallbackForIE8()},getFieldId:function(field,fullID){return getFieldId(field,fullID)},renderRecaptcha:function(captcha){var formID,
40
+ recaptchaID,size=captcha.getAttribute("data-size"),rendered=captcha.getAttribute("data-rid")!==null,params={"sitekey":captcha.getAttribute("data-sitekey"),"size":size,"theme":captcha.getAttribute("data-theme")};if(rendered)return;if(size==="invisible"){formID=jQuery(captcha).closest("form").find('input[name="form_id"]').val();jQuery(captcha).closest(".frm_form_field .frm_primary_label").hide();params.callback=function(token){frmFrontForm.afterRecaptcha(token,formID)}}recaptchaID=grecaptcha.render(captcha.id,
41
+ params);captcha.setAttribute("data-rid",recaptchaID)},afterSingleRecaptcha:function(){var object=jQuery(".frm-show-form .g-recaptcha").closest("form")[0];frmFrontForm.submitFormNow(object)},afterRecaptcha:function(token,formID){var object=jQuery("#frm_form_"+formID+"_container form")[0];frmFrontForm.submitFormNow(object)},submitForm:function(e){frmFrontForm.submitFormManual(e,this)},submitFormManual:function(e,object){var isPro,errors,invisibleRecaptcha=hasInvisibleRecaptcha(object),classList=object.className.trim().split(/\s+/gi);
42
+ if(classList&&invisibleRecaptcha.length<1){isPro=classList.indexOf("frm_pro_form")>-1;if(!isPro)return}if(jQuery("body").hasClass("wp-admin")&&jQuery(object).closest(".frmapi-form").length<1)return;e.preventDefault();if(typeof frmProForm!=="undefined"&&typeof frmProForm.submitAllowed==="function")if(!frmProForm.submitAllowed(object))return;if(invisibleRecaptcha.length){showLoadingIndicator(jQuery(object));executeInvisibleRecaptcha(invisibleRecaptcha)}else{errors=frmFrontForm.validateFormSubmit(object);
43
+ if(Object.keys(errors).length===0){showSubmitLoading(jQuery(object));frmFrontForm.submitFormNow(object,classList)}}},submitFormNow:function(object){var hasFileFields,classList=object.className.trim().split(/\s+/gi);if(classList.indexOf("frm_ajax_submit")>-1){hasFileFields=jQuery(object).find('input[type="file"]').filter(function(){return!!this.value}).length;if(hasFileFields<1){action=jQuery(object).find('input[name="frm_action"]').val();frmFrontForm.checkFormErrors(object,action)}else object.submit()}else object.submit()},
44
+ validateFormSubmit:function(object){if(typeof tinyMCE!=="undefined"&&jQuery(object).find(".wp-editor-wrap").length)tinyMCE.triggerSave();jsErrors=[];if(shouldJSValidate(object)){frmFrontForm.getAjaxFormErrors(object);if(Object.keys(jsErrors).length)frmFrontForm.addAjaxFormErrors(object)}return jsErrors},getAjaxFormErrors:function(object){var customErrors,key;jsErrors=validateForm(object);if(typeof frmThemeOverride_jsErrors==="function"){action=jQuery(object).find('input[name="frm_action"]').val();
45
+ customErrors=frmThemeOverride_jsErrors(action,object);if(Object.keys(customErrors).length)for(key in customErrors)jsErrors[key]=customErrors[key]}return jsErrors},addAjaxFormErrors:function(object){var key,$fieldCont;removeAllErrors();for(key in jsErrors){$fieldCont=jQuery(object).find("#frm_field_"+key+"_container");if($fieldCont.length)addFieldError($fieldCont,key,jsErrors);else delete jsErrors[key]}scrollToFirstField(object)},checkFormErrors:function(object,action){getFormErrors(object,action)},
46
+ checkRequiredField:function(field,errors){return checkRequiredField(field,errors)},showSubmitLoading:function($object){showSubmitLoading($object)},removeSubmitLoading:function($object,enable,processesRunning){removeSubmitLoading($object,enable,processesRunning)},scrollToID:function(id){var object=jQuery(document.getElementById(id));frmFrontForm.scrollMsg(object,false)},scrollMsg:function(id,object,animate){var newPos,m,b,screenTop,screenBottom,scrollObj="";if(typeof object==="undefined"){scrollObj=
47
+ jQuery(document.getElementById("frm_form_"+id+"_container"));if(scrollObj.length<1)return}else if(typeof id==="string")scrollObj=jQuery(object).find("#frm_field_"+id+"_container");else scrollObj=id;scrollObj.focus();newPos=scrollObj.offset().top;if(!newPos||frm_js.offset==="-1")return;newPos=newPos-frm_js.offset;m=jQuery("html").css("margin-top");b=jQuery("body").css("margin-top");if(m||b)newPos=newPos-parseInt(m)-parseInt(b);if(newPos&&window.innerHeight){screenTop=document.documentElement.scrollTop||
48
+ document.body.scrollTop;screenBottom=screenTop+window.innerHeight;if(newPos>screenBottom||newPos<screenTop){if(typeof animate==="undefined")jQuery(window).scrollTop(newPos);else jQuery("html,body").animate({scrollTop:newPos},500);return false}}},fieldValueChanged:function(e){var fieldId=frmFrontForm.getFieldId(this,false);if(!fieldId||typeof fieldId==="undefined")return;if(e.frmTriggered&&e.frmTriggered==fieldId)return;jQuery(document).trigger("frmFieldChanged",[this,fieldId,e]);if(e.selfTriggered!==
49
+ true)maybeValidateChange(fieldId,this)},savingDraft:function(object){console.warn("DEPRECATED: function frmFrontForm.savingDraft in v3.0 use frmProForm.savingDraft");if(typeof frmProForm!=="undefined")return frmProForm.savingDraft(object)},goingToPreviousPage:function(object){console.warn("DEPRECATED: function frmFrontForm.goingToPreviousPage in v3.0 use frmProForm.goingToPreviousPage");if(typeof frmProForm!=="undefined")return frmProForm.goingToPreviousPage(object)},hideOrShowFields:function(){console.warn("DEPRECATED: function frmFrontForm.hideOrShowFields in v3.0 use frmProForm.hideOrShowFields");
50
+ if(typeof frmProForm!=="undefined")frmProForm.hideOrShowFields()},hidePreviouslyHiddenFields:function(){console.warn("DEPRECATED: function frmFrontForm.hidePreviouslyHiddenFields in v3.0 use frmProForm.hidePreviouslyHiddenFields");if(typeof frmProForm!=="undefined")frmProForm.hidePreviouslyHiddenFields()},checkDependentDynamicFields:function(ids){console.warn("DEPRECATED: function frmFrontForm.checkDependentDynamicFields in v3.0 use frmProForm.checkDependentDynamicFields");if(typeof frmProForm!==
51
+ "undefined")frmProForm.checkDependentDynamicFields(ids)},checkDependentLookupFields:function(ids){console.warn("DEPRECATED: function frmFrontForm.checkDependentLookupFields in v3.0 use frmProForm.checkDependentLookupFields");if(typeof frmProForm!=="undefined")frmProForm.checkDependentLookupFields(ids)},loadGoogle:function(){console.warn("DEPRECATED: function frmFrontForm.loadGoogle in v3.0 use frmProForm.loadGoogle");frmProForm.loadGoogle()},escapeHtml:function(text){return text.replace(/&/g,"&amp;").replace(/</g,
52
+ "&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")},invisible:function(classes){jQuery(classes).css("visibility","hidden")},visible:function(classes){jQuery(classes).css("visibility","visible")}}}frmFrontForm=frmFrontFormJS();jQuery(document).ready(function(){frmFrontForm.init()});function frmRecaptcha(){var c,cl,captchas=jQuery(".frm-g-recaptcha");for(c=0,cl=captchas.length;c<cl;c++)frmFrontForm.renderRecaptcha(captchas[c])}
53
+ function frmAfterRecaptcha(token){frmFrontForm.afterSingleRecaptcha(token)}
54
  function frmUpdateField(entryId,fieldId,value,message,num){jQuery(document.getElementById("frm_update_field_"+entryId+"_"+fieldId+"_"+num)).html('<span class="frm-loading-img"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_update_field_ajax",entry_id:entryId,field_id:fieldId,value:value,nonce:frm_js.nonce},success:function(){if(message.replace(/^\s+|\s+$/g,"")==="")jQuery(document.getElementById("frm_update_field_"+entryId+"_"+fieldId+"_"+num)).fadeOut("slow");else jQuery(document.getElementById("frm_update_field_"+
55
  entryId+"_"+fieldId+"_"+num)).replaceWith(message)}})}
56
  function frmDeleteEntry(entryId,prefix){console.warn("DEPRECATED: function frmDeleteEntry in v2.0.13 use frmFrontForm.deleteEntry");jQuery(document.getElementById("frm_delete_"+entryId)).replaceWith('<span class="frm-loading-img" id="frm_delete_'+entryId+'"></span>');jQuery.ajax({type:"POST",url:frm_js.ajax_url,data:{action:"frm_entries_destroy",entry:entryId,nonce:frm_js.nonce},success:function(html){if(html.replace(/^\s+|\s+$/g,"")==="success")jQuery(document.getElementById(prefix+entryId)).fadeOut("slow");
js/formidable_admin.js CHANGED
@@ -300,7 +300,8 @@ function frmAdminBuildJS() {
300
  cancelSort = false,
301
  copyHelper = false,
302
  fieldsUpdated = 0,
303
- thisFormId = 0;
 
304
 
305
  if ( thisForm !== null ) {
306
  thisFormId = thisForm.value;
@@ -494,7 +495,9 @@ function frmAdminBuildJS() {
494
 
495
  function loadTooltips() {
496
  var wrapClass = jQuery( '.wrap, .frm_wrap' ),
497
- confirmModal = document.getElementById( 'frm_confirm_modal' );
 
 
498
 
499
  jQuery( confirmModal ).on( 'click', '[data-deletefield]', deleteFieldConfirmed );
500
  jQuery( confirmModal ).on( 'click', '[data-removeid]', removeThisTag );
@@ -514,6 +517,39 @@ function frmAdminBuildJS() {
514
  });
515
 
516
  jQuery( '.frm_bstooltip, .frm_help' ).tooltip( );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
  }
518
 
519
  function removeThisTag() {
@@ -2329,6 +2365,146 @@ function frmAdminBuildJS() {
2329
  return false;
2330
  }
2331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2332
  function updateGetValueFieldSelection() {
2333
  /*jshint validthis:true */
2334
  var fieldID = this.id.replace( 'get_values_form_', '' );
@@ -3183,6 +3359,37 @@ function frmAdminBuildJS() {
3183
  return false;
3184
  }
3185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3186
  /**
3187
  * Get rid of empty container that inserts extra space.
3188
  */
@@ -3391,6 +3598,7 @@ function frmAdminBuildJS() {
3391
  function afterFormSave( $button, buttonVal ) {
3392
  $button.removeClass( 'frm_loading_form' ).removeClass( 'frm_loading_button' );
3393
  $button.html( frm_admin_js.saved );
 
3394
  fieldsUpdated = 0;
3395
 
3396
  setTimeout( function() {
@@ -5052,8 +5260,9 @@ function frmAdminBuildJS() {
5052
 
5053
  multiselectAccessibility();
5054
  },
5055
- onChange: function( event ) {
5056
  multiselectAccessibility();
 
5057
  }
5058
  });
5059
  });
@@ -5098,25 +5307,10 @@ function frmAdminBuildJS() {
5098
  plugin: plugin
5099
  },
5100
  success: function( response ) {
5101
- // If there is a WP Error instance, output it here and quit the script.
5102
- if ( response.error ) {
5103
- addonError( response, el, button );
5104
- return;
5105
- }
5106
-
5107
- // If we need more credentials, output the form sent back to us.
5108
- if ( response.form ) {
5109
- // Display the form to gather the users credentials.
5110
-
5111
- button.append( '<div class="frm-addon-error frm_error_style">' + response.form + '</div>' );
5112
- loader.hide();
5113
-
5114
- // Add a disabled attribute the install button if the creds are needed.
5115
- button.attr( 'disabled', true );
5116
-
5117
- el.on( 'click', '#upgrade', 'installAddonWithCreds' );
5118
 
5119
- // No need to move further if we need to enter our creds.
 
5120
  return;
5121
  }
5122
 
@@ -5133,8 +5327,9 @@ function frmAdminBuildJS() {
5133
  e.preventDefault();
5134
 
5135
  // Now let's make another Ajax request once the user has submitted their credentials.
5136
- var proceed = jQuery( this );
5137
- var el = proceed.parent().parent();
 
5138
 
5139
  proceed.addClass( 'frm_loading_button' );
5140
 
@@ -5153,17 +5348,10 @@ function frmAdminBuildJS() {
5153
  password: el.find( '#password' ).val()
5154
  },
5155
  success: function( response ) {
5156
- // If there is a WP Error instance, output it here and quit the script.
5157
- if ( response.error ) {
5158
- addonError( response, el, button );
5159
- return;
5160
- }
5161
 
5162
- if ( response.form ) {
5163
- loader.hide();
5164
- jQuery( '.frm-inline-error' ).remove();
5165
- //proceed.val(admin.proceed);
5166
- //proceed.after('<span class="frm-inline-error">' + admin.connect_error + '</span>' );
5167
  return;
5168
  }
5169
 
@@ -5196,10 +5384,42 @@ function frmAdminBuildJS() {
5196
  }
5197
  }
5198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5199
  function addonError( response, el, button ) {
5200
- el.append( '<div class="frm-addon-error frm_error_style"><p><strong>' + response.error + '</strong></p></div>' );
5201
- button.removeClass( 'frm_loading_button' );
5202
- jQuery( '.frm-addon-error' ).delay( 4000 ).fadeOut();
 
 
 
 
 
 
 
 
 
 
5203
  }
5204
 
5205
  /* Templates */
@@ -5819,6 +6039,8 @@ function frmAdminBuildJS() {
5819
  });
5820
  clickTab( jQuery( '.starttab a' ), 'auto' );
5821
 
 
 
5822
  // submit the search form with dropdown
5823
  jQuery( '#frm-fid-search-menu a' ).click( function() {
5824
  var val = this.id.replace( 'fid-', '' );
@@ -5902,6 +6124,7 @@ function frmAdminBuildJS() {
5902
  $builderForm.on( 'change', '.frm_logic_field_opts', getFieldValues );
5903
  $builderForm.on( 'change', '.scale_maxnum, .scale_minnum', setScaleValues );
5904
  $builderForm.on( 'change', '.radio_maxnum', setStarValues );
 
5905
 
5906
  jQuery( document.getElementById( 'frm-insert-fields' ) ).on( 'click', '.frm_add_field', addFieldClick );
5907
  $newFields.on( 'click', '.frm_clone_field', duplicateField );
@@ -5962,12 +6185,15 @@ function frmAdminBuildJS() {
5962
  $builderForm.on( 'change', 'select[name^="field_options[form_select_"]', maybeChangeEmbedFormMsg );
5963
 
5964
  jQuery( document ).on( 'submit', '#frm_js_build_form', buildSubmittedNoAjax );
5965
- jQuery( document ).on( 'change', '#frm_builder_page input, #frm_builder_page select', fieldUpdated );
5966
 
5967
  popAllProductFields();
5968
 
5969
  jQuery( document ).on( 'change', '.frmjs_prod_data_type_opt', toggleProductType );
5970
 
 
 
 
5971
  initBulkOptionsOverlay();
5972
  hideEmptyEle();
5973
  maybeDisableAddSummaryBtn();
@@ -6120,6 +6346,8 @@ function frmAdminBuildJS() {
6120
  }
6121
  });
6122
 
 
 
6123
  // Page Selection Autocomplete
6124
  initSelectionAutocomplete();
6125
  },
300
  cancelSort = false,
301
  copyHelper = false,
302
  fieldsUpdated = 0,
303
+ thisFormId = 0,
304
+ optionMap = {};
305
 
306
  if ( thisForm !== null ) {
307
  thisFormId = thisForm.value;
495
 
496
  function loadTooltips() {
497
  var wrapClass = jQuery( '.wrap, .frm_wrap' ),
498
+ confirmModal = document.getElementById( 'frm_confirm_modal' ),
499
+ doAction = false,
500
+ confirmedBulkDelete = false;
501
 
502
  jQuery( confirmModal ).on( 'click', '[data-deletefield]', deleteFieldConfirmed );
503
  jQuery( confirmModal ).on( 'click', '[data-removeid]', removeThisTag );
517
  });
518
 
519
  jQuery( '.frm_bstooltip, .frm_help' ).tooltip( );
520
+
521
+ jQuery( document ).on( 'click', '#doaction, #doaction2', function( event ) {
522
+ var link,
523
+ isTop = this.id === 'doaction',
524
+ suffix = isTop ? 'top' : 'bottom',
525
+ bulkActionSelector = document.getElementById( 'bulk-action-selector-' + suffix ),
526
+ confirmBulkDelete = document.getElementById( 'confirm-bulk-delete-' + suffix );
527
+
528
+ if ( bulkActionSelector !== null && confirmBulkDelete !== null ) {
529
+ doAction = this;
530
+
531
+ if ( ! confirmedBulkDelete && bulkActionSelector.value === 'bulk_delete' ) {
532
+ event.preventDefault();
533
+ confirmLinkClick( confirmBulkDelete );
534
+ return false;
535
+ }
536
+ } else {
537
+ doAction = false;
538
+ }
539
+ });
540
+
541
+ jQuery( document ).on( 'click', '#frm-confirmed-click', function( event ) {
542
+ if ( doAction === false ) {
543
+ return;
544
+ }
545
+
546
+ if ( this.getAttribute( 'href' ) === 'confirm-bulk-delete' ) {
547
+ event.preventDefault();
548
+ confirmedBulkDelete = true;
549
+ doAction.click();
550
+ return false;
551
+ }
552
+ });
553
  }
554
 
555
  function removeThisTag() {
2365
  return false;
2366
  }
2367
 
2368
+ function resetOptionTextDetails() {
2369
+ jQuery( '.frm-single-settings ul input[type="text"][name^="field_options[options_"]' ).filter( '[data-value-on-load]' ).removeAttr( 'data-value-on-load' );
2370
+ jQuery( 'input[type="hidden"][name^=optionmap]' ).remove();
2371
+ }
2372
+
2373
+ function optionTextAlreadyExists( input ) {
2374
+ var fieldId = jQuery( input ).closest( '.frm-single-settings' ).attr( 'data-fid' ),
2375
+ optionInputs = jQuery( input ).closest( 'ul' ).get( 0 ).querySelectorAll( '.field_' + fieldId + '_option' ),
2376
+ index,
2377
+ optionInput;
2378
+
2379
+ for ( index in optionInputs ) {
2380
+ optionInput = optionInputs[ index ];
2381
+ if ( optionInput.id !== input.id && optionInput.value === input.value && optionInput.getAttribute( 'data-duplicate' ) !== 'true' ) {
2382
+ return true;
2383
+ }
2384
+ }
2385
+
2386
+ return false;
2387
+ }
2388
+
2389
+ function onOptionTextFocus() {
2390
+ var input,
2391
+ fieldId;
2392
+
2393
+ if ( this.getAttribute( 'data-value-on-load' ) === null ) {
2394
+ this.setAttribute( 'data-value-on-load', this.value );
2395
+
2396
+ fieldId = jQuery( this ).closest( '.frm-single-settings' ).attr( 'data-fid' );
2397
+ input = document.createElement( 'input' );
2398
+ input.value = this.value;
2399
+ input.setAttribute( 'type', 'hidden' );
2400
+ input.setAttribute( 'name', 'optionmap[' + fieldId + '][' + this.value + ']' );
2401
+ this.parentNode.appendChild( input );
2402
+
2403
+ if ( typeof optionMap[ fieldId ] === 'undefined' ) {
2404
+ optionMap[ fieldId ] = {};
2405
+ }
2406
+
2407
+ optionMap[ fieldId ][ this.value ] = input;
2408
+ }
2409
+
2410
+ if ( this.getAttribute( 'data-duplicate' ) === 'true' ) {
2411
+ this.removeAttribute( 'data-duplicate' );
2412
+
2413
+ // we want to use original value if actually still a duplicate
2414
+ if ( optionTextAlreadyExists( this ) ) {
2415
+ this.setAttribute( 'data-value-on-focus', this.getAttribute( 'data-value-on-load' ) );
2416
+ return;
2417
+ }
2418
+ }
2419
+
2420
+ this.setAttribute( 'data-value-on-focus', this.value );
2421
+ }
2422
+
2423
+ function onOptionTextBlur() {
2424
+ var originalValue,
2425
+ oldValue = this.getAttribute( 'data-value-on-focus' ),
2426
+ newValue = this.value,
2427
+ fieldId,
2428
+ fieldIndex,
2429
+ logicId,
2430
+ row,
2431
+ rowLength,
2432
+ rowIndex,
2433
+ valueSelect,
2434
+ opts,
2435
+ fieldIds,
2436
+ settingId,
2437
+ setting,
2438
+ optionMatches,
2439
+ option;
2440
+
2441
+ if ( oldValue === newValue ) {
2442
+ return;
2443
+ }
2444
+
2445
+ fieldId = jQuery( this ).closest( '.frm-single-settings' ).attr( 'data-fid' );
2446
+ originalValue = this.getAttribute( 'data-value-on-load' );
2447
+
2448
+ // check if the newValue is already mapped to another option
2449
+ // if it is, mark as duplicate and return
2450
+ if ( optionTextAlreadyExists( this ) ) {
2451
+ this.setAttribute( 'data-duplicate', 'true' );
2452
+
2453
+ if ( typeof optionMap[ fieldId ] !== 'undefined' && typeof optionMap[ fieldId ][ originalValue ] !== 'undefined' ) {
2454
+ // unmap any other change that may have happened before instead of changing it to something unused
2455
+ optionMap[ fieldId ][ originalValue ].value = originalValue;
2456
+ }
2457
+
2458
+ return;
2459
+ }
2460
+
2461
+ if ( typeof optionMap[ fieldId ] !== 'undefined' && typeof optionMap[ fieldId ][ originalValue ] !== 'undefined' ) {
2462
+ optionMap[ fieldId ][ originalValue ].value = newValue;
2463
+ }
2464
+
2465
+ fieldIds = [];
2466
+ rows = document.getElementById( 'frm_builder_page' ).querySelectorAll( '.frm_logic_row' );
2467
+ rowLength = rows.length;
2468
+ for ( rowIndex = 0; rowIndex < rowLength; rowIndex++ ) {
2469
+ row = rows[ rowIndex ];
2470
+ opts = row.querySelector( '.frm_logic_field_opts' );
2471
+
2472
+ if ( opts.value !== fieldId ) {
2473
+ continue;
2474
+ }
2475
+
2476
+ logicId = row.id.split( '_' )[ 2 ];
2477
+ valueSelect = row.querySelector( 'select[name="field_options[hide_opt_' + logicId + '][]"]' );
2478
+ optionMatches = valueSelect.querySelectorAll( 'option[value="' + oldValue + '"]' );
2479
+
2480
+ if ( ! optionMatches.length ) {
2481
+ optionMatches = valueSelect.querySelectorAll( 'option[value="' + newValue + '"]' );
2482
+
2483
+ if ( ! optionMatches.length ) {
2484
+ option = document.createElement( 'option' );
2485
+ valueSelect.appendChild( option );
2486
+ }
2487
+ }
2488
+
2489
+ if ( optionMatches.length ) {
2490
+ option = optionMatches[ optionMatches.length - 1 ];
2491
+ }
2492
+
2493
+ option.setAttribute( 'value', newValue );
2494
+ option.textContent = newValue;
2495
+
2496
+ if ( fieldIds.indexOf( logicId ) === -1 ) {
2497
+ fieldIds.push( logicId );
2498
+ }
2499
+ }
2500
+
2501
+ for ( fieldIndex in fieldIds ) {
2502
+ settingId = fieldIds[ fieldIndex ];
2503
+ setting = document.getElementById( 'frm-single-settings-' + settingId );
2504
+ moveFieldSettings( setting );
2505
+ }
2506
+ }
2507
+
2508
  function updateGetValueFieldSelection() {
2509
  /*jshint validthis:true */
2510
  var fieldID = this.id.replace( 'get_values_form_', '' );
3359
  return false;
3360
  }
3361
 
3362
+ function adjustVisibilityValuesForEveryoneValues( element, option ) {
3363
+ if ( '' === option.getAttribute( 'value' ) ) {
3364
+ onEveryoneOptionSelected( jQuery( this ) );
3365
+ } else {
3366
+ unselectEveryoneOptionIfSelected( jQuery( this ) );
3367
+ }
3368
+ }
3369
+
3370
+ function onEveryoneOptionSelected( $select ) {
3371
+ $select.val( '' );
3372
+ $select.next( '.btn-group' ).find( '.multiselect-container li input[value!=""]' ).prop( 'checked', false );
3373
+ }
3374
+
3375
+ function unselectEveryoneOptionIfSelected( $select ) {
3376
+ var selectedValues = $select.val(),
3377
+ index;
3378
+
3379
+ if ( selectedValues === null ) {
3380
+ $select.next( '.btn-group' ).find( '.multiselect-container li input[value=""]' ).prop( 'checked', true );
3381
+ onEveryoneOptionSelected( $select );
3382
+ return;
3383
+ }
3384
+
3385
+ index = selectedValues.indexOf( '' );
3386
+ if ( index >= 0 ) {
3387
+ selectedValues.splice( index, 1 );
3388
+ $select.val( selectedValues );
3389
+ $select.next( '.btn-group' ).find( '.multiselect-container li input[value=""]' ).prop( 'checked', false );
3390
+ }
3391
+ }
3392
+
3393
  /**
3394
  * Get rid of empty container that inserts extra space.
3395
  */
3598
  function afterFormSave( $button, buttonVal ) {
3599
  $button.removeClass( 'frm_loading_form' ).removeClass( 'frm_loading_button' );
3600
  $button.html( frm_admin_js.saved );
3601
+ resetOptionTextDetails();
3602
  fieldsUpdated = 0;
3603
 
3604
  setTimeout( function() {
5260
 
5261
  multiselectAccessibility();
5262
  },
5263
+ onChange: function( element, option ) {
5264
  multiselectAccessibility();
5265
+ $select.trigger( 'frm-multiselect-changed', element, option );
5266
  }
5267
  });
5268
  });
5307
  plugin: plugin
5308
  },
5309
  success: function( response ) {
5310
+ var error = extractErrorFromAddOnResponse( response );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5311
 
5312
+ if ( error ) {
5313
+ addonError( error, el, button );
5314
  return;
5315
  }
5316
 
5327
  e.preventDefault();
5328
 
5329
  // Now let's make another Ajax request once the user has submitted their credentials.
5330
+ var proceed = jQuery( this ),
5331
+ el = proceed.parent().parent(),
5332
+ plugin = proceed.attr( 'rel' );
5333
 
5334
  proceed.addClass( 'frm_loading_button' );
5335
 
5348
  password: el.find( '#password' ).val()
5349
  },
5350
  success: function( response ) {
5351
+ var error = extractErrorFromAddOnResponse( response );
 
 
 
 
5352
 
5353
+ if ( error ) {
5354
+ addonError( error, el, proceed );
 
 
 
5355
  return;
5356
  }
5357
 
5384
  }
5385
  }
5386
 
5387
+ function extractErrorFromAddOnResponse( response ) {
5388
+ var $message, text;
5389
+
5390
+ if ( typeof response !== 'string' ) {
5391
+ if ( typeof response.success !== 'undefined' && response.success ) {
5392
+ return false;
5393
+ }
5394
+
5395
+ if ( response.form ) {
5396
+ if ( jQuery( response.form ).is( '#message' ) ) {
5397
+ return {
5398
+ message: jQuery( response.form ).find( 'p' ).html()
5399
+ };
5400
+ }
5401
+ }
5402
+
5403
+ return response;
5404
+ }
5405
+
5406
+ return false;
5407
+ }
5408
+
5409
  function addonError( response, el, button ) {
5410
+ if ( response.form ) {
5411
+ jQuery( '.frm-inline-error' ).remove();
5412
+ button.closest( '.frm-card' )
5413
+ .html( response.form )
5414
+ .css({ padding: 5 })
5415
+ .find( '#upgrade' )
5416
+ .attr( 'rel', button.attr( 'rel' ) )
5417
+ .click( installAddonWithCreds );
5418
+ } else {
5419
+ el.append( '<div class="frm-addon-error frm_error_style"><p><strong>' + response.message + '</strong></p></div>' );
5420
+ button.removeClass( 'frm_loading_button' );
5421
+ jQuery( '.frm-addon-error' ).delay( 4000 ).fadeOut();
5422
+ }
5423
  }
5424
 
5425
  /* Templates */
6039
  });
6040
  clickTab( jQuery( '.starttab a' ), 'auto' );
6041
 
6042
+ jQuery( '.post-type-frm_display #screen-options-wrap:hidden input[type="checkbox"]' ).attr( 'disabled', true );
6043
+
6044
  // submit the search form with dropdown
6045
  jQuery( '#frm-fid-search-menu a' ).click( function() {
6046
  var val = this.id.replace( 'fid-', '' );
6124
  $builderForm.on( 'change', '.frm_logic_field_opts', getFieldValues );
6125
  $builderForm.on( 'change', '.scale_maxnum, .scale_minnum', setScaleValues );
6126
  $builderForm.on( 'change', '.radio_maxnum', setStarValues );
6127
+ $builderForm.on( 'frm-multiselect-changed', 'select[name^="field_options[admin_only_"]', adjustVisibilityValuesForEveryoneValues );
6128
 
6129
  jQuery( document.getElementById( 'frm-insert-fields' ) ).on( 'click', '.frm_add_field', addFieldClick );
6130
  $newFields.on( 'click', '.frm_clone_field', duplicateField );
6185
  $builderForm.on( 'change', 'select[name^="field_options[form_select_"]', maybeChangeEmbedFormMsg );
6186
 
6187
  jQuery( document ).on( 'submit', '#frm_js_build_form', buildSubmittedNoAjax );
6188
+ jQuery( document ).on( 'change', '#frm_builder_page input:not(.frm-search-input), #frm_builder_page select', fieldUpdated );
6189
 
6190
  popAllProductFields();
6191
 
6192
  jQuery( document ).on( 'change', '.frmjs_prod_data_type_opt', toggleProductType );
6193
 
6194
+ jQuery( document ).on( 'focus', '.frm-single-settings ul input[type="text"][name^="field_options[options_"]', onOptionTextFocus );
6195
+ jQuery( document ).on( 'blur', '.frm-single-settings ul input[type="text"][name^="field_options[options_"]', onOptionTextBlur );
6196
+
6197
  initBulkOptionsOverlay();
6198
  hideEmptyEle();
6199
  maybeDisableAddSummaryBtn();
6346
  }
6347
  });
6348
 
6349
+ jQuery( document ).on( 'frm-multiselect-changed', '#protect_files_role', adjustVisibilityValuesForEveryoneValues );
6350
+
6351
  // Page Selection Autocomplete
6352
  initSelectionAutocomplete();
6353
  },
languages/formidable.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Formidable Forms 4.07.01\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2020-09-14T18:43:22+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.1.0\n"
15
  "X-Domain: formidable\n"
@@ -136,58 +136,58 @@ msgstr ""
136
  msgid "Oops! You forgot to enter your license number."
137
  msgstr ""
138
 
139
- #: classes/models/FrmAddon.php:546
140
  msgid "Your license has been activated. Enjoy!"
141
  msgstr ""
142
 
143
- #: classes/models/FrmAddon.php:547
144
- #: classes/models/FrmAddon.php:552
145
  msgid "That license key is invalid"
146
  msgstr ""
147
 
148
- #: classes/models/FrmAddon.php:548
149
  msgid "That license is expired"
150
  msgstr ""
151
 
152
- #: classes/models/FrmAddon.php:549
153
  msgid "That license has been refunded"
154
  msgstr ""
155
 
156
- #: classes/models/FrmAddon.php:550
157
  msgid "That license has been used on too many sites"
158
  msgstr ""
159
 
160
- #: classes/models/FrmAddon.php:551
161
  msgid "Oops! That is the wrong license key for this plugin."
162
  msgstr ""
163
 
164
- #: classes/models/FrmAddon.php:568
165
  msgid "Cache cleared"
166
  msgstr ""
167
 
168
- #: classes/models/FrmAddon.php:590
169
  msgid "That license was removed successfully"
170
  msgstr ""
171
 
172
- #: classes/models/FrmAddon.php:592
173
  msgid "There was an error deactivating your license."
174
  msgstr ""
175
 
176
- #: classes/models/FrmAddon.php:636
177
  msgid "Your License Key was invalid"
178
  msgstr ""
179
 
180
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
181
- #: classes/models/FrmAddon.php:640
182
  msgid "You had an error communicating with the Formidable API. %1$sClick here%2$s for more information."
183
  msgstr ""
184
 
185
- #: classes/models/FrmAddon.php:643
186
  msgid "You had an HTTP error connecting to the Formidable API"
187
  msgstr ""
188
 
189
  #. translators: %1$s: Error code, %2$s: Error message
190
- #: classes/models/FrmAddon.php:654
191
  msgid "There was a %1$s error: %2$s"
192
  msgstr ""
193
 
@@ -262,7 +262,7 @@ msgid "Dropdown"
262
  msgstr ""
263
 
264
  #: classes/models/FrmField.php:34
265
- #: classes/controllers/FrmFormsController.php:1181
266
  msgid "Email"
267
  msgstr ""
268
 
@@ -287,7 +287,7 @@ msgid "Hidden"
287
  msgstr ""
288
 
289
  #: classes/models/FrmField.php:58
290
- #: classes/controllers/FrmFormsController.php:1176
291
  msgid "User ID"
292
  msgstr ""
293
 
@@ -518,16 +518,16 @@ msgstr ""
518
 
519
  #: classes/models/FrmEntryValidate.php:18
520
  #: classes/models/FrmSettings.php:110
521
- #: classes/controllers/FrmFormActionsController.php:390
522
  msgid "You do not have permission to do that"
523
  msgstr ""
524
 
525
- #: classes/models/FrmEntryValidate.php:235
526
- #: classes/models/FrmEntryValidate.php:244
527
  msgid "Your entry appears to be spam!"
528
  msgstr ""
529
 
530
- #: classes/models/FrmEntryValidate.php:239
531
  msgid "Your entry appears to be blocked spam!"
532
  msgstr ""
533
 
@@ -591,7 +591,7 @@ msgstr ""
591
  #: classes/models/fields/FrmFieldType.php:583
592
  #: classes/helpers/FrmFieldsHelper.php:167
593
  #: classes/helpers/FrmFieldsHelper.php:296
594
- #: classes/helpers/FrmXMLHelper.php:1178
595
  msgid "%s is invalid"
596
  msgstr ""
597
 
@@ -678,7 +678,7 @@ msgstr ""
678
  #. translators: %1$s - field type
679
  #. translators: %1$s: Number of items
680
  #: classes/models/FrmFormMigrator.php:584
681
- #: classes/helpers/FrmXMLHelper.php:1060
682
  msgid "%1$s Field"
683
  msgid_plural "%1$s Fields"
684
  msgstr[0] ""
@@ -717,39 +717,43 @@ msgstr ""
717
  msgid "Upgrade"
718
  msgstr ""
719
 
720
- #: classes/controllers/FrmAddonsController.php:55
721
  msgid "There are no plugins on your site that require a license"
722
  msgstr ""
723
 
724
- #: classes/controllers/FrmAddonsController.php:518
725
  msgid "Installed"
726
  msgstr ""
727
 
728
- #: classes/controllers/FrmAddonsController.php:523
729
- #: classes/helpers/FrmAppHelper.php:2467
730
  msgid "Active"
731
  msgstr ""
732
 
733
- #: classes/controllers/FrmAddonsController.php:528
734
  msgid "Not Installed"
735
  msgstr ""
736
 
737
- #: classes/controllers/FrmAddonsController.php:786
738
  msgid "Your plugin has been installed. Please reload the page to see more options."
739
  msgstr ""
740
 
741
- #: classes/controllers/FrmAddonsController.php:813
742
- msgid "Sorry, you're site requires FTP authentication. Please install plugins manaully."
743
  msgstr ""
744
 
745
- #: classes/controllers/FrmAddonsController.php:856
746
  msgid "Your plugin has been activated. Please reload the page to see more options."
747
  msgstr ""
748
 
749
- #: classes/controllers/FrmAddonsController.php:888
750
  msgid "Your plugins have been installed and activated."
751
  msgstr ""
752
 
 
 
 
 
753
  #: classes/controllers/FrmAppController.php:150
754
  msgid "Build"
755
  msgstr ""
@@ -1023,7 +1027,7 @@ msgstr ""
1023
  #: classes/views/addons/list.php:86
1024
  #: classes/views/shared/upgrade_overlay.php:32
1025
  #: classes/helpers/FrmFormMigratorsHelper.php:131
1026
- #: classes/helpers/FrmAppHelper.php:2466
1027
  msgid "Install"
1028
  msgstr ""
1029
 
@@ -1260,7 +1264,7 @@ msgstr ""
1260
  #: classes/controllers/FrmFormsController.php:741
1261
  #: classes/controllers/FrmFormsController.php:745
1262
  #: classes/views/shared/mb_adv_info.php:98
1263
- #: classes/helpers/FrmCSVExportHelper.php:158
1264
  msgid "Key"
1265
  msgstr ""
1266
 
@@ -1294,132 +1298,136 @@ msgstr ""
1294
  msgid "Form Permissions"
1295
  msgstr ""
1296
 
1297
- #: classes/controllers/FrmFormsController.php:989
 
 
 
 
1298
  msgid "Form Scheduling"
1299
  msgstr ""
1300
 
1301
- #: classes/controllers/FrmFormsController.php:994
1302
  msgid "Form scheduling settings"
1303
  msgstr ""
1304
 
1305
- #: classes/controllers/FrmFormsController.php:998
1306
  msgid "Styling & Buttons"
1307
  msgstr ""
1308
 
1309
- #: classes/controllers/FrmFormsController.php:1004
1310
  msgid "Customize HTML"
1311
  msgstr ""
1312
 
1313
- #: classes/controllers/FrmFormsController.php:1113
1314
  msgid "Customize field values with the following parameters."
1315
  msgstr ""
1316
 
1317
- #: classes/controllers/FrmFormsController.php:1150
1318
  msgid "Separator"
1319
  msgstr ""
1320
 
1321
- #: classes/controllers/FrmFormsController.php:1151
1322
  msgid "Use a different separator for checkbox fields"
1323
  msgstr ""
1324
 
1325
- #: classes/controllers/FrmFormsController.php:1154
1326
  msgid "Date Format"
1327
  msgstr ""
1328
 
1329
- #: classes/controllers/FrmFormsController.php:1157
1330
  #: classes/views/frm-fields/back-end/settings.php:27
1331
  msgid "Field Label"
1332
  msgstr ""
1333
 
1334
- #: classes/controllers/FrmFormsController.php:1160
1335
  msgid "No Auto P"
1336
  msgstr ""
1337
 
1338
- #: classes/controllers/FrmFormsController.php:1161
1339
  msgid "Do not automatically add any paragraphs or line breaks"
1340
  msgstr ""
1341
 
1342
- #: classes/controllers/FrmFormsController.php:1177
1343
  msgid "First Name"
1344
  msgstr ""
1345
 
1346
- #: classes/controllers/FrmFormsController.php:1178
1347
  msgid "Last Name"
1348
  msgstr ""
1349
 
1350
- #: classes/controllers/FrmFormsController.php:1179
1351
  msgid "Display Name"
1352
  msgstr ""
1353
 
1354
- #: classes/controllers/FrmFormsController.php:1180
1355
  msgid "User Login"
1356
  msgstr ""
1357
 
1358
- #: classes/controllers/FrmFormsController.php:1182
1359
  msgid "Avatar"
1360
  msgstr ""
1361
 
1362
- #: classes/controllers/FrmFormsController.php:1183
1363
  msgid "Author Link"
1364
  msgstr ""
1365
 
1366
- #: classes/controllers/FrmFormsController.php:1196
1367
  #: classes/views/frm-entries/sidebar-shared.php:51
1368
  msgid "Entry ID"
1369
  msgstr ""
1370
 
1371
- #: classes/controllers/FrmFormsController.php:1197
1372
  #: classes/controllers/FrmEntriesController.php:78
1373
  #: classes/views/frm-entries/sidebar-shared.php:57
1374
  #: classes/views/frm-entries/form.php:54
1375
  msgid "Entry Key"
1376
  msgstr ""
1377
 
1378
- #: classes/controllers/FrmFormsController.php:1198
1379
  msgid "Post ID"
1380
  msgstr ""
1381
 
1382
- #: classes/controllers/FrmFormsController.php:1199
1383
  msgid "User IP"
1384
  msgstr ""
1385
 
1386
- #: classes/controllers/FrmFormsController.php:1200
1387
  msgid "Entry created"
1388
  msgstr ""
1389
 
1390
- #: classes/controllers/FrmFormsController.php:1201
1391
  msgid "Entry updated"
1392
  msgstr ""
1393
 
1394
- #: classes/controllers/FrmFormsController.php:1203
1395
  msgid "Site URL"
1396
  msgstr ""
1397
 
1398
- #: classes/controllers/FrmFormsController.php:1204
1399
  msgid "Site Name"
1400
  msgstr ""
1401
 
1402
- #: classes/controllers/FrmFormsController.php:1212
1403
  msgid "Default Msg"
1404
  msgstr ""
1405
 
1406
- #: classes/controllers/FrmFormsController.php:1213
1407
  msgid "Default HTML"
1408
  msgstr ""
1409
 
1410
- #: classes/controllers/FrmFormsController.php:1214
1411
  msgid "Default Plain"
1412
  msgstr ""
1413
 
1414
- #: classes/controllers/FrmFormsController.php:1303
1415
  msgid "No forms were specified"
1416
  msgstr ""
1417
 
1418
- #: classes/controllers/FrmFormsController.php:1418
1419
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1420
  msgstr ""
1421
 
1422
- #: classes/controllers/FrmFormsController.php:1533
1423
  #: classes/views/frm-forms/list-templates.php:203
1424
  #: classes/views/xml/import_form.php:133
1425
  #: classes/views/styles/manage.php:59
@@ -1431,17 +1439,17 @@ msgstr ""
1431
  msgid "(no title)"
1432
  msgstr ""
1433
 
1434
- #: classes/controllers/FrmFormsController.php:1579
1435
- #: classes/controllers/FrmFormsController.php:1593
1436
  msgid "Please select a valid form"
1437
  msgstr ""
1438
 
1439
- #: classes/controllers/FrmFormsController.php:1815
1440
  msgid "Please wait while you are redirected."
1441
  msgstr ""
1442
 
1443
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
1444
- #: classes/controllers/FrmFormsController.php:1851
1445
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1446
  msgstr ""
1447
 
@@ -1470,21 +1478,21 @@ msgstr ""
1470
  msgid "Form Actions"
1471
  msgstr ""
1472
 
1473
- #: classes/controllers/FrmFormActionsController.php:140
1474
- #: classes/views/frm-form-actions/default_actions.php:69
1475
  msgid "eCommerce"
1476
  msgstr ""
1477
 
1478
- #: classes/controllers/FrmFormActionsController.php:148
1479
  msgid "Email Marketing"
1480
  msgstr ""
1481
 
1482
- #: classes/controllers/FrmFormActionsController.php:160
1483
  msgid "CRM"
1484
  msgstr ""
1485
 
1486
  #. translators: %s: Name of form action
1487
- #: classes/controllers/FrmFormActionsController.php:204
1488
  msgid "%s form actions"
1489
  msgstr ""
1490
 
@@ -1493,7 +1501,7 @@ msgid "Entry Name"
1493
  msgstr ""
1494
 
1495
  #: classes/controllers/FrmEntriesController.php:85
1496
- #: classes/helpers/FrmCSVExportHelper.php:153
1497
  msgid "Created By"
1498
  msgstr ""
1499
 
@@ -1621,7 +1629,7 @@ msgstr ""
1621
  #: classes/views/frm-forms/new-form-overlay.php:36
1622
  #: classes/views/shared/confirm-overlay.php:19
1623
  #: classes/views/shared/admin-header.php:54
1624
- #: classes/helpers/FrmAppHelper.php:2427
1625
  msgid "Cancel"
1626
  msgstr ""
1627
 
@@ -1633,7 +1641,7 @@ msgstr ""
1633
  #: classes/views/shared/mb_adv_info.php:40
1634
  #: classes/views/shared/mb_adv_info.php:183
1635
  #: classes/views/frm-entries/list.php:47
1636
- #: classes/helpers/FrmAppHelper.php:942
1637
  msgid "Search"
1638
  msgstr ""
1639
 
@@ -1824,7 +1832,7 @@ msgid "Show Page Content"
1824
  msgstr ""
1825
 
1826
  #: classes/views/frm-forms/settings-advanced.php:98
1827
- #: classes/helpers/FrmAppHelper.php:1067
1828
  msgid "Select a Page"
1829
  msgstr ""
1830
 
@@ -1983,11 +1991,11 @@ msgstr ""
1983
  msgid "Register User"
1984
  msgstr ""
1985
 
1986
- #: classes/views/frm-form-actions/default_actions.php:59
1987
  msgid "Twilio SMS"
1988
  msgstr ""
1989
 
1990
- #: classes/views/frm-form-actions/default_actions.php:133
1991
  msgid "Send API data"
1992
  msgstr ""
1993
 
@@ -2071,31 +2079,39 @@ msgid "Trigger this action when"
2071
  msgstr ""
2072
 
2073
  #: classes/views/frm-form-actions/_action_inside.php:70
2074
- msgid "Conditional emails"
2075
  msgstr ""
2076
 
2077
  #: classes/views/frm-form-actions/_action_inside.php:71
 
 
 
 
 
 
 
 
2078
  msgid "Use Conditional Logic"
2079
  msgstr ""
2080
 
2081
- #: classes/views/frm-form-actions/_action_inside.php:88
2082
  msgid "Form action automations"
2083
  msgstr ""
2084
 
2085
- #: classes/views/frm-form-actions/_action_inside.php:89
2086
  msgid "Setup Automation"
2087
  msgstr ""
2088
 
2089
- #: classes/views/frm-form-actions/_action_inside.php:101
2090
  msgid "Form action logs"
2091
  msgstr ""
2092
 
2093
- #: classes/views/frm-form-actions/_action_inside.php:103
2094
  msgid "Install logging to get more information on API requests."
2095
  msgstr ""
2096
 
2097
  #. translators: %1$s: The ID of the form action.
2098
- #: classes/views/frm-form-actions/_action_inside.php:113
2099
  msgid "Action ID: %1$s"
2100
  msgstr ""
2101
 
@@ -2151,7 +2167,7 @@ msgid "Renew Now"
2151
  msgstr ""
2152
 
2153
  #: classes/views/solutions/_import.php:51
2154
- #: classes/helpers/FrmXMLHelper.php:1017
2155
  msgid "Imported"
2156
  msgstr ""
2157
 
@@ -2169,7 +2185,7 @@ msgstr ""
2169
 
2170
  #: classes/views/shared/confirm-overlay.php:15
2171
  #: classes/views/shared/info-overlay.php:15
2172
- #: classes/helpers/FrmAppHelper.php:2434
2173
  msgid "Are you sure?"
2174
  msgstr ""
2175
 
@@ -2282,8 +2298,8 @@ msgid "Keys"
2282
  msgstr ""
2283
 
2284
  #: classes/views/shared/mb_adv_info.php:95
2285
- #: classes/helpers/FrmCSVExportHelper.php:157
2286
- #: classes/helpers/FrmAppHelper.php:2406
2287
  msgid "ID"
2288
  msgstr ""
2289
 
@@ -2293,7 +2309,7 @@ msgstr ""
2293
 
2294
  #: classes/views/shared/mb_adv_info.php:113
2295
  #: classes/views/shared/mb_adv_info.php:127
2296
- #: classes/helpers/FrmAppHelper.php:2468
2297
  msgid "Select a Field"
2298
  msgstr ""
2299
 
@@ -2917,7 +2933,7 @@ msgid "Label Position"
2917
  msgstr ""
2918
 
2919
  #: classes/views/frm-fields/back-end/settings.php:270
2920
- #: classes/helpers/FrmAppHelper.php:2428
2921
  msgid "Default"
2922
  msgstr ""
2923
 
@@ -3139,7 +3155,7 @@ msgid "License Key"
3139
  msgstr ""
3140
 
3141
  #: classes/views/frm-settings/general.php:9
3142
- msgid "Your license key provides access to automatic updates."
3143
  msgstr ""
3144
 
3145
  #: classes/views/frm-settings/general.php:15
@@ -3614,6 +3630,10 @@ msgstr ""
3614
  msgid "Permanently delete this entry?"
3615
  msgstr ""
3616
 
 
 
 
 
3617
  #: classes/helpers/FrmFormsListHelper.php:106
3618
  msgid "No forms found in the trash."
3619
  msgstr ""
@@ -3665,12 +3685,16 @@ msgstr ""
3665
 
3666
  #: classes/helpers/FrmFormsListHelper.php:342
3667
  #: classes/helpers/FrmFormsHelper.php:1198
3668
- #: classes/helpers/FrmCSVExportHelper.php:155
3669
  msgid "Draft"
3670
  msgstr ""
3671
 
 
 
 
 
3672
  #: classes/helpers/FrmFieldsHelper.php:286
3673
- #: classes/helpers/FrmAppHelper.php:2439
3674
  msgid "The entered values do not match"
3675
  msgstr ""
3676
 
@@ -3681,7 +3705,7 @@ msgstr ""
3681
 
3682
  #: classes/helpers/FrmFieldsHelper.php:456
3683
  #: classes/helpers/FrmFieldsHelper.php:457
3684
- #: classes/helpers/FrmAppHelper.php:2443
3685
  msgid "New Option"
3686
  msgstr ""
3687
 
@@ -4881,7 +4905,7 @@ msgid "Excerpt View"
4881
  msgstr ""
4882
 
4883
  #: classes/helpers/FrmListHelper.php:262
4884
- #: classes/helpers/FrmAppHelper.php:2469
4885
  msgid "No items found."
4886
  msgstr ""
4887
 
@@ -4893,50 +4917,55 @@ msgstr ""
4893
  msgid "Bulk Actions"
4894
  msgstr ""
4895
 
4896
- #: classes/helpers/FrmListHelper.php:401
 
 
 
 
 
4897
  msgid "Apply"
4898
  msgstr ""
4899
 
4900
- #: classes/helpers/FrmListHelper.php:469
4901
- #: classes/helpers/FrmListHelper.php:1158
4902
  msgid "Show more details"
4903
  msgstr ""
4904
 
4905
  #. translators: %s: Number of items
4906
- #: classes/helpers/FrmListHelper.php:577
4907
- #: classes/helpers/FrmListHelper.php:1184
4908
  msgid "%s item"
4909
  msgid_plural "%s items"
4910
  msgstr[0] ""
4911
 
4912
- #: classes/helpers/FrmListHelper.php:608
4913
- #: classes/helpers/FrmListHelper.php:612
4914
  msgid "Current Page"
4915
  msgstr ""
4916
 
4917
  #. translators: %1$s: Current page number, %2$s: Total pages
4918
- #: classes/helpers/FrmListHelper.php:620
4919
  msgctxt "paging"
4920
  msgid "%1$s of %2$s"
4921
  msgstr ""
4922
 
4923
- #: classes/helpers/FrmListHelper.php:684
4924
  msgid "First page"
4925
  msgstr ""
4926
 
4927
- #: classes/helpers/FrmListHelper.php:685
4928
  msgid "Last page"
4929
  msgstr ""
4930
 
4931
- #: classes/helpers/FrmListHelper.php:686
4932
  msgid "Previous page"
4933
  msgstr ""
4934
 
4935
- #: classes/helpers/FrmListHelper.php:687
4936
  msgid "Next page"
4937
  msgstr ""
4938
 
4939
- #: classes/helpers/FrmListHelper.php:907
4940
  msgid "Select All"
4941
  msgstr ""
4942
 
@@ -5153,7 +5182,7 @@ msgid "Is this intentional?"
5153
  msgstr ""
5154
 
5155
  #: classes/helpers/FrmFormsHelper.php:1457
5156
- #: classes/helpers/FrmAppHelper.php:2463
5157
  msgid "See the list of reserved words in WordPress."
5158
  msgstr ""
5159
 
@@ -5167,599 +5196,601 @@ msgstr ""
5167
  msgid "The redirect URL is using the parameters \"%s\", which are reserved by WordPress. "
5168
  msgstr ""
5169
 
5170
- #: classes/helpers/FrmCSVExportHelper.php:127
5171
  msgid "(label)"
5172
  msgstr ""
5173
 
5174
- #: classes/helpers/FrmCSVExportHelper.php:144
5175
  msgid "Comment"
5176
  msgstr ""
5177
 
5178
- #: classes/helpers/FrmCSVExportHelper.php:145
5179
  msgid "Comment User"
5180
  msgstr ""
5181
 
5182
- #: classes/helpers/FrmCSVExportHelper.php:146
5183
  msgid "Comment Date"
5184
  msgstr ""
5185
 
5186
- #: classes/helpers/FrmCSVExportHelper.php:151
5187
  msgid "Timestamp"
5188
  msgstr ""
5189
 
5190
- #: classes/helpers/FrmCSVExportHelper.php:152
5191
  msgid "Last Updated"
5192
  msgstr ""
5193
 
5194
- #: classes/helpers/FrmCSVExportHelper.php:154
5195
  msgid "Updated By"
5196
  msgstr ""
5197
 
5198
- #: classes/helpers/FrmCSVExportHelper.php:156
5199
  msgid "IP"
5200
  msgstr ""
5201
 
5202
- #: classes/helpers/FrmCSVExportHelper.php:160
5203
  msgid "Parent ID"
5204
  msgstr ""
5205
 
5206
- #: classes/helpers/FrmAppHelper.php:129
5207
  msgid "Your account has expired"
5208
  msgstr ""
5209
 
5210
- #: classes/helpers/FrmAppHelper.php:927
 
 
 
 
 
 
5211
  msgid "Add New"
5212
  msgstr ""
5213
 
5214
- #: classes/helpers/FrmAppHelper.php:1218
5215
  msgid "View Forms"
5216
  msgstr ""
5217
 
5218
- #: classes/helpers/FrmAppHelper.php:1219
5219
  msgid "Add and Edit Forms"
5220
  msgstr ""
5221
 
5222
- #: classes/helpers/FrmAppHelper.php:1220
5223
  msgid "Delete Forms"
5224
  msgstr ""
5225
 
5226
- #: classes/helpers/FrmAppHelper.php:1221
5227
  msgid "Access this Settings Page"
5228
  msgstr ""
5229
 
5230
- #: classes/helpers/FrmAppHelper.php:1222
5231
  msgid "View Entries from Admin Area"
5232
  msgstr ""
5233
 
5234
- #: classes/helpers/FrmAppHelper.php:1223
5235
  msgid "Delete Entries from Admin Area"
5236
  msgstr ""
5237
 
5238
- #: classes/helpers/FrmAppHelper.php:1230
5239
  msgid "Add Entries from Admin Area"
5240
  msgstr ""
5241
 
5242
- #: classes/helpers/FrmAppHelper.php:1231
5243
  msgid "Edit Entries from Admin Area"
5244
  msgstr ""
5245
 
5246
- #: classes/helpers/FrmAppHelper.php:1232
5247
  msgid "View Reports"
5248
  msgstr ""
5249
 
5250
- #: classes/helpers/FrmAppHelper.php:1233
5251
  msgid "Add/Edit Views"
5252
  msgstr ""
5253
 
5254
- #: classes/helpers/FrmAppHelper.php:1899
5255
  msgid "at"
5256
  msgstr ""
5257
 
5258
- #: classes/helpers/FrmAppHelper.php:2043
5259
  msgid "year"
5260
  msgstr ""
5261
 
5262
- #: classes/helpers/FrmAppHelper.php:2044
5263
  msgid "years"
5264
  msgstr ""
5265
 
5266
- #: classes/helpers/FrmAppHelper.php:2048
5267
  msgid "month"
5268
  msgstr ""
5269
 
5270
- #: classes/helpers/FrmAppHelper.php:2049
5271
  msgid "months"
5272
  msgstr ""
5273
 
5274
- #: classes/helpers/FrmAppHelper.php:2053
5275
  msgid "week"
5276
  msgstr ""
5277
 
5278
- #: classes/helpers/FrmAppHelper.php:2054
5279
  msgid "weeks"
5280
  msgstr ""
5281
 
5282
- #: classes/helpers/FrmAppHelper.php:2058
5283
  msgid "day"
5284
  msgstr ""
5285
 
5286
- #: classes/helpers/FrmAppHelper.php:2059
5287
  msgid "days"
5288
  msgstr ""
5289
 
5290
- #: classes/helpers/FrmAppHelper.php:2063
5291
  msgid "hour"
5292
  msgstr ""
5293
 
5294
- #: classes/helpers/FrmAppHelper.php:2064
5295
  msgid "hours"
5296
  msgstr ""
5297
 
5298
- #: classes/helpers/FrmAppHelper.php:2068
5299
  msgid "minute"
5300
  msgstr ""
5301
 
5302
- #: classes/helpers/FrmAppHelper.php:2069
5303
  msgid "minutes"
5304
  msgstr ""
5305
 
5306
- #: classes/helpers/FrmAppHelper.php:2073
5307
  msgid "second"
5308
  msgstr ""
5309
 
5310
- #: classes/helpers/FrmAppHelper.php:2074
5311
  msgid "seconds"
5312
  msgstr ""
5313
 
5314
- #: classes/helpers/FrmAppHelper.php:2168
5315
  msgid "Give this action a label for easy reference."
5316
  msgstr ""
5317
 
5318
- #: classes/helpers/FrmAppHelper.php:2169
5319
  msgid "Add one or more recipient addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com. [admin_email] is the address set in WP General Settings."
5320
  msgstr ""
5321
 
5322
- #: classes/helpers/FrmAppHelper.php:2170
5323
  msgid "Add CC addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com."
5324
  msgstr ""
5325
 
5326
- #: classes/helpers/FrmAppHelper.php:2171
5327
  msgid "Add BCC addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com."
5328
  msgstr ""
5329
 
5330
- #: classes/helpers/FrmAppHelper.php:2172
5331
  msgid "If you would like a different reply to address than the \"from\" address, add a single address here. FORMAT: Name <name@email.com> or name@email.com."
5332
  msgstr ""
5333
 
5334
- #: classes/helpers/FrmAppHelper.php:2173
5335
  msgid "Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com."
5336
  msgstr ""
5337
 
5338
  #. translators: %1$s: Form name, %2$s: Date
5339
- #: classes/helpers/FrmAppHelper.php:2175
5340
  msgid "If you leave the subject blank, the default will be used: %1$s Form submitted on %2$s"
5341
  msgstr ""
5342
 
5343
- #: classes/helpers/FrmAppHelper.php:2369
5344
- #: classes/helpers/FrmAppHelper.php:2448
5345
  msgid "Please wait while your site updates."
5346
  msgstr ""
5347
 
5348
- #: classes/helpers/FrmAppHelper.php:2370
5349
  msgid "Are you sure you want to deauthorize Formidable Forms on this site?"
5350
  msgstr ""
5351
 
5352
- #: classes/helpers/FrmAppHelper.php:2373
5353
- #: classes/helpers/FrmAppHelper.php:2402
5354
  msgid "Loading&hellip;"
5355
  msgstr ""
5356
 
5357
- #: classes/helpers/FrmAppHelper.php:2403
5358
  msgid "Remove"
5359
  msgstr ""
5360
 
5361
- #: classes/helpers/FrmAppHelper.php:2407
5362
  msgid "No results match"
5363
  msgstr ""
5364
 
5365
- #: classes/helpers/FrmAppHelper.php:2408
5366
  msgid "That file looks like Spam."
5367
  msgstr ""
5368
 
5369
- #: classes/helpers/FrmAppHelper.php:2409
5370
  msgid "There is an error in the calculation in the field with key"
5371
  msgstr ""
5372
 
5373
- #: classes/helpers/FrmAppHelper.php:2410
5374
  msgid "Please complete the preceding required fields before uploading a file."
5375
  msgstr ""
5376
 
5377
- #: classes/helpers/FrmAppHelper.php:2421
5378
  msgid "(Click to add description)"
5379
  msgstr ""
5380
 
5381
- #: classes/helpers/FrmAppHelper.php:2422
5382
  msgid "(Blank)"
5383
  msgstr ""
5384
 
5385
- #: classes/helpers/FrmAppHelper.php:2423
5386
  msgid "(no label)"
5387
  msgstr ""
5388
 
5389
- #: classes/helpers/FrmAppHelper.php:2424
5390
  msgid "Saving"
5391
  msgstr ""
5392
 
5393
- #: classes/helpers/FrmAppHelper.php:2425
5394
  msgid "Saved"
5395
  msgstr ""
5396
 
5397
- #: classes/helpers/FrmAppHelper.php:2426
5398
  msgid "OK"
5399
  msgstr ""
5400
 
5401
- #: classes/helpers/FrmAppHelper.php:2429
5402
  msgid "Clear default value when typing"
5403
  msgstr ""
5404
 
5405
- #: classes/helpers/FrmAppHelper.php:2430
5406
  msgid "Do not clear default value when typing"
5407
  msgstr ""
5408
 
5409
- #: classes/helpers/FrmAppHelper.php:2431
5410
  msgid "Default value will pass form validation"
5411
  msgstr ""
5412
 
5413
- #: classes/helpers/FrmAppHelper.php:2432
5414
  msgid "Default value will NOT pass form validation"
5415
  msgstr ""
5416
 
5417
- #: classes/helpers/FrmAppHelper.php:2433
5418
- msgid "Heads up"
5419
- msgstr ""
5420
-
5421
- #: classes/helpers/FrmAppHelper.php:2435
5422
  msgid "Are you sure you want to delete this field and all data associated with it?"
5423
  msgstr ""
5424
 
5425
- #: classes/helpers/FrmAppHelper.php:2436
5426
  msgid "All fields inside this Section will be deleted along with their data. Are you sure you want to delete this group of fields?"
5427
  msgstr ""
5428
 
5429
- #: classes/helpers/FrmAppHelper.php:2437
5430
  msgid "Warning: If you have entries with multiple rows, all but the first row will be lost."
5431
  msgstr ""
5432
 
5433
- #: classes/helpers/FrmAppHelper.php:2440
5434
  msgid "Enter Email"
5435
  msgstr ""
5436
 
5437
- #: classes/helpers/FrmAppHelper.php:2441
5438
  msgid "Confirm Email"
5439
  msgstr ""
5440
 
5441
- #: classes/helpers/FrmAppHelper.php:2442
5442
  msgid "Conditional content here"
5443
  msgstr ""
5444
 
5445
- #: classes/helpers/FrmAppHelper.php:2444
5446
  msgid "In certain browsers (e.g. Firefox) text will not display correctly if the field height is too small relative to the field padding and text size. Please increase your field height or decrease your field padding."
5447
  msgstr ""
5448
 
5449
- #: classes/helpers/FrmAppHelper.php:2445
5450
  msgid "Enter Password"
5451
  msgstr ""
5452
 
5453
- #: classes/helpers/FrmAppHelper.php:2446
5454
  msgid "Confirm Password"
5455
  msgstr ""
5456
 
5457
- #: classes/helpers/FrmAppHelper.php:2447
5458
  msgid "Import Complete"
5459
  msgstr ""
5460
 
5461
- #: classes/helpers/FrmAppHelper.php:2449
5462
  msgid "Warning: There is no way to retrieve unsaved entries."
5463
  msgstr ""
5464
 
5465
- #: classes/helpers/FrmAppHelper.php:2450
5466
  msgid "Private"
5467
  msgstr ""
5468
 
5469
- #: classes/helpers/FrmAppHelper.php:2453
5470
  msgid "No new licenses were found"
5471
  msgstr ""
5472
 
5473
- #: classes/helpers/FrmAppHelper.php:2454
5474
  msgid "This calculation has at least one unmatched ( ) { } [ ]."
5475
  msgstr ""
5476
 
5477
- #: classes/helpers/FrmAppHelper.php:2455
5478
  msgid "This calculation may have shortcodes that work in Views but not forms."
5479
  msgstr ""
5480
 
5481
- #: classes/helpers/FrmAppHelper.php:2456
5482
  msgid "This calculation may have shortcodes that work in text calculations but not numeric calculations."
5483
  msgstr ""
5484
 
5485
- #: classes/helpers/FrmAppHelper.php:2457
5486
  msgid "This form action is limited to one per form. Please edit the existing form action."
5487
  msgstr ""
5488
 
5489
  #. Translators: %s is the name of a Detail Page Slug that is a reserved word.
5490
- #: classes/helpers/FrmAppHelper.php:2460
5491
  msgid "The Detail Page Slug \"%s\" is reserved by WordPress. This may cause problems. Is this intentional?"
5492
  msgstr ""
5493
 
5494
  #. Translators: %s is the name of a parameter that is a reserved word. More than one word could be listed here, though that would not be common.
5495
- #: classes/helpers/FrmAppHelper.php:2462
5496
  msgid "The parameter \"%s\" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? "
5497
  msgstr ""
5498
 
5499
- #: classes/helpers/FrmAppHelper.php:2464
5500
  msgid "Please enter a Repeat Limit that is greater than 1."
5501
  msgstr ""
5502
 
5503
- #: classes/helpers/FrmAppHelper.php:2465
5504
  msgid "Please select a limit between 0 and 200."
5505
  msgstr ""
5506
 
5507
- #: classes/helpers/FrmAppHelper.php:2497
5508
  msgid "You are running an outdated version of Formidable. This plugin may not work correctly if you do not update Formidable."
5509
  msgstr ""
5510
 
5511
- #: classes/helpers/FrmAppHelper.php:2524
5512
  msgid "You are running a version of Formidable Forms that may not be compatible with your version of Formidable Forms Pro."
5513
  msgstr ""
5514
 
5515
- #: classes/helpers/FrmAppHelper.php:2552
5516
  msgid "The version of PHP on your server is too low. If this is not corrected, you may see issues with Formidable Forms. Please contact your web host and ask to be updated to PHP 7.0+."
5517
  msgstr ""
5518
 
5519
- #: classes/helpers/FrmAppHelper.php:2558
5520
  msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
5521
  msgstr ""
5522
 
5523
- #: classes/helpers/FrmAppHelper.php:2572
5524
  msgid "English"
5525
  msgstr ""
5526
 
5527
- #: classes/helpers/FrmAppHelper.php:2573
5528
  msgid "Afrikaans"
5529
  msgstr ""
5530
 
5531
- #: classes/helpers/FrmAppHelper.php:2574
5532
  msgid "Albanian"
5533
  msgstr ""
5534
 
5535
- #: classes/helpers/FrmAppHelper.php:2575
5536
  msgid "Arabic"
5537
  msgstr ""
5538
 
5539
- #: classes/helpers/FrmAppHelper.php:2576
5540
  msgid "Armenian"
5541
  msgstr ""
5542
 
5543
- #: classes/helpers/FrmAppHelper.php:2577
5544
  msgid "Azerbaijani"
5545
  msgstr ""
5546
 
5547
- #: classes/helpers/FrmAppHelper.php:2578
5548
  msgid "Basque"
5549
  msgstr ""
5550
 
5551
- #: classes/helpers/FrmAppHelper.php:2579
5552
  msgid "Bosnian"
5553
  msgstr ""
5554
 
5555
- #: classes/helpers/FrmAppHelper.php:2580
5556
  msgid "Bulgarian"
5557
  msgstr ""
5558
 
5559
- #: classes/helpers/FrmAppHelper.php:2581
5560
  msgid "Catalan"
5561
  msgstr ""
5562
 
5563
- #: classes/helpers/FrmAppHelper.php:2582
5564
  msgid "Chinese Hong Kong"
5565
  msgstr ""
5566
 
5567
- #: classes/helpers/FrmAppHelper.php:2583
5568
  msgid "Chinese Simplified"
5569
  msgstr ""
5570
 
5571
- #: classes/helpers/FrmAppHelper.php:2584
5572
  msgid "Chinese Traditional"
5573
  msgstr ""
5574
 
5575
- #: classes/helpers/FrmAppHelper.php:2585
5576
  msgid "Croatian"
5577
  msgstr ""
5578
 
5579
- #: classes/helpers/FrmAppHelper.php:2586
5580
  msgid "Czech"
5581
  msgstr ""
5582
 
5583
- #: classes/helpers/FrmAppHelper.php:2587
5584
  msgid "Danish"
5585
  msgstr ""
5586
 
5587
- #: classes/helpers/FrmAppHelper.php:2588
5588
  msgid "Dutch"
5589
  msgstr ""
5590
 
5591
- #: classes/helpers/FrmAppHelper.php:2589
5592
  msgid "English/UK"
5593
  msgstr ""
5594
 
5595
- #: classes/helpers/FrmAppHelper.php:2590
5596
  msgid "Esperanto"
5597
  msgstr ""
5598
 
5599
- #: classes/helpers/FrmAppHelper.php:2591
5600
  msgid "Estonian"
5601
  msgstr ""
5602
 
5603
- #: classes/helpers/FrmAppHelper.php:2592
5604
  msgid "Faroese"
5605
  msgstr ""
5606
 
5607
- #: classes/helpers/FrmAppHelper.php:2593
5608
  msgid "Farsi/Persian"
5609
  msgstr ""
5610
 
5611
- #: classes/helpers/FrmAppHelper.php:2594
5612
  msgid "Filipino"
5613
  msgstr ""
5614
 
5615
- #: classes/helpers/FrmAppHelper.php:2595
5616
  msgid "Finnish"
5617
  msgstr ""
5618
 
5619
- #: classes/helpers/FrmAppHelper.php:2596
5620
  msgid "French"
5621
  msgstr ""
5622
 
5623
- #: classes/helpers/FrmAppHelper.php:2597
5624
  msgid "French/Canadian"
5625
  msgstr ""
5626
 
5627
- #: classes/helpers/FrmAppHelper.php:2598
5628
  msgid "French/Swiss"
5629
  msgstr ""
5630
 
5631
- #: classes/helpers/FrmAppHelper.php:2599
5632
  msgid "German"
5633
  msgstr ""
5634
 
5635
- #: classes/helpers/FrmAppHelper.php:2600
5636
  msgid "German/Austria"
5637
  msgstr ""
5638
 
5639
- #: classes/helpers/FrmAppHelper.php:2601
5640
  msgid "German/Switzerland"
5641
  msgstr ""
5642
 
5643
- #: classes/helpers/FrmAppHelper.php:2602
5644
  msgid "Greek"
5645
  msgstr ""
5646
 
5647
- #: classes/helpers/FrmAppHelper.php:2603
5648
- #: classes/helpers/FrmAppHelper.php:2604
5649
  msgid "Hebrew"
5650
  msgstr ""
5651
 
5652
- #: classes/helpers/FrmAppHelper.php:2605
5653
  msgid "Hindi"
5654
  msgstr ""
5655
 
5656
- #: classes/helpers/FrmAppHelper.php:2606
5657
  msgid "Hungarian"
5658
  msgstr ""
5659
 
5660
- #: classes/helpers/FrmAppHelper.php:2607
5661
  msgid "Icelandic"
5662
  msgstr ""
5663
 
5664
- #: classes/helpers/FrmAppHelper.php:2608
5665
  msgid "Indonesian"
5666
  msgstr ""
5667
 
5668
- #: classes/helpers/FrmAppHelper.php:2609
5669
  msgid "Italian"
5670
  msgstr ""
5671
 
5672
- #: classes/helpers/FrmAppHelper.php:2610
5673
  msgid "Japanese"
5674
  msgstr ""
5675
 
5676
- #: classes/helpers/FrmAppHelper.php:2611
5677
  msgid "Korean"
5678
  msgstr ""
5679
 
5680
- #: classes/helpers/FrmAppHelper.php:2612
5681
  msgid "Latvian"
5682
  msgstr ""
5683
 
5684
- #: classes/helpers/FrmAppHelper.php:2613
5685
  msgid "Lithuanian"
5686
  msgstr ""
5687
 
5688
- #: classes/helpers/FrmAppHelper.php:2614
5689
  msgid "Malaysian"
5690
  msgstr ""
5691
 
5692
- #: classes/helpers/FrmAppHelper.php:2615
5693
  msgid "Norwegian"
5694
  msgstr ""
5695
 
5696
- #: classes/helpers/FrmAppHelper.php:2616
5697
  msgid "Polish"
5698
  msgstr ""
5699
 
5700
- #: classes/helpers/FrmAppHelper.php:2617
5701
  msgid "Portuguese"
5702
  msgstr ""
5703
 
5704
- #: classes/helpers/FrmAppHelper.php:2618
5705
  msgid "Portuguese/Brazilian"
5706
  msgstr ""
5707
 
5708
- #: classes/helpers/FrmAppHelper.php:2619
5709
  msgid "Portuguese/Portugal"
5710
  msgstr ""
5711
 
5712
- #: classes/helpers/FrmAppHelper.php:2620
5713
  msgid "Romanian"
5714
  msgstr ""
5715
 
5716
- #: classes/helpers/FrmAppHelper.php:2621
5717
  msgid "Russian"
5718
  msgstr ""
5719
 
5720
- #: classes/helpers/FrmAppHelper.php:2622
5721
- #: classes/helpers/FrmAppHelper.php:2623
5722
  msgid "Serbian"
5723
  msgstr ""
5724
 
5725
- #: classes/helpers/FrmAppHelper.php:2624
5726
  msgid "Slovak"
5727
  msgstr ""
5728
 
5729
- #: classes/helpers/FrmAppHelper.php:2625
5730
  msgid "Slovenian"
5731
  msgstr ""
5732
 
5733
- #: classes/helpers/FrmAppHelper.php:2626
5734
  msgid "Spanish"
5735
  msgstr ""
5736
 
5737
- #: classes/helpers/FrmAppHelper.php:2627
5738
  msgid "Spanish/Latin America"
5739
  msgstr ""
5740
 
5741
- #: classes/helpers/FrmAppHelper.php:2628
5742
  msgid "Swedish"
5743
  msgstr ""
5744
 
5745
- #: classes/helpers/FrmAppHelper.php:2629
5746
  msgid "Tamil"
5747
  msgstr ""
5748
 
5749
- #: classes/helpers/FrmAppHelper.php:2630
5750
  msgid "Thai"
5751
  msgstr ""
5752
 
5753
- #: classes/helpers/FrmAppHelper.php:2631
5754
- #: classes/helpers/FrmAppHelper.php:2632
5755
  msgid "Turkish"
5756
  msgstr ""
5757
 
5758
- #: classes/helpers/FrmAppHelper.php:2633
5759
  msgid "Ukranian"
5760
  msgstr ""
5761
 
5762
- #: classes/helpers/FrmAppHelper.php:2634
5763
  msgid "Vietnamese"
5764
  msgstr ""
5765
 
@@ -5776,65 +5807,65 @@ msgstr ""
5776
  msgid "Your server is missing the simplexml_import_dom function"
5777
  msgstr ""
5778
 
5779
- #: classes/helpers/FrmXMLHelper.php:1018
5780
  msgid "Updated"
5781
  msgstr ""
5782
 
5783
- #: classes/helpers/FrmXMLHelper.php:1043
5784
  msgid "Nothing was imported or updated"
5785
  msgstr ""
5786
 
5787
  #. translators: %1$s: Number of items
5788
- #: classes/helpers/FrmXMLHelper.php:1058
5789
  msgid "%1$s Form"
5790
  msgid_plural "%1$s Forms"
5791
  msgstr[0] ""
5792
 
5793
  #. translators: %1$s: Number of items
5794
- #: classes/helpers/FrmXMLHelper.php:1062
5795
  msgid "%1$s Entry"
5796
  msgid_plural "%1$s Entries"
5797
  msgstr[0] ""
5798
 
5799
  #. translators: %1$s: Number of items
5800
- #: classes/helpers/FrmXMLHelper.php:1064
5801
  msgid "%1$s View"
5802
  msgid_plural "%1$s Views"
5803
  msgstr[0] ""
5804
 
5805
  #. translators: %1$s: Number of items
5806
- #: classes/helpers/FrmXMLHelper.php:1066
5807
  msgid "%1$s Post"
5808
  msgid_plural "%1$s Posts"
5809
  msgstr[0] ""
5810
 
5811
  #. translators: %1$s: Number of items
5812
- #: classes/helpers/FrmXMLHelper.php:1068
5813
  msgid "%1$s Style"
5814
  msgid_plural "%1$s Styles"
5815
  msgstr[0] ""
5816
 
5817
  #. translators: %1$s: Number of items
5818
- #: classes/helpers/FrmXMLHelper.php:1070
5819
  msgid "%1$s Term"
5820
  msgid_plural "%1$s Terms"
5821
  msgstr[0] ""
5822
 
5823
  #. translators: %1$s: Number of items
5824
- #: classes/helpers/FrmXMLHelper.php:1072
5825
  msgid "%1$s Form Action"
5826
  msgid_plural "%1$s Form Actions"
5827
  msgstr[0] ""
5828
 
5829
- #: classes/helpers/FrmXMLHelper.php:1096
5830
  msgid "Go to imported form"
5831
  msgstr ""
5832
 
5833
- #: classes/helpers/FrmXMLHelper.php:1301
5834
  msgid "Create Posts"
5835
  msgstr ""
5836
 
5837
- #: classes/helpers/FrmXMLHelper.php:1428
5838
  msgid "Email Notification"
5839
  msgstr ""
5840
 
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Formidable Forms 4.08\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2020-10-16T00:40:28+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.1.0\n"
15
  "X-Domain: formidable\n"
136
  msgid "Oops! You forgot to enter your license number."
137
  msgstr ""
138
 
139
+ #: classes/models/FrmAddon.php:553
140
  msgid "Your license has been activated. Enjoy!"
141
  msgstr ""
142
 
143
+ #: classes/models/FrmAddon.php:554
144
+ #: classes/models/FrmAddon.php:559
145
  msgid "That license key is invalid"
146
  msgstr ""
147
 
148
+ #: classes/models/FrmAddon.php:555
149
  msgid "That license is expired"
150
  msgstr ""
151
 
152
+ #: classes/models/FrmAddon.php:556
153
  msgid "That license has been refunded"
154
  msgstr ""
155
 
156
+ #: classes/models/FrmAddon.php:557
157
  msgid "That license has been used on too many sites"
158
  msgstr ""
159
 
160
+ #: classes/models/FrmAddon.php:558
161
  msgid "Oops! That is the wrong license key for this plugin."
162
  msgstr ""
163
 
164
+ #: classes/models/FrmAddon.php:575
165
  msgid "Cache cleared"
166
  msgstr ""
167
 
168
+ #: classes/models/FrmAddon.php:597
169
  msgid "That license was removed successfully"
170
  msgstr ""
171
 
172
+ #: classes/models/FrmAddon.php:599
173
  msgid "There was an error deactivating your license."
174
  msgstr ""
175
 
176
+ #: classes/models/FrmAddon.php:643
177
  msgid "Your License Key was invalid"
178
  msgstr ""
179
 
180
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
181
+ #: classes/models/FrmAddon.php:647
182
  msgid "You had an error communicating with the Formidable API. %1$sClick here%2$s for more information."
183
  msgstr ""
184
 
185
+ #: classes/models/FrmAddon.php:650
186
  msgid "You had an HTTP error connecting to the Formidable API"
187
  msgstr ""
188
 
189
  #. translators: %1$s: Error code, %2$s: Error message
190
+ #: classes/models/FrmAddon.php:661
191
  msgid "There was a %1$s error: %2$s"
192
  msgstr ""
193
 
262
  msgstr ""
263
 
264
  #: classes/models/FrmField.php:34
265
+ #: classes/controllers/FrmFormsController.php:1182
266
  msgid "Email"
267
  msgstr ""
268
 
287
  msgstr ""
288
 
289
  #: classes/models/FrmField.php:58
290
+ #: classes/controllers/FrmFormsController.php:1177
291
  msgid "User ID"
292
  msgstr ""
293
 
518
 
519
  #: classes/models/FrmEntryValidate.php:18
520
  #: classes/models/FrmSettings.php:110
521
+ #: classes/controllers/FrmFormActionsController.php:391
522
  msgid "You do not have permission to do that"
523
  msgstr ""
524
 
525
+ #: classes/models/FrmEntryValidate.php:233
526
+ #: classes/models/FrmEntryValidate.php:242
527
  msgid "Your entry appears to be spam!"
528
  msgstr ""
529
 
530
+ #: classes/models/FrmEntryValidate.php:237
531
  msgid "Your entry appears to be blocked spam!"
532
  msgstr ""
533
 
591
  #: classes/models/fields/FrmFieldType.php:583
592
  #: classes/helpers/FrmFieldsHelper.php:167
593
  #: classes/helpers/FrmFieldsHelper.php:296
594
+ #: classes/helpers/FrmXMLHelper.php:1179
595
  msgid "%s is invalid"
596
  msgstr ""
597
 
678
  #. translators: %1$s - field type
679
  #. translators: %1$s: Number of items
680
  #: classes/models/FrmFormMigrator.php:584
681
+ #: classes/helpers/FrmXMLHelper.php:1061
682
  msgid "%1$s Field"
683
  msgid_plural "%1$s Fields"
684
  msgstr[0] ""
717
  msgid "Upgrade"
718
  msgstr ""
719
 
720
+ #: classes/controllers/FrmAddonsController.php:58
721
  msgid "There are no plugins on your site that require a license"
722
  msgstr ""
723
 
724
+ #: classes/controllers/FrmAddonsController.php:578
725
  msgid "Installed"
726
  msgstr ""
727
 
728
+ #: classes/controllers/FrmAddonsController.php:583
729
+ #: classes/helpers/FrmAppHelper.php:2504
730
  msgid "Active"
731
  msgstr ""
732
 
733
+ #: classes/controllers/FrmAddonsController.php:588
734
  msgid "Not Installed"
735
  msgstr ""
736
 
737
+ #: classes/controllers/FrmAddonsController.php:840
738
  msgid "Your plugin has been installed. Please reload the page to see more options."
739
  msgstr ""
740
 
741
+ #: classes/controllers/FrmAddonsController.php:889
742
+ msgid "Sorry, your site requires FTP authentication. Please download plugins from FormidableForms.com and install them manually."
743
  msgstr ""
744
 
745
+ #: classes/controllers/FrmAddonsController.php:945
746
  msgid "Your plugin has been activated. Please reload the page to see more options."
747
  msgstr ""
748
 
749
+ #: classes/controllers/FrmAddonsController.php:977
750
  msgid "Your plugins have been installed and activated."
751
  msgstr ""
752
 
753
+ #: classes/controllers/FrmAddonsController.php:1077
754
+ msgid "Could not install an upgrade. Please download from formidableforms.com and install manually."
755
+ msgstr ""
756
+
757
  #: classes/controllers/FrmAppController.php:150
758
  msgid "Build"
759
  msgstr ""
1027
  #: classes/views/addons/list.php:86
1028
  #: classes/views/shared/upgrade_overlay.php:32
1029
  #: classes/helpers/FrmFormMigratorsHelper.php:131
1030
+ #: classes/helpers/FrmAppHelper.php:2503
1031
  msgid "Install"
1032
  msgstr ""
1033
 
1264
  #: classes/controllers/FrmFormsController.php:741
1265
  #: classes/controllers/FrmFormsController.php:745
1266
  #: classes/views/shared/mb_adv_info.php:98
1267
+ #: classes/helpers/FrmCSVExportHelper.php:223
1268
  msgid "Key"
1269
  msgstr ""
1270
 
1298
  msgid "Form Permissions"
1299
  msgstr ""
1300
 
1301
+ #: classes/controllers/FrmFormsController.php:986
1302
+ msgid "Allow editing, protect forms and files, limit entries, and save drafts. Upgrade to get form and entry permissions."
1303
+ msgstr ""
1304
+
1305
+ #: classes/controllers/FrmFormsController.php:990
1306
  msgid "Form Scheduling"
1307
  msgstr ""
1308
 
1309
+ #: classes/controllers/FrmFormsController.php:995
1310
  msgid "Form scheduling settings"
1311
  msgstr ""
1312
 
1313
+ #: classes/controllers/FrmFormsController.php:999
1314
  msgid "Styling & Buttons"
1315
  msgstr ""
1316
 
1317
+ #: classes/controllers/FrmFormsController.php:1005
1318
  msgid "Customize HTML"
1319
  msgstr ""
1320
 
1321
+ #: classes/controllers/FrmFormsController.php:1114
1322
  msgid "Customize field values with the following parameters."
1323
  msgstr ""
1324
 
1325
+ #: classes/controllers/FrmFormsController.php:1151
1326
  msgid "Separator"
1327
  msgstr ""
1328
 
1329
+ #: classes/controllers/FrmFormsController.php:1152
1330
  msgid "Use a different separator for checkbox fields"
1331
  msgstr ""
1332
 
1333
+ #: classes/controllers/FrmFormsController.php:1155
1334
  msgid "Date Format"
1335
  msgstr ""
1336
 
1337
+ #: classes/controllers/FrmFormsController.php:1158
1338
  #: classes/views/frm-fields/back-end/settings.php:27
1339
  msgid "Field Label"
1340
  msgstr ""
1341
 
1342
+ #: classes/controllers/FrmFormsController.php:1161
1343
  msgid "No Auto P"
1344
  msgstr ""
1345
 
1346
+ #: classes/controllers/FrmFormsController.php:1162
1347
  msgid "Do not automatically add any paragraphs or line breaks"
1348
  msgstr ""
1349
 
1350
+ #: classes/controllers/FrmFormsController.php:1178
1351
  msgid "First Name"
1352
  msgstr ""
1353
 
1354
+ #: classes/controllers/FrmFormsController.php:1179
1355
  msgid "Last Name"
1356
  msgstr ""
1357
 
1358
+ #: classes/controllers/FrmFormsController.php:1180
1359
  msgid "Display Name"
1360
  msgstr ""
1361
 
1362
+ #: classes/controllers/FrmFormsController.php:1181
1363
  msgid "User Login"
1364
  msgstr ""
1365
 
1366
+ #: classes/controllers/FrmFormsController.php:1183
1367
  msgid "Avatar"
1368
  msgstr ""
1369
 
1370
+ #: classes/controllers/FrmFormsController.php:1184
1371
  msgid "Author Link"
1372
  msgstr ""
1373
 
1374
+ #: classes/controllers/FrmFormsController.php:1197
1375
  #: classes/views/frm-entries/sidebar-shared.php:51
1376
  msgid "Entry ID"
1377
  msgstr ""
1378
 
1379
+ #: classes/controllers/FrmFormsController.php:1198
1380
  #: classes/controllers/FrmEntriesController.php:78
1381
  #: classes/views/frm-entries/sidebar-shared.php:57
1382
  #: classes/views/frm-entries/form.php:54
1383
  msgid "Entry Key"
1384
  msgstr ""
1385
 
1386
+ #: classes/controllers/FrmFormsController.php:1199
1387
  msgid "Post ID"
1388
  msgstr ""
1389
 
1390
+ #: classes/controllers/FrmFormsController.php:1200
1391
  msgid "User IP"
1392
  msgstr ""
1393
 
1394
+ #: classes/controllers/FrmFormsController.php:1201
1395
  msgid "Entry created"
1396
  msgstr ""
1397
 
1398
+ #: classes/controllers/FrmFormsController.php:1202
1399
  msgid "Entry updated"
1400
  msgstr ""
1401
 
1402
+ #: classes/controllers/FrmFormsController.php:1204
1403
  msgid "Site URL"
1404
  msgstr ""
1405
 
1406
+ #: classes/controllers/FrmFormsController.php:1205
1407
  msgid "Site Name"
1408
  msgstr ""
1409
 
1410
+ #: classes/controllers/FrmFormsController.php:1213
1411
  msgid "Default Msg"
1412
  msgstr ""
1413
 
1414
+ #: classes/controllers/FrmFormsController.php:1214
1415
  msgid "Default HTML"
1416
  msgstr ""
1417
 
1418
+ #: classes/controllers/FrmFormsController.php:1215
1419
  msgid "Default Plain"
1420
  msgstr ""
1421
 
1422
+ #: classes/controllers/FrmFormsController.php:1304
1423
  msgid "No forms were specified"
1424
  msgstr ""
1425
 
1426
+ #: classes/controllers/FrmFormsController.php:1419
1427
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1428
  msgstr ""
1429
 
1430
+ #: classes/controllers/FrmFormsController.php:1534
1431
  #: classes/views/frm-forms/list-templates.php:203
1432
  #: classes/views/xml/import_form.php:133
1433
  #: classes/views/styles/manage.php:59
1439
  msgid "(no title)"
1440
  msgstr ""
1441
 
1442
+ #: classes/controllers/FrmFormsController.php:1580
1443
+ #: classes/controllers/FrmFormsController.php:1594
1444
  msgid "Please select a valid form"
1445
  msgstr ""
1446
 
1447
+ #: classes/controllers/FrmFormsController.php:1816
1448
  msgid "Please wait while you are redirected."
1449
  msgstr ""
1450
 
1451
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
1452
+ #: classes/controllers/FrmFormsController.php:1852
1453
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1454
  msgstr ""
1455
 
1478
  msgid "Form Actions"
1479
  msgstr ""
1480
 
1481
+ #: classes/controllers/FrmFormActionsController.php:141
1482
+ #: classes/views/frm-form-actions/default_actions.php:77
1483
  msgid "eCommerce"
1484
  msgstr ""
1485
 
1486
+ #: classes/controllers/FrmFormActionsController.php:149
1487
  msgid "Email Marketing"
1488
  msgstr ""
1489
 
1490
+ #: classes/controllers/FrmFormActionsController.php:161
1491
  msgid "CRM"
1492
  msgstr ""
1493
 
1494
  #. translators: %s: Name of form action
1495
+ #: classes/controllers/FrmFormActionsController.php:205
1496
  msgid "%s form actions"
1497
  msgstr ""
1498
 
1501
  msgstr ""
1502
 
1503
  #: classes/controllers/FrmEntriesController.php:85
1504
+ #: classes/helpers/FrmCSVExportHelper.php:218
1505
  msgid "Created By"
1506
  msgstr ""
1507
 
1629
  #: classes/views/frm-forms/new-form-overlay.php:36
1630
  #: classes/views/shared/confirm-overlay.php:19
1631
  #: classes/views/shared/admin-header.php:54
1632
+ #: classes/helpers/FrmAppHelper.php:2464
1633
  msgid "Cancel"
1634
  msgstr ""
1635
 
1641
  #: classes/views/shared/mb_adv_info.php:40
1642
  #: classes/views/shared/mb_adv_info.php:183
1643
  #: classes/views/frm-entries/list.php:47
1644
+ #: classes/helpers/FrmAppHelper.php:979
1645
  msgid "Search"
1646
  msgstr ""
1647
 
1832
  msgstr ""
1833
 
1834
  #: classes/views/frm-forms/settings-advanced.php:98
1835
+ #: classes/helpers/FrmAppHelper.php:1104
1836
  msgid "Select a Page"
1837
  msgstr ""
1838
 
1991
  msgid "Register User"
1992
  msgstr ""
1993
 
1994
+ #: classes/views/frm-form-actions/default_actions.php:67
1995
  msgid "Twilio SMS"
1996
  msgstr ""
1997
 
1998
+ #: classes/views/frm-form-actions/default_actions.php:141
1999
  msgid "Send API data"
2000
  msgstr ""
2001
 
2079
  msgstr ""
2080
 
2081
  #: classes/views/frm-form-actions/_action_inside.php:70
2082
+ msgid "Email attachments"
2083
  msgstr ""
2084
 
2085
  #: classes/views/frm-form-actions/_action_inside.php:71
2086
+ msgid "Attachment"
2087
+ msgstr ""
2088
+
2089
+ #: classes/views/frm-form-actions/_action_inside.php:75
2090
+ msgid "Conditional emails"
2091
+ msgstr ""
2092
+
2093
+ #: classes/views/frm-form-actions/_action_inside.php:76
2094
  msgid "Use Conditional Logic"
2095
  msgstr ""
2096
 
2097
+ #: classes/views/frm-form-actions/_action_inside.php:93
2098
  msgid "Form action automations"
2099
  msgstr ""
2100
 
2101
+ #: classes/views/frm-form-actions/_action_inside.php:94
2102
  msgid "Setup Automation"
2103
  msgstr ""
2104
 
2105
+ #: classes/views/frm-form-actions/_action_inside.php:106
2106
  msgid "Form action logs"
2107
  msgstr ""
2108
 
2109
+ #: classes/views/frm-form-actions/_action_inside.php:108
2110
  msgid "Install logging to get more information on API requests."
2111
  msgstr ""
2112
 
2113
  #. translators: %1$s: The ID of the form action.
2114
+ #: classes/views/frm-form-actions/_action_inside.php:118
2115
  msgid "Action ID: %1$s"
2116
  msgstr ""
2117
 
2167
  msgstr ""
2168
 
2169
  #: classes/views/solutions/_import.php:51
2170
+ #: classes/helpers/FrmXMLHelper.php:1018
2171
  msgid "Imported"
2172
  msgstr ""
2173
 
2185
 
2186
  #: classes/views/shared/confirm-overlay.php:15
2187
  #: classes/views/shared/info-overlay.php:15
2188
+ #: classes/helpers/FrmAppHelper.php:2471
2189
  msgid "Are you sure?"
2190
  msgstr ""
2191
 
2298
  msgstr ""
2299
 
2300
  #: classes/views/shared/mb_adv_info.php:95
2301
+ #: classes/helpers/FrmCSVExportHelper.php:222
2302
+ #: classes/helpers/FrmAppHelper.php:2443
2303
  msgid "ID"
2304
  msgstr ""
2305
 
2309
 
2310
  #: classes/views/shared/mb_adv_info.php:113
2311
  #: classes/views/shared/mb_adv_info.php:127
2312
+ #: classes/helpers/FrmAppHelper.php:2505
2313
  msgid "Select a Field"
2314
  msgstr ""
2315
 
2933
  msgstr ""
2934
 
2935
  #: classes/views/frm-fields/back-end/settings.php:270
2936
+ #: classes/helpers/FrmAppHelper.php:2465
2937
  msgid "Default"
2938
  msgstr ""
2939
 
3155
  msgstr ""
3156
 
3157
  #: classes/views/frm-settings/general.php:9
3158
+ msgid "Your license key provides access to new features and updates."
3159
  msgstr ""
3160
 
3161
  #: classes/views/frm-settings/general.php:15
3630
  msgid "Permanently delete this entry?"
3631
  msgstr ""
3632
 
3633
+ #: classes/helpers/FrmEntriesListHelper.php:344
3634
+ msgid "ALL selected entries in this form will be permanently deleted. Want to proceed?"
3635
+ msgstr ""
3636
+
3637
  #: classes/helpers/FrmFormsListHelper.php:106
3638
  msgid "No forms found in the trash."
3639
  msgstr ""
3685
 
3686
  #: classes/helpers/FrmFormsListHelper.php:342
3687
  #: classes/helpers/FrmFormsHelper.php:1198
3688
+ #: classes/helpers/FrmCSVExportHelper.php:220
3689
  msgid "Draft"
3690
  msgstr ""
3691
 
3692
+ #: classes/helpers/FrmFormsListHelper.php:360
3693
+ msgid "ALL selected forms and their entries will be permanently deleted. Want to proceed?"
3694
+ msgstr ""
3695
+
3696
  #: classes/helpers/FrmFieldsHelper.php:286
3697
+ #: classes/helpers/FrmAppHelper.php:2476
3698
  msgid "The entered values do not match"
3699
  msgstr ""
3700
 
3705
 
3706
  #: classes/helpers/FrmFieldsHelper.php:456
3707
  #: classes/helpers/FrmFieldsHelper.php:457
3708
+ #: classes/helpers/FrmAppHelper.php:2480
3709
  msgid "New Option"
3710
  msgstr ""
3711
 
4905
  msgstr ""
4906
 
4907
  #: classes/helpers/FrmListHelper.php:262
4908
+ #: classes/helpers/FrmAppHelper.php:2506
4909
  msgid "No items found."
4910
  msgstr ""
4911
 
4917
  msgid "Bulk Actions"
4918
  msgstr ""
4919
 
4920
+ #: classes/helpers/FrmListHelper.php:405
4921
+ #: classes/helpers/FrmAppHelper.php:2470
4922
+ msgid "Heads up"
4923
+ msgstr ""
4924
+
4925
+ #: classes/helpers/FrmListHelper.php:409
4926
  msgid "Apply"
4927
  msgstr ""
4928
 
4929
+ #: classes/helpers/FrmListHelper.php:484
4930
+ #: classes/helpers/FrmListHelper.php:1173
4931
  msgid "Show more details"
4932
  msgstr ""
4933
 
4934
  #. translators: %s: Number of items
4935
+ #: classes/helpers/FrmListHelper.php:592
4936
+ #: classes/helpers/FrmListHelper.php:1199
4937
  msgid "%s item"
4938
  msgid_plural "%s items"
4939
  msgstr[0] ""
4940
 
4941
+ #: classes/helpers/FrmListHelper.php:623
4942
+ #: classes/helpers/FrmListHelper.php:627
4943
  msgid "Current Page"
4944
  msgstr ""
4945
 
4946
  #. translators: %1$s: Current page number, %2$s: Total pages
4947
+ #: classes/helpers/FrmListHelper.php:635
4948
  msgctxt "paging"
4949
  msgid "%1$s of %2$s"
4950
  msgstr ""
4951
 
4952
+ #: classes/helpers/FrmListHelper.php:699
4953
  msgid "First page"
4954
  msgstr ""
4955
 
4956
+ #: classes/helpers/FrmListHelper.php:700
4957
  msgid "Last page"
4958
  msgstr ""
4959
 
4960
+ #: classes/helpers/FrmListHelper.php:701
4961
  msgid "Previous page"
4962
  msgstr ""
4963
 
4964
+ #: classes/helpers/FrmListHelper.php:702
4965
  msgid "Next page"
4966
  msgstr ""
4967
 
4968
+ #: classes/helpers/FrmListHelper.php:922
4969
  msgid "Select All"
4970
  msgstr ""
4971
 
5182
  msgstr ""
5183
 
5184
  #: classes/helpers/FrmFormsHelper.php:1457
5185
+ #: classes/helpers/FrmAppHelper.php:2500
5186
  msgid "See the list of reserved words in WordPress."
5187
  msgstr ""
5188
 
5196
  msgid "The redirect URL is using the parameters \"%s\", which are reserved by WordPress. "
5197
  msgstr ""
5198
 
5199
+ #: classes/helpers/FrmCSVExportHelper.php:126
5200
  msgid "(label)"
5201
  msgstr ""
5202
 
5203
+ #: classes/helpers/FrmCSVExportHelper.php:209
5204
  msgid "Comment"
5205
  msgstr ""
5206
 
5207
+ #: classes/helpers/FrmCSVExportHelper.php:210
5208
  msgid "Comment User"
5209
  msgstr ""
5210
 
5211
+ #: classes/helpers/FrmCSVExportHelper.php:211
5212
  msgid "Comment Date"
5213
  msgstr ""
5214
 
5215
+ #: classes/helpers/FrmCSVExportHelper.php:216
5216
  msgid "Timestamp"
5217
  msgstr ""
5218
 
5219
+ #: classes/helpers/FrmCSVExportHelper.php:217
5220
  msgid "Last Updated"
5221
  msgstr ""
5222
 
5223
+ #: classes/helpers/FrmCSVExportHelper.php:219
5224
  msgid "Updated By"
5225
  msgstr ""
5226
 
5227
+ #: classes/helpers/FrmCSVExportHelper.php:221
5228
  msgid "IP"
5229
  msgstr ""
5230
 
5231
+ #: classes/helpers/FrmCSVExportHelper.php:225
5232
  msgid "Parent ID"
5233
  msgstr ""
5234
 
5235
+ #: classes/helpers/FrmAppHelper.php:130
5236
  msgid "Your account has expired"
5237
  msgstr ""
5238
 
5239
+ #. translators: %1$s: start HTML tag, %2$s: end HTML tag
5240
+ #: classes/helpers/FrmAppHelper.php:156
5241
+ msgid "Your form subscription expires in %1$s day%2$s."
5242
+ msgid_plural "Your form subscription expires in %1$s days%2$s."
5243
+ msgstr[0] ""
5244
+
5245
+ #: classes/helpers/FrmAppHelper.php:964
5246
  msgid "Add New"
5247
  msgstr ""
5248
 
5249
+ #: classes/helpers/FrmAppHelper.php:1255
5250
  msgid "View Forms"
5251
  msgstr ""
5252
 
5253
+ #: classes/helpers/FrmAppHelper.php:1256
5254
  msgid "Add and Edit Forms"
5255
  msgstr ""
5256
 
5257
+ #: classes/helpers/FrmAppHelper.php:1257
5258
  msgid "Delete Forms"
5259
  msgstr ""
5260
 
5261
+ #: classes/helpers/FrmAppHelper.php:1258
5262
  msgid "Access this Settings Page"
5263
  msgstr ""
5264
 
5265
+ #: classes/helpers/FrmAppHelper.php:1259
5266
  msgid "View Entries from Admin Area"
5267
  msgstr ""
5268
 
5269
+ #: classes/helpers/FrmAppHelper.php:1260
5270
  msgid "Delete Entries from Admin Area"
5271
  msgstr ""
5272
 
5273
+ #: classes/helpers/FrmAppHelper.php:1267
5274
  msgid "Add Entries from Admin Area"
5275
  msgstr ""
5276
 
5277
+ #: classes/helpers/FrmAppHelper.php:1268
5278
  msgid "Edit Entries from Admin Area"
5279
  msgstr ""
5280
 
5281
+ #: classes/helpers/FrmAppHelper.php:1269
5282
  msgid "View Reports"
5283
  msgstr ""
5284
 
5285
+ #: classes/helpers/FrmAppHelper.php:1270
5286
  msgid "Add/Edit Views"
5287
  msgstr ""
5288
 
5289
+ #: classes/helpers/FrmAppHelper.php:1936
5290
  msgid "at"
5291
  msgstr ""
5292
 
5293
+ #: classes/helpers/FrmAppHelper.php:2080
5294
  msgid "year"
5295
  msgstr ""
5296
 
5297
+ #: classes/helpers/FrmAppHelper.php:2081
5298
  msgid "years"
5299
  msgstr ""
5300
 
5301
+ #: classes/helpers/FrmAppHelper.php:2085
5302
  msgid "month"
5303
  msgstr ""
5304
 
5305
+ #: classes/helpers/FrmAppHelper.php:2086
5306
  msgid "months"
5307
  msgstr ""
5308
 
5309
+ #: classes/helpers/FrmAppHelper.php:2090
5310
  msgid "week"
5311
  msgstr ""
5312
 
5313
+ #: classes/helpers/FrmAppHelper.php:2091
5314
  msgid "weeks"
5315
  msgstr ""
5316
 
5317
+ #: classes/helpers/FrmAppHelper.php:2095
5318
  msgid "day"
5319
  msgstr ""
5320
 
5321
+ #: classes/helpers/FrmAppHelper.php:2096
5322
  msgid "days"
5323
  msgstr ""
5324
 
5325
+ #: classes/helpers/FrmAppHelper.php:2100
5326
  msgid "hour"
5327
  msgstr ""
5328
 
5329
+ #: classes/helpers/FrmAppHelper.php:2101
5330
  msgid "hours"
5331
  msgstr ""
5332
 
5333
+ #: classes/helpers/FrmAppHelper.php:2105
5334
  msgid "minute"
5335
  msgstr ""
5336
 
5337
+ #: classes/helpers/FrmAppHelper.php:2106
5338
  msgid "minutes"
5339
  msgstr ""
5340
 
5341
+ #: classes/helpers/FrmAppHelper.php:2110
5342
  msgid "second"
5343
  msgstr ""
5344
 
5345
+ #: classes/helpers/FrmAppHelper.php:2111
5346
  msgid "seconds"
5347
  msgstr ""
5348
 
5349
+ #: classes/helpers/FrmAppHelper.php:2205
5350
  msgid "Give this action a label for easy reference."
5351
  msgstr ""
5352
 
5353
+ #: classes/helpers/FrmAppHelper.php:2206
5354
  msgid "Add one or more recipient addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com. [admin_email] is the address set in WP General Settings."
5355
  msgstr ""
5356
 
5357
+ #: classes/helpers/FrmAppHelper.php:2207
5358
  msgid "Add CC addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com."
5359
  msgstr ""
5360
 
5361
+ #: classes/helpers/FrmAppHelper.php:2208
5362
  msgid "Add BCC addresses separated by a \",\". FORMAT: Name <name@email.com> or name@email.com."
5363
  msgstr ""
5364
 
5365
+ #: classes/helpers/FrmAppHelper.php:2209
5366
  msgid "If you would like a different reply to address than the \"from\" address, add a single address here. FORMAT: Name <name@email.com> or name@email.com."
5367
  msgstr ""
5368
 
5369
+ #: classes/helpers/FrmAppHelper.php:2210
5370
  msgid "Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com."
5371
  msgstr ""
5372
 
5373
  #. translators: %1$s: Form name, %2$s: Date
5374
+ #: classes/helpers/FrmAppHelper.php:2212
5375
  msgid "If you leave the subject blank, the default will be used: %1$s Form submitted on %2$s"
5376
  msgstr ""
5377
 
5378
+ #: classes/helpers/FrmAppHelper.php:2406
5379
+ #: classes/helpers/FrmAppHelper.php:2485
5380
  msgid "Please wait while your site updates."
5381
  msgstr ""
5382
 
5383
+ #: classes/helpers/FrmAppHelper.php:2407
5384
  msgid "Are you sure you want to deauthorize Formidable Forms on this site?"
5385
  msgstr ""
5386
 
5387
+ #: classes/helpers/FrmAppHelper.php:2410
5388
+ #: classes/helpers/FrmAppHelper.php:2439
5389
  msgid "Loading&hellip;"
5390
  msgstr ""
5391
 
5392
+ #: classes/helpers/FrmAppHelper.php:2440
5393
  msgid "Remove"
5394
  msgstr ""
5395
 
5396
+ #: classes/helpers/FrmAppHelper.php:2444
5397
  msgid "No results match"
5398
  msgstr ""
5399
 
5400
+ #: classes/helpers/FrmAppHelper.php:2445
5401
  msgid "That file looks like Spam."
5402
  msgstr ""
5403
 
5404
+ #: classes/helpers/FrmAppHelper.php:2446
5405
  msgid "There is an error in the calculation in the field with key"
5406
  msgstr ""
5407
 
5408
+ #: classes/helpers/FrmAppHelper.php:2447
5409
  msgid "Please complete the preceding required fields before uploading a file."
5410
  msgstr ""
5411
 
5412
+ #: classes/helpers/FrmAppHelper.php:2458
5413
  msgid "(Click to add description)"
5414
  msgstr ""
5415
 
5416
+ #: classes/helpers/FrmAppHelper.php:2459
5417
  msgid "(Blank)"
5418
  msgstr ""
5419
 
5420
+ #: classes/helpers/FrmAppHelper.php:2460
5421
  msgid "(no label)"
5422
  msgstr ""
5423
 
5424
+ #: classes/helpers/FrmAppHelper.php:2461
5425
  msgid "Saving"
5426
  msgstr ""
5427
 
5428
+ #: classes/helpers/FrmAppHelper.php:2462
5429
  msgid "Saved"
5430
  msgstr ""
5431
 
5432
+ #: classes/helpers/FrmAppHelper.php:2463
5433
  msgid "OK"
5434
  msgstr ""
5435
 
5436
+ #: classes/helpers/FrmAppHelper.php:2466
5437
  msgid "Clear default value when typing"
5438
  msgstr ""
5439
 
5440
+ #: classes/helpers/FrmAppHelper.php:2467
5441
  msgid "Do not clear default value when typing"
5442
  msgstr ""
5443
 
5444
+ #: classes/helpers/FrmAppHelper.php:2468
5445
  msgid "Default value will pass form validation"
5446
  msgstr ""
5447
 
5448
+ #: classes/helpers/FrmAppHelper.php:2469
5449
  msgid "Default value will NOT pass form validation"
5450
  msgstr ""
5451
 
5452
+ #: classes/helpers/FrmAppHelper.php:2472
 
 
 
 
5453
  msgid "Are you sure you want to delete this field and all data associated with it?"
5454
  msgstr ""
5455
 
5456
+ #: classes/helpers/FrmAppHelper.php:2473
5457
  msgid "All fields inside this Section will be deleted along with their data. Are you sure you want to delete this group of fields?"
5458
  msgstr ""
5459
 
5460
+ #: classes/helpers/FrmAppHelper.php:2474
5461
  msgid "Warning: If you have entries with multiple rows, all but the first row will be lost."
5462
  msgstr ""
5463
 
5464
+ #: classes/helpers/FrmAppHelper.php:2477
5465
  msgid "Enter Email"
5466
  msgstr ""
5467
 
5468
+ #: classes/helpers/FrmAppHelper.php:2478
5469
  msgid "Confirm Email"
5470
  msgstr ""
5471
 
5472
+ #: classes/helpers/FrmAppHelper.php:2479
5473
  msgid "Conditional content here"
5474
  msgstr ""
5475
 
5476
+ #: classes/helpers/FrmAppHelper.php:2481
5477
  msgid "In certain browsers (e.g. Firefox) text will not display correctly if the field height is too small relative to the field padding and text size. Please increase your field height or decrease your field padding."
5478
  msgstr ""
5479
 
5480
+ #: classes/helpers/FrmAppHelper.php:2482
5481
  msgid "Enter Password"
5482
  msgstr ""
5483
 
5484
+ #: classes/helpers/FrmAppHelper.php:2483
5485
  msgid "Confirm Password"
5486
  msgstr ""
5487
 
5488
+ #: classes/helpers/FrmAppHelper.php:2484
5489
  msgid "Import Complete"
5490
  msgstr ""
5491
 
5492
+ #: classes/helpers/FrmAppHelper.php:2486
5493
  msgid "Warning: There is no way to retrieve unsaved entries."
5494
  msgstr ""
5495
 
5496
+ #: classes/helpers/FrmAppHelper.php:2487
5497
  msgid "Private"
5498
  msgstr ""
5499
 
5500
+ #: classes/helpers/FrmAppHelper.php:2490
5501
  msgid "No new licenses were found"
5502
  msgstr ""
5503
 
5504
+ #: classes/helpers/FrmAppHelper.php:2491
5505
  msgid "This calculation has at least one unmatched ( ) { } [ ]."
5506
  msgstr ""
5507
 
5508
+ #: classes/helpers/FrmAppHelper.php:2492
5509
  msgid "This calculation may have shortcodes that work in Views but not forms."
5510
  msgstr ""
5511
 
5512
+ #: classes/helpers/FrmAppHelper.php:2493
5513
  msgid "This calculation may have shortcodes that work in text calculations but not numeric calculations."
5514
  msgstr ""
5515
 
5516
+ #: classes/helpers/FrmAppHelper.php:2494
5517
  msgid "This form action is limited to one per form. Please edit the existing form action."
5518
  msgstr ""
5519
 
5520
  #. Translators: %s is the name of a Detail Page Slug that is a reserved word.
5521
+ #: classes/helpers/FrmAppHelper.php:2497
5522
  msgid "The Detail Page Slug \"%s\" is reserved by WordPress. This may cause problems. Is this intentional?"
5523
  msgstr ""
5524
 
5525
  #. Translators: %s is the name of a parameter that is a reserved word. More than one word could be listed here, though that would not be common.
5526
+ #: classes/helpers/FrmAppHelper.php:2499
5527
  msgid "The parameter \"%s\" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? "
5528
  msgstr ""
5529
 
5530
+ #: classes/helpers/FrmAppHelper.php:2501
5531
  msgid "Please enter a Repeat Limit that is greater than 1."
5532
  msgstr ""
5533
 
5534
+ #: classes/helpers/FrmAppHelper.php:2502
5535
  msgid "Please select a limit between 0 and 200."
5536
  msgstr ""
5537
 
5538
+ #: classes/helpers/FrmAppHelper.php:2534
5539
  msgid "You are running an outdated version of Formidable. This plugin may not work correctly if you do not update Formidable."
5540
  msgstr ""
5541
 
5542
+ #: classes/helpers/FrmAppHelper.php:2561
5543
  msgid "You are running a version of Formidable Forms that may not be compatible with your version of Formidable Forms Pro."
5544
  msgstr ""
5545
 
5546
+ #: classes/helpers/FrmAppHelper.php:2589
5547
  msgid "The version of PHP on your server is too low. If this is not corrected, you may see issues with Formidable Forms. Please contact your web host and ask to be updated to PHP 7.0+."
5548
  msgstr ""
5549
 
5550
+ #: classes/helpers/FrmAppHelper.php:2595
5551
  msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
5552
  msgstr ""
5553
 
5554
+ #: classes/helpers/FrmAppHelper.php:2609
5555
  msgid "English"
5556
  msgstr ""
5557
 
5558
+ #: classes/helpers/FrmAppHelper.php:2610
5559
  msgid "Afrikaans"
5560
  msgstr ""
5561
 
5562
+ #: classes/helpers/FrmAppHelper.php:2611
5563
  msgid "Albanian"
5564
  msgstr ""
5565
 
5566
+ #: classes/helpers/FrmAppHelper.php:2612
5567
  msgid "Arabic"
5568
  msgstr ""
5569
 
5570
+ #: classes/helpers/FrmAppHelper.php:2613
5571
  msgid "Armenian"
5572
  msgstr ""
5573
 
5574
+ #: classes/helpers/FrmAppHelper.php:2614
5575
  msgid "Azerbaijani"
5576
  msgstr ""
5577
 
5578
+ #: classes/helpers/FrmAppHelper.php:2615
5579
  msgid "Basque"
5580
  msgstr ""
5581
 
5582
+ #: classes/helpers/FrmAppHelper.php:2616
5583
  msgid "Bosnian"
5584
  msgstr ""
5585
 
5586
+ #: classes/helpers/FrmAppHelper.php:2617
5587
  msgid "Bulgarian"
5588
  msgstr ""
5589
 
5590
+ #: classes/helpers/FrmAppHelper.php:2618
5591
  msgid "Catalan"
5592
  msgstr ""
5593
 
5594
+ #: classes/helpers/FrmAppHelper.php:2619
5595
  msgid "Chinese Hong Kong"
5596
  msgstr ""
5597
 
5598
+ #: classes/helpers/FrmAppHelper.php:2620
5599
  msgid "Chinese Simplified"
5600
  msgstr ""
5601
 
5602
+ #: classes/helpers/FrmAppHelper.php:2621
5603
  msgid "Chinese Traditional"
5604
  msgstr ""
5605
 
5606
+ #: classes/helpers/FrmAppHelper.php:2622
5607
  msgid "Croatian"
5608
  msgstr ""
5609
 
5610
+ #: classes/helpers/FrmAppHelper.php:2623
5611
  msgid "Czech"
5612
  msgstr ""
5613
 
5614
+ #: classes/helpers/FrmAppHelper.php:2624
5615
  msgid "Danish"
5616
  msgstr ""
5617
 
5618
+ #: classes/helpers/FrmAppHelper.php:2625
5619
  msgid "Dutch"
5620
  msgstr ""
5621
 
5622
+ #: classes/helpers/FrmAppHelper.php:2626
5623
  msgid "English/UK"
5624
  msgstr ""
5625
 
5626
+ #: classes/helpers/FrmAppHelper.php:2627
5627
  msgid "Esperanto"
5628
  msgstr ""
5629
 
5630
+ #: classes/helpers/FrmAppHelper.php:2628
5631
  msgid "Estonian"
5632
  msgstr ""
5633
 
5634
+ #: classes/helpers/FrmAppHelper.php:2629
5635
  msgid "Faroese"
5636
  msgstr ""
5637
 
5638
+ #: classes/helpers/FrmAppHelper.php:2630
5639
  msgid "Farsi/Persian"
5640
  msgstr ""
5641
 
5642
+ #: classes/helpers/FrmAppHelper.php:2631
5643
  msgid "Filipino"
5644
  msgstr ""
5645
 
5646
+ #: classes/helpers/FrmAppHelper.php:2632
5647
  msgid "Finnish"
5648
  msgstr ""
5649
 
5650
+ #: classes/helpers/FrmAppHelper.php:2633
5651
  msgid "French"
5652
  msgstr ""
5653
 
5654
+ #: classes/helpers/FrmAppHelper.php:2634
5655
  msgid "French/Canadian"
5656
  msgstr ""
5657
 
5658
+ #: classes/helpers/FrmAppHelper.php:2635
5659
  msgid "French/Swiss"
5660
  msgstr ""
5661
 
5662
+ #: classes/helpers/FrmAppHelper.php:2636
5663
  msgid "German"
5664
  msgstr ""
5665
 
5666
+ #: classes/helpers/FrmAppHelper.php:2637
5667
  msgid "German/Austria"
5668
  msgstr ""
5669
 
5670
+ #: classes/helpers/FrmAppHelper.php:2638
5671
  msgid "German/Switzerland"
5672
  msgstr ""
5673
 
5674
+ #: classes/helpers/FrmAppHelper.php:2639
5675
  msgid "Greek"
5676
  msgstr ""
5677
 
5678
+ #: classes/helpers/FrmAppHelper.php:2640
5679
+ #: classes/helpers/FrmAppHelper.php:2641
5680
  msgid "Hebrew"
5681
  msgstr ""
5682
 
5683
+ #: classes/helpers/FrmAppHelper.php:2642
5684
  msgid "Hindi"
5685
  msgstr ""
5686
 
5687
+ #: classes/helpers/FrmAppHelper.php:2643
5688
  msgid "Hungarian"
5689
  msgstr ""
5690
 
5691
+ #: classes/helpers/FrmAppHelper.php:2644
5692
  msgid "Icelandic"
5693
  msgstr ""
5694
 
5695
+ #: classes/helpers/FrmAppHelper.php:2645
5696
  msgid "Indonesian"
5697
  msgstr ""
5698
 
5699
+ #: classes/helpers/FrmAppHelper.php:2646
5700
  msgid "Italian"
5701
  msgstr ""
5702
 
5703
+ #: classes/helpers/FrmAppHelper.php:2647
5704
  msgid "Japanese"
5705
  msgstr ""
5706
 
5707
+ #: classes/helpers/FrmAppHelper.php:2648
5708
  msgid "Korean"
5709
  msgstr ""
5710
 
5711
+ #: classes/helpers/FrmAppHelper.php:2649
5712
  msgid "Latvian"
5713
  msgstr ""
5714
 
5715
+ #: classes/helpers/FrmAppHelper.php:2650
5716
  msgid "Lithuanian"
5717
  msgstr ""
5718
 
5719
+ #: classes/helpers/FrmAppHelper.php:2651
5720
  msgid "Malaysian"
5721
  msgstr ""
5722
 
5723
+ #: classes/helpers/FrmAppHelper.php:2652
5724
  msgid "Norwegian"
5725
  msgstr ""
5726
 
5727
+ #: classes/helpers/FrmAppHelper.php:2653
5728
  msgid "Polish"
5729
  msgstr ""
5730
 
5731
+ #: classes/helpers/FrmAppHelper.php:2654
5732
  msgid "Portuguese"
5733
  msgstr ""
5734
 
5735
+ #: classes/helpers/FrmAppHelper.php:2655
5736
  msgid "Portuguese/Brazilian"
5737
  msgstr ""
5738
 
5739
+ #: classes/helpers/FrmAppHelper.php:2656
5740
  msgid "Portuguese/Portugal"
5741
  msgstr ""
5742
 
5743
+ #: classes/helpers/FrmAppHelper.php:2657
5744
  msgid "Romanian"
5745
  msgstr ""
5746
 
5747
+ #: classes/helpers/FrmAppHelper.php:2658
5748
  msgid "Russian"
5749
  msgstr ""
5750
 
5751
+ #: classes/helpers/FrmAppHelper.php:2659
5752
+ #: classes/helpers/FrmAppHelper.php:2660
5753
  msgid "Serbian"
5754
  msgstr ""
5755
 
5756
+ #: classes/helpers/FrmAppHelper.php:2661
5757
  msgid "Slovak"
5758
  msgstr ""
5759
 
5760
+ #: classes/helpers/FrmAppHelper.php:2662
5761
  msgid "Slovenian"
5762
  msgstr ""
5763
 
5764
+ #: classes/helpers/FrmAppHelper.php:2663
5765
  msgid "Spanish"
5766
  msgstr ""
5767
 
5768
+ #: classes/helpers/FrmAppHelper.php:2664
5769
  msgid "Spanish/Latin America"
5770
  msgstr ""
5771
 
5772
+ #: classes/helpers/FrmAppHelper.php:2665
5773
  msgid "Swedish"
5774
  msgstr ""
5775
 
5776
+ #: classes/helpers/FrmAppHelper.php:2666
5777
  msgid "Tamil"
5778
  msgstr ""
5779
 
5780
+ #: classes/helpers/FrmAppHelper.php:2667
5781
  msgid "Thai"
5782
  msgstr ""
5783
 
5784
+ #: classes/helpers/FrmAppHelper.php:2668
5785
+ #: classes/helpers/FrmAppHelper.php:2669
5786
  msgid "Turkish"
5787
  msgstr ""
5788
 
5789
+ #: classes/helpers/FrmAppHelper.php:2670
5790
  msgid "Ukranian"
5791
  msgstr ""
5792
 
5793
+ #: classes/helpers/FrmAppHelper.php:2671
5794
  msgid "Vietnamese"
5795
  msgstr ""
5796
 
5807
  msgid "Your server is missing the simplexml_import_dom function"
5808
  msgstr ""
5809
 
5810
+ #: classes/helpers/FrmXMLHelper.php:1019
5811
  msgid "Updated"
5812
  msgstr ""
5813
 
5814
+ #: classes/helpers/FrmXMLHelper.php:1044
5815
  msgid "Nothing was imported or updated"
5816
  msgstr ""
5817
 
5818
  #. translators: %1$s: Number of items
5819
+ #: classes/helpers/FrmXMLHelper.php:1059
5820
  msgid "%1$s Form"
5821
  msgid_plural "%1$s Forms"
5822
  msgstr[0] ""
5823
 
5824
  #. translators: %1$s: Number of items
5825
+ #: classes/helpers/FrmXMLHelper.php:1063
5826
  msgid "%1$s Entry"
5827
  msgid_plural "%1$s Entries"
5828
  msgstr[0] ""
5829
 
5830
  #. translators: %1$s: Number of items
5831
+ #: classes/helpers/FrmXMLHelper.php:1065
5832
  msgid "%1$s View"
5833
  msgid_plural "%1$s Views"
5834
  msgstr[0] ""
5835
 
5836
  #. translators: %1$s: Number of items
5837
+ #: classes/helpers/FrmXMLHelper.php:1067
5838
  msgid "%1$s Post"
5839
  msgid_plural "%1$s Posts"
5840
  msgstr[0] ""
5841
 
5842
  #. translators: %1$s: Number of items
5843
+ #: classes/helpers/FrmXMLHelper.php:1069
5844
  msgid "%1$s Style"
5845
  msgid_plural "%1$s Styles"
5846
  msgstr[0] ""
5847
 
5848
  #. translators: %1$s: Number of items
5849
+ #: classes/helpers/FrmXMLHelper.php:1071
5850
  msgid "%1$s Term"
5851
  msgid_plural "%1$s Terms"
5852
  msgstr[0] ""
5853
 
5854
  #. translators: %1$s: Number of items
5855
+ #: classes/helpers/FrmXMLHelper.php:1073
5856
  msgid "%1$s Form Action"
5857
  msgid_plural "%1$s Form Actions"
5858
  msgstr[0] ""
5859
 
5860
+ #: classes/helpers/FrmXMLHelper.php:1097
5861
  msgid "Go to imported form"
5862
  msgstr ""
5863
 
5864
+ #: classes/helpers/FrmXMLHelper.php:1302
5865
  msgid "Create Posts"
5866
  msgstr ""
5867
 
5868
+ #: classes/helpers/FrmXMLHelper.php:1429
5869
  msgid "Email Notification"
5870
  msgstr ""
5871
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: forms, contact form, form builder, survey, form maker, form creator, paypa
5
  Requires at least: 4.7
6
  Tested up to: 5.5.1
7
  Requires PHP: 5.6
8
- Stable tag: 4.07.01
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
@@ -435,6 +435,13 @@ Using our Zapier integration, you can easily connect Formidable with over 1000+
435
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
436
 
437
  == Changelog ==
 
 
 
 
 
 
 
438
  = 4.07.01 =
439
  * New: Show a warning when leaving the builder page with unsaved changes.
440
  * Fix: Make any multiselect dropdowns in admin settings accessible.
@@ -451,11 +458,4 @@ See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zap
451
  * Fix: WP 5.5 - Email subject lines were coming through encoded.
452
  * Fix: WP 5.5 - When WP Mail SMTP was installed, the Formidable SMTP page has an error.
453
 
454
- = 4.06.02 =
455
- * New: Added frm_field_value_object hook for making adjustments to the field before it's label and value is displayed.
456
- * New: Added frm_xml_response hook for altering the message/response when an XML file is imported.
457
- * Fix: Updated deprecated blacklist functions in WP 5.5.
458
- * Fix: Add more checks to the installation triggers to prevent them from being triggered at unintended times.
459
- * Show a more helpful error message in some cases when the XML import fails.
460
-
461
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>
5
  Requires at least: 4.7
6
  Tested up to: 5.5.1
7
  Requires PHP: 5.6
8
+ Stable tag: 4.08
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
435
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
436
 
437
  == Changelog ==
438
+ = 4.08 =
439
+ * New: Added confirmation before forms are deleted in bulk.
440
+ * Allow a value to pass validation if the entered value matches the placeholder setting.
441
+ * Fix: Email addresses were not being sent to Akismet for logged out users, and resulting in some false positive spam.
442
+ * Fix: Some sites have been getting duplicate entries days apart. This issue should be fixed.
443
+ * Fix: Searching when switching between forms no longer triggers the confirmation message when leaving the page.
444
+
445
  = 4.07.01 =
446
  * New: Show a warning when leaving the builder page with unsaved changes.
447
  * Fix: Make any multiselect dropdowns in admin settings accessible.
458
  * Fix: WP 5.5 - Email subject lines were coming through encoded.
459
  * Fix: WP 5.5 - When WP Mail SMTP was installed, the Formidable SMTP page has an error.
460
 
 
 
 
 
 
 
 
461
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>