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

Version Description

  • New feature: It's now possible to configure Bcc addresses for email alerts.
  • New feature: Narrative part now supports input placeholders between brackets.
  • New feature: Open redirect link in a new tab.
  • Improvement: Better sample forms and responses created when activating plugin for the first time.
  • Improvement: Various improvements to form styles and alignment.
  • Bugfix: Forms created in 1.6.x versions weren't working because of a data format error.
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.8
Comparing to
See all releases

Code changes from version 1.7.7 to 1.7.8

Files changed (52) hide show
  1. happyforms.php +2 -2
  2. inc/core/assets/css/admin.css +4 -0
  3. inc/core/assets/css/color.css +21 -1
  4. inc/core/assets/css/customize.css +8 -0
  5. inc/core/assets/css/layout.css +21 -3
  6. inc/core/assets/js/customize.js +27 -0
  7. inc/core/assets/js/frontend.js +7 -5
  8. inc/core/assets/js/parts/part-address.js +2 -18
  9. inc/core/assets/js/parts/part-checkbox.js +2 -18
  10. inc/core/assets/js/parts/part-date.js +2 -18
  11. inc/core/assets/js/parts/part-email.js +2 -18
  12. inc/core/assets/js/parts/part-legal.js +2 -18
  13. inc/core/assets/js/parts/part-multi-line-text.js +2 -18
  14. inc/core/assets/js/parts/part-narrative.js +2 -30
  15. inc/core/assets/js/parts/part-number.js +2 -18
  16. inc/core/assets/js/parts/part-phone.js +2 -18
  17. inc/core/assets/js/parts/part-placeholder.js +2 -18
  18. inc/core/assets/js/parts/part-radio.js +2 -18
  19. inc/core/assets/js/parts/part-rating.js +2 -18
  20. inc/core/assets/js/parts/part-rich-text.js +2 -18
  21. inc/core/assets/js/parts/part-scale.js +2 -18
  22. inc/core/assets/js/parts/part-select.js +2 -18
  23. inc/core/assets/js/parts/part-single-line-text.js +2 -18
  24. inc/core/assets/js/parts/part-table.js +2 -18
  25. inc/core/assets/js/parts/part-title.js +2 -18
  26. inc/core/assets/js/parts/part-website-url.js +2 -18
  27. inc/core/classes/class-form-admin.php +3 -0
  28. inc/core/classes/class-form-controller.php +6 -13
  29. inc/core/classes/class-form-part-library.php +8 -0
  30. inc/core/classes/class-form-setup.php +19 -0
  31. inc/core/classes/class-message-admin.php +5 -4
  32. inc/core/classes/class-message-controller.php +48 -39
  33. inc/core/classes/class-migrations.php +20 -0
  34. inc/core/classes/parts/class-part-checkbox.php +8 -0
  35. inc/core/classes/parts/class-part-narrative.php +1 -1
  36. inc/core/classes/parts/class-part-placeholder.php +13 -0
  37. inc/core/classes/parts/class-part-radio.php +9 -0
  38. inc/core/helpers/helper-activation.php +30 -47
  39. inc/core/helpers/helper-form-templates.php +20 -5
  40. inc/core/helpers/helper-misc.php +43 -3
  41. inc/core/templates/email-owner.php +49 -0
  42. inc/core/templates/email-user.php +24 -0
  43. inc/core/templates/partials/part-preview.php +2 -6
  44. inc/core/templates/parts/customize-narrative.php +1 -0
  45. inc/core/templates/parts/frontend-checkbox.php +3 -3
  46. inc/core/templates/parts/frontend-date-day.php +1 -1
  47. inc/core/templates/parts/frontend-date-month.php +1 -1
  48. inc/core/templates/parts/frontend-date.php +1 -1
  49. inc/core/templates/parts/frontend-narrative.php +6 -6
  50. inc/core/templates/parts/frontend-radio.php +9 -3
  51. languages/happyforms.pot +288 -277
  52. readme.txt +12 -1
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.7
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.7' );
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.8
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.8' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
inc/core/assets/css/admin.css CHANGED
@@ -268,4 +268,8 @@ p.welcome-panel-footer a:active {
268
 
269
  #happyforms-notice-happyforms_form_saved_guide {
270
  border-color: #46b450;
 
 
 
 
271
  }
268
 
269
  #happyforms-notice-happyforms_form_saved_guide {
270
  border-color: #46b450;
271
+ }
272
+
273
+ .wp-list-table .happyforms-responses-column-label {
274
+ display: none;
275
  }
inc/core/assets/css/color.css CHANGED
@@ -230,6 +230,7 @@
230
  /* parts - option labels */
231
 
232
  .happyforms-styles .happyforms-part .option-label {
 
233
  font-size: 16px;
234
  font-size: var(--happyforms-part-value-font-size);
235
  }
@@ -255,6 +256,22 @@
255
  transition: border-color var(--happyforms-transition-duration);
256
  }
257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  .happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part--choice .option-label .border {
259
  border-top-color: transparent;
260
  border-left-color: transparent;
@@ -286,7 +303,7 @@
286
  }
287
 
288
  .happyforms-styles .happyforms-part-option {
289
- margin-bottom: 20px;
290
  }
291
 
292
  .happyforms-styles .happyforms-part .option-label {
@@ -396,6 +413,7 @@
396
  }
397
 
398
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--checkbox .checkmark,
 
399
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--table.happyforms-selection--multiple .checkmark,
400
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--legal .checkmark {
401
  border-radius: 0;
@@ -845,6 +863,7 @@
845
  border-radius: 0px !important;
846
  }
847
 
 
848
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--choice .option-label .border {
849
  border-radius: 0px;
850
  }
@@ -874,6 +893,7 @@
874
  border-radius: 25px;
875
  }
876
 
 
877
  .happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--choice .option-label .border {
878
  border-radius: 25px;
879
  }
230
  /* parts - option labels */
231
 
232
  .happyforms-styles .happyforms-part .option-label {
233
+ border-radius: 6px;
234
  font-size: 16px;
235
  font-size: var(--happyforms-part-value-font-size);
236
  }
256
  transition: border-color var(--happyforms-transition-duration);
257
  }
258
 
259
+ .happyforms-styles .happyforms-part--choice .option-label input[type=text] {
260
+ position: relative;
261
+ top: 0;
262
+ padding-top: 1px;
263
+ padding-bottom: 1px;
264
+ border: 0;
265
+ border-radius: 0 !important;
266
+ }
267
+
268
+ .happyforms-styles .happyforms-part--choice .option-label input[type=text]:focus {
269
+ border-top: 0;
270
+ border-right: 0;
271
+ border-left: 0;
272
+ box-shadow: none;
273
+ }
274
+
275
  .happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part--choice .option-label .border {
276
  border-top-color: transparent;
277
  border-left-color: transparent;
303
  }
304
 
305
  .happyforms-styles .happyforms-part-option {
306
+ margin-bottom: 10px;
307
  }
308
 
309
  .happyforms-styles .happyforms-part .option-label {
413
  }
414
 
415
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--checkbox .checkmark,
416
+ .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--radio .checkmark,
417
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--table.happyforms-selection--multiple .checkmark,
418
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--legal .checkmark {
419
  border-radius: 0;
863
  border-radius: 0px !important;
864
  }
865
 
866
+ .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--choice .option-label,
867
  .happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--choice .option-label .border {
868
  border-radius: 0px;
869
  }
893
  border-radius: 25px;
894
  }
895
 
896
+ .happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--choice .option-label,
897
  .happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--choice .option-label .border {
898
  border-radius: 25px;
899
  }
inc/core/assets/css/customize.css CHANGED
@@ -308,12 +308,17 @@ a.happyforms-form-part-remove:hover {
308
  display: none;
309
  }
310
 
 
 
 
 
311
  /**
312
  *
313
  * Form edit
314
  *
315
  */
316
  #customize-control-email_recipient,
 
317
  #customize-control-alert_email_subject,
318
  #customize-control-email_mark_and_reply,
319
  #customize-control-confirmation_email_from_name,
@@ -327,12 +332,14 @@ a.happyforms-form-part-remove:hover {
327
  #customize-control-unique_id_prefix,
328
  #customize-control-unique_id_suffix,
329
  #customize-control-redirect_url,
 
330
  #customize-control-optional_part_label,
331
  #customize-control-html_id {
332
  display: none;
333
  }
334
 
335
  #customize-control-receive_email_alerts.checked ~ #customize-control-email_recipient,
 
336
  #customize-control-receive_email_alerts.checked ~ #customize-control-alert_email_subject,
337
  #customize-control-receive_email_alerts.checked ~ #customize-control-email_mark_and_reply,
338
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_from_name,
@@ -346,6 +353,7 @@ a.happyforms-form-part-remove:hover {
346
  #customize-control-unique_id.checked ~ #customize-control-unique_id_prefix,
347
  #customize-control-unique_id.checked ~ #customize-control-unique_id_suffix,
348
  #customize-control-redirect_on_complete.checked ~ #customize-control-redirect_url,
 
349
  #customize-control-use_html_id.checked ~ #customize-control-html_id {
350
  display: block;
351
  }
308
  display: none;
309
  }
310
 
311
+ .happyforms-widget span.description {
312
+ margin-top: 5px;
313
+ }
314
+
315
  /**
316
  *
317
  * Form edit
318
  *
319
  */
320
  #customize-control-email_recipient,
321
+ #customize-control-email_bccs,
322
  #customize-control-alert_email_subject,
323
  #customize-control-email_mark_and_reply,
324
  #customize-control-confirmation_email_from_name,
332
  #customize-control-unique_id_prefix,
333
  #customize-control-unique_id_suffix,
334
  #customize-control-redirect_url,
335
+ #customize-control-redirect_blank,
336
  #customize-control-optional_part_label,
337
  #customize-control-html_id {
338
  display: none;
339
  }
340
 
341
  #customize-control-receive_email_alerts.checked ~ #customize-control-email_recipient,
342
+ #customize-control-receive_email_alerts.checked ~ #customize-control-email_bccs,
343
  #customize-control-receive_email_alerts.checked ~ #customize-control-alert_email_subject,
344
  #customize-control-receive_email_alerts.checked ~ #customize-control-email_mark_and_reply,
345
  #customize-control-send_confirmation_email.checked ~ #customize-control-confirmation_email_from_name,
353
  #customize-control-unique_id.checked ~ #customize-control-unique_id_prefix,
354
  #customize-control-unique_id.checked ~ #customize-control-unique_id_suffix,
355
  #customize-control-redirect_on_complete.checked ~ #customize-control-redirect_url,
356
+ #customize-control-redirect_on_complete.checked ~ #customize-control-redirect_blank,
357
  #customize-control-use_html_id.checked ~ #customize-control-html_id {
358
  display: block;
359
  }
inc/core/assets/css/layout.css CHANGED
@@ -7,6 +7,7 @@
7
  flex-flow: row wrap;
8
  align-items: flex-start;
9
  max-width: 100%;
 
10
  padding: 25px 0;
11
  }
12
 
@@ -46,7 +47,7 @@
46
 
47
  h3.happyforms-form__title {
48
  margin: 0;
49
- padding: 0 1%;
50
  }
51
 
52
  .happyforms-form--hide-title h3.happyforms-form__title {
@@ -416,7 +417,7 @@ h3.happyforms-form__title {
416
  }
417
 
418
  .happyforms-part-option:last-of-type {
419
- margin-bottom: 0;
420
  }
421
 
422
  .happyforms-part-option__description {
@@ -427,6 +428,21 @@ h3.happyforms-form__title {
427
  margin-right: 20px;
428
  }
429
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
  .happyforms-part--choice.display-type--block .happyforms-part-option__description {
431
  max-width: none;
432
  }
@@ -648,7 +664,8 @@ h3.happyforms-form__title {
648
  margin-bottom: 0;
649
  }
650
 
651
- .happyforms-part.display-type--block .checkmark {
 
652
  margin-right: 5px;
653
  }
654
 
@@ -1904,6 +1921,7 @@ input[type=submit][disabled].happyforms-button--submit {
1904
  min-height: 35px;
1905
  color: #000;
1906
  background-color: #fff;
 
1907
  }
1908
 
1909
  .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder {
7
  flex-flow: row wrap;
8
  align-items: flex-start;
9
  max-width: 100%;
10
+ margin: 0 -1%;
11
  padding: 25px 0;
12
  }
13
 
47
 
48
  h3.happyforms-form__title {
49
  margin: 0;
50
+ padding: 0;
51
  }
52
 
53
  .happyforms-form--hide-title h3.happyforms-form__title {
417
  }
418
 
419
  .happyforms-part-option:last-of-type {
420
+ margin-bottom: 0 !important;
421
  }
422
 
423
  .happyforms-part-option__description {
428
  margin-right: 20px;
429
  }
430
 
431
+ .happyforms-part--choice .happyforms-part-option--other .option-label .label {
432
+ margin-right: 0;
433
+ }
434
+
435
+ .happyforms-part--choice .happyforms-part-option--other .option-label .label:after {
436
+ content: ':';
437
+ }
438
+
439
+ .happyforms-part--choice .happyforms-part-option--other .option-label input[type=text] {
440
+ flex: 1 0;
441
+ padding-left: 0 !important;
442
+ padding-right: 0 !important;
443
+ padding-bottom: 0;
444
+ }
445
+
446
  .happyforms-part--choice.display-type--block .happyforms-part-option__description {
447
  max-width: none;
448
  }
664
  margin-bottom: 0;
665
  }
666
 
667
+ .happyforms-part.display-type--block .checkmark,
668
+ .happyforms-part--legal .checkmark {
669
  margin-right: 5px;
670
  }
671
 
1921
  min-height: 35px;
1922
  color: #000;
1923
  background-color: #fff;
1924
+ white-space: normal;
1925
  }
1926
 
1927
  .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder {
inc/core/assets/js/customize.js CHANGED
@@ -3,8 +3,10 @@
3
  var happyForms;
4
  var classes = {};
5
  classes.models = {};
 
6
  classes.collections = {};
7
  classes.views = {};
 
8
  classes.routers = {};
9
 
10
  classes.models.Form = Backbone.Model.extend( {
@@ -1331,6 +1333,19 @@
1331
  $input.val( max );
1332
  this.model.set( attribute, max );
1333
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1334
  }
1335
 
1336
  } );
@@ -2154,4 +2169,16 @@
2154
  } );
2155
  } );
2156
 
 
 
 
 
 
 
 
 
 
 
 
 
2157
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
3
  var happyForms;
4
  var classes = {};
5
  classes.models = {};
6
+ classes.models.parts = {};
7
  classes.collections = {};
8
  classes.views = {};
9
+ classes.views.parts = {};
10
  classes.routers = {};
11
 
12
  classes.models.Form = Backbone.Model.extend( {
1333
  $input.val( max );
1334
  this.model.set( attribute, max );
1335
  }
1336
+ },
1337
+
1338
+ refreshPart: function() {
1339
+ var model = this.model;
1340
+
1341
+ this.model.fetchHtml( function( response ) {
1342
+ var data = {
1343
+ id: model.get( 'id' ),
1344
+ html: response,
1345
+ };
1346
+
1347
+ happyForms.previewSend( 'happyforms-form-part-refresh', data );
1348
+ } );
1349
  }
1350
 
1351
  } );
2169
  } );
2170
  } );
2171
 
2172
+ happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
2173
+ BaseClass = happyForms.classes.models.parts[attrs.type];
2174
+
2175
+ return func( attrs, options, BaseClass );
2176
+ } );
2177
+
2178
+ happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
2179
+ BaseClass = happyForms.classes.views.parts[options.type];
2180
+
2181
+ return func( options, BaseClass );
2182
+ } );
2183
+
2184
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/frontend.js CHANGED
@@ -261,15 +261,17 @@
261
  return false;
262
  }
263
 
264
- if ( response.data.html ) {
265
- var $el = $( response.data.html );
266
-
267
- if ( ! $el.find('.happyforms-message-notice.error' ).length && response.data.redirect ) {
268
  window.location.replace( response.data.redirect );
269
-
270
  return false;
 
 
271
  }
 
272
 
 
 
273
  var $parts = $( '[data-happyforms-type]', this.$form );
274
 
275
  $parts.each( function() {
261
  return false;
262
  }
263
 
264
+ if ( true === response.success && response.data.redirect ) {
265
+ if ( ! response.data.redirect_to_blank ) {
 
 
266
  window.location.replace( response.data.redirect );
 
267
  return false;
268
+ } else {
269
+ window.open( response.data.redirect, '_blank' );
270
  }
271
+ }
272
 
273
+ if ( response.data.html ) {
274
+ var $el = $( response.data.html );
275
  var $parts = $( '[data-happyforms-type]', this.$form );
276
 
277
  $parts.each( function() {
inc/core/assets/js/parts/part-address.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var AddressModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var AddressView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-address-template',
15
 
16
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -91,20 +91,4 @@
91
  }
92
  } );
93
 
94
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
95
- if ( 'address' === attrs.type ) {
96
- BaseClass = AddressModel;
97
- }
98
-
99
- return func( attrs, options, BaseClass );
100
- } );
101
-
102
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
103
- if ( 'address' === options.type ) {
104
- BaseClass = AddressView;
105
- }
106
-
107
- return func( options, BaseClass );
108
- } );
109
-
110
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.address = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.address = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-address-template',
15
 
16
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
91
  }
92
  } );
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-checkbox.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var CheckboxModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -133,7 +133,7 @@
133
  },
134
  } );
135
 
136
- var CheckboxView = happyForms.classes.views.Part.extend( {
137
  template: '#customize-happyforms-checkbox-template',
138
 
139
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -441,20 +441,4 @@
441
  }
442
  } );
443
 
444
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
445
- if ( 'checkbox' === attrs.type ) {
446
- BaseClass = CheckboxModel;
447
- }
448
-
449
- return func( attrs, options, BaseClass );
450
- } );
451
-
452
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
453
- if ( 'checkbox' === options.type ) {
454
- BaseClass = CheckboxView;
455
- }
456
-
457
- return func( options, BaseClass );
458
- } );
459
-
460
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.checkbox = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
133
  },
134
  } );
135
 
136
+ happyForms.classes.views.parts.checkbox = happyForms.classes.views.Part.extend( {
137
  template: '#customize-happyforms-checkbox-template',
138
 
139
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
441
  }
442
  } );
443
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-date.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var DateModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var DateView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-date-template',
15
 
16
  initialize: function () {
@@ -185,20 +185,4 @@
185
  },
186
  } );
187
 
188
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
189
- if ( 'date' === attrs.type ) {
190
- BaseClass = DateModel;
191
- }
192
-
193
- return func( attrs, options, BaseClass );
194
- } );
195
-
196
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
197
- if ( 'date' === options.type ) {
198
- BaseClass = DateView;
199
- }
200
-
201
- return func( options, BaseClass );
202
- } );
203
-
204
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.date = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.date = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-date-template',
15
 
16
  initialize: function () {
185
  },
186
  } );
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-email.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var EmailModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var EmailView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-email-template',
15
 
16
  initialize: function() {
@@ -92,20 +92,4 @@
92
  },
93
  } );
94
 
95
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
96
- if ( 'email' === attrs.type ) {
97
- BaseClass = EmailModel;
98
- }
99
-
100
- return func( attrs, options, BaseClass );
101
- } );
102
-
103
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
104
- if ( 'email' === options.type ) {
105
- BaseClass = EmailView;
106
- }
107
-
108
- return func( options, BaseClass );
109
- } );
110
-
111
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.email = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.email = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-email-template',
15
 
