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

Version Description

  • New feature: Rows control added to Long Answer field.
  • Improvement: New icons for form fields in form builder.
  • Improvement: Various improvements to form builder and front-end styles.
  • Bugfix: Sorting fields in form builder made the container always scroll to top instead of preserving its scrolling position.
  • Bugfix: When suffix was set on a field with tooltip, the tooltip icon and suffix were overlapping.
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.9.13
Comparing to
See all releases

Code changes from version 1.9.12 to 1.9.13

Files changed (45) hide show
  1. core/assets/css/admin.css +3 -2
  2. core/assets/css/color.css +16 -2
  3. core/assets/css/customize.css +5 -1
  4. core/assets/css/layout.css +30 -23
  5. core/assets/css/preview.css +1 -1
  6. core/assets/js/parts/part-checkbox.js +9 -7
  7. core/assets/js/parts/part-multi-line-text.js +20 -1
  8. core/assets/js/parts/part-radio.js +9 -7
  9. core/assets/js/parts/part-select.js +9 -7
  10. core/classes/class-cache.php +59 -0
  11. core/classes/class-form-admin.php +4 -32
  12. core/classes/class-form-controller.php +15 -11
  13. core/classes/class-form-part-library.php +1 -1
  14. core/classes/class-form-setup.php +4 -10
  15. core/classes/class-form-styles.php +4 -4
  16. core/classes/class-happyforms-core.php +3 -0
  17. core/classes/parts/class-part-email.php +1 -1
  18. core/classes/parts/class-part-multi-line-text.php +5 -1
  19. core/classes/parts/class-part-single-line-text.php +1 -1
  20. core/helpers/helper-activation.php +2 -1
  21. core/helpers/helper-misc.php +18 -2
  22. core/templates/customize-form-build.php +2 -2
  23. core/templates/customize-form-parts-drawer.php +2 -2
  24. core/templates/parts/customize-checkbox.php +1 -1
  25. core/templates/parts/customize-email.php +5 -5
  26. core/templates/parts/customize-multi-line-text.php +7 -3
  27. core/templates/parts/customize-number.php +4 -4
  28. core/templates/parts/customize-select.php +4 -4
  29. core/templates/parts/customize-single-line-text.php +4 -4
  30. core/templates/parts/frontend-multi-line-text.php +1 -1
  31. happyforms.php +2 -2
  32. inc/assets/css/admin.css +0 -15
  33. inc/assets/js/admin/dashboard.js +0 -9
  34. inc/assets/js/customize.js +0 -13
  35. inc/classes/class-happyforms.php +2 -62
  36. inc/classes/parts/class-part-attachment-dummy.php +4 -4
  37. inc/classes/parts/class-part-date-dummy.php +4 -4
  38. inc/classes/parts/class-part-legal-dummy.php +1 -1
  39. inc/classes/parts/class-part-mailchimp-dummy.php +1 -1
  40. inc/classes/parts/class-part-phone-dummy.php +4 -4
  41. inc/classes/parts/class-part-rating-dummy.php +4 -4
  42. inc/classes/parts/class-part-scale-dummy.php +4 -4
  43. inc/classes/parts/class-part-table-dummy.php +4 -4
  44. languages/happyforms.pot +163 -182
  45. readme.txt +18 -8
core/assets/css/admin.css CHANGED
@@ -251,6 +251,7 @@ p.welcome-panel-footer a:active {
251
  border-left-color: #46b450;
252
  }
253
 
254
- .type-happyform .column-date span[title] {
255
- text-decoration: none;
 
256
  }
251
  border-left-color: #46b450;
252
  }
253
 
254
+ .post-type-happyform input[type="number"],
255
+ .post-type-happyforms-message input[type="number"] {
256
+ padding-right: 0;
257
  }
core/assets/css/color.css CHANGED
@@ -374,6 +374,19 @@
374
  color: var(--happyforms-color-choice-checkmark-color);
375
  }
376
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  /* parts - select */
378
 
379
  .happyforms-styles .happyforms-part__select-bg {
@@ -446,6 +459,7 @@
446
  background: #000;
447
  background: var(--happyforms-color-submit-background-hover);
448
  text-transform: none;
 
449
  color: #fff;
450
  color: var(--happyforms-color-submit-text-hover);
451
  }
@@ -692,12 +706,12 @@
692
 
693
  .happyforms-styles.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit,
694
  .happyforms-styles.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit:hover {
695
- border-radius: 0;
696
  }
697
 
698
  .happyforms-styles.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit,
699
  .happyforms-styles.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit:hover {
700
- border-radius: 60px;
701
  }
702
 
703
  .happyforms-styles.happyforms-form--submit-button-bold .happyforms-part--submit input[type=submit] {
374
  color: var(--happyforms-color-choice-checkmark-color);
375
  }
376
 
377
+ .happyforms-radio-circle {
378
+ display: none;
379
+ width: 7px;
380
+ height: 7px;
381
+ border-radius: 50%;
382
+ background-color: #fff;
383
+ background-color: var(--happyforms-color-choice-checkmark-color);
384
+ }
385
+
386
+ .happyforms-styles .happyforms-part--radio input:checked+.checkmark .happyforms-radio-circle {
387
+ display: block;
388
+ }
389
+
390
  /* parts - select */
391
 
392
  .happyforms-styles .happyforms-part__select-bg {
459
  background: #000;
460
  background: var(--happyforms-color-submit-background-hover);
461
  text-transform: none;
462
+ text-decoration: none;
463
  color: #fff;
464
  color: var(--happyforms-color-submit-text-hover);
465
  }
706
 
707
  .happyforms-styles.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit,
708
  .happyforms-styles.happyforms-form--submit-button-border-radius-square input[type=submit].happyforms-button--submit:hover {
709
+ border-radius: 0 !important;
710
  }
711
 
712
  .happyforms-styles.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit,
713
  .happyforms-styles.happyforms-form--submit-button-border-radius-pill input[type=submit].happyforms-button--submit:hover {
714
+ border-radius: 60px !important;
715
  }
716
 
717
  .happyforms-styles.happyforms-form--submit-button-bold .happyforms-part--submit input[type=submit] {
core/assets/css/customize.css CHANGED
@@ -22,6 +22,10 @@
22
  border-bottom: 0;
23
  }
24
 
 
 
 
 
25
  /**
26
  *
27
  * Header actions
@@ -937,7 +941,7 @@ ul.happyforms-parts-list li.happyforms-parts-list-item {
937
  }
938
 
939
  ul.happyforms-parts-list li.happyforms-parts-list-item.hidden {
940
- display: none;
941
  }
942
 
943
  ul.happyforms-parts-list li.happyforms-parts-list-item:first-child {
22
  border-bottom: 0;
23
  }
24
 
25
+ .happyforms-stack-view input[type="number"] {
26
+ padding-right: 0;
27
+ }
28
+
29
  /**
30
  *
31
  * Header actions
941
  }
942
 
943
  ul.happyforms-parts-list li.happyforms-parts-list-item.hidden {
944
+ display: none !important;
945
  }
946
 
947
  ul.happyforms-parts-list li.happyforms-parts-list-item:first-child {
core/assets/css/layout.css CHANGED
@@ -246,6 +246,10 @@ h3.happyforms-form__title {
246
  max-width: none;
247
  }
248
 
 
 
 
 
249
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=text],
250
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=password],
251
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=email],
@@ -427,21 +431,6 @@ h3.happyforms-form__title {
427
  margin-right: 20px;
428
  }
429
 
430
- .happyforms-part--choice .happyforms-part-option--other .option-label .label {
431
- margin-right: 0;
432
- }
433
-
434
- .happyforms-part--choice .happyforms-part-option--other .option-label .label:after {
435
- content: ':';
436
- }
437
-
438
- .happyforms-part--choice .happyforms-part-option--other .option-label input[type=text] {
439
- flex: 1 0;
440
- padding-left: 0 !important;
441
- padding-right: 0 !important;
442
- padding-bottom: 0;
443
- }
444
-
445
  .happyforms-part--choice.display-type--block .happyforms-part-option__description {
446
  max-width: none;
447
  }
@@ -606,6 +595,10 @@ h3.happyforms-form__title {
606
  opacity: 1;
607
  }
608
 
 
 
 
 
609
  /* parts - radio, checkbox */
610
 
611
  .happyforms-part--choice .happyforms-part__el {
@@ -661,6 +654,20 @@ h3.happyforms-form__title {
661
  width: 25%;
662
  }
663
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
664
  @media screen and (max-width: 800px) {
665
  .happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,
666
  .happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option,
@@ -787,9 +794,12 @@ h3.happyforms-form__title {
787
  /* submit button */
788
 
789
  .happyforms-part--submit {
 
 
 
790
  width: 100%;
791
- padding-top: 10px;
792
  margin-bottom: 0;
 
793
  }
794
 
795
  /* notices */
@@ -811,7 +821,7 @@ form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice {
811
  }
812
 
813
  form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a {
814
- text-decoration: underline;
815
  }
816
 
817
  .happyforms-flex>.happyforms-message-notices p:last-child {
@@ -1109,6 +1119,7 @@ input[type=submit][disabled].happyforms-button--submit {
1109
  cursor: pointer;
1110
  display: flex;
1111
  align-items: center;
 
1112
  padding: 5px 10px;
1113
  min-height: 35px;
1114
  color: #000;
@@ -1146,12 +1157,6 @@ input[type=submit][disabled].happyforms-button--submit {
1146
  font-weight: bold;
1147
  }
1148
 
1149
- .happyforms-part--submit {
1150
- display: flex;
1151
- flex-flow: row wrap;
1152
- align-items: baseline;
1153
- }
1154
-
1155
  .happyforms-form-preview .happyforms-part--submit {
1156
  margin-top: 30px;
1157
  }
@@ -1320,9 +1325,11 @@ input[type=submit][disabled].happyforms-button--submit {
1320
  align-items: center;
1321
  max-height: 100%;
1322
  padding: 10px 15px;
 
1323
  border: 1px solid #dbdbdb;
1324
  border: 1px solid var(--happyforms-color-part-border) !important;
1325
  background: #e8e8e8;
 
1326
  }
1327
  .happyforms-input-group__prefix {
1328
  border-right: 0 !important;
246
  max-width: none;
247
  }
248
 
249
+ .happyforms-part textarea {
250
+ height: auto;
251
+ }
252
+
253
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=text],
254
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=password],
255
  .happyforms-form--part-value-text-align-center .happyforms-part input[type=email],
431
  margin-right: 20px;
432
  }
433
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
  .happyforms-part--choice.display-type--block .happyforms-part-option__description {
435
  max-width: none;
436
  }
595
  opacity: 1;
596
  }
597
 
598
+ .happyforms-part--has-tooltip .happyforms-input-group__suffix {
599
+ padding-right: 35px;
600
+ }
601
+
602
  /* parts - radio, checkbox */
603
 
604
  .happyforms-part--choice .happyforms-part__el {
654
  width: 25%;
655
  }
656
 
657
+ .happyforms-part--choice .happyforms-part__el .happyforms-part__description {
658
+ flex: 0 1 100%;
659
+ width: 100%;
660
+ margin-top: -5px;
661
+ margin-bottom: 20px;
662
+ }
663
+
664
+ .happyforms-part--choice.display-type--block .happyforms-part__el .happyforms-part__description {
665
+ flex: 0;
666
+ width: auto;
667
+ margin-top: 5px;
668
+ margin-bottom: 0;
669
+ }
670
+
671
  @media screen and (max-width: 800px) {
672
  .happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,
673
  .happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option,
794
  /* submit button */
795
 
796
  .happyforms-part--submit {
797
+ display: flex;
798
+ flex-flow: row wrap;
799
+ align-items: center;
800
  width: 100%;
 
801
  margin-bottom: 0;
802
+ padding-top: 10px;
803
  }
804
 
805
  /* notices */
821
  }
822
 
823
  form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a {
824
+ border: 0;
825
  }
826
 
827
  .happyforms-flex>.happyforms-message-notices p:last-child {
1119
  cursor: pointer;
1120
  display: flex;
1121
  align-items: center;
1122
+ margin: 0;
1123
  padding: 5px 10px;
1124
  min-height: 35px;
1125
  color: #000;
1157
  font-weight: bold;
1158
  }
1159
 
 
 
 
 
 
 
1160
  .happyforms-form-preview .happyforms-part--submit {
1161
  margin-top: 30px;
1162
  }
1325
  align-items: center;
1326
  max-height: 100%;
1327
  padding: 10px 15px;
1328
+ font-weight: normal;
1329
  border: 1px solid #dbdbdb;
1330
  border: 1px solid var(--happyforms-color-part-border) !important;
1331
  background: #e8e8e8;
1332
+ text-shadow: none;
1333
  }
1334
  .happyforms-input-group__prefix {
1335
  border-right: 0 !important;
core/assets/css/preview.css CHANGED
@@ -1,4 +1,4 @@
1
- body {
2
  background-color: #fff !important;
3
  padding: 40px !important;
4
  }
1
+ body:not(.mce-content-body) {
2
  background-color: #fff !important;
3
  padding: 40px !important;
4
  }
core/assets/js/parts/part-checkbox.js CHANGED
@@ -388,13 +388,15 @@
388
  return s;
389
  } )
390
  .forEach( function( label, i, list ) {
391
- var itemID = self.getOptionModelID();
392
- var item = new OptionModel( {
393
- id: itemID,
394
- label: label
395
- } );
396
-
397
- self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
 
 
398
  } );
399
 
400
  $textarea.val( '' );
388
  return s;
389
  } )
390
  .forEach( function( label, i, list ) {
391
+ _.delay( function() {
392
+ var itemID = self.getOptionModelID();
393
+ var item = new OptionModel( {
394
+ id: itemID,
395
+ label: label
396
+ } );
397
+
398
+ self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
399
+ }, i );
400
  } );
401
 
402
  $textarea.val( '' );
core/assets/js/parts/part-multi-line-text.js CHANGED
@@ -22,6 +22,7 @@
22
  this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitChange );
23
  this.listenTo( this.model, 'change:characters_label', this.onLimitWordsCharactersLabelChange );
24
  this.listenTo( this.model, 'change:words_label', this.onLimitWordsCharactersLabelChange );
 
25
  },
26
 
