Formidable Forms – Form Builder for WordPress - Version 4.04

Version Description

  • New: Show a warning if a WordPress parameter is used in the redirect URL to prevent unintented results.
  • New: Added frm_is_field_type hook to set if an individual field is shown as radio or checkbox
  • New: Show the new pricing fields in the builder for product education.
Download this release

Release Info

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

Code changes from version 4.03.07 to 4.04

classes/controllers/FrmAppController.php CHANGED
@@ -260,6 +260,17 @@ class FrmAppController {
260
  include( FrmAppHelper::plugin_path() . '/classes/views/shared/confirm-overlay.php' );
261
  }
262
 
 
 
 
 
 
 
 
 
 
 
 
263
  /**
264
  * @since 3.04.02
265
  */
@@ -409,6 +420,7 @@ class FrmAppController {
409
 
410
  do_action( 'frm_enqueue_builder_scripts' );
411
  self::include_upgrade_overlay();
 
412
  } elseif ( FrmAppHelper::is_view_builder_page() ) {
413
  if ( isset( $_REQUEST['post_type'] ) ) {
414
  $post_type = sanitize_title( wp_unslash( $_REQUEST['post_type'] ) );
@@ -428,6 +440,7 @@ class FrmAppController {
428
  wp_enqueue_script( 'formidable_admin' );
429
  wp_enqueue_style( 'formidable-admin' );
430
  FrmAppHelper::localize_script( 'admin' );
 
431
  }
432
  } elseif ( $pagenow == 'widgets.php' ) {
433
  FrmAppHelper::load_admin_wide_js();
260
  include( FrmAppHelper::plugin_path() . '/classes/views/shared/confirm-overlay.php' );
261
  }
262
 
263
+ public static function include_info_overlay() {
264
+ wp_enqueue_script( 'jquery-ui-dialog' );
265
+ wp_enqueue_style( 'jquery-ui-dialog' );
266
+
267
+ add_action( 'admin_footer', 'FrmAppController::info_overlay_html' );
268
+ }
269
+
270
+ public static function info_overlay_html() {
271
+ include( FrmAppHelper::plugin_path() . '/classes/views/shared/info-overlay.php' );
272
+ }
273
+
274
  /**
275
  * @since 3.04.02
276
  */
420
 
421
  do_action( 'frm_enqueue_builder_scripts' );
422
  self::include_upgrade_overlay();
423
+ self::include_info_overlay();
424
  } elseif ( FrmAppHelper::is_view_builder_page() ) {
425
  if ( isset( $_REQUEST['post_type'] ) ) {
426
  $post_type = sanitize_title( wp_unslash( $_REQUEST['post_type'] ) );
440
  wp_enqueue_script( 'formidable_admin' );
441
  wp_enqueue_style( 'formidable-admin' );
442
  FrmAppHelper::localize_script( 'admin' );
443
+ self::include_info_overlay();
444
  }
445
  } elseif ( $pagenow == 'widgets.php' ) {
446
  FrmAppHelper::load_admin_wide_js();
classes/controllers/FrmFieldsController.php CHANGED
@@ -613,6 +613,31 @@ class FrmFieldsController {
613
  return $default_value;
614
  }
615
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
616
  /**
617
  * Use HMTL5 placeholder with js fallback
618
  *
613
  return $default_value;
614
  }
615
 
616
+ /**
617
+ * Maybe add a blank placeholder option before any options
618
+ * in a dropdown.
619
+ *
620
+ * @since 4.04
621
+ * @return bool True if placeholder was added.
622
+ */
623
+ public static function add_placeholder_to_select( $field ) {
624
+ $placeholder = FrmField::get_option( $field, 'placeholder' );
625
+ if ( empty( $placeholder ) ) {
626
+ $placeholder = self::get_default_value_from_name( $field );
627
+ }
628
+
629
+ if ( $placeholder !== '' ) {
630
+ ?>
631
+ <option value="">
632
+ <?php echo esc_html( FrmField::get_option( $field, 'autocom' ) ? '' : $placeholder ); ?>
633
+ </option>
634
+ <?php
635
+ return true;
636
+ }
637
+
638
+ return false;
639
+ }
640
+
641
  /**
642
  * Use HMTL5 placeholder with js fallback
643
  *
classes/controllers/FrmFormsController.php CHANGED
@@ -122,8 +122,10 @@ class FrmFormsController {
122
  $id = FrmAppHelper::get_param( 'id', '', 'get', 'absint' );
123
 
124
  $errors = FrmForm::validate( $_POST );
 
 
125
  if ( count( $errors ) > 0 ) {
126
- return self::get_settings_vars( $id, $errors );
127
  }
128
 
129
  do_action( 'frm_before_update_form_settings', $id );
@@ -132,7 +134,7 @@ class FrmFormsController {
132
 
133
  $message = __( 'Settings Successfully Updated', 'formidable' );
134
 
135
- return self::get_settings_vars( $id, array(), $message );
136
  }
137
 
138
  public static function update( $values = array() ) {
@@ -897,11 +899,26 @@ class FrmFormsController {
897
  }
898
  }
899
 
900
- public static function get_settings_vars( $id, $errors = array(), $message = '' ) {
901
  FrmAppHelper::permission_check( 'frm_edit_forms' );
902
 
903
  global $frm_vars;
904
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
905
  $form = FrmForm::getOne( $id );
906
  $fields = FrmField::get_all_for_form( $id );
907
  $values = FrmAppHelper::setup_edit_vars( $form, 'forms', $fields, true );
122
  $id = FrmAppHelper::get_param( 'id', '', 'get', 'absint' );
123
 
124
  $errors = FrmForm::validate( $_POST );
125
+ $warnings = FrmFormsHelper::check_for_warnings( $_POST );
126
+
127
  if ( count( $errors ) > 0 ) {
128
+ return self::get_settings_vars( $id, $errors, compact( 'warnings' ) );
129
  }
130
 
131
  do_action( 'frm_before_update_form_settings', $id );
134
 
135
  $message = __( 'Settings Successfully Updated', 'formidable' );
136
 
137
+ return self::get_settings_vars( $id, array(), compact( 'message', 'warnings' ) );
138
  }
139
 
140
  public static function update( $values = array() ) {
899
  }
900
  }
901
 
902
+ public static function get_settings_vars( $id, $errors = array(), $args = array() ) {
903
  FrmAppHelper::permission_check( 'frm_edit_forms' );
904
 
905
  global $frm_vars;
906
 
907
+ if ( ! is_array( $args ) ) {
908
+ // For reverse compatibility.
909
+ $args = array(
910
+ 'message' => $args,
911
+ );
912
+ }
913
+
914
+ $defaults = array(
915
+ 'message' => '',
916
+ 'warnings' => array(),
917
+ );
918
+ $args = array_merge( $defaults, $args );
919
+ $message = $args['message'];
920
+ $warnings = $args['warnings'];
921
+
922
  $form = FrmForm::getOne( $id );
923
  $fields = FrmField::get_all_for_form( $id );
924
  $values = FrmAppHelper::setup_edit_vars( $form, 'forms', $fields, true );
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '4.03.07';
15
 
16
  /**
17
  * @since 1.07.02
@@ -1168,9 +1168,9 @@ class FrmAppHelper {
1168
 
1169
  public static function frm_capabilities( $type = 'auto' ) {
1170
  $cap = array(
1171
- 'frm_view_forms' => __( 'View Forms and Templates', 'formidable' ),
1172
- 'frm_edit_forms' => __( 'Add/Edit Forms and Templates', 'formidable' ),
1173
- 'frm_delete_forms' => __( 'Delete Forms and Templates', 'formidable' ),
1174
  'frm_change_settings' => __( 'Access this Settings Page', 'formidable' ),
1175
  'frm_view_entries' => __( 'View Entries from Admin Area', 'formidable' ),
1176
  'frm_delete_entries' => __( 'Delete Entries from Admin Area', 'formidable' ),
@@ -2265,10 +2265,18 @@ class FrmAppHelper {
2265
  'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
2266
  'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
2267
  'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
 
 
 
 
 
 
 
2268
  'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
2269
  'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
2270
  'install' => __( 'Install', 'formidable' ),
2271
  'active' => __( 'Active', 'formidable' ),
 
2272
  'no_items_found' => __( 'No items found.', 'formidable' ),
2273
  );
2274
 
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '4.04';
15
 
16
  /**
17
  * @since 1.07.02
1168
 
1169
  public static function frm_capabilities( $type = 'auto' ) {
1170
  $cap = array(
1171
+ 'frm_view_forms' => __( 'View Forms', 'formidable' ),
1172
+ 'frm_edit_forms' => __( 'Add and Edit Forms', 'formidable' ),
1173
+ 'frm_delete_forms' => __( 'Delete Forms', 'formidable' ),
1174
  'frm_change_settings' => __( 'Access this Settings Page', 'formidable' ),
1175
  'frm_view_entries' => __( 'View Entries from Admin Area', 'formidable' ),
1176
  'frm_delete_entries' => __( 'Delete Entries from Admin Area', 'formidable' ),
2265
  'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
2266
  'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
2267
  'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
2268
+ 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
2269
+ 'unsafe_params' => FrmFormsHelper::reserved_words(),
2270
+ /* Translators: %s is the name of a Detail Page Slug that is a reserved word.*/
2271
+ 'slug_is_reserved' => sprintf( __( 'The Detail Page Slug "%s" is reserved by WordPress. This may cause problems. Is this intentional?', 'formidable' ), '****' ),
2272
+ /* 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. */
2273
+ 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
2274
+ 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
2275
  'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
2276
  'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
2277
  'install' => __( 'Install', 'formidable' ),
2278
  'active' => __( 'Active', 'formidable' ),
2279
+ 'select_a_field' => __( 'Select a Field', 'formidable' ),
2280
  'no_items_found' => __( 'No items found.', 'formidable' ),
2281
  );
2282
 
classes/helpers/FrmFieldsHelper.php CHANGED
@@ -1703,6 +1703,57 @@ class FrmFieldsHelper {
1703
  return $field_array + $field_options;
1704
  }
1705
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1706
  /**
1707
  * @deprecated 4.0
1708
  */
1703
  return $field_array + $field_options;
1704
  }
1705
 
1706
+ /**
1707
+ * @since 4.04
1708
+ */
1709
+ public static function show_add_field_buttons( $args ) {
1710
+ $field_key = $args['field_key'];
1711
+ $field_type = $args['field_type'];
1712
+ $field_label = FrmAppHelper::icon_by_class( FrmFormsHelper::get_field_link_icon( $field_type ), array( 'echo' => false ) );
1713
+ $field_name = FrmFormsHelper::get_field_link_name( $field_type );
1714
+ $field_label .= ' <span>' . $field_name . '</span>';
1715
+
1716
+ /* translators: %s: Field name */
1717
+ $upgrade_label = sprintf( esc_html__( '%s fields', 'formidable' ), $field_name );
1718
+
1719
+ // If the individual field isn't allowed, disable it.
1720
+ $run_filter = true;
1721
+ $single_no_allow = ' ';
1722
+ $install_data = '';
1723
+ $requires = '';
1724
+ $upgrade_message = '';
1725
+ $link = isset( $field_type['link'] ) ? esc_url_raw( $field_type['link'] ) : '';
1726
+ if ( strpos( $field_type['icon'], ' frm_show_upgrade' ) ) {
1727
+ $single_no_allow .= 'frm_show_upgrade';
1728
+ $field_type['icon'] = str_replace( ' frm_show_upgrade', '', $field_type['icon'] );
1729
+ $run_filter = false;
1730
+ if ( isset( $field_type['addon'] ) ) {
1731
+ $upgrading = FrmAddonsController::install_link( $field_type['addon'] );
1732
+ if ( isset( $upgrading['url'] ) ) {
1733
+ $install_data = json_encode( $upgrading );
1734
+ }
1735
+ $requires = FrmFormsHelper::get_plan_required( $upgrading );
1736
+ } elseif ( isset( $field_type['require'] ) ) {
1737
+ $requires = $field_type['require'];
1738
+ }
1739
+ }
1740
+
1741
+ if ( isset( $field_type['message'] ) ) {
1742
+ $upgrade_message = FrmAppHelper::kses( $field_type['message'], array( 'a', 'img' ) );
1743
+ }
1744
+
1745
+ ?>
1746
+ <li class="frmbutton <?php echo esc_attr( $args['no_allow_class'] . $single_no_allow . ' frm_t' . str_replace( '|', '-', $field_key ) ); ?>" id="<?php echo esc_attr( $field_key ); ?>" data-upgrade="<?php echo esc_attr( $upgrade_label ); ?>" data-message="<?php echo esc_attr( $upgrade_message ); ?>" data-link="<?php echo esc_attr( $link ); ?>" data-medium="builder" data-oneclick="<?php echo esc_attr( $install_data ); ?>" data-content="<?php echo esc_attr( $field_key ); ?>" data-requires="<?php echo esc_attr( $requires ); ?>">
1747
+ <?php
1748
+ if ( $run_filter ) {
1749
+ $field_label = apply_filters( 'frmpro_field_links', $field_label, $args['id'], $field_key );
1750
+ }
1751
+ echo FrmAppHelper::kses( $field_label, array( 'a', 'i', 'span', 'use', 'svg' ) ); // WPCS: XSS ok.
1752
+ ?>
1753
+ </li>
1754
+ <?php
1755
+ }
1756
+
1757
  /**
1758
  * @deprecated 4.0
1759
  */
classes/helpers/FrmFormsHelper.php CHANGED
@@ -1360,4 +1360,157 @@ BEFORE_HTML;
1360
 
1361
  return false;
1362
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1363
  }
1360
 
1361
  return false;
1362
  }
1363
+
1364
+ /**
1365
+ * Checks for warnings to be displayed after form settings are saved.
1366
+ *
1367
+ * @since 4.04
1368
+ *
1369
+ * @param array $values The $_POST array, which contains values submitted in a form.
1370
+ *
1371
+ * @return array An array of warnings or an empty array.
1372
+ */
1373
+ public static function check_for_warnings( $values ) {
1374
+ $warnings = array();
1375
+
1376
+ $redirect_warning = self::check_redirect_url_for_unsafe_params( $values );
1377
+
1378
+ if ( $redirect_warning ) {
1379
+ $warnings[] = $redirect_warning;
1380
+ }
1381
+
1382
+ return apply_filters( 'frm_check_for_warnings', $warnings, $values );
1383
+ }
1384
+
1385
+ /**
1386
+ * Checks the redirect URL for params whose names are reserved words.
1387
+ *
1388
+ * @since 4.04
1389
+ *
1390
+ * @param array $values The $_POST array, which contains the values submitted in a form.
1391
+ *
1392
+ * @return bool|string A warning message about unsafe params or false.
1393
+ */
1394
+ private static function check_redirect_url_for_unsafe_params( $values ) {
1395
+ if ( ! isset( $values['options'] ) ) {
1396
+ return false;
1397
+ }
1398
+
1399
+ $options = $values['options'];
1400
+ FrmAppHelper::sanitize_with_html( $options );
1401
+
1402
+ if ( ( ! isset( $options['success_action'] ) ) || $options['success_action'] !== 'redirect' || ! isset( $options['success_url'] ) ) {
1403
+ return false;
1404
+ }
1405
+
1406
+ $unsafe_params_in_redirect = self::get_unsafe_params( $options['success_url'] );
1407
+
1408
+ return self::create_unsafe_param_warning( $unsafe_params_in_redirect );
1409
+ }
1410
+
1411
+ /**
1412
+ * Returns an array of params whose names are reserved words in the specified URL.
1413
+ *
1414
+ * @since 4.04
1415
+ *
1416
+ * @param string $url The URL whose params are being checked.
1417
+ *
1418
+ * @return array An array of params whose names are reserved words or an empty array.
1419
+ */
1420
+ private static function get_unsafe_params( $url ) {
1421
+ $redirect_components = parse_url( $url );
1422
+ parse_str( $redirect_components['query'], $redirect_params );
1423
+ $redirect_param_names = array_keys( $redirect_params );
1424
+ $reserved_words = self::reserved_words();
1425
+ $unsafe_params_in_redirect = array_intersect( $redirect_param_names, $reserved_words );
1426
+
1427
+ return array_values( $unsafe_params_in_redirect );
1428
+ }
1429
+
1430
+ /**
1431
+ * Returns a warning if reserved words have been used as param names in the redirect URL.
1432
+ *
1433
+ * @since 4.04
1434
+ *
1435
+ * @param array $unsafe_params_in_redirect Array of params from the redirect URL whose names are reserved words.
1436
+ *
1437
+ * @return bool|string A string with an unsafe param message or false.
1438
+ */
1439
+ private static function create_unsafe_param_warning( $unsafe_params_in_redirect ) {
1440
+ $count = count( $unsafe_params_in_redirect );
1441
+ $caution = esc_html__( 'Is this intentional?', 'formidable' );
1442
+ $reserved_words_intro = esc_html__( 'See the list of reserved words in WordPress.', 'formidable' );
1443
+ $reserved_words_link = '<a href="https://codex.wordpress.org/WordPress_Query_Vars" target="_blank"> ' . $reserved_words_intro . '</a>';
1444
+
1445
+ if ( $count === 0 ) {
1446
+ return false;
1447
+ }
1448
+
1449
+ if ( $count == 1 ) {
1450
+ /* translators: %s: the name of a single parameter in the redirect URL */
1451
+ return sprintf( esc_html__( 'The redirect URL is using the parameter "%s", which is reserved by WordPress. ', 'formidable' ), $unsafe_params_in_redirect[0] ) . $caution . $reserved_words_link;
1452
+ }
1453
+
1454
+ $unsafe_params_string = implode( '", "', $unsafe_params_in_redirect );
1455
+
1456
+ /* translators: %s: the names of two or more parameters in the redirect URL, separated by commas */
1457
+ return sprintf( esc_html__( 'The redirect URL is using the parameters "%s", which are reserved by WordPress. ', 'formidable' ), $unsafe_params_string ) . $caution . $reserved_words_link;
1458
+ }
1459
+
1460
+ /**
1461
+ * Returns an array of common reserved words in WordPress.
1462
+ *
1463
+ * An edited list of reserved terms from the Codex.
1464
+ * https://codex.wordpress.org/Reserved_Terms
1465
+ *
1466
+ * @since 4.04
1467
+ *
1468
+ * @return array Array of WordPress reserved words.
1469
+ */
1470
+ public static function reserved_words() {
1471
+ return array(
1472
+ 'id',
1473
+ 'attachment',
1474
+ 'author',
1475
+ 'author_name',
1476
+ 'calendar',
1477
+ 'cat',
1478
+ 'category',
1479
+ 'category_name',
1480
+ 'cpage',
1481
+ 'custom',
1482
+ 'day',
1483
+ 'date',
1484
+ 'error',
1485
+ 'feed',
1486
+ 'hour',
1487
+ 'm',
1488
+ 'minute',
1489
+ 'more',
1490
+ 'name',
1491
+ 'order',
1492
+ 'p',
1493
+ 'page',
1494
+ 'page_id',
1495
+ 'paged',
1496
+ 'pb',
1497
+ 'post',
1498
+ 'posts',
1499
+ 'preview',
1500
+ 's',
1501
+ 'search',
1502
+ 'second',
1503
+ 'sentence',
1504
+ 'tag',
1505
+ 'taxonomy',
1506
+ 'tb',
1507
+ 'term',
1508
+ 'terms',
1509
+ 'theme',
1510
+ 'title',
1511
+ 'type',
1512
+ 'w',
1513
+ 'year',
1514
+ );
1515
+ }
1516
  }
classes/models/FrmField.php CHANGED
@@ -175,6 +175,21 @@ class FrmField {
175
  <img src="https://s3.amazonaws.com/fp.strategy11.com/images/appointments/appointments.png" alt="Scheduling" />',
176
  'link' => 'https://simplyscheduleappointments.com/meet/formidable/',
177
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  );
179
 
180
  // Since the signature field may be in a different section, don't show it twice.
@@ -944,7 +959,16 @@ class FrmField {
944
  }
945
 
946
  public static function get_option_in_array( $field, $option ) {
947
- return isset( $field[ $option ] ) ? $field[ $option ] : '';
 
 
 
 
 
 
 
 
 
948
  }
949
 
950
  public static function get_option_in_object( $field, $option ) {
@@ -1030,10 +1054,19 @@ class FrmField {
1030
  $field_type = self::get_original_field_type( $field );
1031
  $data_type = self::get_option( $field, 'data_type' );
1032
 
1033
- return (
1034
  $is_type === $field_type ||
1035
  ( 'data' === $field_type && $is_type === $data_type ) ||
1036
- ( 'lookup' === $field_type && $is_type === $data_type )
 
1037
  );
 
 
 
 
 
 
 
 
1038
  }
1039
  }
175
  <img src="https://s3.amazonaws.com/fp.strategy11.com/images/appointments/appointments.png" alt="Scheduling" />',
176
  'link' => 'https://simplyscheduleappointments.com/meet/formidable/',
177
  ),
178
+ 'product' => array(
179
+ 'name' => __( 'Product', 'formidable' ),
180
+ 'icon' => 'frm_icon_font frm_product_icon',
181
+ 'section' => 'pricing',
182
+ ),
183
+ 'quantity' => array(
184
+ 'name' => __( 'Quantity', 'formidable' ),
185
+ 'icon' => 'frm_icon_font frm_quantity_icon',
186
+ 'section' => 'pricing',
187
+ ),
188
+ 'total' => array(
189
+ 'name' => __( 'Total', 'formidable' ),
190
+ 'icon' => 'frm_icon_font frm_total_icon',
191
+ 'section' => 'pricing',
192
+ ),
193
  );
194
 
195
  // Since the signature field may be in a different section, don't show it twice.
959
  }
960
 
961
  public static function get_option_in_array( $field, $option ) {
962
+
963
+ if ( isset( $field[ $option ] ) ) {
964
+ $this_option = $field[ $option ];
965
+ } elseif ( isset( $field['field_options'] ) && is_array( $field['field_options'] ) && isset( $field['field_options'][ $option ] ) ) {
966
+ $this_option = $field['field_options'][ $option ];
967
+ } else {
968
+ $this_option = '';
969
+ }
970
+
971
+ return $this_option;
972
  }
