Contact Form by WPForms – Drag & Drop Form Builder for WordPress - Version 1.2.9

Version Description

  • Added: Individual fields can be duplicated in the form builder
  • Changed: How data is stored for fields using Dynanic Choices
  • Fixed: Global assets setting causing errors in some cases
  • Fixed: Writing setting ("correct invalidly nested XHTML") breaking forms containing HTML
  • Fixed: Forms being displayed/included on the native WordPress Export page
  • Fixed: Dynamic Choices erroring when used with Post Types
  • Fixed: Form labels including blank IDs
Download this release

Release Info

Developer jaredatch
Plugin Icon 128x128 Contact Form by WPForms – Drag & Drop Form Builder for WordPress
Version 1.2.9
Comparing to
See all releases

Code changes from version 1.2.8.1 to 1.2.9

assets/css/admin-builder-fields.css CHANGED
@@ -543,6 +543,31 @@
543
  margin: 0;
544
  }
545
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
546
  #wpforms-panel-fields .wpforms-field .wpforms-field-delete {
547
  color: #d22222;
548
  position: absolute;
543
  margin: 0;
544
  }
545
 
546
+ #wpforms-panel-fields .wpforms-field .wpforms-field-duplicate {
547
+ color: #777;
548
+ position: absolute;
549
+ top: 5px;
550
+ right: 32px;
551
+ font-size: 16px;
552
+ opacity: 0;
553
+ z-index: 10;
554
+ -webkit-transition: all 0.4s ease-in-out;
555
+ -moz-transition: all 0.4s ease-in-out;
556
+ -ms-transition: all 0.4s ease-in-out;
557
+ -o-transition: all 0.4s ease-in-out;
558
+ transition: all 0.4s ease-in-out;
559
+ }
560
+
561
+ #wpforms-panel-fields .wpforms-field:hover .wpforms-field-duplicate,
562
+ #wpforms-panel-fields .wpforms-field.active .wpforms-field-duplicate {
563
+ opacity: 0.45;
564
+ }
565
+
566
+ #wpforms-panel-fields .wpforms-field .wpforms-field-duplicate:hover {
567
+ color: #e27730;
568
+ opacity: 1;
569
+ }
570
+
571
  #wpforms-panel-fields .wpforms-field .wpforms-field-delete {
572
  color: #d22222;
573
  position: absolute;
assets/js/admin-builder.js CHANGED
@@ -537,6 +537,12 @@
537
  WPFormsBuilder.fieldDelete($(this).parent().data('field-id'));
538
  });
539
 
 
 
 
 
 
 
540
  // Field add
541
  $(document).on('click', '.wpforms-add-fields-button', function(e) {
542
  e.preventDefault();
@@ -934,6 +940,82 @@
934
  }
935
  },