27
  /**
@@ -119,6 +120,18 @@
119
  }
120
  };
121
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  happyForms.previewSend( 'happyforms-part-dom-update', data );
123
  }
124
  } );
@@ -135,7 +148,13 @@
135
  var $part = this.getPartElement( html );
136
 
137
  this.$( 'span.counter-label', $part ).text( options.label );
138
- }
 
 
 
 
 
 
139
  } );
140
 
141
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
22
  this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitChange );
23
  this.listenTo( this.model, 'change:characters_label', this.onLimitWordsCharactersLabelChange );
24
  this.listenTo( this.model, 'change:words_label', this.onLimitWordsCharactersLabelChange );
25
+ this.listenTo( this.model, 'change:rows', this.onRowsChange );
26
  },
27
 
28
  /**
120
  }
121
  };
122
 
123
+ happyForms.previewSend( 'happyforms-part-dom-update', data );
124
+ },
125
+
126
+ onRowsChange: function( model, value ) {
127
+ var data = {
128
+ id: this.model.id,
129
+ callback: 'onMultiLineTextRowsChange',
130
+ options: {
131
+ value: value
132
+ }
133
+ };
134
+
135
  happyForms.previewSend( 'happyforms-part-dom-update', data );
136
  }
137
  } );
148
  var $part = this.getPartElement( html );
149
 
150
  this.$( 'span.counter-label', $part ).text( options.label );
151
+ },
152
+
153
+ onMultiLineTextRowsChange: function( id, html, options ) {
154
+ var $part = this.getPartElement( html );
155
+
156
+ this.$( 'textarea', $part ).attr( 'rows', options.value );
157
+ },
158
  } );
159
 
160
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-radio.js CHANGED
@@ -380,13 +380,15 @@
380
  return s;
381
  } )
382
  .forEach( function( label, i, list ) {
383
- var itemID = self.getOptionModelID();
384
- var item = new OptionModel( {
385
- id: itemID,
386
- label: label
387
- } );
388
-
389
- self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
 
 
390
  } );
391
 
392
  $textarea.val( '' );
380
  return s;
381
  } )
382
  .forEach( function( label, i, list ) {
383
+ _.delay( function() {
384
+ var itemID = self.getOptionModelID();
385
+ var item = new OptionModel( {
386
+ id: itemID,
387
+ label: label
388
+ } );
389
+
390
+ self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
391
+ }, i );
392
  } );
393
 
394
  $textarea.val( '' );
core/assets/js/parts/part-select.js CHANGED
@@ -398,13 +398,15 @@
398
  return s;
399
  } )
400
  .forEach( function( label, i, list ) {
401
- var itemID = self.getOptionModelID();
402
- var item = new OptionModel( {
403
- id: itemID,
404
- label: label
405
- } );
406
-
407
- self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
 
 
408
  } );
409
 
410
  $textarea.val( '' );
398
  return s;
399
  } )
400
  .forEach( function( label, i, list ) {
401
+ _.delay( function() {
402
+ var itemID = self.getOptionModelID();
403
+ var item = new OptionModel( {
404
+ id: itemID,
405
+ label: label
406
+ } );
407
+
408
+ self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
409
+ }, i );
410
  } );
411
 
412
  $textarea.val( '' );
core/classes/class-cache.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Cache {
4
+
5
+ private static $instance;
6
+
7
+ private $cache = array();
8
+
9
+ public static function instance() {
10
+ if ( is_null( self::$instance ) ) {
11
+ self::$instance = new self();
12
+ }
13
+
14
+ return self::$instance;
15
+ }
16
+
17
+ public function exists( $key ) {
18
+ $exists = isset( $this->cache[$key] );
19
+
20
+ return $exists;
21
+ }
22
+
23
+ public function get( $key, &$found = null ) {
24
+ $found = false;
25
+
26
+ if ( $this->exists( $key ) ) {
27
+ $found = true;
28
+
29
+ if ( is_object( $this->cache[$key] ) ) {
30
+ return clone( $this->cache[$key] );
31
+ } else {
32
+ return $this->cache[$key];
33
+ }
34
+ }
35
+
36
+ return false;
37
+ }
38
+
39
+ public function set( $key, $value ) {
40
+ if ( is_object( $value ) ) {
41
+ $value = clone( $value );
42
+ }
43
+
44
+ $this->cache[$key] = $value;
45
+
46
+ return true;
47
+ }
48
+
49
+ }
50
+
51
+ if ( ! function_exists( 'happyforms_get_cache' ) ):
52
+
53
+ function happyforms_get_cache() {
54
+ return HappyForms_Cache::instance();
55
+ }
56
+
57
+ endif;
58
+
59
+ happyforms_get_cache();
core/classes/class-form-admin.php CHANGED
@@ -49,7 +49,6 @@ class HappyForms_Form_Admin {
49
  add_filter( "manage_{$post_type}_posts_columns", array( $this, 'column_headers' ), PHP_INT_MAX );
50
  add_action( "manage_{$post_type}_posts_custom_column", array( $this, 'column_content' ), 10, 2 );
51
  add_filter( 'post_date_column_status', array( $this, 'date_column_status' ), 10, 4 );
52
- add_filter( 'post_date_column_time', array( $this, 'date_column_time' ), 10, 4 );
53
  add_filter( 'post_row_actions', array( $this, 'row_actions' ), 10, 2 );
54
  add_action( 'load-edit.php', array( $this, 'duplicate_form_redirect' ) );
55
  add_action( 'admin_footer', array( $this, 'admin_footer' ) );
@@ -308,40 +307,13 @@ class HappyForms_Form_Admin {
308
 
309
  $post_type = happyforms_get_form_controller()->post_type;
310
 
311
- if ( $post->post_type === $post_type ) {
312
- $status = '';
313
- }
314
-
315
- return $status;
316
- }
317
-
318
- /**
319
- * Filter: Change date format in date column.
320
- *
321
- * @hooked filter post_date_column_time
322
- *
323
- * @param string $time Current time value.
324
- * @param object $post Post object.
325
- * @param string $column_name Name of the column, always 'date'.
326
- * @param string $mode Date mode.
327
- *
328
- * @return string
329
- */
330
- public function date_column_time( $time, $post, $column_name, $mode ) {
331
- if ( 'date' !== $column_name ) {
332
- return $time;
333
  }
334
 
335
- $post_type = happyforms_get_form_controller()->post_type;
336
 
337
- if ( $post->post_type === $post_type ) {
338
- $date = get_the_time( __( 'Y/m/d' ), $post );
339
- $the_time = get_the_time( get_option( 'time_format' ), $post );
340
-
341
- $time = $date . '<br>' . $the_time;
342
- }
343
-
344
- return $time;
345
  }
346
 
347
  /**
49
  add_filter( "manage_{$post_type}_posts_columns", array( $this, 'column_headers' ), PHP_INT_MAX );
50
  add_action( "manage_{$post_type}_posts_custom_column", array( $this, 'column_content' ), 10, 2 );
51
  add_filter( 'post_date_column_status', array( $this, 'date_column_status' ), 10, 4 );
 
52
  add_filter( 'post_row_actions', array( $this, 'row_actions' ), 10, 2 );
53
  add_action( 'load-edit.php', array( $this, 'duplicate_form_redirect' ) );
54
  add_action( 'admin_footer', array( $this, 'admin_footer' ) );
307
 
308
  $post_type = happyforms_get_form_controller()->post_type;
309
 
310
+ if ( $post->post_type !== $post_type ) {
311
+ return $status;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  }
313
 
314
+ $status = __( 'Last modified', 'happyforms' );
315
 
316
+ return $status;
 
 
 
 
 
 
 
317
  }
318
 
319
  /**
core/classes/class-form-controller.php CHANGED
@@ -471,11 +471,11 @@ class HappyForms_Form_Controller {
471
  $args = md5( serialize( func_get_args() ) );
472
  $key = "_happyforms_cache_forms_get_{$args}";
473
  $found = false;
474
- $result = wp_cache_get( $key, '', false, $found );
475
 
476
  if ( false === $found ) {
477
  $result = $this->do_get( $post_ids, $only_id );
478
- wp_cache_set( $key, $result );
479
  }
480
 
481
  return $result;
@@ -737,7 +737,9 @@ class HappyForms_Form_Controller {
737
  * @return int
738
  */
739
  public function has_spam_protection( $form_data ) {
740
- return $form_data['spam_prevention'];
 
 
741
  }
742
 
743
  /**
@@ -780,16 +782,18 @@ class HappyForms_Form_Controller {
780
 
781
  ob_start();
782
 
783
- if ( $render_styles ) {
784
- happyforms_the_form_styles( $form );
785
- }
 
786
 
787
- happyforms_additional_css( $form );
788
 
789
- $template_path = happyforms_get_core_folder() . '/templates/single-form.php';
790
- $template_path = apply_filters( 'happyforms_form_template_path', $template_path, $form );
791
- require( $template_path );
792
- $form_markup = ob_get_clean();
 
793
 
794
  return $form_markup;
795
  }
471
  $args = md5( serialize( func_get_args() ) );
472
  $key = "_happyforms_cache_forms_get_{$args}";
473
  $found = false;
474
+ $result = happyforms_cache_get( $key, $found );
475
 
476
  if ( false === $found ) {
477
  $result = $this->do_get( $post_ids, $only_id );
478
+ happyforms_cache_set( $key, $result );
479
  }
480
 
481
  return $result;
737
  * @return int
738
  */
739
  public function has_spam_protection( $form_data ) {
740
+ $has_spam_protection = apply_filters( 'happyforms_use_honeypot', true );
741
+
742
+ return $has_spam_protection;
743
  }
744
 
745
  /**
782
 
783
  ob_start();
784
 
785
+ if ( 'publish' === $form['post_status'] || happyforms_is_preview() ) {
786
+ if ( $render_styles ) {
787
+ happyforms_the_form_styles( $form );
788
+ }
789
 
790
+ happyforms_additional_css( $form );
791
 
792
+ $template_path = happyforms_get_core_folder() . '/templates/single-form.php';
793
+ $template_path = apply_filters( 'happyforms_form_template_path', $template_path, $form );
794
+ require( $template_path );
795
+ $form_markup = ob_get_clean();
796
+ }
797
 
798
  return $form_markup;
799
  }
core/classes/class-form-part-library.php CHANGED
@@ -193,7 +193,7 @@ class HappyForms_Form_Part_Library {
193
  $part = $this->get_part( $part_data['type'] );
194
 
195
  if ( ! $part ) {
196
- $error = new WP_Error( 'part', __( 'Part definition not found' ) );
197
  return $error;
198
  }
199
 
193
  $part = $this->get_part( $part_data['type'] );
194
 
195
  if ( ! $part ) {
196
+ $error = new WP_Error( 'part', __( 'Field definition not found' ) );
197
  return $error;
198
  }
199
 
core/classes/class-form-setup.php CHANGED
@@ -89,7 +89,7 @@ class HappyForms_Form_Setup {
89
  'sanitize' => 'sanitize_text_field',
90
  ),
91
  'form_expiration_datetime' => array(
92
- 'default' => date( 'Y-m-d H:i:s', time() + 3600 * 24 * 7 ),
93
  'sanitize' => 'happyforms_sanitize_datetime',
94
  ),
95
  'save_entries' => array(
@@ -203,8 +203,8 @@ class HappyForms_Form_Setup {
203
  ),
204
  900 => array(
205
  'type' => 'text',
206
- 'label' => __( 'Optional part label', 'happyforms' ),
207
- 'tooltip' => __( 'Mark optional parts in your form to let your users distinguish them from required parts.', 'happyforms' ),
208
  'field' => 'optional_part_label',
209
  ),
210
  1000 => array(
@@ -242,15 +242,9 @@ class HappyForms_Form_Setup {
242
  1204 => array(
243
  'type' => 'checkbox',
244
  'label' => __( 'Hide form after submit', 'happyforms' ),
245
- 'tooltip' => __( 'Hide all form parts and display just title and confirmation message on submit.', 'happyforms' ),
246
  'field' => 'form_hide_on_submit'
247
  ),
248
- 1400 => array(
249
- 'type' => 'checkbox',
250
- 'label' => __( 'Spam prevention', 'happyforms' ),
251
- 'tooltip' => __( 'Protect your form against bots by using HoneyPot security.', 'happyforms' ),
252
- 'field' => 'spam_prevention',
253
- ),
254
  );
255
 
256
  $controls = apply_filters( 'happyforms_setup_controls', $controls );
89
  'sanitize' => 'sanitize_text_field',
90
  ),
91
  'form_expiration_datetime' => array(
92
+ 'default' => date( 'Y-m-d H:i:s', time() + WEEK_IN_SECONDS ),
93
  'sanitize' => 'happyforms_sanitize_datetime',
94
  ),
95
  'save_entries' => array(
203
  ),
204
  900 => array(
205
  'type' => 'text',
206
+ 'label' => __( 'Optional field label', 'happyforms' ),
207
+ 'tooltip' => __( 'Mark optional fields in your form to let your users distinguish them from required fields.', 'happyforms' ),
208
  'field' => 'optional_part_label',
209
  ),
210
  1000 => array(
242
  1204 => array(
243
  'type' => 'checkbox',
244
  'label' => __( 'Hide form after submit', 'happyforms' ),
245
+ 'tooltip' => __( 'Hide all form fields and display just title and confirmation message on submit.', 'happyforms' ),
246
  'field' => 'form_hide_on_submit'
247
  ),
 
 
 
 
 
 
248
  );
249
 
250
  $controls = apply_filters( 'happyforms_setup_controls', $controls );
core/classes/class-form-styles.php CHANGED
@@ -602,7 +602,7 @@ class HappyForms_Form_Styles {
602
  ),
603
  1400 => array(
604
  'type' => 'divider',
605
- 'label' => __( 'Part borders & spacing', 'happyforms' ),
606
  'id' => 'borders-spacing',
607
  ),
608
  1500 => array(
@@ -657,12 +657,12 @@ class HappyForms_Form_Styles {
657
  ),
658
  2500 => array(
659
  'type' => 'divider',
660
- 'label' => __( 'Part labels & text', 'happyforms' ),
661
  'id' => 'labels-text',
662
  ),
663
  2600 => array(
664
  'type' => 'checkbox',
665
- 'label' => __( 'Toggle placeholder on part focus', 'happyforms' ),
666
  'field' => 'part_toggle_placeholders',
667
  ),
668
  2700 => array(
@@ -857,7 +857,7 @@ class HappyForms_Form_Styles {
857
  ),
858
  6600 => array(
859
  'type' => 'checkbox',
860
- 'label' => __( 'Make button a part of last input', 'happyforms' ),
861
  'field' => 'submit_button_part_of_last_input'
862
  ),
863
  6700 => array(
602
  ),
603
  1400 => array(
604
  'type' => 'divider',
605
+ 'label' => __( 'Field borders & spacing', 'happyforms' ),
606
  'id' => 'borders-spacing',
607
  ),
608
  1500 => array(
657
  ),
658
  2500 => array(
659
  'type' => 'divider',
660
+ 'label' => __( 'Field labels & text', 'happyforms' ),
661
  'id' => 'labels-text',
662
  ),
663
  2600 => array(
664
  'type' => 'checkbox',
665
+ 'label' => __( 'Toggle placeholder on field focus', 'happyforms' ),
666
  'field' => 'part_toggle_placeholders',
667
  ),
668
  2700 => array(
857
  ),
858
  6600 => array(
859
  'type' => 'checkbox',
860
+ 'label' => __( 'Make button a field of last input', 'happyforms' ),
861
  'field' => 'submit_button_part_of_last_input'
862
  ),
863
  6700 => array(
core/classes/class-happyforms-core.php CHANGED
@@ -61,6 +61,7 @@ class HappyForms_Core {
61
  * @return void
62
  */
