Formidable Forms – Form Builder for WordPress - Version 5.0.15

Version Description

  • New: Added a v3 reCAPTCHA type option and reCAPTCHA threshold slider to global reCAPTCHA settings. When using v3 the score will be compared to the threshold and marked as spam if it is lower than the threshold. The default value is 0.5. For more information on setting a score, see https://developers.google.com/recaptcha/docs/v3#interpreting_the_score
Download this release

Release Info

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

Code changes from version 5.0.14 to 5.0.15

classes/controllers/FrmSettingsController.php CHANGED
@@ -54,7 +54,7 @@ class FrmSettingsController {
54
  'recaptcha' => array(
55
  'class' => __CLASS__,
56
  'function' => 'recaptcha_settings',
57
- 'name' => __( 'reCaptcha', 'formidable' ),
58
  'icon' => 'frm_icon_font frm_shield_check_icon',
59
  ),
60
  'white_label' => array(
54
  'recaptcha' => array(
55
  'class' => __CLASS__,
56
  'function' => 'recaptcha_settings',
57
+ 'name' => __( 'reCAPTCHA', 'formidable' ),
58
  'icon' => 'frm_icon_font frm_shield_check_icon',
59
  ),
60
  'white_label' => array(
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '5.0.14';
15
 
16
  /**
17
  * @since 1.07.02
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '5.0.15';
15
 
16
  /**
17
  * @since 1.07.02
classes/helpers/FrmEntriesHelper.php CHANGED
@@ -694,4 +694,28 @@ class FrmEntriesHelper {
694
 
695
  return apply_filters( 'frm_entry_actions_dropdown', $actions, compact( 'id', 'entry' ) );
696
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
697
  }
694
 
695
  return apply_filters( 'frm_entry_actions_dropdown', $actions, compact( 'id', 'entry' ) );
696
  }
697
+
698
+ /**
699
+ * @since 5.0.15
700
+ *
701
+ * @param string|int $entry_id
702
+ * @return void
703
+ */
704
+ public static function maybe_render_captcha_score( $entry_id ) {
705
+ $query = array(
706
+ 'item_id' => (int) $entry_id,
707
+ 'field_id' => 0,
708
+ );
709
+ $metas_without_a_field = (array) FrmEntryMeta::getAll( $query, ' ORDER BY it.created_at DESC', '', true );
710
+ foreach ( $metas_without_a_field as $meta ) {
711
+ if ( ! empty( $meta->meta_value['captcha_score'] ) ) {
712
+ echo '<div class="misc-pub-section">';
713
+ FrmAppHelper::icon_by_class( 'frm_icon_font frm_shield_check_icon', array( 'aria-hidden' => 'true' ) );
714
+ echo ' ' . esc_html__( 'reCAPTCHA Score', 'formidable' ) . ': ';
715
+ echo '<b>' . esc_html( $meta->meta_value['captcha_score'] ) . '</b>';
716
+ echo '</div>';
717
+ return;
718
+ }
719
+ }
720
+ }
721
  }
classes/helpers/FrmFormsListHelper.php CHANGED
@@ -191,7 +191,7 @@ class FrmFormsListHelper extends FrmListHelper {
191
 
192
  parent::pagination( $which );
193
 
194
- if ( 'top' == $which ) {
195
  $this->view_switcher( $mode );
196
  }
197
  }
191
 
192
  parent::pagination( $which );
193
 
194
+ if ( 'top' === $which ) {
195
  $this->view_switcher( $mode );
196
  }
197
  }
classes/helpers/FrmListHelper.php CHANGED
@@ -391,9 +391,16 @@ class FrmListHelper {
391
  echo "<option value='-1' selected='selected'>" . esc_attr__( 'Bulk Actions', 'formidable' ) . "</option>\n";
392
 
393
  foreach ( $this->_actions as $name => $title ) {
394
- $class = 'edit' == $name ? ' class="hide-if-no-js"' : '';
 
 
 
 
 
395
 
396
- echo "\t<option value='" . esc_attr( $name ) . "'$class>" . esc_html( $title ) . "</option>\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
 
 
397
  }
398
 
399
  echo "</select>\n";
@@ -980,7 +987,11 @@ class FrmListHelper {
980
  * @access public
981
  */
982
  public function display() {
983
- $singular = $this->_args['singular'];
 
 
 
 
984
 
985
  $this->display_tablenav( 'top' );
986
  ?>
@@ -993,7 +1004,7 @@ class FrmListHelper {
993
  </thead>
994
  <?php } ?>
995
 
996
- <tbody id="the-list"<?php echo( $singular ? " data-wp-lists='list:" . esc_attr( $singular ) . "'" : '' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
997
  <?php $this->display_rows_or_placeholder(); ?>
998
  </tbody>
999
 
@@ -1128,13 +1139,14 @@ class FrmListHelper {
1128
  $classes .= ' hidden';
1129
  }
1130
 
1131
- // Comments column uses HTML in the display name with screen reader text.
1132
- // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
1133
- $data = 'data-colname="' . esc_attr( $column_display_name ) . '"';
1134
-
1135
- $attributes = 'class="' . esc_attr( $classes ) . '" ' . $data;
 
1136
 
1137
- if ( 'cb' == $column_name ) {
1138
  echo '<th scope="row" class="check-column"></th>';
1139
  } elseif ( method_exists( $this, '_column_' . $column_name ) ) {
1140
  echo call_user_func( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
@@ -1144,13 +1156,15 @@ class FrmListHelper {
1144
  $data,
1145
  $primary
1146
  );
1147
- } elseif ( method_exists( $this, 'column_' . $column_name ) ) {
1148
- echo "<td $attributes>"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1149
- echo call_user_func( array( $this, 'column_' . $column_name ), $item ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1150
- echo $this->handle_row_actions( $item, $column_name, $primary ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1151
- echo '</td>';
1152
  } else {
1153
- echo "<td $attributes>"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
 
 
 
 
 
 
 
1154
  echo $this->handle_row_actions( $item, $column_name, $primary ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1155
  echo '</td>';
1156
  }
391
  echo "<option value='-1' selected='selected'>" . esc_attr__( 'Bulk Actions', 'formidable' ) . "</option>\n";
392
 
393
  foreach ( $this->_actions as $name => $title ) {
394
+ $params = array(
395
+ 'value' => $name,
396
+ );
397
+ if ( 'edit' === $name ) {
398
+ $params['class'] = 'hide-if-no-js';
399
+ }
400
 
401
+ echo "\t<option ";
402
+ FrmAppHelper::array_to_html_params( $params, true );
403
+ echo '>' . esc_html( $title ) . '</option>' . "\n";
404
  }
405
 
406
  echo "</select>\n";
987
  * @access public
988
  */
989
  public function display() {
990
+ $singular = $this->_args['singular'];
991
+ $tbody_params = array();
992
+ if ( $singular ) {
993
+ $tbody_params['data-wp-lists'] = 'list:' . $singular;
994
+ }
995
 
996
  $this->display_tablenav( 'top' );
997
  ?>
1004
  </thead>
1005
  <?php } ?>
1006
 
1007
+ <tbody id="the-list"<?php FrmAppHelper::array_to_html_params( $tbody_params, true ); ?>>
1008
  <?php $this->display_rows_or_placeholder(); ?>
1009
  </tbody>
1010
 
1139
  $classes .= ' hidden';
1140
  }
1141
 
1142
+ $params = array(
1143
+ 'class' => $classes,
1144
+ // Comments column uses HTML in the display name with screen reader text.
1145
+ // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
1146
+ 'data-colname' => $column_display_name,
1147
+ );
1148
 
1149
+ if ( 'cb' === $column_name ) {
1150
  echo '<th scope="row" class="check-column"></th>';
1151
  } elseif ( method_exists( $this, '_column_' . $column_name ) ) {
1152
  echo call_user_func( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1156
  $data,
1157
  $primary
1158
  );
 
 
 
 
 
1159
  } else {
1160
+ echo '<td ';
1161
+ FrmAppHelper::array_to_html_params( $params, true );
1162
+ echo '>';
1163
+
1164
+ if ( method_exists( $this, 'column_' . $column_name ) ) {
1165
+ echo call_user_func( array( $this, 'column_' . $column_name ), $item ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1166
+ }
1167
+
1168
  echo $this->handle_row_actions( $item, $column_name, $primary ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1169
  echo '</td>';
1170
  }
classes/models/FrmEntry.php CHANGED
@@ -855,11 +855,28 @@ class FrmEntry {
855
  *
856
  * @param array $values
857
  * @param int $entry_id
 
858
  */
859
  private static function maybe_add_entry_metas( $values, $entry_id ) {
860
  if ( isset( $values['item_meta'] ) ) {
861
  FrmEntryMeta::update_entry_metas( $entry_id, $values['item_meta'] );
862
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
863
  }
864
 
865
  /**
855
  *
856
  * @param array $values
857
  * @param int $entry_id
858
+ * @return void
859
  */
860
  private static function maybe_add_entry_metas( $values, $entry_id ) {
861
  if ( isset( $values['item_meta'] ) ) {
862
  FrmEntryMeta::update_entry_metas( $entry_id, $values['item_meta'] );
863
  }
864
+ self::maybe_add_captcha_meta( (int) $values['form_id'], (int) $entry_id );
865
+ }
866
+
867
+ /**
868
+ * @since 5.0.15
869
+ *
870
+ * @param int $form_id
871
+ * @param int $entry_id
872
+ * @return void
873
+ */
874
+ private static function maybe_add_captcha_meta( $form_id, $entry_id ) {
875
+ global $frm_vars;
876
+ if ( array_key_exists( 'captcha_scores', $frm_vars ) && array_key_exists( $form_id, $frm_vars['captcha_scores'] ) ) {
877
+ $captcha_score_meta = array( 'captcha_score' => $frm_vars['captcha_scores'][ $form_id ] );
878
+ FrmEntryMeta::add_entry_meta( $entry_id, 0, '', maybe_serialize( $captcha_score_meta ) );
879
+ }
880
  }
881
 
882
  /**
classes/models/FrmSettings.php CHANGED
@@ -206,6 +206,10 @@ class FrmSettings {
206
  if ( ! isset( $this->re_type ) ) {
207
  $this->re_type = '';
208
  }
 
 
 
 
209
  }
210
 
211
  /**
@@ -262,11 +266,12 @@ class FrmSettings {
262
  }
263
 
264
  private function update_settings( $params ) {
265
- $this->pubkey = trim( $params['frm_pubkey'] );
266
- $this->privkey = $params['frm_privkey'];
267
- $this->re_type = $params['frm_re_type'];
268
- $this->re_lang = $params['frm_re_lang'];
269
- $this->load_style = $params['frm_load_style'];
 
270
 
271
  $checkboxes = array( 'mu_menu', 're_multi', 'use_html', 'jquery_css', 'accordion_js', 'fade_form', 'no_ips', 'tracking', 'admin_bar' );
272
  foreach ( $checkboxes as $set ) {
206
  if ( ! isset( $this->re_type ) ) {
207
  $this->re_type = '';
208
  }
209
+
210
+ if ( ! isset( $this->re_threshold ) ) {
211
+ $this->re_threshold = .5;
212
+ }
213
  }
214
 
215
  /**
266
  }
267
 
268
  private function update_settings( $params ) {
269
+ $this->pubkey = trim( $params['frm_pubkey'] );
270
+ $this->privkey = $params['frm_privkey'];
271
+ $this->re_type = $params['frm_re_type'];
272
+ $this->re_lang = $params['frm_re_lang'];
273
+ $this->re_threshold = floatval( $params['frm_re_threshold'] );
274
+ $this->load_style = $params['frm_load_style'];
275
 
276
  $checkboxes = array( 'mu_menu', 're_multi', 'use_html', 'jquery_css', 'accordion_js', 'fade_form', 'no_ips', 'tracking', 'admin_bar' );
277
  foreach ( $checkboxes as $set ) {
classes/models/fields/FrmFieldCaptcha.php CHANGED
@@ -126,12 +126,16 @@ class FrmFieldCaptcha extends FrmFieldType {
126
  return $frm_settings->re_multi;
127
  }
128
 
 
 
 
129
  protected function captcha_size() {
130
- // for reverse compatibility
131
  $frm_settings = FrmAppHelper::get_settings();
132
- $captcha_size = ( $this->field['captcha_size'] == 'default' ) ? 'normal' : $this->field['captcha_size'];
133
-
134
- return ( $frm_settings->re_type == 'invisible' ) ? 'invisible' : $captcha_size;
 
 
135
  }
136
 
137
  /**
@@ -145,19 +149,52 @@ class FrmFieldCaptcha extends FrmFieldType {
145
  $resp = $this->send_api_check( $frm_settings );
146
  $response = json_decode( wp_remote_retrieve_body( $resp ), true );
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  if ( isset( $response['success'] ) && ! $response['success'] ) {
149
  // What happens when the CAPTCHA was entered incorrectly
150
  $invalid_message = FrmField::get_option( $this->field, 'invalid' );
151
  $errors[ 'field' . $args['id'] ] = ( $invalid_message == '' ? $frm_settings->re_msg : $invalid_message );
152
- } elseif ( is_wp_error( $resp ) ) {
153
- $error_string = $resp->get_error_message();
154
- $errors[ 'field' . $args['id'] ] = __( 'There was a problem verifying your recaptcha', 'formidable' );
155
- $errors[ 'field' . $args['id'] ] .= ' ' . $error_string;
156
  }
157
 
158
  return $errors;
159
  }
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  /**
162
  * @param array $args
163
  * @return array
126
  return $frm_settings->re_multi;
127
  }
128
 
129
+ /**
130
+ * @return string
131
+ */
132
  protected function captcha_size() {
 
133
  $frm_settings = FrmAppHelper::get_settings();
134
+ if ( in_array( $frm_settings->re_type, array( 'invisible', 'v3' ), true ) ) {
135
+ return 'invisible';
136
+ }
137
+ // for reverse compatibility
138
+ return $this->field['captcha_size'] === 'default' ? 'normal' : $this->field['captcha_size'];
139
  }
140
 
141
  /**
149
  $resp = $this->send_api_check( $frm_settings );
150
  $response = json_decode( wp_remote_retrieve_body( $resp ), true );
151
 
152
+ if ( is_wp_error( $resp ) ) {
153
+ $error_string = $resp->get_error_message();
154
+ $errors[ 'field' . $args['id'] ] = __( 'There was a problem verifying your recaptcha', 'formidable' );
155
+ $errors[ 'field' . $args['id'] ] .= ' ' . $error_string;
156
+ return $errors;
157
+ }
158
+
159
+ if ( ! is_array( $response ) ) {
160
+ return $errors;
161
+ }
162
+
163
+ if ( 'v3' === $frm_settings->re_type && array_key_exists( 'score', $response ) ) {
164
+ $threshold = floatval( $frm_settings->re_threshold );
165
+ $score = floatval( $response['score'] );
166
+
167
+ $this->set_score( $score );
168
+
169
+ if ( $score < $threshold ) {
170
+ $response['success'] = false;
171
+ }
172
+ }
173
+
174
  if ( isset( $response['success'] ) && ! $response['success'] ) {
175
  // What happens when the CAPTCHA was entered incorrectly
176
  $invalid_message = FrmField::get_option( $this->field, 'invalid' );
177
  $errors[ 'field' . $args['id'] ] = ( $invalid_message == '' ? $frm_settings->re_msg : $invalid_message );
 
 
 
 
178
  }
179
 
180
  return $errors;
181
  }
182
 
183
+ /**
184
+ * @param float $score
185
+ * @return void
186
+ */
187
+ private function set_score( $score ) {
188
+ global $frm_vars;
189
+ if ( ! isset( $frm_vars['captcha_scores'] ) ) {
190
+ $frm_vars['captcha_scores'] = array();
191
+ }
192
+ $form_id = is_object( $this->field ) ? $this->field->form_id : $this->field['form_id'];
193
+ if ( ! isset( $frm_vars['captcha_scores'][ $form_id ] ) ) {
194
+ $frm_vars['captcha_scores'][ $form_id ] = $score;
195
+ }
196
+ }
197
+
198
  /**
199
  * @param array $args
200
  * @return array
classes/models/fields/FrmFieldTextarea.php CHANGED
@@ -31,18 +31,22 @@ class FrmFieldTextarea extends FrmFieldType {
31
  * @param string $name
32
  */
33
  public function show_on_form_builder( $name = '' ) {
34
- $size = FrmField::get_option( $this->field, 'size' );
35
- $size_html = $size ? ' style="width:' . esc_attr( $size . ( is_numeric( $size ) ? 'px' : '' ) ) . '";' : '';
36
 
37
- $max = FrmField::get_option( $this->field, 'max' );
38
- $default_value = FrmAppHelper::esc_textarea( force_balance_tags( $this->get_field_column( 'default_value' ) ) );
39
 
40
- echo '<textarea name="' . esc_attr( $this->html_name( $name ) ) . '" ' . // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
41
- $size_html // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
42
- . ' rows="' . esc_attr( $max ) . '" ' .
43
- 'id="' . esc_attr( $this->html_id() ) . '" class="dyn_default_value">' .
44
- $default_value // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
45
- . '</textarea>';
 
 
 
 
 
46
  }
47
 
48
  protected function prepare_display_value( $value, $atts ) {
31
  * @param string $name
32
  */
33
  public function show_on_form_builder( $name = '' ) {
34
+ $size = FrmField::get_option( $this->field, 'size' );
35
+ $max = FrmField::get_option( $this->field, 'max' );
36
 
37
+ echo '<textarea name="' . esc_attr( $this->html_name( $name ) ) . '" rows="' . esc_attr( $max ) . '" id="' . esc_attr( $this->html_id() ) . '" class="dyn_default_value"';
 
38
 
39
+ if ( $size ) {
40
+ if ( is_numeric( $size ) ) {
41
+ $size .= 'px';
42
+ }
43
+ $style = 'width:' . $size . ';';
44
+ echo ' style="' . esc_attr( $style ) . '"';
45
+ }
46
+
47
+ echo '>';
48
+ echo FrmAppHelper::esc_textarea( force_balance_tags( $this->get_field_column( 'default_value' ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
49
+ echo '</textarea>';
50
  }
51
 
52
  protected function prepare_display_value( $value, $atts ) {
classes/views/addons/list.php CHANGED
@@ -53,8 +53,7 @@ if ( ! defined( 'ABSPATH' ) ) {
53
  </h2>
54
  <p>
55
  <?php
56
- // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
57
- echo FrmAppHelper::kses( $addon['excerpt'], array( 'a' ) );
58
 
59
  $show_docs = isset( $addon['docs'] ) && ! empty( $addon['docs'] ) && $addon['installed'];
60
  ?>
53
  </h2>
54
  <p>
55
  <?php
56
+ echo FrmAppHelper::kses( $addon['excerpt'], array( 'a' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
 
57
 
58
  $show_docs = isset( $addon['docs'] ) && ! empty( $addon['docs'] ) && $addon['installed'];
59
  ?>
classes/views/frm-entries/sidebar-shared.php CHANGED
@@ -65,6 +65,8 @@ if ( ! defined( 'ABSPATH' ) ) {
65
  <b><?php echo esc_html( $entry->parent_item_id ); ?></b>
66
  </div>
67
  <?php } ?>
 
 
68
  </div>
69
  </div>
70
 
65
  <b><?php echo esc_html( $entry->parent_item_id ); ?></b>
66
  </div>
67
  <?php } ?>
68
+
69
+ <?php FrmEntriesHelper::maybe_render_captcha_score( $entry->id ); ?>
70
  </div>
71
  </div>
72
 
classes/views/frm-settings/recaptcha.php CHANGED
@@ -40,6 +40,9 @@ if ( ! defined( 'ABSPATH' ) ) {
40
  <option value="invisible" <?php selected( $frm_settings->re_type, 'invisible' ); ?>>
41
  <?php esc_html_e( 'Invisible', 'formidable' ); ?>
42
  </option>
 
 
 
43
  </select>
44
  </p>
45
 
@@ -59,11 +62,21 @@ if ( ! defined( 'ABSPATH' ) ) {
59
  </select>
60
  </p>
61
 
 
 
 
 
 
 
 
 
 
 
62
  <p>
63
  <label for="frm_re_multi">
64
  <input type="checkbox" name="frm_re_multi" id="frm_re_multi"
65
  value="1" <?php checked( $frm_settings->re_multi, 1 ); ?> />
66
- <?php esc_html_e( 'Allow multiple reCaptchas to be used on a single page', 'formidable' ); ?>
67
  </label>
68
  </p>
69
  </div>
40
  <option value="invisible" <?php selected( $frm_settings->re_type, 'invisible' ); ?>>
41
  <?php esc_html_e( 'Invisible', 'formidable' ); ?>
42
  </option>
43
+ <option value="v3" <?php selected( $frm_settings->re_type, 'v3' ); ?>>
44
+ <?php esc_html_e( 'v3', 'formidable' ); ?>
45
+ </option>
46
  </select>
47
  </p>
48
 
62
  </select>
63
  </p>
64
 
65
+ <p id="frm_captcha_threshold_container" class="frm6 frm_form_field <?php echo 'v3' === $frm_settings->re_type ? '' : 'frm_hidden'; ?>">
66
+ <label for="frm_re_type">
67
+ <?php esc_html_e( 'reCAPTCHA Threshold', 'formidable' ); ?>
68
+ <span class="frm_help frm_icon_font frm_tooltip_icon" title="<?php esc_attr_e( 'A score of 0 is likely to be a bot and a score of 1 is likely not a bot. Setting a lower threshold will allow more bots, but it will also stop fewer real users.', 'formidable' ); ?>"></span>
69
+ </label>
70
+ <span style="vertical-align:top;">0</span>
71
+ <input name="frm_re_threshold" id="frm_re_threshold" type="range" step="0.1" max="1" min="0" value="<?php echo esc_attr( $frm_settings->re_threshold ); ?>" />
72
+ <span style="vertical-align:top;">1</span>
73
+ </p>
74
+
75
  <p>
76
  <label for="frm_re_multi">
77
  <input type="checkbox" name="frm_re_multi" id="frm_re_multi"
78
  value="1" <?php checked( $frm_settings->re_multi, 1 ); ?> />
79
+ <?php esc_html_e( 'Allow multiple reCAPTCHAs to be used on a single page', 'formidable' ); ?>
80
  </label>
81
  </p>
82
  </div>
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: 5.0.14
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: 5.0.15
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
images/icons.svg CHANGED
@@ -917,8 +917,8 @@
917
  <symbol id="frm_break_field_group_icon" viewBox="0 0 20 20" fill="none"><path d="M16.667 3.5h-13.5c-.92 0-1.667.746-1.667 1.667v1.5c0 .92.746 1.666 1.667 1.666h13.5c.92 0 1.666-.746 1.666-1.666v-1.5c0-.92-.746-1.667-1.666-1.667zM16.667 11.5h-13.5c-.92 0-1.667.746-1.667 1.667v1.5c0 .92.746 1.666 1.667 1.666h13.5c.92 0 1.666-.746 1.666-1.666v-1.5c0-.92-.746-1.667-1.666-1.667z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
918
  <symbol id="frm_gear_icon" viewBox="0 0 20 20" fill="none"><path d="M10 12.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/><path d="M16.167 12.5a1.375 1.375 0 00.275 1.516l.05.05a1.666 1.666 0 01-1.179 2.847 1.666 1.666 0 01-1.179-.488l-.05-.05a1.375 1.375 0 00-1.517-.275 1.374 1.374 0 00-.833 1.258v.142a1.667 1.667 0 01-3.333 0v-.075a1.375 1.375 0 00-.9-1.259 1.375 1.375 0 00-1.517.275l-.05.05a1.666 1.666 0 11-2.358-2.358l.05-.05a1.375 1.375 0 00.275-1.517 1.376 1.376 0 00-1.259-.833h-.141a1.667 1.667 0 010-3.333h.075a1.375 1.375 0 001.258-.9 1.375 1.375 0 00-.275-1.517l-.05-.05a1.667 1.667 0 112.358-2.358l.05.05a1.375 1.375 0 001.517.275h.067a1.375 1.375 0 00.833-1.259V2.5a1.667 1.667 0 013.333 0v.075a1.375 1.375 0 00.834 1.258 1.375 1.375 0 001.516-.275l.05-.05a1.667 1.667 0 112.359 2.358l-.05.05a1.376 1.376 0 00-.275 1.517V7.5a1.375 1.375 0 001.258.833h.142a1.667 1.667 0 110 3.333h-.075a1.376 1.376 0 00-1.259.834v0z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
919
  <symbol id="frm_trash_icon" viewBox="0 0 20 20" fill="none"><path d="M2.5 5h15M6.667 5V3.334a1.667 1.667 0 011.667-1.667h3.333a1.667 1.667 0 011.667 1.667V5m2.5 0v11.667a1.667 1.667 0 01-1.667 1.667H5.834a1.667 1.667 0 01-1.667-1.667V5h11.667z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
920
- <symbol id="frm_thick_move_icon" viewBox="0 0 20 20"><path d="M4.166 7.5l-2.5 2.5 2.5 2.5M7.5 4.167l2.5-2.5 2.5 2.5M12.5 15.833l-2.5 2.5-2.5-2.5M15.834 7.5l2.5 2.5-2.5 2.5M1.666 10h16.667M10 1.667v16.667" stroke="#9EA9B8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
921
- </symbol>
922
  <symbol id="frm_thick_more_vert_icon" viewBox="0 0 20 20"><path d="M10 10.834a.833.833 0 100-1.667.833.833 0 000 1.667zM10 5a.833.833 0 100-1.667A.833.833 0 0010 5zM10 16.667A.833.833 0 1010 15a.833.833 0 000 1.667z" fill="#9EA9B8" stroke="#9EA9B8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
 
923
  </defs>
924
  </svg>
917
  <symbol id="frm_break_field_group_icon" viewBox="0 0 20 20" fill="none"><path d="M16.667 3.5h-13.5c-.92 0-1.667.746-1.667 1.667v1.5c0 .92.746 1.666 1.667 1.666h13.5c.92 0 1.666-.746 1.666-1.666v-1.5c0-.92-.746-1.667-1.666-1.667zM16.667 11.5h-13.5c-.92 0-1.667.746-1.667 1.667v1.5c0 .92.746 1.666 1.667 1.666h13.5c.92 0 1.666-.746 1.666-1.666v-1.5c0-.92-.746-1.667-1.666-1.667z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
918
  <symbol id="frm_gear_icon" viewBox="0 0 20 20" fill="none"><path d="M10 12.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/><path d="M16.167 12.5a1.375 1.375 0 00.275 1.516l.05.05a1.666 1.666 0 01-1.179 2.847 1.666 1.666 0 01-1.179-.488l-.05-.05a1.375 1.375 0 00-1.517-.275 1.374 1.374 0 00-.833 1.258v.142a1.667 1.667 0 01-3.333 0v-.075a1.375 1.375 0 00-.9-1.259 1.375 1.375 0 00-1.517.275l-.05.05a1.666 1.666 0 11-2.358-2.358l.05-.05a1.375 1.375 0 00.275-1.517 1.376 1.376 0 00-1.259-.833h-.141a1.667 1.667 0 010-3.333h.075a1.375 1.375 0 001.258-.9 1.375 1.375 0 00-.275-1.517l-.05-.05a1.667 1.667 0 112.358-2.358l.05.05a1.375 1.375 0 001.517.275h.067a1.375 1.375 0 00.833-1.259V2.5a1.667 1.667 0 013.333 0v.075a1.375 1.375 0 00.834 1.258 1.375 1.375 0 001.516-.275l.05-.05a1.667 1.667 0 112.359 2.358l-.05.05a1.376 1.376 0 00-.275 1.517V7.5a1.375 1.375 0 001.258.833h.142a1.667 1.667 0 110 3.333h-.075a1.376 1.376 0 00-1.259.834v0z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
919
  <symbol id="frm_trash_icon" viewBox="0 0 20 20" fill="none"><path d="M2.5 5h15M6.667 5V3.334a1.667 1.667 0 011.667-1.667h3.333a1.667 1.667 0 011.667 1.667V5m2.5 0v11.667a1.667 1.667 0 01-1.667 1.667H5.834a1.667 1.667 0 01-1.667-1.667V5h11.667z" stroke="#484E54" stroke-linecap="round" stroke-linejoin="round"/></symbol>
920
+ <symbol id="frm_thick_move_icon" viewBox="0 0 20 20"><path d="M4.166 7.5l-2.5 2.5 2.5 2.5M7.5 4.167l2.5-2.5 2.5 2.5M12.5 15.833l-2.5 2.5-2.5-2.5M15.834 7.5l2.5 2.5-2.5 2.5M1.666 10h16.667M10 1.667v16.667" stroke="#9EA9B8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
 
921
  <symbol id="frm_thick_more_vert_icon" viewBox="0 0 20 20"><path d="M10 10.834a.833.833 0 100-1.667.833.833 0 000 1.667zM10 5a.833.833 0 100-1.667A.833.833 0 0010 5zM10 16.667A.833.833 0 1010 15a.833.833 0 000 1.667z" fill="#9EA9B8" stroke="#9EA9B8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
922
+ <symbol id="frm_chat_forms_icon" viewBox="0 0 21 21" fill="none" stroke="currentColor"><path d="M19.991 13.914a2 2 0 0 1-2 2h-12l-4 4v-16a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
923
  </defs>
924
  </svg>
js/formidable_admin.js CHANGED
@@ -5999,19 +5999,25 @@ function frmAdminBuildJS() {
5999
 
6000
  function setUpTinyMceVisualButtonListener( fieldSettings ) {
6001
  var editor = fieldSettings.querySelector( '.wp-editor-area' );
6002
- jQuery( document ).on(
6003
- 'click', '#' + editor.id + '-html',
6004
- function() {
6005
- editor.style.visibility = 'visible';
6006
- initQuickTagsButtons( fieldSettings );
6007
- }
6008
- );
 
 
6009
  }
6010
 
6011
  function setUpTinyMceHtmlButtonListener( fieldSettings ) {
6012
  var editor, hasResetTinyMce;
6013
 
6014
  editor = fieldSettings.querySelector( '.wp-editor-area' );
 
 
 
 
6015
  hasResetTinyMce = false;
6016
 
6017
  jQuery( '#' + editor.id + '-tmce' )
@@ -6037,7 +6043,7 @@ function frmAdminBuildJS() {
6037
 
6038
  editor = fieldSettings.querySelector( '.wp-editor-area' );
6039
 
6040
- if ( 'function' !== typeof window.quicktags || typeof window.QTags.instances[ editor.id ] !== 'undefined' ) {
6041
  return;
6042
  }
6043
 
@@ -8432,6 +8438,13 @@ function frmAdminBuildJS() {
8432
  });
8433
  }
8434
 
 
 
 
 
 
 
 
8435
  function trashTemplate( e ) {
8436
  /*jshint validthis:true */
8437
  var id = this.getAttribute( 'data-id' );
@@ -9146,6 +9159,9 @@ function frmAdminBuildJS() {
9146
  formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
9147
  formSettings.on( 'change', '.frm_submit_logic_field_opts', addSubmitLogicOpts );
9148
 
 
 
 
9149
  // Close shortcode modal on click.
9150
  formSettings.on( 'mouseup', '*:not(.frm-show-box)', function( e ) {
9151
  e.stopPropagation();
@@ -9557,6 +9573,11 @@ function frmAdminBuildJS() {
9557
  });
9558
  jQuery( '.settings-lite-cta' ).remove();
9559
  });
 
 
 
 
 
9560
  },
9561
 
9562
  exportInit: function() {
5999
 
6000
  function setUpTinyMceVisualButtonListener( fieldSettings ) {
6001
  var editor = fieldSettings.querySelector( '.wp-editor-area' );
6002
+ if ( editor ) {
6003
+ jQuery( document ).on(
6004
+ 'click', '#' + editor.id + '-html',
6005
+ function() {
6006
+ editor.style.visibility = 'visible';
6007
+ initQuickTagsButtons( fieldSettings );
6008
+ }
6009
+ );
6010
+ }
6011
  }
6012
 
6013
  function setUpTinyMceHtmlButtonListener( fieldSettings ) {
6014
  var editor, hasResetTinyMce;
6015
 
6016
  editor = fieldSettings.querySelector( '.wp-editor-area' );
6017
+ if ( ! editor ) {
6018
+ return;
6019
+ }
6020
+
6021
  hasResetTinyMce = false;
6022
 
6023
  jQuery( '#' + editor.id + '-tmce' )
6043
 
6044
  editor = fieldSettings.querySelector( '.wp-editor-area' );
6045
 
6046
+ if ( ! editor || 'function' !== typeof window.quicktags || typeof window.QTags.instances[ editor.id ] !== 'undefined' ) {
6047
  return;
6048
  }
6049
 
8438
  });
8439
  }
8440
 
8441
+ function handleCaptchaTypeChange( e ) {
8442
+ const thresholdContainer = document.getElementById( 'frm_captcha_threshold_container' );
8443
+ if ( thresholdContainer ) {
8444
+ thresholdContainer.classList.toggle( 'frm_hidden', 'v3' !== e.target.value );
8445
+ }
8446
+ }
8447
+
8448
  function trashTemplate( e ) {
8449
  /*jshint validthis:true */
8450
  var id = this.getAttribute( 'data-id' );
9159
  formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
9160
  formSettings.on( 'change', '.frm_submit_logic_field_opts', addSubmitLogicOpts );
9161
 
9162
+ jQuery( '.frm_image_preview_wrapper' ).on( 'click', '.frm_choose_image_box', addImageToOption );
9163
+ jQuery( '.frm_image_preview_wrapper' ).on( 'click', '.frm_remove_image_option', removeImageFromOption );
9164
+
9165
  // Close shortcode modal on click.
9166
  formSettings.on( 'mouseup', '*:not(.frm-show-box)', function( e ) {
9167
  e.stopPropagation();
9573
  });
9574
  jQuery( '.settings-lite-cta' ).remove();
9575
  });
9576
+
9577
+ const captchaType = document.getElementById( 'frm_re_type' );
9578
+ if ( captchaType ) {
9579
+ captchaType.addEventListener( 'change', handleCaptchaTypeChange );
9580
+ }
9581
  },
9582
 
9583
  exportInit: function() {
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 5.0.14\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: 2021-12-02T14:58:17+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: formidable\n"
@@ -691,7 +691,8 @@ msgid "Permissions"
691
  msgstr ""
692
 
693
  #: classes/controllers/FrmSettingsController.php:57
694
- msgid "reCaptcha"
 
695
  msgstr ""
696
 
697
  #: classes/controllers/FrmSettingsController.php:61
@@ -1251,7 +1252,7 @@ msgid "Default value will NOT pass form validation"
1251
  msgstr ""
1252
 
1253
  #: classes/helpers/FrmAppHelper.php:2718
1254
- #: classes/helpers/FrmListHelper.php:405
1255
  #: js/formidable_admin.js:4069
1256
  msgid "Heads up"
1257
  msgstr ""
@@ -1719,6 +1720,10 @@ msgstr ""
1719
  msgid "Entry edits"
1720
  msgstr ""
1721
 
 
 
 
 
1722
  #: classes/helpers/FrmEntriesListHelper.php:99
1723
  msgid "No Entries Found"
1724
  msgstr ""
@@ -3304,51 +3309,51 @@ msgstr ""
3304
  msgid "Bulk Actions"
3305
  msgstr ""
3306
 
3307
- #: classes/helpers/FrmListHelper.php:409
3308
  msgid "Apply"
3309
  msgstr ""
3310
 
3311
- #: classes/helpers/FrmListHelper.php:484
3312
- #: classes/helpers/FrmListHelper.php:1173
3313
  msgid "Show more details"
3314
  msgstr ""
3315
 
3316
  #. translators: %s: Number of items
3317
- #: classes/helpers/FrmListHelper.php:592
3318
- #: classes/helpers/FrmListHelper.php:1199
3319
  msgid "%s item"
3320
  msgid_plural "%s items"
3321
  msgstr[0] ""
3322
  msgstr[1] ""
3323
 
3324
- #: classes/helpers/FrmListHelper.php:623
3325
- #: classes/helpers/FrmListHelper.php:627
3326
  msgid "Current Page"
3327
  msgstr ""
3328
 
3329
  #. translators: %1$s: Current page number, %2$s: Total pages
3330
- #: classes/helpers/FrmListHelper.php:635
3331
  msgctxt "paging"
3332
  msgid "%1$s of %2$s"
3333
  msgstr ""
3334
 
3335
- #: classes/helpers/FrmListHelper.php:699
3336
  msgid "First page"
3337
  msgstr ""
3338
 
3339
- #: classes/helpers/FrmListHelper.php:700
3340
  msgid "Last page"
3341
  msgstr ""
3342
 
3343
- #: classes/helpers/FrmListHelper.php:701
3344
  msgid "Previous page"
3345
  msgstr ""
3346
 
3347
- #: classes/helpers/FrmListHelper.php:702
3348
  msgid "Next page"
3349
  msgstr ""
3350
 
3351
- #: classes/helpers/FrmListHelper.php:922
3352
  msgid "Select All"
3353
  msgstr ""
3354
 
@@ -3723,7 +3728,7 @@ msgstr ""
3723
  msgid "There was a problem verifying your recaptcha"
3724
  msgstr ""
3725
 
3726
- #: classes/models/fields/FrmFieldCaptcha.php:173
3727
  msgid "The captcha is missing from this form"
3728
  msgstr ""
3729
 
@@ -3884,7 +3889,7 @@ msgid "%1$s Form submitted on %2$s"
3884
  msgstr ""
3885
 
3886
  #: classes/models/FrmEmail.php:308
3887
- #: classes/views/frm-entries/sidebar-shared.php:72
3888
  msgid "User Information"
3889
  msgstr ""
3890
 
@@ -3969,10 +3974,6 @@ msgstr ""
3969
  msgid "Hidden"
3970
  msgstr ""
3971
 
3972
- #: classes/models/FrmField.php:66
3973
- msgid "reCAPTCHA"
3974
- msgstr ""
3975
-
3976
  #: classes/models/FrmField.php:78
3977
  msgid "File Upload"
3978
  msgstr ""
@@ -4349,13 +4350,13 @@ msgstr ""
4349
  msgid "Check now for a recent upgrade or renewal"
4350
  msgstr ""
4351
 
 
4352
  #: classes/views/addons/list.php:62
4353
- #: classes/views/addons/list.php:63
4354
  msgid "View Docs"
4355
  msgstr ""
4356
 
4357
  #. translators: %s: Status name
4358
- #: classes/views/addons/list.php:79
4359
  msgid "Status: %s"
4360
  msgstr ""
4361
 
@@ -4455,24 +4456,24 @@ msgid "Parent Entry ID"
4455
  msgstr ""
4456
 
4457
  #. translators: %1$s: User display name.
4458
- #: classes/views/frm-entries/sidebar-shared.php:81
4459
  msgid "Created by: %1$s"
4460
  msgstr ""
4461
 
4462
  #. translators: %1$s: User display name.
4463
- #: classes/views/frm-entries/sidebar-shared.php:95
4464
  msgid "Updated by: %1$s"
4465
  msgstr ""
4466
 
4467
- #: classes/views/frm-entries/sidebar-shared.php:105
4468
  msgid "IP Address:"
4469
  msgstr ""
4470
 
4471
- #: classes/views/frm-entries/sidebar-shared.php:113
4472
  msgid "Browser/OS:"
4473
  msgstr ""
4474
 
4475
- #: classes/views/frm-entries/sidebar-shared.php:121
4476
  msgid "Referrer:"
4477
  msgstr ""
4478
 
@@ -4499,7 +4500,7 @@ msgstr ""
4499
  #: classes/views/frm-fields/back-end/inline-modal.php:7
4500
  #: classes/views/frm-fields/back-end/inline-modal.php:8
4501
  #: classes/views/shared/admin-header.php:19
4502
- #: js/formidable_admin.js:7764
4503
  msgid "Close"
4504
  msgstr ""
4505
 
@@ -5600,16 +5601,28 @@ msgstr ""
5600
  msgid "Invisible"
5601
  msgstr ""
5602
 
5603
- #: classes/views/frm-settings/recaptcha.php:48
 
 
 
 
5604
  msgid "reCAPTCHA Language"
5605
  msgstr ""
5606
 
5607
- #: classes/views/frm-settings/recaptcha.php:52
5608
  msgid "Browser Default"
5609
  msgstr ""
5610
 
5611
- #: classes/views/frm-settings/recaptcha.php:66
5612
- msgid "Allow multiple reCaptchas to be used on a single page"
 
 
 
 
 
 
 
 
5613
  msgstr ""
5614
 
5615
  #: classes/views/frm-settings/settings_cta.php:13
@@ -6359,6 +6372,6 @@ msgstr ""
6359
  msgid "Are you sure you want to delete these %1$s selected fields?"
6360
  msgstr ""
6361
 
6362
- #: js/formidable_admin.js:7756
6363
  msgid "Save and Reload"
6364
  msgstr ""
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Formidable Forms 5.0.15\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: 2021-12-15T14:35:50+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: formidable\n"
691
  msgstr ""
692
 
693
  #: classes/controllers/FrmSettingsController.php:57
694
+ #: classes/models/FrmField.php:66
695
+ msgid "reCAPTCHA"
696
  msgstr ""
697
 
698
  #: classes/controllers/FrmSettingsController.php:61
1252
  msgstr ""
1253
 
1254
  #: classes/helpers/FrmAppHelper.php:2718
1255
+ #: classes/helpers/FrmListHelper.php:412
1256
  #: js/formidable_admin.js:4069
1257
  msgid "Heads up"
1258
  msgstr ""
1720
  msgid "Entry edits"
1721
  msgstr ""
1722
 
1723
+ #: classes/helpers/FrmEntriesHelper.php:714
1724
+ msgid "reCAPTCHA Score"
1725
+ msgstr ""
1726
+
1727
  #: classes/helpers/FrmEntriesListHelper.php:99
1728
  msgid "No Entries Found"
1729
  msgstr ""
3309
  msgid "Bulk Actions"
3310
  msgstr ""
3311
 
3312
+ #: classes/helpers/FrmListHelper.php:416
3313
  msgid "Apply"
3314
  msgstr ""
3315
 
3316
+ #: classes/helpers/FrmListHelper.php:491
3317
+ #: classes/helpers/FrmListHelper.php:1187
3318
  msgid "Show more details"
3319
  msgstr ""
3320
 
3321
  #. translators: %s: Number of items
3322
+ #: classes/helpers/FrmListHelper.php:599
3323
+ #: classes/helpers/FrmListHelper.php:1213
3324
  msgid "%s item"
3325
  msgid_plural "%s items"
3326
  msgstr[0] ""
3327
  msgstr[1] ""
3328
 
3329
+ #: classes/helpers/FrmListHelper.php:630
3330
+ #: classes/helpers/FrmListHelper.php:634
3331
  msgid "Current Page"
3332
  msgstr ""
3333
 
3334
  #. translators: %1$s: Current page number, %2$s: Total pages
3335
+ #: classes/helpers/FrmListHelper.php:642
3336
  msgctxt "paging"
3337
  msgid "%1$s of %2$s"
3338
  msgstr ""
3339
 
3340
+ #: classes/helpers/FrmListHelper.php:706
3341
  msgid "First page"
3342
  msgstr ""
3343
 
3344
+ #: classes/helpers/FrmListHelper.php:707
3345
  msgid "Last page"
3346
  msgstr ""
3347
 
3348
+ #: classes/helpers/FrmListHelper.php:708
3349
  msgid "Previous page"
3350
  msgstr ""
3351
 
3352
+ #: classes/helpers/FrmListHelper.php:709
3353
  msgid "Next page"
3354
  msgstr ""
3355
 
3356
+ #: classes/helpers/FrmListHelper.php:929
3357
  msgid "Select All"
3358
  msgstr ""
3359
 
3728
  msgid "There was a problem verifying your recaptcha"
3729
  msgstr ""
3730
 
3731
+ #: classes/models/fields/FrmFieldCaptcha.php:210
3732
  msgid "The captcha is missing from this form"
3733
  msgstr ""
3734
 
3889
  msgstr ""
3890
 
3891
  #: classes/models/FrmEmail.php:308
3892
+ #: classes/views/frm-entries/sidebar-shared.php:74
3893
  msgid "User Information"
3894
  msgstr ""
3895
 
3974
  msgid "Hidden"
3975
  msgstr ""
3976
 
 
 
 
 
3977
  #: classes/models/FrmField.php:78
3978
  msgid "File Upload"
3979
  msgstr ""
4350
  msgid "Check now for a recent upgrade or renewal"
4351
  msgstr ""
4352
 
4353
+ #: classes/views/addons/list.php:61
4354
  #: classes/views/addons/list.php:62
 
4355
  msgid "View Docs"
4356
  msgstr ""
4357
 
4358
  #. translators: %s: Status name
4359
+ #: classes/views/addons/list.php:78
4360
  msgid "Status: %s"
4361
  msgstr ""
4362
 
4456
  msgstr ""
4457
 
4458
  #. translators: %1$s: User display name.
4459
+ #: classes/views/frm-entries/sidebar-shared.php:83
4460
  msgid "Created by: %1$s"
4461
  msgstr ""
4462
 
4463
  #. translators: %1$s: User display name.
4464
+ #: classes/views/frm-entries/sidebar-shared.php:97
4465
  msgid "Updated by: %1$s"
4466
  msgstr ""
4467
 
4468
+ #: classes/views/frm-entries/sidebar-shared.php:107
4469
  msgid "IP Address:"
4470
  msgstr ""
4471
 
4472
+ #: classes/views/frm-entries/sidebar-shared.php:115
4473
  msgid "Browser/OS:"
4474
  msgstr ""
4475
 
4476
+ #: classes/views/frm-entries/sidebar-shared.php:123
4477
  msgid "Referrer:"
4478
  msgstr ""
4479
 
4500
  #: classes/views/frm-fields/back-end/inline-modal.php:7
4501
  #: classes/views/frm-fields/back-end/inline-modal.php:8
4502
  #: classes/views/shared/admin-header.php:19
4503
+ #: js/formidable_admin.js:7770
4504
  msgid "Close"
4505
  msgstr ""
4506
 
5601
  msgid "Invisible"
5602
  msgstr ""
5603
 
5604
+ #: classes/views/frm-settings/recaptcha.php:44
5605
+ msgid "v3"
5606
+ msgstr ""
5607
+
5608
+ #: classes/views/frm-settings/recaptcha.php:51
5609
  msgid "reCAPTCHA Language"
5610
  msgstr ""
5611
 
5612
+ #: classes/views/frm-settings/recaptcha.php:55
5613
  msgid "Browser Default"
5614
  msgstr ""
5615
 
5616
+ #: classes/views/frm-settings/recaptcha.php:67
5617
+ msgid "reCAPTCHA Threshold"
5618
+ msgstr ""
5619
+
5620
+ #: classes/views/frm-settings/recaptcha.php:68
5621
+ msgid "A score of 0 is likely to be a bot and a score of 1 is likely not a bot. Setting a lower threshold will allow more bots, but it will also stop fewer real users."
5622
+ msgstr ""
5623
+
5624
+ #: classes/views/frm-settings/recaptcha.php:79
5625
+ msgid "Allow multiple reCAPTCHAs to be used on a single page"
5626
  msgstr ""
5627
 
5628
  #: classes/views/frm-settings/settings_cta.php:13
6372
  msgid "Are you sure you want to delete these %1$s selected fields?"
6373
  msgstr ""
6374
 
6375
+ #: js/formidable_admin.js:7762
6376
  msgid "Save and Reload"
6377
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: forms, contact form, form builder, survey, free, form maker, form creator,
5
  Requires at least: 5.0
6
  Tested up to: 5.8.2
7
  Requires PHP: 5.6
8
- Stable tag: 5.0.14
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
@@ -438,6 +438,9 @@ Using our Zapier integration, you can easily connect Formidable with over 1000+
438
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
439
 
440
  == Changelog ==
 
 
 
441
  = 5.0.14 =
442
  - New: HTML field descriptions now use a rich text editor instead of a plain textarea.
443
  - New: Added a new array_separator option to entry shortcodes. This can be used with the [default-message] like [default-message array_separator="<br/>"] shortcode to change the separator used for multiple checkbox or dropdown values. It also works with the [frm-show-entry] shortcode in pro.
@@ -459,11 +462,4 @@ See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zap
459
  - Fix: A conflict with WooCommerce was sometimes triggering an error when checking for addon updates.
460
  - Fix: The comment author information sent to Akismet was not getting set if the author information was set in a name field.
461
 
462
- = 5.0.12 =
463
- - New: When the frm_inline_submit class is added to custom Submit Button HTML if frm_inline_form is missing from the form it will now be automatically added to allow for the submit button to become inline.
464
- - Fix: Many Formidable addons were not properly displaying update details from the plugins page.
465
- - Fix: Fewer API requests will be sent to Formidable when inbox notice cached results expire and when a request results in an error.
466
- - Fix: Added additional validation to CSV export so it fails more gracefully when the form does not exist.
467
- - Fix: The style setting for Margin under Field Settings as been renamed to Bottom Margin to avoid confusion as it only updates one margin value.
468
-
469
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>
5
  Requires at least: 5.0
6
  Tested up to: 5.8.2
7
  Requires PHP: 5.6
8
+ Stable tag: 5.0.15
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
438
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
439
 
440
  == Changelog ==
441
+ = 5.0.15 =
442
+ - New: Added a v3 reCAPTCHA type option and reCAPTCHA threshold slider to global reCAPTCHA settings. When using v3 the score will be compared to the threshold and marked as spam if it is lower than the threshold. The default value is 0.5. For more information on setting a score, see https://developers.google.com/recaptcha/docs/v3#interpreting_the_score
443
+
444
  = 5.0.14 =
445
  - New: HTML field descriptions now use a rich text editor instead of a plain textarea.
446
  - New: Added a new array_separator option to entry shortcodes. This can be used with the [default-message] like [default-message array_separator="<br/>"] shortcode to change the separator used for multiple checkbox or dropdown values. It also works with the [frm-show-entry] shortcode in pro.
462
  - Fix: A conflict with WooCommerce was sometimes triggering an error when checking for addon updates.
463
  - Fix: The comment author information sent to Akismet was not getting set if the author information was set in a name field.
464
 
 
 
 
 
 
 
 
465
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>