16
  initialize: function() {
92
  },
93
  } );
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-legal.js CHANGED
@@ -1,6 +1,6 @@
1
  (function ($, _, Backbone, api, settings) {
2
 
3
- var LegalModel = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var LegalView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-legal-template',
15
  editor: null,
16
 
@@ -95,20 +95,4 @@
95
  },
96
  } );
97
 
98
- happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
99
- if ( 'legal' === attrs.type ) {
100
- BaseClass = LegalModel;
101
- }
102
-
103
- return func( attrs, options, BaseClass );
104
- } );
105
-
106
- happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
107
- if ( 'legal' === options.type ) {
108
- BaseClass = LegalView;
109
- }
110
-
111
- return func( options, BaseClass );
112
- } );
113
-
114
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  (function ($, _, Backbone, api, settings) {
2
 
3
+ happyForms.classes.models.parts.legal = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.legal = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-legal-template',
15
  editor: null,
16
 
95
  },
96
  } );
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-multi-line-text.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var MultiLineTextModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var MultiLineTextView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-multi-line-text-template',
15
 
16
  initialize: function() {
@@ -72,20 +72,4 @@
72
  },
73
  } );
74
 
75
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
76
- if ( 'multi_line_text' === attrs.type ) {
77
- BaseClass = MultiLineTextModel;
78
- }
79
-
80
- return func( attrs, options, BaseClass );
81
- } );
82
-
83
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
84
- if ( 'multi_line_text' === options.type ) {
85
- BaseClass = MultiLineTextView;
86
- }
87
-
88
- return func( options, BaseClass );
89
- } );
90
-
91
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.multi_line_text = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.multi_line_text = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-multi-line-text-template',
15
 
16
  initialize: function() {
72
  },
73
  } );
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-narrative.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var NarrativeModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var NarrativeView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-narrative-template',
15
 
16
  ready: function() {
@@ -46,10 +46,6 @@
46
 
47
  onEditorInit: function( editor ) {
48
  var self = this;
49
- var placeholderTemplate = '[]';
50
- var placeholderRegex = /\[[^\]]*\]/gm;
51
- var spanTemplate = '<span contenteditable="false">[]</span>';
52
- var spanRegex = /<span[^<]+<\/span>/gm;
53
  var refreshPreview = _.debounce( this.refreshPreview.bind( this ), 500 );
54
 
55
  editor.on( 'keyup change', function() {
@@ -64,14 +60,6 @@
64
  editor.insertContent( '[]' );
65
  },
66
  } );
67
-
68
- editor.on( 'BeforeSetContent', function( e ) {
69
- e.content = e.content.replace( placeholderRegex, spanTemplate );
70
- } );
71
-
72
- editor.on( 'GetContent', function ( e ) {
73
- e.content = e.content.replace( spanRegex, placeholderTemplate );
74
- } );
75
  },
76
 
77
  refreshPreview: function() {
@@ -95,20 +83,4 @@
95
  },
96
  } );
97
 
98
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
99
- if ( 'narrative' === attrs.type ) {
100
- BaseClass = NarrativeModel;
101
- }
102
-
103
- return func( attrs, options, BaseClass );
104
- } );
105
-
106
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
107
- if ( 'narrative' === options.type ) {
108
- BaseClass = NarrativeView;
109
- }
110
-
111
- return func( options, BaseClass );
112
- } );
113
-
114
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.narrative = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.narrative = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-narrative-template',
15
 
16
  ready: function() {
46
 
47
  onEditorInit: function( editor ) {
48
  var self = this;
 
 
 
 
49
  var refreshPreview = _.debounce( this.refreshPreview.bind( this ), 500 );
50
 
51
  editor.on( 'keyup change', function() {
60
  editor.insertContent( '[]' );
61
  },
62
  } );
 
 
 
 
 
 
 
 
63
  },
64
 
65
  refreshPreview: function() {
83
  },
84
  } );
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-number.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var NumberModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var NumberView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-number-template',
15
 
16
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -164,20 +164,4 @@
164
  }
165
  } );
166
 
167
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
168
- if ( 'number' === attrs.type ) {
169
- BaseClass = NumberModel;
170
- }
171
-
172
- return func( attrs, options, BaseClass );
173
- } );
174
-
175
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
176
- if ( 'number' === options.type ) {
177
- BaseClass = NumberView;
178
- }
179
-
180
- return func( options, BaseClass );
181
- } );
182
-
183
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.number = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.number = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-number-template',
15
 
16
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
164
  }
165
  } );
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-phone.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
- var PhoneModel = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var PhoneView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-phone-template',
15
 
16
  events: _.extend({}, happyForms.classes.views.Part.prototype.events, {
@@ -141,20 +141,4 @@
141
  },
142
  } );
143
 
144
- happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
145
- if ( 'phone' === attrs.type ) {
146
- BaseClass = PhoneModel;
147
- }
148
-
149
- return func( attrs, options, BaseClass );
150
- } );
151
-
152
- happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
153
- if ( 'phone' === options.type ) {
154
- BaseClass = PhoneView;
155
- }
156
-
157
- return func( options, BaseClass );
158
- } );
159
-
160
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.phone = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.phone = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-phone-template',
15
 
16
  events: _.extend({}, happyForms.classes.views.Part.prototype.events, {
141
  },
142
  } );
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-placeholder.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var PlaceholderModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var PlaceholderView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-placeholder-template',
15
  editor: null,
16
 
@@ -95,20 +95,4 @@
95
  },
96
  } );
97
 
98
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
99
- if ( 'placeholder' === attrs.type ) {
100
- BaseClass = PlaceholderModel;
101
- }
102
-
103
- return func( attrs, options, BaseClass );
104
- } );
105
-
106
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
107
- if ( 'placeholder' === options.type ) {
108
- BaseClass = PlaceholderView;
109
- }
110
-
111
- return func( options, BaseClass );
112
- } );
113
-
114
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.placeholder = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.placeholder = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-placeholder-template',
15
  editor: null,
16
 
95
  },
96
  } );
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-radio.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var RadioModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -132,7 +132,7 @@
132
  },
133
  } );
134
 
135
- var RadioView = happyForms.classes.views.Part.extend( {
136
  template: '#customize-happyforms-radio-template',
137
 
138
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -423,20 +423,4 @@
423
  },
424
  } );
425
 
426
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
427
- if ( 'radio' === attrs.type ) {
428
- BaseClass = RadioModel;
429
- }
430
-
431
- return func( attrs, options, BaseClass );
432
- } );
433
-
434
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
435
- if ( 'radio' === options.type ) {
436
- BaseClass = RadioView;
437
- }
438
-
439
- return func( options, BaseClass );
440
- } );
441
-
442
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.radio = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
132
  },
133
  } );
134
 
135
+ happyForms.classes.views.parts.radio = happyForms.classes.views.Part.extend( {
136
  template: '#customize-happyforms-radio-template',
137
 
138
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
423
  },
424
  } );
425
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-rating.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
- var RatingModel = happyForms.classes.models.Part.extend({
4
  defaults: function () {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var RatingView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-rating-template',
15
 
16
  initialize: function() {
@@ -114,20 +114,4 @@
114
  }
115
  } );
116
 
117
- happyForms.factory.model = _.wrap( happyForms.factory.model, function ( func, attrs, options, BaseClass ) {
118
- if ( 'rating' === attrs.type ) {
119
- BaseClass = RatingModel;
120
- }
121
-
122
- return func( attrs, options, BaseClass );
123
- } );
124
-
125
- happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
126
- if ( 'rating' === options.type ) {
127
- BaseClass = RatingView;
128
- }
129
-
130
- return func( options, BaseClass );
131
- } );
132
-
133
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.rating = happyForms.classes.models.Part.extend({
4
  defaults: function () {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.rating = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-rating-template',
15
 
16
  initialize: function() {
114
  }
115
  } );
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  } )( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-rich-text.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var RichTextModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var RichTextView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-rich-text-template',
15
 
16
  initialize: function() {
@@ -72,20 +72,4 @@
72
  },
73
  } );
74
 
75
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
76
- if ( 'rich_text' === attrs.type ) {
77
- BaseClass = RichTextModel;
78
- }
79
-
80
- return func( attrs, options, BaseClass );
81
- } );
82
-
83
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
84
- if ( 'rich_text' === options.type ) {
85
- BaseClass = RichTextView;
86
- }
87
-
88
- return func( options, BaseClass );
89
- } );
90
-
91
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.rich_text = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.rich_text = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-rich-text-template',
15
 
16
  initialize: function() {
72
  },
73
  } );
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-scale.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
- var ScaleModel = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var ScaleView = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-scale-template',
15
 
16
  initialize: function() {
@@ -172,22 +172,6 @@
172
  },
173
  } );
174
 
175
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
176
- if ( 'scale' === attrs.type ) {
177
- BaseClass = ScaleModel;
178
- }
179
-
180
- return func( attrs, options, BaseClass );
181
- } );
182
-
183
- happyForms.factory.view = _.wrap( happyForms.factory.view, function ( func, options, BaseClass ) {
184
- if ( 'scale' === options.type ) {
185
- BaseClass = ScaleView;
186
- }
187
-
188
- return func( options, BaseClass );
189
- } );
190
-
191
  api.bind( 'ready', function () {
192
  api.previewer.bind( 'happyforms-part-render', function ( $el ) {
193
  if ( ! $el.is( '.happyforms-part--scale' ) ) {
1
  ( function ( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.scale = happyForms.classes.models.Part.extend( {
4
  defaults: function () {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.scale = happyForms.classes.views.Part.extend( {
14
  template: '#happyforms-customize-scale-template',
15
 
16
  initialize: function() {
172
  },
173
  } );
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  api.bind( 'ready', function () {
176
  api.previewer.bind( 'happyforms-part-render', function ( $el ) {
177
  if ( ! $el.is( '.happyforms-part--scale' ) ) {
inc/core/assets/js/parts/part-select.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var SelectModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -120,7 +120,7 @@
120
  },
121
  } );
122
 
123
- var SelectView = happyForms.classes.views.Part.extend( {
124
  template: '#customize-happyforms-select-template',
125
 
126
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -448,20 +448,4 @@
448
  }
449
  } );
450
 
451
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
452
- if ( 'select' === attrs.type ) {
453
- BaseClass = SelectModel;
454
- }
455
-
456
- return func( attrs, options, BaseClass );
457
- } );
458
-
459
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
460
- if ( 'select' === options.type ) {
461
- BaseClass = SelectView;
462
- }
463
-
464
- return func( options, BaseClass );
465
- } );
466
-
467
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.select = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
120
  },
121
  } );
122
 
123
+ happyForms.classes.views.parts.select = happyForms.classes.views.Part.extend( {
124
  template: '#customize-happyforms-select-template',
125
 
126
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
448
  }
449
  } );
450
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-single-line-text.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var SingleLineTextModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  } );
12
 
13
- var SingleLineTextView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-single-line-text-template',
15
 
16
  initialize: function() {
@@ -34,20 +34,4 @@
34
  }
35
  } );
36
 
37
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
38
- if ( 'single_line_text' === attrs.type ) {
39
- BaseClass = SingleLineTextModel;
40
- }
41
-
42
- return func( attrs, options, BaseClass );
43
- } );
44
-
45
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
46
- if ( 'single_line_text' === options.type ) {
47
- BaseClass = SingleLineTextView;
48
- }
49
-
50
- return func( options, BaseClass );
51
- } );
52
-
53
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.single_line_text = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.single_line_text = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-single-line-text-template',
15
 
16
  initialize: function() {
34
  }
35
  } );
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/assets/js/parts/part-table.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings, partSettings ) {
2
 
3
- var TableModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -168,7 +168,7 @@
168
  },
169
  } );
170
 
171
- var TableView = happyForms.classes.views.Part.extend( {
172
  template: '#customize-happyforms-table-template',
173
 
174
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
@@ -644,20 +644,4 @@
644
  },
645
  } );
646
 
647
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
648
- if ( 'table' === attrs.type ) {
649
- BaseClass = TableModel;
650
- }
651
-
652
- return func( attrs, options, BaseClass );
653
- } );
654
-
655
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
656
- if ( 'table' === options.type ) {
657
- BaseClass = TableView;
658
- }
659
-
660
- return func( options, BaseClass );
661
- } );
662
-
663
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings, _happyFormsTableSettings );
1
  ( function( $, _, Backbone, api, settings, partSettings ) {
2
 
3
+ happyForms.classes.models.parts.table = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
168
  },
169
  } );
170
 
171
+ happyForms.classes.views.parts.table = happyForms.classes.views.Part.extend( {
172
  template: '#customize-happyforms-table-template',
173
 
174
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
644
  },
645
  } );
646
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
647
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings, _happyFormsTableSettings );
inc/core/assets/js/parts/part-title.js CHANGED
@@ -1,6 +1,6 @@
1
  (function ($, _, Backbone, api, settings) {
2
 
3
- var TitleModel = happyForms.classes.models.Part.extend({
4
  defaults: function () {
5
  return _.extend(
6
  {},
@@ -10,7 +10,7 @@
10
  },
11
  });
12
 
13
- var TitleView = happyForms.classes.views.Part.extend({
14
  template: '#happyforms-customize-title-template',
15
 
16
  initialize: function () {
@@ -31,20 +31,4 @@
31
  }
32
  });
33
 
34
- happyForms.factory.model = _.wrap(happyForms.factory.model, function (func, attrs, options, BaseClass) {
35
- if ('title' === attrs.type) {
36
- BaseClass = TitleModel;
37
- }
38
-
39
- return func(attrs, options, BaseClass);
40
- });
41
-
42
- happyForms.factory.view = _.wrap(happyForms.factory.view, function (func, options, BaseClass) {
43
- if ('title' === options.type) {
44
- BaseClass = TitleView;
45
- }
46
-
47
- return func(options, BaseClass);
48
- });
49
-
50
  })(jQuery, _, Backbone, wp.customize, _happyFormsSettings);
1
  (function ($, _, Backbone, api, settings) {
2
 
3
+ happyForms.classes.models.parts.title = happyForms.classes.models.Part.extend({
4
  defaults: function () {
5
  return _.extend(
6
  {},
10
  },
11
  });
12
 
13
+ happyForms.classes.views.parts.title = happyForms.classes.views.Part.extend({
14
  template: '#happyforms-customize-title-template',
15
 
16
  initialize: function () {
31
  }
32
  });
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  })(jQuery, _, Backbone, wp.customize, _happyFormsSettings);
inc/core/assets/js/parts/part-website-url.js CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
- var WebsiteUrlModel = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
@@ -10,24 +10,8 @@
10
  },
11
  } );
12
 
13
- var WebsiteUrlView = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-website-url-template'
15
  } );
16
 