936
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
937
  /**
938
  * Add new field.
939
  *
537
  WPFormsBuilder.fieldDelete($(this).parent().data('field-id'));
538
  });
539
 
540
+ // Field duplicate
541
+ $(document).on('click', '.wpforms-field-duplicate', function(e) {
542
+ e.preventDefault();
543
+ WPFormsBuilder.fieldDuplicate($(this).parent().data('field-id'));
544
+ });
545
+
546
  // Field add
547
  $(document).on('click', '.wpforms-add-fields-button', function(e) {
548
  e.preventDefault();
940
  }
941
  },
942
 
943
+ /**
944
+ * Duplicate field
945
+ *
946
+ * @since 1.2.9
947
+ */
948
+ fieldDuplicate: function(id) {
949
+
950
+ var $field = $('#wpforms-field-'+id),
951
+ type = $field.data('field-type');
952
+
953
+ if ($field.hasClass('no-duplicate')) {
954
+ $.alert({
955
+ title: wpforms_builder.field_locked,
956
+ content: wpforms_builder.field_locked_msg,
957
+ confirmButton: wpforms_builder.close
958
+ });
959
+ } else {
960
+ $.confirm({
961
+ title: false,
962
+ content: wpforms_builder.duplicate_confirm,
963
+ backgroundDismiss: false,
964
+ closeIcon: false,
965
+ confirm: function(){
966
+
967
+ var $newField = $field.clone(),
968
+ newFieldID = $('#wpforms-field-id').val(),
969
+ nextID = Number(newFieldID)+1,
970
+ $fieldOptions = $('#wpforms-field-option-'+id),
971
+ newFieldOptions = $fieldOptions.html(),
972
+ newFieldLabel = $('#wpforms-field-option-'+id+'-label').val()+' '+wpforms_builder.duplicate_copy,
973
+ regex_fieldOptionsID = new RegExp( 'ID #'+id, "g"),
974
+ regex_fieldID = new RegExp( 'fields\\['+id+'\\]', "g"),
975
+ regex_dataFieldID = new RegExp( 'data-field-id="'+id+'"', "g"),
976
+ regex_referenceID = new RegExp( 'data-reference="'+id+'"', "g"),
977
+ regex_elementID = new RegExp( '\\b(id|for)="wpforms-(.*?)'+id+'(.*?)"', "ig");
978
+
979
+ // Toggle visibility states
980
+ $field.after($newField);
981
+ $field.removeClass('active');
982
+ $newField.addClass('active').attr({
983
+ 'id' : 'wpforms-field-'+newFieldID,
984
+ 'data-field-id': newFieldID
985
+ });
986
+
987
+ // Various regex to adjust the field options to work with
988
+ // the new field ID
989
+ function regex_elementID_replace(match, p1, p2, p3, offset, string) {
990
+ return p1+'="wpforms-'+p2+newFieldID+p3+'"';
991
+ }
992
+ newFieldOptions = newFieldOptions.replace(regex_fieldOptionsID, 'ID #'+newFieldID);
993
+ newFieldOptions = newFieldOptions.replace(regex_fieldID, 'fields['+newFieldID+']');
994
+ newFieldOptions = newFieldOptions.replace(regex_dataFieldID, 'data-field-id="'+newFieldID+'"');
995
+ newFieldOptions = newFieldOptions.replace(regex_referenceID, 'data-reference="'+newFieldID+'"');
996
+ newFieldOptions = newFieldOptions.replace(regex_elementID, regex_elementID_replace);
997
+
998
+ // Add new field options panel
999
+ $fieldOptions.hide().after('<div class="wpforms-field-option wpforms-field-option-'+type+'" id="wpforms-field-option-'+newFieldID+'" data-field-id="'+newFieldID+'">'+newFieldOptions+'</div>');
1000
+
1001
+ // ID adjustments
1002
+ $('#wpforms-field-option-'+newFieldID).find('.wpforms-field-option-hidden-id').val(newFieldID);
1003
+ $('#wpforms-field-id').val(nextID);
1004
+
1005
+ // Adjust label to indicate this is a copy
1006
+ $('#wpforms-field-option-'+newFieldID+'-label').val(newFieldLabel);
1007
+ $newField.find('.label-title .text').text(newFieldLabel);
1008
+
1009
+ // Fire field add custom event
1010
+ $(document).trigger('wpformsFieldAdd', [newFieldID, type]);
1011
+
1012
+ // Lastly, update the next ID stored in database
1013
+ $.post(wpforms_builder.ajax_url, {form_id : s.formID, nonce : wpforms_builder.nonce, action : 'wpforms_builder_increase_next_field_id'});
1014
+ }
1015
+ });
1016
+ }
1017
+ },
1018
+
1019
  /**
1020
  * Add new field.
1021
  *
includes/admin/ajax-actions.php CHANGED
@@ -145,6 +145,32 @@ function wpforms_update_form_template() {
145
  }
146
  add_action( 'wp_ajax_wpforms_update_form_template', 'wpforms_update_form_template' );
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  /**
149
  * Form Builder Dynamic Choices option toggle.
150
  *
145
  }
146
  add_action( 'wp_ajax_wpforms_update_form_template', 'wpforms_update_form_template' );
147
 
148
+ /**
149
+ * Form Builder update next field ID.
150
+ *
151
+ * @since 1.2.9
152
+ */
153
+ function wpforms_builder_increase_next_field_id() {
154
+
155
+ // Run a security check
156
+ check_ajax_referer( 'wpforms-builder', 'nonce' );
157
+
158
+ // Check for permissions
159
+ if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) ) {
160
+ wp_send_json_error();
161
+ }
162
+
163
+ // Check for required items
164
+ if ( empty( $_POST['form_id'] ) ) {
165
+ wp_send_json_error();
166
+ }
167
+
168
+ wpforms()->form->next_field_id( absint( $_POST['form_id'] ) );
169
+
170
+ wp_send_json_success();
171
+ }
172
+ add_action( 'wp_ajax_wpforms_builder_increase_next_field_id', 'wpforms_builder_increase_next_field_id' );
173
+
174
  /**
175
  * Form Builder Dynamic Choices option toggle.
176
  *
includes/admin/builder/class-builder.php CHANGED
@@ -264,7 +264,7 @@ class WPForms_Builder {
264
  'conditionals_change' => __( 'Due to form changes, conditional logic rules have been removed or updated:', 'wpforms' ),
265
  'field' => __( 'Field', 'wpforms' ),
266
  'field_locked' => __( 'Field Locked', 'wpforms' ),
267
- 'field_locked_msg' => __( 'This field cannot be deleted because it required by the form template.', 'wpforms' ),
268
  'fields_available' => __( 'Available Fields', 'wpforms' ),
269
  'fields_unavailable' => __( 'No fields available', 'wpforms' ),
270
  'heads_up' => __( 'Heads up!', 'wpforms' ),
@@ -292,6 +292,8 @@ class WPForms_Builder {
292
  'exit_url' => admin_url( 'admin.php?page=wpforms-overview' ),
293
  'exit_confirm' => __( 'If you exit without saving, your changes will be lost.', 'wpforms' ),
294
  'delete_confirm' => __( 'Are you sure you want to delete this field?', 'wpforms' ),
 
 
295
  'error_title' => __( 'Please enter a form title.', 'wpforms' ),
296
  'error_choice' => __( 'This item must contain at least one choice.', 'wpforms' ),
297
  'off' => __( 'Off', 'wpforms' ),
264
  'conditionals_change' => __( 'Due to form changes, conditional logic rules have been removed or updated:', 'wpforms' ),
265
  'field' => __( 'Field', 'wpforms' ),
266
  'field_locked' => __( 'Field Locked', 'wpforms' ),
267
+ 'field_locked_msg' => __( 'This field cannot be deleted or duplicated.', 'wpforms' ),
268
  'fields_available' => __( 'Available Fields', 'wpforms' ),
269
  'fields_unavailable' => __( 'No fields available', 'wpforms' ),
270
  'heads_up' => __( 'Heads up!', 'wpforms' ),
292
  'exit_url' => admin_url( 'admin.php?page=wpforms-overview' ),
293
  'exit_confirm' => __( 'If you exit without saving, your changes will be lost.', 'wpforms' ),
294
  'delete_confirm' => __( 'Are you sure you want to delete this field?', 'wpforms' ),
295
+ 'duplicate_confirm' => __( 'Are you sure you want to duplicate this field?', 'wpforms' ),
296
+ 'duplicate_copy' => __( '(copy)', 'wpforms'),
297
  'error_title' => __( 'Please enter a form title.', 'wpforms' ),
298
  'error_choice' => __( 'This item must contain at least one choice.', 'wpforms' ),
299
  'off' => __( 'Off', 'wpforms' ),
includes/admin/builder/panels/class-fields.php CHANGED
@@ -208,9 +208,9 @@ class WPForms_Builder_Panel_Fields extends WPForms_Builder_Panel {
208
 
209
  printf( '<div class="wpforms-field-option wpforms-field-option-%s" id="wpforms-field-option-%d" data-field-id="%d">', esc_attr( $field['type'] ), $field['id'], $field['id'] );
210
 
211
- printf( '<input type="hidden" name="fields[%d][id]" value="%d">', $field['id'], $field['id'] );
212
 
213
- printf( '<input type="hidden" name="fields[%d][type]" value="%s">', $field['id'], esc_attr( $field['type'] ) );
214
 
215
  do_action( "wpforms_builder_fields_options_{$field['type']}", $field );
216
 
@@ -247,7 +247,9 @@ class WPForms_Builder_Panel_Fields extends WPForms_Builder_Panel {
247
 
248
  printf( '<div class="wpforms-field wpforms-field-%s %s" id="wpforms-field-%d" data-field-id="%d" data-field-type="%s">', $field['type'], $css, $field['id'], $field['id'], $field['type'] );
249
 
250
- printf( '<a href="#" class="wpforms-field-delete" title="%s"><i class="fa fa-times-circle"></i></a>', __( 'Delete Field', 'wpforms' ) );
 
 
251
 
252
  printf( '<span class="wpforms-field-helper">%s</span>', __( 'Click to edit. Drag to reorder.', 'wpforms' ) );
253
 
208
 
209
  printf( '<div class="wpforms-field-option wpforms-field-option-%s" id="wpforms-field-option-%d" data-field-id="%d">', esc_attr( $field['type'] ), $field['id'], $field['id'] );
210
 
211
+ printf( '<input type="hidden" name="fields[%d][id]" value="%d" class="wpforms-field-option-hidden-id">', $field['id'], $field['id'] );
212
 
213
+ printf( '<input type="hidden" name="fields[%d][type]" value="%s" class="wpforms-field-option-hidden-type">', $field['id'], esc_attr( $field['type'] ) );
214
 
215
  do_action( "wpforms_builder_fields_options_{$field['type']}", $field );
216
 
247
 
248
  printf( '<div class="wpforms-field wpforms-field-%s %s" id="wpforms-field-%d" data-field-id="%d" data-field-type="%s">', $field['type'], $css, $field['id'], $field['id'], $field['type'] );
249
 
250
+ printf( '<a href="#" class="wpforms-field-duplicate" title="%s"><i class="fa fa-files-o" aria-hidden="true"></i></a>', __( 'Duplicate Field', 'wpforms' ) );
251
+
252
+ printf( '<a href="#" class="wpforms-field-delete" title="%s"><i class="fa fa-times-circle" aria-hidden="true"></i></a>', __( 'Delete Field', 'wpforms' ) );
253
 
254
  printf( '<span class="wpforms-field-helper">%s</span>', __( 'Click to edit. Drag to reorder.', 'wpforms' ) );
255
 
includes/class-form.php CHANGED
@@ -43,6 +43,7 @@ class WPForms_Form_Handler {
43
  'show_in_admin_bar' => false,
44
  'rewrite' => false,
45
  'query_var' => false,
 
46
  'supports' => array( 'title' ),
47
  )
48
  );
@@ -209,6 +210,9 @@ class WPForms_Form_Handler {
209
  */
210
  public function update( $form_id = '', $data = array(), $args = array() ) {
211
 
 
 
 
212
  // Check for permissions
213
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) )
214
  return false;
43
  'show_in_admin_bar' => false,
44
  'rewrite' => false,
45
  'query_var' => false,
46
+ 'can_export' => false,
47
  'supports' => array( 'title' ),
48
  )
49
  );
210
  */
