Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms - Version 1.7.10

Version Description

  • New feature: Added 'Include submitted values' option in Step 2 that allows you to send submitted data in a confirmation email sent to a user.
  • Improvement: Multi-line and Text Editor parts now support minimium and maximum character and word counter.
  • Bugfix: Long Text part was ignoring new lines when displaying submitted value in email.
Download this release

Release Info

Developer thethemefoundry
Plugin Icon 128x128 Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms
Version 1.7.10
Comparing to
See all releases

Code changes from version 1.7.9 to 1.7.10

happyforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://happyforms.me
6
  * Description: Your friendly drag and drop contact form builder for creating contact forms, lead generation forms, feedback forms, quote forms, survey forms and more!
7
  * Author: The Theme Foundry
8
- * Version: 1.7.9
9
  * Author URI: https://thethemefoundry.com
10
  * Upgrade URI: https://thethemefoundry.com
11
  */
@@ -13,7 +13,7 @@
13
  /**
14
  * The current version of the plugin.
15
  */
16
- define( 'HAPPYFORMS_VERSION', '1.7.9' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
5
  * Plugin URI: https://happyforms.me
6
  * Description: Your friendly drag and drop contact form builder for creating contact forms, lead generation forms, feedback forms, quote forms, survey forms and more!
7
  * Author: The Theme Foundry
8
+ * Version: 1.7.10
9
  * Author URI: https://thethemefoundry.com
10
  * Upgrade URI: https://thethemefoundry.com
11
  */
13
  /**
14
  * The current version of the plugin.
15
  */
16
+ define( 'HAPPYFORMS_VERSION', '1.7.10' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
inc/core/assets/css/admin.css CHANGED
@@ -272,4 +272,45 @@ p.welcome-panel-footer a:active {
272
 
273
  .wp-list-table .happyforms-responses-column-label {
274
  display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  }
272
 
273
  .wp-list-table .happyforms-responses-column-label {
274
  display: none;
275
+ }
276
+
277
+ .happyforms-responses-count-wrapper {
278
+ white-space: nowrap;
279
+ word-wrap: normal;
280
+ }
281
+
282
+ .happyforms-responses-count {
283
+ margin-top: 5px;
284
+ }
285
+
286
+ .happyforms-responses-count-bubble {
287
+ box-sizing: border-box;
288
+ display: inline-block;
289
+ padding: 0 8px;
290
+ min-width: 24px;
291
+ height: 2em;
292
+ border-radius: 5px;
293
+ background-color: #72777c;
294
+ color: #fff;
295
+ font-size: 11px;
296
+ line-height: 21px;
297
+ text-align: center;
298
+ }
299
+
300
+ .happyforms-responses-count-bubble:after {
301
+ content: '';
302
+ display: block;
303
+ margin-left: 1px;
304
+ width: 0;
305
+ height: 0;
306
+ border-top: 6px solid #72777c;
307
+ border-right: 6px solid transparent;
308
+ }
309
+
310
+ .happyforms-responses-count-wrapper a:hover .happyforms-responses-count-bubble {
311
+ background-color: #0073aa;
312
+ }
313
+
314
+ .happyforms-responses-count-wrapper a:hover .happyforms-responses-count-bubble:after {
315
+ border-top-color: #0073aa;
316
  }
inc/core/assets/css/customize.css CHANGED
@@ -324,6 +324,7 @@ a.happyforms-form-part-remove:hover {
324
  #customize-control-confirmation_email_from_name,
325
  #customize-control-confirmation_email_subject,
326
  #customize-control-confirmation_email_content,
 
327
  #customize-control-captcha_site_key,
328
  #customize-control-captcha_secret_key,
329
  #customize-control-captcha_label,
@@ -345,6 +346,7 @@ a.happyforms-form-part-remove:hover {
345
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_from_name,
346
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_subject,
347
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_content,
 
348
  #customize-control-captcha.checked ~ #customize-control-captcha_site_key,
349
  #customize-control-captcha.checked ~ #customize-control-captcha_secret_key,
350
  #customize-control-captcha.checked ~ #customize-control-captcha_label,
@@ -640,6 +642,19 @@ textarea.option-import-area {
640
  color: #dc3232;
641
  }
642
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  /**
644
  *
645
  * Form parts drawer
@@ -1119,7 +1134,8 @@ li.customize-control.happyforms-buttonset-control + .customize-control h2 {
1119
  }
1120
 
1121
  #customize-control-html_id input,
1122
- #customize-control-submit_button_html_class input {
 
1123
  padding-top: 6px;
1124
  font-family: Consolas, Monaco, monospace;
1125
  direction: ltr;
324
  #customize-control-confirmation_email_from_name,
325
  #customize-control-confirmation_email_subject,
326
  #customize-control-confirmation_email_content,
327
+ #customize-control-confirmation_email_include_values,
328
  #customize-control-captcha_site_key,
329
  #customize-control-captcha_secret_key,
330
  #customize-control-captcha_label,
346
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_from_name,
347
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_subject,
348
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_content,
349
+ #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_include_values,
350
  #customize-control-captcha.checked ~ #customize-control-captcha_site_key,
351
  #customize-control-captcha.checked ~ #customize-control-captcha_secret_key,
352
  #customize-control-captcha.checked ~ #customize-control-captcha_label,
642
  color: #dc3232;
643
  }
644
 
645
+ div.character-limit-settings {
646
+ display: flex;
647
+ justify-content: space-between;
648
+ }
649
+
650
+ div.character-limit-settings input[type=number] {
651
+ width: 35%;
652
+ }
653
+
654
+ div.character-limit-settings select {
655
+ width: 60%;
656
+ }
657
+
658
  /**
659
  *
660
  * Form parts drawer
1134
  }
1135
 
1136
  #customize-control-html_id input,
1137
+ #customize-control-submit_button_html_class input,
1138
+ .happyforms-widget-content input[data-bind=css_class] {
1139
  padding-top: 6px;
1140
  font-family: Consolas, Monaco, monospace;
1141
  direction: ltr;
inc/core/assets/js/frontend/long-text.js CHANGED
@@ -16,15 +16,28 @@
16
  this.refreshCounter();
17
  },
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  refreshCounter: function() {
20
- var maxLength = parseInt( this.$input.attr( 'data-max-length' ), 10 );
21
 
22
- if ( maxLength < 1 ) {
23
  return;
24
  }
25
 
26
- var remaining = maxLength - this.$input.val().length;
27
- this.$counter.text( remaining );
28
  },
29
  };
30
 
16
  this.refreshCounter();
17
  },
18
 
19
+ getValueLength: function() {
20
+ var mode = this.$input.attr( 'data-length-mode' );
21
+ var value = this.$input.val();
22
+ var length = value.length;
23
+
24
+ if ( 'word' === mode ) {
25
+ var matches = value.match( /\w+/g );
26
+ length = matches ? matches.length : 0;
27
+ }
28
+
29
+ return length;
30
+ },
31
+
32
  refreshCounter: function() {
33
+ var hasLength = parseInt( this.$input.attr( 'data-length' ), 10 );
34
 
35
+ if ( hasLength < 1 ) {
36
  return;
37
  }
38
 
39
+ var length = this.getValueLength();
40
+ this.$counter.text( length );
41
  },
42
  };
43
 
inc/core/assets/js/frontend/rich-text.js CHANGED
@@ -232,22 +232,32 @@
232
  } );
233
  },
234
 
235
- refreshCounter: function() {
236
- var maxLength = parseInt( this.$input.attr( 'data-max-length' ) );
237
-
238
- if ( maxLength < 1 ) {
239
- return;
 
 
 
 
 
 
 
240
  }
241
 
242
- var content = this.editor.getContent( { format : 'text' } );
243
- var length = content.length;
244
 
245
- if ( '\n' === content ) {
246
- length --;
 
 
 
247
  }
248
 
249
- var remaining = maxLength - length;
250
- $( '.happyforms-part__char-counter span', this.$el ).text( remaining );
251
  },
252
 
253
  editorDestroy: function() {
232
  } );
233
  },
234
 
235
+ getValueLength: function() {
236
+ var mode = this.$input.attr( 'data-length-mode' );
237
+ var value = this.editor.getContent( { format : 'text' } );
238
+ var length = value.length;
239
+
240
+ if ( 'word' === mode ) {
241
+ var matches = value.match( /\w+/g );
242
+ length = matches ? matches.length : 0;
243
+ } else {
244
+ if ( '\n' === value ) {
245
+ length --;
246
+ }
247
  }
248
 
249
+ return length;
250
+ },
251
 
252
+ refreshCounter: function() {
253
+ var hasLength = parseInt( this.$input.attr( 'data-length' ), 10 );
254
+
255
+ if ( hasLength < 1 ) {
256
+ return;
257
  }
258
 
259
+ var length = this.getValueLength();
260
+ $( '.happyforms-part__char-counter span', this.$el ).text( length );
261
  },
262
 
263
  editorDestroy: function() {
inc/core/assets/js/parts/part-multi-line-text.js CHANGED
@@ -18,6 +18,7 @@
18
 
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
 
21
  },
22
 
23
  /**
@@ -38,12 +39,16 @@
38
  },
39
 
40
  onCharacterLimitChange: function() {
41
- var data = {
42
- id: this.model.get( 'id' ),
43
- callback: 'onCharacterLimitChangeCallback',
44
- };
45
 
46
- happyForms.previewSend( 'happyforms-part-dom-update', data );
 
 
 
 
 
 
 
47
  },
48
  } );
49
 
@@ -54,22 +59,6 @@
54
 
55
  this.$( 'textarea', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
56
  },
57
-
58
- onCharacterLimitChangeCallback: function( id, html, options ) {
59
- var part = this.getPartModel( id );
60
- var $part = this.getPartElement( html );
61
- var $counter = this.$( '.happyforms-part__char-counter', $part );
62
- var limit = parseInt( part.get( 'character_limit' ), 10 ) || 0;
63
-
64
- if ( limit < 1 ) {
65
- $counter.hide();
66
- } else {
67
- $counter.show();
68
- }
69
-
70
- this.$( 'textarea', $part ).attr( 'data-max-length', part.get( 'character_limit' ) );
71
- this.$( 'span', $counter ).text( part.get( 'character_limit' ) );
72
- },
73
  } );
74
 
75
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
18
 
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
21
+ this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitChange );
22
  },
23
 
24
  /**
39
  },
40
 
41
  onCharacterLimitChange: function() {
42
+ var model = this.model;
 
 
 
43
 
44
+ model.fetchHtml( function( response ) {
45
+ var data = {
46
+ id: model.get( 'id' ),
47
+ html: response,
48
+ };
49
+
50
+ happyForms.previewSend( 'happyforms-form-part-refresh', data );
51
+ } );
52
  },
53
  } );
54
 
59
 
60
  this.$( 'textarea', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
61
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  } );
63
 
64
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-rich-text.js CHANGED
@@ -18,6 +18,7 @@
18
 
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
 
21
  },
22
 
23
  /**
@@ -38,12 +39,16 @@
38
  },
39
 
40
  onCharacterLimitChange: function() {
41
- var data = {
42
- id: this.model.get( 'id' ),
43
- callback: 'onCharacterLimitChangeCallback',
44
- };
45
 
46
- happyForms.previewSend( 'happyforms-part-dom-update', data );
 
 
 
 
 
 
 
47
  },
48
  } );
49
 
@@ -54,22 +59,6 @@
54
 
55
  this.$( 'textarea', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
56
  },
57
-
58
- onCharacterLimitChangeCallback: function( id, html, options ) {
59
- var part = this.getPartModel( id );
60
- var $part = this.getPartElement( html );
61
- var $counter = this.$( '.happyforms-part__char-counter', $part );
62
- var limit = parseInt( part.get( 'character_limit' ), 10 ) || 0;
63
-
64
- if ( limit < 1 ) {
65
- $counter.hide();
66
- } else {
67
- $counter.show();
68
- }
69
-
70
- this.$( 'textarea', $part ).attr( 'data-max-length', part.get( 'character_limit' ) );
71
- this.$( 'span', $counter ).text( part.get( 'character_limit' ) );
72
- },
73
  } );
74
 
75
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
18
 
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
21
+ this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitChange );
22
  },
23
 
24
  /**
39
  },
40
 
41
  onCharacterLimitChange: function() {
42
+ var model = this.model;
 
 
 
43
 
44
+ model.fetchHtml( function( response ) {
45
+ var data = {
46
+ id: model.get( 'id' ),
47
+ html: response,
48
+ };
49
+
50
+ happyForms.previewSend( 'happyforms-form-part-refresh', data );
51
+ } );
52
  },
53
  } );
54
 
59
 
60
  this.$( 'textarea', $part ).attr( 'placeholder', part.get( 'placeholder' ) );
61
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  } );
63
 
64
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/classes/class-form-admin.php CHANGED
@@ -291,11 +291,25 @@ class HappyForms_Form_Admin {
291
  case 'messages':
292
  $messages_url = admin_url( "/edit.php?post_type=happyforms-message&form_id={$id}" );
293
  $messages = happyforms_get_message_controller()->get_by_form( $id );
294
- $message_link = sprintf(
295
- '<a href="%s">%d</a>',
296
- $messages_url, count( $messages )
297
- );
298
- echo $message_link;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  break;
300
 
301
  case 'shortcode':
291
  case 'messages':
292
  $messages_url = admin_url( "/edit.php?post_type=happyforms-message&form_id={$id}" );
293
  $messages = happyforms_get_message_controller()->get_by_form( $id );
294
+
295
+ $message_html = '—';
296
+
297
+ if ( 0 < count( $messages ) ) {
298
+ $message_html = sprintf(
299
+ '<span class="happyforms-responses-count-wrapper happyforms-responses-count-%d">
300
+ <a href="%s" class="%s">
301
+ <span class="%s" aria-hidden="true">%d</span>
302
+ </a>
303
+ </span>',
304
+ count( $messages ),
305
+ $messages_url,
306
+ 'happyforms-responses-count happyforms-responses-count-approved',
307
+ 'happyforms-responses-count-bubble',
308
+ count( $messages )
309
+ );
310
+ }
311
+
312
+ echo $message_html;
313
  break;
314
 
315
  case 'shortcode':
inc/core/classes/class-form-setup.php CHANGED
@@ -98,6 +98,10 @@ class HappyForms_Form_Setup {
98
  'default' => __( 'Your message has been successfully sent. We appreciate you contacting us and we’ll be in touch soon.', 'happyforms' ),
99
  'sanitize' => 'esc_html',
100
  ),
 
 
 
 
101
  'redirect_on_complete' => array(
102
  'default' => 0,
103
  'sanitize' => 'happyforms_sanitize_checkbox',
@@ -251,6 +255,11 @@ class HappyForms_Form_Setup {
251
  'tooltip' => __( 'If your form contains an email field, recipients will receive an email with this content.', 'happyforms' ),
252
  'field' => 'confirmation_email_content',
253
  ),
 
 
 
 
 
254
  900 => array(
255
  'type' => 'text',
256
  'label' => __( 'Optional part label', 'happyforms' ),
98
  'default' => __( 'Your message has been successfully sent. We appreciate you contacting us and we’ll be in touch soon.', 'happyforms' ),
99
  'sanitize' => 'esc_html',
100
  ),
101
+ 'confirmation_email_include_values' => array(
102
+ 'default' => 0,
103
+ 'sanitize' => 'happyforms_sanitize_checkbox'
104
+ ),
105
  'redirect_on_complete' => array(
106
  'default' => 0,
107
  'sanitize' => 'happyforms_sanitize_checkbox',
255
  'tooltip' => __( 'If your form contains an email field, recipients will receive an email with this content.', 'happyforms' ),
256
  'field' => 'confirmation_email_content',
257
  ),
258
+ 810 => array(
259
+ 'type' => 'checkbox',
260
+ 'label' => __( 'Include submitted values', 'happyforms' ),
261
+ 'field' => 'confirmation_email_include_values'
262
+ ),
263
  900 => array(
264
  'type' => 'text',
265
  'label' => __( 'Optional part label', 'happyforms' ),
inc/core/classes/class-form-styles.php CHANGED
@@ -841,12 +841,12 @@ class HappyForms_Form_Styles {
841
  ),
842
  6300 => array(
843
  'type' => 'range',
844
- 'label' => __( 'Font Size', 'happyforms' ),
845
  'field' => 'submit_button_font_size',
846
  ),
847
  6400 => array(
848
  'type' => 'buttonset',
849
- 'label' => __( 'Font Weight', 'happyforms' ),
850
  'field' => 'submit_button_font_weight',
851
  ),
852
  6500 => array(
841
  ),
842
  6300 => array(
843
  'type' => 'range',
844
+ 'label' => __( 'Font size', 'happyforms' ),
845
  'field' => 'submit_button_font_size',
846
  ),
847
  6400 => array(
848
  'type' => 'buttonset',
849
+ 'label' => __( 'Font weight', 'happyforms' ),
850
  'field' => 'submit_button_font_weight',
851
  ),
852
  6500 => array(
inc/core/classes/class-message-controller.php CHANGED
@@ -209,8 +209,8 @@ class HappyForms_Message_Controller {
209
  $labels = array(
210
  'name' => __( 'Responses', 'happyforms' ),
211
  'singular_name' => __( 'Response', 'happyforms' ),
212
- 'edit_item' => __( 'Edit response', 'happyforms' ),
213
- 'view_item' => __( 'View response', 'happyforms' ),
214
  'view_items' => __( 'View Responses', 'happyforms' ),
215
  'search_items' => __( 'Search Responses', 'happyforms' ),
216
  'not_found' => __( 'No response found', 'happyforms' ),
209
  $labels = array(
210
  'name' => __( 'Responses', 'happyforms' ),
211
  'singular_name' => __( 'Response', 'happyforms' ),
212
+ 'edit_item' => __( 'View Response', 'happyforms' ),
213
+ 'view_item' => __( 'View Response', 'happyforms' ),
214
  'view_items' => __( 'View Responses', 'happyforms' ),
215
  'search_items' => __( 'Search Responses', 'happyforms' ),
216
  'not_found' => __( 'No response found', 'happyforms' ),
inc/core/classes/class-session.php CHANGED
@@ -38,6 +38,8 @@ class HappyForms_Session {
38
  */
39
  private $values = array();
40
 
 
 
41
  /**
42
  * Current form step
43
  *
@@ -88,6 +90,20 @@ class HappyForms_Session {
88
  $this->notices[$key] = $message;
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  public function remove_notice( $key ) {
92
  if ( isset( $this->notices[$key] ) ) {
93
  unset( $this->notices[$key] );
38
  */
39
  private $values = array();
40
 
41
+ private $states = array();
42
+
43
  /**
44
  * Current form step
45
  *
90
  $this->notices[$key] = $message;
91
  }
92
 
93
+ public function add_state( $key, $state ) {
94
+ $this->states[$key][] = $state;
95
+ }
96
+
97
+ public function get_states( $location = '' ) {
98
+ $states = array();
99
+
100
+ if ( isset( $this->states[$location] ) ) {
101
+ $states = $this->states[$location];
102
+ }
103
+
104
+ return $states;
105
+ }
106
+
107
  public function remove_notice( $key ) {
108
  if ( isset( $this->notices[$key] ) ) {
109
  unset( $this->notices[$key] );
inc/core/classes/parts/class-part-checkbox.php CHANGED
@@ -208,8 +208,8 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
208
  return $value;
209
  }
210
 
211
- public function stringify_value( $value, $part, $form ) {
212
- if ( $this->type === $part['type'] ) {
213
  $options = happyforms_get_part_options( $part['options'], $part, $form );
214
  $labels = wp_list_pluck( $options, 'label' );
215
 
208
  return $value;
209
  }
210
 
211
+ public function stringify_value( $value, $part, $form, $force = false ) {
212
+ if ( $this->type === $part['type'] || $force ) {
213
  $options = happyforms_get_part_options( $part['options'], $part, $form );
214
  $labels = wp_list_pluck( $options, 'label' );
215
 
inc/core/classes/parts/class-part-multi-line-text.php CHANGED
@@ -9,6 +9,8 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
 
 
12
  add_filter( 'happyforms_part_attributes', array( $this, 'html_part_attributes' ), 10, 2 );
13
  add_action( 'happyforms_part_input_after', array( $this, 'part_input_after' ) );
14
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
@@ -52,6 +54,13 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
52
  'default' => '',
53
  'sanitize' => 'sanitize_text_field',
54
  ),
 
 
 
 
 
 
 
55
  'width' => array(
56
  'default' => 'full',
57
  'sanitize' => 'sanitize_key'
@@ -154,13 +163,21 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
154
  $validated_value = new WP_Error( 'error', __( 'This field is required.', 'happyforms' ) );
155
  }
156
 
157
- if ( isset( $part['character_limit'] ) ) {
158
- $character_limit = intval( $part['character_limit'] );
159
-
160
- if ( $character_limit > 0 ) {
161
- if ( strlen( $validated_value ) > $character_limit ) {
162
- return new WP_Error( 'error', __( 'Value exceeds character limit.', 'happyforms' ) );
163
- }
 
 
 
 
 
 
 
 
164
  }
165
  }
166
 
@@ -189,6 +206,37 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
189
  return $class;
190
  }
191
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  public function html_part_attributes( $attrs, $part ) {
193
  if ( $this->type !== $part['type'] ) {
194
  return $attrs;
@@ -196,7 +244,9 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
196
 
197
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
198
  $limit = intval( $part['character_limit'] );
199
- $attrs[] = "data-max-length=\"{$limit}\"";
 
 
200
  }
201
 
202
  return $attrs;
@@ -209,14 +259,31 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
209
 
210
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
211
  $limit = intval( $part['character_limit'] );
 
212
  ?>
213
  <div class="happyforms-part__char-counter" <?php if ( happyforms_is_preview() && empty( $part['character_limit'] ) ) : ?>style="display: none;"<?php endif; ?>>
214
- <span><?php echo $limit; ?></span> <?php _e( 'characters', 'happyforms' ); ?>
215
  </div>
216
  <?php
217
  }
218
  }
219
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  public function script_dependencies( $deps, $forms ) {
221
  $contains_long_text = false;
222
  $form_controller = happyforms_get_form_controller();
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
12
+ add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 4 );
13
+ add_filter( 'happyforms_message_part_value', array( $this, 'message_part_value' ), 10, 4 );
14
  add_filter( 'happyforms_part_attributes', array( $this, 'html_part_attributes' ), 10, 2 );
15
  add_action( 'happyforms_part_input_after', array( $this, 'part_input_after' ) );
16
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
54
  'default' => '',
55
  'sanitize' => 'sanitize_text_field',
56
  ),
57
+ 'character_limit_mode' => array(
58
+ 'default' => 'word_max',
59
+ 'sanitize' => array(
60
+ 'happyforms_sanitize_choice',
61
+ array( 'character_max', 'character_min', 'word_max', 'word_min' ),
62
+ ),
63
+ ),
64
  'width' => array(
65
  'default' => 'full',
66
  'sanitize' => 'sanitize_key'
163
  $validated_value = new WP_Error( 'error', __( 'This field is required.', 'happyforms' ) );
164
  }
165
 
166
+ $character_limit = intval( $part['character_limit'] );
167
+ $character_limit_mode = $part['character_limit_mode'];
168
+
169
+ if ( $character_limit > 0 ) {
170
+ $character_count = strlen( $validated_value );
171
+ $word_count = str_word_count( $validated_value );
172
+
173
+ if ( 'character_max' === $character_limit_mode && $character_count > $character_limit ) {
174
+ return new WP_Error( 'error', __( 'Submitted value is too long.', 'happyforms' ) );
175
+ } else if ( 'character_min' === $character_limit_mode && $character_count < $character_limit ) {
176
+ return new WP_Error( 'error', __( 'Submitted value is too short.', 'happyforms' ) );
177
+ } else if ( 'word_max' === $character_limit_mode && $word_count > $character_limit ) {
178
+ return new WP_Error( 'error', __( 'Submitted value is too long.', 'happyforms' ) );
179
+ } else if ( 'word_min' === $character_limit_mode && $word_count < $character_limit ) {
180
+ return new WP_Error( 'error', __( 'Submitted value is too short.', 'happyforms' ) );
181
  }
182
  }
183
 
206
  return $class;
207
  }
208
 
209
+ private function get_limit_mode( $part ) {
210
+ $mode = 'character';
211
+
212
+ if ( 0 === strpos( $part['character_limit_mode'], 'word' ) ) {
213
+ $mode = 'word';
214
+ }
215
+
216
+ return $mode;
217
+ }
218
+
219
+ private function get_limit_label( $part ) {
220
+ $label = '';
221
+
222
+ switch( $part['character_limit_mode'] ) {
223
+ case 'character_min':
224
+ $label = __( 'characters (min.)', 'happyforms' );
225
+ break;
226
+ case 'character_max':
227
+ $label = __( 'characters (max.)', 'happyforms' );
228
+ break;
229
+ case 'word_min':
230
+ $label = __( 'words (min.)', 'happyforms' );
231
+ break;
232
+ case 'word_max':
233
+ $label = __( 'words (max.)', 'happyforms' );
234
+ break;
235
+ }
236
+
237
+ return $label;
238
+ }
239
+
240
  public function html_part_attributes( $attrs, $part ) {
241
  if ( $this->type !== $part['type'] ) {
242
  return $attrs;
244
 
245
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
246
  $limit = intval( $part['character_limit'] );
247
+ $mode = $this->get_limit_mode( $part );
248
+ $attrs[] = "data-length=\"{$limit}\"";
249
+ $attrs[] = "data-length-mode=\"{$mode}\"";
250
  }
251
 
252
  return $attrs;
259
 
260
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
261
  $limit = intval( $part['character_limit'] );
262
+ $label = $this->get_limit_label( $part );
263
  ?>
264
  <div class="happyforms-part__char-counter" <?php if ( happyforms_is_preview() && empty( $part['character_limit'] ) ) : ?>style="display: none;"<?php endif; ?>>
265
+ <span>0</span>/<?php echo $limit; ?> <?php echo $label; ?>
266
  </div>
267
  <?php
268
  }
269
  }
270
 
271
+ public function email_part_value( $value, $message, $part, $form ) {
272
+ if ( $this->type === $part['type'] ) {
273
+ $value = nl2br( $value );
274
+ }
275
+
276
+ return $value;
277
+ }
278
+
279
+ public function message_part_value( $value, $original_value, $part, $destination ) {
280
+ if ( $this->type === $part['type'] && 'admin-column' !== $destination ) {
281
+ $value = nl2br( $value );
282
+ }
283
+
284
+ return $value;
285
+ }
286
+
287
  public function script_dependencies( $deps, $forms ) {
288
  $contains_long_text = false;
289
  $form_controller = happyforms_get_form_controller();
inc/core/classes/parts/class-part-radio.php CHANGED
@@ -208,8 +208,8 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
208
  return $value;
209
  }
210
 
211
- public function stringify_value( $value, $part, $form ) {
212
- if ( $this->type === $part['type'] ) {
213
  if ( '' !== $value ) {
214
  $options = happyforms_get_part_options( $part['options'], $part, $form );
215
  $value = $options[$value]['label'];
208
  return $value;
209
  }
210
 
211
+ public function stringify_value( $value, $part, $form, $force = false ) {
212
+ if ( $this->type === $part['type'] || $force ) {
213
  if ( '' !== $value ) {
214
  $options = happyforms_get_part_options( $part['options'], $part, $form );
215
  $value = $options[$value]['label'];
inc/core/classes/parts/class-part-rich-text.php CHANGED
@@ -49,6 +49,13 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
49
  'default' => '',
50
  'sanitize' => 'sanitize_text_field',
51
  ),
 
 
 
 
 
 
 
52
  'width' => array(
53
  'default' => 'full',
54
  'sanitize' => 'sanitize_key'
@@ -120,6 +127,7 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
120
 
121
  private function get_allowed_html() {
122
  $allowed = array(
 
123
  'b' => array(),
124
  'strong' => array(),
125
  'i' => array(),
@@ -196,15 +204,22 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
196
  return new WP_Error( 'error', __( 'This field is required.', 'happyforms' ) );
197
  }
198
 
199
- if ( isset( $part['character_limit'] ) ) {
200
- $character_limit = intval( $part['character_limit'] );
201
-
202
- if ( $character_limit > 0 ) {
203
- $clean_value = wp_strip_all_tags( $validated_value, true );
204
-
205
- if ( strlen( $clean_value ) > $character_limit ) {
206
- return new WP_Error( 'error', __( 'Value exceeds character limit.', 'happyforms' ) );
207
- }
 
 
 
 
 
 
 
208
  }
209
  }
210
 
@@ -229,6 +244,37 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
229
  return $class;
230
  }
231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  public function html_part_attributes( $attrs, $part ) {
233
  if ( $this->type !== $part['type'] ) {
234
  return $attrs;
@@ -236,7 +282,9 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
236
 
237
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
238
  $limit = intval( $part['character_limit'] );
239
- $attrs[] = "data-max-length=\"{$limit}\"";
 
 
240
  }
241
 
242
  return $attrs;
@@ -249,9 +297,10 @@ class HappyForms_Part_RichText extends HappyForms_Form_Part {
249
 
250
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
251
  $limit = intval( $part['character_limit'] );
 
252
  ?>
253
  <div class="happyforms-part__char-counter" <?php if ( happyforms_is_preview() && empty( $part['character_limit'] ) ) : ?>style="display: none;"<?php endif; ?>>
254
- <span><?php echo $limit; ?></span> <?php _e( 'characters', 'happyforms' ); ?>
255
  </div>
256
  <?php
257
  }
49
  'default' => '',
50
  'sanitize' => 'sanitize_text_field',
51
  ),
52
+ 'character_limit_mode' => array(
53
+ 'default' => 'word_max',
54
+ 'sanitize' => array(
55
+ 'happyforms_sanitize_choice',
56
+ array( 'character_max', 'character_min', 'word_max', 'word_min' ),
57
+ ),
58
+ ),
59
  'width' => array(
60
  'default' => 'full',
61
  'sanitize' => 'sanitize_key'
127
 
128
  private function get_allowed_html() {
129
  $allowed = array(
130
+ 'br' => array(),
131
  'b' => array(),
132
  'strong' => array(),
133
  'i' => array(),
204
  return new WP_Error( 'error', __( 'This field is required.', 'happyforms' ) );
205
  }
206
 
207
+ $character_limit = intval( $part['character_limit'] );
208
+ $character_limit_mode = $part['character_limit_mode'];
209
+
210
+ if ( $character_limit > 0 ) {
211
+ $clean_value = wp_strip_all_tags( $validated_value, true );
212
+ $character_count = strlen( $clean_value );
213
+ $word_count = str_word_count( $clean_value );
214
+
215
+ if ( 'character_max' === $character_limit_mode && $character_count > $character_limit ) {
216
+ return new WP_Error( 'error', __( 'Submitted value is too long.', 'happyforms' ) );
217
+ } else if ( 'character_min' === $character_limit_mode && $character_count < $character_limit ) {
218
+ return new WP_Error( 'error', __( 'Submitted value is too short.', 'happyforms' ) );
219
+ } else if ( 'word_max' === $character_limit_mode && $word_count > $character_limit ) {
220
+ return new WP_Error( 'error', __( 'Submitted value is too long.', 'happyforms' ) );
221
+ } else if ( 'word_min' === $character_limit_mode && $word_count < $character_limit ) {
222
+ return new WP_Error( 'error', __( 'Submitted value is too short.', 'happyforms' ) );
223
  }
224
  }
225
 
244
  return $class;
245
  }
246
 
247
+ private function get_limit_mode( $part ) {
248
+ $mode = 'character';
249
+
250
+ if ( 0 === strpos( $part['character_limit_mode'], 'word' ) ) {
251
+ $mode = 'word';
252
+ }
253
+
254
+ return $mode;
255
+ }
256
+
257
+ private function get_limit_label( $part ) {
258
+ $label = '';
259
+
260
+ switch( $part['character_limit_mode'] ) {
261
+ case 'character_min':
262
+ $label = __( 'characters (min.)', 'happyforms' );
263
+ break;
264
+ case 'character_max':
265
+ $label = __( 'characters (max.)', 'happyforms' );
266
+ break;
267
+ case 'word_min':
268
+ $label = __( 'words (min.)', 'happyforms' );
269
+ break;
270
+ case 'word_max':
271
+ $label = __( 'words (max.)', 'happyforms' );
272
+ break;
273
+ }
274
+
275
+ return $label;
276
+ }
277
+
278
  public function html_part_attributes( $attrs, $part ) {
279
  if ( $this->type !== $part['type'] ) {
280
  return $attrs;
282
 
283
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
284
  $limit = intval( $part['character_limit'] );
285
+ $mode = $this->get_limit_mode( $part );
286
+ $attrs[] = "data-length=\"{$limit}\"";
287
+ $attrs[] = "data-length-mode=\"{$mode}\"";
288
  }
289
 
290
  return $attrs;
297
 
298
  if ( ! empty( $part['character_limit'] ) || happyforms_is_preview() ) {
299
  $limit = intval( $part['character_limit'] );
300
+ $label = $this->get_limit_label( $part );
301
  ?>
302
  <div class="happyforms-part__char-counter" <?php if ( happyforms_is_preview() && empty( $part['character_limit'] ) ) : ?>style="display: none;"<?php endif; ?>>
303
+ <span>0</span>/<?php echo $limit; ?> <?php echo $label; ?>
304
  </div>
305
  <?php
306
  }
inc/core/helpers/helper-form-templates.php CHANGED
@@ -1543,4 +1543,23 @@ function happyforms_is_stepping() {
1543
  return $stepping;
1544
  }
1545
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1546
  endif;
1543
  return $stepping;
1544
  }
1545
 
1546
+ endif;
1547
+
1548
+ if ( ! function_exists( 'happyforms_get_part_states' ) ):
1549
+ /**
1550
+ * Output notices for the current submission,
1551
+ * related to the form as a whole or specific parts.
1552
+ *
1553
+ * @since 1.0
1554
+ *
1555
+ * @param string $location The notice location to display.
1556
+ *
1557
+ * @return void
1558
+ */
1559
+ function happyforms_get_part_states( $location = '' ) {
1560
+ $states = happyforms_get_session()->get_states( $location );
1561
+
1562
+ return $states;
1563
+ }
1564
+
1565
  endif;
inc/core/templates/email-user.php CHANGED
@@ -9,6 +9,22 @@
9
 
10
  <br><br>
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  <?php
13
  /**
14
  *
9
 
10
  <br><br>
11
 
12
+ <?php if ( happyforms_get_form_property( $form, 'confirmation_email_include_values' ) ) : ?>
13
+
14
+ <?php foreach( $form['parts'] as $part ) : ?>
15
+
16
+ <?php if ( happyforms_email_is_part_visible( $part, $form, $response ) ) : ?>
17
+
18
+ <b><?php echo happyforms_get_email_part_label( $response, $part, $form ); ?></b><br>
19
+ <?php echo happyforms_get_email_part_value( $response, $part, $form ); ?>
20
+ <br><br>
21
+
22
+ <?php endif; ?>
23
+
24
+ <?php endforeach; ?>
25
+
26
+ <?php endif; ?>
27
+
28
  <?php
29
  /**
30
  *
inc/core/templates/parts/customize-multi-line-text.php CHANGED
@@ -43,8 +43,16 @@
43
  </p>
44
  <div class="happyforms-part-advanced-settings-wrap">
45
  <p>
46
- <label for="<%= instance.id %>_character_limit"><?php _e( 'Character count', 'happyforms' ); ?></label>
47
- <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
 
 
 
 
 
 
 
 
48
  </p>
49
  <p>
50
  <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
43
  </p>
44
  <div class="happyforms-part-advanced-settings-wrap">
45
  <p>
46
+ <label for="<%= instance.id %>_character_limit"><?php _e( 'Limit words/characters', 'happyforms' ); ?></label>
47
+ <div class="character-limit-settings">
48
+ <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
49
+ <select id="<%= instance.id %>_character_limit_mode" data-bind="character_limit_mode">
50
+ <option value="word_max"<%= (instance.character_limit_mode == 'word_max') ? ' selected' : '' %>><?php _e( 'Words (max)', 'happyforms' ); ?></option>
51
+ <option value="word_min"<%= (instance.character_limit_mode == 'word_min') ? ' selected' : '' %>><?php _e( 'Words (min)', 'happyforms' ); ?></option>
52
+ <option value="character_max"<%= (instance.character_limit_mode == 'character_max') ? ' selected' : '' %>><?php _e( 'Characters (max)', 'happyforms' ); ?></option>
53
+ <option value="character_min"<%= (instance.character_limit_mode == 'character_min') ? ' selected' : '' %>><?php _e( 'Characters (min)', 'happyforms' ); ?></option>
54
+ </select>
55
+ </div>
56
  </p>
57
  <p>
58
  <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
inc/core/templates/parts/customize-rich-text.php CHANGED
@@ -38,7 +38,15 @@
38
  <div class="happyforms-part-advanced-settings-wrap">
39
  <p>
40
  <label for="<%= instance.id %>_character_limit"><?php _e( 'Character count', 'happyforms' ); ?></label>
41
- <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
 
 
 
 
 
 
 
 
42
  </p>
43
  <p>
44
  <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
38
  <div class="happyforms-part-advanced-settings-wrap">
39
  <p>
40
  <label for="<%= instance.id %>_character_limit"><?php _e( 'Character count', 'happyforms' ); ?></label>
41
+ <div class="character-limit-settings">
42
+ <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
43
+ <select id="<%= instance.id %>_character_limit_mode" data-bind="character_limit_mode">
44
+ <option value="word_max"<%= (instance.character_limit_mode == 'word_max') ? ' selected' : '' %>><?php _e( 'Words (max)', 'happyforms' ); ?></option>
45
+ <option value="word_min"<%= (instance.character_limit_mode == 'word_min') ? ' selected' : '' %>><?php _e( 'Words (min)', 'happyforms' ); ?></option>
46
+ <option value="character_max"<%= (instance.character_limit_mode == 'character_max') ? ' selected' : '' %>><?php _e( 'Characters (max)', 'happyforms' ); ?></option>
47
+ <option value="character_min"<%= (instance.character_limit_mode == 'character_min') ? ' selected' : '' %>><?php _e( 'Characters (min)', 'happyforms' ); ?></option>
48
+ </select>
49
+ </div>
50
  </p>
51
  <p>
52
  <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
languages/happyforms.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the HappyForms package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: HappyForms 1.7.9\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
- "POT-Creation-Date: 2019-04-16 08:57:50+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -185,42 +185,42 @@ msgstr ""
185
  msgid "Responses"
186
  msgstr ""
187
 
188
- #: inc/core/classes/class-form-admin.php:307
189
  msgid "Copy to clipboard"
190
  msgstr ""
191
 
192
- #: inc/core/classes/class-form-admin.php:361
193
  #: inc/core/templates/customize-form-steps.php:5
194
  msgid "Build"
195
  msgstr ""
196
 
197
- #: inc/core/classes/class-form-admin.php:365
198
  #: inc/core/templates/customize-form-item.php:21
199
  #: inc/core/templates/customize-form-steps.php:8
200
  #: inc/core/templates/customize-form-steps.php:15
201
  msgid "Setup"
202
  msgstr ""
203
 
204
- #: inc/core/classes/class-form-admin.php:369
205
  #: inc/core/templates/customize-form-item.php:24
206
  #: inc/core/templates/customize-form-steps.php:18
207
  msgid "Style"
208
  msgstr ""
209
 
210
- #: inc/core/classes/class-form-admin.php:373
211
  #: inc/core/templates/customize-form-item.php:27
212
  #: inc/core/templates/customize-form-part-footer.php:4
213
  msgid "Duplicate"
214
  msgstr ""
215
 
216
- #: inc/core/classes/class-form-admin.php:377
217
  #: inc/core/classes/class-message-admin.php:640
218
  #: inc/core/classes/class-message-admin.php:720
219
  #: inc/core/classes/class-message-admin.php:928
220
  msgid "Trash"
221
  msgstr ""
222
 
223
- #: inc/core/classes/class-form-admin.php:422
224
  msgid "Form duplicated succesfully."
225
  msgstr ""
226
 
@@ -311,236 +311,240 @@ msgid ""
311
  "and we’ll be in touch soon."
312
  msgstr ""
313
 
314
- #: inc/core/classes/class-form-setup.php:118
315
  msgid "(optional)"
316
  msgstr ""
317
 
318
- #: inc/core/classes/class-form-setup.php:122
319
  msgid "Submit Form"
320
  msgstr ""
321
 
322
- #: inc/core/classes/class-form-setup.php:146
323
  msgid "Validate your submission"
324
  msgstr ""
325
 
326
- #: inc/core/classes/class-form-setup.php:154
327
  msgid "Review submission"
328
  msgstr ""
329
 
330
- #: inc/core/classes/class-form-setup.php:198
331
  msgid "Confirmation message"
332
  msgstr ""
333
 
334
- #: inc/core/classes/class-form-setup.php:199
335
  msgid ""
336
  "This is the message your users will see after succesfully submitting your "
337
  "form."
338
  msgstr ""
339
 
340
- #: inc/core/classes/class-form-setup.php:204
341
  msgid "Receive submission alerts"
342
  msgstr ""
343
 
344
- #: inc/core/classes/class-form-setup.php:209
345
  #: inc/core/templates/admin-tracking.php:15
346
  msgid "Email address"
347
  msgstr ""
348
 
349
- #: inc/core/classes/class-form-setup.php:210
350
  msgid ""
351
  "Add your email address here to receive a confirmation email for each form "
352
  "response. You can add multiple email addresses by separating each address "
353
  "with a comma."
354
  msgstr ""
355
 
356
- #: inc/core/classes/class-form-setup.php:215
357
  msgid "Email Bcc address"
358
  msgstr ""
359
 
360
- #: inc/core/classes/class-form-setup.php:216
361
  msgid ""
362
  "Add your Bcc email address here to receive a confirmation email for each "
363
  "form response without appearing in the received message header. You can "
364
  "add multiple email addresses by separating each address with a comma."
365
  msgstr ""
366
 
367
- #: inc/core/classes/class-form-setup.php:221
368
- #: inc/core/classes/class-form-setup.php:244
369
  msgid "Email subject"
370
  msgstr ""
371
 
372
- #: inc/core/classes/class-form-setup.php:222
373
  msgid ""
374
  "Each time a user submits a message, you'll receive an email with this "
375
  "subject."
376
  msgstr ""
377
 
378
- #: inc/core/classes/class-form-setup.php:227
379
  msgid "Include mark and reply link"
380
  msgstr ""
381
 
382
- #: inc/core/classes/class-form-setup.php:228
383
  msgid "Reply to your users and mark their submission as read in one click."
384
  msgstr ""
385
 
386
- #: inc/core/classes/class-form-setup.php:233
387
  msgid "Send confirmation email"
388
  msgstr ""
389
 
390
- #: inc/core/classes/class-form-setup.php:238
391
  msgid "Email display name"
392
  msgstr ""
393
 
394
- #: inc/core/classes/class-form-setup.php:239
395
  msgid ""
396
  "If your form contains an email field, recipients will receive an email with "
397
  "this sender name."
398
  msgstr ""
399
 
400
- #: inc/core/classes/class-form-setup.php:245
401
  msgid ""
402
  "If your form contains an email field, recipients will receive an email with "
403
  "this subject."
404
  msgstr ""
405
 
406
- #: inc/core/classes/class-form-setup.php:250
407
  msgid "Email content"
408
  msgstr ""
409
 
410
- #: inc/core/classes/class-form-setup.php:251
411
  msgid ""
412
  "If your form contains an email field, recipients will receive an email with "
413
  "this content."
414
  msgstr ""
415
 
416
- #: inc/core/classes/class-form-setup.php:256
 
 
 
 
417
  msgid "Optional part label"
418
  msgstr ""
419
 
420
- #: inc/core/classes/class-form-setup.php:261
421
  msgid "Submit button label"
422
  msgstr ""
423
 
424
- #: inc/core/classes/class-form-setup.php:266
425
  msgid "Submit button HTML class"
426
  msgstr ""
427
 
428
- #: inc/core/classes/class-form-setup.php:271
429
  msgid "Set custom form HTML ID"
430
  msgstr ""
431
 
432
- #: inc/core/classes/class-form-setup.php:273
433
  msgid "Add a unique HTML ID to your form. Write without a hash (#) character."
434
  msgstr ""
435
 
436
- #: inc/core/classes/class-form-setup.php:277
437
  msgid "Form HTML ID"
438
  msgstr ""
439
 
440
- #: inc/core/classes/class-form-setup.php:282
441
  msgid "Redirect on complete"
442
  msgstr ""
443
 
444
- #: inc/core/classes/class-form-setup.php:283
445
  msgid ""
446
  "By default, recipients will be redirected to the post or page displaying "
447
  "this form. To set a custom redirect webpage, add a link here."
448
  msgstr ""
449
 
450
- #: inc/core/classes/class-form-setup.php:288
451
  msgid "On complete redirect link"
452
  msgstr ""
453
 
454
- #: inc/core/classes/class-form-setup.php:293
455
  msgid "Open redirect link in new tab"
456
  msgstr ""
457
 
458
- #: inc/core/classes/class-form-setup.php:298
459
  msgid "Spam prevention"
460
  msgstr ""
461
 
462
- #: inc/core/classes/class-form-setup.php:299
463
  msgid "Protect your form against bots by using HoneyPot security."
464
  msgstr ""
465
 
466
- #: inc/core/classes/class-form-setup.php:305
467
  msgid ""
468
  "Use <a href=\"%s\" target=\"_blank\" class=\"external\"> Google "
469
  "ReCaptcha</a>"
470
  msgstr ""
471
 
472
- #: inc/core/classes/class-form-setup.php:308
473
  msgid "Protect your form against bots using your Google ReCaptcha credentials."
474
  msgstr ""
475
 
476
- #: inc/core/classes/class-form-setup.php:313
477
  msgid "ReCaptcha site key"
478
  msgstr ""
479
 
480
- #: inc/core/classes/class-form-setup.php:318
481
  msgid "ReCaptcha secret key"
482
  msgstr ""
483
 
484
- #: inc/core/classes/class-form-setup.php:323
485
  msgid "ReCaptcha label"
486
  msgstr ""
487
 
488
- #: inc/core/classes/class-form-setup.php:328
489
  msgid "Save responses"
490
  msgstr ""
491
 
492
- #: inc/core/classes/class-form-setup.php:329
493
  msgid "Keep recipients responses stored in your WordPress database."
494
  msgstr ""
495
 
496
- #: inc/core/classes/class-form-setup.php:334
497
  msgid "Give each response an ID number"
498
  msgstr ""
499
 
500
- #: inc/core/classes/class-form-setup.php:335
501
  msgid "Tag responses with a unique, incremental identifier."
502
  msgstr ""
503
 
504
- #: inc/core/classes/class-form-setup.php:340
505
  msgid "Start counter from"
506
  msgstr ""
507
 
508
- #: inc/core/classes/class-form-setup.php:341
509
  msgid "Your next submission will be tagged with this identifier."
510
  msgstr ""
511
 
512
- #: inc/core/classes/class-form-setup.php:347
513
  #: inc/core/templates/parts/customize-number.php:72
514
  msgid "Prefix"
515
  msgstr ""
516
 
517
- #: inc/core/classes/class-form-setup.php:352
518
  msgid "Suffix"
519
  msgstr ""
520
 
521
- #: inc/core/classes/class-form-setup.php:357
522
  msgid "Preview values before submission"
523
  msgstr ""
524
 
525
- #: inc/core/classes/class-form-setup.php:358
526
  msgid "Let your users review their submission before confirming it."
527
  msgstr ""
528
 
529
- #: inc/core/classes/class-form-setup.php:363
530
  msgid "Review button text"
531
  msgstr ""
532
 
533
- #: inc/core/classes/class-form-setup.php:368
534
  msgid "Fade submit button until valid"
535
  msgstr ""
536
 
537
- #: inc/core/classes/class-form-setup.php:370
538
  msgid ""
539
  "Reduce the opacity of the submit button until all required form parts are "
540
  "valid."
541
  msgstr ""
542
 
543
- #: inc/core/classes/class-form-setup.php:477
544
  msgid "Please review your submission..."
545
  msgstr ""
546
 
@@ -686,14 +690,14 @@ msgstr ""
686
  #: inc/core/templates/parts/customize-date.php:103
687
  #: inc/core/templates/parts/customize-email.php:46
688
  #: inc/core/templates/parts/customize-legal.php:4
689
- #: inc/core/templates/parts/customize-multi-line-text.php:50
690
  #: inc/core/templates/parts/customize-narrative.php:33
691
  #: inc/core/templates/parts/customize-number.php:77
692
  #: inc/core/templates/parts/customize-phone.php:69
693
  #: inc/core/templates/parts/customize-placeholder.php:27
694
  #: inc/core/templates/parts/customize-radio.php:67
695
  #: inc/core/templates/parts/customize-rating.php:74
696
- #: inc/core/templates/parts/customize-rich-text.php:44
697
  #: inc/core/templates/parts/customize-scale.php:86
698
  #: inc/core/templates/parts/customize-select.php:70
699
  #: inc/core/templates/parts/customize-single-line-text.php:51
@@ -761,6 +765,7 @@ msgid "Alignment"
761
  msgstr ""
762
 
763
  #: inc/core/classes/class-form-styles.php:594
 
764
  msgid "Font size"
765
  msgstr ""
766
 
@@ -898,7 +903,7 @@ msgstr ""
898
 
899
  #: inc/core/classes/class-form-styles.php:734
900
  #: inc/core/classes/class-form-styles.php:884
901
- #: inc/core/classes/parts/class-part-multi-line-text.php:32
902
  #: inc/core/classes/parts/class-part-rich-text.php:33
903
  #: inc/core/classes/parts/class-part-single-line-text.php:29
904
  #: inc/core/templates/parts/customize-legal.php:13
@@ -966,12 +971,8 @@ msgstr ""
966
  msgid "Submit button"
967
  msgstr ""
968
 
969
- #: inc/core/classes/class-form-styles.php:844
970
- msgid "Font Size"
971
- msgstr ""
972
-
973
  #: inc/core/classes/class-form-styles.php:849
974
- msgid "Font Weight"
975
  msgstr ""
976
 
977
  #: inc/core/classes/class-form-styles.php:859
@@ -1030,7 +1031,6 @@ msgid "View Response #"
1030
  msgstr ""
1031
 
1032
  #: inc/core/classes/class-message-admin.php:242
1033
- #: inc/core/classes/class-message-controller.php:213
1034
  msgid "View response"
1035
  msgstr ""
1036
 
@@ -1117,7 +1117,7 @@ msgstr ""
1117
  #: inc/core/classes/class-message-admin.php:781
1118
  #: inc/core/classes/class-message-controller.php:679
1119
  #: inc/core/templates/admin-message-edit.php:27
1120
- #: inc/core/templates/email-owner.php:29 inc/core/templates/email-user.php:21
1121
  msgid "Tracking number"
1122
  msgstr ""
1123
 
@@ -1158,7 +1158,8 @@ msgid "Response"
1158
  msgstr ""
1159
 
1160
  #: inc/core/classes/class-message-controller.php:212
1161
- msgid "Edit response"
 
1162
  msgstr ""
1163
 
1164
  #: inc/core/classes/class-message-controller.php:214
@@ -1282,7 +1283,7 @@ msgstr ""
1282
  #: inc/core/classes/parts/class-part-email.php:152
1283
  #: inc/core/classes/parts/class-part-email.php:156
1284
  #: inc/core/classes/parts/class-part-legal.php:120
1285
- #: inc/core/classes/parts/class-part-multi-line-text.php:154
1286
  #: inc/core/classes/parts/class-part-narrative.php:130
1287
  #: inc/core/classes/parts/class-part-narrative.php:135
1288
  #: inc/core/classes/parts/class-part-number.php:174
@@ -1290,7 +1291,7 @@ msgstr ""
1290
  #: inc/core/classes/parts/class-part-phone.php:170
1291
  #: inc/core/classes/parts/class-part-radio.php:181
1292
  #: inc/core/classes/parts/class-part-rating.php:157
1293
- #: inc/core/classes/parts/class-part-rich-text.php:196
1294
  #: inc/core/classes/parts/class-part-scale.php:168
1295
  #: inc/core/classes/parts/class-part-select.php:175
1296
  #: inc/core/classes/parts/class-part-single-line-text.php:134
@@ -1398,14 +1399,38 @@ msgstr ""
1398
  msgid "For paragraph text fields."
1399
  msgstr ""
1400
 
1401
- #: inc/core/classes/parts/class-part-multi-line-text.php:162
1402
- #: inc/core/classes/parts/class-part-rich-text.php:206
1403
- msgid "Value exceeds character limit."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1404
  msgstr ""
1405
 
1406
- #: inc/core/classes/parts/class-part-multi-line-text.php:214
1407
- #: inc/core/classes/parts/class-part-rich-text.php:254
1408
- msgid "characters"
 
 
 
 
 
1409
  msgstr ""
1410
 
1411
  #: inc/core/classes/parts/class-part-narrative.php:8
@@ -3752,7 +3777,7 @@ msgstr ""
3752
  #: inc/core/templates/parts/customize-email.php:20
3753
  #: inc/core/templates/parts/customize-email.php:56
3754
  #: inc/core/templates/parts/customize-multi-line-text.php:20
3755
- #: inc/core/templates/parts/customize-multi-line-text.php:60
3756
  #: inc/core/templates/parts/customize-narrative.php:18
3757
  #: inc/core/templates/parts/customize-narrative.php:43
3758
  #: inc/core/templates/parts/customize-number.php:20
@@ -3766,7 +3791,7 @@ msgstr ""
3766
  #: inc/core/templates/parts/customize-rating.php:18
3767
  #: inc/core/templates/parts/customize-rating.php:84
3768
  #: inc/core/templates/parts/customize-rich-text.php:18
3769
- #: inc/core/templates/parts/customize-rich-text.php:53
3770
  #: inc/core/templates/parts/customize-scale.php:18
3771
  #: inc/core/templates/parts/customize-scale.php:96
3772
  #: inc/core/templates/parts/customize-select.php:19
@@ -3880,14 +3905,14 @@ msgstr ""
3880
  #: inc/core/templates/parts/customize-date.php:105
3881
  #: inc/core/templates/parts/customize-email.php:48
3882
  #: inc/core/templates/parts/customize-legal.php:6
3883
- #: inc/core/templates/parts/customize-multi-line-text.php:52
3884
  #: inc/core/templates/parts/customize-narrative.php:35
3885
  #: inc/core/templates/parts/customize-number.php:79
3886
  #: inc/core/templates/parts/customize-phone.php:71
3887
  #: inc/core/templates/parts/customize-placeholder.php:29
3888
  #: inc/core/templates/parts/customize-radio.php:69
3889
  #: inc/core/templates/parts/customize-rating.php:76
3890
- #: inc/core/templates/parts/customize-rich-text.php:46
3891
  #: inc/core/templates/parts/customize-scale.php:88
3892
  #: inc/core/templates/parts/customize-select.php:72
3893
  #: inc/core/templates/parts/customize-single-line-text.php:53
@@ -3956,14 +3981,14 @@ msgstr ""
3956
  #: inc/core/templates/parts/customize-date.php:106
3957
  #: inc/core/templates/parts/customize-email.php:49
3958
  #: inc/core/templates/parts/customize-legal.php:7
3959
- #: inc/core/templates/parts/customize-multi-line-text.php:53
3960
  #: inc/core/templates/parts/customize-narrative.php:36
3961
  #: inc/core/templates/parts/customize-number.php:80
3962
  #: inc/core/templates/parts/customize-phone.php:72
3963
  #: inc/core/templates/parts/customize-placeholder.php:30
3964
  #: inc/core/templates/parts/customize-radio.php:70
3965
  #: inc/core/templates/parts/customize-rating.php:77
3966
- #: inc/core/templates/parts/customize-rich-text.php:47
3967
  #: inc/core/templates/parts/customize-scale.php:89
3968
  #: inc/core/templates/parts/customize-select.php:73
3969
  #: inc/core/templates/parts/customize-single-line-text.php:54
@@ -3978,14 +4003,14 @@ msgstr ""
3978
  #: inc/core/templates/parts/customize-date.php:107
3979
  #: inc/core/templates/parts/customize-email.php:50
3980
  #: inc/core/templates/parts/customize-legal.php:8
3981
- #: inc/core/templates/parts/customize-multi-line-text.php:54
3982
  #: inc/core/templates/parts/customize-narrative.php:37
3983
  #: inc/core/templates/parts/customize-number.php:81
3984
  #: inc/core/templates/parts/customize-phone.php:73
3985
  #: inc/core/templates/parts/customize-placeholder.php:31
3986
  #: inc/core/templates/parts/customize-radio.php:71
3987
  #: inc/core/templates/parts/customize-rating.php:78
3988
- #: inc/core/templates/parts/customize-rich-text.php:48
3989
  #: inc/core/templates/parts/customize-scale.php:90
3990
  #: inc/core/templates/parts/customize-select.php:74
3991
  #: inc/core/templates/parts/customize-single-line-text.php:55
@@ -4000,7 +4025,7 @@ msgstr ""
4000
  #: inc/core/templates/parts/customize-date.php:108
4001
  #: inc/core/templates/parts/customize-email.php:51
4002
  #: inc/core/templates/parts/customize-legal.php:9
4003
- #: inc/core/templates/parts/customize-multi-line-text.php:55
4004
  #: inc/core/templates/parts/customize-narrative.php:38
4005
  #: inc/core/templates/parts/customize-number.php:82
4006
  #: inc/core/templates/parts/customize-phone.php:74
@@ -4021,14 +4046,14 @@ msgstr ""
4021
  #: inc/core/templates/parts/customize-date.php:117
4022
  #: inc/core/templates/parts/customize-email.php:60
4023
  #: inc/core/templates/parts/customize-legal.php:18
4024
- #: inc/core/templates/parts/customize-multi-line-text.php:64
4025
  #: inc/core/templates/parts/customize-narrative.php:47
4026
  #: inc/core/templates/parts/customize-number.php:91
4027
  #: inc/core/templates/parts/customize-phone.php:83
4028
  #: inc/core/templates/parts/customize-placeholder.php:41
4029
  #: inc/core/templates/parts/customize-radio.php:81
4030
  #: inc/core/templates/parts/customize-rating.php:88
4031
- #: inc/core/templates/parts/customize-rich-text.php:57
4032
  #: inc/core/templates/parts/customize-scale.php:100
4033
  #: inc/core/templates/parts/customize-select.php:84
4034
  #: inc/core/templates/parts/customize-single-line-text.php:65
@@ -4213,8 +4238,27 @@ msgid "Confirmation field title"
4213
  msgstr ""
4214
 
4215
  #: inc/core/templates/parts/customize-multi-line-text.php:46
4216
- #: inc/core/templates/parts/customize-rich-text.php:40
4217
- msgid "Character count"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4218
  msgstr ""
4219
 
4220
  #: inc/core/templates/parts/customize-narrative.php:24
@@ -4296,6 +4340,10 @@ msgstr ""
4296
  msgid "Rating Labels"
4297
  msgstr ""
4298
 
 
 
 
 
4299
  #: inc/core/templates/parts/customize-scale.php:34
4300
  msgid "Minimum value"
4301
  msgstr ""
2
  # This file is distributed under the same license as the HappyForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: HappyForms 1.7.10\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
+ "POT-Creation-Date: 2019-04-25 12:32:02+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
185
  msgid "Responses"
186
  msgstr ""
187
 
188
+ #: inc/core/classes/class-form-admin.php:321
189
  msgid "Copy to clipboard"
190
  msgstr ""
191
 
192
+ #: inc/core/classes/class-form-admin.php:375
193
  #: inc/core/templates/customize-form-steps.php:5
194
  msgid "Build"
195
  msgstr ""
196
 
197
+ #: inc/core/classes/class-form-admin.php:379
198
  #: inc/core/templates/customize-form-item.php:21
199
  #: inc/core/templates/customize-form-steps.php:8
200
  #: inc/core/templates/customize-form-steps.php:15
201
  msgid "Setup"
202
  msgstr ""
203
 
204
+ #: inc/core/classes/class-form-admin.php:383
205
  #: inc/core/templates/customize-form-item.php:24
206
  #: inc/core/templates/customize-form-steps.php:18
207
  msgid "Style"
208
  msgstr ""
209
 
210
+ #: inc/core/classes/class-form-admin.php:387
211
  #: inc/core/templates/customize-form-item.php:27
212
  #: inc/core/templates/customize-form-part-footer.php:4
213
  msgid "Duplicate"
214
  msgstr ""
215
 
216
+ #: inc/core/classes/class-form-admin.php:391
217
  #: inc/core/classes/class-message-admin.php:640
218
  #: inc/core/classes/class-message-admin.php:720
219
  #: inc/core/classes/class-message-admin.php:928
220
  msgid "Trash"
221
  msgstr ""
222
 
223
+ #: inc/core/classes/class-form-admin.php:436
224
  msgid "Form duplicated succesfully."
225
  msgstr ""
226
 
311
  "and we’ll be in touch soon."
312
  msgstr ""
313
 
314
+ #: inc/core/classes/class-form-setup.php:122
315
  msgid "(optional)"
316
  msgstr ""
317
 
318
+ #: inc/core/classes/class-form-setup.php:126
319
  msgid "Submit Form"
320
  msgstr ""
321
 
322
+ #: inc/core/classes/class-form-setup.php:150
323
  msgid "Validate your submission"
324
  msgstr ""
325
 
326
+ #: inc/core/classes/class-form-setup.php:158
327
  msgid "Review submission"
328
  msgstr ""
329
 
330
+ #: inc/core/classes/class-form-setup.php:202
331
  msgid "Confirmation message"
332
  msgstr ""
333
 
334
+ #: inc/core/classes/class-form-setup.php:203
335
  msgid ""
336
  "This is the message your users will see after succesfully submitting your "
337
  "form."
338
  msgstr ""
339
 
340
+ #: inc/core/classes/class-form-setup.php:208
341
  msgid "Receive submission alerts"
342
  msgstr ""
343
 
344
+ #: inc/core/classes/class-form-setup.php:213
345
  #: inc/core/templates/admin-tracking.php:15
346
  msgid "Email address"
347
  msgstr ""
348
 
349
+ #: inc/core/classes/class-form-setup.php:214
350
  msgid ""
351
  "Add your email address here to receive a confirmation email for each form "
352
  "response. You can add multiple email addresses by separating each address "
353
  "with a comma."
354
  msgstr ""
355
 
356
+ #: inc/core/classes/class-form-setup.php:219
357
  msgid "Email Bcc address"
358
  msgstr ""
359
 
360
+ #: inc/core/classes/class-form-setup.php:220
361
  msgid ""
362
  "Add your Bcc email address here to receive a confirmation email for each "
363
  "form response without appearing in the received message header. You can "
364
  "add multiple email addresses by separating each address with a comma."
365
  msgstr ""
366
 
367
+ #: inc/core/classes/class-form-setup.php:225
368
+ #: inc/core/classes/class-form-setup.php:248
369
  msgid "Email subject"
370
  msgstr ""
371
 
372
+ #: inc/core/classes/class-form-setup.php:226
373
  msgid ""
374
  "Each time a user submits a message, you'll receive an email with this "
375
  "subject."
376
  msgstr ""
377
 
378
+ #: inc/core/classes/class-form-setup.php:231
379
  msgid "Include mark and reply link"
380
  msgstr ""
381
 
382
+ #: inc/core/classes/class-form-setup.php:232
383
  msgid "Reply to your users and mark their submission as read in one click."
384
  msgstr ""
385
 
386
+ #: inc/core/classes/class-form-setup.php:237
387
  msgid "Send confirmation email"
388
  msgstr ""
389
 
390
+ #: inc/core/classes/class-form-setup.php:242
391
  msgid "Email display name"
392
  msgstr ""
393
 
394
+ #: inc/core/classes/class-form-setup.php:243
395
  msgid ""
396
  "If your form contains an email field, recipients will receive an email with "
397
  "this sender name."
398
  msgstr ""
399
 
400
+ #: inc/core/classes/class-form-setup.php:249
401
  msgid ""
402
  "If your form contains an email field, recipients will receive an email with "
403
  "this subject."
404
  msgstr ""
405
 
406
+ #: inc/core/classes/class-form-setup.php:254
407
  msgid "Email content"
408
  msgstr ""
409
 
410
+ #: inc/core/classes/class-form-setup.php:255
411
  msgid ""
412
  "If your form contains an email field, recipients will receive an email with "
413
  "this content."
414
  msgstr ""
415
 
416
+ #: inc/core/classes/class-form-setup.php:260
417
+ msgid "Include submitted values"
418
+ msgstr ""
419
+
420
+ #: inc/core/classes/class-form-setup.php:265
421
  msgid "Optional part label"
422
  msgstr ""
423
 
424
+ #: inc/core/classes/class-form-setup.php:270
425
  msgid "Submit button label"
426
  msgstr ""
427
 
428
+ #: inc/core/classes/class-form-setup.php:275
429
  msgid "Submit button HTML class"
430
  msgstr ""
431
 
432
+ #: inc/core/classes/class-form-setup.php:280
433
  msgid "Set custom form HTML ID"
434
  msgstr ""
435
 
436
+ #: inc/core/classes/class-form-setup.php:282
437
  msgid "Add a unique HTML ID to your form. Write without a hash (#) character."
438
  msgstr ""
439
 
440
+ #: inc/core/classes/class-form-setup.php:286
441
  msgid "Form HTML ID"
442
  msgstr ""
443
 
444
+ #: inc/core/classes/class-form-setup.php:291
445
  msgid "Redirect on complete"
446
  msgstr ""
447
 
448
+ #: inc/core/classes/class-form-setup.php:292
449
  msgid ""
450
  "By default, recipients will be redirected to the post or page displaying "
451
  "this form. To set a custom redirect webpage, add a link here."
452
  msgstr ""
453
 
454
+ #: inc/core/classes/class-form-setup.php:297
455
  msgid "On complete redirect link"
456
  msgstr ""
457
 
458
+ #: inc/core/classes/class-form-setup.php:302
459
  msgid "Open redirect link in new tab"
460
  msgstr ""
461
 
462
+ #: inc/core/classes/class-form-setup.php:307
463
  msgid "Spam prevention"
464
  msgstr ""
465
 
466
+ #: inc/core/classes/class-form-setup.php:308
467
  msgid "Protect your form against bots by using HoneyPot security."
468
  msgstr ""
469
 
470
+ #: inc/core/classes/class-form-setup.php:314
471
  msgid ""
472
  "Use <a href=\"%s\" target=\"_blank\" class=\"external\"> Google "
473
  "ReCaptcha</a>"
474
  msgstr ""
475
 
476
+ #: inc/core/classes/class-form-setup.php:317
477
  msgid "Protect your form against bots using your Google ReCaptcha credentials."
478
  msgstr ""
479
 
480
+ #: inc/core/classes/class-form-setup.php:322
481
  msgid "ReCaptcha site key"
482
  msgstr ""
483
 
484
+ #: inc/core/classes/class-form-setup.php:327
485
  msgid "ReCaptcha secret key"
486
  msgstr ""
487
 
488
+ #: inc/core/classes/class-form-setup.php:332
489
  msgid "ReCaptcha label"
490
  msgstr ""
491
 
492
+ #: inc/core/classes/class-form-setup.php:337
493
  msgid "Save responses"
494
  msgstr ""
495
 
496
+ #: inc/core/classes/class-form-setup.php:338
497
  msgid "Keep recipients responses stored in your WordPress database."
498
  msgstr ""
499
 
500
+ #: inc/core/classes/class-form-setup.php:343
501
  msgid "Give each response an ID number"
502
  msgstr ""
503
 
504
+ #: inc/core/classes/class-form-setup.php:344
505
  msgid "Tag responses with a unique, incremental identifier."
506
  msgstr ""
507
 
508
+ #: inc/core/classes/class-form-setup.php:349
509
  msgid "Start counter from"
510
  msgstr ""
511
 
512
+ #: inc/core/classes/class-form-setup.php:350
513
  msgid "Your next submission will be tagged with this identifier."
514
  msgstr ""
515
 
516
+ #: inc/core/classes/class-form-setup.php:356
517
  #: inc/core/templates/parts/customize-number.php:72
518
  msgid "Prefix"
519
  msgstr ""
520
 
521
+ #: inc/core/classes/class-form-setup.php:361
522
  msgid "Suffix"
523
  msgstr ""
524
 
525
+ #: inc/core/classes/class-form-setup.php:366
526
  msgid "Preview values before submission"
527
  msgstr ""
528
 
529
+ #: inc/core/classes/class-form-setup.php:367
530
  msgid "Let your users review their submission before confirming it."
531
  msgstr ""
532
 
533
+ #: inc/core/classes/class-form-setup.php:372
534
  msgid "Review button text"
535
  msgstr ""
536
 
537
+ #: inc/core/classes/class-form-setup.php:377
538
  msgid "Fade submit button until valid"
539
  msgstr ""
540
 
541
+ #: inc/core/classes/class-form-setup.php:379
542
  msgid ""
543
  "Reduce the opacity of the submit button until all required form parts are "
544
  "valid."
545
  msgstr ""
546
 
547
+ #: inc/core/classes/class-form-setup.php:486
548
  msgid "Please review your submission..."
549
  msgstr ""
550
 
690
  #: inc/core/templates/parts/customize-date.php:103
691
  #: inc/core/templates/parts/customize-email.php:46
692
  #: inc/core/templates/parts/customize-legal.php:4
693
+ #: inc/core/templates/parts/customize-multi-line-text.php:58
694
  #: inc/core/templates/parts/customize-narrative.php:33
695
  #: inc/core/templates/parts/customize-number.php:77
696
  #: inc/core/templates/parts/customize-phone.php:69
697
  #: inc/core/templates/parts/customize-placeholder.php:27
698
  #: inc/core/templates/parts/customize-radio.php:67
699
  #: inc/core/templates/parts/customize-rating.php:74
700
+ #: inc/core/templates/parts/customize-rich-text.php:52
701
  #: inc/core/templates/parts/customize-scale.php:86
702
  #: inc/core/templates/parts/customize-select.php:70
703
  #: inc/core/templates/parts/customize-single-line-text.php:51
765
  msgstr ""
766
 
767
  #: inc/core/classes/class-form-styles.php:594
768
+ #: inc/core/classes/class-form-styles.php:844
769
  msgid "Font size"
770
  msgstr ""
771
 
903
 
904
  #: inc/core/classes/class-form-styles.php:734
905
  #: inc/core/classes/class-form-styles.php:884
906
+ #: inc/core/classes/parts/class-part-multi-line-text.php:34
907
  #: inc/core/classes/parts/class-part-rich-text.php:33
908
  #: inc/core/classes/parts/class-part-single-line-text.php:29
909
  #: inc/core/templates/parts/customize-legal.php:13
971
  msgid "Submit button"
972
  msgstr ""
973
 
 
 
 
 
974
  #: inc/core/classes/class-form-styles.php:849
975
+ msgid "Font weight"
976
  msgstr ""
977
 
978
  #: inc/core/classes/class-form-styles.php:859
1031
  msgstr ""
1032
 
1033
  #: inc/core/classes/class-message-admin.php:242
 
1034
  msgid "View response"
1035
  msgstr ""
1036
 
1117
  #: inc/core/classes/class-message-admin.php:781
1118
  #: inc/core/classes/class-message-controller.php:679
1119
  #: inc/core/templates/admin-message-edit.php:27
1120
+ #: inc/core/templates/email-owner.php:29 inc/core/templates/email-user.php:37
1121
  msgid "Tracking number"
1122
  msgstr ""
1123
 
1158
  msgstr ""
1159
 
1160
  #: inc/core/classes/class-message-controller.php:212
1161
+ #: inc/core/classes/class-message-controller.php:213
1162
+ msgid "View Response"
1163
  msgstr ""
1164
 
1165
  #: inc/core/classes/class-message-controller.php:214
1283
  #: inc/core/classes/parts/class-part-email.php:152
1284
  #: inc/core/classes/parts/class-part-email.php:156
1285
  #: inc/core/classes/parts/class-part-legal.php:120
1286
+ #: inc/core/classes/parts/class-part-multi-line-text.php:163
1287
  #: inc/core/classes/parts/class-part-narrative.php:130
1288
  #: inc/core/classes/parts/class-part-narrative.php:135
1289
  #: inc/core/classes/parts/class-part-number.php:174
1291
  #: inc/core/classes/parts/class-part-phone.php:170
1292
  #: inc/core/classes/parts/class-part-radio.php:181
1293
  #: inc/core/classes/parts/class-part-rating.php:157
1294
+ #: inc/core/classes/parts/class-part-rich-text.php:204
1295
  #: inc/core/classes/parts/class-part-scale.php:168
1296
  #: inc/core/classes/parts/class-part-select.php:175
1297
  #: inc/core/classes/parts/class-part-single-line-text.php:134
1399
  msgid "For paragraph text fields."
1400
  msgstr ""
1401
 
1402
+ #: inc/core/classes/parts/class-part-multi-line-text.php:174
1403
+ #: inc/core/classes/parts/class-part-multi-line-text.php:178
1404
+ #: inc/core/classes/parts/class-part-rich-text.php:216
1405
+ #: inc/core/classes/parts/class-part-rich-text.php:220
1406
+ msgid "Submitted value is too long."
1407
+ msgstr ""
1408
+
1409
+ #: inc/core/classes/parts/class-part-multi-line-text.php:176
1410
+ #: inc/core/classes/parts/class-part-multi-line-text.php:180
1411
+ #: inc/core/classes/parts/class-part-rich-text.php:218
1412
+ #: inc/core/classes/parts/class-part-rich-text.php:222
1413
+ msgid "Submitted value is too short."
1414
+ msgstr ""
1415
+
1416
+ #: inc/core/classes/parts/class-part-multi-line-text.php:224
1417
+ #: inc/core/classes/parts/class-part-rich-text.php:262
1418
+ msgid "characters (min.)"
1419
+ msgstr ""
1420
+
1421
+ #: inc/core/classes/parts/class-part-multi-line-text.php:227
1422
+ #: inc/core/classes/parts/class-part-rich-text.php:265
1423
+ msgid "characters (max.)"
1424
  msgstr ""
1425
 
1426
+ #: inc/core/classes/parts/class-part-multi-line-text.php:230
1427
+ #: inc/core/classes/parts/class-part-rich-text.php:268
1428
+ msgid "words (min.)"
1429
+ msgstr ""
1430
+
1431
+ #: inc/core/classes/parts/class-part-multi-line-text.php:233
1432
+ #: inc/core/classes/parts/class-part-rich-text.php:271
1433
+ msgid "words (max.)"
1434
  msgstr ""
1435
 
1436
  #: inc/core/classes/parts/class-part-narrative.php:8
3777
  #: inc/core/templates/parts/customize-email.php:20
3778
  #: inc/core/templates/parts/customize-email.php:56
3779
  #: inc/core/templates/parts/customize-multi-line-text.php:20
3780
+ #: inc/core/templates/parts/customize-multi-line-text.php:68
3781
  #: inc/core/templates/parts/customize-narrative.php:18
3782
  #: inc/core/templates/parts/customize-narrative.php:43
3783
  #: inc/core/templates/parts/customize-number.php:20
3791
  #: inc/core/templates/parts/customize-rating.php:18
3792
  #: inc/core/templates/parts/customize-rating.php:84
3793
  #: inc/core/templates/parts/customize-rich-text.php:18
3794
+ #: inc/core/templates/parts/customize-rich-text.php:61
3795
  #: inc/core/templates/parts/customize-scale.php:18
3796
  #: inc/core/templates/parts/customize-scale.php:96
3797
  #: inc/core/templates/parts/customize-select.php:19
3905
  #: inc/core/templates/parts/customize-date.php:105
3906
  #: inc/core/templates/parts/customize-email.php:48
3907
  #: inc/core/templates/parts/customize-legal.php:6
3908
+ #: inc/core/templates/parts/customize-multi-line-text.php:60
3909
  #: inc/core/templates/parts/customize-narrative.php:35
3910
  #: inc/core/templates/parts/customize-number.php:79
3911
  #: inc/core/templates/parts/customize-phone.php:71
3912
  #: inc/core/templates/parts/customize-placeholder.php:29
3913
  #: inc/core/templates/parts/customize-radio.php:69
3914
  #: inc/core/templates/parts/customize-rating.php:76
3915
+ #: inc/core/templates/parts/customize-rich-text.php:54
3916
  #: inc/core/templates/parts/customize-scale.php:88
3917
  #: inc/core/templates/parts/customize-select.php:72
3918
  #: inc/core/templates/parts/customize-single-line-text.php:53
3981
  #: inc/core/templates/parts/customize-date.php:106
3982
  #: inc/core/templates/parts/customize-email.php:49
3983
  #: inc/core/templates/parts/customize-legal.php:7
3984
+ #: inc/core/templates/parts/customize-multi-line-text.php:61
3985
  #: inc/core/templates/parts/customize-narrative.php:36
3986
  #: inc/core/templates/parts/customize-number.php:80
3987
  #: inc/core/templates/parts/customize-phone.php:72
3988
  #: inc/core/templates/parts/customize-placeholder.php:30
3989
  #: inc/core/templates/parts/customize-radio.php:70
3990
  #: inc/core/templates/parts/customize-rating.php:77
3991
+ #: inc/core/templates/parts/customize-rich-text.php:55
3992
  #: inc/core/templates/parts/customize-scale.php:89
3993
  #: inc/core/templates/parts/customize-select.php:73
3994
  #: inc/core/templates/parts/customize-single-line-text.php:54
4003
  #: inc/core/templates/parts/customize-date.php:107
4004
  #: inc/core/templates/parts/customize-email.php:50
4005
  #: inc/core/templates/parts/customize-legal.php:8
4006
+ #: inc/core/templates/parts/customize-multi-line-text.php:62
4007
  #: inc/core/templates/parts/customize-narrative.php:37
4008
  #: inc/core/templates/parts/customize-number.php:81
4009
  #: inc/core/templates/parts/customize-phone.php:73
4010
  #: inc/core/templates/parts/customize-placeholder.php:31
4011
  #: inc/core/templates/parts/customize-radio.php:71
4012
  #: inc/core/templates/parts/customize-rating.php:78
4013
+ #: inc/core/templates/parts/customize-rich-text.php:56
4014
  #: inc/core/templates/parts/customize-scale.php:90
4015
  #: inc/core/templates/parts/customize-select.php:74
4016
  #: inc/core/templates/parts/customize-single-line-text.php:55
4025
  #: inc/core/templates/parts/customize-date.php:108
4026
  #: inc/core/templates/parts/customize-email.php:51
4027
  #: inc/core/templates/parts/customize-legal.php:9
4028
+ #: inc/core/templates/parts/customize-multi-line-text.php:63
4029
  #: inc/core/templates/parts/customize-narrative.php:38
4030
  #: inc/core/templates/parts/customize-number.php:82
4031
  #: inc/core/templates/parts/customize-phone.php:74
4046
  #: inc/core/templates/parts/customize-date.php:117
4047
  #: inc/core/templates/parts/customize-email.php:60
4048
  #: inc/core/templates/parts/customize-legal.php:18
4049
+ #: inc/core/templates/parts/customize-multi-line-text.php:72
4050
  #: inc/core/templates/parts/customize-narrative.php:47
4051
  #: inc/core/templates/parts/customize-number.php:91
4052
  #: inc/core/templates/parts/customize-phone.php:83
4053
  #: inc/core/templates/parts/customize-placeholder.php:41
4054
  #: inc/core/templates/parts/customize-radio.php:81
4055
  #: inc/core/templates/parts/customize-rating.php:88
4056
+ #: inc/core/templates/parts/customize-rich-text.php:65
4057
  #: inc/core/templates/parts/customize-scale.php:100
4058
  #: inc/core/templates/parts/customize-select.php:84
4059
  #: inc/core/templates/parts/customize-single-line-text.php:65
4238
  msgstr ""
4239
 
4240
  #: inc/core/templates/parts/customize-multi-line-text.php:46
4241
+ msgid "Limit words/characters"
4242
+ msgstr ""
4243
+
4244
+ #: inc/core/templates/parts/customize-multi-line-text.php:50
4245
+ #: inc/core/templates/parts/customize-rich-text.php:44
4246
+ msgid "Words (max)"
4247
+ msgstr ""
4248
+
4249
+ #: inc/core/templates/parts/customize-multi-line-text.php:51
4250
+ #: inc/core/templates/parts/customize-rich-text.php:45
4251
+ msgid "Words (min)"
4252
+ msgstr ""
4253
+
4254
+ #: inc/core/templates/parts/customize-multi-line-text.php:52
4255
+ #: inc/core/templates/parts/customize-rich-text.php:46
4256
+ msgid "Characters (max)"
4257
+ msgstr ""
4258
+
4259
+ #: inc/core/templates/parts/customize-multi-line-text.php:53
4260
+ #: inc/core/templates/parts/customize-rich-text.php:47
4261
+ msgid "Characters (min)"
4262
  msgstr ""
4263
 
4264
  #: inc/core/templates/parts/customize-narrative.php:24
4340
  msgid "Rating Labels"
4341
  msgstr ""
4342
 
4343
+ #: inc/core/templates/parts/customize-rich-text.php:40
4344
+ msgid "Character count"
4345
+ msgstr ""
4346
+
4347
  #: inc/core/templates/parts/customize-scale.php:34
4348
  msgid "Minimum value"
4349
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: contact, contact form, email, feedback form, form, form builder, custom fo
5
  Requires at least: 4.8
6
  Tested up to: 5.1
7
  Requires PHP: 5.3
8
- Stable tag: 1.7.9
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -99,6 +99,11 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more po
99
 
100
  == Changelog ==
101
 
 
 
 
 
 
102
  = 1.7.9 =
103
  * Bugfix: Redirect URL feature could cause fatal error in some environments.
104
  * Bugfix: Alignment fixes in form preview step.
@@ -467,6 +472,9 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more po
467
 
468
  == Upgrade Notice ==
469
 
 
 
 
470
  = 1.7.9 =
471
  * Bug fixes.
472
 
5
  Requires at least: 4.8
6
  Tested up to: 5.1
7
  Requires PHP: 5.3
8
+ Stable tag: 1.7.10
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
99
 
100
  == Changelog ==
101
 
102
+ = 1.7.10 =
103
+ * New feature: Added 'Include submitted values' option in Step 2 that allows you to send submitted data in a confirmation email sent to a user.
104
+ * Improvement: Multi-line and Text Editor parts now support minimium and maximum character and word counter.
105
+ * Bugfix: Long Text part was ignoring new lines when displaying submitted value in email.
106
+
107
  = 1.7.9 =
108
  * Bugfix: Redirect URL feature could cause fatal error in some environments.
109
  * Bugfix: Alignment fixes in form preview step.
472
 
473
  == Upgrade Notice ==
474
 
475
+ = 1.7.10 =
476
+ * Allow sending values back to users, improved textarea counter, minor bugfixes.
477
+
478
  = 1.7.9 =
479
  * Bug fixes.
480