973
 
974
  public static function get_option_in_object( $field, $option ) {
1054
  $field_type = self::get_original_field_type( $field );
1055
  $data_type = self::get_option( $field, 'data_type' );
1056
 
1057
+ $is_field_type = (
1058
  $is_type === $field_type ||
1059
  ( 'data' === $field_type && $is_type === $data_type ) ||
1060
+ ( 'lookup' === $field_type && $is_type === $data_type ) ||
1061
+ ( 'product' === $field_type && $is_type === $data_type )
1062
  );
1063
+
1064
+ /**
1065
+ * When a field type is checked, allow individual fields
1066
+ * to set the type.
1067
+ *
1068
+ * @since 4.04
1069
+ */
1070
+ return apply_filters( 'frm_is_field_type', $is_field_type, compact( 'field', 'is_type' ) );
1071
  }
1072
  }
classes/models/fields/FrmFieldType.php CHANGED
@@ -369,12 +369,65 @@ DEFAULT_HTML;
369
  }
370
 
371
  $this->field_choices_heading( $args );
372
- echo '<div class="frm_grid_container frm-collapse-me">';
 
373
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-fields/back-end/field-choices.php' );
374
  $this->show_extra_field_choices( $args );
375
  echo '</div>';
376
  }
377
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  /**
379
  * Should the section for adding choices show for this field?
380
  *
@@ -407,7 +460,7 @@ DEFAULT_HTML;
407
  protected function field_choices_heading( $args ) {
408
  $all_field_types = array_merge( FrmField::pro_field_selection(), FrmField::field_selection() );
409
  ?>
410
- <h3>
411
  <?php
412
  printf(
413
  /* translators: %s: Field type */
@@ -420,6 +473,13 @@ DEFAULT_HTML;
420
  <?php
421
  }
422
 
 
 
 
 
 
 
 
423
  /**
424
  * This is called for any fields with set options (radio, checkbox, select, dynamic, lookup).
425
  *
369
  }
370
 
371
  $this->field_choices_heading( $args );
372
+
373
+ echo '<div class="frm_grid_container frm-collapse-me' . esc_attr( $this->extra_field_choices_class() ) . '">';
374
  include( FrmAppHelper::plugin_path() . '/classes/views/frm-fields/back-end/field-choices.php' );
375
  $this->show_extra_field_choices( $args );
376
  echo '</div>';
377
  }
378
 
379
+ /**
380
+ * @since 4.04
381
+ */
382
+ public function show_field_options( $args ) {
383
+ if ( ! $this->should_continue_to_field_options( $args ) ) {
384
+ return;
385
+ }
386
+
387
+ $has_options = ! empty( $args['field']['options'] );
388
+ $short_name = FrmAppHelper::truncate( strip_tags( str_replace( '"', '&quot;', $args['field']['name'] ) ), 20 );
389
+
390
+ /* translators: %s: Field name */
391
+ $option_title = sprintf( __( '%s Options', 'formidable' ), $short_name );
392
+
393
+ include( FrmAppHelper::plugin_path() . '/classes/views/frm-fields/back-end/field-options.php' );
394
+ }
395
+
396
+ /**
397
+ * @since 4.04
398
+ */
399
+ protected function should_continue_to_field_options( $args ) {
400
+ return in_array( $args['field']['type'], array( 'select', 'radio', 'checkbox' ) );
401
+ }
402
+
403
+ /**
404
+ * @since 4.04
405
+ */
406
+ protected function get_bulk_edit_string() {
407
+ return __( 'Bulk Edit Options', 'formidable' );
408
+ }
409
+
410
+ /**
411
+ * @since 4.04
412
+ */
413
+ protected function get_add_option_string() {
414
+ return __( 'Add Option', 'formidable' );
415
+ }
416
+
417
+ /**
418
+ * @since 4.04
419
+ */
420
+ protected function show_single_option( $args ) {
421
+ FrmFieldsHelper::show_single_option( $args['field'] );
422
+ }
423
+
424
+ /**
425
+ * @since 4.04
426
+ */
427
+ protected function extra_field_choices_class() {
428
+ return '';
429
+ }
430
+
431
  /**
432
  * Should the section for adding choices show for this field?
433
  *
460
  protected function field_choices_heading( $args ) {
461
  $all_field_types = array_merge( FrmField::pro_field_selection(), FrmField::field_selection() );
462
  ?>
463
+ <h3 <?php $this->field_choices_heading_attrs( $args ); ?>>
464
  <?php
465
  printf(
466
  /* translators: %s: Field type */
473
  <?php
474
  }
475
 
476
+ /**
477
+ * @since 4.04
478
+ */
479
+ protected function field_choices_heading_attrs( $args ) {
480
+ return;
481
+ }
482
+
483
  /**
484
  * This is called for any fields with set options (radio, checkbox, select, dynamic, lookup).
485
  *
classes/views/frm-fields/back-end/field-choices.php CHANGED
@@ -5,29 +5,6 @@ if ( isset( $args['field']['post_field'] ) && $args['field']['post_field'] == 'p
5
  <?php echo FrmFieldsHelper::get_term_link( $args['field']['taxonomy'] ); // WPCS: XSS ok. ?>
6
  </div>
7
  <?php
8
- } elseif ( in_array( $args['field']['type'], array( 'select', 'radio', 'checkbox' ) ) ) {
9
- $has_options = ! empty( $args['field']['options'] );
10
- $short_name = FrmAppHelper::truncate( strip_tags( str_replace( '"', '&quot;', $args['field']['name'] ) ), 20 );
11
-
12
- /* translators: %s: Field name */
13
- $option_title = sprintf( __( '%s Options', 'formidable' ), $short_name );
14
-
15
- ?>
16
- <span class="frm-bulk-edit-link">
17
- <a href="#" title="<?php echo esc_attr( $option_title ); ?>" class="frm-bulk-edit-link">
18
- <?php esc_html_e( 'Bulk Edit Options', 'formidable' ); ?>
19
- </a>
20
- </span>
21
- <?php do_action( 'frm_add_multiple_opts_labels', $args['field'] ); ?>
22
- <ul id="frm_field_<?php echo esc_attr( $args['field']['id'] ); ?>_opts" class="frm_sortable_field_opts frm_clear<?php echo ( count( $args['field']['options'] ) > 10 ) ? ' frm_field_opts_list' : ''; ?> frm_add_remove" data-key="<?php echo esc_attr( $args['field']['field_key'] ); ?>">
23
- <?php FrmFieldsHelper::show_single_option( $args['field'] ); ?>
24
- </ul>
25
- <div class="frm6 frm_form_field">
26
- <a href="javascript:void(0);" data-opttype="single" class="frm_cb_button frm-small-add frm_add_opt frm6 frm_form_field" id="frm_add_opt_<?php echo esc_attr( $args['field']['id'] ); ?>">
27
- <span class="frm_icon_font frm_add_tag"></span>
28
- <?php esc_html_e( 'Add Option', 'formidable' ); ?>
29
- </a>
30
- </div>
31
-
32
- <?php
33
  }
5
  <?php echo FrmFieldsHelper::get_term_link( $args['field']['taxonomy'] ); // WPCS: XSS ok. ?>
6
  </div>
7
  <?php
8
+ } else {
9
+ $this->show_field_options( $args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  }
classes/views/frm-fields/back-end/field-options.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <span class="frm-bulk-edit-link">
2
+ <a href="#" title="<?php echo esc_attr( $option_title ); ?>" class="frm-bulk-edit-link">
3
+ <?php echo esc_html( $this->get_bulk_edit_string() ); ?>
4
+ </a>
5
+ </span>
6
+
7
+ <?php do_action( 'frm_add_multiple_opts_labels', $args['field'] ); ?>
8
+
9
+ <ul id="frm_field_<?php echo esc_attr( $args['field']['id'] ); ?>_opts" class="frm_sortable_field_opts frm_clear<?php echo ( count( $args['field']['options'] ) > 10 ) ? ' frm_field_opts_list' : ''; ?> frm_add_remove" data-key="<?php echo esc_attr( $args['field']['field_key'] ); ?>">
10
+ <?php $this->show_single_option( $args ); ?>
11
+ </ul>
12
+
13
+ <div class="frm6 frm_form_field">
14
+ <a href="javascript:void(0);" data-opttype="single" class="frm_cb_button frm-small-add frm_add_opt frm6 frm_form_field" id="frm_add_opt_<?php echo esc_attr( $args['field']['id'] ); ?>">
15
+ <span class="frm_icon_font frm_add_tag"></span>
16
+ <?php echo esc_html( $this->get_add_option_string() ); ?>
17
+ </a>
18
+ </div>
classes/views/frm-fields/back-end/number-range.php CHANGED
@@ -11,7 +11,7 @@
11
  </span>
12
  </span>
13
  </p>
14
- <p class="frm3 frm_last frm_form_field">
15
  <label for="frm_step_<?php echo esc_attr( $field['field_key'] ); ?>">
16
  <?php esc_html_e( 'Step', 'formidable' ); ?>
17
  </label>
11
  </span>
12
  </span>
13
  </p>
14
+ <p class="frm3 frm_last frm_form_field frm-step">
15
  <label for="frm_step_<?php echo esc_attr( $field['field_key'] ); ?>">
16
  <?php esc_html_e( 'Step', 'formidable' ); ?>
17
  </label>
classes/views/frm-fields/back-end/settings.php CHANGED
@@ -1,4 +1,4 @@
1
- <div class="frm-single-settings frm_hidden frm-fields" id="frm-single-settings-<?php echo esc_attr( $field['id'] ); ?>" data-fid="<?php echo esc_attr( $field['id'] ); ?>">
2
  <input type="hidden" name="frm_fields_submitted[]" value="<?php echo esc_attr( $field['id'] ); ?>" />
3
  <input type="hidden" name="field_options[field_order_<?php echo esc_attr( $field['id'] ); ?>]" value="<?php echo esc_attr( $field['field_order'] ); ?>"/>
4
 
1
+ <div class="frm-single-settings frm_hidden frm-fields frm-type-<?php echo esc_attr( $field['type'] ); ?>" id="frm-single-settings-<?php echo esc_attr( $field['id'] ); ?>" data-fid="<?php echo esc_attr( $field['id'] ); ?>">
2
  <input type="hidden" name="frm_fields_submitted[]" value="<?php echo esc_attr( $field['id'] ); ?>" />
3
  <input type="hidden" name="field_options[field_order_<?php echo esc_attr( $field['id'] ); ?>]" value="<?php echo esc_attr( $field['field_order'] ); ?>"/>
4
 
classes/views/frm-fields/front-end/dropdown-field.php CHANGED
@@ -18,20 +18,9 @@ if ( isset( $field['post_field'] ) && $field['post_field'] == 'post_category' &&
18
  <?php
19
  }
20
 
21
- $placeholder = FrmField::get_option( $field, 'placeholder' );
22
- if ( empty( $placeholder ) ) {
23
- $placeholder = FrmFieldsController::get_default_value_from_name( $field );
24
- }
25
 
26
  $skipped = false;
27
- if ( $placeholder !== '' ) {
28
- ?>
29
- <option value="">
30
- <?php echo esc_html( FrmField::get_option( $field, 'autocom' ) ? '' : $placeholder ); ?>
31
- </option>
32
- <?php
33
- }
34
-
35
  $other_opt = false;
36
  $other_checked = false;
37
  if ( empty( $field['options'] ) ) {
@@ -48,7 +37,7 @@ if ( isset( $field['post_field'] ) && $field['post_field'] == 'post_category' &&
48
  }
49
  }
50
 
51
- if ( ! empty( $placeholder ) && $opt == '' && ! $skipped ) {
52
  $skipped = true;
53
  continue;
54
  }
18
  <?php
19
  }
20
 
21
+ $placeholder = FrmFieldsController::add_placeholder_to_select( $field );
 
 
 
22
 
23
  $skipped = false;
 
 
 
 
 
 
 
 
24
  $other_opt = false;
25
  $other_checked = false;
26
  if ( empty( $field['options'] ) ) {
37
  }
38
  }
39
 
40
+ if ( $placeholder && $opt == '' && ! $skipped ) {
41
  $skipped = true;
42
  continue;
43
  }
classes/views/frm-forms/add_field_links.php CHANGED
@@ -44,7 +44,17 @@ if ( $no_allow_class === 'frm_noallow' ) {
44
  $no_allow_class .= ' frm_show_upgrade';
45
  }
46
 
47
- foreach ( FrmField::pro_field_selection() as $field_key => $field_type ) {
 
 
 
 
 
 
 
 
 
 
48
 
49
  if ( is_array( $field_type ) && isset( $field_type['switch_from'] ) ) {
50
  continue;
@@ -74,48 +84,7 @@ foreach ( FrmField::pro_field_selection() as $field_key => $field_type ) {
74
  </li>
75
  <?php
76
  } else {
77
- $field_label = FrmAppHelper::icon_by_class( FrmFormsHelper::get_field_link_icon( $field_type ), array( 'echo' => false ) );
78
- $field_name = FrmFormsHelper::get_field_link_name( $field_type );
79
- $field_label .= ' <span>' . $field_name . '</span>';
80
-
81
- /* translators: %s: Field name */
82
- $upgrade_label = sprintf( esc_html__( '%s fields', 'formidable' ), $field_name );
83
-
84
- // If the individual field isn't allowed, disable it.
85
- $run_filter = true;
86
- $single_no_allow = ' ';
87
- $install_data = '';
88
- $requires = '';
89
- $upgrade_message = '';
90
- $link = isset( $field_type['link'] ) ? esc_url_raw( $field_type['link'] ) : '';
91
- if ( strpos( $field_type['icon'], ' frm_show_upgrade' ) ) {
92
- $single_no_allow .= 'frm_show_upgrade';
93
- $field_type['icon'] = str_replace( ' frm_show_upgrade', '', $field_type['icon'] );
94
- $run_filter = false;
95
- if ( isset( $field_type['addon'] ) ) {
96
- $upgrading = FrmAddonsController::install_link( $field_type['addon'] );
97
- if ( isset( $upgrading['url'] ) ) {
98
- $install_data = json_encode( $upgrading );
99
- }
100
- $requires = FrmFormsHelper::get_plan_required( $upgrading );
101
- } elseif ( isset( $field_type['require'] ) ) {
102
- $requires = $field_type['require'];
103
- }
104
- }
105
-
106
- if ( isset( $field_type['message'] ) ) {
107
- $upgrade_message = FrmAppHelper::kses( $field_type['message'], array( 'a', 'img' ) );
108
- }
109
- ?>
110
- <li class="frmbutton <?php echo esc_attr( $no_allow_class . $single_no_allow . ' frm_t' . str_replace( '|', '-', $field_key ) ); ?>" id="<?php echo esc_attr( $field_key ); ?>" data-upgrade="<?php echo esc_attr( $upgrade_label ); ?>" data-message="<?php echo esc_attr( $upgrade_message ); ?>" data-link="<?php echo esc_attr( $link ); ?>" data-medium="builder" data-oneclick="<?php echo esc_attr( $install_data ); ?>" data-content="<?php echo esc_attr( $field_key ); ?>" data-requires="<?php echo esc_attr( $requires ); ?>">
111
- <?php
112
- if ( $run_filter ) {
113
- $field_label = apply_filters( 'frmpro_field_links', $field_label, $id, $field_key );
114
- }
115
- echo FrmAppHelper::kses( $field_label, array( 'a', 'i', 'span', 'use', 'svg' ) ); // WPCS: XSS ok.
116
- ?>
117
- </li>
118
- <?php
119
  }
120
 
121
  unset( $field_key, $field_type, $field_label );
@@ -123,6 +92,21 @@ foreach ( FrmField::pro_field_selection() as $field_key => $field_type ) {
123
  ?>
124
  </ul>
125
  <div class="clear"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  </div>
127
  <?php do_action( 'frm_extra_form_instructions' ); ?>
128
 
44
  $no_allow_class .= ' frm_show_upgrade';
45
  }
46
 
47
+ $pro_fields = FrmField::pro_field_selection();
48
+ $field_sections = array();
49
+ foreach ( $pro_fields as $field_key => $field_type ) {
50
+
51
+ if ( isset( $field_type['section'] ) ) {
52
+ if ( ! isset( $field_sections[ $field_type['section'] ] ) ) {
53
+ $field_sections[ $field_type['section'] ] = array();
54
+ }
55
+ $field_sections[ $field_type['section'] ][ $field_key ] = $field_type;
56
+ continue;
57
+ }
58
 
59
  if ( is_array( $field_type ) && isset( $field_type['switch_from'] ) ) {
60
  continue;
84
  </li>
85
  <?php
86
  } else {
87
+ FrmFieldsHelper::show_add_field_buttons( compact( 'field_key', 'field_type', 'id', 'no_allow_class' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
  unset( $field_key, $field_type, $field_label );
92
  ?>
93
  </ul>
94
  <div class="clear"></div>
95
+
96
+ <?php foreach ( $field_sections as $section => $section_fields ) { ?>
97
+ <h3 class="frm-with-line">
98
+ <span><?php esc_html_e( 'Pricing Fields', 'formidable' ); ?></span>
99
+ </h3>
100
+ <ul class="field_type_list">
101
+ <?php
102
+ foreach ( $section_fields as $field_key => $field_type ) {
103
+ FrmFieldsHelper::show_add_field_buttons( compact( 'field_key', 'field_type', 'id', 'no_allow_class' ) );
104
+ unset( $field_key, $field_type );
105
+ }
106
+ ?>
107
+ </ul>
108
+ <div class="clear"></div>
109
+ <?php } ?>
110
  </div>
111
  <?php do_action( 'frm_extra_form_instructions' ); ?>
112
 
classes/views/shared/errors.php CHANGED
@@ -9,6 +9,21 @@ if ( isset( $message ) && '' !== $message ) {
9
  }
10
  }
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if ( isset( $errors ) && is_array( $errors ) && count( $errors ) > 0 ) {
13
  ?>
14
  <div class="frm_error_style inline" role="alert">
9
  }
10
  }
11
 
12
+ if ( isset( $warnings ) && is_array( $warnings ) && count( $warnings ) > 0 ) {
13
+ ?>
14
+ <div class="frm_warning_style inline" role="alert">
15
+ <div class="frm_warning_heading"> <?php echo esc_html__( 'Warning:', 'formidable' ); ?></div>
16
+ <ul id="frm_warnings">
17
+ <?php
18
+ foreach ( $warnings as $warning ) {
19
+ echo '<li>' . FrmAppHelper::kses( $warning, array( 'a', 'br' ) ) . '</li>'; // WPCS: XSS ok.
20
+ }
21
+ ?>
22
+ </ul>
23
+ </div>
24
+ <?php
25
+ }
26
+
27
  if ( isset( $errors ) && is_array( $errors ) && count( $errors ) > 0 ) {
28
  ?>
29
  <div class="frm_error_style inline" role="alert">
classes/views/shared/info-overlay.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="frm_info_modal" class="frm_hidden frm-inline-modal frm-info-modal">
2
+ <div class="metabox-holder">
3
+ <div class="postbox">
4
+ <a href="#" class="dismiss alignright" title="<?php esc_attr_e( 'Dismiss this message', 'formidable' ); ?>">
5
+ <?php FrmAppHelper::icon_by_class( 'frmfont frm_close_icon', array( 'aria-label' => 'Dismiss' ) ); ?>
6
+ </a>
7
+ <div class="inside">
8
+ <div class="info-modal-inside frmcenter">
9
+ <p class="frm-info-msg">
10
+ <?php esc_html_e( 'Are you sure?', 'formidable' ); ?>
11
+ </p>
12
+ <br/>
13
+ <a href="#" id="frm-info-click" class="button button-primary frm-button-primary dismiss">
14
+ <?php esc_html_e( 'Got it!', 'formidable' ); ?>
15
+ </a>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </div>
css/frm_admin.css CHANGED
@@ -14,7 +14,6 @@
14
  --sidebar-hover: rgb(227, 232, 235);
15
  --primary-color: rgb(65, 153, 253);
16
  --primary-hover: rgb(49, 119, 199);
17
- --tooltip-font-size: 14px;
18
  --green: rgb(63, 172, 37);
19
  --orange: #F15A24;
20
  --pink: rgb(226, 42, 110);
@@ -594,8 +593,10 @@ p.frm_has_shortcodes {
594
  text-align: center;
595
  }
596
 
 
597
  #frm_confirm_modal .dismiss .frmsvg,
598
  #frm_upgrade_modal .dismiss .frmsvg,
 
599
  #frm_confirm_modal .dismiss i,
600
  #frm_upgrade_modal .dismiss i {
601
  top: 7px;
@@ -746,7 +747,7 @@ p.frm_has_shortcodes {
746
  position: sticky;
747
  top: 0;
748
  background-color: var(--sidebar-color);
749
- z-index: 1000;
750
  margin-top: 0;
751
  padding-top: 5px;
752
  }
@@ -1018,6 +1019,7 @@ h2 .frm-button-primary {
1018
  transition: all .2s ease;
1019
  padding: 0 15px;
1020
  height: 28px;
 
1021
  outline: none;
1022
  line-height: 26px;
1023
  }
@@ -1501,6 +1503,7 @@ form .frm_blank_field label {
1501
  }
1502
 
1503
  .frm_error_style,
 
1504
  .frm_message,
1505
  #post-body-content .frm_updated_message,
1506
  div.frm_updated_message {
@@ -1528,8 +1531,24 @@ div.frm_updated_message {
1528
  background-color: #F2DEDE;
1529
  }
1530
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1531
  .frm_updated_message ul,
1532
  .frm_updated_message li,
 
 
1533
  .frm_error_style ul,
1534
  .frm_error_style li {
1535
  margin: 0;
@@ -3294,6 +3313,7 @@ li.ui-state-default.edit_field_type_divider .frm-show-hover {
3294
  padding-bottom: 5px;
3295
  }
3296
 
 
3297
  #new_fields .frm_single_option select,
3298
  #new_fields .frm_single_option input[type=text] {
3299
  width: calc(100% - 73px);
@@ -3311,7 +3331,7 @@ li.ui-state-default.edit_field_type_divider .frm-show-hover {
3311
  .frm_single_option .frm-drag {
3312
  font-size: 23px;
3313
  width: 22px;
3314
- height: 22px;
3315
  margin-left: -6px;
3316
  color: var(--grey);
3317
  }
@@ -5137,6 +5157,46 @@ tr.frm_options_heading td {
5137
  font-size: 15px;
5138
  }
5139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5140
  #frm-preview-block {
5141
  height: 400px;
5142
  overflow: scroll;
@@ -5688,6 +5748,11 @@ select[name="m"] {
5688
  line-height: 30px;
5689
  }
5690
 
 
 
 
 
 
5691
  /*hide elements if js is avail*/
5692
  select.texture {
5693
  display: none;
@@ -5746,6 +5811,10 @@ ul .frm_col_two {
5746
  margin-right: 0;
5747
  }
5748
 
 
 
 
 
5749
  .settings-lite-cta a,
5750
  .settings-lite-cta ul,
5751
  .settings-lite-cta p,
@@ -5755,6 +5824,7 @@ ul .frm_col_two {
5755
  box-shadow: none !important;
5756
  }
5757
 
 
5758
  .settings-lite-cta h3 {
5759
  font-size: 17px !important;
5760
  }
@@ -5763,6 +5833,7 @@ ul .frm_col_two {
5763
  color: var(--green);
5764
  }
5765
 
 
5766
  .settings-lite-cta .postbox .inside {
5767
  padding: 20px 40px;
5768
  }
@@ -5771,6 +5842,14 @@ ul .frm_col_two {
5771
  color: var(--orange)
5772
  }
5773
 
 
 
 
 
 
 
 
 
5774
  .frm-caution {
5775
  text-transform: uppercase;
5776
  font-weight: bold;
@@ -6188,7 +6267,7 @@ iframe#dyncontent_ifr {
6188
  z-index: 9999999;
6189
  display: block;
6190
  visibility: visible;
6191
- font-size: var(--tooltip-font-size);
6192
  line-height: 1.4;
6193
  opacity: 0;
6194
  filter: alpha(opacity=0);
14
  --sidebar-hover: rgb(227, 232, 235);
15
  --primary-color: rgb(65, 153, 253);
16
  --primary-hover: rgb(49, 119, 199);
 
17
  --green: rgb(63, 172, 37);
18
  --orange: #F15A24;
19
  --pink: rgb(226, 42, 110);
593
  text-align: center;
594
  }
595
 
596
+ #frm_info_modal .dismiss .frmsvg,
597
  #frm_confirm_modal .dismiss .frmsvg,
598
  #frm_upgrade_modal .dismiss .frmsvg,
599
+ #frm_info_modal .dismiss i,
600
  #frm_confirm_modal .dismiss i,
601
  #frm_upgrade_modal .dismiss i {
602
  top: 7px;
747
  position: sticky;
748
  top: 0;
749
  background-color: var(--sidebar-color);
750
+ z-index: 98; /* must be < 99 */
751
  margin-top: 0;
752
  padding-top: 5px;
753
  }
1019
  transition: all .2s ease;
1020
  padding: 0 15px;
1021
  height: 28px;
1022
+ min-height: 28px;
1023
  outline: none;
1024
  line-height: 26px;
1025
  }
1503
  }
1504
 
1505
  .frm_error_style,
1506
+ .frm_warning_style,
1507
  .frm_message,
1508
  #post-body-content .frm_updated_message,
1509
  div.frm_updated_message {
1531
  background-color: #F2DEDE;
1532
  }
1533
 
1534
+ .frm_warning_style {
1535
+ color: #8B6E3C;
1536
+ border-color: #FBECCD;
1537
+ background-color: #FDF9E3;
1538
+ border-radius: 10px;
1539
+ text-align: left;
1540
+ padding-top: 5px;
1541
+ }
1542
+
1543
+ .frm_warning_heading{
1544
+ font-weight: bold;
1545
+ margin-bottom:4px;
1546
+ }
1547
+
1548
  .frm_updated_message ul,
1549
  .frm_updated_message li,
1550
+ .frm_warning_style ul,
1551
+ .frm_warning_style li,
1552
  .frm_error_style ul,
1553
  .frm_error_style li {
1554
  margin: 0;
3313
  padding-bottom: 5px;
3314
  }
3315
 
3316
+ .frm_product_price_wrapper,
3317
  #new_fields .frm_single_option select,
3318
  #new_fields .frm_single_option input[type=text] {
3319
  width: calc(100% - 73px);
3331
  .frm_single_option .frm-drag {
3332
  font-size: 23px;
3333
  width: 22px;
3334
+ height: 19px;
3335
  margin-left: -6px;
3336
  color: var(--grey);
3337
  }
5157
  font-size: 15px;
5158
  }
5159
 
5160
+ .frm_product_price_wrapper {
5161
+ display: inline-block;
5162
+ vertical-align: middle;
5163
+ }
5164
+
5165
+ .frm_prod_type_single .frm_product_price_wrapper {
5166
+ width: 100%;
5167
+ }
5168
+
5169
+ .frm-type-quantity .frm-step {
5170
+ display: none;
5171
+ }
5172
+
5173
+ #new_fields .frm_product_price_wrapper input:first-child {
5174
+ width: 60%;
5175
+ float: left;
5176
+ }
5177
+
5178
+ #new_fields .frm_product_price_wrapper input:last-child {
5179
+ width: 37%;
5180
+ float: right;
5181
+ }
5182
+
5183
+ li.frm_single_option:not(:last-child) {
5184
+ padding-bottom: 11px;
5185
+ margin-bottom: 10px;
5186
+ border-bottom: 1px solid var(--sidebar-hover);
5187
+ }
5188
+
5189
+ .frm_prod_type_single input[type=radio],
5190
+ .frm_prod_type_single .frm_drag_icon,
5191
+ .frm_prod_type_single .frm_sortable_field_opts li:nth-child( n + 3 ),
5192
+ .frm_prod_type_single .frm_sortable_field_opts .frm_remove_tag,
5193
+ .frm_prod_type_single .frm_form_field:not(.frm_product_type):not(.frm_sep_val_product),
5194
+ .frm_prod_type_single .frm-bulk-edit-link,
5195
+ .frm_prod_type_user_def.frm_grid_container,
5196
+ .frm_prod_options_heading.frm_prod_user_def {
5197
+ display: none;
5198
+ }
5199
+
5200
  #frm-preview-block {
5201
  height: 400px;
5202
  overflow: scroll;
5748
  line-height: 30px;
5749
  }
5750
 
5751
+ .frm-single-settings .frm_prod_field_opt_cont {
5752
+ margin-top: initial;
5753
+ margin-bottom: 20px;
5754
+ }
5755
+
5756
  /*hide elements if js is avail*/
5757
  select.texture {
5758
  display: none;
5811
  margin-right: 0;
5812
  }
5813
 
5814
+ .frm-info-modal a,
5815
+ .frm-info-modal ul,
5816
+ .frm-info-modal p,
5817
+ .frm-info-modal,
5818
  .settings-lite-cta a,
5819
  .settings-lite-cta ul,
5820
  .settings-lite-cta p,
5824
  box-shadow: none !important;
5825
  }
5826
 
5827
+ .frm-info-modal h3,
5828
  .settings-lite-cta h3 {
5829
  font-size: 17px !important;
5830
  }
5833
  color: var(--green);
5834
  }