63
  public function initialize_plugin() {
 
64
  require_once( happyforms_get_core_folder() . '/helpers/helper-misc.php' );
65
  require_once( happyforms_get_core_folder() . '/helpers/helper-styles.php' );
66
 
@@ -226,6 +227,8 @@ class HappyForms_Core {
226
  if ( empty( $submenu['happyforms'] ) ) {
227
  remove_menu_page( 'happyforms' );
228
  }
 
 
229
  }
230
 
231
  /**
61
  * @return void
62
  */
63
  public function initialize_plugin() {
64
+ require_once( happyforms_get_core_folder() . '/classes/class-cache.php' );
65
  require_once( happyforms_get_core_folder() . '/helpers/helper-misc.php' );
66
  require_once( happyforms_get_core_folder() . '/helpers/helper-styles.php' );
67
 
227
  if ( empty( $submenu['happyforms'] ) ) {
228
  remove_menu_page( 'happyforms' );
229
  }
230
+
231
+ return $submenu_file;
232
  }
233
 
234
  /**
core/classes/parts/class-part-email.php CHANGED
@@ -5,7 +5,7 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
5
  public $type = 'email';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Email', 'happyforms' );
9
  $this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
5
  public $type = 'email';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Email Address', 'happyforms' );
9
  $this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
core/classes/parts/class-part-multi-line-text.php CHANGED
@@ -5,7 +5,7 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
5
  public $type = 'multi_line_text';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Long Text', 'happyforms' );
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
@@ -73,6 +73,10 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
73
  'default' => __( 'Max words', 'happyforms' ),
74
  'sanitize' => 'sanitize_text_field',
75
  ),
 
 
 
 
76
  'width' => array(
77
  'default' => 'full',
78
  'sanitize' => 'sanitize_key'
5
  public $type = 'multi_line_text';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Long Answer', 'happyforms' );
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
73
  'default' => __( 'Max words', 'happyforms' ),
74
  'sanitize' => 'sanitize_text_field',
75
  ),
76
+ 'rows' => array(
77
+ 'default' => 5,
78
+ 'sanitize' => 'intval',
79
+ ),
80
  'width' => array(
81
  'default' => 'full',
82
  'sanitize' => 'sanitize_key'
core/classes/parts/class-part-single-line-text.php CHANGED
@@ -5,7 +5,7 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
5
  public $type = 'single_line_text';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Short Text', 'happyforms' );
9
  $this->description = __( 'For single line text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
5
  public $type = 'single_line_text';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Short Answer', 'happyforms' );
9
  $this->description = __( 'For single line text fields.', 'happyforms' );
10
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
core/helpers/helper-activation.php CHANGED
@@ -30,7 +30,7 @@ endif;
30
 
31
  register_activation_hook( happyforms_plugin_file(), 'happyforms_activate' );
32
  register_deactivation_hook( happyforms_plugin_file(), 'happyforms_deactivate' );
33
- register_uninstall_hook( happyforms_plugin_file(), 'happyforms_uninstall');
34
 
35
  /**
36
  *
@@ -40,6 +40,7 @@ register_uninstall_hook( happyforms_plugin_file(), 'happyforms_uninstall');
40
  if ( ! function_exists( 'happyforms_create_samples' ) ):
41
 
42
  function happyforms_create_samples() {
 
43
  require_once( happyforms_get_core_folder() . '/classes/class-tracking.php' );
44
  require_once( happyforms_get_core_folder() . '/helpers/helper-misc.php' );
45
 
30
 
31
  register_activation_hook( happyforms_plugin_file(), 'happyforms_activate' );
32
  register_deactivation_hook( happyforms_plugin_file(), 'happyforms_deactivate' );
33
+ register_uninstall_hook( happyforms_plugin_file(), 'happyforms_uninstall' );
34
 
35
  /**
36
  *
40
  if ( ! function_exists( 'happyforms_create_samples' ) ):
41
 
42
  function happyforms_create_samples() {
43
+ require_once( happyforms_get_core_folder() . '/classes/class-cache.php' );
44
  require_once( happyforms_get_core_folder() . '/classes/class-tracking.php' );
45
  require_once( happyforms_get_core_folder() . '/helpers/helper-misc.php' );
46
 
core/helpers/helper-misc.php CHANGED
@@ -927,7 +927,7 @@ function happyforms_customize_part_width_control() {
927
  </p>
928
  <p class="width-options" style="display: none">
929
  <label>
930
- <input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
931
  </label>
932
  </p>
933
  <?php
@@ -964,4 +964,20 @@ function happyforms_log_error( $error ) {
964
  error_log( "[HappyForms:{$error->get_error_code()}] {$error->get_error_message()}" );
965
  }
966
 
967
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
927
  </p>
928
  <p class="width-options" style="display: none">
929
  <label>
930
+ <input type="checkbox" class="checkbox apply-all-check" value="" data-apply-to="width" /> <?php _e( 'Apply to all fields', 'happyforms' ); ?>
931
  </label>
932
  </p>
933
  <?php
964
  error_log( "[HappyForms:{$error->get_error_code()}] {$error->get_error_message()}" );
965
  }
966
 
967
+ endif;
968
+
969
+ if ( ! function_exists( 'happyforms_cache_get' ) ):
970
+
971
+ function happyforms_cache_get( $key, &$found = null ) {
972
+ return happyforms_get_cache()->get( $key, $found );
973
+ }
974
+
975
+ endif;
976
+
977
+ if ( ! function_exists( 'happyforms_cache_set' ) ):
978
+
979
+ function happyforms_cache_set( $key, $value ) {
980
+ return happyforms_get_cache()->set( $key, $value );
981
+ }
982
+
983
+ endif;
core/templates/customize-form-build.php CHANGED
@@ -7,10 +7,10 @@
7
 
8
  <div class="customize-control">
9
  <div class="happyforms-parts-placeholder">
10
- <p><?php _e( 'Add parts here to appear in your form.', 'happyforms' ); ?></p>
11
  </div>
12
  <div class="happyforms-form-widgets"></div>
13
- <button type="button" class="button add-new-widget happyforms-add-new-part"><?php _e( 'Add a Part', 'happyforms' ); ?></button>
14
  </div>
15
  </div>
16
  </script>
7
 
8
  <div class="customize-control">
9
  <div class="happyforms-parts-placeholder">
10
+ <p><?php _e( 'Add fields here to appear in your form.', 'happyforms' ); ?></p>
11
  </div>
12
  <div class="happyforms-form-widgets"></div>
13
+ <button type="button" class="button add-new-widget happyforms-add-new-part"><?php _e( 'Add a Field', 'happyforms' ); ?></button>
14
  </div>
15
  </div>
16
  </script>
core/templates/customize-form-parts-drawer.php CHANGED
@@ -2,7 +2,7 @@
2
  <div id="happyforms-parts-drawer">
3
  <div class="happyforms-parts-drawer-header">
4
  <div class="happyforms-parts-drawer-header-search">
5
- <input type="text" placeholder="<?php _e( 'Search parts', 'happyforms' ); ?>&hellip;" id="part-search">
6
  <div class="happyforms-parts-drawer-header-search-icon"></div>
7
  <button type="button" class="happyforms-clear-search"><span class="screen-reader-text"><?php _e( 'Clear Results', 'happyforms' ); ?></span></button>
8
  </div>
@@ -36,7 +36,7 @@
36
  <% } %>
37
  </ul>
38
  <div class="happyforms-parts-drawer-not-found">
39
- <p><?php _e( 'No parts found.', 'happyforms' ); ?></p>
40
  </div>
41
  </div>
42
  </script>
2
  <div id="happyforms-parts-drawer">
3
  <div class="happyforms-parts-drawer-header">
4
  <div class="happyforms-parts-drawer-header-search">
5
+ <input type="text" placeholder="<?php _e( 'Search fields', 'happyforms' ); ?>&hellip;" id="part-search">
6
  <div class="happyforms-parts-drawer-header-search-icon"></div>
7
  <button type="button" class="happyforms-clear-search"><span class="screen-reader-text"><?php _e( 'Clear Results', 'happyforms' ); ?></span></button>
8
  </div>
36
  <% } %>
37
  </ul>
38
  <div class="happyforms-parts-drawer-not-found">
39
+ <p><?php _e( 'No fields found.', 'happyforms' ); ?></p>
40
  </div>
41
  </div>
42
  </script>
core/templates/parts/customize-checkbox.php CHANGED
@@ -92,7 +92,7 @@
92
  </p>
93
  <p class="width-options" style="display: none">
94
  <label>
95
- <input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all parts', 'happyforms' ); ?>
96
  </label>
97
  </p>
98
 
92
  </p>
93
  <p class="width-options" style="display: none">
94
  <label>
95
+ <input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all fields', 'happyforms' ); ?>
96
  </label>
97
  </p>
98
 
core/templates/parts/customize-email.php CHANGED
@@ -5,7 +5,7 @@
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
- <label for="<%= instance.id %>_label_placement"><?php _e( 'Lable display', 'happyforms' ); ?></label>
9
  <select id="<%= instance.id %>_label_placement" data-bind="label_placement">
10
  <option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
11
  <option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
@@ -14,6 +14,10 @@
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
 
 
 
 
17
  <p>
18
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
19
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
@@ -26,10 +30,6 @@
26
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
27
  </select>
28
  </p>
29
- <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
30
- <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
31
- <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
32
- </p>
33
 
34
  <?php do_action( 'happyforms_part_customize_email_before_options' ); ?>
35
 
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
+ <label for="<%= instance.id %>_label_placement"><?php _e( 'Label display', 'happyforms' ); ?></label>
9
  <select id="<%= instance.id %>_label_placement" data-bind="label_placement">
10
  <option value="above"<%= (instance.label_placement == 'above') ? ' selected' : '' %>><?php _e( 'Above', 'happyforms' ); ?></option>
11
  <option value="below"<%= (instance.label_placement == 'below') ? ' selected' : '' %>><?php _e( 'Below', 'happyforms' ); ?></option>
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
17
+ <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
18
+ <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
19
+ <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
20
+ </p>
21
  <p>
22
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
30
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
31
  </select>
32
  </p>
 
 
 
 
33
 
34
  <?php do_action( 'happyforms_part_customize_email_before_options' ); ?>
35
 
core/templates/parts/customize-multi-line-text.php CHANGED
@@ -14,6 +14,10 @@
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
 
 
 
 
17
  <p>
18
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
19
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
@@ -26,9 +30,9 @@
26
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
27
  </select>
28
  </p>
29
- <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
30
- <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
31
- <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
32
  </p>
33
 
34
  <?php do_action( 'happyforms_part_customize_multi_line_text_before_options' ); ?>
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
17
+ <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
18
+ <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
19
+ <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
20
+ </p>
21
  <p>
22
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
30
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
31
  </select>
32
  </p>
33
+ <p>
34
+ <label for="<%= instance.id %>_rows"><?php _e( 'Rows', 'happyforms' ); ?></label>
35
+ <input type="number" id="<%= instance.id %>_rows" min="5" max="20" class="widefat title" value="<%= instance.rows %>" data-bind="rows" />
36
  </p>
37
 
38
  <?php do_action( 'happyforms_part_customize_multi_line_text_before_options' ); ?>
core/templates/parts/customize-number.php CHANGED
@@ -14,6 +14,10 @@
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
 
 
 
 
17
  <p>
18
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
19
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
@@ -26,10 +30,6 @@
26
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
27
  </select>
28
  </p>
29
- <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
30
- <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
31
- <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
32
- </p>
33
 
34
  <?php do_action( 'happyforms_part_customize_number_before_options' ); ?>
35
 
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
17
+ <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
18
+ <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
19
+ <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
20
+ </p>
21
  <p>
22
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
30
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
31
  </select>
32
  </p>
 
 
 
 
33
 
34
  <?php do_action( 'happyforms_part_customize_number_before_options' ); ?>
35
 
core/templates/parts/customize-select.php CHANGED
@@ -13,6 +13,10 @@
13
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
14
  </select>
15
  </p>
 
 
 
 
16
  <p>
17
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
18
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
@@ -24,10 +28,6 @@
24
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
25
  </select>
26
  </p>
27
- <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
28
- <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
29
- <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
30
- </p>
31
 
32
  <?php do_action( 'happyforms_part_customize_select_before_options' ); ?>
33
 
13
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
14
  </select>
15
  </p>
16
+ <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
17
+ <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
18
+ <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
19
+ </p>
20
  <p>
21
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
22
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
28
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
29
  </select>
30
  </p>
 
 
 
 
31
 
32
  <?php do_action( 'happyforms_part_customize_select_before_options' ); ?>
33
 
core/templates/parts/customize-single-line-text.php CHANGED
@@ -14,6 +14,10 @@
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
 
 
 
 
17
  <p>
18
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
19
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
@@ -26,10 +30,6 @@
26
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
27
  </select>
28
  </p>
29
- <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
30
- <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
31
- <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
32
- </p>
33
 
34
  <?php do_action( 'happyforms_part_customize_single_line_text_before_options' ); ?>
35
 
14
  <option value="hidden"<%= (instance.label_placement == 'hidden') ? ' selected' : '' %>><?php _e( 'Hidden', 'happyforms' ); ?></option>
15
  </select>
16
  </p>
17
+ <p class="happyforms-placeholder-option" style="display: <%= ( 'as_placeholder' !== instance.label_placement ) ? 'block' : 'none' %>">
18
+ <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
19
+ <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
20
+ </p>
21
  <p>
22
  <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
23
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
30
  <option value="tooltip"<%= (instance.description_mode == 'tooltip' || instance.tooltip_description ) ? ' selected' : '' %>><?php _e( 'Tooltip', 'happyforms' ); ?></option>
31
  </select>
32
  </p>
 
 
 
 
33
 
34
  <?php do_action( 'happyforms_part_customize_single_line_text_before_options' ); ?>
35
 
core/templates/parts/frontend-multi-line-text.php CHANGED
@@ -7,7 +7,7 @@
7
  <div class="happyforms-part__el">
8
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
9
 
10
- <textarea id="<?php happyforms_the_part_id( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" rows="5" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php happyforms_the_part_attributes( $part, $form ); ?>><?php happyforms_the_part_value( $part, $form ); ?></textarea>
11
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
12
  <?php happyforms_the_part_label( $part, $form ); ?>
13
  <?php endif; ?>
7
  <div class="happyforms-part__el">
8
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
9
 
10
+ <textarea id="<?php happyforms_the_part_id( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" rows="<?php echo $part['rows']; ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php happyforms_the_part_attributes( $part, $form ); ?>><?php happyforms_the_part_value( $part, $form ); ?></textarea>
11
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
12
  <?php happyforms_the_part_label( $part, $form ); ?>
13
  <?php endif; ?>
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: HappyForms
8
- * Version: 1.9.12
9
  * Author URI: https://happyforms.me
10
  * Upgrade URI: https://happyforms.me/upgrade
11
  */
@@ -13,7 +13,7 @@
13
  /**
14
  * The current version of the plugin.
15
  */
16
- define( 'HAPPYFORMS_VERSION', '1.9.12' );
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: HappyForms
8
+ * Version: 1.9.13
9
  * Author URI: https://happyforms.me
10
  * Upgrade URI: https://happyforms.me/upgrade
11
  */
13
  /**
14
  * The current version of the plugin.
15
  */
16
+ define( 'HAPPYFORMS_VERSION', '1.9.13' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
inc/assets/css/admin.css CHANGED
@@ -1,18 +1,3 @@
1
- #adminmenu #toplevel_page_happyforms ul li:last-child a,
2
- #adminmenu #toplevel_page_happyforms ul li:last-child a:hover {
3
- color: #FFB900;
4
- }
5
-
6
- #adminmenu #toplevel_page_happyforms ul li:last-child a:after {
7
- content: '\f504';
8
- position: relative;
9
- top: 2px;
10
- display: inline-block;
11
- padding-left: 5px;
12
- font-family: dashicons;
13
- text-decoration: none;
14
- }
15
-
16
  .happyforms-upgrade-modal-container {
17
  display: none;
18
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .happyforms-upgrade-modal-container {
2
  display: none;
3
  }
inc/assets/js/admin/dashboard.js CHANGED
@@ -5,7 +5,6 @@
5
 
6
  happyForms.freeDashboard = {
7
  init: function() {
8
- $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms li:last-child a', this.onUpgradeClick.bind(this) );
9
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#responses"]', this.onModalTriggerClick.bind(this) );
10
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#settings"]', this.onModalTriggerClick.bind(this) );
11
  $( document ).on( 'click', '.happyforms-upgrade-modal .happyforms-continue-link', this.onContinueClick.bind(this) );
@@ -13,14 +12,6 @@
13
  $( document ).on( 'click', '.happyforms-upgrade-modal .happyforms-upgrade-modal__close', this.onCloseClick.bind(this) );
14
  },
15
 
16
- onUpgradeClick: function( e ) {
17
- e.preventDefault();
18
-
19
- var $link = $(e.target);
20
-
21
- window.open( $link.attr('href') );
22
- },
23
-
24
  onModalTriggerClick: function( e ) {
25
  e.preventDefault();
26
 
5
 
6
  happyForms.freeDashboard = {
7
  init: function() {
 
8
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#responses"]', this.onModalTriggerClick.bind(this) );
9
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#settings"]', this.onModalTriggerClick.bind(this) );
10
  $( document ).on( 'click', '.happyforms-upgrade-modal .happyforms-continue-link', this.onContinueClick.bind(this) );
12
  $( document ).on( 'click', '.happyforms-upgrade-modal .happyforms-upgrade-modal__close', this.onCloseClick.bind(this) );
13
  },
14
 
 
 
 
 
 
 
 
 
15
  onModalTriggerClick: function( e ) {
16
  e.preventDefault();
17
 
inc/assets/js/customize.js CHANGED
@@ -584,7 +584,6 @@
584
  this.listenTo( this.model.get( 'parts' ), 'reset', this.onPartModelsSorted );
585
  this.listenTo( this.partViews, 'add', this.onPartViewAdd );
586
  this.listenTo( this.partViews, 'remove', this.onPartViewRemove );
587
- this.listenTo( this.partViews, 'reset', this.onPartViewsSorted );
588
  this.listenTo( this.partViews, 'add remove reset', this.onPartViewsChanged );
589
  this.listenTo( this, 'sort-stop', this.onPartSortStop );
590
  },
@@ -786,18 +785,6 @@
786
  }, this ) );
787
  },
