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

Version Description

  • Added: Additional logging and error reporting
  • Changed: Footer asset detection priority, for improved capatibility with other services
  • Changed: Refactored and refined front-end javascript
  • Fixed: Rogue PHP notices
Download this release

Release Info

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

Code changes from version 1.2.3.2 to 1.2.4

assets/css/admin-builder.css CHANGED
@@ -44,6 +44,11 @@ body {
44
  display: table;
45
  }
46
 
 
 
 
 
 
47
  #wpforms-builder .wpforms-alert {
48
  padding: 10px;
49
  margin-bottom: 15px;
@@ -481,7 +486,7 @@ body {
481
  font-size: 14px;
482
  }
483
 
484
- #wpforms-builder .wpforms-panel-field p.note{
485
  margin: 8px 0 0;
486
  font-size: 12px;
487
  color: #666;
44
  display: table;
45
  }
46
 
47
+ #wpforms-builder .note {
48
+ font-size: 12px;
49
+ color: #666;
50
+ }
51
+
52
  #wpforms-builder .wpforms-alert {
53
  padding: 10px;
54
  margin-bottom: 15px;
486
  font-size: 14px;
487
  }
488
 
489
+ #wpforms-builder .wpforms-panel-field p.note {
490
  margin: 8px 0 0;
491
  font-size: 12px;
492
  color: #666;
assets/css/admin-settings.css CHANGED
@@ -13,10 +13,151 @@
13
  display: table;
14
  }
15
 
16
- #wpforms-settings .wpforms-tab {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  display: none;
18
  }
19
 
 
 
 
 
20
  #wpforms-settings .wpforms-tab .below-h2 {
21
  margin-top: 22px;
22
  }
@@ -39,14 +180,15 @@
39
  font-size: 20px;
40
  }
41
 
42
- #wpforms-settings td.section {
43
-
44
  }
45
 
46
  #wpforms-settings td label {
47
  margin: .25em 0 .5em!important;
48
  display: inline-block;
49
  font-style: italic;
 
50
  }
51
 
52
  #wpforms-settings h4 {
@@ -207,4 +349,42 @@
207
  overflow: auto;
208
  display: block;
209
  padding: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  }
13
  display: table;
14
  }
15
 
16
+ #wpforms-settings .wpforms-circle-loader {
17
+ margin: 50px auto;
18
+ width: 60px;
19
+ height: 60px;
20
+ position: relative;
21
+ }
22
+
23
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle {
24
+ width: 100%;
25
+ height: 100%;
26
+ position: absolute;
27
+ left: 0;
28
+ top: 0;
29
+ }
30
+
31
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle:before {
32
+ content: '';
33
+ display: block;
34
+ margin: 0 auto;
35
+ width: 15%;
36
+ height: 15%;
37
+ background-color: #0e6cad;
38
+ border-radius: 100%;
39
+ -webkit-animation: wpforms-circleFadeDelay 1.2s infinite ease-in-out both;
40
+ animation: wpforms-circleFadeDelay 1.2s infinite ease-in-out both;
41
+ }
42
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-2 {
43
+ -webkit-transform: rotate(30deg);
44
+ -ms-transform: rotate(30deg);
45
+ transform: rotate(30deg);
46
+ }
47
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-3 {
48
+ -webkit-transform: rotate(60deg);
49
+ -ms-transform: rotate(60deg);
50
+ transform: rotate(60deg);
51
+ }
52
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-4 {
53
+ -webkit-transform: rotate(90deg);
54
+ -ms-transform: rotate(90deg);
55
+ transform: rotate(90deg);
56
+ }
57
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-5 {
58
+ -webkit-transform: rotate(120deg);
59
+ -ms-transform: rotate(120deg);
60
+ transform: rotate(120deg);
61
+ }
62
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-6 {
63
+ -webkit-transform: rotate(150deg);
64
+ -ms-transform: rotate(150deg);
65
+ transform: rotate(150deg);
66
+ }
67
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-7 {
68
+ -webkit-transform: rotate(180deg);
69
+ -ms-transform: rotate(180deg);
70
+ transform: rotate(180deg);
71
+ }
72
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-8 {
73
+ -webkit-transform: rotate(210deg);
74
+ -ms-transform: rotate(210deg);
75
+ transform: rotate(210deg);
76
+ }
77
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-9 {
78
+ -webkit-transform: rotate(240deg);
79
+ -ms-transform: rotate(240deg);
80
+ transform: rotate(240deg);
81
+ }
82
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-10 {
83
+ -webkit-transform: rotate(270deg);
84
+ -ms-transform: rotate(270deg);
85
+ transform: rotate(270deg);
86
+ }
87
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-11 {
88
+ -webkit-transform: rotate(300deg);
89
+ -ms-transform: rotate(300deg);
90
+ transform: rotate(300deg);
91
+ }
92
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-12 {
93
+ -webkit-transform: rotate(330deg);
94
+ -ms-transform: rotate(330deg);
95
+ transform: rotate(330deg);
96
+ }
97
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-2:before {
98
+ -webkit-animation-delay: -1.1s;
99
+ animation-delay: -1.1s;
100
+ }
101
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-3:before {
102
+ -webkit-animation-delay: -1s;
103
+ animation-delay: -1s;
104
+ }
105
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-4:before {
106
+ -webkit-animation-delay: -0.9s;
107
+ animation-delay: -0.9s;
108
+ }
109
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-5:before {
110
+ -webkit-animation-delay: -0.8s;
111
+ animation-delay: -0.8s;
112
+ }
113
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-6:before {
114
+ -webkit-animation-delay: -0.7s;
115
+ animation-delay: -0.7s;
116
+ }
117
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-7:before {
118
+ -webkit-animation-delay: -0.6s;
119
+ animation-delay: -0.6s;
120
+ }
121
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-8:before {
122
+ -webkit-animation-delay: -0.5s;
123
+ animation-delay: -0.5s;
124
+ }
125
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-9:before {
126
+ -webkit-animation-delay: -0.4s;
127
+ animation-delay: -0.4s;
128
+ }
129
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-10:before {
130
+ -webkit-animation-delay: -0.3s;
131
+ animation-delay: -0.3s;
132
+ }
133
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-11:before {
134
+ -webkit-animation-delay: -0.2s;
135
+ animation-delay: -0.2s;
136
+ }
137
+ #wpforms-settings .wpforms-circle-loader .wpforms-circle-12:before {
138
+ -webkit-animation-delay: -0.1s;
139
+ animation-delay: -0.1s;
140
+ }
141
+
142
+ @-webkit-keyframes wpforms-circleFadeDelay {
143
+ 0%, 39%, 100% { opacity: 0; }
144
+ 40% { opacity: 1; }
145
+ }
146
+
147
+ @keyframes wpforms-circleFadeDelay {
148
+ 0%, 39%, 100% { opacity: 0; }
149
+ 40% { opacity: 1; }
150
+ }
151
+
152
+ #wpforms-settings .wpforms-tab,
153
+ #wpforms-tabs {
154
  display: none;
155
  }
156
 
157
+ #wpforms-settings .nav-tab:focus {
158
+ box-shadow: none;
159
+ }
160
+
161
  #wpforms-settings .wpforms-tab .below-h2 {
162
  margin-top: 22px;
163
  }
180
  font-size: 20px;
181
  }
182
 
183
+ #wpforms-settings td.section p {
184
+ max-width: 800px;
185
  }
186
 
187
  #wpforms-settings td label {
188
  margin: .25em 0 .5em!important;
189
  display: inline-block;
190
  font-style: italic;
191
+ color: #666;
192
  }
193
 
194
  #wpforms-settings h4 {
349
  overflow: auto;
350
  display: block;
351
  padding: 20px;
352
+ }
353
+
354
+ /* Import/Export tab
355
+ -------------------------------------------------------------- */
356
+
357
+ #wpforms-import-export p {
358
+ margin-bottom: 10px;
359
+ }
360
+
361
+ #wpforms-import-export input[type=submit] {
362
+ margin-top: 10px;
363
+ }
364
+
365
+ #wpforms-import-export .export-list {
366
+ background-color: #fff;
367
+ max-height: 210px;
368
+ overflow-y: scroll;
369
+ border: 1px solid #ddd;
370
+ margin: 0 0 5px 0;
371
+ max-width: 510px;
372
+ }
373
+
374
+ #wpforms-import-export .export-list li {
375
+ display: block;
376
+ list-style: none;
377
+ margin: 0;
378
+ }
379
+
380
+ #wpforms-import-export .export-list li label {
381
+ display: block;
382
+ padding: 8px 10px;
383
+ border-bottom: 1px solid #eee;
384
+ font-style: normal;
385
+ margin: 0 !important;
386
+ }
387
+
388
+ #wpforms-import-export .export-list li:last-of-type label {
389
+ border-bottom: none;
390
  }
assets/js/admin-builder.js CHANGED
@@ -21,14 +21,10 @@
21
  s = this.settings;
22
 
23
  // Document ready
24
- $(document).ready(function() {
25
- WPFormsBuilder.ready();
26
- });
27
 
28
  // Page load
29
- $(window).on('load', function() {
30
- WPFormsBuilder.load();
31
- });
32
 
33
  WPFormsBuilder.bindUIActions();
34
  },
@@ -127,6 +123,9 @@
127
  // Notification settings
128
  WPFormsBuilder.notificationToggle();
129
 
 
 
 
130
  // Clone form title to setup page
131
  $('#wpforms-setup-name').val($('#wpforms-panel-field-settings-form_title').val());
132
 
@@ -1760,7 +1759,7 @@
1760
  },
1761
 
1762
  /**
1763
- * Update Stripe Receipt email field on form updates.
1764
  *
1765
  * @since 1.2.0
1766
  * @param object event
@@ -1803,7 +1802,7 @@
1803
  if (fields[key].label.length) {
1804
  var label = wpf.sanitizeString(fields[key].label);
1805
  } else {
1806
- var label = 'Field #' + fields[key].val;
1807
  }
1808
 
1809
  // Add to select if it is a field type allowed
@@ -1859,6 +1858,30 @@
1859
  */
1860
  loadColorPickers: function() {
1861
  $('.wpforms-color-picker').minicolors();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1862
  }
1863
  };
1864
 
21
  s = this.settings;
22
 
23
  // Document ready
24
+ $(document).ready(WPFormsBuilder.ready);
 
 
25
 
26
  // Page load
27
+ $(window).on('load', WPFormsBuilder.load);
 
 
28
 
29
  WPFormsBuilder.bindUIActions();
30
  },
123
  // Notification settings
124
  WPFormsBuilder.notificationToggle();
125
 
126
+ // Secret preview hotkey
127
+ WPFormsBuilder.previewHotkey();
128
+
129
  // Clone form title to setup page
130
  $('#wpforms-setup-name').val($('#wpforms-panel-field-settings-form_title').val());
131
 
1759
  },
1760
 
1761
  /**
1762
+ * Update field mapped select items on form updates.
1763
  *
1764
  * @since 1.2.0
1765
  * @param object event
1802
  if (fields[key].label.length) {
1803
  var label = wpf.sanitizeString(fields[key].label);
1804
  } else {
1805
+ var label = wpforms_builder.field + ' #' + fields[key].val;
1806
  }
1807
 
1808
  // Add to select if it is a field type allowed
1858
  */
1859
  loadColorPickers: function() {
1860
  $('.wpforms-color-picker').minicolors();
1861
+ },
1862
+
1863
+ /**
1864
+ * Secret preview hotkey.
1865
+ *
1866
+ * @since 1.2.4
1867
+ */
1868
+ previewHotkey: function() {
1869
+
1870
+ var ctrlDown = false;
1871
+
1872
+ $(document).keydown(function(e) {
1873
+ if (e.keyCode == 17) {
1874
+ ctrlDown = true;
1875
+ } else if (ctrlDown && e.keyCode == 80) {
1876
+ window.open(wpforms_builder.preview_url);
1877
+ ctrlDown = false;
1878
+ return false;
1879
+ }
1880
+ }).keyup(function(e) {
1881
+ if (e.keyCode == 17) {
1882
+ ctrlDown = false;
1883
+ }
1884
+ });
1885
  }
1886
  };
1887
 
assets/js/admin-settings.js CHANGED
@@ -44,6 +44,10 @@
44
  s.tabs_nav.find('a[href="' + s.tabs_hash_sani + '"]').addClass('wpforms-active nav-tab-active');
45
  s.tabs.find(s.tabs_hash_sani).addClass('wpforms-active').show();
46
  }
 
 
 
 
47
  },
48
 
49
  /**
44
  s.tabs_nav.find('a[href="' + s.tabs_hash_sani + '"]').addClass('wpforms-active nav-tab-active');
45
  s.tabs.find(s.tabs_hash_sani).addClass('wpforms-active').show();
46
  }
47
+ $('.wpforms-circle-loader').fadeOut('fast', function() {
48
+ $('#wpforms-tabs').fadeIn('fast');
49
+ $('.wpforms-circle-loader').remove();
50
+ });
51
  },
52
 
53
  /**
assets/js/admin-utils.js CHANGED
@@ -12,7 +12,7 @@ var wpf = {
12
 
13
  wpf.bindUIActions();
14
 
15
- jQuery(document).ready(wpf.ready());
16
  },
17
 
18
  /**
12
 
13
  wpf.bindUIActions();
14
 
15
+ jQuery(document).ready(wpf.ready);
16
  },
17
 
18
  /**
assets/js/wpforms.js CHANGED
@@ -1,160 +1,265 @@
1
- ;(function($){
2
- $(function(){
 
3
 
4
  /**
5
- * Validation
 
 
6
  */