5835
 
5836
+ .frm-info-modal .postbox .inside,
5837
  .settings-lite-cta .postbox .inside {
5838
  padding: 20px 40px;
5839
  }
5842
  color: var(--orange)
5843
  }
5844
 
5845
+ .info-modal-inside a.frm-standard-link {
5846
+ color: var(--primary-color);
5847
+ }
5848
+
5849
+ .info-modal-inside a.frm-standard-link:hover {
5850
+ color: var(--primary-hover);
5851
+ }
5852
+
5853
  .frm-caution {
5854
  text-transform: uppercase;
5855
  font-weight: bold;
6267
  z-index: 9999999;
6268
  display: block;
6269
  visibility: visible;
6270
+ font-size: 14px;
6271
  line-height: 1.4;
6272
  opacity: 0;
6273
  filter: alpha(opacity=0);
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.03.07
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.04
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
images/icons.svg CHANGED
@@ -872,5 +872,21 @@
872
  <title>cc_stripe</title>
873
  <path d="M17.3 10c0 .6 0 1-.2 1.2-.1.3-.3.4-.6.4a1 1 0 0 1-.4 0V9c.3-.3.5-.3.6-.3.4 0 .6.4.6 1.3zm4.8-.3h-1.2c0-.7.2-1 .6-1s.6.3.6 1zM5 11.2c0-1-.5-1.3-1.4-1.7-.5-.1-.7-.3-.7-.5s.1-.3.4-.3c.5 0 1 .2 1.3.4L5 7.9c-.2-.2-.8-.4-1.6-.4A2 2 0 0 0 2 8c-.4.3-.5.7-.5 1.2 0 .9.5 1.3 1.4 1.6.5.2.7.4.7.6 0 .2-.1.3-.5.3s-1-.2-1.5-.5l-.2 1.3c.4.2 1 .4 1.8.4.6 0 1-.1 1.4-.4.4-.3.6-.7.6-1.3zm3.3-2.4l.2-1.2h-1V6.1L6 6.4 6 7.6l-.5.1-.1 1.1h.6v2.4c0 .6.2 1 .5 1.3.3.2.7.3 1.2.3l.9-.1v-1.3l-.5.1c-.3 0-.5-.2-.5-.5V8.8h.9zm3.4.3V7.6h-.3a1 1 0 0 0-1 .6v-.6H9v5.1h1.6V9.4c.2-.2.5-.3 1-.3h.2zm.4 3.6h1.6v-5h-1.6v5zm6.7-2.7c0-.8-.1-1.5-.4-2-.3-.3-.7-.5-1.2-.5s-1 .2-1.3.6l-.1-.5h-1.4v7l1.6-.3v-1.6l.7.1c.4 0 1 0 1.5-.6.4-.5.6-1.2.6-2.2zm-5-3.8c0-.4-.4-.8-.9-.8s-.8.4-.8.8.3 1 .8 1 .9-.5.9-1zm9.7 4c0-.9-.2-1.5-.5-2-.4-.4-.9-.7-1.6-.7-1.4 0-2.2 1-2.2 2.7 0 .9.2 1.6.7 2 .4.4 1 .6 1.7.6s1.3-.1 1.7-.4l-.1-1.1c-.4.2-.9.3-1.4.3-.3 0-.5 0-.7-.2-.2-.1-.3-.4-.3-.7h2.7V10zM25 3v13.8c0 .8-.6 1.4-1.4 1.4H1.4C.6 18.3 0 17.7 0 17V3.1c0-.8.6-1.4 1.4-1.4h22.2c.8 0 1.4.6 1.4 1.4z"/>
874
  </symbol>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
875
  </defs>
876
  </svg>
872
  <title>cc_stripe</title>
873
  <path d="M17.3 10c0 .6 0 1-.2 1.2-.1.3-.3.4-.6.4a1 1 0 0 1-.4 0V9c.3-.3.5-.3.6-.3.4 0 .6.4.6 1.3zm4.8-.3h-1.2c0-.7.2-1 .6-1s.6.3.6 1zM5 11.2c0-1-.5-1.3-1.4-1.7-.5-.1-.7-.3-.7-.5s.1-.3.4-.3c.5 0 1 .2 1.3.4L5 7.9c-.2-.2-.8-.4-1.6-.4A2 2 0 0 0 2 8c-.4.3-.5.7-.5 1.2 0 .9.5 1.3 1.4 1.6.5.2.7.4.7.6 0 .2-.1.3-.5.3s-1-.2-1.5-.5l-.2 1.3c.4.2 1 .4 1.8.4.6 0 1-.1 1.4-.4.4-.3.6-.7.6-1.3zm3.3-2.4l.2-1.2h-1V6.1L6 6.4 6 7.6l-.5.1-.1 1.1h.6v2.4c0 .6.2 1 .5 1.3.3.2.7.3 1.2.3l.9-.1v-1.3l-.5.1c-.3 0-.5-.2-.5-.5V8.8h.9zm3.4.3V7.6h-.3a1 1 0 0 0-1 .6v-.6H9v5.1h1.6V9.4c.2-.2.5-.3 1-.3h.2zm.4 3.6h1.6v-5h-1.6v5zm6.7-2.7c0-.8-.1-1.5-.4-2-.3-.3-.7-.5-1.2-.5s-1 .2-1.3.6l-.1-.5h-1.4v7l1.6-.3v-1.6l.7.1c.4 0 1 0 1.5-.6.4-.5.6-1.2.6-2.2zm-5-3.8c0-.4-.4-.8-.9-.8s-.8.4-.8.8.3 1 .8 1 .9-.5.9-1zm9.7 4c0-.9-.2-1.5-.5-2-.4-.4-.9-.7-1.6-.7-1.4 0-2.2 1-2.2 2.7 0 .9.2 1.6.7 2 .4.4 1 .6 1.7.6s1.3-.1 1.7-.4l-.1-1.1c-.4.2-.9.3-1.4.3-.3 0-.5 0-.7-.2-.2-.1-.3-.4-.3-.7h2.7V10zM25 3v13.8c0 .8-.6 1.4-1.4 1.4H1.4C.6 18.3 0 17.7 0 17V3.1c0-.8.6-1.4 1.4-1.4h22.2c.8 0 1.4.6 1.4 1.4z"/>
874
  </symbol>
875
+ <symbol id="frm_price_icon" viewBox="0 0 20 20">
876
+ <title>price</title>
877
+ <path d="M.5 11.5l8 8a1.9 1.9 0 002.7 0l8.3-8.3a1.9 1.9 0 00.5-1.4v-8A1.9 1.9 0 0018.1 0h-8a1.9 1.9 0 00-1.3.5L.5 8.8a1.9 1.9 0 000 2.7zM2 10.2l8.3-8.3h8v8L9.7 18zm12.5-6.4a1.9 1.9 0 11-1.9 1.8 1.9 1.9 0 011.9-1.8z"/>
878
+ </symbol>
879
+ <symbol id="frm_product_icon" viewBox="0 0 23 23">
880
+ <title>product</title>
881
+ <path d="M22 2.9H5.8l-.4-2a1 1 0 00-1-.9h-4a.5.5 0 00-.4.5v1.1a.5.5 0 00.5.6h3.2l2.8 16a3 3 0 00-.8 2A2.7 2.7 0 008.3 23a2.7 2.7 0 002.6-2.9 3.1 3.1 0 00-.4-1.4h5.8A3.1 3.1 0 0016 20a2.7 2.7 0 002.5 2.9 2.7 2.7 0 002.6-2.9 3 3 0 00-.8-2v-.3a1 1 0 00-.9-1.3H8.1l-.3-2.1h12.4a1 1 0 001-.9L23 4.2a1 1 0 00-1-1.3zM8.3 21.2a1 1 0 010-2.2 1 1 0 010 2.2zm10.2 0a1 1 0 111-1 1 1 0 01-1 1zm1-9H7.4L6 5H21l-1.4 7.2z"/>
882
+ </symbol>
883
+ <symbol id="frm_total_icon" viewBox="0 0 23 13.8">
884
+ <title>total</title>
885
+ <path d="M21.9 0H1A1.1 1.1 0 000 1.2v11.5a1.1 1.1 0 001.1 1.1H22a1.1 1.1 0 001.1-1.1V1.2A1.1 1.1 0 0021.9 0zm-.6 9.8A2.3 2.3 0 0019 12H4a2.3 2.3 0 00-2.3-2.3V4A2.3 2.3 0 004 1.7h15A2.3 2.3 0 0021.3 4zM11.5 4a2.9 2.9 0 000 5.8 2.9 2.9 0 000-5.8z"/>
886
+ </symbol>
887
+ <symbol id="frm_quantity_icon" viewBox="0 0 17 20">
888
+ <title>quantity</title>
889
+ <g><path d="M15.6 1.3H1.9C1 1.3 0 2 0 3.1v13.6c0 1 .9 2 2 2h13.6c1 0 1.9-1 1.9-2V3.2c0-1-.9-2-2-2zm0 15.5H1.9V3.2h13.7"></path><path fill="none" stroke="currentColor" stroke-width="2" d="M9.5 4.5v10M4.5 9.5h10" transform="translate(-.7,0.4)"/></g>
890
+ </symbol>
891
  </defs>
892
  </svg>
js/formidable_admin.js CHANGED
@@ -372,6 +372,19 @@ function frmAdminBuildJS() {
372
  return false;
373
  }
374
 
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  function toggleItem( e ) {
376
  /*jshint validthis:true */
377
  var toggle = this.getAttribute( 'data-frmtoggle' ),
@@ -673,6 +686,7 @@ function frmAdminBuildJS() {
673
  if ( auto !== 'auto' ) {
674
  // Hide success message on tab change.
675
  jQuery( '.frm_updated_message' ).hide();
 
676
  }
677
 
678
  if ( jQuery( link ).closest( '#frm_adv_info' ).length ) {
@@ -1001,6 +1015,7 @@ function frmAdminBuildJS() {
1001
 
1002
  initiateMultiselect();
1003
  renumberPageBreaks();
 
1004
  },
1005
  } );
1006
  }
@@ -1075,7 +1090,7 @@ function frmAdminBuildJS() {
1075
  }
1076
 
1077
  function maybeReenableSummaryBtnAfterAJAX( fieldType, addBtn, fieldButton, errorThrown ) {
1078
- alert( errorThrown + '. Please try again.' );
1079
  if ( 'summary' === fieldType ) {
1080
  addBtn.removeClass( 'disabled' );
1081
  fieldButton.draggable( 'enable' );
@@ -1087,6 +1102,23 @@ function frmAdminBuildJS() {
1087
  return $newFields.children( 'li.edit_field_type_summary' ).length > 0;
1088
  }
1089
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1090
  function duplicateField() {
1091
  /*jshint validthis:true */
1092
  var thisField = jQuery( this ).closest( 'li' );
@@ -1121,10 +1153,22 @@ function frmAdminBuildJS() {
1121
  field = document.getElementById( match[1] ),
1122
  section = '#' + match[1] + '.edit_field_type_divider ul.frm_sorting',
1123
  $thisSection = jQuery( section ),
 
1124
  toggled = false;
1125
 
1126
  setupSortable( section );
1127
 
 
 
 
 
 
 
 
 
 
 
 
1128
  if ( $thisSection.length ) {
1129
  $thisSection.parent( '.frm_field_box' ).children( '.frm_no_section_fields' ).addClass( 'frm_block' );
1130
  } else {
@@ -1200,10 +1244,61 @@ function frmAdminBuildJS() {
1200
  warningMessage += checkShortcodes( calculation, this );
1201
 
1202
  if ( warningMessage !== '' ) {
1203
- alert( calculation + "\n\n" + warningMessage );
1204
  }
1205
  }
1206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1207
  /**
1208
  * Checks a string for parens, brackets, and curly braces and returns a message if any unmatched are found.
1209
  * @param formula
@@ -1238,7 +1333,7 @@ function frmAdminBuildJS() {
1238
  }
1239
 
1240
  if ( stack.length > 0 || unmatchedClosing.length > 0 ) {
1241
- msg = frm_admin_js.unmatched_parens + '\n\n';
1242
  return msg;
1243
  }
1244
 
@@ -1325,13 +1420,17 @@ function frmAdminBuildJS() {
1325
  return /\[id\]|\[key\]|\[if\s\w+\]|\[foreach\s\w+\]|\[created-at(\s*)?/g;
1326
  }
1327
 
1328
- function isSummaryCalcBox( box ) {
1329
  var list = jQuery( box ).find( '.frm_code_list' );
1330
- return 1 === list.length && list.hasClass( 'frm_js_summary_list' );
1331
  }
1332
 
1333
  function extractExcludedOptions( exclude ) {
1334
  var opts = [];
 
 
 
 
1335
  for ( var i = 0; i < exclude.length; i++ ) {
1336
  if ( exclude[ i ].startsWith( '[' ) ) {
1337
  opts.push( exclude[ i ] );
@@ -1372,7 +1471,7 @@ function frmAdminBuildJS() {
1372
  return;
1373
  }
1374
 
1375
- var isSummary = isSummaryCalcBox( v );
1376
 
1377
  var form_id = jQuery( 'input[name="id"]' ).val();
1378
  var fieldId = p.find( 'input[name="frm_fields_submitted[]"]' ).val();
@@ -1391,7 +1490,7 @@ function frmAdminBuildJS() {
1391
  list.innerHTML = '';
1392
 
1393
  for ( i = 0; i < fields.length; i++ ) {
1394
- if ( exclude.includes( fields[ i ].fieldType ) ||
1395
  ( excludedOpts.length && hasExcludedOption( fields[ i ], excludedOpts ) ) ) {
1396
  continue;
1397
  }
@@ -1453,11 +1552,17 @@ function frmAdminBuildJS() {
1453
  popCalcFields( jQuery( '.frm-inline-modal.postbox:has(.frm_js_summary_list)' )[0], true );
1454
  }
1455
 
1456
- function getFieldList() {
1457
  var i, fields = [],
1458
- allFields = document.querySelectorAll( 'li.frm_field_box' );
 
1459
 
1460
  for ( i = 0; i < allFields.length; i++ ) {
 
 
 
 
 
1461
  var fieldId = allFields[ i ].getAttribute( 'data-fid' );
1462
  if ( typeof fieldId !== 'undefined' && fieldId ) {
1463
  fields.push( {
@@ -1467,10 +1572,54 @@ function frmAdminBuildJS() {
1467
  'fieldKey': getPossibleValue( 'field_options_field_key_' + fieldId )
1468
  } );
1469
  }
 
 
 
 
 
 
 
1470
 
1471
- if ( i === allFields.length - 1 ) {
1472
- return fields;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1473
  }
 
 
 
 
 
 
1474
  }
1475
  }
1476
 
@@ -1656,7 +1805,8 @@ function frmAdminBuildJS() {
1656
  fieldId = jQuery( this ).closest( '[data-fid]' ).data( 'fid' ),
1657
  separate = usingSeparateValues( fieldId ),
1658
  optList = document.getElementById( 'frm_field_' + fieldId + '_opts' ),
1659
- opts = optList.getElementsByTagName( 'li' );
 
1660
 
1661
  document.getElementById( 'bulk-field-id' ).value = fieldId;
1662
 
@@ -1669,6 +1819,9 @@ function frmAdminBuildJS() {
1669
  if ( separate ) {
1670
  content += '|' + document.getElementsByName( 'field_options[options_' + fieldId + '][' + key + '][value]' )[0].value;
1671
  }
 
 
 
1672
  content += "\r\n";
1673
  }
1674
  }
@@ -1914,14 +2067,20 @@ function frmAdminBuildJS() {
1914
  settings.remove();
1915
 
1916
  $thisField.fadeOut( 'slow', function() {
1917
- var $section = $thisField.closest( '.start_divider' );
 
1918
  $thisField.remove();
1919
- if ( $thisField.data( 'type' ) === 'break' ) {
1920
  renumberPageBreaks();
1921
  }
1922
- if ( $thisField.data( 'type' ) === 'summary' ) {
1923
  reenableAddSummaryBtn();
1924
  }
 
 
 
 
 
1925
  if ( jQuery( '#frm-show-fields li' ).length === 0 ) {
1926
  document.getElementById( 'frm_form_editor_container' ).classList.remove( 'frm-has-fields' );
1927
  } else if ( $section.length ) {
@@ -2137,6 +2296,10 @@ function frmAdminBuildJS() {
2137
  }
2138
 
2139
  function clickLabel() {
 
 
 
 
2140
  /*jshint validthis:true */
2141
  var setting = document.querySelectorAll( '[data-changeme="' + this.id + '"]' )[0],
2142
  fieldId = this.id.replace( 'field_label_', '' ),
@@ -2231,7 +2394,7 @@ function frmAdminBuildJS() {
2231
  /*jshint validthis:true */
2232
  var val = this.value;
2233
  if ( val !== '' && ( val < 2 || val > 200 ) ) {
2234
- alert( frm_admin_js.repeat_limit_min );
2235
  this.value = '';
2236
  }
2237
  }
@@ -2240,7 +2403,7 @@ function frmAdminBuildJS() {
2240
  /*jshint validthis:true */
2241
  var val = this.value;
2242
  if ( val !== '' && ( val < 1 || val > 200 ) ) {
2243
- alert( frm_admin_js.checkbox_limit );
2244
  this.value = '';
2245
  }
2246
  }
@@ -2364,29 +2527,30 @@ function frmAdminBuildJS() {
2364
  type = input.attr( 'type' );
2365
  jQuery( '#field_' + fieldId + '_inner_container > .frm_form_fields' ).html( '' );
2366
  fieldInfo = getFieldKeyFromOpt( jQuery( '#frm_delete_field_' + fieldId + '-000_container' ) );
 
 
2367
 
2368
  for ( i = 0; i < opts.length; i++ ) {
2369
- addRadioCheckboxOpt( type, opts[ i ], fieldId, fieldInfo.fieldKey );
2370
  }
2371
  }
2372
  }
2373
 
2374
- function addRadioCheckboxOpt( type, opt, fieldId, fieldKey ) {
2375
  var other, single,
2376
  isOther = opt.key.indexOf( 'other' ) !== -1,
2377
- id = 'field_' + fieldKey + '-' + opt.key,
2378
- container = jQuery( '#field_' + fieldId + '_inner_container > .frm_form_fields' );
2379
 
2380
  other = '<input type="text" id="field_' + fieldKey + '-' + opt.key + '-otext" class="frm_other_input frm_pos_none" name="item_meta[other][' + fieldId + '][' + opt.key + ']" value="" />';
2381
 
2382
  single = '<div class="frm_' + type + ' ' + type + '" id="frm_' + type + '_' + fieldId + '-' + opt.key + '"><label for="' + id +
2383
  '"><input type="' + type +
2384
  '" name="item_meta[' + fieldId + ']' + ( type === 'checkbox' ? '[]' : '' ) +
2385
- '" value="' + opt.saved + '" id="' + id + '"> ' + opt.label + '</label>' +
2386
  ( isOther ? other : '' ) +
2387
  '</div>';
2388
 
2389
- container.append( single );
2390
  }
2391
 
2392
  function fillDropdownOpts( field, atts ) {
@@ -2395,6 +2559,7 @@ function frmAdminBuildJS() {
2395
  }
2396
  var sourceID = atts.sourceID,
2397
  placeholder = atts.placeholder,
 
2398
  showOther = atts.other;
2399
 
2400
  removeDropdownOpts( field );
@@ -2416,6 +2581,11 @@ function frmAdminBuildJS() {
2416
  var opt = document.createElement( 'option' );
2417
  opt.value = opts[ i ].saved;
2418
  opt.innerHTML = label;
 
 
 
 
 
2419
  field.appendChild( opt );
2420
  }
2421
  }
@@ -2436,12 +2606,13 @@ function frmAdminBuildJS() {
2436
  }
2437
 
2438
  function getMultipleOpts( fieldId ) {
2439
- var i, saved, labelName, label, key, opts = [],
2440
  optVals = jQuery( 'input[name^="field_options[options_' + fieldId + ']"]' ),
2441
- separateValues = usingSeparateValues( fieldId );
 
2442
 
2443
  for ( i = 0; i < optVals.length; i++ ) {
2444
- if ( optVals[ i ].name.indexOf( '[000]' ) > 0 || optVals[ i ].name.indexOf( '[value]' ) > 0 ) {
2445
  continue;
2446
  }
2447
  saved = optVals[ i ].value;
@@ -2453,11 +2624,18 @@ function frmAdminBuildJS() {
2453
  saved = jQuery( 'input[name="' + labelName + '"]' ).val();
2454
  }
2455
 
2456
- opts.push( {
2457
  saved: saved,
2458
  label: label,
2459
  key: key
2460
- } );
 
 
 
 
 
 
 
2461
  }
2462
 
2463
  return opts;
@@ -2494,7 +2672,7 @@ function frmAdminBuildJS() {
2494
  var c = false;
2495
  if ( !c && jQuery( v ).attr( 'id' ) != id && jQuery( v ).html() == text ) {
2496
  c = true;
2497
- alert( 'Saved values cannot be identical.' );
2498
  }
2499
  } );
2500
  }
@@ -2686,7 +2864,7 @@ function frmAdminBuildJS() {
2686
  */
2687
  function hideEmptyEle() {
2688
  jQuery( '.frm-hide-empty' ).each( function() {
2689
- if ( jQuery( this ).text().trim().length == 0 ) {
2690
  jQuery( this ).remove();
2691
  }
2692
  });
@@ -3099,6 +3277,7 @@ function frmAdminBuildJS() {
3099
  function showFieldOptions( obj ) {
3100
  var i, singleField,
3101
  fieldId = obj.getAttribute( 'data-fid' ),
 
3102
  allFieldSettings = document.querySelectorAll( '.frm-single-settings:not(.frm_hidden)' );
3103
 
3104
  for ( i = 0; i < allFieldSettings.length; i++ ) {
@@ -3108,6 +3287,10 @@ function frmAdminBuildJS() {
3108
  singleField = document.getElementById( 'frm-single-settings-' + fieldId );
3109
  moveFieldSettings( singleField );
3110
 
 
 
 
 
3111
  singleField.classList.remove( 'frm_hidden' );
3112
  document.getElementById( 'frm-options-panel-tab' ).click();
3113
  }
@@ -3155,13 +3338,20 @@ function frmAdminBuildJS() {
3155
  function checkActiveAction( type ) {
3156
  var limit = parseInt( jQuery( '.frm_' + type + '_action' ).data( 'limit' ) );
3157
  var len = jQuery( '.frm_single_' + type + '_settings' ).length;
 
3158
  if ( len >= limit ) {
3159
- jQuery( '.frm_' + type + '_action' ).removeClass( 'frm_active_action' ).addClass( 'frm_inactive_action' );
 
 
3160
  } else {
3161
- jQuery( '.frm_' + type + '_action' ).removeClass( 'frm_inactive_action' ).addClass( 'frm_active_action' );
3162
  }
3163
  }
3164
 
 
 
 
 
3165
  function addFormLogicRow() {
3166
  /*jshint validthis:true */
3167
  var id = jQuery( this ).data( 'emailkey' );
@@ -3299,7 +3489,7 @@ function frmAdminBuildJS() {
3299
  if ( jQuery( this ).val() === v && this.name !== $t.name ) {
3300
  this.style.borderColor = 'red';
3301
  jQuery( $t ).val( '' );
3302
- alert( 'Oops. You have already used that field.' );
3303
  return false;
3304
  }
3305
  } );
@@ -4110,7 +4300,7 @@ function frmAdminBuildJS() {
4110
  // Check if there is enough space for text
4111
  var textSpace = height - size - paddingTop - paddingBottom - 3;
4112
  if ( textSpace < 0 ) {
4113
- alert( frm_admin_js.css_invalid_size );
4114
  }
4115
  }
4116
 
@@ -4652,7 +4842,7 @@ function frmAdminBuildJS() {
4652
  create: function( event, ui ) {
4653
  var $container = jQuery( this ).parent();
4654
 
4655
- if ( $container.length == 0 ) {
4656
  $container = 'body';
4657
  }
4658
 
@@ -4718,9 +4908,9 @@ function frmAdminBuildJS() {
4718
 
4719
  function installNewForm( form, action ) {
4720
  var data,
4721
- formName = form.elements['template_name'].value,
4722
- formDesc = form.elements['template_desc'].value,
4723
- link = form.elements['link'].value;
4724
 
4725
  data = {
4726
  action: action,
@@ -4931,6 +5121,32 @@ function frmAdminBuildJS() {
4931
  }
4932
  }
4933
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4934
  return {
4935
  init: function() {
4936
  s = {};
@@ -5155,9 +5371,17 @@ function frmAdminBuildJS() {
5155
  $builderForm.on( 'change', '.frm_include_extras_field', rePopCalcFieldsForSummary );
5156
  $builderForm.on( 'change', 'select[name^="field_options[form_select_"]', maybeChangeEmbedFormMsg );
5157
 
 
 
 
 
 
 
 
5158
  initBulkOptionsOverlay();
5159
  hideEmptyEle();
5160
  maybeDisableAddSummaryBtn();
 
5161
  },
5162
 
5163
  settingsInit: function() {
@@ -5195,6 +5419,7 @@ function frmAdminBuildJS() {
5195
  var formSettings = jQuery( '.frm_form_settings' );
5196
  formSettings.on( 'click', '.frm_add_form_logic', addFormLogicRow );
5197
  formSettings.on( 'blur', '.frm_email_blur', formatEmailSetting );
 
5198
 
5199
  formSettings.on( 'change', '#logic_link_submit', toggleSubmitLogic );
5200
  formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
@@ -5374,6 +5599,9 @@ function frmAdminBuildJS() {
5374
  $advInfo.before( '<div id="frm_position_ele"></div>' );
5375
  setupMenuOffset();
5376
 
 
 
 
5377
  // Show loading indicator.
5378
  jQuery( '#publish' ).mousedown( function() {
5379
  this.classList.add( 'frm_loading_button' );
@@ -5564,14 +5792,14 @@ function frmAdminBuildJS() {
5564
  },
5565
 
5566
  updateOpts: function( field_id, opts, modal ) {
5567
- var separate = usingSeparateValues( field_id );
5568
- $fieldOpts = document.getElementById( 'frm_field_' + field_id + '_opts' );
5569
- empty( $fieldOpts );
5570
  jQuery.ajax( {
5571
  type: 'POST',
5572
  url: ajaxurl,
5573
  data: {
5574
- action: 'frm_import_options',
5575
  field_id: field_id,
5576
  opts: opts,
5577
  separate: separate,
372
  return false;
373
  }
374
 
375
+ function infoModal( msg ) {
376
+ var $info = initModal( '#frm_info_modal', '400px' );
377
+
378
+ if ( $info === false ) {
379
+ return false;
380
+ }
381
+
382
+ jQuery( '.frm-info-msg' ).html( msg );
383
+
384
+ $info.dialog( 'open' );
385
+ return false;
386
+ }
387
+
388
  function toggleItem( e ) {
389
  /*jshint validthis:true */
390
  var toggle = this.getAttribute( 'data-frmtoggle' ),
686
  if ( auto !== 'auto' ) {
687
  // Hide success message on tab change.
688
  jQuery( '.frm_updated_message' ).hide();
689
+ jQuery( '.frm_warning_style' ).hide();
690
  }
691
 
692
  if ( jQuery( link ).closest( '#frm_adv_info' ).length ) {
1015
 
1016
  initiateMultiselect();
1017
  renumberPageBreaks();
1018
+ maybeHideQuantityProductFieldOption();
1019
  },
1020
  } );
1021
  }
1090
  }
1091
 
1092
  function maybeReenableSummaryBtnAfterAJAX( fieldType, addBtn, fieldButton, errorThrown ) {
1093
+ infoModal( errorThrown + '. Please try again.' );
1094
  if ( 'summary' === fieldType ) {
1095
  addBtn.removeClass( 'disabled' );
1096
  fieldButton.draggable( 'enable' );
1102
  return $newFields.children( 'li.edit_field_type_summary' ).length > 0;
1103
  }
1104
 
1105
+ function maybeHideQuantityProductFieldOption() {
1106
+ var hide = true,
1107
+ opts = document.querySelectorAll( '.frmjs_prod_field_opt_cont' );
1108
+
1109
+ if ( $newFields.find( 'li.edit_field_type_product' ).length > 1 ) {
1110
+ hide = false;
1111
+ }
1112
+
1113
+ for ( var i = 0; i < opts.length; i++ ) {
1114
+ if ( hide ) {
1115
+ opts[ i ].classList.add( 'frm_hidden' );
1116
+ } else {
1117
+ opts[ i ].classList.remove( 'frm_hidden' );
1118
+ }
1119
+ }
1120
+ }
1121
+
1122
  function duplicateField() {
1123
  /*jshint validthis:true */
1124
  var thisField = jQuery( this ).closest( 'li' );
1153
  field = document.getElementById( match[1] ),
1154
  section = '#' + match[1] + '.edit_field_type_divider ul.frm_sorting',
1155
  $thisSection = jQuery( section ),
1156
+ type = field.getAttribute( 'data-type' ),
1157
  toggled = false;
1158
 
1159
  setupSortable( section );
1160
 
1161
+ if ( 'quantity' === type ) {
1162
+ // try to automatically attach a product field
1163
+ maybeSetProductField( field );
1164
+ }
1165
+
1166
+ if ( 'product' === type || 'quantity' === type ) {
1167
+ // quantity too needs to be a part of the if stmt especially cos of the very
1168
+ // 1st quantity field (or even if it's just one quantity field in the form).
1169
+ maybeHideQuantityProductFieldOption();
1170
+ }
1171
+
1172
  if ( $thisSection.length ) {
1173
  $thisSection.parent( '.frm_field_box' ).children( '.frm_no_section_fields' ).addClass( 'frm_block' );
1174
  } else {
1244
  warningMessage += checkShortcodes( calculation, this );
1245
 
1246
  if ( warningMessage !== '' ) {
1247
+ infoModal( calculation + "\n\n" + warningMessage );
1248
  }
1249
  }
1250
 
1251
+ /**
1252
+ * Checks the Detail Page slug to see if it's a reserved word and displays a message if it is.
1253
+ */
1254
+ function checkDetailPageSlug() {
1255
+ var slug = jQuery( '#param' ).val(),
1256
+ msg;
1257
+ slug = slug.trim().toLowerCase();
1258
+ if ( Array.isArray( frm_admin_js.unsafe_params ) && frm_admin_js.unsafe_params.includes( slug ) ) {
1259
+ msg = frm_admin_js.slug_is_reserved;
1260
+ msg = msg.replace( '****', addHtmlTags( slug, 'strong' ) );
1261
+ msg += '<br /><br />';
1262
+ msg += addHtmlTags( '<a href="https://codex.wordpress.org/WordPress_Query_Vars" target="_blank" class="frm-standard-link">' + frm_admin_js.reserved_words + '</a>', 'div');
1263
+ infoModal( msg );
1264
+ }
1265
+ }
1266
+
1267
+ /**
1268
+ * Checks View filter value for params named with reserved words and displays a message if any are found.
1269
+ */
1270
+ function checkFilterParamNames() {
1271
+ var regEx = /\[\s*get\s*param\s*=\s*['"]?([a-zA-Z-_]+)['"]?/ig,
1272
+ filterValue = jQuery( this ).val(),
1273
+ match = regEx.exec( filterValue ),
1274
+ unsafeParams = '';
1275
+
1276
+ while ( match != null ) {
1277
+ if ( Array.isArray( frm_admin_js.unsafe_params ) && frm_admin_js.unsafe_params.includes( match[ 1 ] ) ) {
1278
+ if ( unsafeParams !== '' ) {
1279
+ unsafeParams += '", "' + match[ 1 ];
1280
+ } else {
1281
+ unsafeParams = match[ 1 ];
1282
+ }
1283
+ }
1284
+ match = regEx.exec( filterValue );
1285
+ }
1286
+
1287
+ if ( unsafeParams !== '' ) {
1288
+ msg = frm_admin_js.param_is_reserved;
1289
+ msg = msg.replace( '****', addHtmlTags( unsafeParams, 'strong' ) );
1290
+ msg += '<br /><br />';
1291
+ msg += ' <a href="https://codex.wordpress.org/WordPress_Query_Vars" target="_blank" class="frm-standard-link">' + frm_admin_js.reserved_words + '</a>';
1292
+
1293
+ infoModal( msg );
1294
+ }
1295
+ }
1296
+
1297
+ function addHtmlTags( text, tag ){
1298
+ tag = tag ? tag : 'p';
1299
+ return '<' + tag + '>' + text + '</' + tag + '>';
1300
+ }
1301
+
1302
  /**
1303
  * Checks a string for parens, brackets, and curly braces and returns a message if any unmatched are found.
1304
  * @param formula
1333
  }
1334
 
1335
  if ( stack.length > 0 || unmatchedClosing.length > 0 ) {
1336
+ msg = frm_admin_js.unmatched_parens + "\n\n";
1337
  return msg;
1338
  }
1339
 
1420
  return /\[id\]|\[key\]|\[if\s\w+\]|\[foreach\s\w+\]|\[created-at(\s*)?/g;
1421
  }
1422
 
1423
+ function isCalcBoxType( box, listClass ) {
1424
  var list = jQuery( box ).find( '.frm_code_list' );
1425
+ return 1 === list.length && list.hasClass( listClass );
1426
  }
1427
 
1428
  function extractExcludedOptions( exclude ) {
1429
  var opts = [];
1430
+ if ( ! Array.isArray( exclude ) ) {
1431
+ return opts;
1432
+ }
1433
+
1434
  for ( var i = 0; i < exclude.length; i++ ) {
1435
  if ( exclude[ i ].startsWith( '[' ) ) {
1436
  opts.push( exclude[ i ] );
1471
  return;
1472
  }
1473
 
1474
+ var isSummary = isCalcBoxType( v, 'frm_js_summary_list' );
1475
 
1476
  var form_id = jQuery( 'input[name="id"]' ).val();
1477
  var fieldId = p.find( 'input[name="frm_fields_submitted[]"]' ).val();
1490
  list.innerHTML = '';
1491
 
1492
  for ( i = 0; i < fields.length; i++ ) {
1493
+ if ( ( exclude && exclude.includes( fields[ i ].fieldType ) ) ||
1494
  ( excludedOpts.length && hasExcludedOption( fields[ i ], excludedOpts ) ) ) {
1495
  continue;
1496
  }
1552
  popCalcFields( jQuery( '.frm-inline-modal.postbox:has(.frm_js_summary_list)' )[0], true );
1553
  }
1554
 
1555
+ function getFieldList( fieldType ) {
1556
  var i, fields = [],
1557
+ allFields = document.querySelectorAll( 'li.frm_field_box' ),
1558
+ checkType = 'undefined' !== typeof fieldType;
1559
 
1560
  for ( i = 0; i < allFields.length; i++ ) {
1561
+ // data-ftype is better (than data-type) cos of fields loaded by AJAX - which might not be ready yet
1562
+ if ( checkType && allFields[ i ].getAttribute( 'data-ftype' ) !== fieldType ) {
1563
+ continue;
1564
+ }
1565
+
1566
  var fieldId = allFields[ i ].getAttribute( 'data-fid' );
1567
  if ( typeof fieldId !== 'undefined' && fieldId ) {
1568
  fields.push( {
1572
  'fieldKey': getPossibleValue( 'field_options_field_key_' + fieldId )
1573
  } );
1574
  }
1575
+ }
1576
+
1577
+ return fields;
1578
+ }
1579
+
1580
+ function popProductFields( field ) {
1581
+ var options = [], fields, i, selected, current;
1582
 
1583
+ current = field.getAttribute( 'data-frmcurrent' );
1584
+
1585
+ fields = getFieldList( 'product' );
1586
+
1587
+ options.push( '<option value="">' + frm_admin_js.select_a_field + '</option>' );
1588
+
1589
+ for ( i = 0; i < fields.length; i++ ) {
1590
+ selected = current == fields[ i ].fieldId ? ' selected' : '';
1591
+ options.push( '<option value="'+ fields[ i ].fieldId +'"' + selected + '>'+ fields[ i ].fieldName +'</option>' );
1592
+ }
1593
+
1594
+ field.innerHTML = options.join( '' );
1595
+ }
1596
+
1597
+ function popAllProductFields() {
1598
+ var opts = document.querySelectorAll( '.frmjs_prod_field_opt' );
1599
+ for ( var i = 0; i < opts.length; i++ ) {
1600
+ popProductFields( opts[ i ] );
1601
+ }
1602
+ }
1603
+
1604
+ function maybeSetProductField( field ) {
1605
+ var productFields, quantityFields, fieldsList, productFieldOpt, fieldId;
1606
+
1607
+ fieldsList = jQuery( field ).closest( 'ul.frm_sorting' );
1608
+ productFields = fieldsList.children( '.edit_field_type_product' );
1609
+ quantityFields = fieldsList.children( '.edit_field_type_quantity' );
1610
+
1611
+ if ( 1 === quantityFields.length && 1 === productFields.length ) {
1612
+ fieldId = field.getAttribute( 'data-fid' );
1613
+ productFieldOpt = document.getElementById( 'field_options[product_field_' + fieldId + ']' );
1614
+ if ( null === productFieldOpt ) {
1615
+ return; // very unlikely though
1616
  }
1617
+
1618
+ productFieldOpt.setAttribute( 'data-frmcurrent', productFields[0].getAttribute( 'data-fid' ) );
1619
+ popProductFields( productFieldOpt );
1620
+ // in order to move its settings to that LHS panel where
1621
+ // the update form resides, else it'll lose this setting
1622
+ moveFieldSettings( document.getElementById( 'frm-single-settings-' + fieldId ) );
1623
  }
1624
  }
1625
 
1805
  fieldId = jQuery( this ).closest( '[data-fid]' ).data( 'fid' ),
1806
  separate = usingSeparateValues( fieldId ),
1807
  optList = document.getElementById( 'frm_field_' + fieldId + '_opts' ),
1808
+ opts = optList.getElementsByTagName( 'li' ),
1809
+ product = isProductField( fieldId );
1810
 
1811
  document.getElementById( 'bulk-field-id' ).value = fieldId;
1812
 
1819
  if ( separate ) {
1820
  content += '|' + document.getElementsByName( 'field_options[options_' + fieldId + '][' + key + '][value]' )[0].value;
1821
  }
1822
+ if ( product ) {
1823
+ content += '|' + document.getElementsByName( 'field_options[options_' + fieldId + '][' + key + '][price]' )[0].value;
1824
+ }
1825
  content += "\r\n";
1826
  }
1827
  }
2067
  settings.remove();
2068
 
2069
  $thisField.fadeOut( 'slow', function() {
2070
+ var $section = $thisField.closest( '.start_divider' ),
2071
+ type = $thisField.data( 'type' );
2072
  $thisField.remove();
2073
+ if ( type === 'break' ) {
2074
  renumberPageBreaks();
2075
  }
2076
+ if ( type === 'summary' ) {
2077
  reenableAddSummaryBtn();
2078
  }
2079
+ if ( type === 'product' ) {
2080
+ maybeHideQuantityProductFieldOption();
2081
+ // a product field attached to a quantity field earlier might be the one deleted, so re-populate
2082
+ popAllProductFields();
2083
+ }
2084
  if ( jQuery( '#frm-show-fields li' ).length === 0 ) {
2085
  document.getElementById( 'frm_form_editor_container' ).classList.remove( 'frm-has-fields' );
2086
  } else if ( $section.length ) {
2296
  }
2297
 
2298
  function clickLabel() {
2299
+ if ( ! this.id ) {
2300
+ return;
2301
+ }
2302
+
2303
  /*jshint validthis:true */
2304
  var setting = document.querySelectorAll( '[data-changeme="' + this.id + '"]' )[0],
2305
  fieldId = this.id.replace( 'field_label_', '' ),
2394
  /*jshint validthis:true */
2395
  var val = this.value;
2396
  if ( val !== '' && ( val < 2 || val > 200 ) ) {
2397
+ infoModal( frm_admin_js.repeat_limit_min );
2398
  this.value = '';
2399
  }
2400
  }
2403
  /*jshint validthis:true */
2404
  var val = this.value;
2405
  if ( val !== '' && ( val < 1 || val > 200 ) ) {
2406
+ infoModal( frm_admin_js.checkbox_limit );
2407
  this.value = '';
2408
  }
2409
  }
2527
  type = input.attr( 'type' );
2528
  jQuery( '#field_' + fieldId + '_inner_container > .frm_form_fields' ).html( '' );
2529
  fieldInfo = getFieldKeyFromOpt( jQuery( '#frm_delete_field_' + fieldId + '-000_container' ) );
2530
+ var container = jQuery( '#field_' + fieldId + '_inner_container > .frm_form_fields' ),
2531
+ isProduct = isProductField( fieldId );
2532
 
2533
  for ( i = 0; i < opts.length; i++ ) {
2534
+ container.append( addRadioCheckboxOpt( type, opts[ i ], fieldId, fieldInfo.fieldKey, isProduct ) );
2535
  }
2536
  }
2537
  }
2538
 
2539
+ function addRadioCheckboxOpt( type, opt, fieldId, fieldKey, isProduct ) {
2540
  var other, single,
2541
  isOther = opt.key.indexOf( 'other' ) !== -1,
2542
+ id = 'field_' + fieldKey + '-' + opt.key;
 
2543
 
2544
  other = '<input type="text" id="field_' + fieldKey + '-' + opt.key + '-otext" class="frm_other_input frm_pos_none" name="item_meta[other][' + fieldId + '][' + opt.key + ']" value="" />';
2545
 
2546
  single = '<div class="frm_' + type + ' ' + type + '" id="frm_' + type + '_' + fieldId + '-' + opt.key + '"><label for="' + id +
2547
  '"><input type="' + type +
2548
  '" name="item_meta[' + fieldId + ']' + ( type === 'checkbox' ? '[]' : '' ) +
2549
+ '" value="' + opt.saved + '" id="' + id + '"' + ( isProduct ? ' data-price="' + opt.price + '"' : '' ) + '> ' + opt.label + '</label>' +
2550
  ( isOther ? other : '' ) +
2551
  '</div>';
2552
 
2553
+ return single;
2554
  }
2555
 
2556
  function fillDropdownOpts( field, atts ) {
2559
  }
2560
  var sourceID = atts.sourceID,
2561
  placeholder = atts.placeholder,
2562
+ isProduct = isProductField( sourceID )
2563
  showOther = atts.other;
2564
 
2565
  removeDropdownOpts( field );
2581
  var opt = document.createElement( 'option' );
2582
  opt.value = opts[ i ].saved;
2583
  opt.innerHTML = label;
2584
+
2585
+ if ( isProduct ) {
2586
+ opt.setAttribute( 'data-price', opts[ i ].price );
2587
+ }
2588
+
2589
  field.appendChild( opt );
2590
  }
2591
  }
2606
  }
2607
 
2608
  function getMultipleOpts( fieldId ) {
2609
+ var i, saved, labelName, label, key, opts = [], optObj,
2610
  optVals = jQuery( 'input[name^="field_options[options_' + fieldId + ']"]' ),
2611
+ separateValues = usingSeparateValues( fieldId ),
2612
+ isProduct = isProductField( fieldId );
2613
 
2614
  for ( i = 0; i < optVals.length; i++ ) {
2615
+ if ( optVals[ i ].name.indexOf( '[000]' ) > 0 || optVals[ i ].name.indexOf( '[value]' ) > 0 || optVals[ i ].name.indexOf( '[price]' ) > 0 ) {
2616
  continue;
2617
  }
2618
  saved = optVals[ i ].value;
2624
  saved = jQuery( 'input[name="' + labelName + '"]' ).val();
2625
  }
2626
 
2627
+ optObj = {
2628
  saved: saved,
2629
  label: label,
2630
  key: key
2631
+ };
2632
+
2633
+ if ( isProduct ) {
2634
+ labelName = optVals[ i ].name.replace( '[label]', '[price]' );
2635
+ optObj.price = jQuery( 'input[name="' + labelName + '"]' ).val();
2636
+ }
2637
+
2638
+ opts.push( optObj );
2639
  }
2640
 
2641
  return opts;
2672
  var c = false;
2673
  if ( !c && jQuery( v ).attr( 'id' ) != id && jQuery( v ).html() == text ) {
2674
  c = true;
2675
+ infoModal( 'Saved values cannot be identical.' );
2676
  }
2677
  } );
2678
  }
2864
  */
2865
  function hideEmptyEle() {
2866
  jQuery( '.frm-hide-empty' ).each( function() {
2867
+ if ( jQuery( this ).text().trim().length === 0 ) {
2868
  jQuery( this ).remove();
2869
  }
2870
  });
3277
  function showFieldOptions( obj ) {
3278
  var i, singleField,
3279
  fieldId = obj.getAttribute( 'data-fid' ),
3280
+ fieldType = obj.getAttribute( 'data-type' ),
3281
  allFieldSettings = document.querySelectorAll( '.frm-single-settings:not(.frm_hidden)' );
3282
 
3283
  for ( i = 0; i < allFieldSettings.length; i++ ) {
3287
  singleField = document.getElementById( 'frm-single-settings-' + fieldId );
3288
  moveFieldSettings( singleField );
3289
 
3290
+ if ( fieldType && 'quantity' === fieldType ) {
3291
+ popProductFields( jQuery( singleField ).find( '.frmjs_prod_field_opt' )[0] );
3292
+ }
3293
+
3294
  singleField.classList.remove( 'frm_hidden' );
3295
  document.getElementById( 'frm-options-panel-tab' ).click();
3296
  }
3338
  function checkActiveAction( type ) {
3339
  var limit = parseInt( jQuery( '.frm_' + type + '_action' ).data( 'limit' ) );
3340
  var len = jQuery( '.frm_single_' + type + '_settings' ).length;
3341
+ var limitClass;
3342
  if ( len >= limit ) {
3343
+ limitClass = 'frm_inactive_action';
3344
+ limitClass += ( limit > 0 ) ? ' frm_already_used' : '';
3345
+ jQuery( '.frm_' + type + '_action' ).removeClass( 'frm_active_action' ).addClass( limitClass );
3346
  } else {
3347
+ jQuery( '.frm_' + type + '_action' ).removeClass( 'frm_inactive_action frm_already_used' ).addClass( 'frm_active_action' );
3348
  }
3349
  }
3350
 
3351
+ function onlyOneActionMessage() {
3352
+ infoModal( frm_admin_js.only_one_action );
3353
+ }
3354
+
3355
  function addFormLogicRow() {
3356
  /*jshint validthis:true */
3357
  var id = jQuery( this ).data( 'emailkey' );
3489
  if ( jQuery( this ).val() === v && this.name !== $t.name ) {
3490
  this.style.borderColor = 'red';
3491
  jQuery( $t ).val( '' );
3492
+ infoModal( 'Oops. You have already used that field.' );
3493
  return false;
3494
  }
3495
  } );
4300
  // Check if there is enough space for text
4301
  var textSpace = height - size - paddingTop - paddingBottom - 3;
4302
  if ( textSpace < 0 ) {
4303
+ infoModal( frm_admin_js.css_invalid_size );
4304
  }
4305
  }
4306
 
4842
  create: function( event, ui ) {
4843
  var $container = jQuery( this ).parent();
4844
 
4845
+ if ( $container.length === 0 ) {
4846
  $container = 'body';
4847
  }
4848
 
4908
 
4909
  function installNewForm( form, action ) {
4910
  var data,
4911
+ formName = form.elements.template_name.value,
4912
+ formDesc = form.elements.template_desc.value,
4913
+ link = form.elements.link.value;
4914
 
4915
  data = {
4916
  action: action,
5121
  }
5122
  }
5123
 
5124
+ function toggleProductType() {
5125
+ var settings = jQuery( this ).closest( '.frm-single-settings' ),
5126
+ container = settings.find( '.frmjs_product_choices' ),
5127
+ heading = settings.find( '.frm_prod_options_heading' ),
5128
+ currentVal = this.options[ this.selectedIndex ].value;
5129
+
5130
+ container.removeClass( 'frm_prod_type_single frm_prod_type_user_def' );
5131
+ heading.removeClass( 'frm_prod_user_def' );
5132
+
5133
+ if ( 'single' === currentVal ) {
5134
+ container.addClass( 'frm_prod_type_single' );
5135
+ } else if ( 'user_def' === currentVal ) {
5136
+ container.addClass( 'frm_prod_type_user_def' );
5137
+ heading.addClass( 'frm_prod_user_def' );
5138
+ }
5139
+ }
5140
+
5141
+ function isProductField( fieldId ) {
5142
+ var field = document.getElementById( 'frm_field_id_' + fieldId );
5143
+ if ( field === null ) {
5144
+ return false;
5145
+ } else {
5146
+ return 'product' === field.getAttribute( 'data-type' );
5147
+ }
5148
+ }
5149
+
5150
  return {
5151
  init: function() {
5152
  s = {};
5371
  $builderForm.on( 'change', '.frm_include_extras_field', rePopCalcFieldsForSummary );
5372
  $builderForm.on( 'change', 'select[name^="field_options[form_select_"]', maybeChangeEmbedFormMsg );
5373
 
5374
+ popAllProductFields();
5375
+ jQuery( document ).on( 'change', '.frmjs_prod_field_opt', function () {
5376
+ this.setAttribute( 'data-frmcurrent', this.options[ this.selectedIndex ].value );
5377
+ } );
5378
+
5379
+ jQuery( document ).on( 'change', '.frmjs_prod_data_type_opt', toggleProductType );
5380
+
5381
  initBulkOptionsOverlay();
5382
  hideEmptyEle();
5383
  maybeDisableAddSummaryBtn();
5384
+ maybeHideQuantityProductFieldOption();
5385
  },
5386
 
5387
  settingsInit: function() {
5419
  var formSettings = jQuery( '.frm_form_settings' );
5420
  formSettings.on( 'click', '.frm_add_form_logic', addFormLogicRow );
5421
  formSettings.on( 'blur', '.frm_email_blur', formatEmailSetting );
5422
+ formSettings.on( 'click', '.frm_already_used', onlyOneActionMessage );
5423
 
5424
  formSettings.on( 'change', '#logic_link_submit', toggleSubmitLogic );
5425
  formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
5599
  $advInfo.before( '<div id="frm_position_ele"></div>' );
5600
  setupMenuOffset();
5601
 
5602
+ jQuery( document ).on( 'blur', '#param', checkDetailPageSlug );
5603
+ jQuery( document ).on( 'blur', 'input[name^="options[where_val]"]', checkFilterParamNames );
5604
+
5605
  // Show loading indicator.
5606
  jQuery( '#publish' ).mousedown( function() {
5607
  this.classList.add( 'frm_loading_button' );
5792
  },
5793
 
5794
  updateOpts: function( field_id, opts, modal ) {
5795
+ var separate = usingSeparateValues( field_id ),
5796
+ $fieldOpts = document.getElementById( 'frm_field_' + field_id + '_opts' ),
5797
+ action = isProductField( field_id ) ? 'frm_bulk_products' : 'frm_import_options';
5798
  jQuery.ajax( {
5799
  type: 'POST',
5800
  url: ajaxurl,
5801
  data: {
5802
+ action: action,
5803
  field_id: field_id,
5804
  opts: opts,
5805
  separate: separate,
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.03.07\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-01-09T17:28:29+01: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"
@@ -241,7 +241,7 @@ msgid "Dropdown"
241
  msgstr ""
242
 
243
  #: classes/models/FrmField.php:34
244
- #: classes/controllers/FrmFormsController.php:1149
245
  msgid "Email"
246
  msgstr ""
247
 
@@ -266,7 +266,7 @@ msgid "Hidden Field"
266
  msgstr ""
267
 
268
  #: classes/models/FrmField.php:58
269
- #: classes/controllers/FrmFormsController.php:1144
270
  msgid "User ID"
271
  msgstr ""
272
 
@@ -283,7 +283,7 @@ msgid "Rich Text"
283
  msgstr ""
284
 
285
  #: classes/models/FrmField.php:82
286
- #: classes/controllers/FrmFormsController.php:732
287
  msgid "Date"
288
  msgstr ""
289
 
@@ -367,6 +367,19 @@ msgstr ""
367
  msgid "Appointment"
368
  msgstr ""
369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  #: classes/models/FrmDb.php:430
371
  msgid "Use the query in an array format so it can be properly prepared."
372
  msgstr ""
@@ -424,28 +437,37 @@ msgstr ""
424
  msgid "The reCAPTCHA was not entered correctly"
425
  msgstr ""
426
 
427
- #. translators: %s: Field type
428
  #. translators: %s: Field name
429
- #: classes/models/fields/FrmFieldType.php:414
430
- #: classes/views/frm-fields/back-end/field-choices.php:13
 
431
  msgid "%s Options"
432
  msgstr ""
433
 
434
- #: classes/models/fields/FrmFieldType.php:507
 
 
 
 
 
 
 
 
 
435
  #: classes/helpers/FrmFieldsHelper.php:294
436
  msgid "This field is invalid"
437
  msgstr ""
438
 
439
  #. translators: %s: The field name.
440
  #. translators: %s: Field name
441
- #: classes/models/fields/FrmFieldType.php:510
442
  #: classes/helpers/FrmFieldsHelper.php:167
443
  #: classes/helpers/FrmFieldsHelper.php:296
444
  #: classes/helpers/FrmXMLHelper.php:1099
445
  msgid "%s is invalid"
446
  msgstr ""
447
 
448
- #: classes/models/fields/FrmFieldType.php:517
449
  msgid "Untitled"
450
  msgstr ""
451
 
@@ -570,7 +592,7 @@ msgid "Installed"
570
  msgstr ""
571
 
572
  #: classes/controllers/FrmAddonsController.php:484
573
- #: classes/helpers/FrmAppHelper.php:2271
574
  msgid "Active"
575
  msgstr ""
576
 
@@ -603,7 +625,7 @@ msgstr ""
603
 
604
  #: classes/controllers/FrmAppController.php:158
605
  #: classes/controllers/FrmXMLController.php:133
606
- #: classes/controllers/FrmFormsController.php:727
607
  #: classes/controllers/FrmEntriesController.php:8
608
  #: classes/controllers/FrmEntriesController.php:90
609
  #: classes/views/xml/import_form.php:114
@@ -639,7 +661,7 @@ msgstr ""
639
 
640
  #: classes/controllers/FrmXMLController.php:132
641
  #: classes/controllers/FrmFormsController.php:6
642
- #: classes/controllers/FrmFormsController.php:737
643
  #: classes/views/frm-forms/list.php:5
644
  msgid "Forms"
645
  msgstr ""
@@ -710,7 +732,7 @@ msgstr ""
710
  #: classes/controllers/FrmSettingsController.php:237
711
  #: classes/views/frm-forms/_publish_box.php:9
712
  #: classes/views/frm-forms/edit.php:23
713
- #: classes/views/frm-forms/add_field_links.php:175
714
  #: classes/views/styles/header-buttons.php:7
715
  #: classes/views/styles/manage.php:84
716
  #: classes/helpers/FrmStylesHelper.php:70
@@ -817,12 +839,12 @@ msgid "Your form styles have been saved."
817
  msgstr ""
818
 
819
  #: classes/controllers/FrmStylesController.php:389
820
- #: classes/controllers/FrmFormsController.php:936
821
  msgid "General"
822
  msgstr ""
823
 
824
  #: classes/controllers/FrmStylesController.php:390
825
- #: classes/controllers/FrmFormsController.php:726
826
  #: classes/views/frm-forms/settings-advanced.php:8
827
  #: classes/views/xml/import_form.php:111
828
  #: classes/views/styles/_sample_form.php:14
@@ -872,269 +894,269 @@ msgstr ""
872
  msgid "Once Weekly"
873
  msgstr ""
874
 
875
- #: classes/controllers/FrmFormsController.php:133
876
  msgid "Settings Successfully Updated"
877
  msgstr ""
878
 
879
- #: classes/controllers/FrmFormsController.php:160
880
- #: classes/controllers/FrmFormsController.php:885
881
  msgid "Form was successfully updated."
882
  msgstr ""
883
 
884
  #. translators: %1$s: Start link HTML, %2$s: end link HTML
885
- #: classes/controllers/FrmFormsController.php:165
886
  msgid "However, your form is very long and may be %1$sreaching server limits%2$s."
887
  msgstr ""
888
 
889
- #: classes/controllers/FrmFormsController.php:219
890
  #: deprecated/FrmDeprecated.php:400
891
  msgid "Form template was Successfully Created"
892
  msgstr ""
893
 
894
- #: classes/controllers/FrmFormsController.php:219
895
  msgid "Form was Successfully Copied"
896
  msgstr ""
897
 
898
- #: classes/controllers/FrmFormsController.php:223
899
  msgid "There was a problem creating the new template."
900
  msgstr ""
901
 
902
- #: classes/controllers/FrmFormsController.php:331
903
  msgid "Form Preview"
904
  msgstr ""
905
 
906
  #. translators: %1$s: Number of forms
907
- #: classes/controllers/FrmFormsController.php:376
908
- #: classes/controllers/FrmFormsController.php:437
909
  msgid "%1$s form restored from the Trash."
910
  msgid_plural "%1$s forms restored from the Trash."
911
  msgstr[0] ""
912
 
913
  #. translators: %1$s: Number of forms, %2$s: Start link HTML, %3$s: End link HTML
914
- #: classes/controllers/FrmFormsController.php:440
915
- #: classes/controllers/FrmFormsController.php:465
916
  msgid "%1$s form moved to the Trash. %2$sUndo%3$s"
917
  msgid_plural "%1$s forms moved to the Trash. %2$sUndo%3$s"
918
  msgstr[0] ""
919
 
920
  #. translators: %1$s: Number of forms
921
- #: classes/controllers/FrmFormsController.php:488
922
  msgid "%1$s Form Permanently Deleted"
923
  msgid_plural "%1$s Forms Permanently Deleted"
924
  msgstr[0] ""
925
 
926
  #. translators: %1$s: Number of forms
927
- #: classes/controllers/FrmFormsController.php:505
928
- #: classes/controllers/FrmFormsController.php:522
929
  msgid "%1$s form permanently deleted."
930
  msgid_plural "%1$s forms permanently deleted."
931
  msgstr[0] ""
932
 
933
- #: classes/controllers/FrmFormsController.php:568
934
  msgid "There was an error creating a template."
935
  msgstr ""
936
 
937
- #: classes/controllers/FrmFormsController.php:612
938
  msgid "Add forms and content"
939
  msgstr ""
940
 
941
- #: classes/controllers/FrmFormsController.php:628
942
  #: classes/controllers/FrmEntriesController.php:74
943
  #: classes/views/xml/import_form.php:145
944
  #: classes/widgets/FrmShowForm.php:56
945
  msgid "Form"
946
  msgstr ""
947
 
948
- #: classes/controllers/FrmFormsController.php:629
949
  #: classes/views/frm-forms/insert_form_popup.php:28
950
  msgid "Insert a Form"
951
  msgstr ""
952
 
953
- #: classes/controllers/FrmFormsController.php:658
954
  msgid "Display form title"
955
  msgstr ""
956
 
957
- #: classes/controllers/FrmFormsController.php:662
958
  msgid "Display form description"
959
  msgstr ""
960
 
961
- #: classes/controllers/FrmFormsController.php:666
962
  msgid "Minimize form HTML"
963
  msgstr ""
964
 
965
- #: classes/controllers/FrmFormsController.php:722
966
  #: classes/views/frm-forms/new-form-overlay.php:9
967
  msgid "Template Name"
968
  msgstr ""
969
 
970
- #: classes/controllers/FrmFormsController.php:723
971
  #: classes/views/xml/import_form.php:113
972
  msgid "Type"
973
  msgstr ""
974
 
975
- #: classes/controllers/FrmFormsController.php:724
976
- #: classes/controllers/FrmFormsController.php:728
977
  #: classes/views/shared/mb_adv_info.php:93
978
  #: classes/helpers/FrmCSVExportHelper.php:155
979
  msgid "Key"
980
  msgstr ""
981
 
982
- #: classes/controllers/FrmFormsController.php:729
983
  msgid "Shortcodes"
984
  msgstr ""
985
 
986
- #: classes/controllers/FrmFormsController.php:859
987
  msgid "You are trying to edit a form that does not exist."
988
  msgstr ""
989
 
990
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
991
- #: classes/controllers/FrmFormsController.php:864
992
  msgid "You are trying to edit a child form. Please edit from %1$shere%2$s"
993
  msgstr ""
994
 
995
- #: classes/controllers/FrmFormsController.php:887
996
  msgid "Template was successfully updated."
997
  msgstr ""
998
 
999
- #: classes/controllers/FrmFormsController.php:937
1000
  msgid "General Form Settings"
1001
  msgstr ""
1002
 
1003
- #: classes/controllers/FrmFormsController.php:942
1004
  msgid "Actions & Notifications"
1005
  msgstr ""
1006
 
1007
- #: classes/controllers/FrmFormsController.php:948
1008
- #: classes/controllers/FrmFormsController.php:953
1009
  msgid "Form Permissions"
1010
  msgstr ""
1011
 
1012
- #: classes/controllers/FrmFormsController.php:957
1013
  msgid "Form Scheduling"
1014
  msgstr ""
1015
 
1016
- #: classes/controllers/FrmFormsController.php:962
1017
  msgid "Form scheduling settings"
1018
  msgstr ""
1019
 
1020
- #: classes/controllers/FrmFormsController.php:966
1021
  msgid "Styling & Buttons"
1022
  msgstr ""
1023
 
1024
- #: classes/controllers/FrmFormsController.php:972
1025
  msgid "Customize HTML"
1026
  msgstr ""
1027
 
1028
- #: classes/controllers/FrmFormsController.php:1081
1029
  msgid "Customize field values with the following parameters."
1030
  msgstr ""
1031
 
1032
- #: classes/controllers/FrmFormsController.php:1118
1033
  msgid "Separator"
1034
  msgstr ""
1035
 
1036
- #: classes/controllers/FrmFormsController.php:1119
1037
  msgid "Use a different separator for checkbox fields"
1038
  msgstr ""
1039
 
1040
- #: classes/controllers/FrmFormsController.php:1122
1041
  msgid "Date Format"
1042
  msgstr ""
1043
 
1044
- #: classes/controllers/FrmFormsController.php:1125
1045
  #: classes/views/frm-fields/back-end/settings.php:22
1046
  msgid "Field Label"
1047
  msgstr ""
1048
 
1049
- #: classes/controllers/FrmFormsController.php:1128
1050
  msgid "No Auto P"
1051
  msgstr ""
1052
 
1053
- #: classes/controllers/FrmFormsController.php:1129
1054
  msgid "Do not automatically add any paragraphs or line breaks"
1055
  msgstr ""
1056
 
1057
- #: classes/controllers/FrmFormsController.php:1145
1058
  msgid "First Name"
1059
  msgstr ""
1060
 
1061
- #: classes/controllers/FrmFormsController.php:1146
1062
  msgid "Last Name"
1063
  msgstr ""
1064
 
1065
- #: classes/controllers/FrmFormsController.php:1147
1066
  msgid "Display Name"
1067
  msgstr ""
1068
 
1069
- #: classes/controllers/FrmFormsController.php:1148
1070
  msgid "User Login"
1071
  msgstr ""
1072
 
1073
- #: classes/controllers/FrmFormsController.php:1150
1074
  msgid "Avatar"
1075
  msgstr ""
1076
 
1077
- #: classes/controllers/FrmFormsController.php:1151
1078
  msgid "Author Link"
1079
  msgstr ""
1080
 
1081
- #: classes/controllers/FrmFormsController.php:1164
1082
  #: classes/views/frm-entries/sidebar-shared.php:46
1083
  msgid "Entry ID"
1084
  msgstr ""
1085
 
1086
- #: classes/controllers/FrmFormsController.php:1165
1087
  #: classes/controllers/FrmEntriesController.php:69
1088
  #: classes/views/frm-entries/sidebar-shared.php:52
1089
  #: classes/views/frm-entries/form.php:52
1090
  msgid "Entry Key"
1091
  msgstr ""
1092
 
1093
- #: classes/controllers/FrmFormsController.php:1166
1094
  msgid "Post ID"
1095
  msgstr ""
1096
 
1097
- #: classes/controllers/FrmFormsController.php:1167
1098
  msgid "User IP"
1099
  msgstr ""
1100
 
1101
- #: classes/controllers/FrmFormsController.php:1168
1102
  msgid "Entry created"
1103
  msgstr ""
1104
 
1105
- #: classes/controllers/FrmFormsController.php:1169
1106
  msgid "Entry updated"
1107
  msgstr ""
1108
 
1109
- #: classes/controllers/FrmFormsController.php:1171
1110
  msgid "Site URL"
1111
  msgstr ""
1112
 
1113
- #: classes/controllers/FrmFormsController.php:1172
1114
  msgid "Site Name"
1115
  msgstr ""
1116
 
1117
- #: classes/controllers/FrmFormsController.php:1180
1118
  msgid "Default Msg"
1119
  msgstr ""
1120
 
1121
- #: classes/controllers/FrmFormsController.php:1181
1122
  msgid "Default HTML"
1123
  msgstr ""
1124
 
1125
- #: classes/controllers/FrmFormsController.php:1182
1126
  msgid "Default Plain"
1127
  msgstr ""
1128
 
1129
- #: classes/controllers/FrmFormsController.php:1271
1130
  msgid "No forms were specified"
1131
  msgstr ""
1132
 
1133
- #: classes/controllers/FrmFormsController.php:1382
1134
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1135
  msgstr ""
1136
 
1137
- #: classes/controllers/FrmFormsController.php:1451
1138
  #: classes/views/frm-forms/list-templates.php:190
1139
  #: classes/views/xml/import_form.php:126
1140
  #: classes/views/styles/manage.php:54
@@ -1146,17 +1168,17 @@ msgstr ""
1146
  msgid "(no title)"
1147
  msgstr ""
1148
 
1149
- #: classes/controllers/FrmFormsController.php:1497
1150
- #: classes/controllers/FrmFormsController.php:1511
1151
  msgid "Please select a valid form"
1152
  msgstr ""
1153
 
1154
- #: classes/controllers/FrmFormsController.php:1743
1155
  msgid "Please wait while you are redirected."
1156
  msgstr ""
1157
 
1158
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
1159
- #: classes/controllers/FrmFormsController.php:1779
1160
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1161
  msgstr ""
1162
 
@@ -1604,24 +1626,23 @@ msgstr ""
1604
  msgid "Advanced Fields"
1605
  msgstr ""
1606
 
1607
- #. translators: %s: Field name
1608
- #: classes/views/frm-forms/add_field_links.php:82
1609
- msgid "%s fields"
1610
  msgstr ""
1611
 
1612
- #: classes/views/frm-forms/add_field_links.php:133
1613
  msgid "Select a field to see the options"
1614
  msgstr ""
1615
 
1616
- #: classes/views/frm-forms/add_field_links.php:147
1617
  msgid "Smart Default Values"
1618
  msgstr ""
1619
 
1620
- #: classes/views/frm-forms/add_field_links.php:155
1621
  msgid "Add Layout Classes"
1622
  msgstr ""
1623
 
1624
- #: classes/views/frm-forms/add_field_links.php:163
1625
  msgid "Input Mask Format"
1626
  msgstr ""
1627
 
@@ -1792,7 +1813,7 @@ msgstr ""
1792
  #: classes/views/addons/list.php:74
1793
  #: classes/views/addons/list.php:75
1794
  #: classes/views/shared/upgrade_overlay.php:27
1795
- #: classes/helpers/FrmAppHelper.php:2270
1796
  msgid "Install"
1797
  msgstr ""
1798
 
@@ -1806,13 +1827,19 @@ msgstr ""
1806
  msgid "Renew Now"
1807
  msgstr ""
1808
 
 
 
 
 
1809
  #: classes/views/shared/confirm-overlay.php:4
1810
  #: classes/views/shared/upgrade_overlay.php:4
 
1811
  #: classes/views/frm-settings/settings_cta.php:5
1812
  msgid "Dismiss this message"
1813
  msgstr ""
1814
 
1815
  #: classes/views/shared/confirm-overlay.php:10
 
1816
  #: classes/helpers/FrmAppHelper.php:2245
1817
  msgid "Are you sure?"
1818
  msgstr ""
@@ -1938,6 +1965,7 @@ msgstr ""
1938
 
1939
  #: classes/views/shared/mb_adv_info.php:108
1940
  #: classes/views/shared/mb_adv_info.php:122
 
1941
  msgid "Select a Field"
1942
  msgstr ""
1943
 
@@ -1949,6 +1977,10 @@ msgstr ""
1949
  msgid "Click to Insert"
1950
  msgstr ""
1951
 
 
 
 
 
1952
  #: classes/views/xml/import_form.php:12
1953
  msgid "Import"
1954
  msgstr ""
@@ -2444,11 +2476,6 @@ msgstr ""
2444
  msgid "Custom HTML:"
2445
  msgstr ""
2446
 
2447
- #: classes/views/frm-fields/back-end/bulk-options-overlay.php:6
2448
- #: classes/views/frm-fields/back-end/field-choices.php:18
2449
- msgid "Bulk Edit Options"
2450
- msgstr ""
2451
-
2452
  #: classes/views/frm-fields/back-end/bulk-options-overlay.php:11
2453
  msgid "Edit or add field options (one per line)"
2454
  msgstr ""
@@ -2642,10 +2669,6 @@ msgstr ""
2642
  msgid "Max Characters"
2643
  msgstr ""
2644
 
2645
- #: classes/views/frm-fields/back-end/field-choices.php:28
2646
- msgid "Add Option"
2647
- msgstr ""
2648
-
2649
  #: classes/views/frm-fields/back-end/field-user-id.php:3
2650
  msgid "User ID fields will not show in your form."
2651
  msgstr ""
@@ -4460,6 +4483,11 @@ msgstr ""
4460
  msgid "Strongly Disagree"
4461
  msgstr ""
4462
 
 
 
 
 
 
4463
  #: classes/helpers/FrmStylesHelper.php:32
4464
  msgid "Edit Styles"
4465
  msgstr ""
@@ -4514,7 +4542,7 @@ msgid "Excerpt View"
4514
  msgstr ""
4515
 
4516
  #: classes/helpers/FrmListHelper.php:257
4517
- #: classes/helpers/FrmAppHelper.php:2272
4518
  msgid "No items found."
4519
  msgstr ""
4520
 
@@ -4695,10 +4723,6 @@ msgstr ""
4695
  msgid "This will permanently delete the form and all its entries. This is irreversible. Are you sure you want to continue?"
4696
  msgstr ""
4697
 
4698
- #: classes/helpers/FrmFormsHelper.php:1118
4699
- msgid "Total"
4700
- msgstr ""
4701
-
4702
  #: classes/helpers/FrmFormsHelper.php:1119
4703
  msgid "Add this to a read-only field to display the text in bold without a border or background."
4704
  msgstr ""
@@ -4755,6 +4779,25 @@ msgstr ""
4755
  msgid "License plan required:"
4756
  msgstr ""
4757
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4758
  #: classes/helpers/FrmCSVExportHelper.php:124
4759
  msgid "(label)"
4760
  msgstr ""
@@ -4792,15 +4835,15 @@ msgid "Parent ID"
4792
  msgstr ""
4793
 
4794
  #: classes/helpers/FrmAppHelper.php:1171
4795
- msgid "View Forms and Templates"
4796
  msgstr ""
4797
 
4798
  #: classes/helpers/FrmAppHelper.php:1172
4799
- msgid "Add/Edit Forms and Templates"
4800
  msgstr ""
4801
 
4802
  #: classes/helpers/FrmAppHelper.php:1173
4803
- msgid "Delete Forms and Templates"
4804
  msgstr ""
4805
 
4806
  #: classes/helpers/FrmAppHelper.php:1174
@@ -5064,269 +5107,283 @@ msgid "This calculation may have shortcodes that work in text calculations but n
5064
  msgstr ""
5065
 
5066
  #: classes/helpers/FrmAppHelper.php:2268
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5067
  msgid "Please enter a Repeat Limit that is greater than 1."
5068
  msgstr ""
5069
 
5070
- #: classes/helpers/FrmAppHelper.php:2269
5071
  msgid "Please select a limit between 0 and 200."
5072
  msgstr ""
5073
 
5074
- #: classes/helpers/FrmAppHelper.php:2299
5075
  msgid "You are running an outdated version of Formidable. This plugin may not work correctly if you do not update Formidable."
5076
  msgstr ""
5077
 
5078
- #: classes/helpers/FrmAppHelper.php:2326
5079
  msgid "You are running a version of Formidable Forms that may not be compatible with your version of Formidable Forms Pro."
5080
  msgstr ""
5081
 
5082
- #: classes/helpers/FrmAppHelper.php:2354
5083
  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+."
5084
  msgstr ""
5085
 
5086
- #: classes/helpers/FrmAppHelper.php:2360
5087
  msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
5088
  msgstr ""
5089
 
5090
- #: classes/helpers/FrmAppHelper.php:2374
5091
  msgid "English"
5092
  msgstr ""
5093
 
5094
- #: classes/helpers/FrmAppHelper.php:2375
5095
  msgid "Afrikaans"
5096
  msgstr ""
5097
 
5098
- #: classes/helpers/FrmAppHelper.php:2376
5099
  msgid "Albanian"
5100
  msgstr ""
5101
 
5102
- #: classes/helpers/FrmAppHelper.php:2377
5103
  msgid "Arabic"
5104
  msgstr ""
5105
 
5106
- #: classes/helpers/FrmAppHelper.php:2378
5107
  msgid "Armenian"
5108
  msgstr ""
5109
 
5110
- #: classes/helpers/FrmAppHelper.php:2379
5111
  msgid "Azerbaijani"
5112
  msgstr ""
5113
 
5114
- #: classes/helpers/FrmAppHelper.php:2380
5115
  msgid "Basque"
5116
  msgstr ""
5117
 
5118
- #: classes/helpers/FrmAppHelper.php:2381
5119
  msgid "Bosnian"
5120
  msgstr ""
5121
 
5122
- #: classes/helpers/FrmAppHelper.php:2382
5123
  msgid "Bulgarian"
5124
  msgstr ""
5125
 
5126
- #: classes/helpers/FrmAppHelper.php:2383
5127
  msgid "Catalan"
5128
  msgstr ""
5129
 
5130
- #: classes/helpers/FrmAppHelper.php:2384
5131
  msgid "Chinese Hong Kong"
5132
  msgstr ""
5133
 
5134
- #: classes/helpers/FrmAppHelper.php:2385
5135
  msgid "Chinese Simplified"
5136
  msgstr ""
5137
 
5138
- #: classes/helpers/FrmAppHelper.php:2386
5139
  msgid "Chinese Traditional"
5140
  msgstr ""
5141
 
5142
- #: classes/helpers/FrmAppHelper.php:2387
5143
  msgid "Croatian"
5144
  msgstr ""
5145
 
5146
- #: classes/helpers/FrmAppHelper.php:2388
5147
  msgid "Czech"
5148
  msgstr ""
5149
 
5150
- #: classes/helpers/FrmAppHelper.php:2389
5151
  msgid "Danish"
5152
  msgstr ""
5153
 
5154
- #: classes/helpers/FrmAppHelper.php:2390
5155
  msgid "Dutch"
5156
  msgstr ""
5157
 
5158
- #: classes/helpers/FrmAppHelper.php:2391
5159
  msgid "English/UK"
5160
  msgstr ""
5161
 
5162
- #: classes/helpers/FrmAppHelper.php:2392
5163
  msgid "Esperanto"
5164
  msgstr ""
5165
 
5166
- #: classes/helpers/FrmAppHelper.php:2393
5167
  msgid "Estonian"
5168
  msgstr ""
5169
 
5170
- #: classes/helpers/FrmAppHelper.php:2394
5171
  msgid "Faroese"
5172
  msgstr ""
5173
 
5174
- #: classes/helpers/FrmAppHelper.php:2395
5175
  msgid "Farsi/Persian"
5176
  msgstr ""
5177
 
5178
- #: classes/helpers/FrmAppHelper.php:2396
5179
  msgid "Filipino"
5180
  msgstr ""
5181
 
5182
- #: classes/helpers/FrmAppHelper.php:2397
5183
  msgid "Finnish"
5184
  msgstr ""
5185
 
5186
- #: classes/helpers/FrmAppHelper.php:2398
5187
  msgid "French"
5188
  msgstr ""
5189
 
5190
- #: classes/helpers/FrmAppHelper.php:2399
5191
  msgid "French/Canadian"
5192
  msgstr ""
5193
 
5194
- #: classes/helpers/FrmAppHelper.php:2400
5195
  msgid "French/Swiss"
5196
  msgstr ""
5197
 
5198
- #: classes/helpers/FrmAppHelper.php:2401
5199
  msgid "German"
5200
  msgstr ""
5201
 
5202
- #: classes/helpers/FrmAppHelper.php:2402
5203
  msgid "German/Austria"
5204
  msgstr ""
5205
 
5206
- #: classes/helpers/FrmAppHelper.php:2403
5207
  msgid "German/Switzerland"
5208
  msgstr ""
5209
 
5210
- #: classes/helpers/FrmAppHelper.php:2404
5211
  msgid "Greek"
5212
  msgstr ""
5213
 
5214
- #: classes/helpers/FrmAppHelper.php:2405
5215
- #: classes/helpers/FrmAppHelper.php:2406
5216
  msgid "Hebrew"
5217
  msgstr ""
5218
 
5219
- #: classes/helpers/FrmAppHelper.php:2407
5220
  msgid "Hindi"
5221
  msgstr ""
5222
 
5223
- #: classes/helpers/FrmAppHelper.php:2408
5224
  msgid "Hungarian"
5225
  msgstr ""
5226
 
5227
- #: classes/helpers/FrmAppHelper.php:2409
5228
  msgid "Icelandic"
5229
  msgstr ""
5230
 
5231
- #: classes/helpers/FrmAppHelper.php:2410
5232
  msgid "Indonesian"
5233
  msgstr ""
5234
 
5235
- #: classes/helpers/FrmAppHelper.php:2411
5236
  msgid "Italian"
5237
  msgstr ""
5238
 
5239
- #: classes/helpers/FrmAppHelper.php:2412
5240
  msgid "Japanese"
5241
  msgstr ""
5242
 
5243
- #: classes/helpers/FrmAppHelper.php:2413
5244
  msgid "Korean"
5245
  msgstr ""
5246
 
5247
- #: classes/helpers/FrmAppHelper.php:2414
5248
  msgid "Latvian"
5249
  msgstr ""
5250
 
5251
- #: classes/helpers/FrmAppHelper.php:2415
5252
  msgid "Lithuanian"
5253
  msgstr ""
5254
 
5255
- #: classes/helpers/FrmAppHelper.php:2416
5256
  msgid "Malaysian"
5257
  msgstr ""
5258
 
5259
- #: classes/helpers/FrmAppHelper.php:2417
5260
  msgid "Norwegian"
5261
  msgstr ""
5262
 
5263
- #: classes/helpers/FrmAppHelper.php:2418
5264
  msgid "Polish"
5265
  msgstr ""
5266
 
5267
- #: classes/helpers/FrmAppHelper.php:2419
5268
  msgid "Portuguese"
5269
  msgstr ""
5270
 
5271
- #: classes/helpers/FrmAppHelper.php:2420
5272
  msgid "Portuguese/Brazilian"
5273
  msgstr ""
5274
 
5275
- #: classes/helpers/FrmAppHelper.php:2421
5276
  msgid "Portuguese/Portugal"
5277
  msgstr ""
5278
 
5279
- #: classes/helpers/FrmAppHelper.php:2422
5280
  msgid "Romanian"
5281
  msgstr ""
5282
 
5283
- #: classes/helpers/FrmAppHelper.php:2423
5284
  msgid "Russian"
5285
  msgstr ""
5286
 
5287
- #: classes/helpers/FrmAppHelper.php:2424
5288
- #: classes/helpers/FrmAppHelper.php:2425
5289
  msgid "Serbian"
5290
  msgstr ""
5291
 
5292
- #: classes/helpers/FrmAppHelper.php:2426
5293
  msgid "Slovak"
5294
  msgstr ""
5295
 
5296
- #: classes/helpers/FrmAppHelper.php:2427
5297
  msgid "Slovenian"
5298
  msgstr ""
5299
 
5300
- #: classes/helpers/FrmAppHelper.php:2428
5301
  msgid "Spanish"
5302
  msgstr ""
5303
 
5304
- #: classes/helpers/FrmAppHelper.php:2429
5305
  msgid "Spanish/Latin America"
5306
  msgstr ""
5307
 
5308
- #: classes/helpers/FrmAppHelper.php:2430
5309
  msgid "Swedish"
5310
  msgstr ""
5311
 
5312
- #: classes/helpers/FrmAppHelper.php:2431
5313
  msgid "Tamil"
5314
  msgstr ""
5315
 
5316
- #: classes/helpers/FrmAppHelper.php:2432
5317
  msgid "Thai"
5318
  msgstr ""
5319
 
5320
- #: classes/helpers/FrmAppHelper.php:2433
5321
- #: classes/helpers/FrmAppHelper.php:2434
5322
  msgid "Turkish"
5323
  msgstr ""
5324
 
5325
- #: classes/helpers/FrmAppHelper.php:2435
5326
  msgid "Ukranian"
5327
  msgstr ""
5328
 
5329
- #: classes/helpers/FrmAppHelper.php:2436
5330
  msgid "Vietnamese"
5331
  msgstr ""
5332
 
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.04\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-02-05T00:10:51+01: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"
241
  msgstr ""
242
 
243
  #: classes/models/FrmField.php:34
244
+ #: classes/controllers/FrmFormsController.php:1166
245
  msgid "Email"
246
  msgstr ""
247
 
266
  msgstr ""
267
 
268
  #: classes/models/FrmField.php:58
269
+ #: classes/controllers/FrmFormsController.php:1161
270
  msgid "User ID"
271
  msgstr ""
272
 
283
  msgstr ""
284
 
285
  #: classes/models/FrmField.php:82
286
+ #: classes/controllers/FrmFormsController.php:734
287
  msgid "Date"
288
  msgstr ""
289
 
367
  msgid "Appointment"
368
  msgstr ""
369
 
370
+ #: classes/models/FrmField.php:179
371
+ msgid "Product"
372
+ msgstr ""
373
+
374
+ #: classes/models/FrmField.php:184
375
+ msgid "Quantity"
376
+ msgstr ""
377
+
378
+ #: classes/models/FrmField.php:189
379
+ #: classes/helpers/FrmFormsHelper.php:1118
380
+ msgid "Total"
381
+ msgstr ""
382
+
383
  #: classes/models/FrmDb.php:430
384
  msgid "Use the query in an array format so it can be properly prepared."
385
  msgstr ""
437
  msgid "The reCAPTCHA was not entered correctly"
438
  msgstr ""
439
 
 
440
  #. translators: %s: Field name
441
+ #. translators: %s: Field type
442
+ #: classes/models/fields/FrmFieldType.php:391
443
+ #: classes/models/fields/FrmFieldType.php:467
444
  msgid "%s Options"
445
  msgstr ""
446
 
447
+ #: classes/models/fields/FrmFieldType.php:407
448
+ #: classes/views/frm-fields/back-end/bulk-options-overlay.php:6
449
+ msgid "Bulk Edit Options"
450
+ msgstr ""
451
+
452
+ #: classes/models/fields/FrmFieldType.php:414
453
+ msgid "Add Option"
454
+ msgstr ""
455
+
456
+ #: classes/models/fields/FrmFieldType.php:567
457
  #: classes/helpers/FrmFieldsHelper.php:294
458
  msgid "This field is invalid"
459
  msgstr ""
460
 
461
  #. translators: %s: The field name.
462
  #. translators: %s: Field name
463
+ #: classes/models/fields/FrmFieldType.php:570
464
  #: classes/helpers/FrmFieldsHelper.php:167
465
  #: classes/helpers/FrmFieldsHelper.php:296
466
  #: classes/helpers/FrmXMLHelper.php:1099
467
  msgid "%s is invalid"
468
  msgstr ""
469
 
470
+ #: classes/models/fields/FrmFieldType.php:577
471
  msgid "Untitled"
472
  msgstr ""
473
 
592
  msgstr ""
593
 
594
  #: classes/controllers/FrmAddonsController.php:484
595
+ #: classes/helpers/FrmAppHelper.php:2278
596
  msgid "Active"
597
  msgstr ""
598
 
625
 
626
  #: classes/controllers/FrmAppController.php:158
627
  #: classes/controllers/FrmXMLController.php:133
628
+ #: classes/controllers/FrmFormsController.php:729
629
  #: classes/controllers/FrmEntriesController.php:8
630
  #: classes/controllers/FrmEntriesController.php:90
631
  #: classes/views/xml/import_form.php:114
661
 
662
  #: classes/controllers/FrmXMLController.php:132
663
  #: classes/controllers/FrmFormsController.php:6
664
+ #: classes/controllers/FrmFormsController.php:739
665
  #: classes/views/frm-forms/list.php:5
666
  msgid "Forms"
667
  msgstr ""
732
  #: classes/controllers/FrmSettingsController.php:237
733
  #: classes/views/frm-forms/_publish_box.php:9
734
  #: classes/views/frm-forms/edit.php:23
735
+ #: classes/views/frm-forms/add_field_links.php:159
736
  #: classes/views/styles/header-buttons.php:7
737
  #: classes/views/styles/manage.php:84
738
  #: classes/helpers/FrmStylesHelper.php:70
839
  msgstr ""
840
 
841
  #: classes/controllers/FrmStylesController.php:389
842
+ #: classes/controllers/FrmFormsController.php:953
843
  msgid "General"
844
  msgstr ""
845
 
846
  #: classes/controllers/FrmStylesController.php:390
847
+ #: classes/controllers/FrmFormsController.php:728
848
  #: classes/views/frm-forms/settings-advanced.php:8
849
  #: classes/views/xml/import_form.php:111
850
  #: classes/views/styles/_sample_form.php:14
894
  msgid "Once Weekly"
895
  msgstr ""
896
 
897
+ #: classes/controllers/FrmFormsController.php:135
898
  msgid "Settings Successfully Updated"
899
  msgstr ""
900
 
901
+ #: classes/controllers/FrmFormsController.php:162
902
+ #: classes/controllers/FrmFormsController.php:887
903
  msgid "Form was successfully updated."
904
  msgstr ""
905
 
906
  #. translators: %1$s: Start link HTML, %2$s: end link HTML
907
+ #: classes/controllers/FrmFormsController.php:167
908
  msgid "However, your form is very long and may be %1$sreaching server limits%2$s."
909
  msgstr ""
910
 
911
+ #: classes/controllers/FrmFormsController.php:221
912
  #: deprecated/FrmDeprecated.php:400
913
  msgid "Form template was Successfully Created"
914
  msgstr ""
915
 
916
+ #: classes/controllers/FrmFormsController.php:221
917
  msgid "Form was Successfully Copied"
918
  msgstr ""
919
 
920
+ #: classes/controllers/FrmFormsController.php:225
921
  msgid "There was a problem creating the new template."
922
  msgstr ""
923
 
924
+ #: classes/controllers/FrmFormsController.php:333
925
  msgid "Form Preview"
926
  msgstr ""
927
 
928
  #. translators: %1$s: Number of forms
929
+ #: classes/controllers/FrmFormsController.php:378
930
+ #: classes/controllers/FrmFormsController.php:439
931
  msgid "%1$s form restored from the Trash."
932
  msgid_plural "%1$s forms restored from the Trash."
933
  msgstr[0] ""
934
 
935
  #. translators: %1$s: Number of forms, %2$s: Start link HTML, %3$s: End link HTML
936
+ #: classes/controllers/FrmFormsController.php:442
937
+ #: classes/controllers/FrmFormsController.php:467
938
  msgid "%1$s form moved to the Trash. %2$sUndo%3$s"
939
  msgid_plural "%1$s forms moved to the Trash. %2$sUndo%3$s"
940
  msgstr[0] ""
941
 
942
  #. translators: %1$s: Number of forms
943
+ #: classes/controllers/FrmFormsController.php:490
944
  msgid "%1$s Form Permanently Deleted"
945
  msgid_plural "%1$s Forms Permanently Deleted"
946
  msgstr[0] ""
947
 
948
  #. translators: %1$s: Number of forms
949
+ #: classes/controllers/FrmFormsController.php:507
950
+ #: classes/controllers/FrmFormsController.php:524
951
  msgid "%1$s form permanently deleted."
952
  msgid_plural "%1$s forms permanently deleted."
953
  msgstr[0] ""
954
 
955
+ #: classes/controllers/FrmFormsController.php:570
956
  msgid "There was an error creating a template."
957
  msgstr ""
958
 
959
+ #: classes/controllers/FrmFormsController.php:614
960
  msgid "Add forms and content"
961
  msgstr ""
962
 
963
+ #: classes/controllers/FrmFormsController.php:630
964
  #: classes/controllers/FrmEntriesController.php:74
965
  #: classes/views/xml/import_form.php:145
966
  #: classes/widgets/FrmShowForm.php:56
967
  msgid "Form"
968
  msgstr ""
969
 
970
+ #: classes/controllers/FrmFormsController.php:631
971
  #: classes/views/frm-forms/insert_form_popup.php:28
972
  msgid "Insert a Form"
973
  msgstr ""
974
 
975
+ #: classes/controllers/FrmFormsController.php:660
976
  msgid "Display form title"
977
  msgstr ""
978
 
979
+ #: classes/controllers/FrmFormsController.php:664
980
  msgid "Display form description"
981
  msgstr ""
982
 
983
+ #: classes/controllers/FrmFormsController.php:668
984
  msgid "Minimize form HTML"
985
  msgstr ""
986
 
987
+ #: classes/controllers/FrmFormsController.php:724
988
  #: classes/views/frm-forms/new-form-overlay.php:9
989
  msgid "Template Name"
990
  msgstr ""
991
 
992
+ #: classes/controllers/FrmFormsController.php:725
993
  #: classes/views/xml/import_form.php:113
994
  msgid "Type"
995
  msgstr ""
996
 
997
+ #: classes/controllers/FrmFormsController.php:726
998
+ #: classes/controllers/FrmFormsController.php:730
999
  #: classes/views/shared/mb_adv_info.php:93
1000
  #: classes/helpers/FrmCSVExportHelper.php:155
1001
  msgid "Key"
1002
  msgstr ""
1003
 
1004
+ #: classes/controllers/FrmFormsController.php:731
1005
  msgid "Shortcodes"
1006
  msgstr ""
1007
 
1008
+ #: classes/controllers/FrmFormsController.php:861
1009
  msgid "You are trying to edit a form that does not exist."
1010
  msgstr ""
1011
 
1012
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
1013
+ #: classes/controllers/FrmFormsController.php:866
1014
  msgid "You are trying to edit a child form. Please edit from %1$shere%2$s"
1015
  msgstr ""
1016
 
1017
+ #: classes/controllers/FrmFormsController.php:889
1018
  msgid "Template was successfully updated."
1019
  msgstr ""
1020
 
1021
+ #: classes/controllers/FrmFormsController.php:954
1022
  msgid "General Form Settings"
1023
  msgstr ""
1024
 
1025
+ #: classes/controllers/FrmFormsController.php:959
1026
  msgid "Actions & Notifications"
1027
  msgstr ""
1028
 
1029
+ #: classes/controllers/FrmFormsController.php:965
1030
+ #: classes/controllers/FrmFormsController.php:970
1031
  msgid "Form Permissions"
1032
  msgstr ""
1033
 
1034
+ #: classes/controllers/FrmFormsController.php:974
1035
  msgid "Form Scheduling"
1036
  msgstr ""
1037
 
1038
+ #: classes/controllers/FrmFormsController.php:979
1039
  msgid "Form scheduling settings"
1040
  msgstr ""
1041
 
1042
+ #: classes/controllers/FrmFormsController.php:983
1043
  msgid "Styling & Buttons"
1044
  msgstr ""
1045
 
1046
+ #: classes/controllers/FrmFormsController.php:989
1047
  msgid "Customize HTML"
1048
  msgstr ""
1049
 
1050
+ #: classes/controllers/FrmFormsController.php:1098
1051
  msgid "Customize field values with the following parameters."
1052
  msgstr ""
1053
 
1054
+ #: classes/controllers/FrmFormsController.php:1135
1055
  msgid "Separator"
1056
  msgstr ""
1057
 
1058
+ #: classes/controllers/FrmFormsController.php:1136
1059
  msgid "Use a different separator for checkbox fields"
1060
  msgstr ""
1061
 
1062
+ #: classes/controllers/FrmFormsController.php:1139
1063
  msgid "Date Format"
1064
  msgstr ""
1065
 
1066
+ #: classes/controllers/FrmFormsController.php:1142
1067
  #: classes/views/frm-fields/back-end/settings.php:22
1068
  msgid "Field Label"
1069
  msgstr ""
1070
 
1071
+ #: classes/controllers/FrmFormsController.php:1145
1072
  msgid "No Auto P"
1073
  msgstr ""
1074
 
1075
+ #: classes/controllers/FrmFormsController.php:1146
1076
  msgid "Do not automatically add any paragraphs or line breaks"
1077
  msgstr ""
1078
 
1079
+ #: classes/controllers/FrmFormsController.php:1162
1080
  msgid "First Name"
1081
  msgstr ""
1082
 
1083
+ #: classes/controllers/FrmFormsController.php:1163
1084
  msgid "Last Name"
1085
  msgstr ""
1086
 
1087
+ #: classes/controllers/FrmFormsController.php:1164
1088
  msgid "Display Name"
1089
  msgstr ""
1090
 
1091
+ #: classes/controllers/FrmFormsController.php:1165
1092
  msgid "User Login"
1093
  msgstr ""
1094
 
1095
+ #: classes/controllers/FrmFormsController.php:1167
1096
  msgid "Avatar"
1097
  msgstr ""
1098
 
1099
+ #: classes/controllers/FrmFormsController.php:1168
1100
  msgid "Author Link"
1101
  msgstr ""
1102
 
1103
+ #: classes/controllers/FrmFormsController.php:1181
1104
  #: classes/views/frm-entries/sidebar-shared.php:46
1105
  msgid "Entry ID"
1106
  msgstr ""
1107
 
1108
+ #: classes/controllers/FrmFormsController.php:1182
1109
  #: classes/controllers/FrmEntriesController.php:69
1110
  #: classes/views/frm-entries/sidebar-shared.php:52
1111
  #: classes/views/frm-entries/form.php:52
1112
  msgid "Entry Key"
1113
  msgstr ""
1114
 
1115
+ #: classes/controllers/FrmFormsController.php:1183
1116
  msgid "Post ID"
1117
  msgstr ""
1118
 
1119
+ #: classes/controllers/FrmFormsController.php:1184
1120
  msgid "User IP"
1121
  msgstr ""
1122
 
1123
+ #: classes/controllers/FrmFormsController.php:1185
1124
  msgid "Entry created"
1125
  msgstr ""
1126
 
1127
+ #: classes/controllers/FrmFormsController.php:1186
1128
  msgid "Entry updated"
1129
  msgstr ""
1130
 
1131
+ #: classes/controllers/FrmFormsController.php:1188
1132
  msgid "Site URL"
1133
  msgstr ""
1134
 
1135
+ #: classes/controllers/FrmFormsController.php:1189
1136
  msgid "Site Name"
1137
  msgstr ""
1138
 
1139
+ #: classes/controllers/FrmFormsController.php:1197
1140
  msgid "Default Msg"
1141
  msgstr ""
1142
 
1143
+ #: classes/controllers/FrmFormsController.php:1198
1144
  msgid "Default HTML"
1145
  msgstr ""
1146
 
1147
+ #: classes/controllers/FrmFormsController.php:1199
1148
  msgid "Default Plain"
1149
  msgstr ""
1150
 
1151
+ #: classes/controllers/FrmFormsController.php:1288
1152
  msgid "No forms were specified"
1153
  msgstr ""
1154
 
1155
+ #: classes/controllers/FrmFormsController.php:1399
1156
  msgid "Abnormal HTML characters prevented your form from saving correctly"
1157
  msgstr ""
1158
 
1159
+ #: classes/controllers/FrmFormsController.php:1468
1160
  #: classes/views/frm-forms/list-templates.php:190
1161
  #: classes/views/xml/import_form.php:126
1162
  #: classes/views/styles/manage.php:54
1168
  msgid "(no title)"
1169
  msgstr ""
1170
 
1171
+ #: classes/controllers/FrmFormsController.php:1514
1172
+ #: classes/controllers/FrmFormsController.php:1528
1173
  msgid "Please select a valid form"
1174
  msgstr ""
1175
 
1176
+ #: classes/controllers/FrmFormsController.php:1760
1177
  msgid "Please wait while you are redirected."
1178
  msgstr ""
1179
 
1180
  #. translators: %1$s: Start link HTML, %2$s: End link HTML
1181
+ #: classes/controllers/FrmFormsController.php:1796
1182
  msgid "%1$sClick here%2$s if you are not automatically redirected."
1183
  msgstr ""
1184
 
1626
  msgid "Advanced Fields"
1627
  msgstr ""
1628
 
1629
+ #: classes/views/frm-forms/add_field_links.php:98
1630
+ msgid "Pricing Fields"
 
1631
  msgstr ""
1632
 
1633
+ #: classes/views/frm-forms/add_field_links.php:117
1634
  msgid "Select a field to see the options"
1635
  msgstr ""
1636
 
1637
+ #: classes/views/frm-forms/add_field_links.php:131
1638
  msgid "Smart Default Values"
1639
  msgstr ""
1640
 
1641
+ #: classes/views/frm-forms/add_field_links.php:139
1642
  msgid "Add Layout Classes"
1643
  msgstr ""
1644
 
1645
+ #: classes/views/frm-forms/add_field_links.php:147
1646
  msgid "Input Mask Format"
1647
  msgstr ""
1648
 
1813
  #: classes/views/addons/list.php:74
1814
  #: classes/views/addons/list.php:75
1815
  #: classes/views/shared/upgrade_overlay.php:27
1816
+ #: classes/helpers/FrmAppHelper.php:2277
1817
  msgid "Install"
1818
  msgstr ""
1819
 
1827
  msgid "Renew Now"
1828
  msgstr ""
1829
 
1830
+ #: classes/views/shared/errors.php:15
1831
+ msgid "Warning:"
1832
+ msgstr ""
1833
+
1834
  #: classes/views/shared/confirm-overlay.php:4
1835
  #: classes/views/shared/upgrade_overlay.php:4
1836
+ #: classes/views/shared/info-overlay.php:4
1837
  #: classes/views/frm-settings/settings_cta.php:5
1838
  msgid "Dismiss this message"
1839
  msgstr ""
1840
 
1841
  #: classes/views/shared/confirm-overlay.php:10
1842
+ #: classes/views/shared/info-overlay.php:10
1843
  #: classes/helpers/FrmAppHelper.php:2245
1844
  msgid "Are you sure?"
1845
  msgstr ""
1965
 
1966
  #: classes/views/shared/mb_adv_info.php:108
1967
  #: classes/views/shared/mb_adv_info.php:122
1968
+ #: classes/helpers/FrmAppHelper.php:2279
1969
  msgid "Select a Field"
1970
  msgstr ""
1971
 
1977
  msgid "Click to Insert"
1978
  msgstr ""
1979
 
1980
+ #: classes/views/shared/info-overlay.php:14
1981
+ msgid "Got it!"
1982
+ msgstr ""
1983
+
1984
  #: classes/views/xml/import_form.php:12
1985
  msgid "Import"
1986
  msgstr ""
2476
  msgid "Custom HTML:"
2477
  msgstr ""
2478
 
 
 
 
 
 
2479
  #: classes/views/frm-fields/back-end/bulk-options-overlay.php:11
2480
  msgid "Edit or add field options (one per line)"
2481
  msgstr ""
2669
  msgid "Max Characters"
2670
  msgstr ""
2671
 
 
 
 
 
2672
  #: classes/views/frm-fields/back-end/field-user-id.php:3
2673
  msgid "User ID fields will not show in your form."
2674
  msgstr ""
4483
  msgid "Strongly Disagree"
4484
  msgstr ""
4485
 
4486
+ #. translators: %s: Field name
4487
+ #: classes/helpers/FrmFieldsHelper.php:1717
4488
+ msgid "%s fields"
4489
+ msgstr ""
4490
+
4491
  #: classes/helpers/FrmStylesHelper.php:32
4492
  msgid "Edit Styles"
4493
  msgstr ""
4542
  msgstr ""
4543
 
4544
  #: classes/helpers/FrmListHelper.php:257
4545
+ #: classes/helpers/FrmAppHelper.php:2280
4546
  msgid "No items found."
4547
  msgstr ""
4548
 
4723
  msgid "This will permanently delete the form and all its entries. This is irreversible. Are you sure you want to continue?"
4724
  msgstr ""
4725
 
 
 
 
 
4726
  #: classes/helpers/FrmFormsHelper.php:1119
4727
  msgid "Add this to a read-only field to display the text in bold without a border or background."
4728
  msgstr ""
4779
  msgid "License plan required:"
4780
  msgstr ""
4781
 
4782
+ #: classes/helpers/FrmFormsHelper.php:1441
4783
+ msgid "Is this intentional?"
4784
+ msgstr ""
4785
+
4786
+ #: classes/helpers/FrmFormsHelper.php:1442
4787
+ #: classes/helpers/FrmAppHelper.php:2274
4788
+ msgid "See the list of reserved words in WordPress."
4789
+ msgstr ""
4790
+
4791
+ #. translators: %s: the name of a single parameter in the redirect URL
4792
+ #: classes/helpers/FrmFormsHelper.php:1451
4793
+ msgid "The redirect URL is using the parameter \"%s\", which is reserved by WordPress. "
4794
+ msgstr ""
4795
+
4796
+ #. translators: %s: the names of two or more parameters in the redirect URL, separated by commas
4797
+ #: classes/helpers/FrmFormsHelper.php:1457
4798
+ msgid "The redirect URL is using the parameters \"%s\", which are reserved by WordPress. "
4799
+ msgstr ""
4800
+
4801
  #: classes/helpers/FrmCSVExportHelper.php:124
4802
  msgid "(label)"
4803
  msgstr ""
4835
  msgstr ""
4836
 
4837
  #: classes/helpers/FrmAppHelper.php:1171
4838
+ msgid "View Forms"
4839
  msgstr ""
4840
 
4841
  #: classes/helpers/FrmAppHelper.php:1172
4842
+ msgid "Add and Edit Forms"
4843
  msgstr ""
4844
 
4845
  #: classes/helpers/FrmAppHelper.php:1173
4846
+ msgid "Delete Forms"
4847
  msgstr ""
4848
 
4849
  #: classes/helpers/FrmAppHelper.php:1174
5107
  msgstr ""
5108
 
5109
  #: classes/helpers/FrmAppHelper.php:2268
5110
+ msgid "This form action is limited to one per form. Please edit the existing form action."
5111
+ msgstr ""
5112
+
5113
+ #. Translators: %s is the name of a Detail Page Slug that is a reserved word.
5114
+ #: classes/helpers/FrmAppHelper.php:2271
5115
+ msgid "The Detail Page Slug \"%s\" is reserved by WordPress. This may cause problems. Is this intentional?"
5116
+ msgstr ""
5117
+
5118
+ #. 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.
5119
+ #: classes/helpers/FrmAppHelper.php:2273
5120
+ msgid "The parameter \"%s\" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? "
5121
+ msgstr ""
5122
+
5123
+ #: classes/helpers/FrmAppHelper.php:2275
5124
  msgid "Please enter a Repeat Limit that is greater than 1."
5125
  msgstr ""
5126
 
5127
+ #: classes/helpers/FrmAppHelper.php:2276
5128
  msgid "Please select a limit between 0 and 200."
5129
  msgstr ""
5130
 
5131
+ #: classes/helpers/FrmAppHelper.php:2307
5132
  msgid "You are running an outdated version of Formidable. This plugin may not work correctly if you do not update Formidable."
5133
  msgstr ""
5134
 
5135
+ #: classes/helpers/FrmAppHelper.php:2334
5136
  msgid "You are running a version of Formidable Forms that may not be compatible with your version of Formidable Forms Pro."
5137
  msgstr ""
5138
 
5139
+ #: classes/helpers/FrmAppHelper.php:2362
5140
  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+."
5141
  msgstr ""
5142
 
5143
+ #: classes/helpers/FrmAppHelper.php:2368
5144
  msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
5145
  msgstr ""
5146
 
5147
+ #: classes/helpers/FrmAppHelper.php:2382
5148
  msgid "English"
5149
  msgstr ""
5150
 
5151
+ #: classes/helpers/FrmAppHelper.php:2383
5152
  msgid "Afrikaans"
5153
  msgstr ""
5154
 
5155
+ #: classes/helpers/FrmAppHelper.php:2384
5156
  msgid "Albanian"
5157
  msgstr ""
5158
 
5159
+ #: classes/helpers/FrmAppHelper.php:2385
5160
  msgid "Arabic"
5161
  msgstr ""
5162
 
5163
+ #: classes/helpers/FrmAppHelper.php:2386
5164
  msgid "Armenian"
5165
  msgstr ""
5166
 
5167
+ #: classes/helpers/FrmAppHelper.php:2387
5168
  msgid "Azerbaijani"
5169
  msgstr ""
5170
 
5171
+ #: classes/helpers/FrmAppHelper.php:2388
5172
  msgid "Basque"
5173
  msgstr ""
5174
 
5175
+ #: classes/helpers/FrmAppHelper.php:2389
5176
  msgid "Bosnian"
5177
  msgstr ""
5178
 
5179
+ #: classes/helpers/FrmAppHelper.php:2390
5180
  msgid "Bulgarian"
5181
  msgstr ""
5182
 
5183
+ #: classes/helpers/FrmAppHelper.php:2391
5184
  msgid "Catalan"
5185
  msgstr ""
5186
 
5187
+ #: classes/helpers/FrmAppHelper.php:2392
5188
  msgid "Chinese Hong Kong"
5189
  msgstr ""
5190
 
5191
+ #: classes/helpers/FrmAppHelper.php:2393
5192
  msgid "Chinese Simplified"
5193
  msgstr ""
5194
 
5195
+ #: classes/helpers/FrmAppHelper.php:2394
5196
  msgid "Chinese Traditional"
5197
  msgstr ""
5198
 
5199
+ #: classes/helpers/FrmAppHelper.php:2395
5200
  msgid "Croatian"
5201
  msgstr ""
5202
 
5203
+ #: classes/helpers/FrmAppHelper.php:2396
5204
  msgid "Czech"
5205
  msgstr ""
5206
 
5207
+ #: classes/helpers/FrmAppHelper.php:2397
5208
  msgid "Danish"
5209
  msgstr ""
5210
 
5211
+ #: classes/helpers/FrmAppHelper.php:2398
5212
  msgid "Dutch"
5213
  msgstr ""
5214
 
5215
+ #: classes/helpers/FrmAppHelper.php:2399
5216
  msgid "English/UK"
5217
  msgstr ""
5218
 
5219
+ #: classes/helpers/FrmAppHelper.php:2400
5220
  msgid "Esperanto"
5221
  msgstr ""
5222
 
5223
+ #: classes/helpers/FrmAppHelper.php:2401
5224
  msgid "Estonian"
5225
  msgstr ""
5226
 
5227
+ #: classes/helpers/FrmAppHelper.php:2402
5228
  msgid "Faroese"
5229
  msgstr ""
5230
 
5231
+ #: classes/helpers/FrmAppHelper.php:2403
5232
  msgid "Farsi/Persian"
5233
  msgstr ""
5234
 
5235
+ #: classes/helpers/FrmAppHelper.php:2404
5236
  msgid "Filipino"
5237
  msgstr ""
5238
 
5239
+ #: classes/helpers/FrmAppHelper.php:2405
5240
  msgid "Finnish"
5241
  msgstr ""
5242
 
5243
+ #: classes/helpers/FrmAppHelper.php:2406
5244
  msgid "French"
5245
  msgstr ""
5246
 
5247
+ #: classes/helpers/FrmAppHelper.php:2407
5248
  msgid "French/Canadian"
5249
  msgstr ""
5250
 
5251
+ #: classes/helpers/FrmAppHelper.php:2408
5252
  msgid "French/Swiss"
5253
  msgstr ""
5254
 
5255
+ #: classes/helpers/FrmAppHelper.php:2409
5256
  msgid "German"
5257
  msgstr ""
5258
 
5259
+ #: classes/helpers/FrmAppHelper.php:2410
5260
  msgid "German/Austria"
5261
  msgstr ""
5262
 
5263
+ #: classes/helpers/FrmAppHelper.php:2411
5264
  msgid "German/Switzerland"
5265
  msgstr ""
5266
 
5267
+ #: classes/helpers/FrmAppHelper.php:2412
5268
  msgid "Greek"
5269
  msgstr ""
5270
 
5271
+ #: classes/helpers/FrmAppHelper.php:2413
5272
+ #: classes/helpers/FrmAppHelper.php:2414
5273
  msgid "Hebrew"
5274
  msgstr ""
5275
 
5276
+ #: classes/helpers/FrmAppHelper.php:2415
5277
  msgid "Hindi"
5278
  msgstr ""
5279
 
5280
+ #: classes/helpers/FrmAppHelper.php:2416
5281
  msgid "Hungarian"
5282
  msgstr ""
5283
 
5284
+ #: classes/helpers/FrmAppHelper.php:2417
5285
  msgid "Icelandic"
5286
  msgstr ""
5287
 
5288
+ #: classes/helpers/FrmAppHelper.php:2418
5289
  msgid "Indonesian"
5290
  msgstr ""
5291
 
5292
+ #: classes/helpers/FrmAppHelper.php:2419
5293
  msgid "Italian"
5294
  msgstr ""
5295
 
5296
+ #: classes/helpers/FrmAppHelper.php:2420
5297
  msgid "Japanese"
5298
  msgstr ""
5299
 
5300
+ #: classes/helpers/FrmAppHelper.php:2421
5301
  msgid "Korean"
5302
  msgstr ""
5303
 
5304
+ #: classes/helpers/FrmAppHelper.php:2422
5305
  msgid "Latvian"
5306
  msgstr ""
5307
 
5308
+ #: classes/helpers/FrmAppHelper.php:2423
5309
  msgid "Lithuanian"
5310
  msgstr ""
5311
 
5312
+ #: classes/helpers/FrmAppHelper.php:2424
5313
  msgid "Malaysian"
5314
  msgstr ""
5315
 
5316
+ #: classes/helpers/FrmAppHelper.php:2425
5317
  msgid "Norwegian"
5318
  msgstr ""
5319
 
5320
+ #: classes/helpers/FrmAppHelper.php:2426
5321
  msgid "Polish"
5322
  msgstr ""
5323
 
5324
+ #: classes/helpers/FrmAppHelper.php:2427
5325
  msgid "Portuguese"
5326
  msgstr ""
5327
 
5328
+ #: classes/helpers/FrmAppHelper.php:2428
5329
  msgid "Portuguese/Brazilian"
5330
  msgstr ""
5331
 
5332
+ #: classes/helpers/FrmAppHelper.php:2429
5333
  msgid "Portuguese/Portugal"
5334
  msgstr ""
5335
 
5336
+ #: classes/helpers/FrmAppHelper.php:2430
5337
  msgid "Romanian"
5338
  msgstr ""
5339
 
5340
+ #: classes/helpers/FrmAppHelper.php:2431
5341
  msgid "Russian"
5342
  msgstr ""
5343
 
5344
+ #: classes/helpers/FrmAppHelper.php:2432
5345
+ #: classes/helpers/FrmAppHelper.php:2433
5346
  msgid "Serbian"
5347
  msgstr ""
5348
 
5349
+ #: classes/helpers/FrmAppHelper.php:2434
5350
  msgid "Slovak"
5351
  msgstr ""
5352
 
5353
+ #: classes/helpers/FrmAppHelper.php:2435
5354
  msgid "Slovenian"
5355
  msgstr ""
5356
 
5357
+ #: classes/helpers/FrmAppHelper.php:2436
5358
  msgid "Spanish"
5359
  msgstr ""
5360
 
5361
+ #: classes/helpers/FrmAppHelper.php:2437
5362
  msgid "Spanish/Latin America"
5363
  msgstr ""
5364
 
5365
+ #: classes/helpers/FrmAppHelper.php:2438
5366
  msgid "Swedish"
5367
  msgstr ""
5368
 
5369
+ #: classes/helpers/FrmAppHelper.php:2439
5370
  msgid "Tamil"
5371
  msgstr ""
5372
 
5373
+ #: classes/helpers/FrmAppHelper.php:2440
5374
  msgid "Thai"
5375
  msgstr ""
5376
 
5377
+ #: classes/helpers/FrmAppHelper.php:2441
5378
+ #: classes/helpers/FrmAppHelper.php:2442
5379
  msgid "Turkish"
5380
  msgstr ""
5381
 
5382
+ #: classes/helpers/FrmAppHelper.php:2443
5383
  msgid "Ukranian"
5384
  msgstr ""
5385
 
5386
+ #: classes/helpers/FrmAppHelper.php:2444
5387
  msgid "Vietnamese"
5388
  msgstr ""
5389
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: forms, contact form, form builder, survey, form maker, form, form creator
5
  Requires at least: 4.6
6
  Tested up to: 5.3.2
7
  Requires PHP: 5.6
8
- Stable tag: 4.03.07
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quiz forms, and more.
11
 
@@ -113,21 +113,21 @@ Our customers use Formidable Views to create data-driven web applications like r
113
 
114
  As you can see, Formidable is not your average contact form plugin. It's a true all-in-one WordPress form solution.
115
 
116
- = Increase Your Sales with WooCommerce Product Forms =
117
 
118
- Formidable is the only WordPress form builder plugin that offers extensive integration with WooCommerce.
119
 
120
- Our goal is to empower you to build powerful WooCommerce product forms, so you can increase your store sales.
121
 
122
- You can use Formidable to add a WooCommerce Product configurator with custom calculation fields, and automatically send the data to the WooCommerce cart with variable pricing options.
123
 
124
- Need your customers to upload a file when they purchase a product? No problem. Simply drag & drop a file upload field into your WooCommerce form and you're done.
125
 
126
  You can even show submitted form values in the WooCommerce purchase receipt emails as well as trigger SMS text messages or marketing integrations when an order is completed.
127
 
128
  = Make Powerful Quiz Forms & Calculators =
129
 
130
- You can also use Formidable to create quiz forms and calculator forms.
131
 
132
  More on quiz forms later, but here are some example web calculators you can quickly add to your WordPress site:
133
 
@@ -200,6 +200,7 @@ Since Formidable is not your average WordPress form plugin, this feature list is
200
  * <a href="https://formidableforms.com/features/conditional-logic-wordpress-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Conditional logic for smart forms</a>. Show or hide form fields based on user selections or user roles. Make complex forms simple and increase form conversion rates.
201
  * <a href="https://formidableforms.com/features/email-autoresponders-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Send email notifications & autoresponders</a>. Automatically let clients know you received their message. Then create customized email notifications for multiple recipients and get info from an email form to those who need it.
202
  * Email routing: Conditionally send multiple autoresponder emails and notifications based on values in email forms, payment forms, and registration forms.
 
203
  * <a href="https://formidableforms.com/features/wordpress-calculated-fields-form/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Calculator forms</a>. Create basic and complex calculations, and even combine text from multiple fields for a mortgage calculator, auto loan calculator, or many other calculator forms. Even a contact form could benefit from calculations for easy quotes and price estimates.
204
  * <a href="https://formidableforms.com/features/wordpress-visual-form-styler/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Visual form style creator</a>. Our form creator for email forms, calculators, and other online forms not only allows you to build forms, but also create branded forms that match your site. Change colors, borders, padding and much more without any code.
205
  * <a href="https://formidableforms.com/features/flexible-layouts-responsive-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Flexible form layout design</a>. Build mobile responsive forms and advanced form layouts with multiple fields in a row by using our CSS layout classes.
@@ -234,8 +235,8 @@ In addition to all the features listed above, power up your forms with these int
234
  * <a href="https://formidableforms.com/features/paypal-wordpress-payments/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">PayPal Payment Forms</a>. Automate your business by collecting instant payments and recurring payments from clients. Collect information, calculate a total, and send clients to PayPal from your payment forms.
235
  * <a href="https://formidableforms.com/features/stripe-payments-for-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Stripe Payment Forms</a>. Keep users on your site while collecting payments from a credit card form. Select from one time and recurring charges in order forms and donation forms.
236
  * <a href="https://formidableforms.com/features/authorize-net-payments/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Authorize.net AIM Payment Forms</a>. Process one-time payments in order forms, registration forms, and calculator forms with Authorize.net AIM.
237
- * <a href="https://formidableforms.com/features/customizable-woocommerce-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">WooCommerce product configurator</a>. Add custom fields to a WooCommerce product form and collect extra data when a product is added to the cart. Use form calculations for variable pricing, upload a file with the purchase, and send custom emails when a purchase is completed.
238
- * <a href="https://formidableforms.com/features/mailchimp-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">MailChimp Forms</a>. Add and update leads in a MailChimp email marketing list from lead forms, order forms, and email forms.
239
  * <a href="https://formidableforms.com/features/entries-to-constant-contact/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Constant Contact Forms</a>. Create leads automatically in Constant Contact with newsletter signup forms.
240
  * <a href="https://formidableforms.com/features/form-entries-to-getresponse/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">GetResponse Forms</a>. Collect leads in WordPress forms, add them to GetResponse, and trigger GetResponse marketing automations.
241
  * <a href="https://formidableforms.com/features/aweber-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">AWeber Forms</a>. Subscribe users to an AWeber mailing list when a newsletter signup form is submitted.
@@ -356,14 +357,14 @@ The Formidable drag & drop form builder combined with our add-ons is the most po
356
  To get access to more features, integrations, and support, <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">upgrade to Formidable Forms Pro</a>. A Pro license gives you access to the full version of Formidable Forms for more advanced forms, Formidable Views, graphs and stats, priority support, and Formidable Add-ons!
357
 
358
  == Changelog ==
 
 
 
 
 
359
  = 4.03.07 =
360
  * Project Delight: Make admin-side tooltips more enjoyable and helpful.
361
  * Add several missing countries to the country list.
362
  * Fix: Prevent duplicate localization strings from showing in the page source.
363
 
364
- = 4.03.06 =
365
- * New: Use autocomplete for settings for selecting a WordPress page for faster load time on sites with many pages.
366
- * Fix: When saving conditional logic settings in WP 5.3.1, there was a PHP error message showing on some sites.
367
- * Fix: Custom CSS was being sanitized incorrectly and > was switched to &rt;
368
-
369
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>
5
  Requires at least: 4.6
6
  Tested up to: 5.3.2
7
  Requires PHP: 5.6
8
+ Stable tag: 4.04
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quiz forms, and more.
11
 
113
 
114
  As you can see, Formidable is not your average contact form plugin. It's a true all-in-one WordPress form solution.
115
 
116
+ = Increase Your Sales with WooCommerce Product Order Forms =
117
 
118
+ Formidable is the only WordPress form builder plugin that offers extensive integration with WooCommerce orders.
119
 
120
+ Our goal is to empower you to build powerful WooCommerce product order forms, so you can increase your store sales.
121
 
122
+ You can use Formidable to add a WooCommerce product configurator with custom calculation fields. Then automatically send the order info to the WooCommerce cart with variable pricing options.
123
 
124
+ Need your customers to upload a file when they purchase a product? No problem. Simply drag & drop a file upload field into your linked up WooCommerce order form and you're done.
125
 
126
  You can even show submitted form values in the WooCommerce purchase receipt emails as well as trigger SMS text messages or marketing integrations when an order is completed.
127
 
128
  = Make Powerful Quiz Forms & Calculators =
129
 
130
+ In addition to simple order forms, you can also use Formidable to create quiz forms and calculator forms.
131
 
132
  More on quiz forms later, but here are some example web calculators you can quickly add to your WordPress site:
133
 
200
  * <a href="https://formidableforms.com/features/conditional-logic-wordpress-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Conditional logic for smart forms</a>. Show or hide form fields based on user selections or user roles. Make complex forms simple and increase form conversion rates.
201
  * <a href="https://formidableforms.com/features/email-autoresponders-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Send email notifications & autoresponders</a>. Automatically let clients know you received their message. Then create customized email notifications for multiple recipients and get info from an email form to those who need it.
202
  * Email routing: Conditionally send multiple autoresponder emails and notifications based on values in email forms, payment forms, and registration forms.
203
+ * Pricing fields for easy eCommerce forms with automatic calculations. Drop in a product field, quantity, and total and you're good to go.
204
  * <a href="https://formidableforms.com/features/wordpress-calculated-fields-form/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Calculator forms</a>. Create basic and complex calculations, and even combine text from multiple fields for a mortgage calculator, auto loan calculator, or many other calculator forms. Even a contact form could benefit from calculations for easy quotes and price estimates.
205
  * <a href="https://formidableforms.com/features/wordpress-visual-form-styler/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Visual form style creator</a>. Our form creator for email forms, calculators, and other online forms not only allows you to build forms, but also create branded forms that match your site. Change colors, borders, padding and much more without any code.
206
  * <a href="https://formidableforms.com/features/flexible-layouts-responsive-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Flexible form layout design</a>. Build mobile responsive forms and advanced form layouts with multiple fields in a row by using our CSS layout classes.
235
  * <a href="https://formidableforms.com/features/paypal-wordpress-payments/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">PayPal Payment Forms</a>. Automate your business by collecting instant payments and recurring payments from clients. Collect information, calculate a total, and send clients to PayPal from your payment forms.
236
  * <a href="https://formidableforms.com/features/stripe-payments-for-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Stripe Payment Forms</a>. Keep users on your site while collecting payments from a credit card form. Select from one time and recurring charges in order forms and donation forms.
237
  * <a href="https://formidableforms.com/features/authorize-net-payments/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Authorize.net AIM Payment Forms</a>. Process one-time payments in order forms, registration forms, and calculator forms with Authorize.net AIM.
238
+ * <a href="https://formidableforms.com/features/customizable-woocommerce-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">WooCommerce product configurator</a>. Add custom fields to a WooCommerce product order form and collect extra data when a product is added to the cart. Use form calculations for variable pricing, upload a file with the purchase, and send custom emails when a purchase is completed.
239
+ * <a href="https://formidableforms.com/features/mailchimp-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">MailChimp Forms</a>. Add and update leads in a MailChimp email marketing list from lead forms, online order forms, and email forms.
240
  * <a href="https://formidableforms.com/features/entries-to-constant-contact/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Constant Contact Forms</a>. Create leads automatically in Constant Contact with newsletter signup forms.
241
  * <a href="https://formidableforms.com/features/form-entries-to-getresponse/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">GetResponse Forms</a>. Collect leads in WordPress forms, add them to GetResponse, and trigger GetResponse marketing automations.
242
  * <a href="https://formidableforms.com/features/aweber-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">AWeber Forms</a>. Subscribe users to an AWeber mailing list when a newsletter signup form is submitted.
357
  To get access to more features, integrations, and support, <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">upgrade to Formidable Forms Pro</a>. A Pro license gives you access to the full version of Formidable Forms for more advanced forms, Formidable Views, graphs and stats, priority support, and Formidable Add-ons!
358
 
359
  == Changelog ==
360
+ = 4.04 =
361
+ * New: Show a warning if a WordPress parameter is used in the redirect URL to prevent unintented results.
362
+ * New: Added frm_is_field_type hook to set if an individual field is shown as radio or checkbox
363
+ * New: Show the new pricing fields in the builder for product education.
364
+
365
  = 4.03.07 =
366
  * Project Delight: Make admin-side tooltips more enjoyable and helpful.
367
  * Add several missing countries to the country list.
368
  * Fix: Prevent duplicate localization strings from showing in the page source.
369
 
 
 
 
 
 
370
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>