788
 
789
- onPartViewsSorted: function( partViews ) {
790
- var $stage = $( '.happyforms-form-widgets', this.$el );
791
-
792
- partViews.forEach( function( partViewModel ) {
793
- var partView = partViewModel.get( 'view' );
794
- var $partViewEl = partView.$el;
795
- $partViewEl.detach();
796
- $stage.append( $partViewEl );
797
- partView.trigger( 'refresh' );
798
- }, this );
799
- },
800
-
801
  onPartViewsChanged: function( partViews ) {
802
  if ( this.partViews.length > 0 ) {
803
  this.$el.addClass( 'has-parts' );
584
  this.listenTo( this.model.get( 'parts' ), 'reset', this.onPartModelsSorted );
585
  this.listenTo( this.partViews, 'add', this.onPartViewAdd );
586
  this.listenTo( this.partViews, 'remove', this.onPartViewRemove );
 
587
  this.listenTo( this.partViews, 'add remove reset', this.onPartViewsChanged );
588
  this.listenTo( this, 'sort-stop', this.onPartSortStop );
589
  },
785
  }, this ) );
786
  },
787
 
 
 
 
 
 
 
 
 
 
 
 
 
788
  onPartViewsChanged: function( partViews ) {
789
  if ( this.partViews.length > 0 ) {
790
  this.$el.addClass( 'has-parts' );
inc/classes/class-happyforms.php CHANGED
@@ -7,7 +7,6 @@ class HappyForms extends HappyForms_Core {
7
  public function initialize_plugin() {
8
  parent::initialize_plugin();
9
 
10
- add_action( 'admin_menu', array( $this, 'admin_menu' ) );
11
  add_action( 'happyforms_do_setup_control', array( $this, 'do_control' ), 10, 3 );
12
  add_action( 'happyforms_do_email_control', array( $this, 'do_control' ), 10, 3 );
13
  add_action( 'happyforms_do_style_control', array( $this, 'do_control' ), 10, 3 );
@@ -16,7 +15,6 @@ class HappyForms extends HappyForms_Core {
16
  add_filter( 'happyforms_style_controls', array( $this, 'add_dummy_style_controls' ) );
17
  add_action( 'admin_print_footer_scripts', array( $this, 'print_upgrade_modals' ) );
18
  add_action( 'parse_request', array( $this, 'parse_archive_request' ) );
19
- add_action( 'init', array( $this, 'display_notices' ) );
20
 
21
  $this->register_dummy_parts();
22
  $this->add_setup_logic_upgrade_links();
@@ -81,8 +79,8 @@ class HappyForms extends HappyForms_Core {
81
  $controls[1450] = array(
82
  'type' => 'checkbox_dummy',
83
  'dummy_id' => 'shuffle_parts',
84
- 'label' => __( 'Shuffle parts', 'happyforms' ),
85
- 'tooltip' => __( 'Shuffle the order of all form parts to avoid biases in your responses.', 'happyforms' ),
86
  );
87
 
88
  $controls[1500] = array(
@@ -226,20 +224,6 @@ class HappyForms extends HappyForms_Core {
226
  require_once( happyforms_get_include_folder() . '/templates/admin/upgrade-modal.php' );
227
  }
228
 
229
- public function admin_menu() {
230
- parent::admin_menu();
231
-
232
- $form_controller = happyforms_get_form_controller();
233
-
234
- add_submenu_page(
235
- 'happyforms',
236
- __( 'HappyForms Upgrade', 'happyforms' ),
237
- __( 'Upgrade', 'happyforms' ),
238
- apply_filters( 'happyforms_forms_page_capabilities', 'manage_options' ),
239
- 'https://happyforms.me/upgrade'
240
- );
241
- }
242
-
243
  public function admin_enqueue_scripts() {
244
  parent::admin_enqueue_scripts();
245
 
@@ -311,20 +295,6 @@ class HappyForms extends HappyForms_Core {
311
  $message_controller->export_archive( $form );
312
  }
313
 
314
- public function display_notices() {
315
- if ( ! is_admin() ) {
316
- return;
317
- }
318
-
319
- $forms = happyforms_get_form_controller()->get();
320
-
321
- if ( 0 === count( $forms ) ) {
322
- return;
323
- }
324
-
325
- $this->display_review_notice( $forms );
326
- }
327
-
328
  public function is_new_user( $forms ) {
329
  if ( 1 !== count( $forms ) ) {
330
  return false;
@@ -339,36 +309,6 @@ class HappyForms extends HappyForms_Core {
339
  return false;
340
  }
341
 
342
- public function display_review_notice( $forms ) {
343
- $last_form_index = count( $forms ) - 1;
344
- $form = $forms[$last_form_index];
345
- $form_date = new DateTime( $form['post_date'] );
346
- $now = new DateTime();
347
- $difference = $now->diff( $form_date );
348
- $days = $difference->format( '%a' );
349
-
350
- if ( 3 > intval( $days ) ) {
351
- return;
352
- }
353
-
354
- $hours = intval( $days ) * 16;
355
- $review_link = 'https://wordpress.org/support/plugin/happyforms/reviews/?filter=5#new-post';
356
- $upgrade_link = 'https://happyforms.me/upgrade';
357
-
358
- happyforms_get_admin_notices()->register(
359
- 'happyforms_leave_a_review',
360
- sprintf(
361
- __( '<p>Can we ask a favor?</p><p>You created your first form %s days ago — how time flies! Since then, we’ve answered hundreds of community emails and spent %s hours coding and improving HappyForms.</p><p>As you probably know, plugin reviews are an important way in helping a young business like ours grow.</p><p>If you could please spare one minute for a review, it would put a huge smile on our faces. 😊</p><p><a href="%s" target="_blank" rel="noopener">Leave a review now</a>, or show your support by <a href="%s" target="_blank" class="external">upgrading to a paid plan</a>.</p>', 'happyforms' ),
362
- $days, $hours, $review_link, $upgrade_link
363
- ),
364
- array(
365
- 'type' => 'info',
366
- 'screen' => array( 'edit-happyform' ),
367
- 'dismissible' => true,
368
- )
369
- );
370
- }
371
-
372
  public function add_setup_logic_upgrade_links() {
373
  $control_slugs = array(
374
  'email_recipient',
7
  public function initialize_plugin() {
8
  parent::initialize_plugin();
9
 
 
10
  add_action( 'happyforms_do_setup_control', array( $this, 'do_control' ), 10, 3 );
11
  add_action( 'happyforms_do_email_control', array( $this, 'do_control' ), 10, 3 );
12
  add_action( 'happyforms_do_style_control', array( $this, 'do_control' ), 10, 3 );
15
  add_filter( 'happyforms_style_controls', array( $this, 'add_dummy_style_controls' ) );
16
  add_action( 'admin_print_footer_scripts', array( $this, 'print_upgrade_modals' ) );
17
  add_action( 'parse_request', array( $this, 'parse_archive_request' ) );
 
18
 
19
  $this->register_dummy_parts();
20
  $this->add_setup_logic_upgrade_links();
79
  $controls[1450] = array(
80
  'type' => 'checkbox_dummy',
81
  'dummy_id' => 'shuffle_parts',
82
+ 'label' => __( 'Randomize parts', 'happyforms' ),
83
+ 'tooltip' => __( 'Randomize the order of all form parts to avoid biases in your responses.', 'happyforms' ),
84
  );
85
 
86
  $controls[1500] = array(
224
  require_once( happyforms_get_include_folder() . '/templates/admin/upgrade-modal.php' );
225
  }
226
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  public function admin_enqueue_scripts() {
228
  parent::admin_enqueue_scripts();
229
 
295
  $message_controller->export_archive( $form );
296
  }
297
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  public function is_new_user( $forms ) {
299
  if ( 1 !== count( $forms ) ) {
300
  return false;
309
  return false;
310
  }
311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  public function add_setup_logic_upgrade_links() {
313
  $control_slugs = array(
314
  'email_recipient',
inc/classes/parts/class-part-attachment-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Attachment_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'attachment_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Attachment', 'happyforms' );
9
  $this->description = __( 'For allowing file uploads with easy drag and drop zone.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Attachment_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'attachment_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'File Upload', 'happyforms' );
9
  $this->description = __( 'For allowing file uploads with easy drag and drop zone.', 'happyforms' );
10
  }
11
+
12
+ }
inc/classes/parts/class-part-date-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Date_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'date_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Date & Time', 'happyforms' );
9
  $this->description = __( 'For formatted day, month, year and or time fields.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Date_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'date_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'Date-Time', 'happyforms' );
9
  $this->description = __( 'For formatted day, month, year and or time fields.', 'happyforms' );
10
  }
11
+
12
+ }
inc/classes/parts/class-part-legal-dummy.php CHANGED
@@ -5,7 +5,7 @@ class HappyForms_Part_Legal_Dummy extends HappyForms_Form_Part {
5
  public $type = 'legal_dummy';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Compliance', 'happyforms' );
9
  $this->description = __( 'For requiring permission before accepting submission.', 'happyforms' );
10
  }
11
 
5
  public $type = 'legal_dummy';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Consent Choice', 'happyforms' );
9
  $this->description = __( 'For requiring permission before accepting submission.', 'happyforms' );
10
  }
11
 
inc/classes/parts/class-part-mailchimp-dummy.php CHANGED
@@ -5,7 +5,7 @@ class HappyForms_Part_OptIn_Dummy extends HappyForms_Form_Part {
5
  public $type = 'optin_dummy';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Opt-In', 'happyforms' );
9
  $this->description = __( 'For requiring permission before adding email address to mailing list.', 'happyforms' );
10
  }
11
 
5
  public $type = 'optin_dummy';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Opt-In Choice', 'happyforms' );
9
  $this->description = __( 'For requiring permission before adding email address to mailing list.', 'happyforms' );
10
  }
11
 
inc/classes/parts/class-part-phone-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Phone_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'phone_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Phone', 'happyforms' );
9
  $this->description = __( 'For phone numbers. Includes country specific formatting.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Phone_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'phone_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'Phone Number', 'happyforms' );
9
  $this->description = __( 'For phone numbers. Includes country specific formatting.', 'happyforms' );
10
  }
11
+
12
+ }
inc/classes/parts/class-part-rating-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Rating_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'rating_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Rating', 'happyforms' );
9
  $this->description = __( 'For collecting opinions using stars and emoji scales.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Rating_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'rating_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'Star Rating', 'happyforms' );
9
  $this->description = __( 'For collecting opinions using stars and emoji scales.', 'happyforms' );
10
  }
11
+
12
+ }
inc/classes/parts/class-part-scale-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Scale_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'scale_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Scale', 'happyforms' );
9
  $this->description = __( 'For collecting opinions using a horizontal slider.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Scale_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'scale_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'Slider Scale', 'happyforms' );
9
  $this->description = __( 'For collecting opinions using a horizontal slider.', 'happyforms' );
10
  }
11
+
12
+ }
inc/classes/parts/class-part-table-dummy.php CHANGED
@@ -3,10 +3,10 @@
3
  class HappyForms_Part_Table_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'table_dummy';
6
-
7
  public function __construct() {
8
- $this->label = __( 'Table', 'happyforms' );
9
  $this->description = __( 'For radios and checkboxes displaying in a grid of rows and columns.', 'happyforms' );
10
  }
11
-
12
- }
3
  class HappyForms_Part_Table_Dummy extends HappyForms_Form_Part {
4
 
5
  public $type = 'table_dummy';
6
+
7
  public function __construct() {
8
+ $this->label = __( 'Matrix Table', 'happyforms' );
9
  $this->description = __( 'For radios and checkboxes displaying in a grid of rows and columns.', 'happyforms' );
10
  }
11
+
12
+ }
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.9.12\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
- "POT-Creation-Date: 2020-06-13 10:24:37+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -45,116 +45,116 @@ msgstr ""
45
  msgid "Edit Form"
46
  msgstr ""
47
 