7
- if(typeof $.fn.validate !== 'undefined') {
8
 
9
- // Validate method for Credit Card Number
10
- if(typeof $.fn.payment !== 'undefined') {
11
- $.validator.addMethod( "creditcard", function( value, element ) {
12
- //var type = $.payment.cardType(value);
13
- var valid = $.payment.validateCardNumber(value);
14
- return this.optional( element ) || valid;
15
- }, "Please enter a valid credit card number." );
16
- // @todo validate CVC and expiration
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
- // Validate method for currency
20
- // @link https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/currency.js
21
- $.validator.addMethod( "currency", function( value, element, param ) {
22
- var isParamString = typeof param === "string",
23
- symbol = isParamString ? param : param[ 0 ],
24
- soft = isParamString ? true : param[ 1 ],
25
- regex;
26
-
27
- symbol = symbol.replace( /,/g, "" );
28
- symbol = soft ? symbol + "]" : symbol + "]?";
29
- regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$";
30
- regex = new RegExp( regex );
31
- return this.optional( element ) || regex.test( value );
32
- }, "Please use a valid currency format" );
33
-
34
- // Validate method for file extensions
35
- $.validator.addMethod( "extension", function( value, element, param ) {
36
- param = typeof param === "string" ? param.replace( /,/g, "|" ) : "png|jpe?g|gif";
37
- return this.optional( element ) || value.match( new RegExp( "\\.(" + param + ")$", "i" ) );
38
- }, $.validator.format( "File type is not allowed" ) );
39
-
40
- // Validate method for file size
41
- // @link https://github.com/jzaefferer/jquery-validation/pull/1512
42
- $.validator.addMethod("maxsize", function(value, element, param) {
43
- var maxSize = param,
44
- optionalValue = this.optional(element),
45
- i, len, file;
46
- if (optionalValue) {
47
- return optionalValue;
48
  }
49
- if (element.files && element.files.length) {
50
- i = 0;
51
- len = element.files.length;
52
- for (; i < len; i++) {
53
- file = element.files[i];
54
- if (file.size > maxSize) {
55
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
57
  }
58
- }
59
- return true;
60
- }, $.validator.format("File exceeds max size allowed"));
61
 
62
- $('.wpforms-validate').each(function() {
63
- var form = $(this);
64
- var form_id = form.data('formid');
 
65
 
66
- if (typeof window['wpforms_'+form_id] != "undefined" && window['wpforms_'+id].hasOwnProperty('validate') ) {
67
- properties = window['wpforms_'+id].validate;
68
- } else if ( typeof wpforms_validate != "undefined") {
69
- properties = wpforms_validate;
70
- } else {
71
- properties = {
72
- errorClass: 'wpforms-error',
73
- validClass: 'wpforms-valid',
74
- errorPlacement: function(error, element) {
75
- if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox' ) {
76
- element.parent().parent().parent().append(error);
77
- } else {
78
- error.insertAfter(element);
 
79
  }
80
  }
81
  }
82
- }
83
- form.validate( properties );
84
- });
85
- }
86
 
87
  /**
88
- * Date picker
 
 
89
  */
90
- if(typeof $.fn.pickadate !== 'undefined') {
91
- $('.wpforms-datepicker').each(function() {
92
- var element = $(this);
93
- var form = element.closest('.wpforms-form');
94
- var form_id = form.data('formid');
95
-
96
- if (typeof window['wpforms_'+form_id] != "undefined" && window['wpforms_'+id].hasOwnProperty('pickadate') ) {
97
- properties = window['wpforms_'+id].pickadate;
98
- } else if ( typeof wpforms_pickadate != "undefined") {
99
- properties = wpforms_pickadate;
100
- } else {
101
- properties = {
102
- today: false,
103
- clear: false,
104
- close: false,
105
- format: element.data('format')
 
 
 
 
106
  }
107
- }
108
- element.pickadate(properties)
109
- });
110
- };
111
 
112
  /**
113
- * Time picker
 
 
114
  */
115
- if(typeof $.fn.pickatime !== 'undefined') {
116
- $('.wpforms-timepicker').each(function() {
117
- var element = $(this);
118
- var form = $(this).closest('.wpforms-form');
119
- var form_id = form.data('formid');
120
-
121
- if (typeof window['wpforms_'+form_id] != "undefined" && window['wpforms_'+id].hasOwnProperty('pickatime') ) {
122
- properties = window['wpforms_'+id].pickadate;
123
- } else if ( typeof wpforms_pickatime != "undefined") {
124
- properties = wpforms_pickatime;
125
- } else {
126
- properties = {
127
- clear: false,
128
- format: $(this).data('format'),
129
- interval: $(this).data('interval')
 
 
 
 
130
  }
131
- }
132
- element.pickatime(properties);
133
- });
134
- }
135
 
136
  /**
137
- * Masked Input
 
 
138
  */
139
- if(typeof $.fn.inputmask !== 'undefined') {
140
- $('.wpforms-masked-input').inputmask();
141
- };
 
 
 
 
142
 
143
  /**
144
- * Credit Card
 
 
145
  */
146
- if(typeof $.fn.payment !== 'undefined') {
147
- $('.wpforms-field-credit-card-cardnumber').payment('formatCardNumber');
148
- $('.wpforms-field-credit-card-cardcvc').payment('formatCardCVC');
149
- };
 
 
 
 
 
 
 
 
150
 
151
  /**
152
- * Page Break
 
 
153
  */
154
- $(document).on('click', '.wpforms-page-button', function(event) {
155
- event.preventDefault();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
 
157
- var $this = $(this),
 
 
 
158
  valid = true,
159
  action = $this.data('action'),
160
  page = $this.data('page'),
@@ -242,52 +347,62 @@
242
  }
243
  }
244
  }
245
- });
 
 
 
 
246
 
247
  /**
248
- * Payment Total calculation
 
 
249
  */
250
- // Calculate total
251
- function calculate_total($form) {
252
- var total = 0.00;
 
253
  $('.wpforms-payment-price').each(function(index, el) {
254
  var amount = 0,
255
  $this = $(this);
256
- if ( $this.attr('type') == 'text' ) {
257
  amount = $this.val();
258
- } else if ( $this.attr('type') == 'radio' && $this.is(':checked') ) {
259
  amount = $this.data('amount');
260
  }
261
- if ( amount != 0 ) {
262
  amount = amount.replace(/[^0-9.]/gi,'');
263
  amount = parseFloat(amount).toFixed(2).replace(/(\d)(?=(\d{6})+\.)/g, "$1,");
264
- total = parseFloat(total)+parseFloat(amount);
265
  }
266
  });
267
  return parseFloat(total).toFixed(2);
268
- }
269
- // Update Total field(s) with latest calculation
270
- function calculate_total_update(el) {
 
 
 
 
 
 
271
  var $form = $(el).closest('.wpforms-form'),
272
- total = calculate_total($form);
273
  if (isNaN(total)) {
274
  total = '0.00';
275
  }
276
  $form.find('.wpforms-payment-total').each(function(index, el) {
277
- if ( $(this).attr('type') == 'hidden' ) {
278
  $(this).val('$'+total);
279
  } else {
280
  $(this).text('$'+total);
281
  }
282
  });
283
  }
284
- // Update Total fields when price changes
285
- $(document).on('change input', '.wpforms-payment-price', function(event) {
286
- calculate_total_update( this );
287
- });
288
- // Set Total field on load
289
- $('.wpforms-payment-total').each(function(index, el) {
290
- calculate_total_update( this );
291
- })
292
- });
293
- }(jQuery));
1
+ ;(function($) {
2
+
3
+ var WPForms = {
4
 
5
  /**
6
+ * Start the engine.
7
+ *
8
+ * @since 1.2.3
9
  */
10
+ init: function() {
11
 
12
+ // Document ready
13
+ $(document).ready(WPForms.ready);
14
+
15
+ // Page load
16
+ $(window).on('load', WPForms.load);
17
+
18
+ WPForms.bindUIActions();
19
+ },
20
+
21
+ /**
22
+ * Document ready.
23
+ *
24
+ * @since 1.2.3
25
+ */
26
+ ready: function() {
27
+
28
+ // Payments: Update Total field(s) with latest calculation
29
+ $('.wpforms-payment-total').each(function(index, el) {
30
+ WPForms.calculateTotalUpdate(this);
31
+ })
32
+
33
+ WPForms.loadValidation();
34
+ WPForms.loadDatePicker();
35
+ WPForms.loadTimePicker();
36
+ WPForms.loadInputMask();
37
+ WPForms.loadCreditCardValidation();
38
+ },
39
+
40
+ /**
41
+ * Page load.
42
+ *
43
+ * @since 1.2.3
44
+ */
45
+ load: function() {
46
+
47
+ },
48
+
49
+ //--------------------------------------------------------------------//
50
+ // Initializing
51
+ //--------------------------------------------------------------------//
52
+
53
+ /**
54
+ * Load jQuery Validation.
55
+ *
56
+ * @since 1.2.3
57
+ */
58
+ loadValidation: function() {
59
 
60
+ // Only load if jQuery validation library exists
61
+ if (typeof $.fn.validate !== 'undefined') {
62
+
63
+ // Payments: Validate method for Credit Card Number
64
+ if(typeof $.fn.payment !== 'undefined') {
65
+ $.validator.addMethod( "creditcard", function(value, element) {
66
+ //var type = $.payment.cardType(value);
67
+ var valid = $.payment.validateCardNumber(value);
68
+ return this.optional(element) || valid;
69
+ }, "Please enter a valid credit card number.");
70
+ // @todo validate CVC and expiration
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
+
73
+ // Payments: Validate method for currency
74
+ // @link https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/currency.js
75
+ $.validator.addMethod( "currency", function(value, element, param) {
76
+ var isParamString = typeof param === "string",
77
+ symbol = isParamString ? param : param[0],
78
+ soft = isParamString ? true : param[1],
79
+ regex;
80
+ symbol = symbol.replace( /,/g, "" );
81
+ symbol = soft ? symbol + "]" : symbol + "]?";
82
+ regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$";
83
+ regex = new RegExp(regex);
84
+ return this.optional(element) || regex.test(value);
85
+ }, "Please use a valid currency format");
86
+
87
+ // Validate method for file extensions
88
+ $.validator.addMethod( "extension", function(value, element, param) {
89
+ param = typeof param === "string" ? param.replace( /,/g, "|" ) : "png|jpe?g|gif";
90
+ return this.optional(element) || value.match( new RegExp( "\\.(" + param + ")$", "i" ) );
91
+ }, $.validator.format("File type is not allowed") );
92
+
93
+ // Validate method for file size
94
+ // @link https://github.com/jzaefferer/jquery-validation/pull/1512
95
+ $.validator.addMethod("maxsize", function(value, element, param) {
96
+ var maxSize = param,
97
+ optionalValue = this.optional(element),
98
+ i, len, file;
99
+ if (optionalValue) {
100
+ return optionalValue;
101
+ }
102
+ if (element.files && element.files.length) {
103
+ i = 0;
104
+ len = element.files.length;
105
+ for (; i < len; i++) {
106
+ file = element.files[i];
107
+ if (file.size > maxSize) {
108
+ return false;
109
+ }
110
  }
111
  }
112
+ return true;
113
+ }, $.validator.format("File exceeds max size allowed"));
 
114
 
115
+ // Finally load jQuery Validation library for our forms
116
+ $('.wpforms-validate').each(function() {
117
+ var form = $(this),
118
+ formID = form.data('formid');
119
 
120
+ if (typeof window['wpforms_'+formID] != "undefined" && window['wpforms_'+id].hasOwnProperty('validate')) {
121
+ properties = window['wpforms_'+id].validate;
122
+ } else if ( typeof wpforms_validate != "undefined") {
123
+ properties = wpforms_validate;
124
+ } else {
125
+ properties = {
126
+ errorClass: 'wpforms-error',
127
+ validClass: 'wpforms-valid',
128
+ errorPlacement: function(error, element) {
129
+ if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox' ) {
130
+ element.parent().parent().parent().append(error);
131
+ } else {
132
+ error.insertAfter(element);
133
+ }
134
  }
135
  }
136
  }
137
+ form.validate( properties );
138
+ });
139
+ }
140
+ },
141
 
142
  /**
143
+ * Load jQuery Date Picker.
144
+ *
145
+ * @since 1.2.3
146
  */
147
+ loadDatePicker: function() {
148
+
149
+ // Only load if jQuery datepicker library exists
150
+ if (typeof $.fn.pickadate !== 'undefined') {
151
+ $('.wpforms-datepicker').each(function() {
152
+ var element = $(this),
153
+ form = element.closest('.wpforms-form'),
154
+ formID = form.data('formid');
155
+
156
+ if (typeof window['wpforms_'+formID] != "undefined" && window['wpforms_'+id].hasOwnProperty('pickadate') ) {
157
+ properties = window['wpforms_'+id].pickadate;
158
+ } else if ( typeof wpforms_pickadate != "undefined") {
159
+ properties = wpforms_pickadate;
160
+ } else {
161
+ properties = {
162
+ today: false,
163
+ clear: false,
164
+ close: false,
165
+ format: element.data('format')
166
+ }
167
  }
168
+ element.pickadate(properties)
169
+ });
170
+ };
171
+ },
172
 
173
  /**
174
+ * Load jQuery Time Picker.
175
+ *
176
+ * @since 1.2.3
177
  */
178
+ loadTimePicker: function() {
179
+
180
+ // Only load if jQuery timepicker library exists
181
+ if (typeof $.fn.pickatime !== 'undefined') {
182
+ $('.wpforms-timepicker').each(function() {
183
+ var element = $(this),
184
+ form = element.closest('.wpforms-form'),
185
+ formID = form.data('formid');
186
+
187
+ if (typeof window['wpforms_'+formID] != "undefined" && window['wpforms_'+id].hasOwnProperty('pickatime') ) {
188
+ properties = window['wpforms_'+id].pickadate;
189
+ } else if ( typeof wpforms_pickatime != "undefined") {
190
+ properties = wpforms_pickatime;
191
+ } else {
192
+ properties = {
193
+ clear: false,
194
+ format: element.data('format'),
195
+ interval: element.data('interval')
196
+ }
197
  }
198
+ element.pickatime(properties);
199
+ });
200
+ }
201
+ },
202
 
203
  /**
204
+ * Load jQuery input masks.
205
+ *
206
+ * @since 1.2.3
207
  */
208
+ loadInputMask: function() {
209
+
210
+ // Only load if jQuery input mask library exists
211
+ if (typeof $.fn.inputmask !== 'undefined') {
212
+ $('.wpforms-masked-input').inputmask();
213
+ };
214
+ },
215
 
216
  /**
217
+ * Payments: Load credit card validation.
218
+ *
219
+ * @since 1.2.3
220
  */
221
+ loadCreditCardValidation: function() {
222
+
223
+ // Only load if jQuery payment library exists
224
+ if(typeof $.fn.payment !== 'undefined') {
225
+ $('.wpforms-field-credit-card-cardnumber').payment('formatCardNumber');
226
+ $('.wpforms-field-credit-card-cardcvc').payment('formatCardCVC');
227
+ };
228
+ },
229
+
230
+ //--------------------------------------------------------------------//
231
+ // Binds
232
+ //--------------------------------------------------------------------//
233
 
234
  /**
235
+ * Element bindings.
236
+ *
237
+ * @since 1.2.3
238
  */
239
+ bindUIActions: function() {
240
+
241
+ // Pagebreak navigation
242
+ $(document).on('click', '.wpforms-page-button', function(event) {
243
+ event.preventDefault();
244
+ WPForms.pagebreakNav($(this));
245
+ });
246
+
247
+ // Payments: Update Total field(s) when latest calculation.
248
+ $(document).on('change input', '.wpforms-payment-price', function(event) {
249
+ WPForms.calculateTotalUpdate(this);
250
+ });
251
+
252
+ // OptinMonster: initialize again after OM is finished.
253
+ // This is to accomodate moving the form in the DOM.
254
+ $(document).on('OptinMonsterAfterInject', function(event) {
255
+ WPForms.ready();
256
+ });
257
+ },
258
 
259
+
260
+ pagebreakNav: function(el) {
261
+
262
+ var $this = $(el),
263
  valid = true,
264
  action = $this.data('action'),
265
  page = $this.data('page'),
347
  }
348
  }
349
  }
350
+ },
351
+
352
+ //--------------------------------------------------------------------//
353
+ // Other functions
354
+ //--------------------------------------------------------------------//
355
 