17
- happyForms.factory.model = _.wrap( happyForms.factory.model, function( func, attrs, options, BaseClass ) {
18
- if ( 'website_url' === attrs.type ) {
19
- BaseClass = WebsiteUrlModel;
20
- }
21
-
22
- return func( attrs, options, BaseClass );
23
- } );
24
-
25
- happyForms.factory.view = _.wrap( happyForms.factory.view, function( func, options, BaseClass ) {
26
- if ( 'website_url' === options.type ) {
27
- BaseClass = WebsiteUrlView;
28
- }
29
-
30
- return func( options, BaseClass );
31
- } );
32
-
33
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
1
  ( function( $, _, Backbone, api, settings ) {
2
 
3
+ happyForms.classes.models.parts.website_url = happyForms.classes.models.Part.extend( {
4
  defaults: function() {
5
  return _.extend(
6
  {},
10
  },
11
  } );
12
 
13
+ happyForms.classes.views.parts.website_url = happyForms.classes.views.Part.extend( {
14
  template: '#customize-happyforms-website-url-template'
15
  } );
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
inc/core/classes/class-form-admin.php CHANGED
@@ -254,6 +254,9 @@ class HappyForms_Form_Admin {
254
  $columns['shortcode'] = __( 'Shortcode', 'happyforms' );
255
  $columns['author'] = __( 'Author', 'happyforms' );
256
  $columns['messages'] = '<span class="dashicons dashicons-admin-comments"></span>';
 
 
 
257
  $columns = $columns + array( 'date' => $date_column );
258
 
259
  /**
254
  $columns['shortcode'] = __( 'Shortcode', 'happyforms' );
255
  $columns['author'] = __( 'Author', 'happyforms' );
256
  $columns['messages'] = '<span class="dashicons dashicons-admin-comments"></span>';
257
+ $columns['messages'] .= '<span class="happyforms-responses-column-label">';
258
+ $columns['messages'] .= __( 'Responses', 'happyforms' );
259
+ $columns['messages'] .= '</span>';
260
  $columns = $columns + array( 'date' => $date_column );
261
 
262
  /**
inc/core/classes/class-form-controller.php CHANGED
@@ -505,7 +505,9 @@ class HappyForms_Form_Controller {
505
  $form_array['parts'] = array();
506
 
507
  foreach ( $form_array['layout'] as $p => $part_id ) {
508
- $form_array['parts'][] = $form_array[$part_id];
 
 
509
  unset( $form_array[$part_id] );
510
  }
511
 
@@ -590,6 +592,8 @@ class HappyForms_Form_Controller {
590
 
591
  $result = $this->to_array( get_post( $result ) );
592
 
 
 
593
  return $result;
594
  }
595
 
@@ -656,18 +660,7 @@ class HappyForms_Form_Controller {
656
  return;
657
  }
658
 
659
- $messages = get_posts( array(
660
- 'post_type' => happyforms_get_message_controller()->post_type,
661
- 'post_status' => 'any',
662
- 'meta_key' => 'form_id',
663
- 'meta_value' => $post_id,
664
- ) );
665
-
666
- foreach ( $messages as $message ) {
667
- wp_delete_post( $message->ID, true );
668
- }
669
-
670
- happyforms_get_message_controller()->update_badge_transient();
671
  }
672
 
673
  /**
505
  $form_array['parts'] = array();
506
 
507
  foreach ( $form_array['layout'] as $p => $part_id ) {
508
+ $part = $form_array[$part_id];
509
+ $part_class = happyforms_get_part_library()->get_part( $part['type'] );
510
+ $form_array['parts'][] = wp_parse_args( $part, $part_class->get_customize_defaults() );
511
  unset( $form_array[$part_id] );
512
  }
513
 
592
 
593
  $result = $this->to_array( get_post( $result ) );
594
 
595
+ do_action( 'happyforms_form_updated', $result );
596
+
597
  return $result;
598
  }
599
 
660
  return;
661
  }
662
 
663
+ do_action( 'happyforms_form_deleted', $post_id );
 
 
 
 
 
 
 
 
 
 
 
664
  }
665
 
666
  /**
inc/core/classes/class-form-part-library.php CHANGED
@@ -85,6 +85,14 @@ class HappyForms_Form_Part_Library {
85
  }
86
  }
87
 
 
 
 
 
 
 
 
 
88
  /**
89
  * Get all form parts.
90
  *
85
  }
86
  }
87
 
88
+ public function deregister_part( $part ) {
89
+ $key = $part instanceof HappyForms_Form_Part ? $this->hash_object( $part ) : $part;
90
+
91
+ if ( isset( $this->parts[$key] ) ) {
92
+ unset( $this->parts[$key] );
93
+ }
94
+ }
95
+
96
  /**
97
  * Get all form parts.
98
  *
inc/core/classes/class-form-setup.php CHANGED
@@ -70,6 +70,10 @@ class HappyForms_Form_Setup {
70
  'default' => ( $current_user->user_email ) ? $current_user->user_email : '',
71
  'sanitize' => 'happyforms_sanitize_emails',
72
  ),
 
 
 
 
73
  'email_mark_and_reply' => array(
74
  'default' => 0,
75
  'sanitize' => 'happyforms_sanitize_checkbox',
@@ -102,6 +106,10 @@ class HappyForms_Form_Setup {
102
  'default' => '',
103
  'sanitize' => 'sanitize_text_field',
104
  ),
 
 
 
 
105
  'spam_prevention' => array(
106
  'default' => 1,
107
  'sanitize' => 'happyforms_sanitize_checkbox',
@@ -202,6 +210,12 @@ class HappyForms_Form_Setup {
202
  'tooltip' => __( 'Add your email address here to receive a confirmation email for each form response. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
203
  'field' => 'email_recipient',
204
  ),
 
 
 
 
 
 
205
  400 => array(
206
  'type' => 'text',
207
  'label' => __( 'Email subject', 'happyforms' ),
@@ -274,6 +288,11 @@ class HappyForms_Form_Setup {
274
  'label' => __( 'On complete redirect link', 'happyforms' ),
275
  'field' => 'redirect_url',
276
  ),
 
 
 
 
 
277
  1400 => array(
278
  'type' => 'checkbox',
279
  'label' => __( 'Spam prevention', 'happyforms' ),
70
  'default' => ( $current_user->user_email ) ? $current_user->user_email : '',
71
  'sanitize' => 'happyforms_sanitize_emails',
72
  ),
73
+ 'email_bccs' => array(
74
+ 'default' => '',
75
+ 'sanitize' => 'happyforms_sanitize_emails',
76
+ ),
77
  'email_mark_and_reply' => array(
78
  'default' => 0,
79
  'sanitize' => 'happyforms_sanitize_checkbox',
106
  'default' => '',
107
  'sanitize' => 'sanitize_text_field',
108
  ),
109
+ 'redirect_blank' => array(
110
+ 'default' => 0,
111
+ 'sanitize' => 'happyforms_sanitize_checkbox',
112
+ ),
113
  'spam_prevention' => array(
114
  'default' => 1,
115
  'sanitize' => 'happyforms_sanitize_checkbox',
210
  'tooltip' => __( 'Add your email address here to receive a confirmation email for each form response. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
211
  'field' => 'email_recipient',
212
  ),
213
+ 310 => array(
214
+ 'type' => 'text',
215
+ 'label' => __( 'Email Bcc address', 'happyforms' ),
216
+ 'tooltip' => __( 'Add your Bcc email address here to receive a confirmation email for each form response without appearing in the received message header. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
217
+ 'field' => 'email_bccs',
218
+ ),
219
  400 => array(
220
  'type' => 'text',
221
  'label' => __( 'Email subject', 'happyforms' ),
288
  'label' => __( 'On complete redirect link', 'happyforms' ),
289
  'field' => 'redirect_url',
290
  ),
291
+ 1302 => array(
292
+ 'type' => 'checkbox',
293
+ 'label' => __( 'Open redirect link in new tab', 'happyforms' ),
294
+ 'field' => 'redirect_blank',
295
+ ),
296
  1400 => array(
297
  'type' => 'checkbox',
298
  'label' => __( 'Spam prevention', 'happyforms' ),
inc/core/classes/class-message-admin.php CHANGED
@@ -345,12 +345,12 @@ class HappyForms_Message_Admin {
345
  ?>
346
  <fieldset style="display: block;">
347
  <legend><?php _e( 'Pagination', 'happyforms' ); ?></legend>
348
- <label for=""><?php _e( 'Number of responses per page:', 'happyforms' ); ?></label>
349
  <input type="number" min="1" max="99" maxlength="2" name="edit_<?php echo esc_attr( $post_type ); ?>_per_page" value="<?php echo esc_attr( $this->row_count ); ?>">
350
  </fieldset>
351
  <fieldset style="display: block;">
352
  <legend><?php _e( 'Fields', 'happyforms' ); ?></legend>
353
- <label for=""><?php _e( 'Number of response fields to show:', 'happyforms' ); ?></label>
354
  <input type="number" min="1" max="99" maxlength="2" name="<?php echo esc_attr( $this->column_count_option ); ?>" value="<?php echo esc_attr( $this->column_count ); ?>">
355
  <input type="hidden" name="wp_screen_options[option]" value="<?php echo esc_attr( $this->column_count_option ); ?>">
356
  <input type="hidden" name="wp_screen_options[value]" value="1">
@@ -637,7 +637,7 @@ class HappyForms_Message_Admin {
637
  $actions = array(
638
  'mark_read' => __( 'Mark read', 'happyforms' ),
639
  'mark_unread' => __( 'Mark unread', 'happyforms' ),
640
- 'delete' => __( 'Trash', 'happyforms' ),
641
  );
642
 
643
  if ( $this->current_form ) {
@@ -675,10 +675,11 @@ class HappyForms_Message_Admin {
675
  }
676
  happyforms_get_message_controller()->update_badge_transient();
677
  break;
678
- case 'delete':
679
  foreach ( $ids as $id ) {
680
  wp_delete_post( $id );
681
  }
 
682
  break;
683
  case 'export_csv':
684
  $this->export_csv( $ids );
345
  ?>
346
  <fieldset style="display: block;">
347
  <legend><?php _e( 'Pagination', 'happyforms' ); ?></legend>
348
+ <label for=""><?php _e( 'Number of items per page:', 'happyforms' ); ?></label>
349
  <input type="number" min="1" max="99" maxlength="2" name="edit_<?php echo esc_attr( $post_type ); ?>_per_page" value="<?php echo esc_attr( $this->row_count ); ?>">
350
  </fieldset>
351
  <fieldset style="display: block;">
352
  <legend><?php _e( 'Fields', 'happyforms' ); ?></legend>
353
+ <label for=""><?php _e( 'Number of columns to show:', 'happyforms' ); ?></label>
354
  <input type="number" min="1" max="99" maxlength="2" name="<?php echo esc_attr( $this->column_count_option ); ?>" value="<?php echo esc_attr( $this->column_count ); ?>">
355
  <input type="hidden" name="wp_screen_options[option]" value="<?php echo esc_attr( $this->column_count_option ); ?>">
356
  <input type="hidden" name="wp_screen_options[value]" value="1">
637
  $actions = array(
638
  'mark_read' => __( 'Mark read', 'happyforms' ),
639
  'mark_unread' => __( 'Mark unread', 'happyforms' ),
640
+ 'trash' => __( 'Trash', 'happyforms' ),
641
  );
642
 
643
  if ( $this->current_form ) {
675
  }
676
  happyforms_get_message_controller()->update_badge_transient();
677
  break;
678
+ case 'trash':
679
  foreach ( $ids as $id ) {
680
  wp_delete_post( $id );
681
  }
682
+ happyforms_get_message_controller()->update_badge_transient();
683
  break;
684
  case 'export_csv':
685
  $this->export_csv( $ids );
inc/core/classes/class-message-controller.php CHANGED
@@ -135,6 +135,8 @@ class HappyForms_Message_Controller {
135
  add_action( 'parse_request', array( $this, 'admin_post' ) );
136
  add_action( 'admin_init', array( $this, 'admin_post' ) );
137
  add_action( 'delete_post', array( $this, 'delete_post' ) );
 
 
138
 
139
  // Core multi-step hooks
140
  add_action( 'happyforms_step', array( $this, 'default_submission_step' ) );
@@ -354,8 +356,11 @@ class HappyForms_Message_Controller {
354
  // Update the unread badge
355
  $this->update_badge_transient();
356
 
357
- if ( 1 === intval( $form['redirect_on_complete'] ) && ! empty( $form['redirect_url'] ) ) {
 
 
358
  $response['redirect'] = $form['redirect_url'];
 
359
  }
360
 
361
  $message = $this->get( $message_id );
@@ -495,6 +500,16 @@ class HappyForms_Message_Controller {
495
  $this->update_badge_transient();
496
  }
497
 
 
 
 
 
 
 
 
 
 
 
498
  /**
499
  * Verify a message nonce.
500
  *
@@ -576,6 +591,7 @@ class HappyForms_Message_Controller {
576
  if ( ! is_wp_error( $validated_value ) ) {
577
  return $validated_value;
578
  } else {
 
579
  $session->add_error( $part_name, $validated_value->get_error_message() );
580
  }
581
  }
@@ -814,6 +830,21 @@ class HappyForms_Message_Controller {
814
  return $message_array;
815
  }
816
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
817
  /**
818
  * Send a confirmation email to the site owner.
819
  *
@@ -840,42 +871,28 @@ class HappyForms_Message_Controller {
840
  $email_message->set_ccs( array_slice( $to, 1 ) );
841
  }
842
 
843
- $email_message->set_subject( $form['alert_email_subject'] );
844
 
845
- // Compose content with submit data
846
- $content_lines = array();
 
847
 
848
- foreach ( $form['parts'] as $part_data ) {
849
- $visible = apply_filters( 'happyforms_email_part_visible', true, $part_data, $form, $message );
850
 
851
- if ( ! $visible ) {
 
852
  continue;
853
  }
854
 
855
  $part_id = $part_data['id'];
856
  $label = happyforms_get_email_part_label( $message, $part_data, $form );
857
  $value = happyforms_get_email_part_value( $message, $part_data, $form );
858
- $required = happyforms_is_truthy( $part_data['required'] );
859
-
860
- if ( false === $required && empty( $value ) ) {
861
- continue;
862
- }
863
 
864
  if ( isset( $part_data['use_as_subject'] ) && 1 === $part_data['use_as_subject'] ) {
865
  $email_message->set_subject( $value );
866
- } else {
867
- $content_lines[] = "<b>{$label}</b><br>{$value}";
868
  }
869
  }
870
 
871
- // Append the tracking number for this message,
872
- // if present.
873
- if ( intval( $form['unique_id'] ) ) {
874
- $label = __( 'Tracking number', 'happyforms' );
875
- $tracking_id = $message['tracking_id'];
876
- $content_lines[] = "<b>{$label}</b><br>{$tracking_id}";
877
- }
878
-
879
  // Add a Reply To header and a reply-and-mark-as-read link
880
  // if the form includes an email part
881
  $email_part = happyforms_get_form_controller()->get_first_part_by_type( $form, 'email' );
@@ -884,18 +901,13 @@ class HappyForms_Message_Controller {
884
  $part_id = $email_part['id'];
885
  $reply_to = happyforms_get_message_part_value( $message['parts'][$part_id], $email_part );
886
  $email_message->set_reply_to( $reply_to );
887
-
888
- // Reply and mark as read link
889
- if ( happyforms_get_form_property( $form, 'email_mark_and_reply' ) ) {
890
- $content_lines[] = sprintf(
891
- '<a href="%s">%s</a>',
892
- happyforms_get_reply_and_mark_link( $message['ID'] ),
893
- __( 'Reply to this message and mark it as read', 'happyforms' )
894
- );
895
- }
896
  }
897
 
898
- $content = implode( '<br><br>', $content_lines );
 
 
 
 
899
  $email_message->set_content( $content );
900
  $email_message = apply_filters( 'happyforms_email_alert', $email_message );
901
  $email_message->send();
@@ -935,13 +947,10 @@ class HappyForms_Message_Controller {
935
  $to = happyforms_get_message_part_value( $message['parts'][$part_id], $email_part );
936
  $email_message->set_to( $to );
937
 
938
- $content = html_entity_decode( $form['confirmation_email_content'] );
939
-
940
- if ( intval( $form['unique_id'] ) ) {
941
- $label = __( 'Tracking number', 'happyforms' );
942
- $tracking_id = $message['tracking_id'];
943
- $content .= "<br><br>{$label}: {$tracking_id}";
944
- }
945
 
946
  $email_message->set_content( $content );
947
  $email_message = apply_filters( 'happyforms_email_confirmation', $email_message );
135
  add_action( 'parse_request', array( $this, 'admin_post' ) );
136
  add_action( 'admin_init', array( $this, 'admin_post' ) );
137
  add_action( 'delete_post', array( $this, 'delete_post' ) );
138
+ add_action( 'happyforms_form_deleted', array( $this, 'form_deleted' ) );
139
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
140
 
141
  // Core multi-step hooks
142
  add_action( 'happyforms_step', array( $this, 'default_submission_step' ) );
356
  // Update the unread badge
357
  $this->update_badge_transient();
358
 
359
+ if ( happyforms_get_form_property( $form, 'redirect_on_complete' ) &&
360
+ ! empty( happyforms_get_form_property( $form, 'redirect_url' ) ) ) {
361
+
362
  $response['redirect'] = $form['redirect_url'];
363
+ $response['redirect_to_blank'] = intval( happyforms_get_form_property( $form, 'redirect_blank' ) );
364
  }
365
 
366
  $message = $this->get( $message_id );
500
  $this->update_badge_transient();
501
  }
502
 
503
+ public function form_deleted( $form_id ) {
504
+ $responses = $this->get_by_form( $form_id );
505
+
506
+ foreach ( $responses as $response ) {
507
+ wp_delete_post( $response['ID'], true );
508
+ }
509
+
510
+ $this->update_badge_transient();
511
+ }
512
+
513
  /**
514
  * Verify a message nonce.
515
  *
591
  if ( ! is_wp_error( $validated_value ) ) {
592
  return $validated_value;
593
  } else {
594
+ do_action( 'happyforms_validation_error', $form, $part );
595
  $session->add_error( $part_name, $validated_value->get_error_message() );
596
  }
597
  }
830
  return $message_array;
831
  }
832
 
833
+ public function email_part_visible( $visible, $part, $form, $response ) {
834
+ $required = happyforms_is_truthy( $part['required'] );
835
+ $value = happyforms_get_email_part_value( $response, $part, $form );
836
+
837
+ if ( false === $required && empty( $value ) ) {
838
+ $visible = false;
839
+ }
840
+
841
+ if ( isset( $part['use_as_subject'] ) && $part['use_as_subject'] ) {
842
+ $visible = false;
843
+ }
844
+
845
+ return $visible;
846
+ }
847
+
848
  /**
849
  * Send a confirmation email to the site owner.
850
  *
871
  $email_message->set_ccs( array_slice( $to, 1 ) );
872
  }
873
 
874
+ $bccs = explode( ',', $form['email_bccs'] );
875
 
876
+ if ( count( $bccs ) > 0 ) {
877
+ $email_message->set_bccs( $bccs );
878
+ }
879
 
880
+ $email_message->set_subject( $form['alert_email_subject'] );
 
881
 
882
+ foreach ( $form['parts'] as $part_data ) {
883
+ if ( ! happyforms_email_is_part_visible( $part_data, $form, $message ) ) {
884
  continue;
885
  }
886
 
887
  $part_id = $part_data['id'];
888
  $label = happyforms_get_email_part_label( $message, $part_data, $form );
889
  $value = happyforms_get_email_part_value( $message, $part_data, $form );
 
 
 
 
 
890
 
891
  if ( isset( $part_data['use_as_subject'] ) && 1 === $part_data['use_as_subject'] ) {
892
  $email_message->set_subject( $value );
 
 
893
  }
894
  }
895
 
 
 
 
 
 
 
 
 
896
  // Add a Reply To header and a reply-and-mark-as-read link
897
  // if the form includes an email part
898
  $email_part = happyforms_get_form_controller()->get_first_part_by_type( $form, 'email' );
901
  $part_id = $email_part['id'];
902
  $reply_to = happyforms_get_message_part_value( $message['parts'][$part_id], $email_part );
903
  $email_message->set_reply_to( $reply_to );
 
 
 
 
 
 
 
 
 
904
  }
905
 
906
+ ob_start();
907
+ $response = $message;
908
+ require_once( happyforms_owner_email_template_path() );
909
+ $content = ob_get_clean();
910
+
911
  $email_message->set_content( $content );
912
  $email_message = apply_filters( 'happyforms_email_alert', $email_message );
913
  $email_message->send();
947
  $to = happyforms_get_message_part_value( $message['parts'][$part_id], $email_part );
948
  $email_message->set_to( $to );
949
 
950
+ ob_start();
951
+ $response = $message;
952
+ require_once( happyforms_user_email_template_path() );
953
+ $content = ob_get_clean();
 
 
 
954
 
955
  $email_message->set_content( $content );
956
  $email_message = apply_filters( 'happyforms_email_confirmation', $email_message );
inc/core/classes/class-migrations.php CHANGED
@@ -34,7 +34,12 @@ class HappyForms_Migrations {
34
  }
35
 
36
  public function hook() {
 
 
 
 
37
  $this->add_migration( '1.0', array( $this, 'migrate_1_0' ) );
 
38
 
39
  $this->migrate();
40
  }
@@ -154,6 +159,21 @@ class HappyForms_Migrations {
154
  $wpdb->query( $sql );
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
158
 
159
  if ( ! function_exists( 'happyforms_get_migrations' ) ):
34
  }
35
 
36
  public function hook() {
37
+ add_action( 'init', array( $this, 'add_migrations' ) );
38
+ }
39
+
40
+ public function add_migrations() {
41
  $this->add_migration( '1.0', array( $this, 'migrate_1_0' ) );
42
+ $this->add_migration( '1.1', array( $this, 'migrate_1_1' ) );
43
 
44
  $this->migrate();
45
  }
159
  $wpdb->query( $sql );
160
  }
161
 
162
+ public function migrate_1_1( $version, $current_version ) {
163
+ $form_controller = happyforms_get_form_controller();
164
+ $forms = $form_controller->get();
165
+
166
+ foreach ( $forms as $form ) {
167
+ if ( ! empty( $form['redirect_url'] ) && ! isset( $form['redirect_on_complete'] ) ) {
168
+ happyforms_update_meta( $form['ID'], 'redirect_on_complete', 1 );
169
+ }
170
+
171
+ if ( ! empty( $form['html_id'] ) && ! isset( $form['use_html_id'] ) ) {
172
+ happyforms_update_meta( $form['ID'], 'use_html_id', 1 );
173
+ }
174
+ }
175
+ }
176
+
177
  }
178
 
179
  if ( ! function_exists( 'happyforms_get_migrations' ) ):
inc/core/classes/parts/class-part-checkbox.php CHANGED
@@ -4,10 +4,18 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
4
 
5
  public $type = 'checkbox';
6
 
 
 
7
  public function __construct() {
8
  $this->label = __( 'Multiple Choice', 'happyforms' );
9
  $this->description = __( 'For checkboxes allowing multiple selections.', 'happyforms' );
10
 
 
 
 
 
 
 
11
  add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
13
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
4
 
5
  public $type = 'checkbox';
6
 
7
+ public static $parent;
8
+
9
  public function __construct() {
10
  $this->label = __( 'Multiple Choice', 'happyforms' );
11
  $this->description = __( 'For checkboxes allowing multiple selections.', 'happyforms' );
12
 
13
+ $this->hook();
14
+ }
15
+
16
+ public function hook() {
17
+ self::$parent = $this;
18
+
19
  add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
20
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
21
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
inc/core/classes/parts/class-part-narrative.php CHANGED
@@ -143,7 +143,7 @@ class HappyForms_Part_Narrative extends HappyForms_Form_Part {
143
  public function stringify_value( $value, $part, $form ) {
144
  if ( $this->type === $part['type'] ) {
145
  $tokens = happyforms_get_narrative_tokens( $part['format'] );
146
- $format = str_replace( '[]', '%s', $part['format'] );
147
  $value = vsprintf( html_entity_decode( stripslashes( $format ) ), $value );
148
  $value = sanitize_text_field( $value );
149
  }
143
  public function stringify_value( $value, $part, $form ) {
144
  if ( $this->type === $part['type'] ) {
145
  $tokens = happyforms_get_narrative_tokens( $part['format'] );
146
+ $format = happyforms_get_narrative_format( $part['format'] );
147
  $value = vsprintf( html_entity_decode( stripslashes( $format ) ), $value );
148
  $value = sanitize_text_field( $value );
149
  }
inc/core/classes/parts/class-part-placeholder.php CHANGED
@@ -9,6 +9,7 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
9
  $this->description = __( 'For adding helper text, horizontal rules and extra space.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
 
12
  }
13
 
14
  /**
@@ -43,6 +44,10 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
43
  'placeholder_text' => array(
44
  'default' => '',
45
  'sanitize' => 'esc_html'
 
 
 
 
46
  )
47
  );
48
 
@@ -135,6 +140,14 @@ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
135
  return $visible;
136
  }
137
 
 
 
 
 
 
 
 
 
138
  /**
139
  * Enqueue scripts in customizer area.
140
  *
9
  $this->description = __( 'For adding helper text, horizontal rules and extra space.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
12
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 2 );
13
  }
14
 
15
  /**
44
  'placeholder_text' => array(
45
  'default' => '',
46
  'sanitize' => 'esc_html'
47
+ ),
48
+ 'required' => array(
49
+ 'default' => 0,
50
+ 'sanitize' => 'happyforms_sanitize_checkbox'
51
  )
52
  );
53
 
140
  return $visible;
141
  }
142
 
143
+ public function email_part_visible( $visible, $part ) {
144
+ if ( $this->type === $part['type'] ) {
145
+ $visible = false;
146
+ }
147
+
148
+ return $visible;
149
+ }
150
+
151
  /**
152
  * Enqueue scripts in customizer area.
153
  *
inc/core/classes/parts/class-part-radio.php CHANGED
@@ -3,12 +3,21 @@
3
  class HappyForms_Part_Radio extends HappyForms_Form_Part {
4
 
5
  public $type = 'radio';
 
6
  public $template_id = 'happyforms-radio-template';
7
 
 
 
8
  public function __construct() {
9
  $this->label = __( 'Single Choice', 'happyforms' );
10
  $this->description = __( 'For radio buttons allowing one selection.', 'happyforms' );
11
 
 
 
 
 
 
 
12
  add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
13
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
14
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
3
  class HappyForms_Part_Radio extends HappyForms_Form_Part {
4
 
5
  public $type = 'radio';
6
+
7
  public $template_id = 'happyforms-radio-template';
8
 
9
+ public static $parent;
10
+
11
  public function __construct() {
12
  $this->label = __( 'Single Choice', 'happyforms' );
13
  $this->description = __( 'For radio buttons allowing one selection.', 'happyforms' );
14
 
15
+ $this->hook();
16
+ }
17
+
18
+ public function hook() {
19
+ self::$parent = $this;
20
+
21
  add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
22
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
23
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
inc/core/helpers/helper-activation.php CHANGED
@@ -51,13 +51,32 @@ function happyforms_create_samples() {
51
  // Get the new form default data
52
  $form_data = $form_controller->get( $form->ID );
53
 
54
- $form_data['post_title'] = __( 'Sample Contact Form', 'happyforms' );
55
 
56
  // Prepare age dropdown options
57
- $age_options = array();
58
- for ( $age = 1; $age < 100; $age ++ ) {
59
- $age_options[] = array( 'label' => $age );
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  $form_parts = array(
63
  array(
@@ -87,7 +106,7 @@ function happyforms_create_samples() {
87
  ),
88
  array(
89
  'type' => 'select',
90
- 'label' => __( 'Age', 'happyforms' ),
91
  'options' => $age_options
92
  ),
93
  array(
@@ -114,28 +133,16 @@ function happyforms_create_samples() {
114
  $form_data['parts'][] = $part_data;
115
  }
116
 
 
 
117
  // Update the new form with default parts
118
  $form_data = $form_controller->update( $form_data );
119
 
120
  // Create example submissions
121
  $messages_data = array(
122
  array(
123
- 'First name' => 'Martha',
124
- 'Last name' => 'Daniel',
125
- 'What\'s your reason for contacting us?' => 0,
126
- 'Age' => 31,
127
- 'Your message' => __( 'It would be great if I could use Google ReCaptcha instead of Honeypot.', 'happyforms' ),
128
- ),
129
- array(
130
- 'First name' => 'Willie',
131
- 'Last name' => 'Crawford',
132
- 'What\'s your reason for contacting us?' => 1,
133
- 'Age' => 45,
134
- 'Your message' => __( 'How do I embed a HappyForm in my sidebar?', 'happyforms' ),
135
- ),
136
- array(
137
- 'First name' => 'Bonnie',
138
- 'Last name' => 'Mccarthy',
139
  'What\'s your reason for contacting us?' => 2,
140
  'Age' => 37,
141
  'Your message' => __( 'How can I access my premium upgrade credentials?', 'happyforms' ) ,
@@ -175,29 +182,6 @@ function happyforms_create_samples() {
175
 
176
  endif;
177
 
178
- if ( ! function_exists( 'happyforms_migrate_moved_fields' ) ):
179
-
180
- function happyforms_migrate_moved_fields() {
181
- require_once( happyforms_get_include_folder() . '/core/classes/class-form-controller.php' );
182
- require_once( happyforms_get_include_folder() . '/core/classes/class-form-part-library.php' );
183
- require_once( happyforms_get_include_folder() . '/core/helpers/helper-misc.php' );
184
-
185
- $form_controller = happyforms_get_form_controller();
186
- $forms = $form_controller->get();
187
-
188
- foreach ( $forms as $form ) {
189
- if ( ! empty( $form['redirect_url'] ) && ! isset( $form['redirect_on_complete'] ) ) {
190
- happyforms_update_meta( $form['ID'], 'redirect_on_complete', 1 );
191
- }
192
-
193
- if ( ! empty( $form['html_id'] ) && ! isset( $form['use_html_id'] ) ) {
194
- happyforms_update_meta( $form['ID'], 'use_html_id', 1 );
195
- }
196
- }
197
- }
198
-
199
- endif;
200
-
201
  if ( ! function_exists( 'happyforms_deactivate' ) ):
202
  /**
203
  * Action: Deactivation routine.
@@ -231,5 +215,4 @@ endif;
231
  register_activation_hook( happyforms_plugin_file(), 'happyforms_activate' );
232
  register_deactivation_hook( happyforms_plugin_file(), 'happyforms_deactivate' );
233
 
234
- add_action( 'happyforms_activate', 'happyforms_create_samples' );
235
- add_action( 'happyforms_activate', 'happyforms_migrate_moved_fields' );
51
  // Get the new form default data
52
  $form_data = $form_controller->get( $form->ID );
53
 
54
+ $form_data['post_title'] = __( 'Sample Form', 'happyforms' );
55
 
56
  // Prepare age dropdown options
57
+ $age_options = array(
58
+ array(
59
+ 'label' => '20-24'
60
+ ),
61
+ array(
62
+ 'label' => '25-29'
63
+ ),
64
+ array(
65
+ 'label' => '30-34'
66
+ ),
67
+ array(
68
+ 'label' => '35-39'
69
+ ),
70
+ array(
71
+ 'label' => '40-44'
72
+ ),
73
+ array(
74
+ 'label' => '45-49'
75
+ ),
76
+ array(
77
+ 'label' => '50+'
78
+ ),
79
+ );
80
 
81
  $form_parts = array(
82
  array(
106
  ),
107
  array(
108
  'type' => 'select',
109
+ 'label' => __( 'What\'s your age?', 'happyforms' ),
110
  'options' => $age_options
111
  ),
112
  array(
133
  $form_data['parts'][] = $part_data;
134
  }
135
 
136
+ echo var_dump( $form_data['parts'] );
137
+
138
  // Update the new form with default parts
139
  $form_data = $form_controller->update( $form_data );
140
 
141
  // Create example submissions
142
  $messages_data = array(
143
  array(
144
+ 'First name' => 'Mr Sample',
145
+ 'Last name' => 'Bloggs',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  'What\'s your reason for contacting us?' => 2,
147
  'Age' => 37,
148
  'Your message' => __( 'How can I access my premium upgrade credentials?', 'happyforms' ) ,
182
 
183
  endif;
184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  if ( ! function_exists( 'happyforms_deactivate' ) ):
186
  /**
187
  * Action: Deactivation routine.
215
  register_activation_hook( happyforms_plugin_file(), 'happyforms_activate' );
216
  register_deactivation_hook( happyforms_plugin_file(), 'happyforms_deactivate' );
217
 
218
+ add_action( 'happyforms_activate', 'happyforms_create_samples' );
 
inc/core/helpers/helper-form-templates.php CHANGED
@@ -1373,14 +1373,29 @@ function happyforms_get_rating_icons( $part ) {
1373
 
1374
  endif;
1375
 
 
 
 
 
 
 
 
 
 
 
1376
  if ( ! function_exists( 'happyforms_get_narrative_tokens' ) ) :
1377
 
1378
- function happyforms_get_narrative_tokens( $format ) {
1379
- $count = substr_count( $format, '[]' );
1380
- $tokens = array();
 
 
 
 
 
1381
 
1382
- if ( $count > 0 ) {
1383
- $tokens = array_fill( 0, $count, '' );
1384
  }
1385
 
1386
  return $tokens;
1373
 
1374
  endif;
1375
 
1376
+ if ( ! function_exists( 'happyforms_get_narrative_format' ) ) :
1377
+
1378
+ function happyforms_get_narrative_format( $format ) {
1379
+ $format = preg_replace( '/\[([^\]]*)\]/m', '%s', $format );
1380
+
1381
+ return $format;
1382
+ }
1383
+
1384
+ endif;
1385
+
1386
  if ( ! function_exists( 'happyforms_get_narrative_tokens' ) ) :
1387
 
1388
+ function happyforms_get_narrative_tokens( $format, $with_placeholders = false ) {
1389
+ $matches = preg_match_all( '/\[([^\]]*)\]/m', $format, $tokens );
1390
+
1391
+ if ( ! $matches ) {
1392
+ return array();
1393
+ }
1394
+
1395
+ $tokens = $tokens[1];
1396
 
1397
+ if ( ! $with_placeholders ) {
1398
+ return array_fill( 0, count( $tokens ), '' );
1399
  }
1400
 
1401
  return $tokens;
inc/core/helpers/helper-misc.php CHANGED
@@ -589,6 +589,38 @@ function happyforms_get_email_part_value( $message, $part = array(), $form = arr
589
 
590
  endif;
591
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
  if ( ! function_exists( 'happyforms_is_preview_context' ) ) :
593
 
594
  function happyforms_is_preview_context() {
@@ -650,17 +682,25 @@ function happyforms_unprefix_meta( $meta ) {
650
  $meta = $meta ? $meta : array();
651
  $meta = array_map( 'reset', $meta );
652
  $meta = array_map( 'maybe_unserialize', $meta );
 
 
653
 
654
  foreach( $meta as $key => $value ) {
655
  if ( false !== strpos( $key, '_happyforms_' ) ) {
656
  $unprefixed_key = str_replace( '_happyforms_', '', $key );
657
- $meta[$unprefixed_key] = $value;
 
 
658
  }
 
659
 
660
- unset( $meta[$key] );
 
 
 
661
  }
662
 
663
- return $meta;
664
  }
665
 
666
  endif;
589
 
590
  endif;
591
 
592
+ if ( ! function_exists( 'happyforms_email_is_part_visible' ) ):
593
+
594
+ function happyforms_email_is_part_visible( $part = array(), $form = array(), $response = array() ) {
595
+ $visible = apply_filters( 'happyforms_email_part_visible', true, $part, $form, $response );
596
+
597
+ return $visible;
598
+ }
599
+
600
+ endif;
601
+
602
+ if ( ! function_exists( 'happyforms_owner_email_template_path' ) ):
603
+
604
+ function happyforms_owner_email_template_path() {
605
+ $path = happyforms_get_include_folder() . '/core/templates/email-owner.php';
606
+ $path = apply_filters( 'happyforms_owner_email_template_path', $path );
607
+
608
+ return $path;
609
+ }
610
+
611
+ endif;
612
+
613
+ if ( ! function_exists( 'happyforms_user_email_template_path' ) ):
614
+
615
+ function happyforms_user_email_template_path() {
616
+ $path = happyforms_get_include_folder() . '/core/templates/email-user.php';
617
+ $path = apply_filters( 'happyforms_user_email_template_path', $path );
618
+
619
+ return $path;
620
+ }
621
+
622
+ endif;
623
+
624
  if ( ! function_exists( 'happyforms_is_preview_context' ) ) :
625
 
626
  function happyforms_is_preview_context() {
682
  $meta = $meta ? $meta : array();
683
  $meta = array_map( 'reset', $meta );
684
  $meta = array_map( 'maybe_unserialize', $meta );
685
+ $prefixed_meta = array();
686
+ $unprefixed_meta = array();
687
 
688
  foreach( $meta as $key => $value ) {
689
  if ( false !== strpos( $key, '_happyforms_' ) ) {
690
  $unprefixed_key = str_replace( '_happyforms_', '', $key );
691
+ $prefixed_meta[$unprefixed_key] = $value;
692
+ } else {
693
+ $unprefixed_meta[$key] = $value;
694
  }
695
+ }
696
 
697
+ foreach( $unprefixed_meta as $key => $value ) {
698
+ if ( ! isset( $prefixed_meta[$key] ) ) {
699
+ $prefixed_meta[$key] = $value;
700
+ }
701
  }
702
 
703
+ return $prefixed_meta;
704
  }
705
 
706
  endif;
inc/core/templates/email-owner.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Part loop
5
+ *
6
+ */
7
+ ?>
8
+ <?php foreach( $form['parts'] as $part ) : ?>
9
+
10
+ <?php if ( happyforms_email_is_part_visible( $part, $form, $response ) ) : ?>
11
+
12
+ <b><?php echo happyforms_get_email_part_label( $response, $part, $form ); ?></b><br>
13
+ <?php echo happyforms_get_email_part_value( $response, $part, $form ); ?>
14
+ <br><br>
15
+
16
+ <?php endif; ?>
17
+
18
+ <?php endforeach; ?>
19
+
20
+ <?php
21
+ /**
22
+ *
23
+ * Tracking number
24
+ *
25
+ */
26
+ ?>
27
+ <?php if ( happyforms_get_form_property( $form, 'unique_id' ) ) : ?>
28
+
29
+ <b><?php _e( 'Tracking number', 'happyforms' ); ?></b><br>
30
+ <?php echo $response['tracking_id']; ?>
31
+
32
+ <?php endif; ?>
33
+
34
+ <?php
35
+ /**
36
+ *
37
+ * Mark and reply link
38
+ *
39
+ */
40
+ ?>
41
+ <?php if ( happyforms_get_form_controller()->get_first_part_by_type( $form, 'email' ) ) : ?>
42
+
43
+ <?php if ( happyforms_get_form_property( $form, 'email_mark_and_reply' ) ) : ?>
44
+
45
+ <a href="<?php echo happyforms_get_reply_and_mark_link( $response['ID'] ); ?>"><?php _e( 'Reply to this message and mark it as read', 'happyforms' ); ?></a>
46
+
47
+ <?php endif; ?>
48
+
49
+ <?php endif; ?>
inc/core/templates/email-user.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * Email content
5
+ *
6
+ */
7
+ ?>
8
+ <?php echo html_entity_decode( $form['confirmation_email_content'] ); ?>
9
+
10
+ <br><br>
11
+
12
+ <?php
13
+ /**
14
+ *
15
+ * Tracking number
16
+ *
17
+ */
18
+ ?>
19
+ <?php if ( happyforms_get_form_property( $form, 'unique_id' ) ) : ?>
20
+
21
+ <b><?php _e( 'Tracking number', 'happyforms' ); ?></b><br>
22
+ <?php echo $response['tracking_id']; ?>
23
+
24
+ <?php endif; ?>
inc/core/templates/partials/part-preview.php CHANGED
@@ -1,9 +1,5 @@
1
- <?php
2
- $required = happyforms_is_truthy( $part['required'] );
3
- $empty = empty( happyforms_get_part_preview_value( $part, $form ) );
4
- $hidden = ( ! $required && $empty );
5
- ?>
6
- <div class="happyforms-form__part happyforms-part-preview" <?php if ( $hidden ) : ?>style="display: none;"<?php endif; ?>>
7
  <label class="happyforms-part__label">
8
  <span class="label"><?php echo esc_html( $part['label'] ); ?></span>
9
  </label>
1
+ <?php $visible = apply_filters( 'happyforms_message_part_visible', true, $part ); ?>
2
+ <div class="happyforms-form__part happyforms-part-preview" <?php if ( ! $visible ) : ?>style="display: none;"<?php endif; ?>>
 
 
 
 
3
  <label class="happyforms-part__label">
4
  <span class="label"><?php echo esc_html( $part['label'] ); ?></span>
5
  </label>
inc/core/templates/parts/customize-narrative.php CHANGED
@@ -21,6 +21,7 @@
21
  <p>
22
  <label for="<%= instance.id %>_format"><?php _e( 'Text', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_format" data-bind="format"><%= instance.format %></textarea>
 
24
  </p>
25
  <p>
26
  <label>
21
  <p>
22
  <label for="<%= instance.id %>_format"><?php _e( 'Text', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_format" data-bind="format"><%= instance.format %></textarea>
24
+ <span class="description"><?php _e( 'Text between brackets is turned into input placeholders.', 'happyforms-upgrade' ); ?></span>
25
  </p>
26
  <p>
27
  <label>
inc/core/templates/parts/frontend-checkbox.php CHANGED
@@ -24,7 +24,7 @@
24
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
25
  <?php $checked = in_array( $o, $value ) ? 'checked="checked"' : ''; ?>
26
  <label class="option-label">
27
- <input type="checkbox" class="happyforms-visuallyhidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php echo $o; ?>" data-serialize <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
28
  <span class="checkmark"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z"/></svg></span>
29
  <span class="border"></span>
30
  <span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
@@ -33,11 +33,11 @@
33
  </div>
34
  <?php endforeach; ?>
35
 
 
 
36
  <?php happyforms_print_part_description( $part ); ?>
37
 
38
  <?php happyforms_message_notices( happyforms_get_part_name( $part, $form ) ); ?>
39
  </div>
40
-
41
- <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
42
  </div>
43
  </div>
24
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
25
  <?php $checked = in_array( $o, $value ) ? 'checked="checked"' : ''; ?>
26
  <label class="option-label">
27
+ <input type="checkbox" class="happyforms-visuallyhidden happyforms-checkbox" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php echo $o; ?>" data-serialize <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
28
  <span class="checkmark"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z"/></svg></span>
29
  <span class="border"></span>
30
  <span class="label"><?php echo esc_attr( $option['label'] ); ?></span>
33
  </div>
34
  <?php endforeach; ?>
35
 
36
+ <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
37
+
38
  <?php happyforms_print_part_description( $part ); ?>
39
 
40
  <?php happyforms_message_notices( happyforms_get_part_name( $part, $form ) ); ?>
41
  </div>
 
 
42
  </div>
43
  </div>
inc/core/templates/parts/frontend-date-day.php CHANGED
@@ -14,7 +14,7 @@ if ( '' === $day_value && 'current' === $part['default_datetime'] ) {
14
 
15
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[day]" value="<?php echo $day_value; ?>" data-serialize />
16
 
17
- <input type="text" value="<?php echo $day_value; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="true" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
18
 
19
  <?php
20
  $options = array();
14
 
15
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[day]" value="<?php echo $day_value; ?>" data-serialize />
16
 
17
+ <input type="text" value="<?php echo $day_value; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="false" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
18
 
19
  <?php
20
  $options = array();
inc/core/templates/parts/frontend-date-month.php CHANGED
@@ -16,7 +16,7 @@ if ( '' === $month_value && 'current' === $part['default_datetime'] ) {
16
 
17
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[month]" value="<?php echo $month_value; ?>" data-serialize />
18
 
19
- <input type="text" value="<?php echo ( $month_value ) ? $months[$month_value] : ''; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="true" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
20
 
21
  <?php
22
  $options = array();
16
 
17
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[month]" value="<?php echo $month_value; ?>" data-serialize />
18
 
19
+ <input type="text" value="<?php echo ( $month_value ) ? $months[$month_value] : ''; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="false" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
20
 
21
  <?php
22
  $options = array();
inc/core/templates/parts/frontend-date.php CHANGED
@@ -36,7 +36,7 @@
36
 
37
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[year]" value="<?php echo $year_value; ?>" data-serialize />
38
 
39
- <input type="text" value="<?php echo $year_value; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="true" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
40
 
41
  <?php
42
  $order = ( isset( $part['years_order'] ) ) ? $part['years_order'] : 'desc';
36
 
37
  <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>[year]" value="<?php echo $year_value; ?>" data-serialize />
38
 
39
+ <input type="text" value="<?php echo $year_value; ?>" placeholder="<?php echo $placeholder_text; ?>" data-searchable="false" autocomplete="off" <?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form ); ?> />
40
 
41
  <?php
42
  $order = ( isset( $part['years_order'] ) ) ? $part['years_order'] : 'desc';
inc/core/templates/parts/frontend-narrative.php CHANGED
@@ -8,18 +8,18 @@
8
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
9
 
10
  <p><?php
11
- $tokens = happyforms_get_narrative_tokens( $part['format'] );
12
- $format = str_replace( '[]', '%s', $part['format'] );
13
  $inputs = array();
14
 
15
- for ( $t = 0; $t < count( $tokens ); $t ++ ) {
16
  ob_start(); ?>
17
- <input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php happyforms_the_part_value( $part, $form, $t ); ?>"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form, $t ); ?> /><?php
18
  $input = ob_get_clean();
19
- $tokens[$t] = $input;
20
  }
21
 
22
- vprintf( html_entity_decode( stripslashes( $format ) ), $tokens );
23
  ?></p>
24
 
25
  <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
8
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
9
 
10
  <p><?php
11
+ $tokens = happyforms_get_narrative_tokens( $part['format'], true );
12
+ $format = happyforms_get_narrative_format( $part['format'] );
13
  $inputs = array();
14
 
15
+ foreach ( $tokens as $t => $placeholder ) {
16
  ob_start(); ?>
17
+ <input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="text" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" <?php if ( ! empty( $placeholder ) ) : ?>placeholder="<?php echo esc_html( $placeholder ); ?>" <?php endif; ?> value="<?php happyforms_the_part_value( $part, $form, $t ); ?>"<?php if ( 1 === $part['required'] ) : ?> required aria-required="true"<?php endif; ?> <?php happyforms_the_part_attributes( $part, $form, $t ); ?> /><?php
18
  $input = ob_get_clean();
19
+ $inputs[$t] = $input;
20
  }
21
 
22
+ vprintf( html_entity_decode( stripslashes( $format ) ), $inputs );
23
  ?></p>
24
 
25
  <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
inc/core/templates/parts/frontend-radio.php CHANGED
@@ -10,7 +10,13 @@
10
  $value = happyforms_get_part_value( $part, $form );
11
 
12
  foreach( $options as $o => $option ) : ?>
13
- <?php $checked = ! empty( $option['label'] ) ? checked( $value, $o, false ) : ''; ?>
 
 
 
 
 
 
14
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
15
  <label class="option-label">
16
  <input type="radio" class="happyforms-visuallyhidden" name="<?php happyforms_the_part_name( $part, $form ); ?>" value="<?php echo $o; ?>" <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
@@ -22,11 +28,11 @@
22
  </div>
23
  <?php endforeach; ?>
24
 
 
 
25
  <?php happyforms_print_part_description( $part ); ?>
26
 
27
  <?php happyforms_message_notices( happyforms_get_part_name( $part, $form ) ); ?>
28
  </div>
29
-
30
- <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
31
  </div>
32
  </div>
10
  $value = happyforms_get_part_value( $part, $form );
11
 
12
  foreach( $options as $o => $option ) : ?>
13
+ <?php
14
+ $checked = false;
15
+
16
+ if ( is_string( $value ) ) {
17
+ $checked = ! empty( $option['label'] ) ? checked( $value, $o, false ) : '';
18
+ }
19
+ ?>
20
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
21
  <label class="option-label">
22
  <input type="radio" class="happyforms-visuallyhidden" name="<?php happyforms_the_part_name( $part, $form ); ?>" value="<?php echo $o; ?>" <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
28
  </div>
29
  <?php endforeach; ?>
30
 
31
+ <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
32
+
33
  <?php happyforms_print_part_description( $part ); ?>
34
 
35
  <?php happyforms_message_notices( happyforms_get_part_name( $part, $form ) ); ?>
36
  </div>
 
 
37
  </div>
38
  </div>
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.7\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
- "POT-Creation-Date: 2019-04-02 14:06:29+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -178,42 +178,49 @@ msgstr ""
178
  msgid "Author"
179
  msgstr ""
180
 
181
- #: inc/core/classes/class-form-admin.php:304
 
 
 
 
 
 
 
182
  msgid "Copy to clipboard"
183
  msgstr ""
184
 
185
- #: inc/core/classes/class-form-admin.php:358
186
  #: inc/core/templates/customize-form-steps.php:5
187
  msgid "Build"
188
  msgstr ""
189
 
190
- #: inc/core/classes/class-form-admin.php:362
191
  #: inc/core/templates/customize-form-item.php:21
192
  #: inc/core/templates/customize-form-steps.php:8
193
  #: inc/core/templates/customize-form-steps.php:15
194
  msgid "Setup"
195
  msgstr ""
196
 
197
- #: inc/core/classes/class-form-admin.php:366
198
  #: inc/core/templates/customize-form-item.php:24
199
  #: inc/core/templates/customize-form-steps.php:18
200
  msgid "Style"
201
  msgstr ""
202
 
203
- #: inc/core/classes/class-form-admin.php:370
204
  #: inc/core/templates/customize-form-item.php:27
205
  #: inc/core/templates/customize-form-part-footer.php:4
206
  msgid "Duplicate"
207
  msgstr ""
208
 
209
- #: inc/core/classes/class-form-admin.php:374
210
  #: inc/core/classes/class-message-admin.php:640
211
- #: inc/core/classes/class-message-admin.php:719
212
- #: inc/core/classes/class-message-admin.php:927
213
  msgid "Trash"
214
  msgstr ""
215
 
216
- #: inc/core/classes/class-form-admin.php:419
217
  msgid "Form duplicated succesfully."
218
  msgstr ""
219
 
@@ -223,7 +230,7 @@ msgstr ""
223
 
224
  #: inc/core/classes/class-form-controller.php:77
225
  #: inc/core/classes/class-message-admin.php:397
226
- #: inc/core/classes/class-message-admin.php:916
227
  msgid "Form"
228
  msgstr ""
229
 
@@ -263,26 +270,26 @@ msgstr ""
263
  msgid "Untitled form"
264
  msgstr ""
265
 
266
- #: inc/core/classes/class-form-controller.php:610
267
  msgid " Copy"
268
  msgstr ""
269
 
270
- #: inc/core/classes/class-form-controller.php:799
271
- #: inc/core/classes/class-message-controller.php:318
272
- #: inc/core/classes/class-message-controller.php:418
273
- #: inc/core/classes/class-message-controller.php:453
274
  msgid "Oops! Your response is invalid — please review your message."
275
  msgstr ""
276
 
277
- #: inc/core/classes/class-form-part-library.php:189
278
  msgid "Invalid data"
279
  msgstr ""
280
 
281
- #: inc/core/classes/class-form-part-library.php:196
282
  msgid "Part definition not found"
283
  msgstr ""
284
 
285
- #: inc/core/classes/class-form-part-library.php:227
286
  msgid "Missing validation callback for field %s"
287
  msgstr ""
288
 
@@ -290,235 +297,250 @@ msgstr ""
290
  msgid "Thank you! Your response has been successfully submitted."
291
  msgstr ""
292
 
293
- #: inc/core/classes/class-form-setup.php:78
294
  msgid "You received a new message"
295
  msgstr ""
296
 
297
- #: inc/core/classes/class-form-setup.php:90
298
  msgid "We received your message"
299
  msgstr ""
300
 
301
- #: inc/core/classes/class-form-setup.php:94
302
  msgid ""
303
  "Your message has been successfully sent. We appreciate you contacting us "
304
  "and we’ll be in touch soon."
305
  msgstr ""
306
 
307
- #: inc/core/classes/class-form-setup.php:110
308
  msgid "(optional)"
309
  msgstr ""
310
 
311
- #: inc/core/classes/class-form-setup.php:114
312
  msgid "Submit Form"
313
  msgstr ""
314
 
315
- #: inc/core/classes/class-form-setup.php:138
316
  msgid "Validate your submission"
317
  msgstr ""
318
 
319
- #: inc/core/classes/class-form-setup.php:146
320
  msgid "Review submission"
321
  msgstr ""
322
 
323
- #: inc/core/classes/class-form-setup.php:190
324
  msgid "Confirmation message"
325
  msgstr ""
326
 
327
- #: inc/core/classes/class-form-setup.php:191
328
  msgid ""
329
  "This is the message your users will see after succesfully submitting your "
330
  "form."
331
  msgstr ""
332
 
333
- #: inc/core/classes/class-form-setup.php:196
334
  msgid "Receive submission alerts"
335
  msgstr ""
336
 
337
- #: inc/core/classes/class-form-setup.php:201
338
  #: inc/core/templates/admin-tracking.php:15
339
  msgid "Email address"
340
  msgstr ""
341
 
342
- #: inc/core/classes/class-form-setup.php:202
343
  msgid ""
344
  "Add your email address here to receive a confirmation email for each form "
345
  "response. You can add multiple email addresses by separating each address "
346
  "with a comma."
347
  msgstr ""
348
 
349
- #: inc/core/classes/class-form-setup.php:207
350
- #: inc/core/classes/class-form-setup.php:230
 
 
 
 
 
 
 
 
 
 
 
351
  msgid "Email subject"
352
  msgstr ""
353
 
354
- #: inc/core/classes/class-form-setup.php:208
355
  msgid ""
356
  "Each time a user submits a message, you'll receive an email with this "
357
  "subject."
358
  msgstr ""
359
 
360
- #: inc/core/classes/class-form-setup.php:213
361
  msgid "Include mark and reply link"
362
  msgstr ""
363
 
364
- #: inc/core/classes/class-form-setup.php:214
365
  msgid "Reply to your users and mark their submission as read in one click."
366
  msgstr ""
367
 
368
- #: inc/core/classes/class-form-setup.php:219
369
  msgid "Send confirmation email"
370
  msgstr ""
371
 
372
- #: inc/core/classes/class-form-setup.php:224
373
  msgid "Email display name"
374
  msgstr ""
375
 
376
- #: inc/core/classes/class-form-setup.php:225
377
  msgid ""
378
  "If your form contains an email field, recipients will receive an email with "
379
  "this sender name."
380
  msgstr ""
381
 
382
- #: inc/core/classes/class-form-setup.php:231
383
  msgid ""
384
  "If your form contains an email field, recipients will receive an email with "
385
  "this subject."
386
  msgstr ""
387
 
388
- #: inc/core/classes/class-form-setup.php:236
389
  msgid "Email content"
390
  msgstr ""
391
 
392
- #: inc/core/classes/class-form-setup.php:237
393
  msgid ""
394
  "If your form contains an email field, recipients will receive an email with "
395
  "this content."
396
  msgstr ""
397
 
398
- #: inc/core/classes/class-form-setup.php:242
399
  msgid "Optional part label"
400
  msgstr ""
401
 
402
- #: inc/core/classes/class-form-setup.php:247
403
  msgid "Submit button label"
404
  msgstr ""
405
 
406
- #: inc/core/classes/class-form-setup.php:252
407
  msgid "Submit button HTML class"
408
  msgstr ""
409
 
410
- #: inc/core/classes/class-form-setup.php:257
411
  msgid "Set custom form HTML ID"
412
  msgstr ""
413
 
414
- #: inc/core/classes/class-form-setup.php:259
415
  msgid "Add a unique HTML ID to your form. Write without a hash (#) character."
416
  msgstr ""
417
 
418
- #: inc/core/classes/class-form-setup.php:263
419
  msgid "Form HTML ID"
420
  msgstr ""
421
 
422
- #: inc/core/classes/class-form-setup.php:268
423
  msgid "Redirect on complete"
424
  msgstr ""
425
 
426
- #: inc/core/classes/class-form-setup.php:269
427
  msgid ""
428
  "By default, recipients will be redirected to the post or page displaying "
429
  "this form. To set a custom redirect webpage, add a link here."
430
  msgstr ""
431
 
432
- #: inc/core/classes/class-form-setup.php:274
433
  msgid "On complete redirect link"
434
  msgstr ""
435
 
436
- #: inc/core/classes/class-form-setup.php:279
 
 
 
 
437
  msgid "Spam prevention"
438
  msgstr ""
439
 
440
- #: inc/core/classes/class-form-setup.php:280
441
  msgid "Protect your form against bots by using HoneyPot security."
442
  msgstr ""
443
 
444
- #: inc/core/classes/class-form-setup.php:286
445
  msgid ""
446
  "Use <a href=\"%s\" target=\"_blank\" class=\"external\"> Google "
447
  "ReCaptcha</a>"
448
  msgstr ""
449
 
450
- #: inc/core/classes/class-form-setup.php:289
451
  msgid "Protect your form against bots using your Google ReCaptcha credentials."
452
  msgstr ""
453
 
454
- #: inc/core/classes/class-form-setup.php:294
455
  msgid "ReCaptcha site key"
456
  msgstr ""
457
 
458
- #: inc/core/classes/class-form-setup.php:299
459
  msgid "ReCaptcha secret key"
460
  msgstr ""
461
 
462
- #: inc/core/classes/class-form-setup.php:304
463
  msgid "ReCaptcha label"
464
  msgstr ""
465
 
466
- #: inc/core/classes/class-form-setup.php:309
467
  msgid "Save responses"
468
  msgstr ""
469
 
470
- #: inc/core/classes/class-form-setup.php:310
471
  msgid "Keep recipients responses stored in your WordPress database."
472
  msgstr ""
473
 
474
- #: inc/core/classes/class-form-setup.php:315
475
  msgid "Give each response an ID number"
476
  msgstr ""
477
 
478
- #: inc/core/classes/class-form-setup.php:316
479
  msgid "Tag responses with a unique, incremental identifier."
480
  msgstr ""
481
 
482
- #: inc/core/classes/class-form-setup.php:321
483
  msgid "Start counter from"
484
  msgstr ""
485
 
486
- #: inc/core/classes/class-form-setup.php:322
487
  msgid "Your next submission will be tagged with this identifier."
488
  msgstr ""
489
 
490
- #: inc/core/classes/class-form-setup.php:328
491
  #: inc/core/templates/parts/customize-number.php:72
492
  msgid "Prefix"
493
  msgstr ""
494
 
495
- #: inc/core/classes/class-form-setup.php:333
496
  msgid "Suffix"
497
  msgstr ""
498
 
499
- #: inc/core/classes/class-form-setup.php:338
500
  msgid "Preview values before submission"
501
  msgstr ""
502
 
503
- #: inc/core/classes/class-form-setup.php:339
504
  msgid "Let your users review their submission before confirming it."
505
  msgstr ""
506
 
507
- #: inc/core/classes/class-form-setup.php:344
508
  msgid "Review button text"
509
  msgstr ""
510
 
511
- #: inc/core/classes/class-form-setup.php:349
512
  msgid "Fade submit button until valid"
513
  msgstr ""
514
 
515
- #: inc/core/classes/class-form-setup.php:351
516
  msgid ""
517
  "Reduce the opacity of the submit button until all required form parts are "
518
  "valid."
519
  msgstr ""
520
 
521
- #: inc/core/classes/class-form-setup.php:458
522
  msgid "Please review your submission..."
523
  msgstr ""
524
 
@@ -665,7 +687,7 @@ msgstr ""
665
  #: inc/core/templates/parts/customize-email.php:46
666
  #: inc/core/templates/parts/customize-legal.php:4
667
  #: inc/core/templates/parts/customize-multi-line-text.php:50
668
- #: inc/core/templates/parts/customize-narrative.php:32
669
  #: inc/core/templates/parts/customize-number.php:77
670
  #: inc/core/templates/parts/customize-phone.php:69
671
  #: inc/core/templates/parts/customize-placeholder.php:27
@@ -965,12 +987,6 @@ msgstr ""
965
  msgid "Add New"
966
  msgstr ""
967
 
968
- #: inc/core/classes/class-happyforms-core.php:190
969
- #: inc/core/classes/class-happyforms-core.php:191
970
- #: inc/core/classes/class-message-controller.php:208
971
- msgid "Responses"
972
- msgstr ""
973
-
974
  #: inc/core/classes/class-happyforms-core.php:198
975
  #: inc/core/classes/class-happyforms-core.php:199
976
  msgid "Welcome"
@@ -1014,7 +1030,7 @@ msgid "View Response #"
1014
  msgstr ""
1015
 
1016
  #: inc/core/classes/class-message-admin.php:242
1017
- #: inc/core/classes/class-message-controller.php:211
1018
  msgid "View response"
1019
  msgstr ""
1020
 
@@ -1086,7 +1102,7 @@ msgid "Pagination"
1086
  msgstr ""
1087
 
1088
  #: inc/core/classes/class-message-admin.php:348
1089
- msgid "Number of responses per page:"
1090
  msgstr ""
1091
 
1092
  #: inc/core/classes/class-message-admin.php:352
@@ -1094,15 +1110,14 @@ msgid "Fields"
1094
  msgstr ""
1095
 
1096
  #: inc/core/classes/class-message-admin.php:353
1097
- msgid "Number of response fields to show:"
1098
  msgstr ""
1099
 
1100
  #: inc/core/classes/class-message-admin.php:394
1101
- #: inc/core/classes/class-message-admin.php:780
1102
- #: inc/core/classes/class-message-controller.php:661
1103
- #: inc/core/classes/class-message-controller.php:874
1104
- #: inc/core/classes/class-message-controller.php:941
1105
  #: inc/core/templates/admin-message-edit.php:27
 
1106
  msgid "Tracking number"
1107
  msgstr ""
1108
 
@@ -1122,55 +1137,51 @@ msgstr ""
1122
  msgid "Export to CSV"
1123
  msgstr ""
1124
 
1125
- #: inc/core/classes/class-message-admin.php:715
1126
  msgid "View"
1127
  msgstr ""
1128
 
1129
- #: inc/core/classes/class-message-admin.php:901
1130
  msgid "Details"
1131
  msgstr ""
1132
 
1133
- #: inc/core/classes/class-message-admin.php:921
1134
  msgid "Submitted on"
1135
  msgstr ""
1136
 
1137
- #: inc/core/classes/class-message-admin.php:921
1138
  msgid "M j, Y @ H:i"
1139
  msgstr ""
1140
 
1141
- #: inc/core/classes/class-message-controller.php:209
1142
  msgid "Response"
1143
  msgstr ""
1144
 
1145
- #: inc/core/classes/class-message-controller.php:210
1146
  msgid "Edit response"
1147
  msgstr ""
1148
 
1149
- #: inc/core/classes/class-message-controller.php:212
1150
  msgid "View Responses"
1151
  msgstr ""
1152
 
1153
- #: inc/core/classes/class-message-controller.php:213
1154
  msgid "Search Responses"
1155
  msgstr ""
1156
 
1157
- #: inc/core/classes/class-message-controller.php:214
1158
  msgid "No response found"
1159
  msgstr ""
1160
 
1161
- #: inc/core/classes/class-message-controller.php:215
1162
  msgid "No response found in Trash"
1163
  msgstr ""
1164
 
1165
- #: inc/core/classes/class-message-controller.php:216
1166
- #: inc/core/classes/class-message-controller.php:217
1167
  msgid "All Responses"
1168
  msgstr ""
1169
 
1170
- #: inc/core/classes/class-message-controller.php:893
1171
- msgid "Reply to this message and mark it as read"
1172
- msgstr ""
1173
-
1174
  #: inc/core/classes/class-tracking.php:204
1175
  msgid "Thank you!"
1176
  msgstr ""
@@ -1266,7 +1277,7 @@ msgid "For geographical locations. Includes Google Maps intergration."
1266
  msgstr ""
1267
 
1268
  #: inc/core/classes/parts/class-part-address.php:196
1269
- #: inc/core/classes/parts/class-part-checkbox.php:177
1270
  #: inc/core/classes/parts/class-part-date.php:211
1271
  #: inc/core/classes/parts/class-part-email.php:152
1272
  #: inc/core/classes/parts/class-part-email.php:156
@@ -1277,7 +1288,7 @@ msgstr ""
1277
  #: inc/core/classes/parts/class-part-number.php:174
1278
  #: inc/core/classes/parts/class-part-phone.php:166
1279
  #: inc/core/classes/parts/class-part-phone.php:170
1280
- #: inc/core/classes/parts/class-part-radio.php:172
1281
  #: inc/core/classes/parts/class-part-rating.php:157
1282
  #: inc/core/classes/parts/class-part-rich-text.php:196
1283
  #: inc/core/classes/parts/class-part-scale.php:168
@@ -1290,16 +1301,16 @@ msgstr ""
1290
  msgid "This field is required."
1291
  msgstr ""
1292
 
1293
- #: inc/core/classes/parts/class-part-checkbox.php:8
1294
  msgid "Multiple Choice"
1295
  msgstr ""
1296
 
1297
- #: inc/core/classes/parts/class-part-checkbox.php:9
1298
  msgid "For checkboxes allowing multiple selections."
1299
  msgstr ""
1300
 
1301
- #: inc/core/classes/parts/class-part-checkbox.php:31
1302
- #: inc/core/classes/parts/class-part-radio.php:31
1303
  #: inc/core/classes/parts/class-part-table.php:32
1304
  #: inc/core/templates/parts/customize-checkbox.php:34
1305
  #: inc/core/templates/parts/customize-checkbox.php:38
@@ -1311,7 +1322,7 @@ msgstr ""
1311
  msgid "Options"
1312
  msgstr ""
1313
 
1314
- #: inc/core/classes/parts/class-part-checkbox.php:185
1315
  #: inc/core/classes/parts/class-part-table.php:240
1316
  msgid "Checkbox values are not valid."
1317
  msgstr ""
@@ -1445,16 +1456,16 @@ msgstr ""
1445
  msgid "For adding helper text, horizontal rules and extra space."
1446
  msgstr ""
1447
 
1448
- #: inc/core/classes/parts/class-part-radio.php:9
1449
  msgid "Single Choice"
1450
  msgstr ""
1451
 
1452
- #: inc/core/classes/parts/class-part-radio.php:10
1453
  msgid "For radio buttons allowing one selection."
1454
  msgstr ""
1455
 
1456
- #: inc/core/classes/parts/class-part-radio.php:177
1457
- #: inc/core/classes/parts/class-part-radio.php:183
1458
  msgid "Radio value is not valid."
1459
  msgstr ""
1460
 
@@ -1593,50 +1604,42 @@ msgid "Not a valid URL."
1593
  msgstr ""
1594
 
1595
  #: inc/core/helpers/helper-activation.php:54
1596
- msgid "Sample Contact Form"
1597
  msgstr ""
1598
 
1599
- #: inc/core/helpers/helper-activation.php:65
1600
  msgid "First name"
1601
  msgstr ""
1602
 
1603
- #: inc/core/helpers/helper-activation.php:70
1604
  msgid "Last name"
1605
  msgstr ""
1606
 
1607
- #: inc/core/helpers/helper-activation.php:75
1608
  msgid "What's your reason for contacting us?"
1609
  msgstr ""
1610
 
1611
- #: inc/core/helpers/helper-activation.php:78
1612
  msgid "Need technical help"
1613
  msgstr ""
1614
 
1615
- #: inc/core/helpers/helper-activation.php:81
1616
  msgid "Want to suggest a feature"
1617
  msgstr ""
1618
 
1619
- #: inc/core/helpers/helper-activation.php:84
1620
  msgid "Asking about my account"
1621
  msgstr ""
1622
 
1623
- #: inc/core/helpers/helper-activation.php:90
1624
- msgid "Age"
1625
  msgstr ""
1626
 
1627
- #: inc/core/helpers/helper-activation.php:95
1628
  msgid "Your message"
1629
  msgstr ""
1630
 
1631
- #: inc/core/helpers/helper-activation.php:127
1632
- msgid "It would be great if I could use Google ReCaptcha instead of Honeypot."
1633
- msgstr ""
1634
-
1635
- #: inc/core/helpers/helper-activation.php:134
1636
- msgid "How do I embed a HappyForm in my sidebar?"
1637
- msgstr ""
1638
-
1639
- #: inc/core/helpers/helper-activation.php:141
1640
  msgid "How can I access my premium upgrade credentials?"
1641
  msgstr ""
1642
 
@@ -2937,551 +2940,551 @@ msgstr ""
2937
  msgid "Yugoslavia"
2938
  msgstr ""
2939
 
2940
- #: inc/core/helpers/helper-misc.php:685
2941
  msgid "Response #%s"
2942
  msgstr ""
2943
 
2944
- #: inc/core/helpers/helper-misc.php:736
2945
  msgid "Afrikaans"
2946
  msgstr ""
2947
 
2948
- #: inc/core/helpers/helper-misc.php:737
2949
  msgid "Akan"
2950
  msgstr ""
2951
 
2952
- #: inc/core/helpers/helper-misc.php:738
2953
  msgid "Albanian"
2954
  msgstr ""
2955
 
2956
- #: inc/core/helpers/helper-misc.php:739
2957
  msgid "Algerian Arabic"
2958
  msgstr ""
2959
 
2960
- #: inc/core/helpers/helper-misc.php:740
2961
  msgid "Amharic"
2962
  msgstr ""
2963
 
2964
- #: inc/core/helpers/helper-misc.php:741
2965
  msgid "Arabic"
2966
  msgstr ""
2967
 
2968
- #: inc/core/helpers/helper-misc.php:742
2969
  msgid "Armenian"
2970
  msgstr ""
2971
 
2972
- #: inc/core/helpers/helper-misc.php:743
2973
  msgid "Aromanian"
2974
  msgstr ""
2975
 
2976
- #: inc/core/helpers/helper-misc.php:744
2977
  msgid "Arpitan"
2978
  msgstr ""
2979
 
2980
- #: inc/core/helpers/helper-misc.php:745
2981
  msgid "Assamese"
2982
  msgstr ""
2983
 
2984
- #: inc/core/helpers/helper-misc.php:746
2985
  msgid "Azerbaijani"
2986
  msgstr ""
2987
 
2988
- #: inc/core/helpers/helper-misc.php:747
2989
  msgid "Balochi Southern"
2990
  msgstr ""
2991
 
2992
- #: inc/core/helpers/helper-misc.php:748
2993
  msgid "Bashkir"
2994
  msgstr ""
2995
 
2996
- #: inc/core/helpers/helper-misc.php:749
2997
  msgid "Basque"
2998
  msgstr ""
2999
 
3000
- #: inc/core/helpers/helper-misc.php:750
3001
  msgid "Belarusian"
3002
  msgstr ""
3003
 
3004
- #: inc/core/helpers/helper-misc.php:751
3005
  msgid "Bengali"
3006
  msgstr ""
3007
 
3008
- #: inc/core/helpers/helper-misc.php:752
3009
  msgid "Bosnian"
3010
  msgstr ""
3011
 
3012
- #: inc/core/helpers/helper-misc.php:753
3013
  msgid "Breton"
3014
  msgstr ""
3015
 
3016
- #: inc/core/helpers/helper-misc.php:754
3017
  msgid "Bulgarian"
3018
  msgstr ""
3019
 
3020
- #: inc/core/helpers/helper-misc.php:755
3021
  msgid "Catalan"
3022
  msgstr ""
3023
 
3024
- #: inc/core/helpers/helper-misc.php:756
3025
  msgid "Cebuano"
3026
  msgstr ""
3027
 
3028
- #: inc/core/helpers/helper-misc.php:757
3029
  msgid "Chinese"
3030
  msgstr ""
3031
 
3032
- #: inc/core/helpers/helper-misc.php:758
3033
  msgid "Corsican"
3034
  msgstr ""
3035
 
3036
- #: inc/core/helpers/helper-misc.php:759
3037
  msgid "Croatian"
3038
  msgstr ""
3039
 
3040
- #: inc/core/helpers/helper-misc.php:760
3041
  msgid "Czech"
3042
  msgstr ""
3043
 
3044
- #: inc/core/helpers/helper-misc.php:761
3045
  msgid "Danish"
3046
  msgstr ""
3047
 
3048
- #: inc/core/helpers/helper-misc.php:762
3049
  msgid "Dhivehi"
3050
  msgstr ""
3051
 
3052
- #: inc/core/helpers/helper-misc.php:763
3053
  msgid "Dutch"
3054
  msgstr ""
3055
 
3056
- #: inc/core/helpers/helper-misc.php:764
3057
  msgid "Dzongkha"
3058
  msgstr ""
3059
 
3060
- #: inc/core/helpers/helper-misc.php:765
3061
  msgid "English"
3062
  msgstr ""
3063
 
3064
- #: inc/core/helpers/helper-misc.php:766
3065
  msgid "Esperanto"
3066
  msgstr ""
3067
 
3068
- #: inc/core/helpers/helper-misc.php:767
3069
  msgid "Estonian"
3070
  msgstr ""
3071
 
3072
- #: inc/core/helpers/helper-misc.php:768
3073
  msgid "Faroese"
3074
  msgstr ""
3075
 
3076
- #: inc/core/helpers/helper-misc.php:769
3077
  msgid "Finnish"
3078
  msgstr ""
3079
 
3080
- #: inc/core/helpers/helper-misc.php:770
3081
  msgid "French"
3082
  msgstr ""
3083
 
3084
- #: inc/core/helpers/helper-misc.php:771
3085
  msgid "Frisian"
3086
  msgstr ""
3087
 
3088
- #: inc/core/helpers/helper-misc.php:772
3089
  msgid "Friulian"
3090
  msgstr ""
3091
 
3092
- #: inc/core/helpers/helper-misc.php:773
3093
  msgid "Fulah"
3094
  msgstr ""
3095
 
3096
- #: inc/core/helpers/helper-misc.php:774
3097
  msgid "Galician"
3098
  msgstr ""
3099
 
3100
- #: inc/core/helpers/helper-misc.php:775
3101
  msgid "Georgian"
3102
  msgstr ""
3103
 
3104
- #: inc/core/helpers/helper-misc.php:776
3105
  msgid "German"
3106
  msgstr ""
3107
 
3108
- #: inc/core/helpers/helper-misc.php:777
3109
  msgid "Greek"
3110
  msgstr ""
3111
 
3112
- #: inc/core/helpers/helper-misc.php:778
3113
  msgid "Greenlandic"
3114
  msgstr ""
3115
 
3116
- #: inc/core/helpers/helper-misc.php:779
3117
  msgid "Guaraní"
3118
  msgstr ""
3119
 
3120
- #: inc/core/helpers/helper-misc.php:780
3121
  msgid "Gujarati"
3122
  msgstr ""
3123
 
3124
- #: inc/core/helpers/helper-misc.php:781
3125
  msgid "Hawaiian"
3126
  msgstr ""
3127
 
3128
- #: inc/core/helpers/helper-misc.php:782
3129
  msgid "Hazaragi"
3130
  msgstr ""
3131
 
3132
- #: inc/core/helpers/helper-misc.php:783
3133
  msgid "Hebrew"
3134
  msgstr ""
3135
 
3136
- #: inc/core/helpers/helper-misc.php:784
3137
  msgid "Hindi"
3138
  msgstr ""
3139
 
3140
- #: inc/core/helpers/helper-misc.php:785
3141
  msgid "Hungarian"
3142
  msgstr ""
3143
 
3144
- #: inc/core/helpers/helper-misc.php:786
3145
  msgid "Icelandic"
3146
  msgstr ""
3147
 
3148
- #: inc/core/helpers/helper-misc.php:787
3149
  msgid "Ido"
3150
  msgstr ""
3151
 
3152
- #: inc/core/helpers/helper-misc.php:788
3153
  msgid "Indonesian"
3154
  msgstr ""
3155
 
3156
- #: inc/core/helpers/helper-misc.php:789
3157
  msgid "Irish"
3158
  msgstr ""
3159
 
3160
- #: inc/core/helpers/helper-misc.php:790
3161
  msgid "Italian"
3162
  msgstr ""
3163
 
3164
- #: inc/core/helpers/helper-misc.php:791
3165
  msgid "Japanese"
3166
  msgstr ""
3167
 
3168
- #: inc/core/helpers/helper-misc.php:792
3169
  msgid "Javanese"
3170
  msgstr ""
3171
 
3172
- #: inc/core/helpers/helper-misc.php:793
3173
  msgid "Kabyle"
3174
  msgstr ""
3175
 
3176
- #: inc/core/helpers/helper-misc.php:794
3177
  msgid "Kannada"
3178
  msgstr ""
3179
 
3180
- #: inc/core/helpers/helper-misc.php:795
3181
  msgid "Kazakh"
3182
  msgstr ""
3183
 
3184
- #: inc/core/helpers/helper-misc.php:796
3185
  msgid "Khmer"
3186
  msgstr ""
3187
 
3188
- #: inc/core/helpers/helper-misc.php:797
3189
  msgid "Kinyarwanda"
3190
  msgstr ""
3191
 
3192
- #: inc/core/helpers/helper-misc.php:798
3193
  msgid "Kirghiz"
3194
  msgstr ""
3195
 
3196
- #: inc/core/helpers/helper-misc.php:799
3197
  msgid "Korean"
3198
  msgstr ""
3199
 
3200
- #: inc/core/helpers/helper-misc.php:800
3201
  msgid "Kurdish"
3202
  msgstr ""
3203
 
3204
- #: inc/core/helpers/helper-misc.php:801
3205
  msgid "Lao"
3206
  msgstr ""
3207
 
3208
- #: inc/core/helpers/helper-misc.php:802
3209
  msgid "Latvian"
3210
  msgstr ""
3211
 
3212
- #: inc/core/helpers/helper-misc.php:803
3213
  msgid "Limburgish"
3214
  msgstr ""
3215
 
3216
- #: inc/core/helpers/helper-misc.php:804
3217
  msgid "Lingala"
3218
  msgstr ""
3219
 
3220
- #: inc/core/helpers/helper-misc.php:805
3221
  msgid "Lithuanian"
3222
  msgstr ""
3223
 
3224
- #: inc/core/helpers/helper-misc.php:806
3225
  msgid "Luxembourgish"
3226
  msgstr ""
3227
 
3228
- #: inc/core/helpers/helper-misc.php:807
3229
  msgid "Macedonian"
3230
  msgstr ""
3231
 
3232
- #: inc/core/helpers/helper-misc.php:808
3233
  msgid "Malagasy"
3234
  msgstr ""
3235
 
3236
- #: inc/core/helpers/helper-misc.php:809
3237
  msgid "Malay"
3238
  msgstr ""
3239
 
3240
- #: inc/core/helpers/helper-misc.php:810
3241
  msgid "Malayalam"
3242
  msgstr ""
3243
 
3244
- #: inc/core/helpers/helper-misc.php:811
3245
  msgid "Maori"
3246
  msgstr ""
3247
 
3248
- #: inc/core/helpers/helper-misc.php:812
3249
  msgid "Marathi"
3250
  msgstr ""
3251
 
3252
- #: inc/core/helpers/helper-misc.php:813
3253
  msgid "Mingrelian"
3254
  msgstr ""
3255
 
3256
- #: inc/core/helpers/helper-misc.php:814
3257
  msgid "Mongolian"
3258
  msgstr ""
3259
 
3260
- #: inc/core/helpers/helper-misc.php:815
3261
  msgid "Montenegrin"
3262
  msgstr ""
3263
 
3264
- #: inc/core/helpers/helper-misc.php:816
3265
  msgid "Moroccan Arabic"
3266
  msgstr ""
3267
 
3268
- #: inc/core/helpers/helper-misc.php:817
3269
  msgid "Myanmar (Burmese)"
3270
  msgstr ""
3271
 
3272
- #: inc/core/helpers/helper-misc.php:818
3273
  msgid "Nepali"
3274
  msgstr ""
3275
 
3276
- #: inc/core/helpers/helper-misc.php:819
3277
  msgid "Norwegian (Bokmål)"
3278
  msgstr ""
3279
 
3280
- #: inc/core/helpers/helper-misc.php:820
3281
  msgid "Norwegian (Nynorsk)"
3282
  msgstr ""
3283
 
3284
- #: inc/core/helpers/helper-misc.php:821
3285
  msgid "Occitan"
3286
  msgstr ""
3287
 
3288
- #: inc/core/helpers/helper-misc.php:822
3289
  msgid "Oriya"
3290
  msgstr ""
3291
 
3292
- #: inc/core/helpers/helper-misc.php:823
3293
  msgid "Ossetic"
3294
  msgstr ""
3295
 
3296
- #: inc/core/helpers/helper-misc.php:824
3297
  msgid "Pashto"
3298
  msgstr ""
3299
 
3300
- #: inc/core/helpers/helper-misc.php:825
3301
  msgid "Persian"
3302
  msgstr ""
3303
 
3304
- #: inc/core/helpers/helper-misc.php:826
3305
  msgid "Polish"
3306
  msgstr ""
3307
 
3308
- #: inc/core/helpers/helper-misc.php:827
3309
  msgid "Portuguese"
3310
  msgstr ""
3311
 
3312
- #: inc/core/helpers/helper-misc.php:828
3313
  msgid "Punjabi"
3314
  msgstr ""
3315
 
3316
- #: inc/core/helpers/helper-misc.php:829
3317
  msgid "Rohingya"
3318
  msgstr ""
3319
 
3320
- #: inc/core/helpers/helper-misc.php:830
3321
  msgid "Romanian"
3322
  msgstr ""
3323
 
3324
- #: inc/core/helpers/helper-misc.php:831
3325
  msgid "Romansh Vallader"
3326
  msgstr ""
3327
 
3328
- #: inc/core/helpers/helper-misc.php:832
3329
  msgid "Russian"
3330
  msgstr ""
3331
 
3332
- #: inc/core/helpers/helper-misc.php:833
3333
  msgid "Rusyn"
3334
  msgstr ""
3335
 
3336
- #: inc/core/helpers/helper-misc.php:834
3337
  msgid "Sakha"
3338
  msgstr ""
3339
 
3340
- #: inc/core/helpers/helper-misc.php:835
3341
  msgid "Sanskrit"
3342
  msgstr ""
3343
 
3344
- #: inc/core/helpers/helper-misc.php:836
3345
  msgid "Sardinian"
3346
  msgstr ""
3347
 
3348
- #: inc/core/helpers/helper-misc.php:837
3349
  msgid "Scottish Gaelic"
3350
  msgstr ""
3351
 
3352
- #: inc/core/helpers/helper-misc.php:838
3353
  msgid "Serbian"
3354
  msgstr ""
3355
 
3356
- #: inc/core/helpers/helper-misc.php:839
3357
  msgid "Silesian"
3358
  msgstr ""
3359
 
3360
- #: inc/core/helpers/helper-misc.php:840
3361
  msgid "Sindhi"
3362
  msgstr ""
3363
 
3364
- #: inc/core/helpers/helper-misc.php:841
3365
  msgid "Sinhala"
3366
  msgstr ""
3367
 
3368
- #: inc/core/helpers/helper-misc.php:842
3369
  msgid "Slovak"
3370
  msgstr ""
3371
 
3372
- #: inc/core/helpers/helper-misc.php:843
3373
  msgid "Slovenian"
3374
  msgstr ""
3375
 
3376
- #: inc/core/helpers/helper-misc.php:844
3377
  msgid "Somali"
3378
  msgstr ""
3379
 
3380
- #: inc/core/helpers/helper-misc.php:845
3381
  msgid "South Azerbaijani"
3382
  msgstr ""
3383
 
3384
- #: inc/core/helpers/helper-misc.php:846
3385
  msgid "Spanish"
3386
  msgstr ""
3387
 
3388
- #: inc/core/helpers/helper-misc.php:847
3389
  msgid "Sundanese"
3390
  msgstr ""
3391
 
3392
- #: inc/core/helpers/helper-misc.php:848
3393
  msgid "Swahili"
3394
  msgstr ""
3395
 
3396
- #: inc/core/helpers/helper-misc.php:849
3397
  msgid "Swedish"
3398
  msgstr ""
3399
 
3400
- #: inc/core/helpers/helper-misc.php:850
3401
  msgid "Swiss German"
3402
  msgstr ""
3403
 
3404
- #: inc/core/helpers/helper-misc.php:851
3405
  msgid "Tagalog"
3406
  msgstr ""
3407
 
3408
- #: inc/core/helpers/helper-misc.php:852
3409
  msgid "Tahitian"
3410
  msgstr ""
3411
 
3412
- #: inc/core/helpers/helper-misc.php:853
3413
  msgid "Tajik"
3414
  msgstr ""
3415
 
3416
- #: inc/core/helpers/helper-misc.php:854
3417
  msgid "Tamazight"
3418
  msgstr ""
3419
 
3420
- #: inc/core/helpers/helper-misc.php:855
3421
  msgid "Tamil"
3422
  msgstr ""
3423
 
3424
- #: inc/core/helpers/helper-misc.php:856
3425
  msgid "Tatar"
3426
  msgstr ""
3427
 
3428
- #: inc/core/helpers/helper-misc.php:857
3429
  msgid "Telugu"
3430
  msgstr ""
3431
 
3432
- #: inc/core/helpers/helper-misc.php:858
3433
  msgid "Thai"
3434
  msgstr ""
3435
 
3436
- #: inc/core/helpers/helper-misc.php:859
3437
  msgid "Tibetan"
3438
  msgstr ""
3439
 
3440
- #: inc/core/helpers/helper-misc.php:860
3441
  msgid "Tigrinya"
3442
  msgstr ""
3443
 
3444
- #: inc/core/helpers/helper-misc.php:861
3445
  msgid "Turkish"
3446
  msgstr ""
3447
 
3448
- #: inc/core/helpers/helper-misc.php:862
3449
  msgid "Turkmen"
3450
  msgstr ""
3451
 
3452
- #: inc/core/helpers/helper-misc.php:863
3453
  msgid "Tweants"
3454
  msgstr ""
3455
 
3456
- #: inc/core/helpers/helper-misc.php:864
3457
  msgid "Uighur"
3458
  msgstr ""
3459
 
3460
- #: inc/core/helpers/helper-misc.php:865
3461
  msgid "Ukrainian"
3462
  msgstr ""
3463
 
3464
- #: inc/core/helpers/helper-misc.php:866
3465
  msgid "Urdu"
3466
  msgstr ""
3467
 
3468
- #: inc/core/helpers/helper-misc.php:867
3469
  msgid "Uzbek"
3470
  msgstr ""
3471
 
3472
- #: inc/core/helpers/helper-misc.php:868
3473
  msgid "Vietnamese"
3474
  msgstr ""
3475
 
3476
- #: inc/core/helpers/helper-misc.php:869
3477
  msgid "Walloon"
3478
  msgstr ""
3479
 
3480
- #: inc/core/helpers/helper-misc.php:870
3481
  msgid "Welsh"
3482
  msgstr ""
3483
 
3484
- #: inc/core/helpers/helper-misc.php:871
3485
  msgid "Yoruba"
3486
  msgstr ""
3487
 
@@ -3632,6 +3635,10 @@ msgstr ""
3632
  msgid "Close"
3633
  msgstr ""
3634
 
 
 
 
 
3635
  #: inc/core/templates/partials/form-confirm-preview.php:3
3636
  msgid "Edit"
3637
  msgstr ""
@@ -3747,7 +3754,7 @@ msgstr ""
3747
  #: inc/core/templates/parts/customize-multi-line-text.php:20
3748
  #: inc/core/templates/parts/customize-multi-line-text.php:60
3749
  #: inc/core/templates/parts/customize-narrative.php:18
3750
- #: inc/core/templates/parts/customize-narrative.php:42
3751
  #: inc/core/templates/parts/customize-number.php:20
3752
  #: inc/core/templates/parts/customize-number.php:87
3753
  #: inc/core/templates/parts/customize-phone.php:20
@@ -3874,7 +3881,7 @@ msgstr ""
3874
  #: inc/core/templates/parts/customize-email.php:48
3875
  #: inc/core/templates/parts/customize-legal.php:6
3876
  #: inc/core/templates/parts/customize-multi-line-text.php:52
3877
- #: inc/core/templates/parts/customize-narrative.php:34
3878
  #: inc/core/templates/parts/customize-number.php:79
3879
  #: inc/core/templates/parts/customize-phone.php:71
3880
  #: inc/core/templates/parts/customize-placeholder.php:29
@@ -3950,7 +3957,7 @@ msgstr ""
3950
  #: inc/core/templates/parts/customize-email.php:49
3951
  #: inc/core/templates/parts/customize-legal.php:7
3952
  #: inc/core/templates/parts/customize-multi-line-text.php:53
3953
- #: inc/core/templates/parts/customize-narrative.php:35
3954
  #: inc/core/templates/parts/customize-number.php:80
3955
  #: inc/core/templates/parts/customize-phone.php:72
3956
  #: inc/core/templates/parts/customize-placeholder.php:30
@@ -3972,7 +3979,7 @@ msgstr ""
3972
  #: inc/core/templates/parts/customize-email.php:50
3973
  #: inc/core/templates/parts/customize-legal.php:8
3974
  #: inc/core/templates/parts/customize-multi-line-text.php:54
3975
- #: inc/core/templates/parts/customize-narrative.php:36
3976
  #: inc/core/templates/parts/customize-number.php:81
3977
  #: inc/core/templates/parts/customize-phone.php:73
3978
  #: inc/core/templates/parts/customize-placeholder.php:31
@@ -3994,7 +4001,7 @@ msgstr ""
3994
  #: inc/core/templates/parts/customize-email.php:51
3995
  #: inc/core/templates/parts/customize-legal.php:9
3996
  #: inc/core/templates/parts/customize-multi-line-text.php:55
3997
- #: inc/core/templates/parts/customize-narrative.php:37
3998
  #: inc/core/templates/parts/customize-number.php:82
3999
  #: inc/core/templates/parts/customize-phone.php:74
4000
  #: inc/core/templates/parts/customize-placeholder.php:32
@@ -4015,7 +4022,7 @@ msgstr ""
4015
  #: inc/core/templates/parts/customize-email.php:60
4016
  #: inc/core/templates/parts/customize-legal.php:18
4017
  #: inc/core/templates/parts/customize-multi-line-text.php:64
4018
- #: inc/core/templates/parts/customize-narrative.php:46
4019
  #: inc/core/templates/parts/customize-number.php:91
4020
  #: inc/core/templates/parts/customize-phone.php:83
4021
  #: inc/core/templates/parts/customize-placeholder.php:41
@@ -4210,7 +4217,11 @@ msgstr ""
4210
  msgid "Character count"
4211
  msgstr ""
4212
 
4213
- #: inc/core/templates/parts/customize-narrative.php:27
 
 
 
 
4214
  msgid "Each input is required"
4215
  msgstr ""
4216
 
2
  # This file is distributed under the same license as the HappyForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: HappyForms 1.7.8\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
+ "POT-Creation-Date: 2019-04-11 13:04:47+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
178
  msgid "Author"
179
  msgstr ""
180
 
181
+ #: inc/core/classes/class-form-admin.php:258
182
+ #: inc/core/classes/class-happyforms-core.php:190
183
+ #: inc/core/classes/class-happyforms-core.php:191
184
+ #: inc/core/classes/class-message-controller.php:210
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
 
230
 
231
  #: inc/core/classes/class-form-controller.php:77
232
  #: inc/core/classes/class-message-admin.php:397
233
+ #: inc/core/classes/class-message-admin.php:917
234
  msgid "Form"
235
  msgstr ""
236
 
270
  msgid "Untitled form"
271
  msgstr ""
272
 
273
+ #: inc/core/classes/class-form-controller.php:614
274
  msgid " Copy"
275
  msgstr ""
276
 
277
+ #: inc/core/classes/class-form-controller.php:792
278
+ #: inc/core/classes/class-message-controller.php:320
279
+ #: inc/core/classes/class-message-controller.php:423
280
+ #: inc/core/classes/class-message-controller.php:458
281
  msgid "Oops! Your response is invalid — please review your message."
282
  msgstr ""
283
 
284
+ #: inc/core/classes/class-form-part-library.php:197
285
  msgid "Invalid data"
286
  msgstr ""
287
 
288
+ #: inc/core/classes/class-form-part-library.php:204
289
  msgid "Part definition not found"
290
  msgstr ""
291
 
292
+ #: inc/core/classes/class-form-part-library.php:235
293
  msgid "Missing validation callback for field %s"
294
  msgstr ""
295
 
297
  msgid "Thank you! Your response has been successfully submitted."
298
  msgstr ""
299
 
300
+ #: inc/core/classes/class-form-setup.php:82
301
  msgid "You received a new message"
302
  msgstr ""
303
 
304
+ #: inc/core/classes/class-form-setup.php:94
305
  msgid "We received your message"
306
  msgstr ""
307
 
308
+ #: inc/core/classes/class-form-setup.php:98
309
  msgid ""
310
  "Your message has been successfully sent. We appreciate you contacting us "
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
 
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
987
  msgid "Add New"
988
  msgstr ""
989
 
 
 
 
 
 
 
990
  #: inc/core/classes/class-happyforms-core.php:198
991
  #: inc/core/classes/class-happyforms-core.php:199
992
  msgid "Welcome"
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
 
1102
  msgstr ""
1103
 
1104
  #: inc/core/classes/class-message-admin.php:348
1105
+ msgid "Number of items per page:"
1106
  msgstr ""
1107
 
1108
  #: inc/core/classes/class-message-admin.php:352
1110
  msgstr ""
1111
 
1112
  #: inc/core/classes/class-message-admin.php:353
1113
+ msgid "Number of columns to show:"
1114
  msgstr ""
1115
 
1116
  #: inc/core/classes/class-message-admin.php:394
1117
+ #: inc/core/classes/class-message-admin.php:781
1118
+ #: inc/core/classes/class-message-controller.php:677
 
 
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
 
1137
  msgid "Export to CSV"
1138
  msgstr ""
1139
 
1140
+ #: inc/core/classes/class-message-admin.php:716
1141
  msgid "View"
1142
  msgstr ""
1143
 
1144
+ #: inc/core/classes/class-message-admin.php:902
1145
  msgid "Details"
1146
  msgstr ""
1147
 
1148
+ #: inc/core/classes/class-message-admin.php:922
1149
  msgid "Submitted on"
1150
  msgstr ""
1151
 
1152
+ #: inc/core/classes/class-message-admin.php:922
1153
  msgid "M j, Y @ H:i"
1154
  msgstr ""
1155
 
1156
+ #: inc/core/classes/class-message-controller.php:211
1157
  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
1165
  msgid "View Responses"
1166
  msgstr ""
1167
 
1168
+ #: inc/core/classes/class-message-controller.php:215
1169
  msgid "Search Responses"
1170
  msgstr ""
1171
 
1172
+ #: inc/core/classes/class-message-controller.php:216
1173
  msgid "No response found"
1174
  msgstr ""
1175
 
1176
+ #: inc/core/classes/class-message-controller.php:217
1177
  msgid "No response found in Trash"
1178
  msgstr ""
1179
 
1180
+ #: inc/core/classes/class-message-controller.php:218
1181
+ #: inc/core/classes/class-message-controller.php:219
1182
  msgid "All Responses"
1183
  msgstr ""
1184
 
 
 
 
 
1185
  #: inc/core/classes/class-tracking.php:204
1186
  msgid "Thank you!"
1187
  msgstr ""
1277
  msgstr ""
1278
 
1279
  #: inc/core/classes/parts/class-part-address.php:196
1280
+ #: inc/core/classes/parts/class-part-checkbox.php:185
1281
  #: inc/core/classes/parts/class-part-date.php:211
1282
  #: inc/core/classes/parts/class-part-email.php:152
1283
  #: inc/core/classes/parts/class-part-email.php:156
1288
  #: inc/core/classes/parts/class-part-number.php:174
1289
  #: inc/core/classes/parts/class-part-phone.php:166
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
1301
  msgid "This field is required."
1302
  msgstr ""
1303
 
1304
+ #: inc/core/classes/parts/class-part-checkbox.php:10
1305
  msgid "Multiple Choice"
1306
  msgstr ""
1307
 
1308
+ #: inc/core/classes/parts/class-part-checkbox.php:11
1309
  msgid "For checkboxes allowing multiple selections."
1310
  msgstr ""
1311
 
1312
+ #: inc/core/classes/parts/class-part-checkbox.php:39
1313
+ #: inc/core/classes/parts/class-part-radio.php:40
1314
  #: inc/core/classes/parts/class-part-table.php:32
1315
  #: inc/core/templates/parts/customize-checkbox.php:34
1316
  #: inc/core/templates/parts/customize-checkbox.php:38
1322
  msgid "Options"
1323
  msgstr ""
1324
 
1325
+ #: inc/core/classes/parts/class-part-checkbox.php:193
1326
  #: inc/core/classes/parts/class-part-table.php:240
1327
  msgid "Checkbox values are not valid."
1328
  msgstr ""
1456
  msgid "For adding helper text, horizontal rules and extra space."
1457
  msgstr ""
1458
 
1459
+ #: inc/core/classes/parts/class-part-radio.php:12
1460
  msgid "Single Choice"
1461
  msgstr ""
1462
 
1463
+ #: inc/core/classes/parts/class-part-radio.php:13
1464
  msgid "For radio buttons allowing one selection."
1465
  msgstr ""
1466
 
1467
+ #: inc/core/classes/parts/class-part-radio.php:186
1468
+ #: inc/core/classes/parts/class-part-radio.php:192
1469
  msgid "Radio value is not valid."
1470
  msgstr ""
1471
 
1604
  msgstr ""
1605
 
1606
  #: inc/core/helpers/helper-activation.php:54
1607
+ msgid "Sample Form"
1608
  msgstr ""
1609
 
1610
+ #: inc/core/helpers/helper-activation.php:84
1611
  msgid "First name"
1612
  msgstr ""
1613
 
1614
+ #: inc/core/helpers/helper-activation.php:89
1615
  msgid "Last name"
1616
  msgstr ""
1617
 
1618
+ #: inc/core/helpers/helper-activation.php:94
1619
  msgid "What's your reason for contacting us?"
1620
  msgstr ""
1621
 
1622
+ #: inc/core/helpers/helper-activation.php:97
1623
  msgid "Need technical help"
1624
  msgstr ""
1625
 
1626
+ #: inc/core/helpers/helper-activation.php:100
1627
  msgid "Want to suggest a feature"
1628
  msgstr ""
1629
 
1630
+ #: inc/core/helpers/helper-activation.php:103
1631
  msgid "Asking about my account"
1632
  msgstr ""
1633
 
1634
+ #: inc/core/helpers/helper-activation.php:109
1635
+ msgid "What's your age?"
1636
  msgstr ""
1637
 
1638
+ #: inc/core/helpers/helper-activation.php:114
1639
  msgid "Your message"
1640
  msgstr ""
1641
 
1642
+ #: inc/core/helpers/helper-activation.php:148
 
 
 
 
 
 
 
 
1643
  msgid "How can I access my premium upgrade credentials?"
1644
  msgstr ""
1645
 
2940
  msgid "Yugoslavia"
2941
  msgstr ""
2942
 
2943
+ #: inc/core/helpers/helper-misc.php:725
2944
  msgid "Response #%s"
2945
  msgstr ""
2946
 
2947
+ #: inc/core/helpers/helper-misc.php:776
2948
  msgid "Afrikaans"
2949
  msgstr ""
2950
 
2951
+ #: inc/core/helpers/helper-misc.php:777
2952
  msgid "Akan"
2953
  msgstr ""
2954
 
2955
+ #: inc/core/helpers/helper-misc.php:778
2956
  msgid "Albanian"
2957
  msgstr ""
2958
 
2959
+ #: inc/core/helpers/helper-misc.php:779
2960
  msgid "Algerian Arabic"
2961
  msgstr ""
2962
 
2963
+ #: inc/core/helpers/helper-misc.php:780
2964
  msgid "Amharic"
2965
  msgstr ""
2966
 
2967
+ #: inc/core/helpers/helper-misc.php:781
2968
  msgid "Arabic"
2969
  msgstr ""
2970
 
2971
+ #: inc/core/helpers/helper-misc.php:782
2972
  msgid "Armenian"
2973
  msgstr ""
2974
 
2975
+ #: inc/core/helpers/helper-misc.php:783
2976
  msgid "Aromanian"
2977
  msgstr ""
2978
 
2979
+ #: inc/core/helpers/helper-misc.php:784
2980
  msgid "Arpitan"
2981
  msgstr ""
2982
 
2983
+ #: inc/core/helpers/helper-misc.php:785
2984
  msgid "Assamese"
2985
  msgstr ""
2986
 
2987
+ #: inc/core/helpers/helper-misc.php:786
2988
  msgid "Azerbaijani"
2989
  msgstr ""
2990
 
2991
+ #: inc/core/helpers/helper-misc.php:787
2992
  msgid "Balochi Southern"
2993
  msgstr ""
2994
 
2995
+ #: inc/core/helpers/helper-misc.php:788
2996
  msgid "Bashkir"
2997
  msgstr ""
2998
 
2999
+ #: inc/core/helpers/helper-misc.php:789
3000
  msgid "Basque"
3001
  msgstr ""
3002
 
3003
+ #: inc/core/helpers/helper-misc.php:790
3004
  msgid "Belarusian"
3005
  msgstr ""
3006
 
3007
+ #: inc/core/helpers/helper-misc.php:791
3008
  msgid "Bengali"
3009
  msgstr ""
3010
 
3011
+ #: inc/core/helpers/helper-misc.php:792
3012
  msgid "Bosnian"
3013
  msgstr ""
3014
 
3015
+ #: inc/core/helpers/helper-misc.php:793
3016
  msgid "Breton"
3017
  msgstr ""
3018
 
3019
+ #: inc/core/helpers/helper-misc.php:794
3020
  msgid "Bulgarian"
3021
  msgstr ""
3022
 
3023
+ #: inc/core/helpers/helper-misc.php:795
3024
  msgid "Catalan"
3025
  msgstr ""
3026
 
3027
+ #: inc/core/helpers/helper-misc.php:796
3028
  msgid "Cebuano"
3029
  msgstr ""
3030
 
3031
+ #: inc/core/helpers/helper-misc.php:797
3032
  msgid "Chinese"
3033
  msgstr ""
3034
 
3035
+ #: inc/core/helpers/helper-misc.php:798
3036
  msgid "Corsican"
3037
  msgstr ""
3038
 
3039
+ #: inc/core/helpers/helper-misc.php:799
3040
  msgid "Croatian"
3041
  msgstr ""
3042
 
3043
+ #: inc/core/helpers/helper-misc.php:800
3044
  msgid "Czech"
3045
  msgstr ""
3046
 
3047
+ #: inc/core/helpers/helper-misc.php:801
3048
  msgid "Danish"
3049
  msgstr ""
3050
 
3051
+ #: inc/core/helpers/helper-misc.php:802
3052
  msgid "Dhivehi"
3053
  msgstr ""
3054
 
3055
+ #: inc/core/helpers/helper-misc.php:803
3056
  msgid "Dutch"
3057
  msgstr ""
3058
 
3059
+ #: inc/core/helpers/helper-misc.php:804
3060
  msgid "Dzongkha"
3061
  msgstr ""
3062
 
3063
+ #: inc/core/helpers/helper-misc.php:805
3064
  msgid "English"
3065
  msgstr ""
3066
 
3067
+ #: inc/core/helpers/helper-misc.php:806
3068
  msgid "Esperanto"
3069
  msgstr ""
3070
 
3071
+ #: inc/core/helpers/helper-misc.php:807
3072
  msgid "Estonian"
3073
  msgstr ""
3074
 
3075
+ #: inc/core/helpers/helper-misc.php:808
3076
  msgid "Faroese"
3077
  msgstr ""
3078
 
3079
+ #: inc/core/helpers/helper-misc.php:809
3080
  msgid "Finnish"
3081
  msgstr ""
3082
 
3083
+ #: inc/core/helpers/helper-misc.php:810
3084
  msgid "French"
3085
  msgstr ""
3086
 
3087
+ #: inc/core/helpers/helper-misc.php:811
3088
  msgid "Frisian"
3089
  msgstr ""
3090
 
3091
+ #: inc/core/helpers/helper-misc.php:812
3092
  msgid "Friulian"
3093
  msgstr ""
3094
 
3095
+ #: inc/core/helpers/helper-misc.php:813
3096
  msgid "Fulah"
3097
  msgstr ""
3098
 
3099
+ #: inc/core/helpers/helper-misc.php:814
3100
  msgid "Galician"
3101
  msgstr ""
3102
 
3103
+ #: inc/core/helpers/helper-misc.php:815
3104
  msgid "Georgian"
3105
  msgstr ""
3106
 
3107
+ #: inc/core/helpers/helper-misc.php:816
3108
  msgid "German"
3109
  msgstr ""
3110
 
3111
+ #: inc/core/helpers/helper-misc.php:817
3112
  msgid "Greek"
3113
  msgstr ""
3114
 
3115
+ #: inc/core/helpers/helper-misc.php:818
3116
  msgid "Greenlandic"
3117
  msgstr ""
3118
 
3119
+ #: inc/core/helpers/helper-misc.php:819
3120
  msgid "Guaraní"
3121
  msgstr ""
3122
 
3123
+ #: inc/core/helpers/helper-misc.php:820
3124
  msgid "Gujarati"
3125
  msgstr ""
3126
 
3127
+ #: inc/core/helpers/helper-misc.php:821
3128
  msgid "Hawaiian"
3129
  msgstr ""
3130
 
3131
+ #: inc/core/helpers/helper-misc.php:822
3132
  msgid "Hazaragi"
3133
  msgstr ""
3134
 
3135
+ #: inc/core/helpers/helper-misc.php:823
3136
  msgid "Hebrew"
3137
  msgstr ""
3138
 
3139
+ #: inc/core/helpers/helper-misc.php:824
3140
  msgid "Hindi"
3141
  msgstr ""
3142
 
3143
+ #: inc/core/helpers/helper-misc.php:825
3144
  msgid "Hungarian"
3145
  msgstr ""
3146
 
3147
+ #: inc/core/helpers/helper-misc.php:826
3148
  msgid "Icelandic"
3149
  msgstr ""
3150
 
3151
+ #: inc/core/helpers/helper-misc.php:827
3152
  msgid "Ido"
3153
  msgstr ""
3154
 
3155
+ #: inc/core/helpers/helper-misc.php:828
3156
  msgid "Indonesian"
3157
  msgstr ""
3158
 
3159
+ #: inc/core/helpers/helper-misc.php:829
3160
  msgid "Irish"
3161
  msgstr ""
3162
 
3163
+ #: inc/core/helpers/helper-misc.php:830
3164
  msgid "Italian"
3165
  msgstr ""
3166
 
3167
+ #: inc/core/helpers/helper-misc.php:831
3168
  msgid "Japanese"
3169
  msgstr ""
3170
 
3171
+ #: inc/core/helpers/helper-misc.php:832
3172
  msgid "Javanese"
3173
  msgstr ""
3174
 
3175
+ #: inc/core/helpers/helper-misc.php:833
3176
  msgid "Kabyle"
3177
  msgstr ""
3178
 
3179
+ #: inc/core/helpers/helper-misc.php:834
3180
  msgid "Kannada"
3181
  msgstr ""
3182
 
3183
+ #: inc/core/helpers/helper-misc.php:835
3184
  msgid "Kazakh"
3185
  msgstr ""
3186
 
3187
+ #: inc/core/helpers/helper-misc.php:836
3188
  msgid "Khmer"
3189
  msgstr ""
3190
 
3191
+ #: inc/core/helpers/helper-misc.php:837
3192
  msgid "Kinyarwanda"
3193
  msgstr ""
3194
 
3195
+ #: inc/core/helpers/helper-misc.php:838
3196
  msgid "Kirghiz"
3197
  msgstr ""
3198
 
3199
+ #: inc/core/helpers/helper-misc.php:839
3200
  msgid "Korean"
3201
  msgstr ""
3202
 
3203
+ #: inc/core/helpers/helper-misc.php:840
3204
  msgid "Kurdish"
3205
  msgstr ""
3206
 
3207
+ #: inc/core/helpers/helper-misc.php:841
3208
  msgid "Lao"
3209
  msgstr ""
3210
 
3211
+ #: inc/core/helpers/helper-misc.php:842
3212
  msgid "Latvian"
3213
  msgstr ""
3214
 
3215
+ #: inc/core/helpers/helper-misc.php:843
3216
  msgid "Limburgish"
3217
  msgstr ""
3218
 
3219
+ #: inc/core/helpers/helper-misc.php:844
3220
  msgid "Lingala"
3221
  msgstr ""
3222
 
3223
+ #: inc/core/helpers/helper-misc.php:845
3224
  msgid "Lithuanian"
3225
  msgstr ""
3226
 
3227
+ #: inc/core/helpers/helper-misc.php:846
3228
  msgid "Luxembourgish"
3229
  msgstr ""
3230
 
3231
+ #: inc/core/helpers/helper-misc.php:847
3232
  msgid "Macedonian"
3233
  msgstr ""
3234
 
3235
+ #: inc/core/helpers/helper-misc.php:848
3236
  msgid "Malagasy"
3237
  msgstr ""
3238
 
3239
+ #: inc/core/helpers/helper-misc.php:849
3240
  msgid "Malay"
3241
  msgstr ""
3242
 
3243
+ #: inc/core/helpers/helper-misc.php:850
3244
  msgid "Malayalam"
3245
  msgstr ""
3246
 
3247
+ #: inc/core/helpers/helper-misc.php:851
3248
  msgid "Maori"
3249
  msgstr ""
3250
 
3251
+ #: inc/core/helpers/helper-misc.php:852
3252
  msgid "Marathi"
3253
  msgstr ""
3254
 
3255
+ #: inc/core/helpers/helper-misc.php:853
3256
  msgid "Mingrelian"
3257
  msgstr ""
3258
 
3259
+ #: inc/core/helpers/helper-misc.php:854
3260
  msgid "Mongolian"
3261
  msgstr ""
3262
 
3263
+ #: inc/core/helpers/helper-misc.php:855
3264
  msgid "Montenegrin"
3265
  msgstr ""
3266
 
3267
+ #: inc/core/helpers/helper-misc.php:856
3268
  msgid "Moroccan Arabic"
3269
  msgstr ""
3270
 
3271
+ #: inc/core/helpers/helper-misc.php:857
3272
  msgid "Myanmar (Burmese)"
3273
  msgstr ""
3274
 
3275
+ #: inc/core/helpers/helper-misc.php:858
3276
  msgid "Nepali"
3277
  msgstr ""
3278
 
3279
+ #: inc/core/helpers/helper-misc.php:859
3280
  msgid "Norwegian (Bokmål)"
3281
  msgstr ""
3282
 
3283
+ #: inc/core/helpers/helper-misc.php:860
3284
  msgid "Norwegian (Nynorsk)"
3285
  msgstr ""
3286
 
3287
+ #: inc/core/helpers/helper-misc.php:861
3288
  msgid "Occitan"
3289
  msgstr ""
3290
 
3291
+ #: inc/core/helpers/helper-misc.php:862
3292
  msgid "Oriya"
3293
  msgstr ""
3294
 
3295
+ #: inc/core/helpers/helper-misc.php:863
3296
  msgid "Ossetic"
3297
  msgstr ""
3298
 
3299
+ #: inc/core/helpers/helper-misc.php:864
3300
  msgid "Pashto"
3301
  msgstr ""
3302
 
3303
+ #: inc/core/helpers/helper-misc.php:865
3304
  msgid "Persian"
3305
  msgstr ""
3306
 
3307
+ #: inc/core/helpers/helper-misc.php:866
3308
  msgid "Polish"
3309
  msgstr ""
3310
 
3311
+ #: inc/core/helpers/helper-misc.php:867
3312
  msgid "Portuguese"
3313
  msgstr ""
3314
 
3315
+ #: inc/core/helpers/helper-misc.php:868
3316
  msgid "Punjabi"
3317
  msgstr ""
3318
 
3319
+ #: inc/core/helpers/helper-misc.php:869
3320
  msgid "Rohingya"
3321
  msgstr ""
3322
 
3323
+ #: inc/core/helpers/helper-misc.php:870
3324
  msgid "Romanian"
3325
  msgstr ""
3326
 
3327
+ #: inc/core/helpers/helper-misc.php:871
3328
  msgid "Romansh Vallader"
3329
  msgstr ""
3330
 
3331
+ #: inc/core/helpers/helper-misc.php:872
3332
  msgid "Russian"
3333
  msgstr ""
3334
 
3335
+ #: inc/core/helpers/helper-misc.php:873
3336
  msgid "Rusyn"
3337
  msgstr ""
3338
 
3339
+ #: inc/core/helpers/helper-misc.php:874
3340
  msgid "Sakha"
3341
  msgstr ""
3342
 
3343
+ #: inc/core/helpers/helper-misc.php:875
3344
  msgid "Sanskrit"
3345
  msgstr ""
3346
 
3347
+ #: inc/core/helpers/helper-misc.php:876
3348
  msgid "Sardinian"
3349
  msgstr ""
3350
 
3351
+ #: inc/core/helpers/helper-misc.php:877
3352
  msgid "Scottish Gaelic"
3353
  msgstr ""
3354
 
3355
+ #: inc/core/helpers/helper-misc.php:878
3356
  msgid "Serbian"
3357
  msgstr ""
3358
 
3359
+ #: inc/core/helpers/helper-misc.php:879
3360
  msgid "Silesian"
3361
  msgstr ""
3362
 
3363
+ #: inc/core/helpers/helper-misc.php:880
3364
  msgid "Sindhi"
3365
  msgstr ""
3366
 
3367
+ #: inc/core/helpers/helper-misc.php:881
3368
  msgid "Sinhala"
3369
  msgstr ""
3370
 
3371
+ #: inc/core/helpers/helper-misc.php:882
3372
  msgid "Slovak"
3373
  msgstr ""
3374
 
3375
+ #: inc/core/helpers/helper-misc.php:883
3376
  msgid "Slovenian"
3377
  msgstr ""
3378
 
3379
+ #: inc/core/helpers/helper-misc.php:884
3380
  msgid "Somali"
3381
  msgstr ""
3382
 
3383
+ #: inc/core/helpers/helper-misc.php:885
3384
  msgid "South Azerbaijani"
3385
  msgstr ""
3386
 
3387
+ #: inc/core/helpers/helper-misc.php:886
3388
  msgid "Spanish"
3389
  msgstr ""
3390
 
3391
+ #: inc/core/helpers/helper-misc.php:887
3392
  msgid "Sundanese"
3393
  msgstr ""
3394
 
3395
+ #: inc/core/helpers/helper-misc.php:888
3396
  msgid "Swahili"
3397
  msgstr ""
3398
 
3399
+ #: inc/core/helpers/helper-misc.php:889
3400
  msgid "Swedish"
3401
  msgstr ""
3402
 
3403
+ #: inc/core/helpers/helper-misc.php:890
3404
  msgid "Swiss German"
3405
  msgstr ""
3406
 
3407
+ #: inc/core/helpers/helper-misc.php:891
3408
  msgid "Tagalog"
3409
  msgstr ""
3410
 
3411
+ #: inc/core/helpers/helper-misc.php:892
3412
  msgid "Tahitian"
3413
  msgstr ""
3414
 
3415
+ #: inc/core/helpers/helper-misc.php:893
3416
  msgid "Tajik"
3417
  msgstr ""
3418
 
3419
+ #: inc/core/helpers/helper-misc.php:894
3420
  msgid "Tamazight"
3421
  msgstr ""
3422
 
3423
+ #: inc/core/helpers/helper-misc.php:895
3424
  msgid "Tamil"
3425
  msgstr ""
3426
 
3427
+ #: inc/core/helpers/helper-misc.php:896
3428
  msgid "Tatar"
3429
  msgstr ""
3430
 
3431
+ #: inc/core/helpers/helper-misc.php:897
3432
  msgid "Telugu"
3433
  msgstr ""
3434
 
3435
+ #: inc/core/helpers/helper-misc.php:898
3436
  msgid "Thai"
3437
  msgstr ""
3438
 
3439
+ #: inc/core/helpers/helper-misc.php:899
3440
  msgid "Tibetan"
3441
  msgstr ""
3442
 
3443
+ #: inc/core/helpers/helper-misc.php:900
3444
  msgid "Tigrinya"
3445
  msgstr ""
3446
 
3447
+ #: inc/core/helpers/helper-misc.php:901
3448
  msgid "Turkish"
3449
  msgstr ""
3450
 
3451
+ #: inc/core/helpers/helper-misc.php:902
3452
  msgid "Turkmen"
3453
  msgstr ""
3454
 
3455
+ #: inc/core/helpers/helper-misc.php:903
3456
  msgid "Tweants"
3457
  msgstr ""
3458
 
3459
+ #: inc/core/helpers/helper-misc.php:904
3460
  msgid "Uighur"
3461
  msgstr ""
3462
 
3463
+ #: inc/core/helpers/helper-misc.php:905
3464
  msgid "Ukrainian"
3465
  msgstr ""
3466
 
3467
+ #: inc/core/helpers/helper-misc.php:906
3468
  msgid "Urdu"
3469
  msgstr ""
3470
 
3471
+ #: inc/core/helpers/helper-misc.php:907
3472
  msgid "Uzbek"
3473
  msgstr ""
3474
 
3475
+ #: inc/core/helpers/helper-misc.php:908
3476
  msgid "Vietnamese"
3477
  msgstr ""
3478
 
3479
+ #: inc/core/helpers/helper-misc.php:909
3480
  msgid "Walloon"
3481
  msgstr ""
3482
 
3483
+ #: inc/core/helpers/helper-misc.php:910
3484
  msgid "Welsh"
3485
  msgstr ""
3486
 
3487
+ #: inc/core/helpers/helper-misc.php:911
3488
  msgid "Yoruba"
3489
  msgstr ""
3490
 
3635
  msgid "Close"
3636
  msgstr ""
3637
 
3638
+ #: inc/core/templates/email-owner.php:45
3639
+ msgid "Reply to this message and mark it as read"
3640
+ msgstr ""
3641
+
3642
  #: inc/core/templates/partials/form-confirm-preview.php:3
3643
  msgid "Edit"
3644
  msgstr ""
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
3759
  #: inc/core/templates/parts/customize-number.php:87
3760
  #: inc/core/templates/parts/customize-phone.php:20
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
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
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
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
4007
  #: inc/core/templates/parts/customize-placeholder.php:32
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
4217
  msgid "Character count"
4218
  msgstr ""
4219
 
4220
+ #: inc/core/templates/parts/customize-narrative.php:24
4221
+ msgid "Text between brackets is turned into input placeholders."
4222
+ msgstr ""
4223
+
4224
+ #: inc/core/templates/parts/customize-narrative.php:28
4225
  msgid "Each input is required"
4226
  msgstr ""
4227
 
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.7
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -99,6 +99,14 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more po
99
 
100
  == Changelog ==
101
 
 
 
 
 
 
 
 
 
102
  = 1.7.7 =
103
  * Bugfix: Form was scrolling to the top of the page after a submission.
104
 
@@ -455,6 +463,9 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more po
455
 
456
  == Upgrade Notice ==
457
 
 
 
 
458
  = 1.7.7 =
459
  * Bug fixes.
460
 
5
  Requires at least: 4.8
6
  Tested up to: 5.1
7
  Requires PHP: 5.3
8
+ Stable tag: 1.7.8
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.8 =
103
+ * New feature: It's now possible to configure Bcc addresses for email alerts.
104
+ * New feature: Narrative part now supports input placeholders between brackets.
105
+ * New feature: Open redirect link in a new tab.
106
+ * Improvement: Better sample forms and responses created when activating plugin for the first time.
107
+ * Improvement: Various improvements to form styles and alignment.
108
+ * Bugfix: Forms created in 1.6.x versions weren't working because of a data format error.
109
+
110
  = 1.7.7 =
111
  * Bugfix: Form was scrolling to the top of the page after a submission.
112
 
463
 
464
  == Upgrade Notice ==
465
 
466
+ = 1.7.8 =
467
+ * Bcc email support, Narrative part placeholders, open redirect link in a new tab, bugfixes.
468
+
469
  = 1.7.7 =
470
  * Bug fixes.
471