48
- #: core/classes/class-form-admin.php:156
49
  #: core/classes/class-form-controller.php:73
50
  msgid "View form"
51
  msgstr ""
52
 
53
- #: core/classes/class-form-admin.php:161
54
  msgid "Preview form"
55
  msgstr ""
56
 
57
- #: core/classes/class-form-admin.php:166 core/classes/class-form-admin.php:169
58
  msgid "Form updated."
59
  msgstr ""
60
 
61
- #: core/classes/class-form-admin.php:167
62
  msgid "Custom field updated."
63
  msgstr ""
64
 
65
- #: core/classes/class-form-admin.php:168
66
  msgid "Custom field deleted."
67
  msgstr ""
68
 
69
- #: core/classes/class-form-admin.php:170
70
  msgid "Form restored to revision from %s."
71
  msgstr ""
72
 
73
- #: core/classes/class-form-admin.php:171
74
  msgid "Form published."
75
  msgstr ""
76
 
77
- #: core/classes/class-form-admin.php:172
78
  msgid "Form saved."
79
  msgstr ""
80
 
81
- #: core/classes/class-form-admin.php:173
82
  msgid "Form submitted."
83
  msgstr ""
84
 
85
- #: core/classes/class-form-admin.php:174
86
  msgid "Form scheduled."
87
  msgstr ""
88
 
89
- #: core/classes/class-form-admin.php:175
90
  msgid "Form draft updated."
91
  msgstr ""
92
 
93
- #: core/classes/class-form-admin.php:198
94
  msgid "%s form updated."
95
  msgid_plural "%s forms updated."
96
  msgstr[0] ""
97
  msgstr[1] ""
98
 
99
- #: core/classes/class-form-admin.php:199
100
  msgid "%s form not updated, somebody is editing it."
101
  msgid_plural "%s forms not updated, somebody is editing them."
102
  msgstr[0] ""
103
  msgstr[1] ""
104
 
105
- #: core/classes/class-form-admin.php:200
106
  msgid "%s form permanently deleted."
107
  msgid_plural "%s forms permanently deleted."
108
  msgstr[0] ""
109
  msgstr[1] ""
110
 
111
- #: core/classes/class-form-admin.php:201
112
  msgid "%s form moved to the Trash."
113
  msgid_plural "%s forms moved to the Trash."
114
  msgstr[0] ""
115
  msgstr[1] ""
116
 
117
- #: core/classes/class-form-admin.php:202
118
  msgid "%s form restored from the Trash."
119
  msgid_plural "%s forms restored from the Trash."
120
  msgstr[0] ""
121
  msgstr[1] ""
122
 
123
- #: core/classes/class-form-admin.php:245
124
  msgid "Shortcode"
125
  msgstr ""
126
 
127
- #: core/classes/class-form-admin.php:246
128
  msgid "Author"
129
  msgstr ""
130
 
131
- #: core/classes/class-form-admin.php:284
132
  msgid "Copy to clipboard"
133
  msgstr ""
134
 
135
- #: core/classes/class-form-admin.php:338
136
- msgid "Y/m/d"
137
  msgstr ""
138
 
139
- #: core/classes/class-form-admin.php:381 core/classes/class-form-setup.php:124
140
  msgid "Edit"
141
  msgstr ""
142
 
143
- #: core/classes/class-form-admin.php:385
144
  #: core/templates/customize-form-item.php:27
145
  #: core/templates/customize-form-part-footer.php:4
146
  msgid "Duplicate"
147
  msgstr ""
148
 
149
- #: core/classes/class-form-admin.php:389
150
  msgid "Trash"
151
  msgstr ""
152
 
153
- #: core/classes/class-form-admin.php:433
154
  msgid "1 form duplicated."
155
  msgstr ""
156
 
157
- #: core/classes/class-form-admin.php:435
158
  msgid "Undo"
159
  msgstr ""
160
 
@@ -167,8 +167,8 @@ msgid "Form"
167
  msgstr ""
168
 
169
  #: core/classes/class-form-controller.php:69
170
- #: core/classes/class-happyforms-core.php:186
171
  #: core/classes/class-happyforms-core.php:187
 
172
  msgid "Add New"
173
  msgstr ""
174
 
@@ -199,8 +199,8 @@ msgstr ""
199
 
200
  #: core/classes/class-form-controller.php:78
201
  #: core/classes/class-form-controller.php:79
202
- #: core/classes/class-happyforms-core.php:178
203
  #: core/classes/class-happyforms-core.php:179
 
204
  msgid "All Forms"
205
  msgstr ""
206
 
@@ -306,7 +306,7 @@ msgid "Invalid data"
306
  msgstr ""
307
 
308
  #: core/classes/class-form-part-library.php:196
309
- msgid "Part definition not found"
310
  msgstr ""
311
 
312
  #: core/classes/class-form-part-library.php:227
@@ -359,7 +359,6 @@ msgstr ""
359
 
360
  #: core/classes/class-form-setup.php:182
361
  #: core/templates/customize-form-parts-drawer.php:30
362
- #: inc/classes/class-happyforms.php:237
363
  #: inc/templates/customize-controls/checkbox_dummy.php:7
364
  msgid "Upgrade"
365
  msgstr ""
@@ -375,13 +374,13 @@ msgid ""
375
  msgstr ""
376
 
377
  #: core/classes/class-form-setup.php:206
378
- msgid "Optional part label"
379
  msgstr ""
380
 
381
  #: core/classes/class-form-setup.php:207
382
  msgid ""
383
- "Mark optional parts in your form to let your users distinguish them from "
384
- "required parts."
385
  msgstr ""
386
 
387
  #: core/classes/class-form-setup.php:212
@@ -420,18 +419,10 @@ msgstr ""
420
 
421
  #: core/classes/class-form-setup.php:245
422
  msgid ""
423
- "Hide all form parts and display just title and confirmation message on "
424
  "submit."
425
  msgstr ""
426
 
427
- #: core/classes/class-form-setup.php:250
428
- msgid "Spam prevention"
429
- msgstr ""
430
-
431
- #: core/classes/class-form-setup.php:251
432
- msgid "Protect your form against bots by using HoneyPot security."
433
- msgstr ""
434
-
435
  #: core/classes/class-form-styles.php:49
436
  msgid "Left-to-right"
437
  msgstr ""
@@ -618,7 +609,7 @@ msgid "Font size"
618
  msgstr ""
619
 
620
  #: core/classes/class-form-styles.php:605
621
- msgid "Part borders & spacing"
622
  msgstr ""
623
 
624
  #: core/classes/class-form-styles.php:610
@@ -664,11 +655,11 @@ msgid "Background on focus"
664
  msgstr ""
665
 
666
  #: core/classes/class-form-styles.php:660
667
- msgid "Part labels & text"
668
  msgstr ""
669
 
670
  #: core/classes/class-form-styles.php:665
671
- msgid "Toggle placeholder on part focus"
672
  msgstr ""
673
 
674
  #: core/classes/class-form-styles.php:670
@@ -704,23 +695,23 @@ msgid "Value"
704
  msgstr ""
705
 
706
  #: core/classes/class-form-styles.php:720
707
- #: core/templates/parts/customize-email.php:30
708
- #: core/templates/parts/customize-multi-line-text.php:30
709
- #: core/templates/parts/customize-number.php:30
710
- #: core/templates/parts/customize-select.php:28
711
- #: core/templates/parts/customize-single-line-text.php:30
712
  #: inc/classes/parts/class-part-placeholder-dummy.php:8
713
  msgid "Placeholder"
714
  msgstr ""
715
 
716
  #: core/classes/class-form-styles.php:725
717
  #: core/templates/parts/customize-checkbox.php:17
718
- #: core/templates/parts/customize-email.php:18
719
- #: core/templates/parts/customize-multi-line-text.php:18
720
- #: core/templates/parts/customize-number.php:18
721
  #: core/templates/parts/customize-radio.php:17
722
- #: core/templates/parts/customize-select.php:17
723
- #: core/templates/parts/customize-single-line-text.php:18
724
  msgid "Description"
725
  msgstr ""
726
 
@@ -750,7 +741,6 @@ msgid "Checkmark"
750
  msgstr ""
751
 
752
  #: core/classes/class-form-styles.php:780
753
- #: inc/classes/parts/class-part-rating-dummy.php:8
754
  msgid "Rating"
755
  msgstr ""
756
 
@@ -791,7 +781,7 @@ msgid "Font weight"
791
  msgstr ""
792
 
793
  #: core/classes/class-form-styles.php:860
794
- msgid "Make button a part of last input"
795
  msgstr ""
796
 
797
  #: core/classes/class-form-styles.php:890
@@ -820,53 +810,53 @@ msgstr ""
820
  msgid "Additional CSS"
821
  msgstr ""
822
 
823
- #: core/classes/class-happyforms-core.php:170
824
  msgid "HappyForms Index"
825
  msgstr ""
826
 
827
- #: core/classes/class-happyforms-core.php:194
828
  #: core/classes/class-happyforms-core.php:195
 
829
  msgid "Activity"
830
  msgstr ""
831
 
832
- #: core/classes/class-happyforms-core.php:203
833
  #: core/classes/class-happyforms-core.php:204
 
834
  msgid "Settings"
835
  msgstr ""
836
 
837
- #: core/classes/class-happyforms-core.php:212
838
  #: core/classes/class-happyforms-core.php:213
 
839
  msgid "Welcome"
840
  msgstr ""
841
 
842
- #: core/classes/class-happyforms-core.php:443
843
  msgid "Insert HappyForm"
844
  msgstr ""
845
 
846
- #: core/classes/class-happyforms-core.php:443
847
  msgid "Add HappyForms"
848
  msgstr ""
849
 
850
- #: core/classes/class-happyforms-core.php:674
851
  msgid "Overview"
852
  msgstr ""
853
 
854
- #: core/classes/class-happyforms-core.php:684
855
  msgid "Hey 👋 Welcome to your HappyForms Dashboard!"
856
  msgstr ""
857
 
858
- #: core/classes/class-happyforms-core.php:687
859
  msgid ""
860
  "Are you looking for help? Well, we’ve swept the nacho crumbs from our "
861
  "keyboards, refilled our ginger beers and are ready to reply with answers! "
862
  "So, go on, email %s."
863
  msgstr ""
864
 
865
- #: core/classes/class-happyforms-core.php:696
866
  msgid "For more help"
867
  msgstr ""
868
 
869
- #: core/classes/class-happyforms-core.php:698
870
  msgid "Help guide"
871
  msgstr ""
872
 
@@ -1024,8 +1014,7 @@ msgid "Select all"
1024
  msgstr ""
1025
 
1026
  #: core/classes/parts/class-part-email.php:8
1027
- #: core/templates/customize-form-steps.php:5
1028
- msgid "Email"
1029
  msgstr ""
1030
 
1031
  #: core/classes/parts/class-part-email.php:9
@@ -1033,7 +1022,7 @@ msgid "For formatted email addresses. The '@' symbol is required."
1033
  msgstr ""
1034
 
1035
  #: core/classes/parts/class-part-multi-line-text.php:8
1036
- msgid "Long Text"
1037
  msgstr ""
1038
 
1039
  #: core/classes/parts/class-part-multi-line-text.php:9
@@ -1041,12 +1030,12 @@ msgid "For paragraph text fields."
1041
  msgstr ""
1042
 
1043
  #: core/classes/parts/class-part-multi-line-text.php:69
1044
- #: core/templates/parts/customize-multi-line-text.php:64
1045
  msgid "Min characters"
1046
  msgstr ""
1047
 
1048
  #: core/classes/parts/class-part-multi-line-text.php:73
1049
- #: core/templates/parts/customize-multi-line-text.php:61
1050
  msgid "Max words"
1051
  msgstr ""
1052
 
@@ -1079,46 +1068,46 @@ msgid "No results"
1079
  msgstr ""
1080
 
1081
  #: core/classes/parts/class-part-single-line-text.php:8
1082
- msgid "Short Text"
1083
  msgstr ""
1084
 
1085
  #: core/classes/parts/class-part-single-line-text.php:9
1086
  msgid "For single line text fields."
1087
  msgstr ""
1088
 
1089
- #: core/helpers/helper-activation.php:70
1090
  msgid "Sample Form"
1091
  msgstr ""
1092
 
1093
- #: core/helpers/helper-activation.php:100
1094
  msgid "First name"
1095
  msgstr ""
1096
 
1097
- #: core/helpers/helper-activation.php:105
1098
  msgid "Last name"
1099
  msgstr ""
1100
 
1101
- #: core/helpers/helper-activation.php:110
1102
  msgid "What's your reason for contacting us?"
1103
  msgstr ""
1104
 
1105
- #: core/helpers/helper-activation.php:113
1106
  msgid "Need technical help"
1107
  msgstr ""
1108
 
1109
- #: core/helpers/helper-activation.php:116
1110
  msgid "Want to suggest a feature"
1111
  msgstr ""
1112
 
1113
- #: core/helpers/helper-activation.php:119
1114
  msgid "Asking about my account"
1115
  msgstr ""
1116
 
1117
- #: core/helpers/helper-activation.php:125
1118
  msgid "What's your age?"
1119
  msgstr ""
1120
 
1121
- #: core/helpers/helper-activation.php:130
1122
  msgid "Your message"
1123
  msgstr ""
1124
 
@@ -2790,7 +2779,7 @@ msgstr ""
2790
 
2791
  #: core/helpers/helper-misc.php:930
2792
  #: core/templates/parts/customize-checkbox.php:95
2793
- msgid "Apply to all parts"
2794
  msgstr ""
2795
 
2796
  #: core/templates/admin-form-modal.php:5
@@ -2840,11 +2829,11 @@ msgid "Add title"
2840
  msgstr ""
2841
 
2842
  #: core/templates/customize-form-build.php:10
2843
- msgid "Add parts here to appear in your form."
2844
  msgstr ""
2845
 
2846
  #: core/templates/customize-form-build.php:13
2847
- msgid "Add a Part"
2848
  msgstr ""
2849
 
2850
  #: core/templates/customize-form-item.php:18
@@ -2891,7 +2880,7 @@ msgid "Upgrade to add logic rule"
2891
  msgstr ""
2892
 
2893
  #: core/templates/customize-form-parts-drawer.php:5
2894
- msgid "Search parts"
2895
  msgstr ""
2896
 
2897
  #: core/templates/customize-form-parts-drawer.php:7
@@ -2899,13 +2888,17 @@ msgid "Clear Results"
2899
  msgstr ""
2900
 
2901
  #: core/templates/customize-form-parts-drawer.php:39
2902
- msgid "No parts found."
2903
  msgstr ""
2904
 
2905
  #: core/templates/customize-form-steps.php:3
2906
  msgid "Build"
2907
  msgstr ""
2908
 
 
 
 
 
2909
  #: core/templates/customize-header-actions.php:5
2910
  msgid "Save"
2911
  msgstr ""
@@ -2944,6 +2937,7 @@ msgid "Label"
2944
  msgstr ""
2945
 
2946
  #: core/templates/parts/customize-checkbox.php:8
 
2947
  #: core/templates/parts/customize-multi-line-text.php:8