211
  public function update( $form_id = '', $data = array(), $args = array() ) {
212
 
213
+ // This filter breaks forms if they contain HTML
214
+ remove_filter( 'content_save_pre', 'balanceTags', 50 );
215
+
216
  // Check for permissions
217
  if ( !current_user_can( apply_filters( 'wpforms_manage_cap', 'manage_options' ) ) )
218
  return false;
includes/class-frontend.php CHANGED
@@ -364,7 +364,7 @@ class WPForms_Frontend {
364
  'label_class' => array(
365
  'wpforms-field-label',
366
  ),
367
- 'label_id' => array(),
368
  'description_class' => array(
369
  'wpforms-field-description'
370
  ),
@@ -420,7 +420,10 @@ class WPForms_Frontend {
420
  $field_atts['label_class'][] = 'wpforms-label-hide';
421
  }
422
 
423
- echo '<label for="wpforms-' . absint( $form_data['id'] ) . '-field_' . absint( $field['id'] ) . '" class="' . implode( ' ', $field_atts['label_class'] ) . '" id="' . implode( ' ', $field_atts['label_id'] ) . '">';
 
 
 
424
 
425
  echo esc_html( $field['label'] );
426
 
@@ -514,7 +517,7 @@ class WPForms_Frontend {
514
 
515
  echo '<div class="wpforms-field wpforms-field-hp" id="wpform-field-hp">';
516
 
517
- echo '<label for="wpforms-field_hp" class="wpforms-field-label" id="">' . esc_html( $names[ array_rand( $names ) ] ) . '</label>';
518
 
519
  echo '<input type="text" name="wpforms[hp]" id="wpforms-field_hp" class="wpforms-field-medium">';
520
 
@@ -787,7 +790,7 @@ class WPForms_Frontend {
787
 
788
  // If we have payment fields then include currency details
789
  $payment_fields = array( 'credit-card', 'payment-single', 'payment-multiple', 'payment-total' );
790
- if ( $this->assets_global() || true == wpforms_has_field_type( $payment_fields , $this->forms, true ) ) :
791
  $currency = wpforms_setting( 'currency', 'USD' );
792
  $currencies = wpforms_get_currencies();
793
  wp_localize_script(
364
  'label_class' => array(
365
  'wpforms-field-label',
366
  ),
367
+ 'label_id' => '',
368
  'description_class' => array(
369
  'wpforms-field-description'
370
  ),
420
  $field_atts['label_class'][] = 'wpforms-label-hide';
421
  }
422
 
423
+ $label_class = !empty( $field_atts['label_class'] ) ? ' class="' . implode( ' ', $field_atts['label_class'] ) . '"' : '';
424
+ $label_id = !empty( $field_atts['label_id'] ) ? ' id="' . $field_atts['label_id'] . '"' : '';
425
+
426
+ echo '<label for="wpforms-' . absint( $form_data['id'] ) . '-field_' . absint( $field['id'] ) . '"' . $label_class . $label_id . '>';
427
 
428
  echo esc_html( $field['label'] );
429
 
517
 
518
  echo '<div class="wpforms-field wpforms-field-hp" id="wpform-field-hp">';
519
 
520
+ echo '<label for="wpforms-field_hp" class="wpforms-field-label">' . esc_html( $names[ array_rand( $names ) ] ) . '</label>';
521
 
522
  echo '<input type="text" name="wpforms[hp]" id="wpforms-field_hp" class="wpforms-field-medium">';
523
 
790
 
791
  // If we have payment fields then include currency details
792
  $payment_fields = array( 'credit-card', 'payment-single', 'payment-multiple', 'payment-total' );
793
+ if ( ( $this->assets_global() || true == wpforms_has_field_type( $payment_fields , $this->forms, true ) ) && function_exists( 'wpforms_get_currencies' ) ) :
794
  $currency = wpforms_setting( 'currency', 'USD' );
795
  $currencies = wpforms_get_currencies();
796
  wp_localize_script(
includes/class-process.php CHANGED
@@ -81,11 +81,12 @@ class WPForms_Process {
81
  }
82
 
83
  // Formatted form data for hooks
84
- $form_data = wpforms_decode( $form->post_content );
85
 
86
  // Pre-process/validate hooks and filter. Data is not validated or
87
  // cleaned yet so use with caution.
88
  $entry = apply_filters( 'wpforms_process_before_filter', $entry, $form_data );
 
89
  do_action( 'wpforms_process_before', $entry, $form_data );
90
  do_action( "wpforms_process_before_{$form_id}", $entry, $form_data );
91
 
81
  }
82
 
83
  // Formatted form data for hooks
84
+ $form_data = apply_filters( 'wpforms_process_before_form_data', wpforms_decode( $form->post_content ), $entry );
85
 
86
  // Pre-process/validate hooks and filter. Data is not validated or
87
  // cleaned yet so use with caution.
88
  $entry = apply_filters( 'wpforms_process_before_filter', $entry, $form_data );
89
+
90
  do_action( 'wpforms_process_before', $entry, $form_data );
91
  do_action( "wpforms_process_before_{$form_id}", $entry, $form_data );
92
 
includes/fields/class-base.php CHANGED
@@ -700,6 +700,7 @@ abstract class WPForms_Field {
700
  $this->field_preview( $field );
701
  $prev = ob_get_clean();
702
  $preview = sprintf( '<div class="wpforms-field wpforms-field-%s %s %s" id="wpforms-field-%d" data-field-id="%d" data-field-type="%s">', $field_type, $field_required, $field_class, $field['id'], $field['id'], $field_type );
 
703
  $preview .= sprintf( '<a href="#" class="wpforms-field-delete" title="%s"><i class="fa fa-times-circle"></i></a>', __( 'Delete Field', 'wpforms' ) );
704
  $preview .= sprintf( '<span class="wpforms-field-helper">%s</span>', __( 'Click to edit. Drag to reorder.', 'wpforms' ) );
705
  $preview .= $prev;
700
  $this->field_preview( $field );
701
  $prev = ob_get_clean();
702
  $preview = sprintf( '<div class="wpforms-field wpforms-field-%s %s %s" id="wpforms-field-%d" data-field-id="%d" data-field-type="%s">', $field_type, $field_required, $field_class, $field['id'], $field['id'], $field_type );
703
+ $preview .= sprintf( '<a href="#" class="wpforms-field-duplicate" title="%s"><i class="fa fa-files-o" aria-hidden="true"></i></a>', __( 'Duplicate Field', 'wpforms' ) );
704
  $preview .= sprintf( '<a href="#" class="wpforms-field-delete" title="%s"><i class="fa fa-times-circle"></i></a>', __( 'Delete Field', 'wpforms' ) );
705
  $preview .= sprintf( '<span class="wpforms-field-helper">%s</span>', __( 'Click to edit. Drag to reorder.', 'wpforms' ) );
706
  $preview .= $prev;
includes/fields/class-checkbox.php CHANGED
@@ -224,7 +224,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
224
  'orderby' => 'title',
225
  'order' => 'ASC' ,
226
  );
227
- $posts = apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] );
228
  $choices = array();
229
 
230
  foreach ( $posts as $post ) {
@@ -314,16 +314,17 @@ class WPForms_Field_Checkbox extends WPForms_Field {
314
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
315
 
316
  // Dynamic population is enabled using post type
317
- $data['dynamic'] = 'post_type';
318
- $data['dynamic_post_type'] = absint( $value_raw );
319
-
320
- $source = $field['dynamic_post_type'];
321
- $posts = array();
 
322
 
323
  foreach ( $field_submit as $id ) {
324
  $post = get_post( $id );
325
 
326
- if ( ! is_wp_error( $post ) && !empty( $post ) && $source == $post->post_type ) {
327
  $posts[] = esc_html( $post->post_title );
328
  }
329
  }
@@ -333,14 +334,15 @@ class WPForms_Field_Checkbox extends WPForms_Field {
333
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
334
 
335
  // Dynamic population is enabled using taxonomy
336
- $data['dynamic'] = 'taxonomy';
337
- $data['dynamic_taxonomy'] = absint( $value_raw );
338
-
339
- $source = $field['dynamic_taxonomy'];
340
- $terms = array();
 
341
 
342
  foreach ( $field_submit as $id ) {
343
- $term = get_term( $id, $source );
344
 
345
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
346
  $terms[] = esc_html( $term->name );
224
  'orderby' => 'title',
225
  'order' => 'ASC' ,
226
  );
227
+ $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
228
  $choices = array();
229
 
230
  foreach ( $posts as $post ) {
314
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
315
 
316
  // Dynamic population is enabled using post type
317
+ $value_raw = implode( ',', array_map( 'absint', $field_submit ) );
318
+ $data['value_raw'] = $value_raw;
319
+ $data['dynamic'] = 'post_type';
320
+ $data['dynamic_items'] = $value_raw;
321
+ $data['dynamic_post_type'] = $field['dynamic_post_type'];
322
+ $posts = array();
323
 
324
  foreach ( $field_submit as $id ) {
325
  $post = get_post( $id );
326
 
327
+ if ( ! is_wp_error( $post ) && !empty( $post ) && $data['dynamic_post_type'] == $post->post_type ) {
328
  $posts[] = esc_html( $post->post_title );
329
  }
330
  }
334
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
335
 
336
  // Dynamic population is enabled using taxonomy
337
+ $value_raw = implode( ',', array_map( 'absint', $field_submit ) );
338
+ $data['value_raw'] = $value_raw;
339
+ $data['dynamic'] = 'taxonomy';
340
+ $data['dynamic_items'] = $value_raw;
341
+ $data['dynamic_taxonomy'] = $field['dynamic_taxonomy'];
342
+ $terms = array();
343
 
344
  foreach ( $field_submit as $id ) {
345
+ $term = get_term( $id, $field['dynamic_taxonomy'] );
346
 
347
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
348
  $terms[] = esc_html( $term->name );
includes/fields/class-radio.php CHANGED
@@ -223,7 +223,7 @@ class WPForms_Field_Radio extends WPForms_Field {
223
  'orderby' => 'title',
224
  'order' => 'ASC' ,
225
  );
226
- $posts = apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] );
227
  $choices = array();
228
 
229
  foreach ( $posts as $post ) {
@@ -312,24 +312,22 @@ class WPForms_Field_Radio extends WPForms_Field {
312
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
313
 
314
  // Dynamic population is enabled using post type
315
- $data['dynamic'] = 'post_type';
316
- $data['dynamic_post_type'] = absint( $value_raw );
 
 
317
 
318
- $source = $field['dynamic_post_type'];
319
- $post = get_post( $value_raw );
320
-
321
- if ( ! is_wp_error( $post ) && !empty( $post ) && $source == $post->post_type ) {
322
  $data['value'] = esc_html( $post->post_title );
323
  }
324
 
325
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
326
 
327
  // Dynamic population is enabled using taxonomy
328
- $data['dynamic'] = 'taxonomy';
329
- $data['dynamic_taxonomy'] = absint( $value_raw );
330
-
331
- $source = $field['dynamic_taxonomy'];
332
- $term = get_term( $value_raw, $source );
333
 
334
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
335
  $data['value'] = esc_html( $term->name );
223
  'orderby' => 'title',
224
  'order' => 'ASC' ,
225
  );
226
+ $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
227
  $choices = array();
228
 
229
  foreach ( $posts as $post ) {
312
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
313
 
314
  // Dynamic population is enabled using post type
315
+ $data['dynamic'] = 'post_type';
316
+ $data['dynamic_items'] = absint( $value_raw );
317
+ $data['dynamic_post_type'] = $field['dynamic_post_type'];
318
+ $post = get_post( $value_raw );
319
 
320
+ if ( ! is_wp_error( $post ) && !empty( $post ) && $data['dynamic_post_type'] == $post->post_type ) {
 
 
 
321
  $data['value'] = esc_html( $post->post_title );
322
  }
323
 
324
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
325
 
326
  // Dynamic population is enabled using taxonomy
327
+ $data['dynamic'] = 'taxonomy';
328
+ $data['dynamic_items'] = absint( $value_raw );
329
+ $data['dynamic_taxonomy'] = $field['dynamic_taxonomy'];
330
+ $term = get_term( $value_raw, $data['dynamic_taxonomy'] );
 
331
 
332
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
333
  $data['value'] = esc_html( $term->name );
includes/fields/class-select.php CHANGED
@@ -236,7 +236,7 @@ class WPForms_Field_Select extends WPForms_Field {
236
  'orderby' => 'title',
237
  'order' => 'ASC' ,
238
  );
239
- $posts = apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] );
240
  $choices = array();
241
 
242
  foreach ( $posts as $post ) {
@@ -308,24 +308,22 @@ class WPForms_Field_Select extends WPForms_Field {
308
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
309
 
310
  // Dynamic population is enabled using post type
311
- $data['dynamic'] = 'post_type';
312
- $data['dynamic_post_type'] = absint( $value_raw );
 
 
313
 
314
- $source = $field['dynamic_post_type'];
315
- $post = get_post( $value_raw );
316
-
317
- if ( ! is_wp_error( $post ) && !empty( $post ) && $source == $post->post_type ) {
318
  $data['value'] = esc_html( $post->post_title );
319
  }
320
 
321
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
322
 
323
  // Dynamic population is enabled using taxonomy
324
- $data['dynamic'] = 'taxonomy';
325
- $data['dynamic_taxonomy'] = absint( $value_raw );
326
-
327
- $source = $field['dynamic_taxonomy'];
328
- $term = get_term( $value_raw, $source );
329
 
330
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
331
  $data['value'] = esc_html( $term->name );
236
  'orderby' => 'title',
237
  'order' => 'ASC' ,
238
  );
239
+ $posts = get_posts( apply_filters( 'wpforms_dynamic_choice_post_type_args', $args, $field, $form_data['id'] ) );
240
  $choices = array();
241
 
242
  foreach ( $posts as $post ) {
308
  if ( 'post_type' == $dynamic && !empty( $field['dynamic_post_type'] ) ) {
309
 
310
  // Dynamic population is enabled using post type
311
+ $data['dynamic'] = 'post_type';
312
+ $data['dynamic_items'] = absint( $value_raw );
313
+ $data['dynamic_post_type'] = $field['dynamic_post_type'];
314
+ $post = get_post( $value_raw );
315
 
316
+ if ( ! is_wp_error( $post ) && !empty( $post ) && $data['dynamic_post_type'] == $post->post_type ) {
 
 
 
317
  $data['value'] = esc_html( $post->post_title );
318
  }
319
 
320
  } elseif ( 'taxonomy' == $dynamic && !empty( $field['dynamic_taxonomy'] ) ) {
321
 
322
  // Dynamic population is enabled using taxonomy
323
+ $data['dynamic'] = 'taxonomy';
324
+ $data['dynamic_items'] = absint( $value_raw );
325
+ $data['dynamic_taxonomy'] = $field['dynamic_taxonomy'];
326
+ $term = get_term( $value_raw, $data['dynamic_taxonomy'] );
 
327
 
328
  if ( ! is_wp_error( $term ) && !empty( $term ) ) {
329
  $data['value'] = esc_html( $term->name );
includes/templates/class-base.php CHANGED
@@ -172,8 +172,8 @@ abstract class WPForms_Template {
172
 
173
  $form_data = wpforms_decode( $form->post_content );
174
 
175
- if ( empty( $this->modal ) || $this->slug != $form_data['meta']['template'] ) {
176
- return $details;
177
  } else {
178
  $display = $this->template_modal_conditional( $form_data );
179
  }
172
 
173
  $form_data = wpforms_decode( $form->post_content );
174
 
175
+ if ( empty( $this->modal ) || empty( $form_data['meta']['template'] ) || $this->slug != $form_data['meta']['template'] ) {
176
+ return $details;
177
  } else {
178
  $display = $this->template_modal_conditional( $form_data );
179
  }
languages/wpforms.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WPForms 1.2.8\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
- "POT-Creation-Date: 2016-09-15 15:59:36+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -40,11 +40,11 @@ msgstr ""
40
  msgid "Error updating form template"
41
  msgstr ""
42
 
43
- #: includes/admin/ajax-actions.php:217 includes/fields/class-base.php:387
44
  msgid "post type"
45
  msgstr ""
46
 
47
- #: includes/admin/ajax-actions.php:236 includes/fields/class-base.php:394
48
  msgid "taxonomy"
49
  msgstr ""
50
 
@@ -84,7 +84,7 @@ msgid "Field Locked"
84
  msgstr ""
85
 
86
  #: includes/admin/builder/class-builder.php:267
87
- msgid "This field cannot be deleted because it required by the form template."
88
  msgstr ""
89
 
90
  #: includes/admin/builder/class-builder.php:268
@@ -140,7 +140,7 @@ msgid "Save and Exit"
140
  msgstr ""
141
 
142
  #: includes/admin/builder/class-builder.php:281
143
- #: includes/admin/builder/class-builder.php:342
144
  msgid "Loading"
145
  msgstr ""
146
 
@@ -165,7 +165,7 @@ msgid "Or you can follow the instructions in this video."
165
  msgstr ""
166
 
167
  #: includes/admin/builder/class-builder.php:291
168
- #: includes/admin/builder/class-builder.php:392
169
  msgid "Exit"
170
  msgstr ""
171
 
@@ -178,81 +178,89 @@ msgid "Are you sure you want to delete this field?"
178
  msgstr ""
179
 
180
  #: includes/admin/builder/class-builder.php:295
181
- msgid "Please enter a form title."
182
  msgstr ""
183
 
184
  #: includes/admin/builder/class-builder.php:296
185
- msgid "This item must contain at least one choice."
186
  msgstr ""
187
 
188
  #: includes/admin/builder/class-builder.php:297
 
 
 
 
 
 
 
 
189
  #: includes/fields/class-base.php:239 includes/fields/class-base.php:523
190
  #: lite/wpforms-lite.php:75 pro/wpforms-pro.php:258
191
  msgid "Off"
192
  msgstr ""
193
 
194
- #: includes/admin/builder/class-builder.php:298
195
  #: includes/fields/class-base.php:239 lite/wpforms-lite.php:74
196
  #: pro/wpforms-pro.php:257
197
  msgid "On"
198
  msgstr ""
199
 
200
- #: includes/admin/builder/class-builder.php:299
201
  #: includes/templates/class-suggestion.php:59
202
  msgid "Other"
203
  msgstr ""
204
 
205
- #: includes/admin/builder/class-builder.php:300
206
- #: includes/class-frontend.php:482
207
  #: pro/includes/fields/class-page-break.php:144
208
  msgid "Previous"
209
  msgstr ""
210
 
211
- #: includes/admin/builder/class-builder.php:303
212
  #: includes/admin/builder/functions.php:210 includes/fields/class-base.php:424
213
  msgid "Show Smart Tags"
214
  msgstr ""
215
 
216
- #: includes/admin/builder/class-builder.php:304
217
  msgid "Hide Smart Tags"
218
  msgstr ""
219
 
220
- #: includes/admin/builder/class-builder.php:305
221
  msgid "-- Select Field --"
222
  msgstr ""
223
 
224
- #: includes/admin/builder/class-builder.php:306
225
- #: pro/includes/class-provider.php:944
226
  msgid "-- Select Choice --"
227
  msgstr ""
228
 
229
- #: includes/admin/builder/class-builder.php:365
230
  msgid "Now editing"
231
  msgstr ""
232
 
233
- #: includes/admin/builder/class-builder.php:375
234
  #: pro/includes/admin/entries/class-entries.php:511
235
  msgid "Preview Form"
236
  msgstr ""
237
 
238
- #: includes/admin/builder/class-builder.php:377
239
  #: includes/admin/overview/class-overview-table.php:159
240
  msgid "Preview"
241
  msgstr ""
242
 
243
- #: includes/admin/builder/class-builder.php:380
244
  msgid "Embed Form"
245
  msgstr ""
246
 
247
- #: includes/admin/builder/class-builder.php:382
248
  msgid "Embed"
249
  msgstr ""
250
 
251
- #: includes/admin/builder/class-builder.php:385
252
  msgid "Save Form"
253
  msgstr ""
254
 
255
- #: includes/admin/builder/class-builder.php:387
256
  #: pro/includes/admin/class-settings.php:441
257
  msgid "Save"
258
  msgstr ""
@@ -306,11 +314,16 @@ msgstr ""
306
 
307
  #: includes/admin/builder/panels/class-fields.php:250
308
  #: includes/fields/class-base.php:703
309
- msgid "Delete Field"
310
  msgstr ""
311
 
312
  #: includes/admin/builder/panels/class-fields.php:252
313
  #: includes/fields/class-base.php:704
 
 
 
 
 
314
  msgid "Click to edit. Drag to reorder."
315
  msgstr ""
316
 
@@ -501,9 +514,9 @@ msgid ""
501
  "a>?"
502
  msgstr ""
503
 
504
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.8) #-#-#-#-#
505
  #. Plugin Name of the plugin/theme
506
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.8) #-#-#-#-#
507
  #. Author of the plugin/theme
508
  #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
509
  #: includes/admin/class-menu.php:51
@@ -520,7 +533,7 @@ msgstr ""
520
 
521
  #: includes/admin/class-menu.php:62
522
  #: includes/admin/overview/class-overview.php:148
523
- #: pro/includes/class-provider.php:1083
524
  msgid "Add New"
525
  msgstr ""
526
 
@@ -769,19 +782,19 @@ msgstr ""
769
  msgid "Invalid form."
770
  msgstr ""
771
 
772
- #: includes/class-process.php:113
773
  msgid "Incorrect reCAPTCHA, please try again."
774
  msgstr ""
775
 
776
- #: includes/class-process.php:120 includes/class-process.php:163
777
  msgid "Form has not been submitted, please see the errors below."
778
  msgstr ""
779
 
780
- #: includes/class-process.php:127
781
  msgid "WPForms honeypot field triggered."
782
  msgstr ""
783
 
784
- #: includes/class-process.php:339 lite/wpforms-lite.php:52
785
  #: pro/wpforms-pro.php:237
786
  msgid "New %s Entry"
787
  msgstr ""
@@ -1062,11 +1075,11 @@ msgstr ""
1062
  msgid "No field type found"
1063
  msgstr ""
1064
 
1065
- #: includes/fields/class-base.php:750 includes/fields/class-email.php:128
1066
  #: includes/fields/class-name.php:311 includes/fields/class-number.php:127
1067
  #: pro/includes/fields/class-address.php:624
1068
  #: pro/includes/fields/class-date-time.php:293
1069
- #: pro/includes/fields/class-file-upload.php:217
1070
  #: pro/includes/fields/class-payment-multiple.php:177
1071
  #: pro/includes/fields/class-payment-single.php:189
1072
  #: pro/includes/fields/class-url.php:126
@@ -1857,7 +1870,7 @@ msgid "Please upload a valid .json form export file."
1857
  msgstr ""
1858
 
1859
  #: pro/includes/admin/class-settings.php:590
1860
- #: pro/includes/admin/entries/class-entries-export.php:298
1861
  msgid "Error"
1862
  msgstr ""
1863
 
@@ -1869,7 +1882,7 @@ msgstr ""
1869
  msgid "ID"
1870
  msgstr ""
1871
 
1872
- #: pro/includes/admin/entries/class-entries-export.php:298
1873
  msgid "You do not have permission to export entries."
1874
  msgstr ""
1875
 
@@ -2201,8 +2214,8 @@ msgstr ""
2201
  msgid "Connection"
2202
  msgstr ""
2203
 
2204
- #: pro/includes/class-provider.php:149 pro/includes/class-provider.php:1128
2205
- #: pro/includes/class-provider.php:1163
2206
  msgid "You do not have permission"
2207
  msgstr ""
2208
 
@@ -2214,7 +2227,7 @@ msgstr ""
2214
  msgid "Select Account"
2215
  msgstr ""
2216
 
2217
- #: pro/includes/class-provider.php:670 pro/includes/class-provider.php:1242
2218
  msgid "Add New Account"
2219
  msgstr ""
2220
 
@@ -2232,76 +2245,76 @@ msgid ""
2232
  "specific list segments below if needed. This is optional."
2233
  msgstr ""
2234
 
2235
- #: pro/includes/class-provider.php:797 pro/includes/class-provider.php:802
2236
  msgid "List Fields"
2237
  msgstr ""
2238
 
2239
- #: pro/includes/class-provider.php:802
2240
  msgid "Available Form Fields"
2241
  msgstr ""
2242
 
2243
- #: pro/includes/class-provider.php:863
2244
  msgid "Conditional Logic"
2245
  msgstr ""
2246
 
2247
- #: pro/includes/class-provider.php:872
2248
  msgid "Enable conditional logic"
2249
  msgstr ""
2250
 
2251
- #: pro/includes/class-provider.php:879
2252
  msgid "Process this form if"
2253
  msgstr ""
2254
 
2255
- #: pro/includes/class-provider.php:910
2256
  msgid "-- Select field --"
2257
  msgstr ""
2258
 
2259
- #: pro/includes/class-provider.php:927
2260
  msgid "is"
2261
  msgstr ""
2262
 
2263
- #: pro/includes/class-provider.php:928
2264
  msgid "is not"
2265
  msgstr ""
2266
 
2267
- #: pro/includes/class-provider.php:962
2268
  msgid "AND"
2269
  msgstr ""
2270
 
2271
- #: pro/includes/class-provider.php:979
2272
  msgid "Add rule group"
2273
  msgstr ""
2274
 
2275
- #: pro/includes/class-provider.php:1132 pro/includes/class-provider.php:1167
2276
  msgid "Missing data"
2277
  msgstr ""
2278
 
2279
- #: pro/includes/class-provider.php:1144
2280
  msgid "Connection missing"
2281
  msgstr ""
2282
 
2283
- #: pro/includes/class-provider.php:1181 pro/includes/class-provider.php:1232
2284
  msgid "Connected on: "
2285
  msgstr ""
2286
 
2287
- #: pro/includes/class-provider.php:1182 pro/includes/class-provider.php:1233
2288
  msgid "Disconnect "
2289
  msgstr ""
2290
 
2291
- #: pro/includes/class-provider.php:1217
2292
  msgid "Integrate %s with WPForms"
2293
  msgstr ""
2294
 
2295
- #: pro/includes/class-provider.php:1218
2296
  msgid "Connected"
2297
  msgstr ""
2298
 
2299
- #: pro/includes/class-provider.php:1248
2300
  msgid ""
2301
  "Please fill out all of the fields below to add your new provider account."
2302
  msgstr ""
2303
 
2304
- #: pro/includes/class-provider.php:1254
2305
  msgid "Connect to"
2306
  msgstr ""
2307
 
@@ -2427,69 +2440,79 @@ msgstr ""
2427
  msgid "File Upload"
2428
  msgstr ""
2429
 
2430
- #: pro/includes/fields/class-file-upload.php:59
 
 
 
 
2431
  msgid "Enter the extensions you would like to allow, comma separated."
2432
  msgstr ""
2433
 
2434
- #: pro/includes/fields/class-file-upload.php:60
2435
- msgid "Allowed File Extensions"
2436
  msgstr ""
2437
 
2438
- #: pro/includes/fields/class-file-upload.php:65
2439
  msgid ""
2440
  "Enter the max file size, in megabytyes, to allow. If left blank, the value "
2441
  "defaults to the maximum size the server allows which is "
2442
  msgstr ""
2443
 
2444
- #: pro/includes/fields/class-file-upload.php:66
2445
- msgid "Max File Size"
2446
  msgstr ""
2447
 
2448
- #: pro/includes/fields/class-file-upload.php:199
 
 
 
 
 
 
2449
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
2450
  msgstr ""
2451
 
2452
- #: pro/includes/fields/class-file-upload.php:200
2453
  msgid ""
2454
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
2455
  "the HTML form."
2456
  msgstr ""
2457
 
2458
- #: pro/includes/fields/class-file-upload.php:201
2459
  msgid "The uploaded file was only partially uploaded."
2460
  msgstr ""
2461
 
2462
- #: pro/includes/fields/class-file-upload.php:202
2463
  msgid "No file was uploaded."
2464
  msgstr ""
2465
 
2466
- #: pro/includes/fields/class-file-upload.php:204
2467
  msgid "Missing a temporary folder."
2468
  msgstr ""
2469
 
2470
- #: pro/includes/fields/class-file-upload.php:205
2471
  msgid "Failed to write file to disk."
2472
  msgstr ""
2473
 
2474
- #: pro/includes/fields/class-file-upload.php:206
2475
  msgid "File upload stopped by extension."
2476
  msgstr ""
2477
 
2478
- #: pro/includes/fields/class-file-upload.php:208
2479
  msgid "File upload error. "
2480
  msgstr ""
2481
 
2482
- #: pro/includes/fields/class-file-upload.php:227
2483
  msgid "File exceeds max size allowed"
2484
  msgstr ""
2485
 
2486
- #: pro/includes/fields/class-file-upload.php:245
2487
  msgid "File must have an extension."
2488
  msgstr ""
2489
 
2490
- #: pro/includes/fields/class-file-upload.php:255
2491
- #: pro/includes/fields/class-file-upload.php:273
2492
- #: pro/includes/fields/class-file-upload.php:291
2493
  msgid "File type is not allowed."
2494
  msgstr ""
2495
 
@@ -2960,9 +2983,9 @@ msgstr ""
2960
  msgid "Please deactivate WPForms Lite before activating WPForms"
2961
  msgstr ""
2962
 
2963
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.8) #-#-#-#-#
2964
  #. Plugin URI of the plugin/theme
2965
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.8) #-#-#-#-#
2966
  #. Author URI of the plugin/theme
2967
  msgid "https://wpforms.com"
2968
  msgstr ""
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WPForms 1.2.9\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
+ "POT-Creation-Date: 2016-10-04 15:34:00+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
40
  msgid "Error updating form template"
41
  msgstr ""
42
 
43
+ #: includes/admin/ajax-actions.php:243 includes/fields/class-base.php:387
44
  msgid "post type"
45
  msgstr ""
46
 
47
+ #: includes/admin/ajax-actions.php:262 includes/fields/class-base.php:394
48
  msgid "taxonomy"
49
  msgstr ""
50
 
84
  msgstr ""
85
 
86
  #: includes/admin/builder/class-builder.php:267
87
+ msgid "This field cannot be deleted or duplicated."
88
  msgstr ""
89
 
90
  #: includes/admin/builder/class-builder.php:268
140
  msgstr ""
141
 
142
  #: includes/admin/builder/class-builder.php:281
143
+ #: includes/admin/builder/class-builder.php:344
144
  msgid "Loading"
145
  msgstr ""
146
 
165
  msgstr ""
166
 
167
  #: includes/admin/builder/class-builder.php:291
168
+ #: includes/admin/builder/class-builder.php:394
169
  msgid "Exit"
170
  msgstr ""
171
 
178
  msgstr ""
179
 
180
  #: includes/admin/builder/class-builder.php:295
181
+ msgid "Are you sure you want to duplicate this field?"
182
  msgstr ""
183
 
184
  #: includes/admin/builder/class-builder.php:296
185
+ msgid "(copy)"
186
  msgstr ""
187
 
188
  #: includes/admin/builder/class-builder.php:297
189
+ msgid "Please enter a form title."
190
+ msgstr ""
191
+
192
+ #: includes/admin/builder/class-builder.php:298
193
+ msgid "This item must contain at least one choice."
194
+ msgstr ""
195
+
196
+ #: includes/admin/builder/class-builder.php:299
197
  #: includes/fields/class-base.php:239 includes/fields/class-base.php:523
198
  #: lite/wpforms-lite.php:75 pro/wpforms-pro.php:258
199
  msgid "Off"
200
  msgstr ""
201
 
202
+ #: includes/admin/builder/class-builder.php:300
203
  #: includes/fields/class-base.php:239 lite/wpforms-lite.php:74
204
  #: pro/wpforms-pro.php:257
205
  msgid "On"
206
  msgstr ""
207
 
208
+ #: includes/admin/builder/class-builder.php:301
209
  #: includes/templates/class-suggestion.php:59
210
  msgid "Other"
211
  msgstr ""
212
 
213
+ #: includes/admin/builder/class-builder.php:302
214
+ #: includes/class-frontend.php:485
215
  #: pro/includes/fields/class-page-break.php:144
216
  msgid "Previous"
217
  msgstr ""
218
 
219
+ #: includes/admin/builder/class-builder.php:305
220
  #: includes/admin/builder/functions.php:210 includes/fields/class-base.php:424
221
  msgid "Show Smart Tags"
222
  msgstr ""
223
 
224
+ #: includes/admin/builder/class-builder.php:306
225
  msgid "Hide Smart Tags"
226
  msgstr ""
227
 
228
+ #: includes/admin/builder/class-builder.php:307
229
  msgid "-- Select Field --"
230
  msgstr ""
231
 
232
+ #: includes/admin/builder/class-builder.php:308
233
+ #: pro/includes/class-provider.php:945
234
  msgid "-- Select Choice --"
235
  msgstr ""
236
 
237
+ #: includes/admin/builder/class-builder.php:367
238
  msgid "Now editing"
239
  msgstr ""
240
 
241
+ #: includes/admin/builder/class-builder.php:377
242
  #: pro/includes/admin/entries/class-entries.php:511
243
  msgid "Preview Form"
244
  msgstr ""
245
 
246
+ #: includes/admin/builder/class-builder.php:379
247
  #: includes/admin/overview/class-overview-table.php:159
248
  msgid "Preview"
249
  msgstr ""
250
 
251
+ #: includes/admin/builder/class-builder.php:382
252
  msgid "Embed Form"
253
  msgstr ""
254
 
255
+ #: includes/admin/builder/class-builder.php:384
256
  msgid "Embed"
257
  msgstr ""
258
 
259
+ #: includes/admin/builder/class-builder.php:387
260
  msgid "Save Form"
261
  msgstr ""
262
 
263
+ #: includes/admin/builder/class-builder.php:389
264
  #: pro/includes/admin/class-settings.php:441
265
  msgid "Save"
266
  msgstr ""
314
 
315
  #: includes/admin/builder/panels/class-fields.php:250
316
  #: includes/fields/class-base.php:703
317
+ msgid "Duplicate Field"
318
  msgstr ""
319
 
320
  #: includes/admin/builder/panels/class-fields.php:252
321
  #: includes/fields/class-base.php:704
322
+ msgid "Delete Field"
323
+ msgstr ""
324
+
325
+ #: includes/admin/builder/panels/class-fields.php:254
326
+ #: includes/fields/class-base.php:705
327
  msgid "Click to edit. Drag to reorder."
328
  msgstr ""
329
 
514
  "a>?"
515
  msgstr ""
516
 
517
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.9) #-#-#-#-#
518
  #. Plugin Name of the plugin/theme
519
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.9) #-#-#-#-#
520
  #. Author of the plugin/theme
521
  #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
522
  #: includes/admin/class-menu.php:51
533
 
534
  #: includes/admin/class-menu.php:62
535
  #: includes/admin/overview/class-overview.php:148
536
+ #: pro/includes/class-provider.php:1084
537
  msgid "Add New"
538
  msgstr ""
539
 
782
  msgid "Invalid form."
783
  msgstr ""
784
 
785
+ #: includes/class-process.php:114
786
  msgid "Incorrect reCAPTCHA, please try again."
787
  msgstr ""
788
 
789
+ #: includes/class-process.php:121 includes/class-process.php:164
790
  msgid "Form has not been submitted, please see the errors below."
791
  msgstr ""
792
 
793
+ #: includes/class-process.php:128
794
  msgid "WPForms honeypot field triggered."
795
  msgstr ""
796
 
797
+ #: includes/class-process.php:340 lite/wpforms-lite.php:52
798
  #: pro/wpforms-pro.php:237
799
  msgid "New %s Entry"
800
  msgstr ""
1075
  msgid "No field type found"
1076
  msgstr ""
1077
 
1078
+ #: includes/fields/class-base.php:751 includes/fields/class-email.php:128
1079
  #: includes/fields/class-name.php:311 includes/fields/class-number.php:127
1080
  #: pro/includes/fields/class-address.php:624
1081
  #: pro/includes/fields/class-date-time.php:293
1082
+ #: pro/includes/fields/class-file-upload.php:358
1083
  #: pro/includes/fields/class-payment-multiple.php:177
1084
  #: pro/includes/fields/class-payment-single.php:189
1085
  #: pro/includes/fields/class-url.php:126
1870
  msgstr ""
1871
 
1872
  #: pro/includes/admin/class-settings.php:590
1873
+ #: pro/includes/admin/entries/class-entries-export.php:299
1874
  msgid "Error"
1875
  msgstr ""
1876
 
1882
  msgid "ID"
1883
  msgstr ""
1884
 
1885
+ #: pro/includes/admin/entries/class-entries-export.php:299
1886
  msgid "You do not have permission to export entries."
1887
  msgstr ""
1888
 
2214
  msgid "Connection"
2215
  msgstr ""
2216
 
2217
+ #: pro/includes/class-provider.php:149 pro/includes/class-provider.php:1129
2218
+ #: pro/includes/class-provider.php:1164
2219
  msgid "You do not have permission"
2220
  msgstr ""
2221
 
2227
  msgid "Select Account"
2228
  msgstr ""
2229
 
2230
+ #: pro/includes/class-provider.php:670 pro/includes/class-provider.php:1243
2231
  msgid "Add New Account"
2232
  msgstr ""
2233
 
2245
  "specific list segments below if needed. This is optional."
2246
  msgstr ""
2247
 
2248
+ #: pro/includes/class-provider.php:798 pro/includes/class-provider.php:803
2249
  msgid "List Fields"
2250
  msgstr ""
2251
 
2252
+ #: pro/includes/class-provider.php:803
2253
  msgid "Available Form Fields"
2254
  msgstr ""
2255
 
2256
+ #: pro/includes/class-provider.php:864
2257
  msgid "Conditional Logic"
2258
  msgstr ""
2259
 
2260
+ #: pro/includes/class-provider.php:873
2261
  msgid "Enable conditional logic"
2262
  msgstr ""
2263
 
2264
+ #: pro/includes/class-provider.php:880
2265
  msgid "Process this form if"
2266
  msgstr ""
2267
 
2268
+ #: pro/includes/class-provider.php:911
2269
  msgid "-- Select field --"
2270
  msgstr ""
2271
 
2272
+ #: pro/includes/class-provider.php:928
2273
  msgid "is"
2274
  msgstr ""
2275
 
2276
+ #: pro/includes/class-provider.php:929
2277
  msgid "is not"
2278
  msgstr ""
2279
 
2280
+ #: pro/includes/class-provider.php:963
2281
  msgid "AND"
2282
  msgstr ""
2283
 
2284
+ #: pro/includes/class-provider.php:980
2285
  msgid "Add rule group"
2286
  msgstr ""
2287
 
2288
+ #: pro/includes/class-provider.php:1133 pro/includes/class-provider.php:1168
2289
  msgid "Missing data"
2290
  msgstr ""
2291
 
2292
+ #: pro/includes/class-provider.php:1145
2293
  msgid "Connection missing"
2294
  msgstr ""
2295
 
2296
+ #: pro/includes/class-provider.php:1182 pro/includes/class-provider.php:1233
2297
  msgid "Connected on: "
2298
  msgstr ""
2299
 
2300
+ #: pro/includes/class-provider.php:1183 pro/includes/class-provider.php:1234
2301
  msgid "Disconnect "
2302
  msgstr ""
2303
 
2304
+ #: pro/includes/class-provider.php:1218
2305
  msgid "Integrate %s with WPForms"
2306
  msgstr ""
2307
 
2308
+ #: pro/includes/class-provider.php:1219
2309
  msgid "Connected"
2310
  msgstr ""
2311
 
2312
+ #: pro/includes/class-provider.php:1249
2313
  msgid ""
2314
  "Please fill out all of the fields below to add your new provider account."
2315
  msgstr ""
2316
 
2317
+ #: pro/includes/class-provider.php:1255
2318
  msgid "Connect to"
2319
  msgstr ""
2320
 
2440
  msgid "File Upload"
2441
  msgstr ""
2442
 
2443
+ #: pro/includes/fields/class-file-upload.php:140
2444
+ msgid "Allowed File Extensions"
2445
+ msgstr ""
2446
+
2447
+ #: pro/includes/fields/class-file-upload.php:141
2448
  msgid "Enter the extensions you would like to allow, comma separated."
2449
  msgstr ""
2450
 
2451
+ #: pro/includes/fields/class-file-upload.php:162
2452
+ msgid "Max File Size"
2453
  msgstr ""
2454
 
2455
+ #: pro/includes/fields/class-file-upload.php:163
2456
  msgid ""
2457
  "Enter the max file size, in megabytyes, to allow. If left blank, the value "
2458
  "defaults to the maximum size the server allows which is "
2459
  msgstr ""
2460
 
2461
+ #: pro/includes/fields/class-file-upload.php:207
2462
+ msgid "Store file in WordPress Media Library"
2463
  msgstr ""
2464
 
2465
+ #: pro/includes/fields/class-file-upload.php:208
2466
+ msgid ""
2467
+ "Check this option to store the final uploaded file in the WordPress Media "
2468
+ "Library"
2469
+ msgstr ""
2470
+
2471
+ #: pro/includes/fields/class-file-upload.php:340
2472
  msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
2473
  msgstr ""
2474
 
2475
+ #: pro/includes/fields/class-file-upload.php:341
2476
  msgid ""
2477
  "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
2478
  "the HTML form."
2479
  msgstr ""
2480
 
2481
+ #: pro/includes/fields/class-file-upload.php:342
2482
  msgid "The uploaded file was only partially uploaded."
2483
  msgstr ""
2484
 
2485
+ #: pro/includes/fields/class-file-upload.php:343
2486
  msgid "No file was uploaded."
2487
  msgstr ""
2488
 
2489
+ #: pro/includes/fields/class-file-upload.php:345
2490
  msgid "Missing a temporary folder."
2491
  msgstr ""
2492
 
2493
+ #: pro/includes/fields/class-file-upload.php:346
2494
  msgid "Failed to write file to disk."
2495
  msgstr ""
2496
 
2497
+ #: pro/includes/fields/class-file-upload.php:347
2498
  msgid "File upload stopped by extension."
2499
  msgstr ""
2500
 
2501
+ #: pro/includes/fields/class-file-upload.php:349
2502
  msgid "File upload error. "
2503
  msgstr ""
2504
 
2505
+ #: pro/includes/fields/class-file-upload.php:368
2506
  msgid "File exceeds max size allowed"
2507
  msgstr ""
2508
 
2509
+ #: pro/includes/fields/class-file-upload.php:386
2510
  msgid "File must have an extension."
2511
  msgstr ""
2512
 
2513
+ #: pro/includes/fields/class-file-upload.php:396
2514
+ #: pro/includes/fields/class-file-upload.php:415
2515
+ #: pro/includes/fields/class-file-upload.php:433
2516
  msgid "File type is not allowed."
2517
  msgstr ""
2518
 
2983
  msgid "Please deactivate WPForms Lite before activating WPForms"
2984
  msgstr ""
2985
 
2986
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.9) #-#-#-#-#
2987
  #. Plugin URI of the plugin/theme
2988
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.9) #-#-#-#-#
2989
  #. Author URI of the plugin/theme
2990
  msgid "https://wpforms.com"
2991
  msgstr ""
readme.txt CHANGED
@@ -163,6 +163,15 @@ Syed Balkhi
163
 
164
  == Changelog ==
165
 
 
 
 
 
 
 
 
 
 
166
  = 1.2.8.1 =
167
  - Fixed: Form javascript email validation being too strict (introducted in 1.2.8)
168
 
163
 
164
  == Changelog ==
165
 
166
+ = 1.2.9 =
167
+ - Added: Individual fields can be duplicated in the form builder
168
+ - Changed: How data is stored for fields using Dynanic Choices
169
+ - Fixed: Global assets setting causing errors in some cases
170
+ - Fixed: Writing setting ("correct invalidly nested XHTML") breaking forms containing HTML
171
+ - Fixed: Forms being displayed/included on the native WordPress Export page
172
+ - Fixed: Dynamic Choices erroring when used with Post Types
173
+ - Fixed: Form labels including blank IDs
174
+
175
  = 1.2.8.1 =
176
  - Fixed: Form javascript email validation being too strict (introducted in 1.2.8)
177
 
wpforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
- * Version: 1.2.8.1
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
@@ -81,7 +81,7 @@ final class WPForms {
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
- public $version = '1.2.8.1';
85
 
86
  /**
87
  * The form data handler instance.
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
+ * Version: 1.2.9
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
+ public $version = '1.2.9';
85
 
86
  /**
87
  * The form data handler instance.