356
  /**
357
+ * Payments: Calculate total.
358
+ *
359
+ * @since 1.2.3
360
  */
361
+ calculateTotal: function(el) {
362
+
363
+ var $form = $(el),
364
+ total = 0.00;
365
  $('.wpforms-payment-price').each(function(index, el) {
366
  var amount = 0,
367
  $this = $(this);
368
+ if ($this.attr('type') === 'text') {
369
  amount = $this.val();
370
+ } else if ($this.attr('type') === 'radio' && $this.is(':checked')) {
371
  amount = $this.data('amount');
372
  }
373
+ if (amount != 0) {
374
  amount = amount.replace(/[^0-9.]/gi,'');
375
  amount = parseFloat(amount).toFixed(2).replace(/(\d)(?=(\d{6})+\.)/g, "$1,");
376
+ total = parseFloat(total)+parseFloat(amount);
377
  }
378
  });
379
  return parseFloat(total).toFixed(2);
380
+ },
381
+
382
+ /**
383
+ * Payments: Update Total field(s) with latest calculation.
384
+ *
385
+ * @since 1.2.3
386
+ */
387
+ calculateTotalUpdate: function(el) {
388
+
389
  var $form = $(el).closest('.wpforms-form'),
390
+ total = WPForms.calculateTotal($form);
391
  if (isNaN(total)) {
392
  total = '0.00';
393
  }
394
  $form.find('.wpforms-payment-total').each(function(index, el) {
395
+ if ($(this).attr('type') == 'hidden') {
396
  $(this).val('$'+total);
397
  } else {
398
  $(this).text('$'+total);
399
  }
400
  });
401
  }
402
+ }
403
+
404
+ WPForms.init();
405
+
406
+ window.wpforms = WPForms;
407
+
408
+ })(jQuery);
 
 
 
includes/admin/builder/class-builder.php CHANGED
@@ -306,6 +306,10 @@ class WPForms_Builder {
306
  );
307
  $strings = apply_filters( 'wpforms_builder_strings', $strings, $this->form );
308
 
 
 
 
 
309
  wp_localize_script(
310
  'wpforms-builder',
311
  'wpforms_builder',
306
  );
307
  $strings = apply_filters( 'wpforms_builder_strings', $strings, $this->form );
308
 
309
+ if ( !empty( $_GET['form_id'] ) ) {
310
+ $strings['preview_url'] = add_query_arg( array( 'new_window' => 1 ), wpforms()->preview->form_preview_url( $_GET['form_id'] ) );
311
+ }
312
+
313
  wp_localize_script(
314
  'wpforms-builder',
315
  'wpforms_builder',
includes/admin/builder/functions.php CHANGED
@@ -145,12 +145,16 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
145
  if ( !empty( $args['field_map'] ) ) {
146
  $options = array();
147
  $available_fields = wpforms_get_form_fields( $form_data, $args['field_map'] );
 
148
  foreach ( $available_fields as $id => $available_field ) {
149
  $lbl = !empty( $available_field['label'] ) ? esc_attr( $available_field['label'] ) : __( 'Field #') . $id;
150
  $options[$id] = $lbl;
151
- }
152
  $input_class .= ' wpforms-field-map-select';
153
  $data_attr .= ' data-field-map-allowed="' . implode( ' ', $args['field_map'] ) . '"';
 
 
 
154
  } else {
155
  $options = $args['options'];
156
  }
@@ -163,6 +167,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
163
  $input_class,
164
  $data_attr
165
  );
 
166
  if ( !empty( $placeholder ) ) {
167
  $output .= '<option value="">' . $placeholder . '</option>';
168
  }
@@ -170,6 +175,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
170
  foreach ( $options as $key => $option ) {
171
  $output .= sprintf( '<option value="%s" %s>%s</option>', esc_attr( $key ), selected( $key, $value, false ), $option );
172
  }
 
173
  $output .= '</select>';
174
  break;
175
  }
145
  if ( !empty( $args['field_map'] ) ) {
146
  $options = array();
147
  $available_fields = wpforms_get_form_fields( $form_data, $args['field_map'] );
148
+ if ( !empty( $available_fields ) ) {
149
  foreach ( $available_fields as $id => $available_field ) {
150
  $lbl = !empty( $available_field['label'] ) ? esc_attr( $available_field['label'] ) : __( 'Field #') . $id;
151
  $options[$id] = $lbl;
152
+ } }
153
  $input_class .= ' wpforms-field-map-select';
154
  $data_attr .= ' data-field-map-allowed="' . implode( ' ', $args['field_map'] ) . '"';
155
+ if ( !empty( $placeholder ) ) {
156
+ $data_attr .= ' data-field-map-placeholder="' . esc_attr( $placeholder ) . '"';
157
+ }
158
  } else {
159
  $options = $args['options'];
160
  }
167
  $input_class,
168
  $data_attr
169
  );
170
+
171
  if ( !empty( $placeholder ) ) {
172
  $output .= '<option value="">' . $placeholder . '</option>';
173
  }
175
  foreach ( $options as $key => $option ) {
176
  $output .= sprintf( '<option value="%s" %s>%s</option>', esc_attr( $key ), selected( $key, $value, false ), $option );
177
  }
178
+
179
  $output .= '</select>';
180
  break;
181
  }