2948
  #: core/templates/parts/customize-number.php:8
2949
  #: core/templates/parts/customize-radio.php:8
@@ -2983,32 +2977,32 @@ msgid "Hidden"
2983
  msgstr ""
2984
 
2985
  #: core/templates/parts/customize-checkbox.php:21
2986
- #: core/templates/parts/customize-email.php:22
2987
- #: core/templates/parts/customize-multi-line-text.php:22
2988
- #: core/templates/parts/customize-number.php:22
2989
  #: core/templates/parts/customize-radio.php:21
2990
- #: core/templates/parts/customize-select.php:21
2991
- #: core/templates/parts/customize-single-line-text.php:22
2992
  msgid "Description appearance"
2993
  msgstr ""
2994
 
2995
  #: core/templates/parts/customize-checkbox.php:23
2996
- #: core/templates/parts/customize-email.php:24
2997
- #: core/templates/parts/customize-multi-line-text.php:24
2998
- #: core/templates/parts/customize-number.php:24
2999
  #: core/templates/parts/customize-radio.php:23
3000
- #: core/templates/parts/customize-select.php:23
3001
- #: core/templates/parts/customize-single-line-text.php:24
3002
  msgid "Standard"
3003
  msgstr ""
3004
 
3005
  #: core/templates/parts/customize-checkbox.php:24
3006
- #: core/templates/parts/customize-email.php:26
3007
- #: core/templates/parts/customize-multi-line-text.php:26
3008
- #: core/templates/parts/customize-number.php:26
3009
  #: core/templates/parts/customize-radio.php:24
3010
- #: core/templates/parts/customize-select.php:24
3011
- #: core/templates/parts/customize-single-line-text.php:26
3012
  msgid "Tooltip"
3013
  msgstr ""
3014
 
@@ -3059,7 +3053,7 @@ msgstr ""
3059
 
3060
  #: core/templates/parts/customize-checkbox.php:53
3061
  #: core/templates/parts/customize-email.php:38
3062
- #: core/templates/parts/customize-multi-line-text.php:38
3063
  #: core/templates/parts/customize-number.php:48
3064
  #: core/templates/parts/customize-radio.php:53
3065
  #: core/templates/parts/customize-select.php:57
@@ -3093,7 +3087,7 @@ msgstr ""
3093
 
3094
  #: core/templates/parts/customize-checkbox.php:102
3095
  #: core/templates/parts/customize-email.php:78
3096
- #: core/templates/parts/customize-multi-line-text.php:82
3097
  #: core/templates/parts/customize-number.php:99
3098
  #: core/templates/parts/customize-radio.php:83
3099
  #: core/templates/parts/customize-select.php:83
@@ -3107,10 +3101,6 @@ msgstr ""
3107
  msgid "Make this choice default"
3108
  msgstr ""
3109
 
3110
- #: core/templates/parts/customize-email.php:8
3111
- msgid "Lable display"
3112
- msgstr ""
3113
-
3114
  #: core/templates/parts/customize-email.php:13
3115
  #: core/templates/parts/customize-multi-line-text.php:13
3116
  #: core/templates/parts/customize-number.php:13
@@ -3118,10 +3108,10 @@ msgstr ""
3118
  msgid "Inside"
3119
  msgstr ""
3120
 
3121
- #: core/templates/parts/customize-email.php:25
3122
- #: core/templates/parts/customize-multi-line-text.php:25
3123
- #: core/templates/parts/customize-number.php:25
3124
- #: core/templates/parts/customize-single-line-text.php:25
3125
  msgid "Reveal on focus"
3126
  msgstr ""
3127
 
@@ -3150,31 +3140,35 @@ msgstr ""
3150
  msgid "Suffix"
3151
  msgstr ""
3152
 
3153
- #: core/templates/parts/customize-multi-line-text.php:49
 
 
 
 
3154
  msgid "Limit words/characters"
3155
  msgstr ""
3156
 
3157
- #: core/templates/parts/customize-multi-line-text.php:55
3158
  msgid "Limit"
3159
  msgstr ""
3160
 
3161
- #: core/templates/parts/customize-multi-line-text.php:59
3162
  msgid "Count"
3163
  msgstr ""
3164
 
3165
- #: core/templates/parts/customize-multi-line-text.php:62
3166
  msgid "Min words"
3167
  msgstr ""
3168
 
3169
- #: core/templates/parts/customize-multi-line-text.php:63
3170
  msgid "Max characters"
3171
  msgstr ""
3172
 
3173
- #: core/templates/parts/customize-multi-line-text.php:68
3174
  msgid "'Characters' label"
3175
  msgstr ""
3176
 
3177
- #: core/templates/parts/customize-multi-line-text.php:72
3178
  msgid "'Words' label"
3179
  msgstr ""
3180
 
@@ -3215,167 +3209,150 @@ msgstr ""
3215
  msgid "Click to edit this part."
3216
  msgstr ""
3217
 
3218
- #: inc/classes/class-happyforms.php:84
3219
- msgid "Shuffle parts"
3220
  msgstr ""
3221
 
3222
- #: inc/classes/class-happyforms.php:85
3223
- msgid "Shuffle the order of all form parts to avoid biases in your responses."
3224
  msgstr ""
3225
 
3226
- #: inc/classes/class-happyforms.php:91
3227
  msgid "Use reCAPTCHA"
3228
  msgstr ""
3229
 
3230
- #: inc/classes/class-happyforms.php:92
3231
  msgid "Protect your form against bots using your Google ReCaptcha credentials."
3232
  msgstr ""
3233
 
3234
- #: inc/classes/class-happyforms.php:98
3235
  msgid "Require password"
3236
  msgstr ""
3237
 
3238
- #: inc/classes/class-happyforms.php:99
3239
  msgid "Only users with password will be able to view and submit the form."
3240
  msgstr ""
3241
 
3242
- #: inc/classes/class-happyforms.php:105
3243
  msgid "Open in overlay window"
3244
  msgstr ""
3245
 
3246
- #: inc/classes/class-happyforms.php:106
3247
  msgid "Generate a link that can be clicked to open an overlay window for this form."
3248
  msgstr ""
3249
 
3250
- #: inc/classes/class-happyforms.php:112
3251
  msgid "Save user's meta data"
3252
  msgstr ""
3253
 
3254
- #: inc/classes/class-happyforms.php:113
3255
  msgid ""
3256
  "User meta data like IP address, browser language, local time, and platform "
3257
  "will be saved with each submission when checked."
3258
  msgstr ""
3259
 
3260
- #: inc/classes/class-happyforms.php:119
3261
  msgid "Save abandoned forms"
3262
  msgstr ""
3263
 
3264
- #: inc/classes/class-happyforms.php:120
3265
  msgid "Keep incomplete users responses stored in your WordPress database."
3266
  msgstr ""
3267
 
3268
- #: inc/classes/class-happyforms.php:126
3269
  msgid "Allow save and resume"
3270
  msgstr ""
3271
 
3272
- #: inc/classes/class-happyforms.php:127
3273
  msgid ""
3274
  "Let users temporarily save their incomplete response and continue filling "
3275
  "out the form at a later time."
3276
  msgstr ""
3277
 
3278
- #: inc/classes/class-happyforms.php:133
3279
  msgid "Add submission identifier"
3280
  msgstr ""
3281
 
3282
- #: inc/classes/class-happyforms.php:134
3283
  msgid "Tag responses with a unique, incremental identifier."
3284
  msgstr ""
3285
 
3286
- #: inc/classes/class-happyforms.php:140
3287
  msgid "Preview before submit"
3288
  msgstr ""
3289
 
3290
- #: inc/classes/class-happyforms.php:141
3291
  msgid "Let your users review their submission before confirming it."
3292
  msgstr ""
3293
 
3294
- #: inc/classes/class-happyforms.php:147
3295
  msgid "Disable submit until valid"
3296
  msgstr ""
3297
 
3298
- #: inc/classes/class-happyforms.php:148
3299
  msgid ""
3300
  "Reduce the opacity of the submit button until all required form parts are "
3301
  "valid."
3302
  msgstr ""
3303
 
3304
- #: inc/classes/class-happyforms.php:154
3305
  msgid "Limit submissions"
3306
  msgstr ""
3307
 
3308
- #: inc/classes/class-happyforms.php:155
3309
  msgid "Set limit on number of allowed form submission in general or per user."
3310
  msgstr ""
3311
 
3312
- #: inc/classes/class-happyforms.php:161
3313
  msgid "Schedule visibility"
3314
  msgstr ""
3315
 
3316
- #: inc/classes/class-happyforms.php:162
3317
  msgid ""
3318
  "Show or hide this form during a chosen time and day. Go to Settings > "
3319
  "Timezone to set your city offset."
3320
  msgstr ""
3321
 
3322
- #: inc/classes/class-happyforms.php:172
3323
  msgid "Include reply link"
3324
  msgstr ""
3325
 
3326
- #: inc/classes/class-happyforms.php:173
3327
  msgid "Reply to your users and mark their submission as read in one click."
3328
  msgstr ""
3329
 
3330
- #: inc/classes/class-happyforms.php:179
3331
  msgid "Include referral link"
3332
  msgstr ""
3333
 
3334
- #: inc/classes/class-happyforms.php:180
3335
  msgid "Include the page link your form was submitted from."
3336
  msgstr ""
3337
 
3338
- #: inc/classes/class-happyforms.php:186 inc/classes/class-happyforms.php:193
3339
  msgid "Attach .pdf"
3340
  msgstr ""
3341
 
3342
- #: inc/classes/class-happyforms.php:187
3343
  msgid "Attach a PDF to your submission alert."
3344
  msgstr ""
3345
 
3346
- #: inc/classes/class-happyforms.php:194
3347
  msgid "Attach a PDF to the recipient's confirmation email."
3348
  msgstr ""
3349
 
3350
- #: inc/classes/class-happyforms.php:200
3351
  msgid "Send abandonment email"
3352
  msgstr ""
3353
 
3354
- #: inc/classes/class-happyforms.php:201
3355
  msgid "Notify users when they abandon your form before submitting it."
3356
  msgstr ""
3357
 
3358
- #: inc/classes/class-happyforms.php:211
3359
  msgid "Use theme styles"
3360
  msgstr ""
3361
 
3362
- #: inc/classes/class-happyforms.php:236
3363
- msgid "HappyForms Upgrade"
3364
- msgstr ""
3365
-
3366
- #: inc/classes/class-happyforms.php:361
3367
- msgid ""
3368
- "<p>Can we ask a favor?</p><p>You created your first form %s days ago — how "
3369
- "time flies! Since then, we’ve answered hundreds of community emails and "
3370
- "spent %s hours coding and improving HappyForms.</p><p>As you probably know, "
3371
- "plugin reviews are an important way in helping a young business like ours "
3372
- "grow.</p><p>If you could please spare one minute for a review, it would put "
3373
- "a huge smile on our faces. 😊</p><p><a href=\"%s\" target=\"_blank\" "
3374
- "rel=\"noopener\">Leave a review now</a>, or show your support by <a "
3375
- "href=\"%s\" target=\"_blank\" class=\"external\">upgrading to a paid "
3376
- "plan</a>.</p>"
3377
- msgstr ""
3378
-
3379
  #: inc/classes/class-message-controller.php:616
3380
  #: inc/templates/email-owner.php:31
3381
  msgid "Tracking number"
@@ -3390,7 +3367,7 @@ msgid "For geographical locations. Includes Google Maps intergration."
3390
  msgstr ""
3391
 
3392
  #: inc/classes/parts/class-part-attachment-dummy.php:8
3393
- msgid "Attachment"
3394
  msgstr ""
3395
 
3396
  #: inc/classes/parts/class-part-attachment-dummy.php:9
@@ -3398,7 +3375,7 @@ msgid "For allowing file uploads with easy drag and drop zone."
3398
  msgstr ""
3399
 
3400
  #: inc/classes/parts/class-part-date-dummy.php:8
3401
- msgid "Date & Time"
3402
  msgstr ""
3403
 
3404
  #: inc/classes/parts/class-part-date-dummy.php:9
@@ -3406,7 +3383,7 @@ msgid "For formatted day, month, year and or time fields."
3406
  msgstr ""
3407
 
3408
  #: inc/classes/parts/class-part-legal-dummy.php:8
3409
- msgid "Compliance"
3410
  msgstr ""
3411
 
3412
  #: inc/classes/parts/class-part-legal-dummy.php:9
@@ -3414,7 +3391,7 @@ msgid "For requiring permission before accepting submission."
3414
  msgstr ""
3415
 
3416
  #: inc/classes/parts/class-part-mailchimp-dummy.php:8
3417
- msgid "Opt-In"
3418
  msgstr ""
3419
 
3420
  #: inc/classes/parts/class-part-mailchimp-dummy.php:9
@@ -3446,7 +3423,7 @@ msgid "For processing payments using your favorite services."
3446
  msgstr ""
3447
 
3448
  #: inc/classes/parts/class-part-phone-dummy.php:8
3449
- msgid "Phone"
3450
  msgstr ""
3451
 
3452
  #: inc/classes/parts/class-part-phone-dummy.php:9
@@ -3465,6 +3442,10 @@ msgstr ""
3465
  msgid "For collecting opinions and showing published results in a bar chart."
3466
  msgstr ""
3467
 
 
 
 
 
3468
  #: inc/classes/parts/class-part-rating-dummy.php:9
3469
  msgid "For collecting opinions using stars and emoji scales."
3470
  msgstr ""
@@ -3478,7 +3459,7 @@ msgid "For formatting text, code blocks, lists and more."
3478
  msgstr ""
3479
 
3480
  #: inc/classes/parts/class-part-scale-dummy.php:8
3481
- msgid "Scale"
3482
  msgstr ""
3483
 
3484
  #: inc/classes/parts/class-part-scale-dummy.php:9
@@ -3494,7 +3475,7 @@ msgid "For requiring authorization before accepting submission."
3494
  msgstr ""
3495
 
3496
  #: inc/classes/parts/class-part-table-dummy.php:8
3497
- msgid "Table"
3498
  msgstr ""
3499
 
3500
  #: inc/classes/parts/class-part-table-dummy.php:9
2
  # This file is distributed under the same license as the HappyForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: HappyForms 1.9.13\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
+ "POT-Creation-Date: 2020-07-01 13:03: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"
45
  msgid "Edit Form"
46
  msgstr ""
47
 
48
+ #: core/classes/class-form-admin.php:155
49
  #: core/classes/class-form-controller.php:73
50
  msgid "View form"
51
  msgstr ""
52
 
53
+ #: core/classes/class-form-admin.php:160
54
  msgid "Preview form"
55
  msgstr ""
56
 
57
+ #: core/classes/class-form-admin.php:165 core/classes/class-form-admin.php:168
58
  msgid "Form updated."
59
  msgstr ""
60
 
61
+ #: core/classes/class-form-admin.php:166
62
  msgid "Custom field updated."
63
  msgstr ""
64
 
65
+ #: core/classes/class-form-admin.php:167
66
  msgid "Custom field deleted."
67
  msgstr ""
68
 
69
+ #: core/classes/class-form-admin.php:169
70
  msgid "Form restored to revision from %s."
71
  msgstr ""
72
 
73
+ #: core/classes/class-form-admin.php:170
74
  msgid "Form published."
75
  msgstr ""
76
 
77
+ #: core/classes/class-form-admin.php:171
78
  msgid "Form saved."
79
  msgstr ""
80
 
81
+ #: core/classes/class-form-admin.php:172
82
  msgid "Form submitted."
83
  msgstr ""
84
 
85
+ #: core/classes/class-form-admin.php:173
86
  msgid "Form scheduled."
87
  msgstr ""
88
 
89
+ #: core/classes/class-form-admin.php:174
90
  msgid "Form draft updated."
91
  msgstr ""
92
 
93
+ #: core/classes/class-form-admin.php:197
94
  msgid "%s form updated."
95
  msgid_plural "%s forms updated."
96
  msgstr[0] ""
97
  msgstr[1] ""
98
 
99
+ #: core/classes/class-form-admin.php:198
100
  msgid "%s form not updated, somebody is editing it."
101
  msgid_plural "%s forms not updated, somebody is editing them."
102
  msgstr[0] ""
103
  msgstr[1] ""
104
 
105
+ #: core/classes/class-form-admin.php:199
106
  msgid "%s form permanently deleted."
107
  msgid_plural "%s forms permanently deleted."
108
  msgstr[0] ""
109
  msgstr[1] ""
110
 
111
+ #: core/classes/class-form-admin.php:200
112
  msgid "%s form moved to the Trash."
113
  msgid_plural "%s forms moved to the Trash."
114
  msgstr[0] ""
115
  msgstr[1] ""
116
 
117
+ #: core/classes/class-form-admin.php:201
118
  msgid "%s form restored from the Trash."
119
  msgid_plural "%s forms restored from the Trash."
120
  msgstr[0] ""
121
  msgstr[1] ""
122
 
123
+ #: core/classes/class-form-admin.php:244
124
  msgid "Shortcode"
125
  msgstr ""
126
 
127
+ #: core/classes/class-form-admin.php:245
128
  msgid "Author"
129
  msgstr ""
130
 
131
+ #: core/classes/class-form-admin.php:283
132
  msgid "Copy to clipboard"
133
  msgstr ""
134
 
135
+ #: core/classes/class-form-admin.php:314
136
+ msgid "Last modified"
137
  msgstr ""
138
 
139
+ #: core/classes/class-form-admin.php:353 core/classes/class-form-setup.php:124
140
  msgid "Edit"
141
  msgstr ""
142
 
143
+ #: core/classes/class-form-admin.php:357
144
  #: core/templates/customize-form-item.php:27
145
  #: core/templates/customize-form-part-footer.php:4
146
  msgid "Duplicate"
147
  msgstr ""
148
 
149
+ #: core/classes/class-form-admin.php:361
150
  msgid "Trash"
151
  msgstr ""
152
 
153
+ #: core/classes/class-form-admin.php:405
154
  msgid "1 form duplicated."
155
  msgstr ""
156
 
157
+ #: core/classes/class-form-admin.php:407
158
  msgid "Undo"
159
  msgstr ""
160
 
167
  msgstr ""
168
 
169
  #: core/classes/class-form-controller.php:69
 
170
  #: core/classes/class-happyforms-core.php:187
171
+ #: core/classes/class-happyforms-core.php:188
172
  msgid "Add New"
173
  msgstr ""
174
 
199
 
200
  #: core/classes/class-form-controller.php:78
201
  #: core/classes/class-form-controller.php:79
 
202
  #: core/classes/class-happyforms-core.php:179
203
+ #: core/classes/class-happyforms-core.php:180
204
  msgid "All Forms"
205
  msgstr ""
206
 
306
  msgstr ""
307
 
308
  #: core/classes/class-form-part-library.php:196
309
+ msgid "Field definition not found"
310
  msgstr ""
311
 
312
  #: core/classes/class-form-part-library.php:227
359
 
360
  #: core/classes/class-form-setup.php:182
361
  #: core/templates/customize-form-parts-drawer.php:30
 
362
  #: inc/templates/customize-controls/checkbox_dummy.php:7
363
  msgid "Upgrade"
364
  msgstr ""
374
  msgstr ""
375
 
376
  #: core/classes/class-form-setup.php:206
377
+ msgid "Optional field label"
378
  msgstr ""
379
 
380
  #: core/classes/class-form-setup.php:207
381
  msgid ""
382
+ "Mark optional fields in your form to let your users distinguish them from "
383
+ "required fields."
384
  msgstr ""
385
 
386
  #: core/classes/class-form-setup.php:212
419
 
420
  #: core/classes/class-form-setup.php:245
421
  msgid ""
422
+ "Hide all form fields and display just title and confirmation message on "
423
  "submit."
424
  msgstr ""
425
 
 
 
 
 
 
 
 
 
426
  #: core/classes/class-form-styles.php:49
427
  msgid "Left-to-right"
428
  msgstr ""
609
  msgstr ""
610
 
611
  #: core/classes/class-form-styles.php:605
612
+ msgid "Field borders & spacing"
613
  msgstr ""
614
 
615
  #: core/classes/class-form-styles.php:610
655
  msgstr ""
656
 
657
  #: core/classes/class-form-styles.php:660
658
+ msgid "Field labels & text"
659
  msgstr ""
660
 
661
  #: core/classes/class-form-styles.php:665
662
+ msgid "Toggle placeholder on field focus"
663
  msgstr ""
664
 
665
  #: core/classes/class-form-styles.php:670
695
  msgstr ""
696
 
697
  #: core/classes/class-form-styles.php:720
698
+ #: core/templates/parts/customize-email.php:18
699
+ #: core/templates/parts/customize-multi-line-text.php:18
700
+ #: core/templates/parts/customize-number.php:18
701
+ #: core/templates/parts/customize-select.php:17
702
+ #: core/templates/parts/customize-single-line-text.php:18
703
  #: inc/classes/parts/class-part-placeholder-dummy.php:8
704
  msgid "Placeholder"
705
  msgstr ""
706
 
707
  #: core/classes/class-form-styles.php:725
708
  #: core/templates/parts/customize-checkbox.php:17
709
+ #: core/templates/parts/customize-email.php:22
710
+ #: core/templates/parts/customize-multi-line-text.php:22
711
+ #: core/templates/parts/customize-number.php:22
712
  #: core/templates/parts/customize-radio.php:17
713
+ #: core/templates/parts/customize-select.php:21
714
+ #: core/templates/parts/customize-single-line-text.php:22
715
  msgid "Description"
716
  msgstr ""
717
 
741
  msgstr ""
742
 
743
  #: core/classes/class-form-styles.php:780
 
744
  msgid "Rating"
745
  msgstr ""
746
 
781
  msgstr ""
782
 
783
  #: core/classes/class-form-styles.php:860
784
+ msgid "Make button a field of last input"
785
  msgstr ""
786
 
787
  #: core/classes/class-form-styles.php:890
810
  msgid "Additional CSS"
811
  msgstr ""
812
 
813
+ #: core/classes/class-happyforms-core.php:171
814
  msgid "HappyForms Index"
815
  msgstr ""
816
 
 
817
  #: core/classes/class-happyforms-core.php:195
818
+ #: core/classes/class-happyforms-core.php:196
819
  msgid "Activity"
820
  msgstr ""
821
 
 
822
  #: core/classes/class-happyforms-core.php:204
823
+ #: core/classes/class-happyforms-core.php:205
824
  msgid "Settings"
825
  msgstr ""
826
 
 
827
  #: core/classes/class-happyforms-core.php:213
828
+ #: core/classes/class-happyforms-core.php:214
829
  msgid "Welcome"
830
  msgstr ""
831
 
832
+ #: core/classes/class-happyforms-core.php:446
833
  msgid "Insert HappyForm"
834
  msgstr ""
835
 
836
+ #: core/classes/class-happyforms-core.php:446
837
  msgid "Add HappyForms"
838
  msgstr ""
839
 
840
+ #: core/classes/class-happyforms-core.php:677
841
  msgid "Overview"
842
  msgstr ""
843
 
844
+ #: core/classes/class-happyforms-core.php:687
845
  msgid "Hey 👋 Welcome to your HappyForms Dashboard!"
846
  msgstr ""
847
 
848
+ #: core/classes/class-happyforms-core.php:690
849
  msgid ""
850
  "Are you looking for help? Well, we’ve swept the nacho crumbs from our "
851
  "keyboards, refilled our ginger beers and are ready to reply with answers! "
852
  "So, go on, email %s."
853
  msgstr ""
854
 
855
+ #: core/classes/class-happyforms-core.php:699
856
  msgid "For more help"
857
  msgstr ""
858
 
859
+ #: core/classes/class-happyforms-core.php:701
860
  msgid "Help guide"
861
  msgstr ""
862
 
1014
  msgstr ""
1015
 
1016
  #: core/classes/parts/class-part-email.php:8
1017
+ msgid "Email Address"
 
1018
  msgstr ""
1019
 
1020
  #: core/classes/parts/class-part-email.php:9
1022
  msgstr ""
1023
 
1024
  #: core/classes/parts/class-part-multi-line-text.php:8
1025
+ msgid "Long Answer"
1026
  msgstr ""
1027
 
1028
  #: core/classes/parts/class-part-multi-line-text.php:9
1030
  msgstr ""
1031
 
1032
  #: core/classes/parts/class-part-multi-line-text.php:69
1033
+ #: core/templates/parts/customize-multi-line-text.php:68
1034
  msgid "Min characters"
1035
  msgstr ""
1036
 
1037
  #: core/classes/parts/class-part-multi-line-text.php:73
1038
+ #: core/templates/parts/customize-multi-line-text.php:65
1039
  msgid "Max words"
1040
  msgstr ""
1041
 
1068
  msgstr ""
1069
 
1070
  #: core/classes/parts/class-part-single-line-text.php:8
1071
+ msgid "Short Answer"
1072
  msgstr ""
1073
 
1074
  #: core/classes/parts/class-part-single-line-text.php:9
1075
  msgid "For single line text fields."
1076
  msgstr ""
1077
 
1078
+ #: core/helpers/helper-activation.php:71
1079
  msgid "Sample Form"
1080
  msgstr ""
1081
 
1082
+ #: core/helpers/helper-activation.php:101
1083
  msgid "First name"
1084
  msgstr ""
1085
 
1086
+ #: core/helpers/helper-activation.php:106
1087
  msgid "Last name"
1088
  msgstr ""
1089
 
1090
+ #: core/helpers/helper-activation.php:111
1091
  msgid "What's your reason for contacting us?"
1092
  msgstr ""
1093
 
1094
+ #: core/helpers/helper-activation.php:114
1095
  msgid "Need technical help"
1096
  msgstr ""
1097
 
1098
+ #: core/helpers/helper-activation.php:117
1099
  msgid "Want to suggest a feature"
1100
  msgstr ""
1101
 
1102
+ #: core/helpers/helper-activation.php:120
1103
  msgid "Asking about my account"
1104
  msgstr ""
1105
 
1106
+ #: core/helpers/helper-activation.php:126
1107
  msgid "What's your age?"
1108
  msgstr ""
1109
 
1110
+ #: core/helpers/helper-activation.php:131
1111
  msgid "Your message"
1112
  msgstr ""
1113
 
2779
 
2780
  #: core/helpers/helper-misc.php:930
2781
  #: core/templates/parts/customize-checkbox.php:95
2782
+ msgid "Apply to all fields"
2783
  msgstr ""
2784
 
2785
  #: core/templates/admin-form-modal.php:5
2829
  msgstr ""
2830
 
2831
  #: core/templates/customize-form-build.php:10
2832
+ msgid "Add fields here to appear in your form."
2833
  msgstr ""
2834
 
2835
  #: core/templates/customize-form-build.php:13
2836
+ msgid "Add a Field"
2837
  msgstr ""
2838
 
2839
  #: core/templates/customize-form-item.php:18
2880
  msgstr ""
2881
 
2882
  #: core/templates/customize-form-parts-drawer.php:5
2883
+ msgid "Search fields"
2884
  msgstr ""
2885
 
2886
  #: core/templates/customize-form-parts-drawer.php:7
2888
  msgstr ""
2889
 
2890
  #: core/templates/customize-form-parts-drawer.php:39
2891
+ msgid "No fields found."
2892
  msgstr ""
2893
 
2894
  #: core/templates/customize-form-steps.php:3
2895
  msgid "Build"
2896
  msgstr ""
2897
 
2898
+ #: core/templates/customize-form-steps.php:5
2899
+ msgid "Email"
2900
+ msgstr ""
2901
+
2902
  #: core/templates/customize-header-actions.php:5
2903
  msgid "Save"
2904
  msgstr ""
2937
  msgstr ""
2938
 
2939
  #: core/templates/parts/customize-checkbox.php:8
2940
+ #: core/templates/parts/customize-email.php:8
2941
  #: core/templates/parts/customize-multi-line-text.php:8
2942
  #: core/templates/parts/customize-number.php:8
2943
  #: core/templates/parts/customize-radio.php:8
2977
  msgstr ""
2978
 
2979
  #: core/templates/parts/customize-checkbox.php:21
2980
+ #: core/templates/parts/customize-email.php:26
2981
+ #: core/templates/parts/customize-multi-line-text.php:26
2982
+ #: core/templates/parts/customize-number.php:26
2983
  #: core/templates/parts/customize-radio.php:21
2984
+ #: core/templates/parts/customize-select.php:25
2985
+ #: core/templates/parts/customize-single-line-text.php:26
2986
  msgid "Description appearance"
2987
  msgstr ""
2988
 
2989
  #: core/templates/parts/customize-checkbox.php:23
2990
+ #: core/templates/parts/customize-email.php:28
2991
+ #: core/templates/parts/customize-multi-line-text.php:28
2992
+ #: core/templates/parts/customize-number.php:28
2993
  #: core/templates/parts/customize-radio.php:23
2994
+ #: core/templates/parts/customize-select.php:27
2995
+ #: core/templates/parts/customize-single-line-text.php:28
2996
  msgid "Standard"
2997
  msgstr ""
2998
 
2999
  #: core/templates/parts/customize-checkbox.php:24
3000
+ #: core/templates/parts/customize-email.php:30
3001
+ #: core/templates/parts/customize-multi-line-text.php:30
3002
+ #: core/templates/parts/customize-number.php:30
3003
  #: core/templates/parts/customize-radio.php:24
3004
+ #: core/templates/parts/customize-select.php:28
3005
+ #: core/templates/parts/customize-single-line-text.php:30
3006
  msgid "Tooltip"
3007
  msgstr ""
3008
 
3053
 
3054
  #: core/templates/parts/customize-checkbox.php:53
3055
  #: core/templates/parts/customize-email.php:38
3056
+ #: core/templates/parts/customize-multi-line-text.php:42
3057
  #: core/templates/parts/customize-number.php:48
3058
  #: core/templates/parts/customize-radio.php:53
3059
  #: core/templates/parts/customize-select.php:57
3087
 
3088
  #: core/templates/parts/customize-checkbox.php:102