includes/admin/class-menu.php CHANGED
@@ -18,7 +18,7 @@ class WPForms_Admin_Menu {
18
  public function __construct() {
19
 
20
  // Let's make some menus
21
- add_action( 'admin_menu', array( $this, 'register_menus' ) );
22
  add_action( 'admin_enqueue_scripts', array( $this, 'menu_icon' ) );
23
 
24
  // Footer text
18
  public function __construct() {
19
 
20
  // Let's make some menus
21
+ add_action( 'admin_menu', array( $this, 'register_menus' ), 9 );
22
  add_action( 'admin_enqueue_scripts', array( $this, 'menu_icon' ) );
23
 
24
  // Footer text
includes/class-frontend.php CHANGED
@@ -36,7 +36,7 @@ class WPForms_Frontend {
36
  add_action( 'wpforms_frontend_output', array( $this, 'recaptcha' ), 20, 5 );
37
  add_action( 'wpforms_frontend_output', array( $this, 'foot' ), 25, 5 );
38
  add_action( 'wp_enqueue_scripts', array( $this, 'assets_header' ) );
39
- add_action( 'wp_footer', array( $this, 'assets_footer' ) );
40
  add_action( 'wp_footer', array( $this, 'footer_end' ), 99 );
41
 
42
  // Register shortcode
@@ -602,6 +602,18 @@ class WPForms_Frontend {
602
  echo '</div>';
603
  }
604
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  /**
606
  * Load the necessary CSS for single pages/posts earlier if possible.
607
  *
@@ -635,7 +647,7 @@ class WPForms_Frontend {
635
  do_action( 'wpforms_frontend_css', $this->forms );
636
 
637
  // jquery date/time library CSS
638
- if ( true == wpforms_has_field_type( 'date-time', $this->forms, true ) ) :
639
  wp_enqueue_style(
640
  'wpforms-pickadate-core',
641
  WPFORMS_PLUGIN_URL . 'assets/css/pickadate.classic.css',
@@ -694,8 +706,7 @@ class WPForms_Frontend {
694
  );
695
 
696
  // Load jquery date/time library - http://http://amsul.ca/pickadate.js/
697
- //die( print_r( $this->forms ) );
698
- if ( true == wpforms_has_field_type( 'date-time', $this->forms, true ) ) :
699
  wp_enqueue_script(
700
  'wpforms-pickadate-core',
701
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.picker.js',
@@ -720,7 +731,7 @@ class WPForms_Frontend {
720
  endif;
721
 
722
  // Load jquery input mask library - https://github.com/RobinHerbots/jquery.inputmask
723
- if ( true == wpforms_has_field_type( 'phone', $this->forms, true ) ) :
724
  wp_enqueue_script(
725
  'wpforms-maskedinput',
726
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.inputmask.bundle.min.js',
@@ -731,7 +742,7 @@ class WPForms_Frontend {
731
  endif;
732
 
733
  // Load CC payment library - https://github.com/stripe/jquery.payment/
734
- if ( true == wpforms_has_field_type( 'credit-card', $this->forms, true ) ) :
735
  wp_enqueue_script(
736
  'wpforms-payment',
737
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.payment.min.js',
@@ -801,7 +812,7 @@ class WPForms_Frontend {
801
  */
802
  public function assets_footer() {
803
 
804
- if ( empty( $this->forms ) )
805
  return;
806
 
807
  $this->assets_css();
@@ -817,7 +828,7 @@ class WPForms_Frontend {
817
  */
818
  public function footer_end() {
819
 
820
- if ( empty( $this->forms ) )
821
  return;
822
 
823
  do_action( 'wpforms_wp_footer_end', $this->forms );
36
  add_action( 'wpforms_frontend_output', array( $this, 'recaptcha' ), 20, 5 );
37
  add_action( 'wpforms_frontend_output', array( $this, 'foot' ), 25, 5 );
38
  add_action( 'wp_enqueue_scripts', array( $this, 'assets_header' ) );
39
+ add_action( 'wp_footer', array( $this, 'assets_footer' ), 15 );
40
  add_action( 'wp_footer', array( $this, 'footer_end' ), 99 );
41
 
42
  // Register shortcode
602
  echo '</div>';
603
  }
604
 
605
+ /**
606
+ * Determine if we should load assets globally. If false assets will
607
+ * load conditionally (default).
608
+ *
609
+ * @since 1.2.4
610
+ * @return bool
611
+ */
612
+ public function assets_global() {
613
+
614
+ return apply_filters( 'wpforms_global_assets', wpforms_setting( 'global-assets', false ) );
615
+ }
616
+
617
  /**
618
  * Load the necessary CSS for single pages/posts earlier if possible.
619
  *
647
  do_action( 'wpforms_frontend_css', $this->forms );
648
 
649
  // jquery date/time library CSS
650
+ if ( $this->assets_global() || true == wpforms_has_field_type( 'date-time', $this->forms, true ) ) :
651
  wp_enqueue_style(
652
  'wpforms-pickadate-core',
653
  WPFORMS_PLUGIN_URL . 'assets/css/pickadate.classic.css',
706
  );
707
 
708
  // Load jquery date/time library - http://http://amsul.ca/pickadate.js/
709
+ if ( $this->assets_global() || true == wpforms_has_field_type( 'date-time', $this->forms, true ) ) :
 
710
  wp_enqueue_script(
711
  'wpforms-pickadate-core',
712
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.picker.js',
731
  endif;
732
 
733
  // Load jquery input mask library - https://github.com/RobinHerbots/jquery.inputmask
734
+ if ( $this->assets_global() || true == wpforms_has_field_type( 'phone', $this->forms, true ) ) :
735
  wp_enqueue_script(
736
  'wpforms-maskedinput',
737
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.inputmask.bundle.min.js',
742
  endif;
743
 
744
  // Load CC payment library - https://github.com/stripe/jquery.payment/
745
+ if ( $this->assets_global() || true == wpforms_has_field_type( 'credit-card', $this->forms, true ) ) :
746
  wp_enqueue_script(
747
  'wpforms-payment',
748
  WPFORMS_PLUGIN_URL . 'assets/js/jquery.payment.min.js',
812
  */
813
  public function assets_footer() {
814
 
815
+ if ( empty( $this->forms ) && ! $this->assets_global() )
816
  return;
817
 
818
  $this->assets_css();
828
  */
829
  public function footer_end() {
830
 
831
+ if ( empty( $this->forms ) && ! $this->assets_global() )
832
  return;
833
 
834
  do_action( 'wpforms_wp_footer_end', $this->forms );
includes/class-logging.php CHANGED
@@ -35,7 +35,7 @@ class WPForms_Logging {
35
  public function register_post_type() {
36
 
37
  $log_args = array(
38
- 'labels' => array( 'name' => __( 'WPForms Logs', 'wpforms' ) ),
39
  'public' => false,
40
  'exclude_from_search' => true,
41
  'publicly_queryable' => false,
@@ -44,10 +44,11 @@ class WPForms_Logging {
44
  'rewrite' => false,
45
  'capability_type' => 'post',
46
  'supports' => array( 'title', 'editor' ),
47
- 'can_export' => false
 
48
  );
49
 
50
- if ( ( ( defined( 'WPFORMS_DEBUG' ) && true === WP_DEBUG ) || ( defined( 'WPFORMS_LOG' ) && true === WPFORMS_LOG ) ) && is_super_admin() ) {
51
  $log_args['show_ui'] = true;
52
  }
53
 
@@ -73,10 +74,12 @@ class WPForms_Logging {
73
  public function log_types() {
74
 
75
  $terms = array(
76
- 'payment_error',
77
- 'provider_error',
78
  'spam',
79
  'entry',
 
 
80
  );
81
 
82
  return apply_filters( 'wpforms_log_types', $terms );
35
  public function register_post_type() {
36
 
37
  $log_args = array(
38
+ 'labels' => array( 'name' => __( 'WPForms Logs', 'wpforms' ), 'menu_name' => __( 'Logs', 'wpforms' ) ),
39
  'public' => false,
40
  'exclude_from_search' => true,
41
  'publicly_queryable' => false,
44
  'rewrite' => false,
45
  'capability_type' => 'post',
46
  'supports' => array( 'title', 'editor' ),
47
+ 'can_export' => false,
48
+ 'show_in_menu' => 'wpforms-overview'
49
  );
50
 
51
+ if ( wpforms_debug() ) {
52
  $log_args['show_ui'] = true;
53
  }
54
 
74
  public function log_types() {
75
 
76
  $terms = array(
77
+ 'payment',
78
+ 'provider',
79
  'spam',
80
  'entry',
81
+ 'error',
82
+ 'conditional_logic'
83
  );
84
 
85
  return apply_filters( 'wpforms_log_types', $terms );
includes/class-preview.php CHANGED
@@ -259,6 +259,9 @@ class WPForms_Preview {
259
  $title = sanitize_text_field( $form['settings']['form_title'] );
260
  $shortcode = '[wpforms id="' . absint( $form['id'] ) . '"]';
261
  $content = __( 'This is a preview of your form. This page not publically accessible.', 'wpforms' );
 
 
 
262
  $posts[0]->post_title = $title . __( ' Preview', 'wpforms' );
263
  $posts[0]->post_content = $content . $shortcode;
264
  $posts[0]->post_status = 'public';
259
  $title = sanitize_text_field( $form['settings']['form_title'] );
260
  $shortcode = '[wpforms id="' . absint( $form['id'] ) . '"]';
261
  $content = __( 'This is a preview of your form. This page not publically accessible.', 'wpforms' );
262
+ if ( !empty( $_GET['new_window'] ) ) {
263
+ $content .= ' <a href="javascript:window.close();">' . __( 'Close this window', 'wpforms' ) . '.</a>';
264
+ }
265
  $posts[0]->post_title = $title . __( ' Preview', 'wpforms' );
266
  $posts[0]->post_content = $content . $shortcode;
267
  $posts[0]->post_status = 'public';
includes/class-process.php CHANGED
@@ -166,7 +166,7 @@ class WPForms_Process {
166
  }
167
 
168
  // Success - add entry to database
169
- $entry_id = $this->entry_save( $this->fields, '', $entry, $form_data['id'], $form_data );
170
 
171
  // Success - send email notification
172
  $this->entry_email( $this->fields, $entry, $form_data, $entry_id );
@@ -181,9 +181,8 @@ class WPForms_Process {
181
  wpforms_log(
182
  'Entry',
183
  $this->fields,
184
- 'entries',
185
  array(
186
- 'type' => 'entry',
187
  'parent' => $entry_id,
188
  'form_id' => $form_data['id'],
189
  )
@@ -198,13 +197,9 @@ class WPForms_Process {
198
  // Logs spam entry depending on log levels set
199
  wpforms_log(
200
  'Spam Entry',
201
- array(
202
- $honeypot,
203
- $entry
204
- ),
205
- 'spam',
206
  array(
207
- 'type' => 'spam',
208
  'parent' => $entry_id,
209
  'form_id' => $form_data['id'],
210
  )
@@ -342,7 +337,7 @@ class WPForms_Process {
342
  // Setup email properties
343
  $email['address'] = explode( ',', apply_filters( 'wpforms_process_smart_tags', $notification['email'], $form_data, $fields, $this->entry_id ) );
344
  $email['address'] = array_map( 'sanitize_email', $email['address'] );
345
- $email['subject'] = !empty( $notification['subject'] ) ? $notification['subject'] : __( 'New %s Entry', $form_data['settings']['form_title'] );
346
  $email['sender_address'] = !empty( $notification['sender_address'] ) ? $notification['sender_address'] : get_option( 'admin_email' );
347
  $email['sender_name'] = !empty( $notification['sender_name'] ) ? $notification['sender_name'] : get_bloginfo( 'name' );
348
  $email['replyto'] = !empty( $notification['replyto'] ) ? $notification['replyto'] : false;
@@ -373,9 +368,9 @@ class WPForms_Process {
373
  * @param array $entry
374
  * @param array $form_data
375
  */
376
- public function entry_save( $fields, $entry_meta, $entry, $form_id, $form_data = '' ) {
377
 
378
- do_action( 'wpforms_process_entry_save', $fields, $entry_meta, $entry, $form_id, $form_data );
379
 
380
  return $this->entry_id;
381
  }
166
  }
167
 
168
  // Success - add entry to database
169
+ $entry_id = $this->entry_save( $this->fields, $entry, $form_data['id'], $form_data );
170
 
171
  // Success - send email notification
172
  $this->entry_email( $this->fields, $entry, $form_data, $entry_id );
181
  wpforms_log(
182
  'Entry',
183
  $this->fields,
 
184
  array(
185
+ 'type' => array( 'entry' ),
186
  'parent' => $entry_id,
187
  'form_id' => $form_data['id'],
188
  )
197
  // Logs spam entry depending on log levels set
198
  wpforms_log(
199
  'Spam Entry',
200
+ array( $honeypot, $entry ),
 
 
 
 
201
  array(
202
+ 'type' => array( 'spam' ),
203
  'parent' => $entry_id,
204
  'form_id' => $form_data['id'],
205
  )
337
  // Setup email properties
338
  $email['address'] = explode( ',', apply_filters( 'wpforms_process_smart_tags', $notification['email'], $form_data, $fields, $this->entry_id ) );
339
  $email['address'] = array_map( 'sanitize_email', $email['address'] );
340
+ $email['subject'] = !empty( $notification['subject'] ) ? $notification['subject'] : sprintf( __( 'New %s Entry', 'wpforms ' ), $form_data['settings']['form_title'] );
341
  $email['sender_address'] = !empty( $notification['sender_address'] ) ? $notification['sender_address'] : get_option( 'admin_email' );
342
  $email['sender_name'] = !empty( $notification['sender_name'] ) ? $notification['sender_name'] : get_bloginfo( 'name' );
343
  $email['replyto'] = !empty( $notification['replyto'] ) ? $notification['replyto'] : false;
368
  * @param array $entry
369
  * @param array $form_data
370
  */
371
+ public function entry_save( $fields, $entry, $form_id, $form_data = '' ) {
372
 
373
+ do_action( 'wpforms_process_entry_save', $fields, $entry, $form_id, $form_data );
374
 
375
  return $this->entry_id;
376
  }
includes/emails/class-emails.php CHANGED
@@ -83,7 +83,7 @@ class WPForms_WP_Emails {
83
  *
84
  * @since 1.2.3
85
  */
86
- private $entry_id = '';
87
 
88
  /**
89
  * Get things going.
83
  *
84
  * @since 1.2.3
85
  */
86
+ public $entry_id = '';
87
 
88
  /**
89
  * Get things going.
includes/functions.php CHANGED
@@ -793,43 +793,36 @@ function wpforms_debug_data( $data, $echo = true ) {
793
  * @since 1.0.0
794
  * @param string $title
795
  * @param string $message
796
- * @param string|array $level
797
  * @param array $args
798
  */
799
- function wpforms_log( $title = '', $message = '', $level = 'errors', $args = array() ) {
800
 
801
  // Require log title
802
  if ( empty( $title ) )
803
  return;
804
 
805
  // Force logging everything when in debug mode
806
- if ( wpforms_debug() ) {
807
- $level = 'all';
808
- }
809
-
810
- /**
811
- * Compare error levels to determine if we should log.
812
- * Current supported levels:
813
- * - All - always log. always. (all)
814
- * - Errors (errors)
815
- * - Spam (spam)
816
- * - Entries (entries)
817
- * - Conditional Logic (conditional_logic)
818
- */
819
- if ( $level != 'all' ) {
820
- $logging_levels = get_option( 'wpforms_logging', array() );
821
- if ( !in_array( $level, $logging_levels ) ) {
822
  return;
823
  }
824
  }
825
 
826
- // Other args
827
- $defaults = array(
828
- 'parent' => '0',
829
- 'type' => '',
830
- );
831
- $args = wp_parse_args( $args, $defaults );
832
-
833
  if ( !empty( $args['form_id'] ) ) {
834
  $meta = array( 'form' => absint( $args['form_id'] ) );
835
  } elseif ( !empty( $args['meta'] ) ) {
@@ -838,13 +831,16 @@ function wpforms_log( $title = '', $message = '', $level = 'errors', $args = arr
838
  $meta = '';
839
  }
840
 
 
 
 
841
  // Make arrays and objects look nice
842
  if ( is_array( $message ) || is_object( $message ) ) {
843
  $message = '<pre>' . print_r( $message, true ) . '</pre>';
844
  }
845
 
846
  // Create log entry
847
- wpforms()->logs->add( $title, $message, $args['parent'], $args['type'], $meta );
848
  }
849
 
850
  if ( ! function_exists( 'array_replace_recursive' ) ) :
793
  * @since 1.0.0
794
  * @param string $title
795
  * @param string $message
 
796
  * @param array $args
797
  */
798
+ function wpforms_log( $title = '', $message = '', $args = array() ) {
799
 
800
  // Require log title
801
  if ( empty( $title ) )
802
  return;
803
 
804
  // Force logging everything when in debug mode
805
+ if ( ! wpforms_debug() ) {
806
+
807
+ /**
808
+ * Compare error levels to determine if we should log.
809
+ * Current supported levels:
810
+ * - Errors (error)
811
+ * - Spam (spam)
812
+ * - Entries (entry)
813
+ * - Payments (payment)
814
+ * - Providers (provider)
815
+ * - Conditional Logic (conditional_logic)
816
+ */
817
+ $type = !empty( $args['type'] ) ? (array) $args['type'] : array( 'error' );
818
+ $levels = get_option( 'wpforms_logging', array() );
819
+ $lvls = array_intersect( $type, $levels );
820
+ if ( empty( $lvls ) ) {
821
  return;
822
  }
823
  }
824
 
825
+ // Meta
 
 
 
 
 
 
826
  if ( !empty( $args['form_id'] ) ) {
827
  $meta = array( 'form' => absint( $args['form_id'] ) );
828
  } elseif ( !empty( $args['meta'] ) ) {
831
  $meta = '';
832
  }
833
 
834
+ // Parent
835
+ $parent = !empty( $args['parent'] ) ? $args['parent'] : 0;
836
+
837
  // Make arrays and objects look nice
838
  if ( is_array( $message ) || is_object( $message ) ) {
839
  $message = '<pre>' . print_r( $message, true ) . '</pre>';
840
  }
841
 
842
  // Create log entry
843
+ wpforms()->logs->add( $title, $message, $parent, $parent, $meta );
844
  }
845
 
846
  if ( ! function_exists( 'array_replace_recursive' ) ) :
languages/wpforms.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WPForms 1.2.3\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
- "POT-Creation-Date: 2016-06-23 15:17:21+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -42,7 +42,7 @@ msgstr ""
42
 
43
  #: includes/admin/builder/class-builder.php:260
44
  #: includes/admin/class-editor.php:96
45
- #: pro/includes/admin/entries/class-entries.php:974
46
  msgid "Cancel"
47
  msgstr ""
48
 
@@ -113,7 +113,7 @@ msgstr ""
113
 
114
  #: includes/admin/builder/class-builder.php:277
115
  #: lite/includes/admin/class-settings.php:116
116
- #: pro/includes/admin/class-settings.php:118
117
  msgid "Saving ..."
118
  msgstr ""
119
 
@@ -126,7 +126,7 @@ msgid "Save and Exit"
126
  msgstr ""
127
 
128
  #: includes/admin/builder/class-builder.php:280
129
- #: includes/admin/builder/class-builder.php:337
130
  msgid "Loading"
131
  msgstr ""
132
 
@@ -151,7 +151,7 @@ msgid "Or you can follow the instructions in this video."
151
  msgstr ""
152
 
153
  #: includes/admin/builder/class-builder.php:290
154
- #: includes/admin/builder/class-builder.php:387
155
  msgid "Exit"
156
  msgstr ""
157
 
@@ -173,13 +173,13 @@ msgstr ""
173
 
174
  #: includes/admin/builder/class-builder.php:296
175
  #: includes/fields/class-base.php:235 lite/wpforms-lite.php:75
176
- #: pro/wpforms-pro.php:262
177
  msgid "Off"
178
  msgstr ""
179
 
180
  #: includes/admin/builder/class-builder.php:297
181
  #: includes/fields/class-base.php:235 lite/wpforms-lite.php:74
182
- #: pro/wpforms-pro.php:261
183
  msgid "On"
184
  msgstr ""
185
 
@@ -195,7 +195,7 @@ msgid "Previous"
195
  msgstr ""
196
 
197
  #: includes/admin/builder/class-builder.php:302
198
- #: includes/admin/builder/functions.php:204 includes/fields/class-base.php:335
199
  msgid "Show Smart Tags"
200
  msgstr ""
201
 
@@ -212,38 +212,38 @@ msgstr ""
212
  msgid "-- Select Choice --"
213
  msgstr ""
214
 
215
- #: includes/admin/builder/class-builder.php:360
216
  msgid "Now editing"
217
  msgstr ""
218
 
219
- #: includes/admin/builder/class-builder.php:370
220
  #: pro/includes/admin/entries/class-entries.php:510
221
  msgid "Preview Form"
222
  msgstr ""
223
 
224
- #: includes/admin/builder/class-builder.php:372
225
  #: includes/admin/overview/class-overview-table.php:159
226
  msgid "Preview"
227
  msgstr ""
228
 
229
- #: includes/admin/builder/class-builder.php:375
230
  msgid "Embed Form"
231
  msgstr ""
232
 
233
- #: includes/admin/builder/class-builder.php:377
234
  msgid "Embed"
235
  msgstr ""
236
 
237
- #: includes/admin/builder/class-builder.php:380
238
  msgid "Save Form"
239
  msgstr ""
240
 
241
- #: includes/admin/builder/class-builder.php:382
242
- #: pro/includes/admin/class-settings.php:397
243
  msgid "Save"
244
  msgstr ""
245
 
246
- #: includes/admin/builder/functions.php:149
247
  msgid "Field #"
248
  msgstr ""
249
 
@@ -301,21 +301,21 @@ msgid "Click to edit. Drag to reorder."
301
  msgstr ""
302
 
303
  #: includes/admin/builder/panels/class-settings.php:21
304
- #: includes/admin/class-menu.php:84 lite/includes/admin/class-settings.php:339
305
- #: pro/includes/admin/class-settings.php:489
306
  msgid "Settings"
307
  msgstr ""
308
 
309
  #: includes/admin/builder/panels/class-settings.php:57
310
  #: includes/admin/builder/panels/class-settings.php:87
311
  #: lite/includes/admin/class-settings.php:137
312
- #: pro/includes/admin/class-settings.php:139
313
  msgid "General"
314
  msgstr ""
315
 
316
  #: includes/admin/builder/panels/class-settings.php:58
317
- #: lite/wpforms-lite.php:60 lite/wpforms-lite.php:70 pro/wpforms-pro.php:248
318
- #: pro/wpforms-pro.php:257
319
  msgid "Notifications"
320
  msgstr ""
321
 
@@ -370,7 +370,7 @@ msgstr ""
370
 
371
  #: includes/admin/builder/panels/class-settings.php:258
372
  #: includes/templates/class-suggestion.php:74 lite/wpforms-lite.php:172
373
- #: pro/wpforms-pro.php:365
374
  msgid "Message"
375
  msgstr ""
376
 
@@ -467,9 +467,9 @@ msgid ""
467
  "a>?"
468
  msgstr ""
469
 
470
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.3) #-#-#-#-#
471
  #. Plugin Name of the plugin/theme
472
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.3) #-#-#-#-#
473
  #. Author of the plugin/theme
474
  #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
475
  #: includes/admin/class-menu.php:51
@@ -496,7 +496,7 @@ msgstr ""
496
 
497
  #: includes/admin/class-menu.php:72
498
  #: includes/admin/overview/class-overview-table.php:152
499
- #: pro/includes/admin/entries/class-entries.php:409 pro/wpforms-pro.php:203
500
  msgid "Entries"
501
  msgstr ""
502
 
@@ -631,7 +631,7 @@ msgstr ""
631
  #: includes/admin/overview/class-overview-table.php:191
632
  #: pro/includes/admin/entries/class-entries-table.php:278
633
  #: pro/includes/admin/entries/class-entries-table.php:299
634
- #: pro/includes/admin/entries/class-entries.php:1009
635
  msgid "Delete"
636
  msgstr ""
637
 
@@ -680,22 +680,26 @@ msgstr ""
680
  msgid "WPForms Logs"
681
  msgstr ""
682
 
 
 
 
 
683
  #: includes/class-preview.php:95
684
  msgid "Entry #%d"
685
  msgstr ""
686
 
687
  #: includes/class-preview.php:107
688
- #: pro/includes/admin/entries/class-entries.php:896
689
  msgid "This entry does not have any fields"
690
  msgstr ""
691
 
692
  #: includes/class-preview.php:124
693
- #: pro/includes/admin/entries/class-entries.php:912
694
  msgid "Field ID #%d"
695
  msgstr ""
696
 
697
  #: includes/class-preview.php:129
698
- #: pro/includes/admin/entries/class-entries.php:917
699
  msgid "Empty"
700
  msgstr ""
701
 
@@ -719,7 +723,11 @@ msgstr ""
719
  msgid "This is a preview of your form. This page not publically accessible."
720
  msgstr ""
721
 
722
- #: includes/class-preview.php:262
 
 
 
 
723
  msgid " Preview"
724
  msgstr ""
725
 
@@ -739,7 +747,8 @@ msgstr ""
739
  msgid "WPForms honeypot field triggered."
740
  msgstr ""
741
 
742
- #: includes/class-process.php:345
 
743
  msgid "New %s Entry"
744
  msgstr ""
745
 
@@ -817,7 +826,7 @@ msgstr ""
817
  msgid "Lost Password URL"
818
  msgstr ""
819
 
820
- #: includes/class-widget.php:127
821
  msgid "No forms"
822
  msgstr ""
823
 
@@ -1031,8 +1040,8 @@ msgid "Show Values"
1031
  msgstr ""
1032
 
1033
  #: includes/fields/class-email.php:21
1034
- #: lite/includes/admin/class-settings.php:210
1035
- #: pro/includes/admin/class-settings.php:271
1036
  #: pro/includes/templates/class-donation.php:42
1037
  #: pro/includes/templates/class-order.php:42
1038
  #: pro/includes/templates/class-request-quote.php:46
@@ -1219,110 +1228,121 @@ msgid "Subject"
1219
  msgstr ""
1220
 
1221
  #: lite/includes/admin/class-settings.php:117
1222
- #: pro/includes/admin/class-settings.php:119
1223
  msgid "Are you sure you want to disconnect this account?"
1224
  msgstr ""
1225
 
1226
  #: lite/includes/admin/class-settings.php:118
1227
- #: pro/includes/admin/class-settings.php:120
1228
  msgid "Upload or Choose Your Image"
1229
  msgstr ""
1230
 
1231
  #: lite/includes/admin/class-settings.php:119
1232
- #: pro/includes/admin/class-settings.php:121
1233
  msgid "Use Image"
1234
  msgstr ""
1235
 
1236
  #: lite/includes/admin/class-settings.php:138
1237
- #: pro/includes/admin/class-settings.php:142
1238
  msgid "System Information"
1239
  msgstr ""
1240
 
1241
  #: lite/includes/admin/class-settings.php:161
1242
- #: pro/includes/admin/class-settings.php:165
1243
- #: pro/includes/admin/class-settings.php:355
1244
  msgid "Settings check failed."
1245
  msgstr ""
1246
 
1247
- #: lite/includes/admin/class-settings.php:179
1248
- #: pro/includes/admin/class-settings.php:183
1249
  msgid "General settings updated."
1250
  msgstr ""
1251
 
1252
- #: lite/includes/admin/class-settings.php:196
1253
- #: pro/includes/admin/class-settings.php:257
1254
  msgid "Include Form Styling"
1255
  msgstr ""
1256
 
1257
- #: lite/includes/admin/class-settings.php:200
1258
- #: pro/includes/admin/class-settings.php:261
1259
  msgid "Base and form theme styling"
1260
  msgstr ""
1261
 
1262
- #: lite/includes/admin/class-settings.php:201
1263
- #: pro/includes/admin/class-settings.php:262
1264
  msgid "Base styling only"
1265
  msgstr ""
1266
 
1267
- #: lite/includes/admin/class-settings.php:202
1268
- #: pro/includes/admin/class-settings.php:263
1269
  #: pro/includes/fields/class-page-break.php:58
1270
  msgid "None"
1271
  msgstr ""
1272
 
1273
- #: lite/includes/admin/class-settings.php:204
1274
- #: pro/includes/admin/class-settings.php:265
1275
  msgid "Determines which CSS files to load for the site."
1276
  msgstr ""
1277
 
1278
- #: lite/includes/admin/class-settings.php:215
1279
- #: pro/includes/admin/class-settings.php:276
1280
  msgid "Email Template"
1281
  msgstr ""
1282
 
1283
- #: lite/includes/admin/class-settings.php:219
1284
- #: pro/includes/admin/class-settings.php:280
1285
  msgid "Default HTML template"
1286
  msgstr ""
1287
 
1288
- #: lite/includes/admin/class-settings.php:220
1289
- #: pro/includes/admin/class-settings.php:281
1290
  msgid "Plain Text"
1291
  msgstr ""
1292
 
1293
- #: lite/includes/admin/class-settings.php:222
1294
- #: pro/includes/admin/class-settings.php:283
1295
  msgid "Determines how email notifications will be formatted."
1296
  msgstr ""
1297
 
1298
- #: lite/includes/admin/class-settings.php:227
1299
- #: pro/includes/admin/class-settings.php:288
 
 
 
 
 
 
 
 
 
 
 
 
1300
  msgid "Email Header Image "
1301
  msgstr ""
1302
 
1303
- #: lite/includes/admin/class-settings.php:239
1304
- #: pro/includes/admin/class-settings.php:300
1305
  msgid "Upload Image"
1306
  msgstr ""
1307
 
1308
- #: lite/includes/admin/class-settings.php:241
1309
- #: pro/includes/admin/class-settings.php:302
1310
  msgid ""
1311
  "Upload or choose a logo to be displayed at the top of email notifications."
1312
  msgstr ""
1313
 
1314
- #: lite/includes/admin/class-settings.php:242
1315
- #: pro/includes/admin/class-settings.php:303
1316
  msgid "Recommended size is 300x100 or smaller for best support on all devices."
1317
  msgstr ""
1318
 
1319
- #: lite/includes/admin/class-settings.php:249
1320
- #: pro/includes/admin/class-settings.php:310
1321
  msgid "reCAPTCHA"
1322
  msgstr ""
1323
 
1324
- #: lite/includes/admin/class-settings.php:250
1325
- #: pro/includes/admin/class-settings.php:311
1326
  msgid ""
1327
  "reCAPTCHA is a free anti-spam service from Google. Its helps protect your "
1328
  "website from spam and abuse while letting real people pass through with "
@@ -1332,56 +1352,56 @@ msgid ""
1332
  "\"_blank\">read our walk through</a> for step-by-step directions."
1333
  msgstr ""
1334
 
1335
- #: lite/includes/admin/class-settings.php:255
1336
- #: pro/includes/admin/class-settings.php:316
1337
  msgid "reCAPTCHA Site key"
1338
  msgstr ""
1339
 
1340
- #: lite/includes/admin/class-settings.php:263
1341
- #: pro/includes/admin/class-settings.php:324
1342
  msgid "reCAPTCHA Secret key"
1343
  msgstr ""
1344
 
1345
- #: lite/includes/admin/class-settings.php:272
1346
- #: pro/includes/admin/class-settings.php:333
1347
  msgid "Save General Settings"
1348
  msgstr ""
1349
 
1350
- #: lite/wpforms-lite.php:83 pro/wpforms-pro.php:269
1351
  msgid "Default Notification"
1352
  msgstr ""
1353
 
1354
- #: lite/wpforms-lite.php:91 pro/wpforms-pro.php:284
1355
  msgid "Send To Email Address"
1356
  msgstr ""
1357
 
1358
- #: lite/wpforms-lite.php:94 pro/wpforms-pro.php:287
1359
  msgid ""
1360
  "Enter the email address to receive form entry notifications. For multiple "
1361
  "notifications, seperate email addresses with a comma."
1362
  msgstr ""
1363
 
1364
- #: lite/wpforms-lite.php:109 pro/wpforms-pro.php:302
1365
  msgid "Email Subject"
1366
  msgstr ""
1367
 
1368
- #: lite/wpforms-lite.php:111 pro/wpforms-pro.php:304
1369
  msgid "New Entry: "
1370
  msgstr ""
1371
 
1372
- #: lite/wpforms-lite.php:125 pro/wpforms-pro.php:318
1373
  msgid "From Name"
1374
  msgstr ""
1375
 
1376
- #: lite/wpforms-lite.php:141 pro/wpforms-pro.php:334
1377
  msgid "From Email"
1378
  msgstr ""
1379
 
1380
- #: lite/wpforms-lite.php:157 pro/wpforms-pro.php:350
1381
  msgid "Reply-To"
1382
  msgstr ""
1383
 
1384
- #: lite/wpforms-lite.php:182 pro/wpforms-pro.php:375
1385
  msgid ""
1386
  "To display all form fields, use the <code>{all_fields}</code> Smart Tag."
1387
  msgstr ""
@@ -1430,7 +1450,7 @@ msgid "Addon installed."
1430
  msgstr ""
1431
 
1432
  #: pro/includes/admin/builder/panels/class-payments.php:21
1433
- #: pro/includes/admin/class-settings.php:140
1434
  msgid "Payments"
1435
  msgstr ""
1436
 
@@ -1630,86 +1650,129 @@ msgid ""
1630
  "continue receiving automatic updates."
1631
  msgstr ""
1632
 
1633
- #: pro/includes/admin/class-settings.php:141
1634
  msgid "Integrations"
1635
  msgstr ""
1636
 
1637
- #: pro/includes/admin/class-settings.php:190
 
 
 
 
 
 
 
 
1638
  msgid "Please enter a license key to verify."
1639
  msgstr ""
1640
 
1641
- #: pro/includes/admin/class-settings.php:220
1642
  msgid "License"
1643
  msgstr ""
1644
 
1645
- #: pro/includes/admin/class-settings.php:221
1646
  msgid "Your license key provides access to updates and Add-ons. "
1647
  msgstr ""
1648
 
1649
- #: pro/includes/admin/class-settings.php:226
1650
  msgid "License Key"
1651
  msgstr ""
1652
 
1653
- #: pro/includes/admin/class-settings.php:230
1654
  msgid "Verify Key"
1655
  msgstr ""
1656
 
1657
- #: pro/includes/admin/class-settings.php:232
1658
  msgid "Deactivate Key"
1659
  msgstr ""
1660
 
1661
- #: pro/includes/admin/class-settings.php:240
1662
  msgid "License Key Type"
1663
  msgstr ""
1664
 
1665
- #: pro/includes/admin/class-settings.php:243
1666
  msgid "Your license key type for this site is <strong>%s.</strong>"
1667
  msgstr ""
1668
 
1669
- #: pro/includes/admin/class-settings.php:244
1670
  msgid "Refresh Key"
1671
  msgstr ""
1672
 
1673
- #: pro/includes/admin/class-settings.php:245
1674
  msgid ""
1675
  "If your license has been upgraded or is incorrect, you may force a refresh."
1676
  msgstr ""
1677
 
1678
- #: pro/includes/admin/class-settings.php:366
1679
  msgid "Settings updated."
1680
  msgstr ""
1681
 
1682
- #: pro/includes/admin/class-settings.php:380
1683
  msgid "Currency"
1684
  msgstr ""
1685
 
1686
- #: pro/includes/admin/class-settings.php:384
1687
  msgid "US Dollars (USD)"
1688
  msgstr ""
1689
 
1690
- #: pro/includes/admin/class-settings.php:386
1691
  msgid "Determines which currency to use for payments."
1692
  msgstr ""
1693
 
1694
- #: pro/includes/admin/class-settings.php:417
1695
  msgid ""
1696
  "You do not have any marketing add-ons activated. You can head over to the <a "
1697
  "href=\"%s\">Add-Ons page</a> to install and activate the add-on for your "
1698
  "provider."
1699
  msgstr ""
1700
 
1701
- #: pro/includes/admin/entries/class-entries-export.php:173
1702
- msgid "ID"
1703
  msgstr ""
1704
 
1705
- #: pro/includes/admin/entries/class-entries-export.php:293
1706
- msgid "You do not have permission to export entries."
1707
  msgstr ""
1708
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1709
  #: pro/includes/admin/entries/class-entries-export.php:293
1710
  msgid "Error"
1711
  msgstr ""
1712
 
 
 
 
 
 
 
 
 
1713
  #: pro/includes/admin/entries/class-entries-table.php:99
1714
  msgid "All"
1715
  msgstr ""
@@ -1723,7 +1786,7 @@ msgid "Starred"
1723
  msgstr ""
1724
 
1725
  #: pro/includes/admin/entries/class-entries-table.php:120
1726
- #: pro/includes/admin/entries/class-entries.php:1216
1727
  msgid "Actions"
1728
  msgstr ""
1729
 
@@ -1764,17 +1827,17 @@ msgid "Mark Read"
1764
  msgstr ""
1765
 
1766
  #: pro/includes/admin/entries/class-entries-table.php:294
1767
- #: pro/includes/admin/entries/class-entries.php:1247
1768
  msgid "Mark Unread"
1769
  msgstr ""
1770
 
1771
  #: pro/includes/admin/entries/class-entries-table.php:295
1772
- #: pro/includes/admin/entries/class-entries.php:1199
1773
  msgid "Star"
1774
  msgstr ""
1775
 
1776
  #: pro/includes/admin/entries/class-entries-table.php:296
1777
- #: pro/includes/admin/entries/class-entries.php:1199
1778
  msgid "Unstar"
1779
  msgstr ""
1780
 
@@ -1826,12 +1889,12 @@ msgid "Are you sure you want to delete this entry?"
1826
  msgstr ""
1827
 
1828
  #: pro/includes/admin/entries/class-entries.php:267
1829
- #: pro/includes/admin/entries/class-entries.php:884
1830
  msgid "Hide Empty Fields"
1831
  msgstr ""
1832
 
1833
  #: pro/includes/admin/entries/class-entries.php:268
1834
- #: pro/includes/admin/entries/class-entries.php:884
1835
  msgid "Show Empty Fields"
1836
  msgstr ""
1837
 
@@ -1891,101 +1954,101 @@ msgstr ""
1891
  msgid "Form not found."
1892
  msgstr ""
1893
 
1894
- #: pro/includes/admin/entries/class-entries.php:798
1895
  msgid "Notifications sent!"
1896
  msgstr ""
1897
 
1898
- #: pro/includes/admin/entries/class-entries.php:825
1899
  msgid "View Entry"
1900
  msgstr ""
1901
 
1902
- #: pro/includes/admin/entries/class-entries.php:827
1903
  msgid "Back to All Entries"
1904
  msgstr ""
1905
 
1906
- #: pro/includes/admin/entries/class-entries.php:831
1907
  msgid "Entry %s of %s"
1908
  msgstr ""
1909
 
1910
- #: pro/includes/admin/entries/class-entries.php:834
1911
  msgid "Previous form entry"
1912
  msgstr ""
1913
 
1914
- #: pro/includes/admin/entries/class-entries.php:835
1915
  msgid "Current form entry"
1916
  msgstr ""
1917
 
1918
- #: pro/includes/admin/entries/class-entries.php:836
1919
  msgid "Next form entry"
1920
  msgstr ""
1921
 
1922
- #: pro/includes/admin/entries/class-entries.php:952
1923
  msgid "Notes"
1924
  msgstr ""
1925
 
1926
- #: pro/includes/admin/entries/class-entries.php:958
1927
- #: pro/includes/admin/entries/class-entries.php:973
1928
  msgid "Add Note"
1929
  msgstr ""
1930
 
1931
- #: pro/includes/admin/entries/class-entries.php:982
1932
  msgid "No notes."
1933
  msgstr ""
1934
 
1935
- #: pro/includes/admin/entries/class-entries.php:991
1936
- #: pro/includes/admin/entries/class-entries.php:1083
1937
  msgid "M j, Y @ g:ia"
1938
  msgstr ""
1939
 
1940
- #: pro/includes/admin/entries/class-entries.php:1009
1941
  msgid "Added by"
1942
  msgstr ""
1943
 
1944
- #: pro/includes/admin/entries/class-entries.php:1009
1945
  msgid "on"
1946
  msgstr ""
1947
 
1948
- #: pro/includes/admin/entries/class-entries.php:1042
1949
  msgid "Debug Information"
1950
  msgstr ""
1951
 
1952
- #: pro/includes/admin/entries/class-entries.php:1068
1953
  msgid "Entry Details"
1954
  msgstr ""
1955
 
1956
- #: pro/includes/admin/entries/class-entries.php:1076
1957
  msgid "Entry ID:"
1958
  msgstr ""
1959
 
1960
- #: pro/includes/admin/entries/class-entries.php:1082
1961
  msgid "Submitted on:"
1962
  msgstr ""
1963
 
1964
- #: pro/includes/admin/entries/class-entries.php:1089
1965
  msgid "Modified on:"
1966
  msgstr ""
1967
 
1968
- #: pro/includes/admin/entries/class-entries.php:1090
1969
  msgid "M j, Y @ H:i"
1970
  msgstr ""
1971
 
1972
- #: pro/includes/admin/entries/class-entries.php:1098
1973
  msgid "User:"
1974
  msgstr ""
1975
 
1976
- #: pro/includes/admin/entries/class-entries.php:1110
1977
  msgid "User IP:"
1978
  msgstr ""
1979
 
1980
- #: pro/includes/admin/entries/class-entries.php:1225
1981
  msgid "Print"
1982
  msgstr ""
1983
 
1984
- #: pro/includes/admin/entries/class-entries.php:1232
1985
  msgid "Export (CSV)"
1986
  msgstr ""
1987
 
1988
- #: pro/includes/admin/entries/class-entries.php:1239
1989
  msgid "Resend Notifications"
1990
  msgstr ""
1991
 
@@ -2470,7 +2533,7 @@ msgstr ""
2470
  msgid "Items"
2471
  msgstr ""
2472
 
2473
- #: pro/includes/fields/class-payment-multiple.php:180
2474
  msgid "Invalid payment option"
2475
  msgstr ""
2476
 
@@ -2544,6 +2607,106 @@ msgstr ""
2544
  msgid "Please enter a valid URL"
2545
  msgstr ""
2546
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2547
  #: pro/includes/templates/class-donation.php:20
2548
  msgid "Donation Form"
2549
  msgstr ""
@@ -2622,29 +2785,43 @@ msgstr ""
2622
  msgid "Click the marketing tab to configure your newsletter service provider"
2623
  msgstr ""
2624
 
2625
- #: pro/wpforms-pro.php:190
2626
  msgid "Disable storing entry information in WordPress"
2627
  msgstr ""
2628
 
2629
- #: pro/wpforms-pro.php:249
2630
  msgid "Add New Notification"
2631
  msgstr ""
2632
 
2633
- #: pro/wpforms-pro.php:388
2634
  msgid "Send"
2635
  msgstr ""
2636
 
2637
- #: pro/wpforms-pro.php:389
2638
  msgid "Don't send"
2639
  msgstr ""
2640
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2641
  #: wpforms.php:54
2642
  msgid "Please deactivate WPForms Lite before activating WPForms"
2643
  msgstr ""
2644
 
2645
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.3) #-#-#-#-#
2646
  #. Plugin URI of the plugin/theme
2647
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.3) #-#-#-#-#
2648
  #. Author URI of the plugin/theme
2649
  msgid "https://wpforms.com"
2650
  msgstr ""
2
  # This file is distributed under the same license as the WPForms package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WPForms 1.2.4\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
+ "POT-Creation-Date: 2016-07-07 20:06:51+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
42
 
43
  #: includes/admin/builder/class-builder.php:260
44
  #: includes/admin/class-editor.php:96
45
+ #: pro/includes/admin/entries/class-entries.php:976
46
  msgid "Cancel"
47
  msgstr ""
48
 
113
 
114
  #: includes/admin/builder/class-builder.php:277
115
  #: lite/includes/admin/class-settings.php:116
116
+ #: pro/includes/admin/class-settings.php:120
117
  msgid "Saving ..."
118
  msgstr ""
119
 
126
  msgstr ""
127
 
128
  #: includes/admin/builder/class-builder.php:280
129
+ #: includes/admin/builder/class-builder.php:341
130
  msgid "Loading"
131
  msgstr ""
132
 
151
  msgstr ""
152
 
153
  #: includes/admin/builder/class-builder.php:290
154
+ #: includes/admin/builder/class-builder.php:391
155
  msgid "Exit"
156
  msgstr ""
157
 
173
 
174
  #: includes/admin/builder/class-builder.php:296
175
  #: includes/fields/class-base.php:235 lite/wpforms-lite.php:75
176
+ #: pro/wpforms-pro.php:257
177
  msgid "Off"
178
  msgstr ""
179
 
180
  #: includes/admin/builder/class-builder.php:297
181
  #: includes/fields/class-base.php:235 lite/wpforms-lite.php:74
182
+ #: pro/wpforms-pro.php:256
183
  msgid "On"
184
  msgstr ""
185
 
195
  msgstr ""
196
 
197
  #: includes/admin/builder/class-builder.php:302
198
+ #: includes/admin/builder/functions.php:210 includes/fields/class-base.php:335
199
  msgid "Show Smart Tags"
200
  msgstr ""
201
 
212
  msgid "-- Select Choice --"
213
  msgstr ""
214
 
215
+ #: includes/admin/builder/class-builder.php:364
216
  msgid "Now editing"
217
  msgstr ""
218
 
219
+ #: includes/admin/builder/class-builder.php:374
220
  #: pro/includes/admin/entries/class-entries.php:510
221
  msgid "Preview Form"
222
  msgstr ""
223
 
224
+ #: includes/admin/builder/class-builder.php:376
225
  #: includes/admin/overview/class-overview-table.php:159
226
  msgid "Preview"
227
  msgstr ""
228
 
229
+ #: includes/admin/builder/class-builder.php:379
230
  msgid "Embed Form"
231
  msgstr ""
232
 
233
+ #: includes/admin/builder/class-builder.php:381
234
  msgid "Embed"
235
  msgstr ""
236
 
237
+ #: includes/admin/builder/class-builder.php:384
238
  msgid "Save Form"
239
  msgstr ""
240
 
241
+ #: includes/admin/builder/class-builder.php:386
242
+ #: pro/includes/admin/class-settings.php:410
243
  msgid "Save"
244
  msgstr ""
245
 
246
+ #: includes/admin/builder/functions.php:150
247
  msgid "Field #"
248
  msgstr ""
249
 
301
  msgstr ""
302
 
303
  #: includes/admin/builder/panels/class-settings.php:21
304
+ #: includes/admin/class-menu.php:84 lite/includes/admin/class-settings.php:349
305
+ #: pro/includes/admin/class-settings.php:667
306
  msgid "Settings"
307
  msgstr ""
308
 
309
  #: includes/admin/builder/panels/class-settings.php:57
310
  #: includes/admin/builder/panels/class-settings.php:87
311
  #: lite/includes/admin/class-settings.php:137
312
+ #: pro/includes/admin/class-settings.php:141
313
  msgid "General"
314
  msgstr ""
315
 
316
  #: includes/admin/builder/panels/class-settings.php:58
317
+ #: lite/wpforms-lite.php:60 lite/wpforms-lite.php:70 pro/wpforms-pro.php:243
318
+ #: pro/wpforms-pro.php:252
319
  msgid "Notifications"
320
  msgstr ""
321
 
370
 
371
  #: includes/admin/builder/panels/class-settings.php:258
372
  #: includes/templates/class-suggestion.php:74 lite/wpforms-lite.php:172
373
+ #: pro/wpforms-pro.php:360
374
  msgid "Message"
375
  msgstr ""
376
 
467
  "a>?"
468
  msgstr ""
469
 
470
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.4) #-#-#-#-#
471
  #. Plugin Name of the plugin/theme
472
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.4) #-#-#-#-#
473
  #. Author of the plugin/theme
474
  #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
475
  #: includes/admin/class-menu.php:51
496
 
497
  #: includes/admin/class-menu.php:72
498
  #: includes/admin/overview/class-overview-table.php:152
499
+ #: pro/includes/admin/entries/class-entries.php:409 pro/wpforms-pro.php:198
500
  msgid "Entries"
501
  msgstr ""
502
 
631
  #: includes/admin/overview/class-overview-table.php:191
632
  #: pro/includes/admin/entries/class-entries-table.php:278
633
  #: pro/includes/admin/entries/class-entries-table.php:299
634
+ #: pro/includes/admin/entries/class-entries.php:1011
635
  msgid "Delete"
636
  msgstr ""
637
 
680
  msgid "WPForms Logs"
681
  msgstr ""
682
 
683
+ #: includes/class-logging.php:38
684
+ msgid "Logs"
685
+ msgstr ""
686
+
687
  #: includes/class-preview.php:95
688
  msgid "Entry #%d"
689
  msgstr ""
690
 
691
  #: includes/class-preview.php:107
692
+ #: pro/includes/admin/entries/class-entries.php:898
693
  msgid "This entry does not have any fields"
694
  msgstr ""
695
 
696
  #: includes/class-preview.php:124
697
+ #: pro/includes/admin/entries/class-entries.php:914
698
  msgid "Field ID #%d"
699
  msgstr ""
700
 
701
  #: includes/class-preview.php:129
702
+ #: pro/includes/admin/entries/class-entries.php:919
703
  msgid "Empty"
704
  msgstr ""
705
 
723
  msgid "This is a preview of your form. This page not publically accessible."
724
  msgstr ""
725
 
726
+ #: includes/class-preview.php:263
727
+ msgid "Close this window"
728
+ msgstr ""
729
+
730
+ #: includes/class-preview.php:265
731
  msgid " Preview"
732
  msgstr ""
733
 
747
  msgid "WPForms honeypot field triggered."
748
  msgstr ""
749
 
750
+ #: includes/class-process.php:340 lite/wpforms-lite.php:52
751
+ #: pro/wpforms-pro.php:236
752
  msgid "New %s Entry"
753
  msgstr ""
754
 
826
  msgid "Lost Password URL"
827
  msgstr ""
828
 
829
+ #: includes/class-widget.php:127 pro/includes/admin/class-settings.php:493
830
  msgid "No forms"
831
  msgstr ""
832
 
1040
  msgstr ""
1041
 
1042
  #: includes/fields/class-email.php:21
1043
+ #: lite/includes/admin/class-settings.php:211
1044
+ #: pro/includes/admin/class-settings.php:284
1045
  #: pro/includes/templates/class-donation.php:42
1046
  #: pro/includes/templates/class-order.php:42
1047
  #: pro/includes/templates/class-request-quote.php:46
1228
  msgstr ""
1229
 
1230
  #: lite/includes/admin/class-settings.php:117
1231
+ #: pro/includes/admin/class-settings.php:121
1232
  msgid "Are you sure you want to disconnect this account?"
1233
  msgstr ""
1234
 
1235
  #: lite/includes/admin/class-settings.php:118
1236
+ #: pro/includes/admin/class-settings.php:122
1237
  msgid "Upload or Choose Your Image"
1238
  msgstr ""
1239
 
1240
  #: lite/includes/admin/class-settings.php:119
1241
+ #: pro/includes/admin/class-settings.php:123
1242
  msgid "Use Image"
1243
  msgstr ""
1244
 
1245
  #: lite/includes/admin/class-settings.php:138
 
1246
  msgid "System Information"
1247
  msgstr ""
1248
 
1249
  #: lite/includes/admin/class-settings.php:161
1250
+ #: pro/includes/admin/class-settings.php:168
1251
+ #: pro/includes/admin/class-settings.php:368
1252
  msgid "Settings check failed."
1253
  msgstr ""
1254
 
1255
+ #: lite/includes/admin/class-settings.php:180
1256
+ #: pro/includes/admin/class-settings.php:187
1257
  msgid "General settings updated."
1258
  msgstr ""
1259
 
1260
+ #: lite/includes/admin/class-settings.php:197
1261
+ #: pro/includes/admin/class-settings.php:261
1262
  msgid "Include Form Styling"
1263
  msgstr ""
1264
 
1265
+ #: lite/includes/admin/class-settings.php:201
1266
+ #: pro/includes/admin/class-settings.php:265
1267
  msgid "Base and form theme styling"
1268
  msgstr ""
1269
 
1270
+ #: lite/includes/admin/class-settings.php:202
1271
+ #: pro/includes/admin/class-settings.php:266
1272
  msgid "Base styling only"
1273
  msgstr ""
1274
 
1275
+ #: lite/includes/admin/class-settings.php:203
1276
+ #: pro/includes/admin/class-settings.php:267
1277
  #: pro/includes/fields/class-page-break.php:58
1278
  msgid "None"
1279
  msgstr ""
1280
 
1281
+ #: lite/includes/admin/class-settings.php:205
1282
+ #: pro/includes/admin/class-settings.php:269
1283
  msgid "Determines which CSS files to load for the site."
1284
  msgstr ""
1285
 
1286
+ #: lite/includes/admin/class-settings.php:216
1287
+ #: pro/includes/admin/class-settings.php:289
1288
  msgid "Email Template"
1289
  msgstr ""
1290
 
1291
+ #: lite/includes/admin/class-settings.php:220
1292
+ #: pro/includes/admin/class-settings.php:293
1293
  msgid "Default HTML template"
1294
  msgstr ""
1295
 
1296
+ #: lite/includes/admin/class-settings.php:221
1297
+ #: pro/includes/admin/class-settings.php:294
1298
  msgid "Plain Text"
1299
  msgstr ""
1300
 
1301
+ #: lite/includes/admin/class-settings.php:223
1302
+ #: pro/includes/admin/class-settings.php:296
1303
  msgid "Determines how email notifications will be formatted."
1304
  msgstr ""
1305
 
1306
+ #: lite/includes/admin/class-settings.php:228
1307
+ #: pro/includes/admin/class-settings.php:274
1308
+ msgid "Load Assets Globally"
1309
+ msgstr ""
1310
+
1311
+ #: lite/includes/admin/class-settings.php:232
1312
+ #: pro/includes/admin/class-settings.php:278
1313
+ msgid ""
1314
+ "Check this if you would like to load WPForms assets site-wide. Only check if "
1315
+ "your site is having compatibility issues or instructed to by support."
1316
+ msgstr ""
1317
+
1318
+ #: lite/includes/admin/class-settings.php:237
1319
+ #: pro/includes/admin/class-settings.php:301
1320
  msgid "Email Header Image "
1321
  msgstr ""
1322
 
1323
+ #: lite/includes/admin/class-settings.php:249
1324
+ #: pro/includes/admin/class-settings.php:313
1325
  msgid "Upload Image"
1326
  msgstr ""
1327
 
1328
+ #: lite/includes/admin/class-settings.php:251
1329
+ #: pro/includes/admin/class-settings.php:315
1330
  msgid ""
1331
  "Upload or choose a logo to be displayed at the top of email notifications."
1332
  msgstr ""
1333
 
1334
+ #: lite/includes/admin/class-settings.php:252
1335
+ #: pro/includes/admin/class-settings.php:316
1336
  msgid "Recommended size is 300x100 or smaller for best support on all devices."
1337
  msgstr ""
1338
 
1339
+ #: lite/includes/admin/class-settings.php:259
1340
+ #: pro/includes/admin/class-settings.php:323
1341
  msgid "reCAPTCHA"
1342
  msgstr ""
1343
 
1344
+ #: lite/includes/admin/class-settings.php:260
1345
+ #: pro/includes/admin/class-settings.php:324
1346
  msgid ""
1347
  "reCAPTCHA is a free anti-spam service from Google. Its helps protect your "
1348
  "website from spam and abuse while letting real people pass through with "
1352
  "\"_blank\">read our walk through</a> for step-by-step directions."
1353
  msgstr ""
1354
 
1355
+ #: lite/includes/admin/class-settings.php:265
1356
+ #: pro/includes/admin/class-settings.php:329
1357
  msgid "reCAPTCHA Site key"
1358
  msgstr ""
1359
 
1360
+ #: lite/includes/admin/class-settings.php:273
1361
+ #: pro/includes/admin/class-settings.php:337
1362
  msgid "reCAPTCHA Secret key"
1363
  msgstr ""
1364
 
1365
+ #: lite/includes/admin/class-settings.php:282
1366
+ #: pro/includes/admin/class-settings.php:346
1367
  msgid "Save General Settings"
1368
  msgstr ""
1369
 
1370
+ #: lite/wpforms-lite.php:83 pro/wpforms-pro.php:264
1371
  msgid "Default Notification"
1372
  msgstr ""
1373
 
1374
+ #: lite/wpforms-lite.php:91 pro/wpforms-pro.php:279
1375
  msgid "Send To Email Address"
1376
  msgstr ""
1377
 
1378
+ #: lite/wpforms-lite.php:94 pro/wpforms-pro.php:282
1379
  msgid ""
1380
  "Enter the email address to receive form entry notifications. For multiple "
1381
  "notifications, seperate email addresses with a comma."
1382
  msgstr ""
1383
 
1384
+ #: lite/wpforms-lite.php:109 pro/wpforms-pro.php:297
1385
  msgid "Email Subject"
1386
  msgstr ""
1387
 
1388
+ #: lite/wpforms-lite.php:111 pro/wpforms-pro.php:299
1389
  msgid "New Entry: "
1390
  msgstr ""
1391
 
1392
+ #: lite/wpforms-lite.php:125 pro/wpforms-pro.php:313
1393
  msgid "From Name"
1394
  msgstr ""
1395
 
1396
+ #: lite/wpforms-lite.php:141 pro/wpforms-pro.php:329
1397
  msgid "From Email"
1398
  msgstr ""
1399
 
1400
+ #: lite/wpforms-lite.php:157 pro/wpforms-pro.php:345
1401
  msgid "Reply-To"
1402
  msgstr ""
1403
 
1404
+ #: lite/wpforms-lite.php:182 pro/wpforms-pro.php:370
1405
  msgid ""
1406
  "To display all form fields, use the <code>{all_fields}</code> Smart Tag."
1407
  msgstr ""
1450
  msgstr ""
1451
 
1452
  #: pro/includes/admin/builder/panels/class-payments.php:21
1453
+ #: pro/includes/admin/class-settings.php:142
1454
  msgid "Payments"
1455
  msgstr ""
1456
 
1650
  "continue receiving automatic updates."
1651
  msgstr ""
1652
 
1653
+ #: pro/includes/admin/class-settings.php:143
1654
  msgid "Integrations"
1655
  msgstr ""
1656
 
1657
+ #: pro/includes/admin/class-settings.php:144
1658
+ msgid "Import/Export"
1659
+ msgstr ""
1660
+
1661
+ #: pro/includes/admin/class-settings.php:145
1662
+ msgid "System Info"
1663
+ msgstr ""
1664
+
1665
+ #: pro/includes/admin/class-settings.php:194
1666
  msgid "Please enter a license key to verify."
1667
  msgstr ""
1668
 
1669
+ #: pro/includes/admin/class-settings.php:224
1670
  msgid "License"
1671
  msgstr ""
1672
 
1673
+ #: pro/includes/admin/class-settings.php:225
1674
  msgid "Your license key provides access to updates and Add-ons. "
1675
  msgstr ""
1676
 
1677
+ #: pro/includes/admin/class-settings.php:230
1678
  msgid "License Key"
1679
  msgstr ""
1680
 
1681
+ #: pro/includes/admin/class-settings.php:234
1682
  msgid "Verify Key"
1683
  msgstr ""
1684
 
1685
+ #: pro/includes/admin/class-settings.php:236
1686
  msgid "Deactivate Key"
1687
  msgstr ""
1688
 
1689
+ #: pro/includes/admin/class-settings.php:244
1690
  msgid "License Key Type"
1691
  msgstr ""
1692
 
1693
+ #: pro/includes/admin/class-settings.php:247
1694
  msgid "Your license key type for this site is <strong>%s.</strong>"
1695
  msgstr ""
1696
 
1697
+ #: pro/includes/admin/class-settings.php:248
1698
  msgid "Refresh Key"
1699
  msgstr ""
1700
 
1701
+ #: pro/includes/admin/class-settings.php:249
1702
  msgid ""
1703
  "If your license has been upgraded or is incorrect, you may force a refresh."
1704
  msgstr ""
1705
 
1706
+ #: pro/includes/admin/class-settings.php:379
1707
  msgid "Settings updated."
1708
  msgstr ""
1709
 
1710
+ #: pro/includes/admin/class-settings.php:393
1711
  msgid "Currency"
1712
  msgstr ""
1713
 
1714
+ #: pro/includes/admin/class-settings.php:397
1715
  msgid "US Dollars (USD)"
1716
  msgstr ""
1717
 
1718
+ #: pro/includes/admin/class-settings.php:399
1719
  msgid "Determines which currency to use for payments."
1720
  msgstr ""
1721
 
1722
+ #: pro/includes/admin/class-settings.php:430
1723
  msgid ""
1724
  "You do not have any marketing add-ons activated. You can head over to the <a "
1725
  "href=\"%s\">Add-Ons page</a> to install and activate the add-on for your "
1726
  "provider."
1727
  msgstr ""
1728
 
1729
+ #: pro/includes/admin/class-settings.php:451
1730
+ msgid "Form(s) imported"
1731
  msgstr ""
1732
 
1733
+ #: pro/includes/admin/class-settings.php:460
1734
+ msgid "Form Import"
1735
  msgstr ""
1736
 
1737
+ #: pro/includes/admin/class-settings.php:465
1738
+ msgid "Select an export file."
1739
+ msgstr ""
1740
+
1741
+ #: pro/includes/admin/class-settings.php:471
1742
+ msgid "Import"
1743
+ msgstr ""
1744
+
1745
+ #: pro/includes/admin/class-settings.php:478
1746
+ msgid "Form Export"
1747
+ msgstr ""
1748
+
1749
+ #: pro/includes/admin/class-settings.php:483
1750
+ msgid ""
1751
+ "Select form(s) to download an export file. This can be imported into another "
1752
+ "site."
1753
+ msgstr ""
1754
+
1755
+ #: pro/includes/admin/class-settings.php:499
1756
+ msgid "Export"
1757
+ msgstr ""
1758
+
1759
+ #: pro/includes/admin/class-settings.php:561
1760
+ msgid "Please upload a valid .json form export file."
1761
+ msgstr ""
1762
+
1763
+ #: pro/includes/admin/class-settings.php:561
1764
  #: pro/includes/admin/entries/class-entries-export.php:293
1765
  msgid "Error"
1766
  msgstr ""
1767
 
1768
+ #: pro/includes/admin/entries/class-entries-export.php:173
1769
+ msgid "ID"
1770
+ msgstr ""
1771
+
1772
+ #: pro/includes/admin/entries/class-entries-export.php:293
1773
+ msgid "You do not have permission to export entries."
1774
+ msgstr ""
1775
+
1776
  #: pro/includes/admin/entries/class-entries-table.php:99
1777
  msgid "All"
1778
  msgstr ""
1786
  msgstr ""
1787
 
1788
  #: pro/includes/admin/entries/class-entries-table.php:120
1789
+ #: pro/includes/admin/entries/class-entries.php:1218
1790
  msgid "Actions"
1791
  msgstr ""
1792
 
1827
  msgstr ""
1828
 
1829
  #: pro/includes/admin/entries/class-entries-table.php:294
1830
+ #: pro/includes/admin/entries/class-entries.php:1249
1831
  msgid "Mark Unread"
1832
  msgstr ""
1833
 
1834
  #: pro/includes/admin/entries/class-entries-table.php:295
1835
+ #: pro/includes/admin/entries/class-entries.php:1201
1836
  msgid "Star"
1837
  msgstr ""
1838
 
1839
  #: pro/includes/admin/entries/class-entries-table.php:296
1840
+ #: pro/includes/admin/entries/class-entries.php:1201
1841
  msgid "Unstar"
1842
  msgstr ""
1843
 
1889
  msgstr ""
1890
 
1891
  #: pro/includes/admin/entries/class-entries.php:267
1892
+ #: pro/includes/admin/entries/class-entries.php:886
1893
  msgid "Hide Empty Fields"
1894
  msgstr ""
1895
 
1896
  #: pro/includes/admin/entries/class-entries.php:268
1897
+ #: pro/includes/admin/entries/class-entries.php:886
1898
  msgid "Show Empty Fields"
1899
  msgstr ""
1900
 
1954
  msgid "Form not found."
1955
  msgstr ""
1956
 
1957
+ #: pro/includes/admin/entries/class-entries.php:800
1958
  msgid "Notifications sent!"
1959
  msgstr ""
1960
 
1961
+ #: pro/includes/admin/entries/class-entries.php:827
1962
  msgid "View Entry"
1963
  msgstr ""
1964
 
1965
+ #: pro/includes/admin/entries/class-entries.php:829
1966
  msgid "Back to All Entries"
1967
  msgstr ""
1968
 
1969
+ #: pro/includes/admin/entries/class-entries.php:833
1970
  msgid "Entry %s of %s"
1971
  msgstr ""
1972
 
1973
+ #: pro/includes/admin/entries/class-entries.php:836
1974
  msgid "Previous form entry"
1975
  msgstr ""
1976
 
1977
+ #: pro/includes/admin/entries/class-entries.php:837
1978
  msgid "Current form entry"
1979
  msgstr ""
1980
 
1981
+ #: pro/includes/admin/entries/class-entries.php:838
1982
  msgid "Next form entry"
1983
  msgstr ""
1984
 
1985
+ #: pro/includes/admin/entries/class-entries.php:954
1986
  msgid "Notes"
1987
  msgstr ""
1988
 
1989
+ #: pro/includes/admin/entries/class-entries.php:960
1990
+ #: pro/includes/admin/entries/class-entries.php:975
1991
  msgid "Add Note"
1992
  msgstr ""
1993
 
1994
+ #: pro/includes/admin/entries/class-entries.php:984
1995
  msgid "No notes."
1996
  msgstr ""
1997
 
1998
+ #: pro/includes/admin/entries/class-entries.php:993
1999
+ #: pro/includes/admin/entries/class-entries.php:1085
2000
  msgid "M j, Y @ g:ia"
2001
  msgstr ""
2002
 
2003
+ #: pro/includes/admin/entries/class-entries.php:1011
2004
  msgid "Added by"
2005
  msgstr ""
2006
 
2007
+ #: pro/includes/admin/entries/class-entries.php:1011
2008
  msgid "on"
2009
  msgstr ""
2010
 
2011
+ #: pro/includes/admin/entries/class-entries.php:1044
2012
  msgid "Debug Information"
2013
  msgstr ""
2014
 
2015
+ #: pro/includes/admin/entries/class-entries.php:1070
2016
  msgid "Entry Details"
2017
  msgstr ""
2018
 
2019
+ #: pro/includes/admin/entries/class-entries.php:1078
2020
  msgid "Entry ID:"
2021
  msgstr ""
2022
 
2023
+ #: pro/includes/admin/entries/class-entries.php:1084
2024
  msgid "Submitted on:"
2025
  msgstr ""
2026
 
2027
+ #: pro/includes/admin/entries/class-entries.php:1091
2028
  msgid "Modified on:"
2029
  msgstr ""
2030
 
2031
+ #: pro/includes/admin/entries/class-entries.php:1092
2032
  msgid "M j, Y @ H:i"
2033
  msgstr ""
2034
 
2035
+ #: pro/includes/admin/entries/class-entries.php:1100
2036
  msgid "User:"
2037
  msgstr ""
2038
 
2039
+ #: pro/includes/admin/entries/class-entries.php:1112
2040
  msgid "User IP:"
2041
  msgstr ""
2042
 
2043
+ #: pro/includes/admin/entries/class-entries.php:1227
2044
  msgid "Print"
2045
  msgstr ""
2046
 
2047
+ #: pro/includes/admin/entries/class-entries.php:1234
2048
  msgid "Export (CSV)"
2049
  msgstr ""
2050
 
2051
+ #: pro/includes/admin/entries/class-entries.php:1241
2052
  msgid "Resend Notifications"
2053
  msgstr ""
2054
 
2533
  msgid "Items"
2534
  msgstr ""
2535
 
2536
+ #: pro/includes/fields/class-payment-multiple.php:179
2537
  msgid "Invalid payment option"
2538
  msgstr ""
2539
 
2607
  msgid "Please enter a valid URL"
2608
  msgstr ""
2609
 
2610
+ #: pro/includes/payments/functions.php:21
2611
+ msgid "U.S. Dollar"
2612
+ msgstr ""
2613
+
2614
+ #: pro/includes/payments/functions.php:22
2615
+ msgid "Pound Sterling"
2616
+ msgstr ""
2617
+
2618
+ #: pro/includes/payments/functions.php:23
2619
+ msgid "Euro"
2620
+ msgstr ""
2621
+
2622
+ #: pro/includes/payments/functions.php:24
2623
+ msgid "Australian Dollar"
2624
+ msgstr ""
2625
+
2626
+ #: pro/includes/payments/functions.php:25
2627
+ msgid "Brazilian Real"
2628
+ msgstr ""
2629
+
2630
+ #: pro/includes/payments/functions.php:26
2631
+ msgid "Canadian Dollar"
2632
+ msgstr ""
2633
+
2634
+ #: pro/includes/payments/functions.php:27
2635
+ msgid "Czech Koruna"
2636
+ msgstr ""
2637
+
2638
+ #: pro/includes/payments/functions.php:28
2639
+ msgid "Danish Krone"
2640
+ msgstr ""
2641
+
2642
+ #: pro/includes/payments/functions.php:29
2643
+ msgid "Hong Kong Dollar"
2644
+ msgstr ""
2645
+
2646
+ #: pro/includes/payments/functions.php:30
2647
+ msgid "Hungarian Forint"
2648
+ msgstr ""
2649
+
2650
+ #: pro/includes/payments/functions.php:31
2651
+ msgid "Israeli New Sheqel"
2652
+ msgstr ""
2653
+
2654
+ #: pro/includes/payments/functions.php:32
2655
+ msgid "Japanese Yen"
2656
+ msgstr ""
2657
+
2658
+ #: pro/includes/payments/functions.php:33
2659
+ msgid "Malaysian Ringgit"
2660
+ msgstr ""
2661
+
2662
+ #: pro/includes/payments/functions.php:34
2663
+ msgid "Mexican Peso"
2664
+ msgstr ""
2665
+
2666
+ #: pro/includes/payments/functions.php:35
2667
+ msgid "Norwegian Krone"
2668
+ msgstr ""
2669
+
2670
+ #: pro/includes/payments/functions.php:36
2671
+ msgid "New Zealand Dollar"
2672
+ msgstr ""
2673
+
2674
+ #: pro/includes/payments/functions.php:37
2675
+ msgid "Philippine Peso"
2676
+ msgstr ""
2677
+
2678
+ #: pro/includes/payments/functions.php:38
2679
+ msgid "Polish Zloty"
2680
+ msgstr ""
2681
+
2682
+ #: pro/includes/payments/functions.php:39
2683
+ msgid "Russian Ruble"
2684
+ msgstr ""
2685
+
2686
+ #: pro/includes/payments/functions.php:40
2687
+ msgid "Singapore Dollar"
2688
+ msgstr ""
2689
+
2690
+ #: pro/includes/payments/functions.php:41
2691
+ msgid "South African Rand"
2692
+ msgstr ""
2693
+
2694
+ #: pro/includes/payments/functions.php:42
2695
+ msgid "Swedish Krona"
2696
+ msgstr ""
2697
+
2698
+ #: pro/includes/payments/functions.php:43
2699
+ msgid "Swiss Franc"
2700
+ msgstr ""
2701
+
2702
+ #: pro/includes/payments/functions.php:44
2703
+ msgid "Taiwan New Dollar"
2704
+ msgstr ""
2705
+
2706
+ #: pro/includes/payments/functions.php:45
2707
+ msgid "Thai Baht"
2708
+ msgstr ""
2709
+
2710
  #: pro/includes/templates/class-donation.php:20
2711
  msgid "Donation Form"
2712
  msgstr ""
2785
  msgid "Click the marketing tab to configure your newsletter service provider"
2786
  msgstr ""
2787
 
2788
+ #: pro/wpforms-pro.php:185
2789
  msgid "Disable storing entry information in WordPress"
2790
  msgstr ""
2791
 
2792
+ #: pro/wpforms-pro.php:244
2793
  msgid "Add New Notification"
2794
  msgstr ""
2795
 
2796
+ #: pro/wpforms-pro.php:383
2797
  msgid "Send"
2798
  msgstr ""
2799
 
2800
+ #: pro/wpforms-pro.php:384
2801
  msgid "Don't send"
2802
  msgstr ""
2803
 
2804
+ #: pro/wpforms-pro.php:386
2805
+ msgid "this notification if"
2806
+ msgstr ""
2807
+
2808
+ #: pro/wpforms-pro.php:387
2809
+ msgid "Email notifications"
2810
+ msgstr ""
2811
+
2812
+ #: pro/wpforms-pro.php:390
2813
+ msgid ""
2814
+ "Install the <a href=\"%s\">Conditional Logic add-on</a> to enable "
2815
+ "conditional logic for Email Notifications."
2816
+ msgstr ""
2817
+
2818
  #: wpforms.php:54
2819
  msgid "Please deactivate WPForms Lite before activating WPForms"
2820
  msgstr ""
2821
 
2822
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.4) #-#-#-#-#
2823
  #. Plugin URI of the plugin/theme
2824
+ #. #-#-#-#-# wpforms.pot (WPForms 1.2.4) #-#-#-#-#
2825
  #. Author URI of the plugin/theme
2826
  msgid "https://wpforms.com"
2827
  msgstr ""
lite/includes/admin/class-settings.php CHANGED
@@ -169,6 +169,7 @@ class WPForms_Settings {
169
  $this->options['email-template'] = !empty( $_POST['email-template'] ) ? esc_attr( $_POST['email-template'] ) : 'default';
170
  $this->options['email-header-image'] = !empty( $_POST['email-header-image'] ) ? esc_url_raw( $_POST['email-header-image'] ) : '';
171
  $this->options['disable-css'] = !empty( $_POST['disable-css'] ) ? intval( $_POST['disable-css'] ) : '1';
 
172
  $this->options['recaptcha-site-key'] = !empty( $_POST['recaptcha-site-key'] ) ? esc_html( $_POST['recaptcha-site-key'] ) : '';
173
  $this->options['recaptcha-secret-key'] = !empty( $_POST['recaptcha-secret-key'] ) ? esc_html( $_POST['recaptcha-secret-key'] ) : '';
174
  $this->options = apply_filters( 'wpforms_settings_save', $this->options, $_POST, 'general' );
@@ -222,6 +223,15 @@ class WPForms_Settings {
222
  <p class="description"><?php _e( 'Determines how email notifications will be formatted.', 'wpforms' ); ?></p>
223
  </td>
224
  </tr>
 
 
 
 
 
 
 
 
 
225
  <tr>
226
  <th scope="row">
227
  <label for="wpforms-settings-email-header-image"><?php _e( 'Email Header Image ', 'wpforms' ); ?></label>
169
  $this->options['email-template'] = !empty( $_POST['email-template'] ) ? esc_attr( $_POST['email-template'] ) : 'default';
170
  $this->options['email-header-image'] = !empty( $_POST['email-header-image'] ) ? esc_url_raw( $_POST['email-header-image'] ) : '';
171
  $this->options['disable-css'] = !empty( $_POST['disable-css'] ) ? intval( $_POST['disable-css'] ) : '1';
172
+ $this->options['global-assets'] = !empty( $_POST['global-assets'] ) ? '1' : false;
173
  $this->options['recaptcha-site-key'] = !empty( $_POST['recaptcha-site-key'] ) ? esc_html( $_POST['recaptcha-site-key'] ) : '';
174
  $this->options['recaptcha-secret-key'] = !empty( $_POST['recaptcha-secret-key'] ) ? esc_html( $_POST['recaptcha-secret-key'] ) : '';
175
  $this->options = apply_filters( 'wpforms_settings_save', $this->options, $_POST, 'general' );
223
  <p class="description"><?php _e( 'Determines how email notifications will be formatted.', 'wpforms' ); ?></p>
224
  </td>
225
  </tr>
226
+ <tr>
227
+ <th scope="row">
228
+ <label for="wpforms-settings-general-global-assets"><?php _e( 'Load Assets Globally', 'wpforms' ); ?></label>
229
+ </th>
230
+ <td>
231
+ <input type="checkbox" name="global-assets" id="wpforms-settings-general-global-assets" value="1" <?php checked( '1', $this->get( 'global-assets' ) ); ?>>
232
+ <label for="wpforms-settings-general-global-assets"><?php _e( 'Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support.', 'wpforms_paypals' ); ?></label>
233
+ </td>
234
+ </tr>
235
  <tr>
236
  <th scope="row">
237
  <label for="wpforms-settings-email-header-image"><?php _e( 'Email Header Image ', 'wpforms' ); ?></label>
readme.txt CHANGED
@@ -160,6 +160,12 @@ Syed Balkhi
160
 
161
  == Changelog ==
162
 
 
 
 
 
 
 
163
  = 1.2.3.2 =
164
  - Fixed: Default field validation considered 0 as empty
165
 
160
 
161
  == Changelog ==
162
 
163
+ = 1.2.4 =
164
+ - Added: Additional logging and error reporting
165
+ - Changed: Footer asset detection priority, for improved capatibility with other services
166
+ - Changed: Refactored and refined front-end javascript
167
+ - Fixed: Rogue PHP notices
168
+
169
  = 1.2.3.2 =
170
  - Fixed: Default field validation considered 0 as empty
171
 
wpforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
- * Version: 1.2.3.1
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
@@ -81,7 +81,7 @@ final class WPForms {
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
- public $version = '1.2.3.1';
85
 
86
  /**
87
  * The form data handler instance.
5
  * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms.
6
  * Author: WPForms
7
  * Author URI: https://wpforms.com
8
+ * Version: 1.2.4
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
+ public $version = '1.2.4';
85
 
86
  /**
87
  * The form data handler instance.