3089
  #: core/templates/parts/customize-email.php:78
3090
+ #: core/templates/parts/customize-multi-line-text.php:86
3091
  #: core/templates/parts/customize-number.php:99
3092
  #: core/templates/parts/customize-radio.php:83
3093
  #: core/templates/parts/customize-select.php:83
3101
  msgid "Make this choice default"
3102
  msgstr ""
3103
 
 
 
 
 
3104
  #: core/templates/parts/customize-email.php:13
3105
  #: core/templates/parts/customize-multi-line-text.php:13
3106
  #: core/templates/parts/customize-number.php:13
3108
  msgid "Inside"
3109
  msgstr ""
3110
 
3111
+ #: core/templates/parts/customize-email.php:29
3112
+ #: core/templates/parts/customize-multi-line-text.php:29
3113
+ #: core/templates/parts/customize-number.php:29
3114
+ #: core/templates/parts/customize-single-line-text.php:29
3115
  msgid "Reveal on focus"
3116
  msgstr ""
3117
 
3140
  msgid "Suffix"
3141
  msgstr ""
3142
 
3143
+ #: core/templates/parts/customize-multi-line-text.php:34
3144
+ msgid "Rows"
3145
+ msgstr ""
3146
+
3147
+ #: core/templates/parts/customize-multi-line-text.php:53
3148
  msgid "Limit words/characters"
3149
  msgstr ""
3150
 
3151
+ #: core/templates/parts/customize-multi-line-text.php:59
3152
  msgid "Limit"
3153
  msgstr ""
3154
 
3155
+ #: core/templates/parts/customize-multi-line-text.php:63
3156
  msgid "Count"
3157
  msgstr ""
3158
 
3159
+ #: core/templates/parts/customize-multi-line-text.php:66
3160
  msgid "Min words"
3161
  msgstr ""
3162
 
3163
+ #: core/templates/parts/customize-multi-line-text.php:67
3164
  msgid "Max characters"
3165
  msgstr ""
3166
 
3167
+ #: core/templates/parts/customize-multi-line-text.php:72
3168
  msgid "'Characters' label"
3169
  msgstr ""
3170
 
3171
+ #: core/templates/parts/customize-multi-line-text.php:76
3172
  msgid "'Words' label"
3173
  msgstr ""
3174
 
3209
  msgid "Click to edit this part."
3210
  msgstr ""
3211
 
3212
+ #: inc/classes/class-happyforms.php:82
3213
+ msgid "Randomize parts"
3214
  msgstr ""
3215
 
3216
+ #: inc/classes/class-happyforms.php:83
3217
+ msgid "Randomize the order of all form parts to avoid biases in your responses."
3218
  msgstr ""
3219
 
3220
+ #: inc/classes/class-happyforms.php:89
3221
  msgid "Use reCAPTCHA"
3222
  msgstr ""
3223
 
3224
+ #: inc/classes/class-happyforms.php:90
3225
  msgid "Protect your form against bots using your Google ReCaptcha credentials."
3226
  msgstr ""
3227
 
3228
+ #: inc/classes/class-happyforms.php:96
3229
  msgid "Require password"
3230
  msgstr ""
3231
 
3232
+ #: inc/classes/class-happyforms.php:97
3233
  msgid "Only users with password will be able to view and submit the form."
3234
  msgstr ""
3235
 
3236
+ #: inc/classes/class-happyforms.php:103
3237
  msgid "Open in overlay window"
3238
  msgstr ""
3239
 
3240
+ #: inc/classes/class-happyforms.php:104
3241
  msgid "Generate a link that can be clicked to open an overlay window for this form."
3242
  msgstr ""
3243
 
3244
+ #: inc/classes/class-happyforms.php:110
3245
  msgid "Save user's meta data"
3246
  msgstr ""
3247
 
3248
+ #: inc/classes/class-happyforms.php:111
3249
  msgid ""
3250
  "User meta data like IP address, browser language, local time, and platform "
3251
  "will be saved with each submission when checked."
3252
  msgstr ""
3253
 
3254
+ #: inc/classes/class-happyforms.php:117
3255
  msgid "Save abandoned forms"
3256
  msgstr ""
3257
 
3258
+ #: inc/classes/class-happyforms.php:118
3259
  msgid "Keep incomplete users responses stored in your WordPress database."
3260
  msgstr ""
3261
 
3262
+ #: inc/classes/class-happyforms.php:124
3263
  msgid "Allow save and resume"
3264
  msgstr ""
3265
 
3266
+ #: inc/classes/class-happyforms.php:125
3267
  msgid ""
3268
  "Let users temporarily save their incomplete response and continue filling "
3269
  "out the form at a later time."
3270
  msgstr ""
3271
 
3272
+ #: inc/classes/class-happyforms.php:131
3273
  msgid "Add submission identifier"
3274
  msgstr ""
3275
 
3276
+ #: inc/classes/class-happyforms.php:132
3277
  msgid "Tag responses with a unique, incremental identifier."
3278
  msgstr ""
3279
 
3280
+ #: inc/classes/class-happyforms.php:138
3281
  msgid "Preview before submit"
3282
  msgstr ""
3283
 
3284
+ #: inc/classes/class-happyforms.php:139
3285
  msgid "Let your users review their submission before confirming it."
3286
  msgstr ""
3287
 
3288
+ #: inc/classes/class-happyforms.php:145
3289
  msgid "Disable submit until valid"
3290
  msgstr ""
3291
 
3292
+ #: inc/classes/class-happyforms.php:146
3293
  msgid ""
3294
  "Reduce the opacity of the submit button until all required form parts are "
3295
  "valid."
3296
  msgstr ""
3297
 
3298
+ #: inc/classes/class-happyforms.php:152
3299
  msgid "Limit submissions"
3300
  msgstr ""
3301
 
3302
+ #: inc/classes/class-happyforms.php:153
3303
  msgid "Set limit on number of allowed form submission in general or per user."
3304
  msgstr ""
3305
 
3306
+ #: inc/classes/class-happyforms.php:159
3307
  msgid "Schedule visibility"
3308
  msgstr ""
3309
 
3310
+ #: inc/classes/class-happyforms.php:160
3311
  msgid ""
3312
  "Show or hide this form during a chosen time and day. Go to Settings > "
3313
  "Timezone to set your city offset."
3314
  msgstr ""
3315
 
3316
+ #: inc/classes/class-happyforms.php:170
3317
  msgid "Include reply link"
3318
  msgstr ""
3319
 
3320
+ #: inc/classes/class-happyforms.php:171
3321
  msgid "Reply to your users and mark their submission as read in one click."
3322
  msgstr ""
3323
 
3324
+ #: inc/classes/class-happyforms.php:177
3325
  msgid "Include referral link"
3326
  msgstr ""
3327
 
3328
+ #: inc/classes/class-happyforms.php:178
3329
  msgid "Include the page link your form was submitted from."
3330
  msgstr ""
3331
 
3332
+ #: inc/classes/class-happyforms.php:184 inc/classes/class-happyforms.php:191
3333
  msgid "Attach .pdf"
3334
  msgstr ""
3335
 
3336
+ #: inc/classes/class-happyforms.php:185
3337
  msgid "Attach a PDF to your submission alert."
3338
  msgstr ""
3339
 
3340
+ #: inc/classes/class-happyforms.php:192
3341
  msgid "Attach a PDF to the recipient's confirmation email."
3342
  msgstr ""
3343
 
3344
+ #: inc/classes/class-happyforms.php:198
3345
  msgid "Send abandonment email"
3346
  msgstr ""
3347
 
3348
+ #: inc/classes/class-happyforms.php:199
3349
  msgid "Notify users when they abandon your form before submitting it."
3350
  msgstr ""
3351
 
3352
+ #: inc/classes/class-happyforms.php:209
3353
  msgid "Use theme styles"
3354
  msgstr ""
3355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3356
  #: inc/classes/class-message-controller.php:616
3357
  #: inc/templates/email-owner.php:31
3358
  msgid "Tracking number"
3367
  msgstr ""
3368
 
3369
  #: inc/classes/parts/class-part-attachment-dummy.php:8
3370
+ msgid "File Upload"
3371
  msgstr ""
3372
 
3373
  #: inc/classes/parts/class-part-attachment-dummy.php:9
3375
  msgstr ""
3376
 
3377
  #: inc/classes/parts/class-part-date-dummy.php:8
3378
+ msgid "Date-Time"
3379
  msgstr ""
3380
 
3381
  #: inc/classes/parts/class-part-date-dummy.php:9
3383
  msgstr ""
3384
 
3385
  #: inc/classes/parts/class-part-legal-dummy.php:8
3386
+ msgid "Consent Choice"
3387
  msgstr ""
3388
 
3389
  #: inc/classes/parts/class-part-legal-dummy.php:9
3391
  msgstr ""
3392
 
3393
  #: inc/classes/parts/class-part-mailchimp-dummy.php:8
3394
+ msgid "Opt-In Choice"
3395
  msgstr ""
3396
 
3397
  #: inc/classes/parts/class-part-mailchimp-dummy.php:9
3423
  msgstr ""
3424
 
3425
  #: inc/classes/parts/class-part-phone-dummy.php:8
3426
+ msgid "Phone Number"
3427
  msgstr ""
3428
 
3429
  #: inc/classes/parts/class-part-phone-dummy.php:9
3442
  msgid "For collecting opinions and showing published results in a bar chart."
3443
  msgstr ""
3444
 
3445
+ #: inc/classes/parts/class-part-rating-dummy.php:8
3446
+ msgid "Star Rating"
3447
+ msgstr ""
3448
+
3449
  #: inc/classes/parts/class-part-rating-dummy.php:9
3450
  msgid "For collecting opinions using stars and emoji scales."
3451
  msgstr ""
3459
  msgstr ""
3460
 
3461
  #: inc/classes/parts/class-part-scale-dummy.php:8
3462
+ msgid "Slider Scale"
3463
  msgstr ""
3464
 
3465
  #: inc/classes/parts/class-part-scale-dummy.php:9
3475
  msgstr ""
3476
 
3477
  #: inc/classes/parts/class-part-table-dummy.php:8
3478
+ msgid "Matrix Table"
3479
  msgstr ""
3480
 
3481
  #: inc/classes/parts/class-part-table-dummy.php:9
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.4
7
  Requires PHP: 5.3
8
- Stable tag: 1.9.12
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -34,7 +34,7 @@ https://www.youtube.com/watch?v=X1snk2vJbXI
34
  * Easily add forms anywhere to your pages, posts and widget areas.
35
  * Add multiple forms to the same page.
36
  * Completely mobile responsive forms.
37
- * Unlimited forms, parts, emails and messages.
38
  * Create multi-column layouts with a single click.
39
  * Easily duplicate forms.
40
  * Confirmation message on submission.
@@ -43,11 +43,11 @@ https://www.youtube.com/watch?v=X1snk2vJbXI
43
  * Over 50 styles controls built-in.
44
  * GDPR and 508 compliant forms and secure forms.
45
 
46
- = Included HappyForms Form Parts: =
47
 
48
- * Short Text — For fields like ‘First Name’ and ‘Last Name’.
49
- * Long Text — For longer messages and feedback.
50
- * Email — Validate users email addresses before submission.
51
  * Multiple Choice — Checkboxes for multiple selections.
52
  * Single Choice — Radio buttons for single selection.
53
  * Dropdown — For long lists and single selection.
@@ -55,7 +55,7 @@ https://www.youtube.com/watch?v=X1snk2vJbXI
55
 
56
  = Upgraded HappyForms Features: =
57
 
58
- * Access to all 20+ form parts.
59
  * Manage unlimited responses easily in the dashboard.
60
  * Let folks upload files to your forms.
61
  * Redirect to any webpage after the form is submitted.
@@ -72,7 +72,7 @@ https://www.youtube.com/watch?v=X1snk2vJbXI
72
  * Built-in dashboard analytics with no setup.
73
  * Log IP address automatically.
74
  * Poll part with real-time results.
75
- * Shuffle form parts and values to avoid biases.
76
  * Advanced filtering of responses.
77
  * Fade submit button until valid.
78
  * Get access to our growing Slack community.
@@ -97,6 +97,13 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more yo
97
 
98
  == Changelog ==
99
 
 
 
 
 
 
 
 
100
  = 1.9.12 =
101
  * Improvement: Updated part icons.
102
  * Improvement: Various style improvements to form builder and front-end.
@@ -617,6 +624,9 @@ Yep! HappyForms free isn't going anywhere but for those looking for even more yo
617
 
618
  == Upgrade Notice ==
619
 
 
 
 
620
  = 1.9.12 =
621
  * New part icons, various improvements to form styles.
622
 
5
  Requires at least: 4.8
6
  Tested up to: 5.4
7
  Requires PHP: 5.3
8
+ Stable tag: 1.9.13
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
34
  * Easily add forms anywhere to your pages, posts and widget areas.
35
  * Add multiple forms to the same page.
36
  * Completely mobile responsive forms.
37
+ * Unlimited forms, fields, emails and messages.
38
  * Create multi-column layouts with a single click.
39
  * Easily duplicate forms.
40
  * Confirmation message on submission.
43
  * Over 50 styles controls built-in.
44
  * GDPR and 508 compliant forms and secure forms.
45
 
46
+ = Included HappyForms Form Fields: =
47
 
48
+ * Short Answer — For fields like ‘First Name’ and ‘Last Name’.
49
+ * Long Answer — For longer messages and feedback.
50
+ * Email Address — Validate users email addresses before submission.
51
  * Multiple Choice — Checkboxes for multiple selections.
52
  * Single Choice — Radio buttons for single selection.
53
  * Dropdown — For long lists and single selection.
55
 
56
  = Upgraded HappyForms Features: =
57
 
58
+ * Access to all 20+ form fields.
59
  * Manage unlimited responses easily in the dashboard.
60
  * Let folks upload files to your forms.
61
  * Redirect to any webpage after the form is submitted.
72
  * Built-in dashboard analytics with no setup.
73
  * Log IP address automatically.
74
  * Poll part with real-time results.
75
+ * Randomize form fields and values to avoid biases.
76
  * Advanced filtering of responses.
77
  * Fade submit button until valid.
78
  * Get access to our growing Slack community.
97
 
98
  == Changelog ==
99
 
100
+ = 1.9.13 =
101
+ * New feature: Rows control added to Long Answer field.
102
+ * Improvement: New icons for form fields in form builder.
103
+ * Improvement: Various improvements to form builder and front-end styles.
104
+ * Bugfix: Sorting fields in form builder made the container always scroll to top instead of preserving its scrolling position.
105
+ * Bugfix: When suffix was set on a field with tooltip, the tooltip icon and suffix were overlapping.
106
+
107
  = 1.9.12 =
108
  * Improvement: Updated part icons.
109
  * Improvement: Various style improvements to form builder and front-end.
624
 
625
  == Upgrade Notice ==
626
 
627
+ = 1.9.13 =
628
+ * Rows control for Long Answer field, new field icons, and improvements.
629
+
630
  = 1.9.12 =
631
  * New part icons, various improvements to form styles.
632