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

Version Description

  • Added: Form notification message setting
  • Added: Additional Smart Tags available inside Form Settings panels
  • Added: Process Smart Tags inside form confirmation messages and URLs
  • Added: Hide WPForms Preview page from WordPress dashboard
  • Added: System Details tab to WPForms Settings, to display debug information, etc
  • Changed: Many form builder javascript improvements
  • Changed: Improved internal logging and debugging tools
  • Fixed: Large forms not always saving because of max_input_vars PHP setting
Download this release

Release Info

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

Code changes from version 1.2.2.2 to 1.2.3

assets/css/admin-builder-settings.css CHANGED
@@ -7,4 +7,34 @@
7
 
8
  #wpforms-panel-settings .wpforms-panel-sidebar {
9
  /**/
10
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  #wpforms-panel-settings .wpforms-panel-sidebar {
9
  /**/
10
+ }
11
+
12
+ #wpforms-panel-settings .wpforms-panel-content .wpforms-notification {
13
+ border: 1px solid #d3d3d3;
14
+ margin: 0 0 20px 0;
15
+ }
16
+
17
+ #wpforms-panel-settings .wpforms-panel-content .wpforms-notification-header {
18
+ background-color: #f1f1f1;
19
+ padding: 10px 20px;
20
+ font-size: 16px;
21
+ margin: 0 0 20px 0;
22
+ }
23
+
24
+ #wpforms-panel-settings .wpforms-panel-content .wpforms-notification-delete {
25
+ background-color: transparent;
26
+ color: #fff;
27
+ cursor: pointer;
28
+ -webkit-appearance: none;
29
+ border: none;
30
+ font-size: 16px;
31
+ color: #d22222;
32
+ line-height: 1;
33
+ margin-top: -2px;
34
+ float: right;
35
+ }
36
+
37
+
38
+ #wpforms-panel-settings .wpforms-panel-content .wpforms-notification .wpforms-panel-field {
39
+ padding: 0 20px;
40
+ }
assets/css/admin-builder.css CHANGED
@@ -481,6 +481,12 @@ body {
481
  font-size: 14px;
482
  }
483
 
 
 
 
 
 
 
484
  #wpforms-builder .wpforms-panel-sidebar-section {
485
  color: #444;
486
  display: block;
@@ -545,6 +551,20 @@ body {
545
  border-bottom: 1px solid #d3d3d3;
546
  }
547
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
  #wpforms-builder .wpforms-panel-content-section-default {
549
  background: url(../images/builder-default-arrow.png) no-repeat;
550
  background-size: 148px 140px;
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;
488
+ }
489
+
490
  #wpforms-builder .wpforms-panel-sidebar-section {
491
  color: #444;
492
  display: block;
551
  border-bottom: 1px solid #d3d3d3;
552
  }
553
 
554
+ #wpforms-builder .wpforms-panel-content-section-title button {
555
+ background-color: #0e6cad;
556
+ color: #fff;
557
+ border: none;
558
+ -webkit-appearance: none;
559
+ border-radius: 2px;
560
+ font-size: 14px;
561
+ font-weight: 500;
562
+ float: right;
563
+ padding: 10px;
564
+ margin-top: -10px;
565
+ cursor: pointer;
566
+ }
567
+
568
  #wpforms-builder .wpforms-panel-content-section-default {
569
  background: url(../images/builder-default-arrow.png) no-repeat;
570
  background-size: 148px 140px;
assets/css/admin-settings.css CHANGED
@@ -189,4 +189,22 @@
189
 
190
  .wpforms-settings-provider-accounts-connect p {
191
  margin: 0 0 15px 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  }
189
 
190
  .wpforms-settings-provider-accounts-connect p {
191
  margin: 0 0 15px 0;
192
+ }
193
+
194
+ /* System Details tab
195
+ -------------------------------------------------------------- */
196
+
197
+ #wpforms-settings-system {
198
+ padding-top: 20px;
199
+ }
200
+
201
+ #wpforms-settings-system .system-info-textarea {
202
+ width: 100%;
203
+ height: 400px;
204
+ font-family: Menlo,Monaco,monospace;
205
+ background: #fff;
206
+ white-space: pre;
207
+ overflow: auto;
208
+ display: block;
209
+ padding: 20px;
210
  }
assets/css/wpforms-full.css CHANGED
@@ -416,6 +416,7 @@ div.wpforms-container-full .wpforms-form .wpforms-page-button {
416
  font-weight: 400;
417
  margin: 0 5px;
418
  min-width: 90px;
 
419
  }
420
 
421
  div.wpforms-container-full .wpforms-form input[type=submit]:hover,
416
  font-weight: 400;
417
  margin: 0 5px;
418
  min-width: 90px;
419
+ text-align: center;
420
  }
421
 
422
  div.wpforms-container-full .wpforms-form input[type=submit]:hover,
assets/js/admin-builder.js CHANGED
@@ -222,7 +222,8 @@
222
  } else {
223
 
224
  // Show all fields or narrow to specific field types
225
- var allowed = $this.data('fields');
 
226
  if ( allowed.length ) {
227
  var fields = wpf.getFields(allowed.split(','));
228
  } else {
@@ -231,19 +232,30 @@
231
 
232
  // Create smart tags list
233
  var smartTagList = '<ul class="smart-tags-list-display">';
234
- if (!fields) {
235
- smartTagList += '<li class="heading">'+wpforms_builder.fields_unavailable+'</li>';
236
- } else {
237
- smartTagList += '<li class="heading">'+wpforms_builder.fields_available+'</li>';
238
- for(var key in fields) {
239
- if (fields[key].label) {
240
- var label = wpf.sanitizeString(fields[key].label);
241
- } else {
242
- var label = wpforms_builder.field+' #'+fields[key].id;
 
 
 
 
243
  }
244
- smartTagList += '<li><a href="#" data-fieldid="'+fields[key].id+'">'+label+'</a></li>';
245
  }
246
  }
 
 
 
 
 
 
 
 
247
  smartTagList += '</ul>';
248
 
249
  $label.after(smartTagList);
@@ -263,19 +275,29 @@
263
 
264
  var $this = $(el),
265
  $list = $this.closest('.smart-tags-list-display'),
266
- $label = $list.prev('label'),
267
- $input = $list.next('input[type=text]'),
268
- fieldID = $this.data('fieldid');
 
 
 
 
 
 
269
 
270
  // insert smart tag
271
- $input.insertAtCaret('{field_id="'+fieldID+'"}');
272
-
 
 
 
 
273
  // remove list, all done!
274
  $list.slideUp(400, function() {
275
  $list.remove();
276
  });
277
 
278
- $label.find('toggle-smart-tag-display span').text(wpforms_builder.smart_tags_show);
279
  },
280
 
281
  /**
@@ -1377,6 +1399,18 @@
1377
  $(document).on('change', '#wpforms-panel-field-settings-notification_enable', function(e) {
1378
  WPFormsBuilder.notificationToggle();
1379
  });
 
 
 
 
 
 
 
 
 
 
 
 
1380
  },
1381
 
1382
  /**
@@ -1434,12 +1468,102 @@
1434
  notificationToggle: function() {
1435
  var $notification = $('#wpforms-panel-field-settings-notification_enable');
1436
  if ( $notification.find('option:selected').val() === '0'){
1437
- $notification.parent().parent().find('.wpforms-panel-field').not($notification.parent()).hide();
1438
  } else {
1439
- $notification.parent().parent().find('.wpforms-panel-field').not($notification.parent()).show();
1440
  }
1441
  },
1442
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1443
  //--------------------------------------------------------------------//
1444
  // Save and Exit
1445
  //--------------------------------------------------------------------//
@@ -1500,7 +1624,7 @@
1500
 
1501
  var data = {
1502
  action: 'wpforms_save_form',
1503
- data : $('#wpforms-builder-form').serialize(),
1504
  id : s.formID,
1505
  nonce : wpforms_builder.nonce
1506
  }
222
  } else {
223
 
224
  // Show all fields or narrow to specific field types
225
+ var allowed = $this.data('fields'),
226
+ type = $this.data('type');
227
  if ( allowed.length ) {
228
  var fields = wpf.getFields(allowed.split(','));
229
  } else {
232
 
233
  // Create smart tags list
234
  var smartTagList = '<ul class="smart-tags-list-display">';
235
+
236
+ if (type === 'fields' || type === 'all') {
237
+ if (!fields) {
238
+ smartTagList += '<li class="heading">'+wpforms_builder.fields_unavailable+'</li>';
239
+ } else {
240
+ smartTagList += '<li class="heading">'+wpforms_builder.fields_available+'</li>';
241
+ for(var key in fields) {
242
+ if (fields[key].label) {
243
+ var label = wpf.sanitizeString(fields[key].label);
244
+ } else {
245
+ var label = wpforms_builder.field+' #'+fields[key].id;
246
+ }
247
+ smartTagList += '<li><a href="#" data-type="field" data-meta=\'' + fields[key].id + '\'>'+label+'</a></li>';
248
  }
 
249
  }
250
  }
251
+
252
+ if (type === 'other' || type === 'all') {
253
+ smartTagList += '<li class="heading">'+wpforms_builder.other+'</li>';
254
+ for(var key in wpforms_builder.smart_tags) {
255
+ smartTagList += '<li><a href="#" data-type="other" data-meta=\'' + key+ '\'>'+wpforms_builder.smart_tags[key]+'</a></li>';
256
+ }
257
+ }
258
+
259
  smartTagList += '</ul>';
260
 
261
  $label.after(smartTagList);
275
 
276
  var $this = $(el),
277
  $list = $this.closest('.smart-tags-list-display'),
278
+ $parent = $list.parent(),
279
+ $label = $parent.find('label'),
280
+ $input = $parent.find('input[type=text]'),
281
+ meta = $this.data('meta'),
282
+ type = $this.data('type');
283
+
284
+ if ( ! $input.length ) {
285
+ $input = $parent.find('textarea');
286
+ }
287
 
288
  // insert smart tag
289
+ if ( type === 'field' ) {
290
+ $input.insertAtCaret('{field_id="'+meta+'"}');
291
+ } else {
292
+ $input.insertAtCaret('{'+meta+'}');
293
+ }
294
+
295
  // remove list, all done!
296
  $list.slideUp(400, function() {
297
  $list.remove();
298
  });
299
 
300
+ $label.find('.toggle-smart-tag-display span').text(wpforms_builder.smart_tags_show);
301
  },
302
 
303
  /**
1399
  $(document).on('change', '#wpforms-panel-field-settings-notification_enable', function(e) {
1400
  WPFormsBuilder.notificationToggle();
1401
  });
1402
+
1403
+ // Add New notification settings block
1404
+ $(document).on('click', '.wpforms-notifications-add', function(e) {
1405
+ e.preventDefault();
1406
+ WPFormsBuilder.notificationAdd();
1407
+ });
1408
+
1409
+ // Add New notification settings block
1410
+ $(document).on('click', '.wpforms-notification-delete', function(e) {
1411
+ e.preventDefault();
1412
+ WPFormsBuilder.notificationDelete($(this));
1413
+ });
1414
  },
1415
 
1416
  /**
1468
  notificationToggle: function() {
1469
  var $notification = $('#wpforms-panel-field-settings-notification_enable');
1470
  if ( $notification.find('option:selected').val() === '0'){
1471
+ $notification.parent().parent().find('.wpforms-notification').hide();
1472
  } else {
1473
+ $notification.parent().parent().find('.wpforms-notification').show();
1474
  }
1475
  },
1476
 
1477
+ /**
1478
+ * Add new notification.
1479
+ *
1480
+ * @since 1.2.3
1481
+ */
1482
+ notificationAdd: function() {
1483
+
1484
+ var nextID = Number($('.wpforms-notifications-add').attr('data-next_id'));
1485
+ namePrompt = wpforms_builder.notification_prompt,
1486
+ nameField = '<input autofocus="" type="text" id="notification-name" placeholder="'+wpforms_builder.notification_ph+'">',
1487
+ nameError = '<p class="error">'+wpforms_builder.notification_error+'</p>',
1488
+ modalContent = namePrompt+nameField+nameError;
1489
+
1490
+ $.confirm({
1491
+ title: false,
1492
+ content: modalContent,
1493
+ confirm: function () {
1494
+ var input = this.$b.find('input#notification-name'),
1495
+ error = this.$b.find('.error');
1496
+ if (input.val() == '') {
1497
+ error.show();
1498
+ return false;
1499
+ } else {
1500
+ var $firstNotification = $('.wpforms-notification').first(),
1501
+ $newNotification = $firstNotification.clone();
1502
+
1503
+ $newNotification.find('.wpforms-notification-header span').text(input.val());
1504
+ $newNotification.find('input, textarea, select').each(function(index, el) {
1505
+ if ($(this).attr('name')) {
1506
+ $(this).val('').attr('name', $(this).attr('name').replace(/\[(\d+)\]/, '['+nextID+']'));
1507
+ if ($(this).is('select')) {
1508
+ $(this).find('option:first').prop('selected',true);
1509
+ } else if ( $(this).attr('type') === 'checkbox') {
1510
+ $(this).prop('checked', false).val('1');
1511
+ } else {
1512
+ $(this).val('');
1513
+ }
1514
+ }
1515
+ });
1516
+ $newNotification.find('.wpforms-notification-header input').val(input.val());
1517
+ $newNotification.find('.email-msg textarea').val('{all_fields}');
1518
+ $newNotification.find('.email-recipient input').val('{admin_email}');
1519
+ // Conditional logic, if present
1520
+ var $conditionalLogic = $newNotification.find('.wpforms-conditional-block');
1521
+ if ($conditionalLogic.length) {
1522
+ $conditionalLogic.find('.wpforms-conditional-group').not(':first').remove();
1523
+ $conditionalLogic.find('.wpforms-conditional-row').not(':first').remove();
1524
+ $conditionalLogic.find('.wpforms-conditional-row').attr('data-input-name', 'settings[notifications]['+nextID+']');
1525
+ $conditionalLogic.find('.wpforms-conditional-field').attr('data-groupid', '0').attr('data-ruleid', '0');
1526
+ $conditionalLogic.find('.wpforms-conditional-row select').each(function(index, el) {
1527
+ if ($(this).attr('name')) {
1528
+ $(this).attr('name', $(this).attr('name').replace(/\[(\d+)\]\[(\d+)\]/, '[0][0]'));
1529
+ }
1530
+ });
1531
+ $conditionalLogic.find('.wpforms-conditional-row').find('.value').empty().append('<select>');
1532
+ $conditionalLogic.find('.wpforms-conditional-groups').hide();
1533
+ }
1534
+ $firstNotification.before( $newNotification );
1535
+ $('.wpforms-notifications-add').attr('data-next_id', nextID+1);
1536
+ }
1537
+ }
1538
+ });
1539
+ },
1540
+
1541
+ /**
1542
+ * Delete notification.
1543
+ *
1544
+ * @since 1.2.3
1545
+ */
1546
+ notificationDelete: function(el) {
1547
+
1548
+ var $this = $(el);
1549
+
1550
+ $.confirm({
1551
+ title: false,
1552
+ content: wpforms_builder.notification_delete,
1553
+ confirm: function () {
1554
+ var notifications = $('.wpforms-notification');
1555
+ if ( notifications.length <= 1 ) {
1556
+ $.alert({
1557
+ title: false,
1558
+ content: wpforms_builder.notification_error2
1559
+ });
1560
+ } else {
1561
+ $this.closest('.wpforms-notification').remove();
1562
+ }
1563
+ }
1564
+ });
1565
+ },
1566
+
1567
  //--------------------------------------------------------------------//
1568
  // Save and Exit
1569
  //--------------------------------------------------------------------//
1624
 
1625
  var data = {
1626
  action: 'wpforms_save_form',
1627
+ data : JSON.stringify($('#wpforms-builder-form').serializeArray()),
1628
  id : s.formID,
1629
  nonce : wpforms_builder.nonce
1630
  }
assets/js/admin-utils.js CHANGED
@@ -93,8 +93,19 @@ var wpf = {
93
  }
94
  });
95
 
96
- /* todo: sort choices as well */
 
 
 
 
 
 
 
 
 
 
97
 
 
98
  for(var key in fieldOrder) {
99
  fieldsOrdered['field_'+fieldOrder[key]] = fields[fieldOrder[key]];
100
  }
@@ -190,6 +201,15 @@ var wpf = {
190
 
191
  var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
192
  return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
 
 
 
 
 
 
 
 
 
193
  }
194
  }
195
  wpf.init();
93
  }
94
  });
95
 
96
+ // Preserve the order of field choices
97
+ for(var key in fields) {
98
+ if (fields[key].choices) {
99
+ jQuery('#wpforms-field-option-row-'+fields[key].id+'-choices li').each(function(index, ele) {
100
+ var choiceKey = jQuery(ele).data('key');
101
+ fields[key].choices['choice_'+choiceKey] = fields[key].choices[choiceKey];
102
+ fields[key].choices['choice_'+choiceKey].key = choiceKey;
103
+ delete fields[key].choices[choiceKey];
104
+ });
105
+ }
106
+ }
107
 
108
+ // Preserve the order of fields
109
  for(var key in fieldOrder) {
110
  fieldsOrdered['field_'+fieldOrder[key]] = fields[fieldOrder[key]];
111
  }
201
 
202
  var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
203
  return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
204
+ },
205
+
206
+ /**
207
+ * Is number?
208
+ *
209
+ * @since 1.2.3
210
+ */
211
+ isNumber: function(n) {
212
+ return !isNaN(parseFloat(n)) && isFinite(n);
213
  }
214
  }
215
  wpf.init();
assets/js/wpforms.js CHANGED
@@ -156,7 +156,7 @@
156
 
157
  var $this = $(this),
158
  valid = true,
159
- action = $(this).data('action'),
160
  page = $this.data('page'),
161
  page2 = page;
162
  next = page+1,
@@ -170,7 +170,7 @@
170
  // Toggling between pages
171
  if ( action == 'next' ){
172
  // Validate
173
- if(typeof $.fn.validate !== 'undefined') {
174
  $page.find('input.wpforms-field-required, select.wpforms-field-required, textarea.wpforms-field-required, .wpforms-field-required input').each(function(index, el) {
175
  var field = $(el);
176
  if ( field.valid() ) {
@@ -178,6 +178,15 @@
178
  valid = false;
179
  }
180
  });
 
 
 
 
 
 
 
 
 
181
  }
182
  // Move to next page
183
  if (valid) {
156
 
157
  var $this = $(this),
158
  valid = true,
159
+ action = $this.data('action'),
160
  page = $this.data('page'),
161
  page2 = page;
162
  next = page+1,
170
  // Toggling between pages
171
  if ( action == 'next' ){
172
  // Validate
173
+ if (typeof $.fn.validate !== 'undefined') {
174
  $page.find('input.wpforms-field-required, select.wpforms-field-required, textarea.wpforms-field-required, .wpforms-field-required input').each(function(index, el) {
175
  var field = $(el);
176
  if ( field.valid() ) {
178
  valid = false;
179
  }
180
  });
181
+ // Scroll to first/top error on page
182
+ var $topError = $page.find('.wpforms-error').first();
183
+ if ($topError.length) {
184
+ $('html, body').animate({
185
+ scrollTop: $topError.offset().top-75
186
+ }, 750, function() {
187
+ $topError.focus();
188
+ });
189
+ }
190
  }
191
  // Move to next page
192
  if (valid) {
includes/admin/ajax-actions.php CHANGED
@@ -28,9 +28,40 @@ function wpforms_save_form() {
28
  if ( empty( $_POST['data'] ) )
29
  die( __( 'No data provided', 'wpforms' ) );
30
 
31
- $data = wp_parse_args( $_POST['data'], array() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  $form_id = wpforms()->form->update( $data['id'], $data );
33
 
 
 
34
  if ( ! $form_id ) {
35
  die( __( 'An error occured and the form could not be saved', 'wpforms' ) );
36
  } else {
28
  if ( empty( $_POST['data'] ) )
29
  die( __( 'No data provided', 'wpforms' ) );
30
 
31
+ $form_post = json_decode( stripslashes( $_POST['data'] ) );
32
+ $data = array();
33
+
34
+ if ( ! is_null( $form_post ) && $form_post ) {
35
+ foreach ( $form_post as $post_input_data ) {
36
+ // For input names that are arrays (e.g. `menu-item-db-id[3][4][5]`),
37
+ // derive the array path keys via regex and set the value in $_POST.
38
+ preg_match( '#([^\[]*)(\[(.+)\])?#', $post_input_data->name, $matches );
39
+
40
+ $array_bits = array( $matches[1] );
41
+
42
+ if ( isset( $matches[3] ) ) {
43
+ $array_bits = array_merge( $array_bits, explode( '][', $matches[3] ) );
44
+ }
45
+
46
+ $new_post_data = array();
47
+
48
+ // Build the new array value from leaf to trunk.
49
+ for ( $i = count( $array_bits ) - 1; $i >= 0; $i -- ) {
50
+ if ( $i == count( $array_bits ) - 1 ) {
51
+ $new_post_data[ $array_bits[ $i ] ] = wp_slash( $post_input_data->value );
52
+ } else {
53
+ $new_post_data = array( $array_bits[ $i ] => $new_post_data );
54
+ }
55
+ }
56
+
57
+ $data = array_replace_recursive( $data, $new_post_data );
58
+ }
59
+ }
60
+
61
  $form_id = wpforms()->form->update( $data['id'], $data );
62
 
63
+ do_action( 'wpforms_builder_save_form', $form_id, $data );
64
+
65
  if ( ! $form_id ) {
66
  die( __( 'An error occured and the form could not be saved', 'wpforms' ) );
67
  } else {
includes/admin/builder/class-builder.php CHANGED
@@ -66,9 +66,6 @@ class WPForms_Builder {
66
  // Only load if we are actually on the builder
67
  if ( $page == 'wpforms-builder' ) {
68
 
69
- // Builder specific functions
70
- require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/functions.php';
71
-
72
  // Load form if found
73
  $form_id = isset( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : false;
74
 
@@ -154,7 +151,7 @@ class WPForms_Builder {
154
 
155
  // CSS
156
  wp_enqueue_style(
157
- 'font-awesome',
158
  WPFORMS_PLUGIN_URL . 'assets/css/font-awesome.min.css',
159
  null,
160
  '4.4.0'
@@ -263,13 +260,20 @@ class WPForms_Builder {
263
  'cancel' => __( 'Cancel', 'wpforms' ),
264
  'ok' => __( 'OK', 'wpforms' ),
265
  'close' => __( 'Close', 'wpforms' ),
 
266
  'field' => __( 'Field', 'wpforms' ),
267
  'field_locked' => __( 'Field Locked', 'wpforms' ),
268
  'field_locked_msg' => __( 'This field cannot be deleted because it required by the form template.', 'wpforms' ),
269
  'fields_available' => __( 'Available Fields', 'wpforms' ),
270
  'fields_unavailable' => __( 'No fields available', 'wpforms' ),
 
271
  'nonce' => wp_create_nonce( 'wpforms-builder' ),
272
  'no_email_fields' => __( 'No email fields', 'wpforms' ),
 
 
 
 
 
273
  'saving' => __( 'Saving ...', 'wpforms' ),
274
  'saved' => __( 'Saved!', 'wpforms' ),
275
  'save_exit' => __( 'Save and Exit', 'wpforms' ),
@@ -291,11 +295,14 @@ class WPForms_Builder {
291
  'error_choice' => __( 'This item must contain at least one choice.', 'wpforms' ),
292
  'off' => __( 'Off', 'wpforms' ),
293
  'on' => __( 'On', 'wpforms' ),
 
294
  'previous' => __( 'Previous', 'wpforms' ),
295
  'saved_state' => '',
 
296
  'smart_tags_show' => __( 'Show Smart Tags', 'wpforms' ),
297
  'smart_tags_hide' => __( 'Hide Smart Tags', 'wpforms' ),
298
- 'select_field' => __( '-- Select field --', 'wpforms' ),
 
299
  );
300
  $strings = apply_filters( 'wpforms_builder_strings', $strings, $this->form );
301
 
66
  // Only load if we are actually on the builder
67
  if ( $page == 'wpforms-builder' ) {
68
 
 
 
 
69
  // Load form if found
70
  $form_id = isset( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : false;
71
 
151
 
152
  // CSS
153
  wp_enqueue_style(
154
+ 'wpforms-font-awesome',
155
  WPFORMS_PLUGIN_URL . 'assets/css/font-awesome.min.css',
156
  null,
157
  '4.4.0'
260
  'cancel' => __( 'Cancel', 'wpforms' ),
261
  'ok' => __( 'OK', 'wpforms' ),
262
  'close' => __( 'Close', 'wpforms' ),
263
+ 'conditionals_change' => __( 'Due to form changes, conditional logic rules have been removed or updated:', 'wpforms' ),
264
  'field' => __( 'Field', 'wpforms' ),
265
  'field_locked' => __( 'Field Locked', 'wpforms' ),
266
  'field_locked_msg' => __( 'This field cannot be deleted because it required by the form template.', 'wpforms' ),
267
  'fields_available' => __( 'Available Fields', 'wpforms' ),
268
  'fields_unavailable' => __( 'No fields available', 'wpforms' ),
269
+ 'heads_up' => __( 'Heads up!', 'wpforms' ),
270
  'nonce' => wp_create_nonce( 'wpforms-builder' ),
271
  'no_email_fields' => __( 'No email fields', 'wpforms' ),
272
+ 'notification_delete' => __( 'Are you sure you want to delete this notification?', 'wpforms' ),
273
+ 'notification_prompt' => __( 'Enter a notification name', 'wpforms' ),
274
+ 'notification_ph' => __( 'Eg: User Confirmation', 'wpforms' ),
275
+ 'notification_error' => __( 'You must provide a notification name', 'wpforms' ),
276
+ 'notification_error2' => __( 'Form must contain one notification. To disable all notifications use the setting Notifications dropdown setting.', 'wpforms' ),
277
  'saving' => __( 'Saving ...', 'wpforms' ),
278
  'saved' => __( 'Saved!', 'wpforms' ),
279
  'save_exit' => __( 'Save and Exit', 'wpforms' ),
295
  'error_choice' => __( 'This item must contain at least one choice.', 'wpforms' ),
296
  'off' => __( 'Off', 'wpforms' ),
297
  'on' => __( 'On', 'wpforms' ),
298
+ 'other' => __( 'Other', 'wpforms' ),
299
  'previous' => __( 'Previous', 'wpforms' ),
300
  'saved_state' => '',
301
+ 'smart_tags' => wpforms()->smart_tags->get(),
302
  'smart_tags_show' => __( 'Show Smart Tags', 'wpforms' ),
303
  'smart_tags_hide' => __( 'Hide Smart Tags', 'wpforms' ),
304
+ 'select_field' => __( '-- Select Field --', 'wpforms' ),
305
+ 'select_choice' => __( '-- Select Choice --', 'wpforms' ),
306
  );
307
  $strings = apply_filters( 'wpforms_builder_strings', $strings, $this->form );
308
 
includes/admin/builder/functions.php CHANGED
@@ -23,14 +23,16 @@
23
  function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args = array(), $echo = true ) {
24
 
25
  // Required params
26
- if ( empty( $option ) || empty( $panel ) || empty( $field ) || empty( $form_data ) ) {
27
  return;
28
  }
29
 
30
  // Setup basic vars
31
  $panel = esc_attr( $panel );
32
  $field = esc_attr( $field );
 
33
  $parent = !empty( $args['parent'] ) ? esc_attr( $args['parent'] ) : '';
 
34
  $label = !empty( $label ) ? esc_html( $label ) : '';
35
  $class = !empty( $args['class'] ) ? esc_attr( $args['class'] ) : '';
36
  $input_class = !empty( $args['input_class'] ) ? esc_attr( $args['input_class'] ) : '';
@@ -40,8 +42,14 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
40
 
41
  // Check if we should store values in a parent array
42
  if ( !empty( $parent ) ) {
43
- $field_name = sprintf( '%s[%s][%s]', esc_attr( $args['parent'] ), $panel, $field );
44
- $value = isset( $form_data[$parent][$panel][$field ] ) ? $form_data[$parent][$panel][$field] : $default;
 
 
 
 
 
 
45
  } else {
46
  $field_name = sprintf( '%s[%s]', $panel, $field );
47
  $value = isset( $form_data[$panel][$field] ) ? $form_data[$panel][$field] : $default;
@@ -63,7 +71,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
63
  $output = sprintf(
64
  '<input type="%s" id="wpforms-panel-field-%s-%s" name="%s" value="%s" placeholder="%s" class="%s" %s>',
65
  $type,
66
- sanitize_html_class( $panel ),
67
  sanitize_html_class( $field ),
68
  $field_name,
69
  esc_attr( $value ),
@@ -78,7 +86,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
78
  $rows = !empty( $args['rows'] ) ? (int) $args['rows'] : '3';
79
  $output = sprintf(
80
  '<textarea id="wpforms-panel-field-%s-%s" name="%s" rows="%d" placeholder="%s" class="%s" %s>%s</textarea>',
81
- sanitize_html_class( $panel ),
82
  sanitize_html_class( $field ),
83
  $field_name,
84
  $rows,
@@ -97,7 +105,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
97
  ) );
98
  $args['textarea_name'] = $field_name;
99
  $args['teeny'] = true;
100
- $id = 'wpforms-panel-field-' . sanitize_html_class( $panel ) . '-' . sanitize_html_class( $field );
101
  $id = str_replace( '-', '_', $id );
102
  ob_start();
103
  wp_editor( $value, $id , $args );
@@ -109,7 +117,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
109
  $checked = checked( '1', $value, false );
110
  $output = sprintf(
111
  '<input type="checkbox" id="wpforms-panel-field-%s-%s" name="%s" value="1" class="%s" %s %s>',
112
- sanitize_html_class( $panel ),
113
  sanitize_html_class( $field ),
114
  $field_name,
115
  $input_class,
@@ -118,7 +126,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
118
  );
119
  $output .= sprintf(
120
  '<label for="wpforms-panel-field-%s-%s" class="inline">%s',
121
- sanitize_html_class( $panel ),
122
  sanitize_html_class( $field ),
123
  $label
124
  );
@@ -149,7 +157,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
149
 
150
  $output = sprintf(
151
  '<select id="wpforms-panel-field-%s-%s" name="%s" class="%s" %s>',
152
- sanitize_html_class( $panel ),
153
  sanitize_html_class( $field ),
154
  $field_name,
155
  $input_class,
@@ -169,7 +177,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
169
  // Put the pieces together....
170
  $field_open = sprintf(
171
  '<div id="wpforms-panel-field-%s-%s-wrap" class="wpforms-panel-field %s %s">',
172
- sanitize_html_class( $panel ),
173
  sanitize_html_class( $field ),
174
  $class,
175
  'wpforms-panel-field-' . sanitize_html_class( $option )
@@ -178,7 +186,7 @@ function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args
178
  if ( 'checkbox' != $option & !empty( $label ) ) {
179
  $field_label = sprintf(
180
  '<label for="wpforms-panel-field-%s-%s">%s',
181
- sanitize_html_class( $panel ),
182
  sanitize_html_class( $field ),
183
  $label
184
  );
23
  function wpforms_panel_field( $option, $panel, $field, $form_data, $label, $args = array(), $echo = true ) {
24
 
25
  // Required params
26
+ if ( empty( $option ) || empty( $panel ) || empty( $field ) ) {
27
  return;
28
  }
29
 
30
  // Setup basic vars
31
  $panel = esc_attr( $panel );
32
  $field = esc_attr( $field );
33
+ $panel_id = sanitize_html_class( $panel );
34
  $parent = !empty( $args['parent'] ) ? esc_attr( $args['parent'] ) : '';
35
+ $subsection = !empty( $args['subsection'] ) ? esc_attr( $args['subsection'] ) : '';
36
  $label = !empty( $label ) ? esc_html( $label ) : '';
37
  $class = !empty( $args['class'] ) ? esc_attr( $args['class'] ) : '';
38
  $input_class = !empty( $args['input_class'] ) ? esc_attr( $args['input_class'] ) : '';
42
 
43
  // Check if we should store values in a parent array
44
  if ( !empty( $parent ) ) {
45
+ if ( !empty( $subsection ) ) {
46
+ $field_name = sprintf( '%s[%s][%s][%s]', $parent, $panel, $subsection, $field );
47
+ $value = isset( $form_data[$parent][$panel][$subsection][$field] ) ? $form_data[$parent][$panel][$subsection][$field] : $default;
48
+ $panel_id = sanitize_html_class( $panel . '-' . $subsection );
49
+ } else {
50
+ $field_name = sprintf( '%s[%s][%s]', $parent, $panel, $field );
51
+ $value = isset( $form_data[$parent][$panel][$field] ) ? $form_data[$parent][$panel][$field] : $default;
52
+ }
53
  } else {
54
  $field_name = sprintf( '%s[%s]', $panel, $field );
55
  $value = isset( $form_data[$panel][$field] ) ? $form_data[$panel][$field] : $default;
71
  $output = sprintf(
72
  '<input type="%s" id="wpforms-panel-field-%s-%s" name="%s" value="%s" placeholder="%s" class="%s" %s>',
73
  $type,
74
+ sanitize_html_class( $panel_id ),
75
  sanitize_html_class( $field ),
76
  $field_name,
77
  esc_attr( $value ),
86
  $rows = !empty( $args['rows'] ) ? (int) $args['rows'] : '3';
87
  $output = sprintf(
88
  '<textarea id="wpforms-panel-field-%s-%s" name="%s" rows="%d" placeholder="%s" class="%s" %s>%s</textarea>',
89
+ sanitize_html_class( $panel_id ),
90
  sanitize_html_class( $field ),
91
  $field_name,
92
  $rows,
105
  ) );
106
  $args['textarea_name'] = $field_name;
107
  $args['teeny'] = true;
108
+ $id = 'wpforms-panel-field-' . sanitize_html_class( $panel_id ) . '-' . sanitize_html_class( $field );
109
  $id = str_replace( '-', '_', $id );
110
  ob_start();
111
  wp_editor( $value, $id , $args );
117
  $checked = checked( '1', $value, false );
118
  $output = sprintf(
119
  '<input type="checkbox" id="wpforms-panel-field-%s-%s" name="%s" value="1" class="%s" %s %s>',
120
+ sanitize_html_class( $panel_id ),
121
  sanitize_html_class( $field ),
122
  $field_name,
123
  $input_class,
126
  );
127
  $output .= sprintf(
128
  '<label for="wpforms-panel-field-%s-%s" class="inline">%s',
129
+ sanitize_html_class( $panel_id ),
130
  sanitize_html_class( $field ),
131
  $label
132
  );
157
 
158
  $output = sprintf(
159
  '<select id="wpforms-panel-field-%s-%s" name="%s" class="%s" %s>',
160
+ sanitize_html_class( $panel_id ),
161
  sanitize_html_class( $field ),
162
  $field_name,
163
  $input_class,
177
  // Put the pieces together....
178
  $field_open = sprintf(
179
  '<div id="wpforms-panel-field-%s-%s-wrap" class="wpforms-panel-field %s %s">',
180
+ sanitize_html_class( $panel_id ),
181
  sanitize_html_class( $field ),
182
  $class,
183
  'wpforms-panel-field-' . sanitize_html_class( $option )
186
  if ( 'checkbox' != $option & !empty( $label ) ) {
187
  $field_label = sprintf(
188
  '<label for="wpforms-panel-field-%s-%s">%s',
189
+ sanitize_html_class( $panel_id ),
190
  sanitize_html_class( $field ),
191
  $label
192
  );
includes/admin/builder/panels/class-settings.php CHANGED
@@ -55,7 +55,7 @@ class WPForms_Builder_Panel_Settings extends WPForms_Builder_Panel {
55
 
56
  $sections = array(
57
  'general' => __( 'General', 'wpforms' ),
58
- 'notifications' => __( 'Notification', 'wpforms' ),
59
  'confirmation' => __( 'Confirmation', 'wpforms' ),
60
  );
61
  $sections = apply_filters( 'wpforms_builder_settings_sections', $sections, $this->form_data );
@@ -149,93 +149,93 @@ class WPForms_Builder_Panel_Settings extends WPForms_Builder_Panel {
149
  // Notifications
150
  //--------------------------------------------------------------------//
151
  echo '<div class="wpforms-panel-content-section wpforms-panel-content-section-notifications">';
152
- echo '<div class="wpforms-panel-content-section-title">';
153
- _e( 'Notifications', 'wpforms' );
154
- echo '</div>';
155
- wpforms_panel_field(
156
- 'select',
157
- 'settings',
158
- 'notification_enable',
159
- $this->form_data,
160
- __( 'Notifications', 'wpforms' ),
161
- array(
162
- 'default' => '1',
163
- 'options' => array(
164
- '1' => __( 'On', 'wpforms' ),
165
- '0' => __( 'Off', 'wpforms' ),
166
- ),
167
- )
168
- );
169
- wpforms_panel_field(
170
- 'text',
171
- 'settings',
172
- 'notification_email',
173
- $this->form_data,
174
- __( 'Send To Email Address', 'wpforms' ),
175
- array(
176
- 'default' => '{admin_email}',
177
- 'tooltip' => __( 'Enter the email address to receive form entry notifications. For multiple notifications, seperate email addresses with a comma.', 'wpforms' ),
178
- 'smarttags' => array(
179
- 'type' => 'fields',
180
- 'fields' => 'name,email,text',
181
- ),
182
- )
183
- );
184
- wpforms_panel_field(
185
- 'text',
186
- 'settings',
187
- 'notification_subject',
188
- $this->form_data,
189
- __( 'Email Subject', 'wpforms' ),
190
- array(
191
- 'default' => __( 'New Entry: ' , 'wpforms' ) . $this->form->post_title,
192
- 'smarttags' => array(
193
- 'type' => 'fields',
194
- 'fields' => 'name,email,text',
195
- ),
196
- )
197
- );
198
- wpforms_panel_field(
199
- 'text',
200
- 'settings',
201
- 'notification_fromname',
202
- $this->form_data,
203
- __( 'From Name', 'wpforms' ),
204
- array(
205
- 'default' => sanitize_text_field( get_option( 'blogname' ) ),
206
- 'smarttags' => array(
207
- 'type' => 'fields',
208
- 'fields' => 'name,email,text',
209
- ),
210
- )
211
- );
212
- wpforms_panel_field(
213
- 'text',
214
- 'settings',
215
- 'notification_fromaddress',
216
- $this->form_data,
217
- __( 'From Email', 'wpforms' ),
218
- array(
219
- 'default' => '{admin_email}',
220
- 'smarttags' => array(
221
- 'type' => 'fields',
222
- 'fields' => 'name,email,text',
223
- ),
224
- )
225
- );
226
- wpforms_panel_field(
227
- 'text',
228
- 'settings',
229
- 'notification_replyto',
230
- $this->form_data,
231
- __( 'Reply-To', 'wpforms' ),
232
- array(
233
- 'smarttags' => array(
234
- 'type' => 'fields',
235
- 'fields' => 'name,email,text',
236
- ),
237
- )
238
- );
239
  do_action( 'wpforms_form_settings_notifications', $this );
240
  echo '</div>';
241
 
55
 
56
  $sections = array(
57
  'general' => __( 'General', 'wpforms' ),
58
+ 'notifications' => __( 'Notifications', 'wpforms' ),
59
  'confirmation' => __( 'Confirmation', 'wpforms' ),
60
  );
61
  $sections = apply_filters( 'wpforms_builder_settings_sections', $sections, $this->form_data );
149
  // Notifications
150
  //--------------------------------------------------------------------//
151
  echo '<div class="wpforms-panel-content-section wpforms-panel-content-section-notifications">';
152
+ // echo '<div class="wpforms-panel-content-section-title">';
153
+ // _e( 'Notifications', 'wpforms' );
154
+ // echo '</div>';
155
+ // wpforms_panel_field(
156
+ // 'select',
157
+ // 'settings',
158
+ // 'notification_enable',
159
+ // $this->form_data,
160
+ // __( 'Notifications', 'wpforms' ),
161
+ // array(
162
+ // 'default' => '1',
163
+ // 'options' => array(
164
+ // '1' => __( 'On', 'wpforms' ),
165
+ // '0' => __( 'Off', 'wpforms' ),
166
+ // ),
167
+ // )
168
+ // );
169
+ // wpforms_panel_field(
170
+ // 'text',
171
+ // 'settings',
172
+ // 'notification_email',
173
+ // $this->form_data,
174
+ // __( 'Send To Email Address', 'wpforms' ),
175
+ // array(
176
+ // 'default' => '{admin_email}',
177
+ // 'tooltip' => __( 'Enter the email address to receive form entry notifications. For multiple notifications, seperate email addresses with a comma.', 'wpforms' ),
178
+ // 'smarttags' => array(
179
+ // 'type' => 'fields',
180
+ // 'fields' => 'name,email,text',
181
+ // ),
182
+ // )
183
+ // );
184
+ // wpforms_panel_field(
185
+ // 'text',
186
+ // 'settings',
187
+ // 'notification_subject',
188
+ // $this->form_data,
189
+ // __( 'Email Subject', 'wpforms' ),
190
+ // array(
191
+ // 'default' => __( 'New Entry: ' , 'wpforms' ) . $this->form->post_title,
192
+ // 'smarttags' => array(
193
+ // 'type' => 'fields',
194
+ // 'fields' => 'name,email,text',
195
+ // ),
196
+ // )
197
+ // );
198
+ // wpforms_panel_field(
199
+ // 'text',
200
+ // 'settings',
201
+ // 'notification_fromname',
202
+ // $this->form_data,
203
+ // __( 'From Name', 'wpforms' ),
204
+ // array(
205
+ // 'default' => sanitize_text_field( get_option( 'blogname' ) ),
206
+ // 'smarttags' => array(
207
+ // 'type' => 'fields',
208
+ // 'fields' => 'name,email,text',
209
+ // ),
210
+ // )
211
+ // );
212
+ // wpforms_panel_field(
213
+ // 'text',
214
+ // 'settings',
215
+ // 'notification_fromaddress',
216
+ // $this->form_data,
217
+ // __( 'From Email', 'wpforms' ),
218
+ // array(
219
+ // 'default' => '{admin_email}',
220
+ // 'smarttags' => array(
221
+ // 'type' => 'fields',
222
+ // 'fields' => 'name,email,text',
223
+ // ),
224
+ // )
225
+ // );
226
+ // wpforms_panel_field(
227
+ // 'text',
228
+ // 'settings',
229
+ // 'notification_replyto',
230
+ // $this->form_data,
231
+ // __( 'Reply-To', 'wpforms' ),
232
+ // array(
233
+ // 'smarttags' => array(
234
+ // 'type' => 'fields',
235
+ // 'fields' => 'name,email,text',
236
+ // ),
237
+ // )
238
+ // );
239
  do_action( 'wpforms_form_settings_notifications', $this );
240
  echo '</div>';
241
 
includes/class-form.php CHANGED
@@ -220,6 +220,8 @@ class WPForms_Form_Handler {
220
  $form_id = $data['id'];
221
  }
222
 
 
 
223
  if ( !empty( $data['settings']['form_title'] ) ) {
224
  $title = $data['settings']['form_title'];
225
  } else {
@@ -234,12 +236,6 @@ class WPForms_Form_Handler {
234
 
235
  $data['field_id'] = !empty( $data['field_id'] ) ? absint( $data['field_id'] ) : '0';
236
 
237
- // @todo - This needs testing
238
- if ( !empty( $args['merge'] ) ) {
239
- $previous = $this->get( $form_id, array( 'content_only' => true ) );
240
- $data = wp_parse_args( $data, $previous );
241
- }
242
-
243
  // Perserve form meta.
244
  $meta = $this->get_meta( $form_id );
245
  if ( $meta ) {
220
  $form_id = $data['id'];
221
  }
222
 
223
+ $data = wp_unslash( $data );
224
+
225
  if ( !empty( $data['settings']['form_title'] ) ) {
226
  $title = $data['settings']['form_title'];
227
  } else {
236
 
237
  $data['field_id'] = !empty( $data['field_id'] ) ? absint( $data['field_id'] ) : '0';
238
 
 
 
 
 
 
 
239
  // Perserve form meta.
240
  $meta = $this->get_meta( $form_id );
241
  if ( $meta ) {
includes/class-frontend.php CHANGED
@@ -144,7 +144,8 @@ class WPForms_Frontend {
144
  // Load confirmatiom specific asssets
145
  $this->assets_confirmation();
146
 
147
- $message = apply_filters( 'wpforms_frontend_confirmation_message', $form_data['settings']['confirmation_message'], $form_data );
 
148
 
149
  $class = wpforms_setting( 'disable-css', '1' ) == '1' ? 'wpforms-confirmation-container-full' : 'wpforms-confirmation-container';
150
 
144
  // Load confirmatiom specific asssets
145
  $this->assets_confirmation();
146
 
147
+ $message = apply_filters( 'wpforms_process_smart_tags', $form_data['settings']['confirmation_message'], $form_data, $_POST['wpforms']['complete'], $_POST['wpforms']['entry_id'] );
148
+ $message = apply_filters( 'wpforms_frontend_confirmation_message', $message, $form_data );
149
 
150
  $class = wpforms_setting( 'disable-css', '1' ) == '1' ? 'wpforms-confirmation-container-full' : 'wpforms-confirmation-container';
151
 
includes/class-logging.php CHANGED
@@ -107,7 +107,7 @@ class WPForms_Logging {
107
  * @param string $type Log type (default: null)
108
  * @return int Log ID
109
  */
110
- public function add( $title = '', $message = '', $parent = 0, $type = null ) {
111
 
112
  $log_data = array(
113
  'post_title' => $title,
@@ -115,7 +115,7 @@ class WPForms_Logging {
115
  'post_parent' => $parent,
116
  'log_type' => $type
117
  );
118
- return $this->insert_log( $log_data );
119
  }
120
 
121
  /**
107
  * @param string $type Log type (default: null)
108
  * @return int Log ID
109
  */
110
+ public function add( $title = '', $message = '', $parent = 0, $type = null, $meta = '' ) {
111
 
112
  $log_data = array(
113
  'post_title' => $title,
115
  'post_parent' => $parent,
116
  'log_type' => $type
117
  );
118
+ return $this->insert_log( $log_data, $meta );
119
  }
120
 
121
  /**
includes/class-preview.php CHANGED
@@ -19,6 +19,9 @@ class WPForms_Preview {
19
 
20
  // Maybe load a preview page
21
  add_action( 'init', array( $this, 'init' ) );
 
 
 
22
  }
23
 
24
  /**
@@ -262,4 +265,22 @@ class WPForms_Preview {
262
 
263
  return $posts;
264
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  }
19
 
20
  // Maybe load a preview page
21
  add_action( 'init', array( $this, 'init' ) );
22
+
23
+ // Hide preview page from admin
24
+ add_action( 'pre_get_posts', array( $this, 'form_preview_hide' ) );
25
  }
26
 
27
  /**
265
 
266
  return $posts;
267
  }
268
+
269
+ /**
270
+ * Hide the preview page from admin
271
+ *
272
+ * @since 1.2.3
273
+ * @param object $query
274
+ */
275
+ function form_preview_hide( $query ) {
276
+
277
+ if( $query->is_main_query() && is_admin() && isset( $query->query_vars['post_type'] ) && 'page' == $query->query_vars['post_type'] ) {
278
+ $wpforms_preview = intval( get_option( 'wpforms_preview_page' ) );
279
+ if( $wpforms_preview ) {
280
+ $exclude = $query->query_vars['post__not_in'];
281
+ $exclude[] = $wpforms_preview;
282
+ $query->set( 'post__not_in', $exclude );
283
+ }
284
+ }
285
+ }
286
  }
includes/class-process.php CHANGED
@@ -26,6 +26,14 @@ class WPForms_Process {
26
  */
27
  public $fields;
28
 
 
 
 
 
 
 
 
 
29
  /**
30
  * Primary class constructor.
31
  *
@@ -33,7 +41,7 @@ class WPForms_Process {
33
  */
34
  public function __construct() {
35
 
36
- add_action( 'init', array( $this, 'listen' ) );
37
  }
38
 
39
  /**
@@ -163,12 +171,23 @@ class WPForms_Process {
163
  // Success - send email notification
164
  $this->entry_email( $this->fields, $entry, $form_data, $entry_id );
165
 
 
 
 
 
 
 
166
  // Logs entry depending on log levels set
167
- $log = array(
168
- 'fields' => $this->fields,
169
- 'entry_id' => $entry_id,
 
 
 
 
 
 
170
  );
171
- wpforms_log( 'Form Entry', $log, 'entries', array( 'type' => 'entry', 'parent' => $entry_id ) );
172
 
173
  // Post-process hooks
174
  do_action( 'wpforms_process_complete', $this->fields, $entry, $form_data, $entry_id );
@@ -176,10 +195,20 @@ class WPForms_Process {
176
 
177
  } else {
178
 
179
- $message = $honeypot . '<br><pre>' . print_r( $entry, true ) . '</pre>';
180
-
181
  // Logs spam entry depending on log levels set
182
- wpforms_log( 'Spam Entry', $message, 'spam', array( 'type' => 'spam' ) );
 
 
 
 
 
 
 
 
 
 
 
 
183
  }
184
 
185
  $this->entry_confirmation_redirect( $form_data );
@@ -237,7 +266,7 @@ class WPForms_Process {
237
  if ( !empty( $form_data['settings']['confirmation_type'] ) && $form_data['settings']['confirmation_type'] != 'message' ) {
238
 
239
  if ( $form_data['settings']['confirmation_type'] == 'redirect' ) {
240
- $url = $form_data['settings']['confirmation_redirect'];
241
  }
242
 
243
  if ( $form_data['settings']['confirmation_type'] == 'page' ) {
@@ -275,44 +304,65 @@ class WPForms_Process {
275
  return;
276
  }
277
 
278
- // Check that the form has an email address to send to
279
- if ( empty( $form_data['settings']['notification_email'] ) ) {
280
- return;
281
- }
282
-
283
  // Provide the opportunity to override via a filter
284
  if ( ! apply_filters( 'wpforms_entry_email', true, $fields, $entry, $form_data ) ) {
285
  return;
286
  }
287
 
288
  $fields = apply_filters( 'wpforms_entry_email_data', $fields, $entry, $form_data );
289
- $email = array();
290
-
291
- // Setup email message. Soon this will be configurable for the user.
292
- $email['message'] = '{all_fields}';
293
 
294
- // Setup email address or addresses
295
- $email['address'] = explode( ',', apply_filters( 'wpforms_process_smart_tags', $form_data['settings']['notification_email'], $form_data, $fields ) );
296
- $email['address'] = array_map( 'sanitize_email', $email['address'] );
297
-
298
- // Setup email subject line
299
- if ( !empty( $form_data['settings']['notification_subject'] ) ) {
300
- $email['subject'] = apply_filters( 'wpforms_process_smart_tags', $form_data['settings']['notification_subject'], $form_data, $fields );
301
- $email['subject'] = wp_specialchars_decode( sanitize_text_field( $email['subject'] ) );
 
 
302
  } else {
303
- $email['subject'] = __( 'New %s Entry', $form_data['settings']['form_title'] );
304
  }
305
 
306
- // Last chance
307
- $email = apply_filters( 'wpforms_entry_email_atts', $email, $fields, $entry, $form_data );
308
 
309
- $emails = new WPForms_WP_Emails;
310
- $emails->__set( 'form_data', $form_data );
311
- $emails->__set( 'fields', $fields );
 
 
 
 
 
 
312
 
313
- foreach( $email['address'] as $address ) {
314
- $emails->send( $address, $email['subject'], $email['message'] );
315
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  }
317
 
318
  /**
@@ -327,6 +377,6 @@ class WPForms_Process {
327
 
328
  do_action( 'wpforms_process_entry_save', $fields, $entry_meta, $entry, $form_id, $form_data );
329
 
330
- return '0';
331
  }
332
  }
26
  */
27
  public $fields;
28
 
29
+ /**
30
+ * Holds the ID of a successful entry.
31
+ *
32
+ * @since 1.2.3
33
+ * @var int
34
+ */
35
+ public $entry_id = 0;
36
+
37
  /**
38
  * Primary class constructor.
39
  *
41
  */
42
  public function __construct() {
43
 
44
+ add_action( 'wp', array( $this, 'listen' ) );
45
  }
46
 
47
  /**
171
  // Success - send email notification
172
  $this->entry_email( $this->fields, $entry, $form_data, $entry_id );
173
 
174
+ // Pass completed and formatted fields in POST
175
+ $_POST['wpforms']['complete'] = $this->fields;
176
+
177
+ // Pass entry ID in POST
178
+ $_POST['wpforms']['entry_id'] = $entry_id;
179
+
180
  // Logs entry depending on log levels set
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
+ )
190
  );
 
191
 
192
  // Post-process hooks
193
  do_action( 'wpforms_process_complete', $this->fields, $entry, $form_data, $entry_id );
195
 
196
  } else {
197
 
 
 
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
+ )
211
+ );
212
  }
213
 
214
  $this->entry_confirmation_redirect( $form_data );
266
  if ( !empty( $form_data['settings']['confirmation_type'] ) && $form_data['settings']['confirmation_type'] != 'message' ) {
267
 
268
  if ( $form_data['settings']['confirmation_type'] == 'redirect' ) {
269
+ $url = apply_filters( 'wpforms_process_smart_tags', $form_data['settings']['confirmation_redirect'], $form_data, $this->fields, $this->entry_id );
270
  }
271
 
272
  if ( $form_data['settings']['confirmation_type'] == 'page' ) {
304
  return;
305
  }
306
 
 
 
 
 
 
307
  // Provide the opportunity to override via a filter
308
  if ( ! apply_filters( 'wpforms_entry_email', true, $fields, $entry, $form_data ) ) {
309
  return;
310
  }
311
 
312
  $fields = apply_filters( 'wpforms_entry_email_data', $fields, $entry, $form_data );
 
 
 
 
313
 
314
+ // Backwards compatibility for notifications before v1.2.3
315
+ if ( empty( $form_data['settings']['notifications'] ) ) {
316
+ $notifications[1] = array(
317
+ 'email' => $form_data['settings']['notification_email'],
318
+ 'subject' => $form_data['settings']['notification_subject'],
319
+ 'sender_name' => $form_data['settings']['notification_fromname'],
320
+ 'sender_address' => $form_data['settings']['notification_fromaddress'],
321
+ 'replyto' => $form_data['settings']['notification_replyto'],
322
+ 'message' => '{all_fields}',
323
+ );
324
  } else {
325
+ $notifications = $form_data['settings']['notifications'];
326
  }
327
 
328
+ foreach( $notifications as $notification_id => $notification ) {
 
329
 
330
+ if ( empty( $notification['email'] ) ) {
331
+ continue;
332
+ }
333
+
334
+ $process_email = apply_filters( 'wpforms_entry_email_process', true, $fields, $form_data, $notification_id );
335
+
336
+ if ( ! $process_email ) {
337
+ continue;
338
+ }
339
 
340
+ $email = array();
341
+
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;
349
+ $email['message'] = !empty( $notification['message'] ) ? $notification['message'] : '{all_fields}';
350
+ $email = apply_filters( 'wpforms_entry_email_atts', $email, $fields, $entry, $form_data, $notification_id );
351
+
352
+ // Create new email
353
+ $emails = new WPForms_WP_Emails;
354
+ $emails->__set( 'form_data', $form_data );
355
+ $emails->__set( 'fields', $fields );
356
+ $emails->__set( 'entry_id', $this->entry_id );
357
+ $emails->__set( 'from_name', $email['sender_name'] );
358
+ $emails->__set( 'from_address', $email['sender_address'] );
359
+ $emails->__set( 'reply_to', $email['replyto'] );
360
+
361
+ // Go
362
+ foreach( $email['address'] as $address ) {
363
+ $emails->send( $address, $email['subject'], $email['message'] );
364
+ }
365
+ }
366
  }
367
 
368
  /**
377
 
378
  do_action( 'wpforms_process_entry_save', $fields, $entry_meta, $entry, $form_id, $form_data );
379
 
380
+ return $this->entry_id;
381
  }
382
  }
includes/class-smart-tags.php CHANGED
@@ -17,7 +17,7 @@ class WPForms_Smart_Tags {
17
  */
18
  public function __construct() {
19
 
20
- add_filter( 'wpforms_process_smart_tags', array( $this, 'process' ), 10, 3 );
21
  }
22
 
23
  /**
@@ -30,6 +30,8 @@ class WPForms_Smart_Tags {
30
  function get( $return = 'array' ) {
31
 
32
  $tags = array(
 
 
33
  'form_id' => __( 'Form ID', 'wpforms' ),
34
  'form_name' => __( 'Form Name', 'wpforms' ),
35
  'page_title' => __( 'Embedded Post/Page Title', 'wpforms' ),
@@ -73,9 +75,12 @@ class WPForms_Smart_Tags {
73
  *
74
  * @since 1.0.0
75
  * @param string $content
 
 
 
76
  * @return string
77
  */
78
- function process( $content, $form_data, $fields = '' ) {
79
 
80
  // Basic smart tags
81
  preg_match_all( "/\{(.+?)\}/", $content, $tags );
@@ -90,8 +95,12 @@ class WPForms_Smart_Tags {
90
  $content = str_replace( '{'.$tag.'}', sanitize_email( get_option( 'admin_email' ) ), $content );
91
  break;
92
 
 
 
 
 
93
  case 'form_id':
94
- $content = str_replace( '{'.$tag.'}', $form_data['id'], $content );
95
  break;
96
 
97
  case 'form_name':
17
  */
18
  public function __construct() {
19
 
20
+ add_filter( 'wpforms_process_smart_tags', array( $this, 'process' ), 10, 4 );
21
  }
22
 
23
  /**
30
  function get( $return = 'array' ) {
31
 
32
  $tags = array(
33
+ 'admin_email' => __( 'Site Administer Email', 'wpforms' ),
34
+ 'entry_id' => __( 'Entry ID', 'wpforms' ),
35
  'form_id' => __( 'Form ID', 'wpforms' ),
36
  'form_name' => __( 'Form Name', 'wpforms' ),
37
  'page_title' => __( 'Embedded Post/Page Title', 'wpforms' ),
75
  *
76
  * @since 1.0.0
77
  * @param string $content
78
+ * @param array $form_data
79
+ * @param array $fields
80
+ * @param int $entry_id
81
  * @return string
82
  */
83
+ function process( $content, $form_data, $fields = '', $entry_id = '' ) {
84
 
85
  // Basic smart tags
86
  preg_match_all( "/\{(.+?)\}/", $content, $tags );
95
  $content = str_replace( '{'.$tag.'}', sanitize_email( get_option( 'admin_email' ) ), $content );
96
  break;
97
 
98
+ case 'entry_id':
99
+ $content = str_replace( '{'.$tag.'}', sanitize_text_field( $entry_id ), $content );
100
+ break;
101
+
102
  case 'form_id':
103
+ $content = str_replace( '{'.$tag.'}', absint( $form_data['id'] ), $content );
104
  break;
105
 
106
  case 'form_name':
includes/emails/class-emails.php CHANGED
@@ -65,25 +65,25 @@ class WPForms_WP_Emails {
65
  private $template;
66
 
67
  /**
68
- * The header text for the email.
69
  *
70
  * @since 1.1.3
71
  */
72
- private $heading = '';
73
 
74
  /**
75
- * Form data.
76
  *
77
  * @since 1.1.3
78
  */
79
- private $form_data = '';
80
 
81
  /**
82
- * Fields, formatted and sanitized.
83
  *
84
- * @since 1.1.3
85
  */
86
- private $fields = '';
87
 
88
  /**
89
  * Get things going.
@@ -120,12 +120,10 @@ class WPForms_WP_Emails {
120
  */
121
  public function get_from_name() {
122
 
123
- if ( ! $this->from_name ) {
124
- if ( !empty( $this->form_data['settings']['notification_fromname'] ) ) {
125
- $this->from_name = $this->process_tag( $this->form_data['settings']['notification_fromname'] );
126
- } else {
127
- $this->from_name = get_bloginfo( 'name' );
128
- }
129
  }
130
 
131
  return apply_filters( 'wpforms_email_from_name', wp_specialchars_decode( $this->from_name ), $this );
@@ -139,12 +137,10 @@ class WPForms_WP_Emails {
139
  */
140
  public function get_from_address() {
141
 
142
- if ( ! $this->from_address ) {
143
- if ( !empty( $this->form_data['settings']['notification_fromaddress'] ) ) {
144
- $this->from_address = $this->process_tag( $this->form_data['settings']['notification_fromaddress'] );
145
- } else {
146
- $this->from_address = get_option( 'admin_email' );
147
- }
148
  }
149
 
150
  return apply_filters( 'wpforms_email_from_address', $this->from_address, $this );
@@ -158,10 +154,8 @@ class WPForms_WP_Emails {
158
  */
159
  public function get_reply_to() {
160
 
161
- if ( ! $this->reply_to ) {
162
- if ( !empty( $this->form_data['settings']['notification_replyto'] ) ) {
163
- $this->reply_to = $this->process_tag( $this->form_data['settings']['notification_replyto'] );
164
- }
165
  }
166
 
167
  return apply_filters( 'wpforms_email_reply_to', $this->reply_to, $this );
@@ -218,8 +212,6 @@ class WPForms_WP_Emails {
218
  return apply_filters( 'wpforms_email_message', wp_strip_all_tags( $message ), $this );
219
  }
220
 
221
- //$message = $this->text_to_html( $message );
222
-
223
  ob_start();
224
 
225
  $this->get_template_part( 'header', $this->get_template(), true );
@@ -237,9 +229,11 @@ class WPForms_WP_Emails {
237
  // Hooks into the email footer
238
  do_action( 'wpforms_email_footer', $this );
239
 
 
 
 
240
  $body = ob_get_clean();
241
  $message = str_replace( '{email}', $message, $body );
242
- $message = $this->process_tag( $message, false );
243
  $message = str_replace( '{all_fields}', $this->process_all_fields( true ), $message );
244
 
245
  return apply_filters( 'wpforms_email_message', $message, $this );
@@ -271,6 +265,7 @@ class WPForms_WP_Emails {
271
 
272
  $message = $this->build_email( $message );
273
  $attachments = apply_filters( 'wpforms_email_attachments', $attachments, $this );
 
274
 
275
  // Let's do this
276
  $sent = wp_mail( $to, $subject, $message, $this->get_headers(), $attachments );
@@ -305,7 +300,6 @@ class WPForms_WP_Emails {
305
  remove_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ) );
306
  }
307
 
308
-
309
  /**
310
  * Converts text formatted HTML. This is primarily for turning line breaks
311
  * into <p> and <br/> tags.
@@ -333,7 +327,9 @@ class WPForms_WP_Emails {
333
  */
334
  function process_tag( $string = '', $santiize = true ) {
335
 
336
- $tag = apply_filters( 'wpforms_process_smart_tags', $string, $this->form_data, $this->fields );
 
 
337
 
338
  if ( $santiize ) {
339
  $tag = sanitize_text_field( $tag );
65
  private $template;
66
 
67
  /**
68
+ * Form data.
69
  *
70
  * @since 1.1.3
71
  */
72
+ private $form_data = '';
73
 
74
  /**
75
+ * Fields, formatted, and sanitized.
76
  *
77
  * @since 1.1.3
78
  */
79
+ private $fields = '';
80
 
81
  /**
82
+ * Entry ID.
83
  *
84
+ * @since 1.2.3
85
  */
86
+ private $entry_id = '';
87
 
88
  /**
89
  * Get things going.
120
  */
121
  public function get_from_name() {
122
 
123
+ if ( !empty( $this->from_name ) ) {
124
+ $this->from_name = $this->process_tag( $this->from_name );
125
+ } else {
126
+ $this->from_name = get_bloginfo( 'name' );
 
 
127
  }
128
 
129
  return apply_filters( 'wpforms_email_from_name', wp_specialchars_decode( $this->from_name ), $this );
137
  */
138
  public function get_from_address() {
139
 
140
+ if ( !empty( $this->from_address ) ) {
141
+ $this->from_address = $this->process_tag( $this->from_address );
142
+ } else {
143
+ $this->from_address = get_option( 'admin_email' );
 
 
144
  }
145
 
146
  return apply_filters( 'wpforms_email_from_address', $this->from_address, $this );
154
  */
155
  public function get_reply_to() {
156
 
157
+ if ( !empty( $this->reply_to ) ) {
158
+ $this->reply_to = $this->process_tag( $this->reply_to );
 
 
159
  }
160
 
161
  return apply_filters( 'wpforms_email_reply_to', $this->reply_to, $this );
212
  return apply_filters( 'wpforms_email_message', wp_strip_all_tags( $message ), $this );
213
  }
214
 
 
 
215
  ob_start();
216
 
217
  $this->get_template_part( 'header', $this->get_template(), true );
229
  // Hooks into the email footer
230
  do_action( 'wpforms_email_footer', $this );
231
 
232
+ $message = $this->process_tag( $message, false );
233
+ $message = nl2br( $message );
234
+
235
  $body = ob_get_clean();
236
  $message = str_replace( '{email}', $message, $body );
 
237
  $message = str_replace( '{all_fields}', $this->process_all_fields( true ), $message );
238
 
239
  return apply_filters( 'wpforms_email_message', $message, $this );
265
 
266
  $message = $this->build_email( $message );
267
  $attachments = apply_filters( 'wpforms_email_attachments', $attachments, $this );
268
+ $subject = wp_specialchars_decode( $this->process_tag( $subject ) );
269
 
270
  // Let's do this
271
  $sent = wp_mail( $to, $subject, $message, $this->get_headers(), $attachments );
300
  remove_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ) );
301
  }
302
 
 
303
  /**
304
  * Converts text formatted HTML. This is primarily for turning line breaks
305
  * into <p> and <br/> tags.
327
  */
328
  function process_tag( $string = '', $santiize = true ) {
329
 
330
+ $tag = apply_filters( 'wpforms_process_smart_tags', $string, $this->form_data, $this->fields, $this->entry_id );
331
+
332
+ $tag = stripslashes( wp_specialchars_decode( $tag ) );
333
 
334
  if ( $santiize ) {
335
  $tag = sanitize_text_field( $tag );
includes/emails/templates/default.php CHANGED
@@ -182,7 +182,7 @@ $header_image = wpforms_setting( 'email-header-image', false );
182
  /* Body -Body Text */
183
  #templateBody .mcnTextContent,
184
  #templateBody .mcnTextContent p{
185
- color:#202020;
186
  font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
187
  font-size:14px;
188
  line-height:150%;
182
  /* Body -Body Text */
183
  #templateBody .mcnTextContent,
184
  #templateBody .mcnTextContent p{
185
+ color:#555555;
186
  font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
187
  font-size:14px;
188
  line-height:150%;
includes/emails/templates/header-default.php CHANGED
@@ -180,7 +180,7 @@ $header_image = wpforms_setting( 'email-header-image', false );
180
  /* Body -Body Text */
181
  #templateBody .mcnTextContent,
182
  #templateBody .mcnTextContent p{
183
- color:#202020;
184
  font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
185
  font-size:14px;
186
  line-height:150%;
180
  /* Body -Body Text */
181
  #templateBody .mcnTextContent,
182
  #templateBody .mcnTextContent p{
183
+ color:#555555;
184
  font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
185
  font-size:14px;
186
  line-height:150%;
includes/functions.php CHANGED
@@ -731,6 +731,31 @@ function wpforms_sanitize_hex_color( $color ) {
731
  }
732
  }
733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
734
  /**
735
  * Helper function to display debug data.
736
  *
@@ -740,7 +765,7 @@ function wpforms_sanitize_hex_color( $color ) {
740
  */
741
  function wpforms_debug_data( $data, $echo = true ) {
742
 
743
- if ( ( defined( 'WPFORMS_DEBUG' ) && true === WPFORMS_DEBUG ) && is_super_admin() ) {
744
 
745
  $output = '<textarea style="background:#fff;margin: 20px 0;width:100%;height:500px;font-size:12px;font-family: Consolas,Monaco,monospace;direction: ltr;unicode-bidi: embed;line-height: 1.4;padding: 4px 6px 1px;" readonly>';
746
 
@@ -777,13 +802,19 @@ function wpforms_log( $title = '', $message = '', $level = 'errors', $args = arr
777
  if ( empty( $title ) )
778
  return;
779
 
 
 
 
 
 
780
  /**
781
  * Compare error levels to determine if we should log.
782
  * Current supported levels:
783
- * - All - always log. always.
784
- * - Errors
785
- * - Spam
786
- * - Entries
 
787
  */
788
  if ( $level != 'all' ) {
789
  $logging_levels = get_option( 'wpforms_logging', array() );
@@ -799,11 +830,63 @@ function wpforms_log( $title = '', $message = '', $level = 'errors', $args = arr
799
  );
800
  $args = wp_parse_args( $args, $defaults );
801
 
 
 
 
 
 
 
 
 
802
  // Make arrays and objects look nice
803
  if ( is_array( $message ) || is_object( $message ) ) {
804
- $message = '<pre>' . print_r( $data, true ) . '</pre>';
805
  }
806
 
807
  // Create log entry
808
- wpforms()->logs->add( $title, $message, $args['parent'], $args['type'] );
809
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
731
  }
732
  }
733
 
734
+ /**
735
+ * Debug mode bool.
736
+ *
737
+ * @since 1.2.3
738
+ */
739
+ function wpforms_debug() {
740
+
741
+ $debug = false;
742
+
743
+ if ( ( defined( 'WPFORMS_DEBUG' ) && true === WPFORMS_DEBUG ) && is_super_admin() ) {
744
+ $debug = true;
745
+ }
746
+
747
+ $debug_option = get_option( 'wpforms_debug' );
748
+
749
+ if ( $debug_option ) {
750
+ $current_user = wp_get_current_user();
751
+ if ( $current_user->user_login == $debug_option ) {
752
+ $debug = true;
753
+ }
754
+ }
755
+
756
+ return apply_filters( 'wpforms_debug', $debug );
757
+ }
758
+
759
  /**
760
  * Helper function to display debug data.
761
  *
765
  */
766
  function wpforms_debug_data( $data, $echo = true ) {
767
 
768
+ if ( wpforms_debug() ) {
769
 
770
  $output = '<textarea style="background:#fff;margin: 20px 0;width:100%;height:500px;font-size:12px;font-family: Consolas,Monaco,monospace;direction: ltr;unicode-bidi: embed;line-height: 1.4;padding: 4px 6px 1px;" readonly>';
771
 
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() );
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'] ) ) {
836
+ $meta = $args['meta'];
837
+ } else {
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' ) ) :
851
+ /**
852
+ * PHP-agnostic version of {@link array_replace_recursive()}.
853
+ *
854
+ * The array_replace_recursive() function is a PHP 5.3 function. WordPress
855
+ * currently supports down to PHP 5.2, so this method is a workaround
856
+ * for PHP 5.2.
857
+ *
858
+ * Note: array_replace_recursive() supports infinite arguments, but for our use-
859
+ * case, we only need to support two arguments.
860
+ *
861
+ * Subject to removal once WordPress makes PHP 5.3.0 the minimum requirement.
862
+ *
863
+ * @since 1.2.3
864
+ * @see http://php.net/manual/en/function.array-replace-recursive.php#109390
865
+ * @param array $base Array with keys needing to be replaced.
866
+ * @param array $replacements Array with the replaced keys.
867
+ * @return array
868
+ */
869
+ function array_replace_recursive( $base = array(), $replacements = array() ) {
870
+ // PHP 5.2-compatible version
871
+ // http://php.net/manual/en/function.array-replace-recursive.php#109390.
872
+ foreach ( array_slice( func_get_args(), 1 ) as $replacements ) {
873
+ $bref_stack = array( &$base );
874
+ $head_stack = array( $replacements );
875
+ do {
876
+ end( $bref_stack );
877
+ $bref = &$bref_stack[ key( $bref_stack ) ];
878
+ $head = array_pop( $head_stack );
879
+ unset( $bref_stack[ key( $bref_stack ) ] );
880
+ foreach ( array_keys( $head ) as $key ) {
881
+ if ( isset( $key, $bref ) && is_array( $bref[ $key ] ) && is_array( $head[ $key ] ) ) {
882
+ $bref_stack[] = &$bref[ $key ];
883
+ $head_stack[] = $head[ $key ];
884
+ } else {
885
+ $bref[ $key ] = $head[ $key ];
886
+ }
887
+ }
888
+ } while ( count( $head_stack ) );
889
+ }
890
+ return $base;
891
+ }
892
+ endif;
includes/templates/class-contact.php CHANGED
@@ -52,8 +52,12 @@ class WPForms_Template_Contact extends WPForms_Template {
52
  ),
53
  ),
54
  'settings' => array(
55
- 'notification_fromname' => '{field_id="0"}',
56
- 'notification_fromaddress' => '{field_id="1"}',
 
 
 
 
57
  'honeypot' => '1',
58
  'confirmation_message_scroll' => '1',
59
  ),
52
  ),
53
  ),
54
  'settings' => array(
55
+ 'notifications' => array(
56
+ '1' => array(
57
+ 'sender_name' => '{field_id="0"}',
58
+ 'sender_address' => '{field_id="1"}',
59
+ ),
60
+ ),
61
  'honeypot' => '1',
62
  'confirmation_message_scroll' => '1',
63
  ),
includes/templates/class-suggestion.php CHANGED
@@ -77,8 +77,12 @@ class WPForms_Template_Suggestion extends WPForms_Template {
77
  ),
78
  ),
79
  'settings' => array(
80
- 'notification_fromname' => '{field_id="0"}',
81
- 'notification_fromaddress' => '{field_id="1"}',
 
 
 
 
82
  'honeypot' => '1',
83
  'confirmation_message_scroll' => '1',
84
  ),
77
  ),
78
  ),
79
  'settings' => array(
80
+ 'notifications' => array(
81
+ '1' => array(
82
+ 'sender_name' => '{field_id="0"}',
83
+ 'sender_address' => '{field_id="1"}',
84
+ ),
85
+ ),
86
  'honeypot' => '1',
87
  'confirmation_message_scroll' => '1',
88
  ),
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.2\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms\n"
7
- "POT-Creation-Date: 2016-06-03 20:51:00+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -20,190 +20,230 @@ msgstr ""
20
  msgid "No data provided"
21
  msgstr ""
22
 
23
- #: includes/admin/ajax-actions.php:35
24
  msgid "An error occured and the form could not be saved"
25
  msgstr ""
26
 
27
- #: includes/admin/ajax-actions.php:59
28
  msgid "No form title provided"
29
  msgstr ""
30
 
31
- #: includes/admin/ajax-actions.php:84
32
  msgid "Error creating form"
33
  msgstr ""
34
 
35
- #: includes/admin/ajax-actions.php:101
36
  msgid "No form ID provided"
37
  msgstr ""
38
 
39
- #: includes/admin/ajax-actions.php:113
40
  msgid "Error updating form template"
41
  msgstr ""
42
 
43
- #: includes/admin/builder/class-builder.php:263
44
  #: includes/admin/class-editor.php:96
45
  #: pro/includes/admin/entries/class-entries.php:974
46
  msgid "Cancel"
47
  msgstr ""
48
 
49
- #: includes/admin/builder/class-builder.php:264
50
  msgid "OK"
51
  msgstr ""
52
 
53
- #: includes/admin/builder/class-builder.php:265
54
  #: includes/admin/class-editor.php:70
55
  msgid "Close"
56
  msgstr ""
57
 
58
- #: includes/admin/builder/class-builder.php:266
 
 
 
 
 
59
  #: pro/includes/admin/entries/class-entries-table.php:141
60
  msgid "Field"
61
  msgstr ""
62
 
63
- #: includes/admin/builder/class-builder.php:267
64
  msgid "Field Locked"
65
  msgstr ""
66
 
67
- #: includes/admin/builder/class-builder.php:268
68
  msgid "This field cannot be deleted because it required by the form template."
69
  msgstr ""
70
 
71
- #: includes/admin/builder/class-builder.php:269
72
  msgid "Available Fields"
73
  msgstr ""
74
 
75
- #: includes/admin/builder/class-builder.php:270
76
  msgid "No fields available"
77
  msgstr ""
78
 
79
- #: includes/admin/builder/class-builder.php:272
 
 
 
 
80
  msgid "No email fields"
81
  msgstr ""
82
 
 
 
 
 
83
  #: includes/admin/builder/class-builder.php:273
84
- #: lite/includes/admin/class-settings.php:115
85
- #: pro/includes/admin/class-settings.php:117
86
- msgid "Saving ..."
87
  msgstr ""
88
 
89
  #: includes/admin/builder/class-builder.php:274
90
- msgid "Saved!"
91
  msgstr ""
92
 
93
  #: includes/admin/builder/class-builder.php:275
94
- msgid "Save and Exit"
95
  msgstr ""
96
 
97
  #: includes/admin/builder/class-builder.php:276
98
- #: includes/admin/builder/class-builder.php:330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  msgid "Loading"
100
  msgstr ""
101
 
102
- #: includes/admin/builder/class-builder.php:282
103
  msgid "Use Template"
104
  msgstr ""
105
 
106
- #: includes/admin/builder/class-builder.php:283
107
  msgid ""
108
  "Changing templates on an existing form will DELETE existing form fields. Are "
109
  "you sure you want apply the new template?"
110
  msgstr ""
111
 
112
- #: includes/admin/builder/class-builder.php:284
113
  msgid ""
114
  "You are almost done. To embed this form on your site, please paste the "
115
  "following shortcode inside a post or page."
116
  msgstr ""
117
 
118
- #: includes/admin/builder/class-builder.php:285
119
  msgid "Or you can follow the instructions in this video."
120
  msgstr ""
121
 
122
- #: includes/admin/builder/class-builder.php:286
123
- #: includes/admin/builder/class-builder.php:380
124
  msgid "Exit"
125
  msgstr ""
126
 
127
- #: includes/admin/builder/class-builder.php:288
128
  msgid "If you exit without saving, your changes will be lost."
129
  msgstr ""
130
 
131
- #: includes/admin/builder/class-builder.php:289
132
  msgid "Are you sure you want to delete this field?"
133
  msgstr ""
134
 
135
- #: includes/admin/builder/class-builder.php:290
136
  msgid "Please enter a form title."
137
  msgstr ""
138
 
139
- #: includes/admin/builder/class-builder.php:291
140
  msgid "This item must contain at least one choice."
141
  msgstr ""
142
 
143
- #: includes/admin/builder/class-builder.php:292
144
- #: includes/admin/builder/panels/class-settings.php:165
145
- #: includes/fields/class-base.php:235
146
  msgid "Off"
147
  msgstr ""
148
 
149
- #: includes/admin/builder/class-builder.php:293
150
- #: includes/admin/builder/panels/class-settings.php:164
151
- #: includes/fields/class-base.php:235
152
  msgid "On"
153
  msgstr ""
154
 
155
- #: includes/admin/builder/class-builder.php:294
156
- #: includes/class-frontend.php:476
 
 
 
 
 
157
  #: pro/includes/fields/class-page-break.php:144
158
  msgid "Previous"
159
  msgstr ""
160
 
161
- #: includes/admin/builder/class-builder.php:296
162
- #: includes/admin/builder/functions.php:196 includes/fields/class-base.php:335
163
  msgid "Show Smart Tags"
164
  msgstr ""
165
 
166
- #: includes/admin/builder/class-builder.php:297
167
  msgid "Hide Smart Tags"
168
  msgstr ""
169
 
170
- #: includes/admin/builder/class-builder.php:298
171
- #: pro/includes/class-provider.php:857
172
- msgid "-- Select field --"
 
 
 
 
173
  msgstr ""
174
 
175
- #: includes/admin/builder/class-builder.php:353
176
  msgid "Now editing"
177
  msgstr ""
178
 
179
- #: includes/admin/builder/class-builder.php:363
180
  #: pro/includes/admin/entries/class-entries.php:510
181
  msgid "Preview Form"
182
  msgstr ""
183
 
184
- #: includes/admin/builder/class-builder.php:365
185
  #: includes/admin/overview/class-overview-table.php:159
186
  msgid "Preview"
187
  msgstr ""
188
 
189
- #: includes/admin/builder/class-builder.php:368
190
  msgid "Embed Form"
191
  msgstr ""
192
 
193
- #: includes/admin/builder/class-builder.php:370
194
  msgid "Embed"
195
  msgstr ""
196
 
197
- #: includes/admin/builder/class-builder.php:373
198
  msgid "Save Form"
199
  msgstr ""
200
 
201
- #: includes/admin/builder/class-builder.php:375
202
- #: pro/includes/admin/class-settings.php:395
203
  msgid "Save"
204
  msgstr ""
205
 
206
- #: includes/admin/builder/functions.php:141
207
  msgid "Field #"
208
  msgstr ""
209
 
@@ -261,20 +301,22 @@ msgid "Click to edit. Drag to reorder."
261
  msgstr ""
262
 
263
  #: includes/admin/builder/panels/class-settings.php:21
264
- #: includes/admin/class-menu.php:84 lite/includes/admin/class-settings.php:321
265
- #: pro/includes/admin/class-settings.php:471
266
  msgid "Settings"
267
  msgstr ""
268
 
269
  #: includes/admin/builder/panels/class-settings.php:57
270
  #: includes/admin/builder/panels/class-settings.php:87
271
- #: lite/includes/admin/class-settings.php:136
272
- #: pro/includes/admin/class-settings.php:138
273
  msgid "General"
274
  msgstr ""
275
 
276
  #: includes/admin/builder/panels/class-settings.php:58
277
- msgid "Notification"
 
 
278
  msgstr ""
279
 
280
  #: includes/admin/builder/panels/class-settings.php:59
@@ -322,47 +364,13 @@ msgstr ""
322
  msgid "Enable reCAPTCHA"
323
  msgstr ""
324
 
325
- #: includes/admin/builder/panels/class-settings.php:153
326
- #: includes/admin/builder/panels/class-settings.php:160
327
- msgid "Notifications"
328
- msgstr ""
329
-
330
- #: includes/admin/builder/panels/class-settings.php:174
331
- msgid "Send To Email Address"
332
- msgstr ""
333
-
334
- #: includes/admin/builder/panels/class-settings.php:177
335
- msgid ""
336
- "Enter the email address to receive form entry notifications. For multiple "
337
- "notifications, seperate email addresses with a comma."
338
- msgstr ""
339
-
340
- #: includes/admin/builder/panels/class-settings.php:189
341
- msgid "Email Subject"
342
- msgstr ""
343
-
344
- #: includes/admin/builder/panels/class-settings.php:191
345
- msgid "New Entry: "
346
- msgstr ""
347
-
348
- #: includes/admin/builder/panels/class-settings.php:203
349
- msgid "From Name"
350
- msgstr ""
351
-
352
- #: includes/admin/builder/panels/class-settings.php:217
353
- msgid "From Email"
354
- msgstr ""
355
-
356
- #: includes/admin/builder/panels/class-settings.php:231
357
- msgid "Reply-To"
358
- msgstr ""
359
-
360
  #: includes/admin/builder/panels/class-settings.php:254
361
  msgid "Confirmation Type"
362
  msgstr ""
363
 
364
  #: includes/admin/builder/panels/class-settings.php:258
365
- #: includes/templates/class-suggestion.php:74
 
366
  msgid "Message"
367
  msgstr ""
368
 
@@ -399,7 +407,7 @@ msgid "Setup"
399
  msgstr ""
400
 
401
  #: includes/admin/builder/panels/class-setup.php:54
402
- #: includes/class-smart-tags.php:34
403
  msgid "Form Name"
404
  msgstr ""
405
 
@@ -459,9 +467,9 @@ msgid ""
459
  "a>?"
460
  msgstr ""
461
 
462
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.2) #-#-#-#-#
463
  #. Plugin Name of the plugin/theme
464
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.2) #-#-#-#-#
465
  #. Author of the plugin/theme
466
  #: includes/admin/class-menu.php:39 includes/admin/class-menu.php:40
467
  #: includes/admin/class-menu.php:51
@@ -478,6 +486,7 @@ msgstr ""
478
 
479
  #: includes/admin/class-menu.php:62
480
  #: includes/admin/overview/class-overview.php:148
 
481
  msgid "Add New"
482
  msgstr ""
483
 
@@ -487,7 +496,7 @@ msgstr ""
487
 
488
  #: includes/admin/class-menu.php:72
489
  #: includes/admin/overview/class-overview-table.php:152
490
- #: pro/includes/admin/entries/class-entries.php:409 pro/wpforms-pro.php:202
491
  msgid "Entries"
492
  msgstr ""
493
 
@@ -659,11 +668,11 @@ msgstr ""
659
  msgid "Forms Overview"
660
  msgstr ""
661
 
662
- #: includes/class-frontend.php:281
663
  msgid "Step"
664
  msgstr ""
665
 
666
- #: includes/class-frontend.php:282
667
  msgid "of"
668
  msgstr ""
669
 
@@ -671,86 +680,94 @@ msgstr ""
671
  msgid "WPForms Logs"
672
  msgstr ""
673
 
674
- #: includes/class-preview.php:92
675
  msgid "Entry #%d"
676
  msgstr ""
677
 
678
- #: includes/class-preview.php:104
679
  #: pro/includes/admin/entries/class-entries.php:896
680
  msgid "This entry does not have any fields"
681
  msgstr ""
682
 
683
- #: includes/class-preview.php:121
684
  #: pro/includes/admin/entries/class-entries.php:912
685
  msgid "Field ID #%d"
686
  msgstr ""
687
 
688
- #: includes/class-preview.php:126
689
  #: pro/includes/admin/entries/class-entries.php:917
690
  msgid "Empty"
691
  msgstr ""
692
 
693
- #: includes/class-preview.php:170
694
  msgid ""
695
  "This is the WPForms preview page. All your form previews will be handled on "
696
  "this page."
697
  msgstr ""
698
 
699
- #: includes/class-preview.php:171
700
  msgid ""
701
  "The page is set to private, so it is not publically accessible. Please do "
702
  "not delete this page :) ."
703
  msgstr ""
704
 
705
- #: includes/class-preview.php:176
706
  msgid "WPForms Preview"
707
  msgstr ""
708
 
709
- #: includes/class-preview.php:258
710
  msgid "This is a preview of your form. This page not publically accessible."
711
  msgstr ""
712
 
713
- #: includes/class-preview.php:259
714
  msgid " Preview"
715
  msgstr ""
716
 
717
- #: includes/class-process.php:71
718
  msgid "Invalid form."
719
  msgstr ""
720
 
721
- #: includes/class-process.php:105
722
  msgid "Incorrect reCAPTCHA, please try again."
723
  msgstr ""
724
 
725
- #: includes/class-process.php:112 includes/class-process.php:155
726
  msgid "Form has not been submitted, please see the errors below."
727
  msgstr ""
728
 
729
- #: includes/class-process.php:119
730
  msgid "WPForms honeypot field triggered."
731
  msgstr ""
732
 
733
- #: includes/class-process.php:303
734
  msgid "New %s Entry"
735
  msgstr ""
736
 
737
  #: includes/class-smart-tags.php:33
738
- msgid "Form ID"
 
 
 
 
739
  msgstr ""
740
 
741
  #: includes/class-smart-tags.php:35
 
 
 
 
742
  msgid "Embedded Post/Page Title"
743
  msgstr ""
744
 
745
- #: includes/class-smart-tags.php:36
746
  msgid "Embeded Post Page URL"
747
  msgstr ""
748
 
749
- #: includes/class-smart-tags.php:37
750
  msgid "Embedded Post/Page ID"
751
  msgstr ""
752
 
753
- #: includes/class-smart-tags.php:38
754
  #: pro/includes/admin/entries/class-entries-export.php:172
755
  #: pro/includes/admin/entries/class-entries-table.php:119
756
  #: pro/includes/fields/class-date-time.php:48
@@ -760,43 +777,43 @@ msgstr ""
760
  msgid "Date"
761
  msgstr ""
762
 
763
- #: includes/class-smart-tags.php:39
764
  msgid "Query String Variable"
765
  msgstr ""
766
 
767
- #: includes/class-smart-tags.php:40
768
  msgid "User IP Address"
769
  msgstr ""
770
 
771
- #: includes/class-smart-tags.php:41
772
  msgid "User ID"
773
  msgstr ""
774
 
775
- #: includes/class-smart-tags.php:42
776
  msgid "User Name"
777
  msgstr ""
778
 
779
- #: includes/class-smart-tags.php:43
780
  msgid "User Email"
781
  msgstr ""
782
 
783
- #: includes/class-smart-tags.php:44
784
  msgid "Referer URL"
785
  msgstr ""
786
 
787
- #: includes/class-smart-tags.php:45
788
  msgid "Login URL"
789
  msgstr ""
790
 
791
- #: includes/class-smart-tags.php:46
792
  msgid "Logout URL"
793
  msgstr ""
794
 
795
- #: includes/class-smart-tags.php:47
796
  msgid "Register URL"
797
  msgstr ""
798
 
799
- #: includes/class-smart-tags.php:48
800
  msgid "Lost Password URL"
801
  msgstr ""
802
 
@@ -812,13 +829,13 @@ msgstr ""
812
  msgid "Display form description"
813
  msgstr ""
814
 
815
- #: includes/emails/class-emails.php:260
816
  msgid ""
817
  "You cannot send emails with WPForms_WP_Emails until init/admin_init has been "
818
  "reached"
819
  msgstr ""
820
 
821
- #: includes/emails/class-emails.php:374 includes/emails/class-emails.php:396
822
  msgid "Field ID #"
823
  msgstr ""
824
 
@@ -1014,8 +1031,8 @@ msgid "Show Values"
1014
  msgstr ""
1015
 
1016
  #: includes/fields/class-email.php:21
1017
- #: lite/includes/admin/class-settings.php:208
1018
- #: pro/includes/admin/class-settings.php:269
1019
  #: pro/includes/templates/class-donation.php:42
1020
  #: pro/includes/templates/class-order.php:42
1021
  #: pro/includes/templates/class-request-quote.php:46
@@ -1094,17 +1111,17 @@ msgid "Last name field advanced options."
1094
  msgstr ""
1095
 
1096
  #: includes/fields/class-name.php:160 includes/fields/class-name.php:242
1097
- #: pro/includes/class-provider.php:394
1098
  msgid "First"
1099
  msgstr ""
1100
 
1101
  #: includes/fields/class-name.php:164 includes/fields/class-name.php:260
1102
- #: pro/includes/class-provider.php:406
1103
  msgid "Middle"
1104
  msgstr ""
1105
 
1106
  #: includes/fields/class-name.php:168 includes/fields/class-name.php:287
1107
- #: pro/includes/class-provider.php:418
1108
  msgid "Last"
1109
  msgstr ""
1110
 
@@ -1197,114 +1214,115 @@ msgstr ""
1197
  msgid "Product Development"
1198
  msgstr ""
1199
 
1200
- #: includes/templates/class-suggestion.php:59
1201
- msgid "Other"
1202
- msgstr ""
1203
-
1204
  #: includes/templates/class-suggestion.php:67
1205
  msgid "Subject"
1206
  msgstr ""
1207
 
1208
- #: lite/includes/admin/class-settings.php:116
1209
- #: pro/includes/admin/class-settings.php:118
1210
- msgid "Are you sure you want to disconnect this account?"
1211
- msgstr ""
1212
-
1213
  #: lite/includes/admin/class-settings.php:117
1214
  #: pro/includes/admin/class-settings.php:119
1215
- msgid "Upload or Choose Your Image"
1216
  msgstr ""
1217
 
1218
  #: lite/includes/admin/class-settings.php:118
1219
  #: pro/includes/admin/class-settings.php:120
 
 
 
 
 
1220
  msgid "Use Image"
1221
  msgstr ""
1222
 
1223
- #: lite/includes/admin/class-settings.php:159
1224
- #: pro/includes/admin/class-settings.php:163
1225
- #: pro/includes/admin/class-settings.php:353
 
 
 
 
 
1226
  msgid "Settings check failed."
1227
  msgstr ""
1228
 
1229
- #: lite/includes/admin/class-settings.php:177
1230
- #: pro/includes/admin/class-settings.php:181
1231
  msgid "General settings updated."
1232
  msgstr ""
1233
 
1234
- #: lite/includes/admin/class-settings.php:194
1235
- #: pro/includes/admin/class-settings.php:255
1236
  msgid "Include Form Styling"
1237
  msgstr ""
1238
 
1239
- #: lite/includes/admin/class-settings.php:198
1240
- #: pro/includes/admin/class-settings.php:259
1241
  msgid "Base and form theme styling"
1242
  msgstr ""
1243
 
1244
- #: lite/includes/admin/class-settings.php:199
1245
- #: pro/includes/admin/class-settings.php:260
1246
  msgid "Base styling only"
1247
  msgstr ""
1248
 
1249
- #: lite/includes/admin/class-settings.php:200
1250
- #: pro/includes/admin/class-settings.php:261
1251
  #: pro/includes/fields/class-page-break.php:58
1252
  msgid "None"
1253
  msgstr ""
1254
 
1255
- #: lite/includes/admin/class-settings.php:202
1256
- #: pro/includes/admin/class-settings.php:263
1257
  msgid "Determines which CSS files to load for the site."
1258
  msgstr ""
1259
 
1260
- #: lite/includes/admin/class-settings.php:213
1261
- #: pro/includes/admin/class-settings.php:274
1262
  msgid "Email Template"
1263
  msgstr ""
1264
 
1265
- #: lite/includes/admin/class-settings.php:217
1266
- #: pro/includes/admin/class-settings.php:278
1267
  msgid "Default HTML template"
1268
  msgstr ""
1269
 
1270
- #: lite/includes/admin/class-settings.php:218
1271
- #: pro/includes/admin/class-settings.php:279
1272
  msgid "Plain Text"
1273
  msgstr ""
1274
 
1275
- #: lite/includes/admin/class-settings.php:220
1276
- #: pro/includes/admin/class-settings.php:281
1277
  msgid "Determines how email notifications will be formatted."
1278
  msgstr ""
1279
 
1280
- #: lite/includes/admin/class-settings.php:225
1281
- #: pro/includes/admin/class-settings.php:286
1282
  msgid "Email Header Image "
1283
  msgstr ""
1284
 
1285
- #: lite/includes/admin/class-settings.php:237
1286
- #: pro/includes/admin/class-settings.php:298
1287
  msgid "Upload Image"
1288
  msgstr ""
1289
 
1290
- #: lite/includes/admin/class-settings.php:239
1291
- #: pro/includes/admin/class-settings.php:300
1292
  msgid ""
1293
  "Upload or choose a logo to be displayed at the top of email notifications."
1294
  msgstr ""
1295
 
1296
- #: lite/includes/admin/class-settings.php:240
1297
- #: pro/includes/admin/class-settings.php:301
1298
  msgid "Recommended size is 300x100 or smaller for best support on all devices."
1299
  msgstr ""
1300
 
1301
- #: lite/includes/admin/class-settings.php:247
1302
- #: pro/includes/admin/class-settings.php:308
1303
  msgid "reCAPTCHA"
1304
  msgstr ""
1305
 
1306
- #: lite/includes/admin/class-settings.php:248
1307
- #: pro/includes/admin/class-settings.php:309
1308
  msgid ""
1309
  "reCAPTCHA is a free anti-spam service from Google. Its helps protect your "
1310
  "website from spam and abuse while letting real people pass through with "
@@ -1314,32 +1332,71 @@ msgid ""
1314
  "\"_blank\">read our walk through</a> for step-by-step directions."
1315
  msgstr ""
1316
 
1317
- #: lite/includes/admin/class-settings.php:253
1318
- #: pro/includes/admin/class-settings.php:314
1319
  msgid "reCAPTCHA Site key"
1320
  msgstr ""
1321
 
1322
- #: lite/includes/admin/class-settings.php:261
1323
- #: pro/includes/admin/class-settings.php:322
1324
  msgid "reCAPTCHA Secret key"
1325
  msgstr ""
1326
 
1327
- #: lite/includes/admin/class-settings.php:270
1328
- #: pro/includes/admin/class-settings.php:331
1329
  msgid "Save General Settings"
1330
  msgstr ""
1331
 
1332
- #: lite/wpforms-lite.php:265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1333
  msgid "is a PRO Feature"
1334
  msgstr ""
1335
 
1336
- #: lite/wpforms-lite.php:266
1337
  msgid ""
1338
  "We're sorry, %name% is not available on your plan.<br><br>Please upgrade to "
1339
  "the PRO plan to unlock all these awesome features."
1340
  msgstr ""
1341
 
1342
- #: lite/wpforms-lite.php:267
1343
  msgid "Upgrade to PRO"
1344
  msgstr ""
1345
 
@@ -1373,7 +1430,7 @@ msgid "Addon installed."
1373
  msgstr ""
1374
 
1375
  #: pro/includes/admin/builder/panels/class-payments.php:21
1376
- #: pro/includes/admin/class-settings.php:139
1377
  msgid "Payments"
1378
  msgstr ""
1379
 
@@ -1420,7 +1477,7 @@ msgid "Are you sure you want to delete this connecton?"
1420
  msgstr ""
1421
 
1422
  #: pro/includes/admin/builder/panels/class-providers.php:57
1423
- msgid "Enter a connection nickname"
1424
  msgstr ""
1425
 
1426
  #: pro/includes/admin/builder/panels/class-providers.php:58
@@ -1573,68 +1630,68 @@ msgid ""
1573
  "continue receiving automatic updates."
1574
  msgstr ""
1575
 
1576
- #: pro/includes/admin/class-settings.php:140
1577
  msgid "Integrations"
1578
  msgstr ""
1579
 
1580
- #: pro/includes/admin/class-settings.php:188
1581
  msgid "Please enter a license key to verify."
1582
  msgstr ""
1583
 
1584
- #: pro/includes/admin/class-settings.php:218
1585
  msgid "License"
1586
  msgstr ""
1587
 
1588
- #: pro/includes/admin/class-settings.php:219
1589
  msgid "Your license key provides access to updates and Add-ons. "
1590
  msgstr ""
1591
 
1592
- #: pro/includes/admin/class-settings.php:224
1593
  msgid "License Key"
1594
  msgstr ""
1595
 
1596
- #: pro/includes/admin/class-settings.php:228
1597
  msgid "Verify Key"
1598
  msgstr ""
1599
 
1600
- #: pro/includes/admin/class-settings.php:230
1601
  msgid "Deactivate Key"
1602
  msgstr ""
1603
 
1604
- #: pro/includes/admin/class-settings.php:238
1605
  msgid "License Key Type"
1606
  msgstr ""
1607
 
1608
- #: pro/includes/admin/class-settings.php:241
1609
  msgid "Your license key type for this site is <strong>%s.</strong>"
1610
  msgstr ""
1611
 
1612
- #: pro/includes/admin/class-settings.php:242
1613
  msgid "Refresh Key"
1614
  msgstr ""
1615
 
1616
- #: pro/includes/admin/class-settings.php:243
1617
  msgid ""
1618
  "If your license has been upgraded or is incorrect, you may force a refresh."
1619
  msgstr ""
1620
 
1621
- #: pro/includes/admin/class-settings.php:364
1622
  msgid "Settings updated."
1623
  msgstr ""
1624
 
1625
- #: pro/includes/admin/class-settings.php:378
1626
  msgid "Currency"
1627
  msgstr ""
1628
 
1629
- #: pro/includes/admin/class-settings.php:382
1630
  msgid "US Dollars (USD)"
1631
  msgstr ""
1632
 
1633
- #: pro/includes/admin/class-settings.php:384
1634
  msgid "Determines which currency to use for payments."
1635
  msgstr ""
1636
 
1637
- #: pro/includes/admin/class-settings.php:415
1638
  msgid ""
1639
  "You do not have any marketing add-ons activated. You can head over to the <a "
1640
  "href=\"%s\">Add-Ons page</a> to install and activate the add-on for your "
@@ -1932,107 +1989,111 @@ msgstr ""
1932
  msgid "Resend Notifications"
1933
  msgstr ""
1934
 
1935
- #: pro/includes/class-provider.php:128 pro/includes/class-provider.php:1064
1936
- #: pro/includes/class-provider.php:1099
 
 
 
 
1937
  msgid "You do not have permission"
1938
  msgstr ""
1939
 
1940
- #: pro/includes/class-provider.php:383
1941
  msgid "Full"
1942
  msgstr ""
1943
 
1944
- #: pro/includes/class-provider.php:605
1945
  msgid "Select Account"
1946
  msgstr ""
1947
 
1948
- #: pro/includes/class-provider.php:617 pro/includes/class-provider.php:1178
1949
  msgid "Add New Account"
1950
  msgstr ""
1951
 
1952
- #: pro/includes/class-provider.php:647
1953
  msgid "Select List"
1954
  msgstr ""
1955
 
1956
- #: pro/includes/class-provider.php:687
1957
  msgid "Select Groups"
1958
  msgstr ""
1959
 
1960
- #: pro/includes/class-provider.php:689
1961
  msgid ""
1962
  "We also noticed that you have some segments in your list. You can select "
1963
  "specific list segments below if needed. This is optional."
1964
  msgstr ""
1965
 
1966
- #: pro/includes/class-provider.php:744 pro/includes/class-provider.php:749
1967
  msgid "List Fields"
1968
  msgstr ""
1969
 
1970
- #: pro/includes/class-provider.php:749
1971
  msgid "Available Form Fields"
1972
  msgstr ""
1973
 
1974
- #: pro/includes/class-provider.php:810
1975
  msgid "Conditional Logic"
1976
  msgstr ""
1977
 
1978
- #: pro/includes/class-provider.php:819
1979
  msgid "Enable conditional logic"
1980
  msgstr ""
1981
 
1982
- #: pro/includes/class-provider.php:826
1983
  msgid "Process this form if"
1984
  msgstr ""
1985
 
1986
- #: pro/includes/class-provider.php:874
1987
- msgid "is"
1988
  msgstr ""
1989
 
1990
- #: pro/includes/class-provider.php:875
1991
- msgid "is not"
1992
  msgstr ""
1993
 
1994
- #: pro/includes/class-provider.php:891
1995
- msgid "-- Select Choice --"
1996
  msgstr ""
1997
 
1998
- #: pro/includes/class-provider.php:909
1999
  msgid "AND"
2000
  msgstr ""
2001
 
2002
- #: pro/includes/class-provider.php:926
2003
  msgid "Add rule group"
2004
  msgstr ""
2005
 
2006
- #: pro/includes/class-provider.php:1019
2007
- msgid "Add New Connection"
2008
- msgstr ""
2009
-
2010
- #: pro/includes/class-provider.php:1068 pro/includes/class-provider.php:1103
2011
  msgid "Missing data"
2012
  msgstr ""
2013
 
2014
- #: pro/includes/class-provider.php:1080
2015
  msgid "Connection missing"
2016
  msgstr ""
2017
 
2018
- #: pro/includes/class-provider.php:1117 pro/includes/class-provider.php:1168
2019
  msgid "Connected on: "
2020
  msgstr ""
2021
 
2022
- #: pro/includes/class-provider.php:1118 pro/includes/class-provider.php:1169
2023
  msgid "Disconnect "
2024
  msgstr ""
2025
 
2026
- #: pro/includes/class-provider.php:1154
 
 
 
 
2027
  msgid "Connected"
2028
  msgstr ""
2029
 
2030
- #: pro/includes/class-provider.php:1184
2031
  msgid ""
2032
  "Please fill out all of the fields below to add your new provider account."
2033
  msgstr ""
2034
 
2035
- #: pro/includes/class-provider.php:1190
2036
  msgid "Connect to"
2037
  msgstr ""
2038
 
@@ -2561,17 +2622,29 @@ msgstr ""
2561
  msgid "Click the marketing tab to configure your newsletter service provider"
2562
  msgstr ""
2563
 
2564
- #: pro/wpforms-pro.php:189
2565
  msgid "Disable storing entry information in WordPress"
2566
  msgstr ""
2567
 
 
 
 
 
 
 
 
 
 
 
 
 
2568
  #: wpforms.php:54
2569
  msgid "Please deactivate WPForms Lite before activating WPForms"
2570
  msgstr ""
2571
 
2572
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.2) #-#-#-#-#
2573
  #. Plugin URI of the plugin/theme
2574
- #. #-#-#-#-# wpforms.pot (WPForms 1.2.2) #-#-#-#-#
2575
  #. Author URI of the plugin/theme
2576
  msgid "https://wpforms.com"
2577
  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.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"
20
  msgid "No data provided"
21
  msgstr ""
22
 
23
+ #: includes/admin/ajax-actions.php:66
24
  msgid "An error occured and the form could not be saved"
25
  msgstr ""
26
 
27
+ #: includes/admin/ajax-actions.php:90
28
  msgid "No form title provided"
29
  msgstr ""
30
 
31
+ #: includes/admin/ajax-actions.php:115
32
  msgid "Error creating form"
33
  msgstr ""
34
 
35
+ #: includes/admin/ajax-actions.php:132
36
  msgid "No form ID provided"
37
  msgstr ""
38
 
39
+ #: includes/admin/ajax-actions.php:144
40
  msgid "Error updating form template"
41
  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
 
49
+ #: includes/admin/builder/class-builder.php:261
50
  msgid "OK"
51
  msgstr ""
52
 
53
+ #: includes/admin/builder/class-builder.php:262
54
  #: includes/admin/class-editor.php:70
55
  msgid "Close"
56
  msgstr ""
57
 
58
+ #: includes/admin/builder/class-builder.php:263
59
+ msgid ""
60
+ "Due to form changes, conditional logic rules have been removed or updated:"
61
+ msgstr ""
62
+
63
+ #: includes/admin/builder/class-builder.php:264
64
  #: pro/includes/admin/entries/class-entries-table.php:141
65
  msgid "Field"
66
  msgstr ""
67
 
68
+ #: includes/admin/builder/class-builder.php:265
69
  msgid "Field Locked"
70
  msgstr ""
71
 
72
+ #: includes/admin/builder/class-builder.php:266
73
  msgid "This field cannot be deleted because it required by the form template."
74
  msgstr ""
75
 
76
+ #: includes/admin/builder/class-builder.php:267
77
  msgid "Available Fields"
78
  msgstr ""
79
 
80
+ #: includes/admin/builder/class-builder.php:268
81
  msgid "No fields available"
82
  msgstr ""
83
 
84
+ #: includes/admin/builder/class-builder.php:269
85
+ msgid "Heads up!"
86
+ msgstr ""
87
+
88
+ #: includes/admin/builder/class-builder.php:271
89
  msgid "No email fields"
90
  msgstr ""
91
 
92
+ #: includes/admin/builder/class-builder.php:272
93
+ msgid "Are you sure you want to delete this notification?"
94
+ msgstr ""
95
+
96
  #: includes/admin/builder/class-builder.php:273
97
+ msgid "Enter a notification name"
 
 
98
  msgstr ""
99
 
100
  #: includes/admin/builder/class-builder.php:274
101
+ msgid "Eg: User Confirmation"
102
  msgstr ""
103
 
104
  #: includes/admin/builder/class-builder.php:275
105
+ msgid "You must provide a notification name"
106
  msgstr ""
107
 
108
  #: includes/admin/builder/class-builder.php:276
109
+ msgid ""
110
+ "Form must contain one notification. To disable all notifications use the "
111
+ "setting Notifications dropdown setting."
112
+ 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
+
120
+ #: includes/admin/builder/class-builder.php:278
121
+ msgid "Saved!"
122
+ msgstr ""
123
+
124
+ #: includes/admin/builder/class-builder.php:279
125
+ 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
 
133
+ #: includes/admin/builder/class-builder.php:286
134
  msgid "Use Template"
135
  msgstr ""
136
 
137
+ #: includes/admin/builder/class-builder.php:287
138
  msgid ""
139
  "Changing templates on an existing form will DELETE existing form fields. Are "
140
  "you sure you want apply the new template?"
141
  msgstr ""
142
 
143
+ #: includes/admin/builder/class-builder.php:288
144
  msgid ""
145
  "You are almost done. To embed this form on your site, please paste the "
146
  "following shortcode inside a post or page."
147
  msgstr ""
148
 
149
+ #: includes/admin/builder/class-builder.php:289
150
  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
 
158
+ #: includes/admin/builder/class-builder.php:292
159
  msgid "If you exit without saving, your changes will be lost."
160
  msgstr ""
161
 
162
+ #: includes/admin/builder/class-builder.php:293
163
  msgid "Are you sure you want to delete this field?"
164
  msgstr ""
165
 
166
+ #: includes/admin/builder/class-builder.php:294
167
  msgid "Please enter a form title."
168
  msgstr ""
169
 
170
+ #: includes/admin/builder/class-builder.php:295
171
  msgid "This item must contain at least one choice."
172
  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
 
186
+ #: includes/admin/builder/class-builder.php:298
187
+ #: includes/templates/class-suggestion.php:59
188
+ msgid "Other"
189
+ msgstr ""
190
+
191
+ #: includes/admin/builder/class-builder.php:299
192
+ #: includes/class-frontend.php:477
193
  #: pro/includes/fields/class-page-break.php:144
194
  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
 
202
+ #: includes/admin/builder/class-builder.php:303
203
  msgid "Hide Smart Tags"
204
  msgstr ""
205
 
206
+ #: includes/admin/builder/class-builder.php:304
207
+ msgid "-- Select Field --"
208
+ msgstr ""
209
+
210
+ #: includes/admin/builder/class-builder.php:305
211
+ #: pro/includes/class-provider.php:912
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
  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
 
322
  #: includes/admin/builder/panels/class-settings.php:59
364
  msgid "Enable reCAPTCHA"
365
  msgstr ""
366
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  #: includes/admin/builder/panels/class-settings.php:254
368
  msgid "Confirmation Type"
369
  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
 
407
  msgstr ""
408
 
409
  #: includes/admin/builder/panels/class-setup.php:54
410
+ #: includes/class-smart-tags.php:36
411
  msgid "Form Name"
412
  msgstr ""
413
 
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
486
 
487
  #: includes/admin/class-menu.php:62
488
  #: includes/admin/overview/class-overview.php:148
489
+ #: pro/includes/class-provider.php:1050
490
  msgid "Add New"
491
  msgstr ""
492
 
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
 
668
  msgid "Forms Overview"
669
  msgstr ""
670
 
671
+ #: includes/class-frontend.php:282
672
  msgid "Step"
673
  msgstr ""
674
 
675
+ #: includes/class-frontend.php:283
676
  msgid "of"
677
  msgstr ""
678
 
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
 
702
+ #: includes/class-preview.php:173
703
  msgid ""
704
  "This is the WPForms preview page. All your form previews will be handled on "
705
  "this page."
706
  msgstr ""
707
 
708
+ #: includes/class-preview.php:174
709
  msgid ""
710
  "The page is set to private, so it is not publically accessible. Please do "
711
  "not delete this page :) ."
712
  msgstr ""
713
 
714
+ #: includes/class-preview.php:179
715
  msgid "WPForms Preview"
716
  msgstr ""
717
 
718
+ #: includes/class-preview.php:261
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
 
726
+ #: includes/class-process.php:79
727
  msgid "Invalid form."
728
  msgstr ""
729
 
730
+ #: includes/class-process.php:113
731
  msgid "Incorrect reCAPTCHA, please try again."
732
  msgstr ""
733
 
734
+ #: includes/class-process.php:120 includes/class-process.php:163
735
  msgid "Form has not been submitted, please see the errors below."
736
  msgstr ""
737
 
738
+ #: includes/class-process.php:127
739
  msgid "WPForms honeypot field triggered."
740
  msgstr ""
741
 
742
+ #: includes/class-process.php:345
743
  msgid "New %s Entry"
744
  msgstr ""
745
 
746
  #: includes/class-smart-tags.php:33
747
+ msgid "Site Administer Email"
748
+ msgstr ""
749
+
750
+ #: includes/class-smart-tags.php:34
751
+ msgid "Entry ID"
752
  msgstr ""
753
 
754
  #: includes/class-smart-tags.php:35
755
+ msgid "Form ID"
756
+ msgstr ""
757
+
758
+ #: includes/class-smart-tags.php:37
759
  msgid "Embedded Post/Page Title"
760
  msgstr ""
761
 
762
+ #: includes/class-smart-tags.php:38
763
  msgid "Embeded Post Page URL"
764
  msgstr ""
765
 
766
+ #: includes/class-smart-tags.php:39
767
  msgid "Embedded Post/Page ID"
768
  msgstr ""
769
 
770
+ #: includes/class-smart-tags.php:40
771
  #: pro/includes/admin/entries/class-entries-export.php:172
772
  #: pro/includes/admin/entries/class-entries-table.php:119
773
  #: pro/includes/fields/class-date-time.php:48
777
  msgid "Date"
778
  msgstr ""
779
 
780
+ #: includes/class-smart-tags.php:41
781
  msgid "Query String Variable"
782
  msgstr ""
783
 
784
+ #: includes/class-smart-tags.php:42
785
  msgid "User IP Address"
786
  msgstr ""
787
 
788
+ #: includes/class-smart-tags.php:43
789
  msgid "User ID"
790
  msgstr ""
791
 
792
+ #: includes/class-smart-tags.php:44
793
  msgid "User Name"
794
  msgstr ""
795
 
796
+ #: includes/class-smart-tags.php:45
797
  msgid "User Email"
798
  msgstr ""
799
 
800
+ #: includes/class-smart-tags.php:46
801
  msgid "Referer URL"
802
  msgstr ""
803
 
804
+ #: includes/class-smart-tags.php:47
805
  msgid "Login URL"
806
  msgstr ""
807
 
808
+ #: includes/class-smart-tags.php:48
809
  msgid "Logout URL"
810
  msgstr ""
811
 
812
+ #: includes/class-smart-tags.php:49
813
  msgid "Register URL"
814
  msgstr ""
815
 
816
+ #: includes/class-smart-tags.php:50
817
  msgid "Lost Password URL"
818
  msgstr ""
819
 
829
  msgid "Display form description"
830
  msgstr ""
831
 
832
+ #: includes/emails/class-emails.php:254
833
  msgid ""
834
  "You cannot send emails with WPForms_WP_Emails until init/admin_init has been "
835
  "reached"
836
  msgstr ""
837
 
838
+ #: includes/emails/class-emails.php:370 includes/emails/class-emails.php:392
839
  msgid "Field ID #"
840
  msgstr ""
841
 
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
1111
  msgstr ""
1112
 
1113
  #: includes/fields/class-name.php:160 includes/fields/class-name.php:242
1114
+ #: pro/includes/class-provider.php:415
1115
  msgid "First"
1116
  msgstr ""
1117
 
1118
  #: includes/fields/class-name.php:164 includes/fields/class-name.php:260
1119
+ #: pro/includes/class-provider.php:427
1120
  msgid "Middle"
1121
  msgstr ""
1122
 
1123
  #: includes/fields/class-name.php:168 includes/fields/class-name.php:287
1124
+ #: pro/includes/class-provider.php:439
1125
  msgid "Last"
1126
  msgstr ""
1127
 
1214
  msgid "Product Development"
1215
  msgstr ""
1216
 
 
 
 
 
1217
  #: includes/templates/class-suggestion.php:67
1218
  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
  "\"_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 ""
1388
+
1389
+ #: lite/wpforms-lite.php:414
1390
  msgid "is a PRO Feature"
1391
  msgstr ""
1392
 
1393
+ #: lite/wpforms-lite.php:415
1394
  msgid ""
1395
  "We're sorry, %name% is not available on your plan.<br><br>Please upgrade to "
1396
  "the PRO plan to unlock all these awesome features."
1397
  msgstr ""
1398
 
1399
+ #: lite/wpforms-lite.php:416
1400
  msgid "Upgrade to PRO"
1401
  msgstr ""
1402
 
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
 
1477
  msgstr ""
1478
 
1479
  #: pro/includes/admin/builder/panels/class-providers.php:57
1480
+ msgid "Enter a %type% nickname"
1481
  msgstr ""
1482
 
1483
  #: pro/includes/admin/builder/panels/class-providers.php:58
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 "
1989
  msgid "Resend Notifications"
1990
  msgstr ""
1991
 
1992
+ #: pro/includes/class-provider.php:84
1993
+ msgid "Connection"
1994
+ msgstr ""
1995
+
1996
+ #: pro/includes/class-provider.php:149 pro/includes/class-provider.php:1095
1997
+ #: pro/includes/class-provider.php:1130
1998
  msgid "You do not have permission"
1999
  msgstr ""
2000
 
2001
+ #: pro/includes/class-provider.php:404
2002
  msgid "Full"
2003
  msgstr ""
2004
 
2005
+ #: pro/includes/class-provider.php:626
2006
  msgid "Select Account"
2007
  msgstr ""
2008
 
2009
+ #: pro/includes/class-provider.php:638 pro/includes/class-provider.php:1209
2010
  msgid "Add New Account"
2011
  msgstr ""
2012
 
2013
+ #: pro/includes/class-provider.php:668
2014
  msgid "Select List"
2015
  msgstr ""
2016
 
2017
+ #: pro/includes/class-provider.php:708
2018
  msgid "Select Groups"
2019
  msgstr ""
2020
 
2021
+ #: pro/includes/class-provider.php:710
2022
  msgid ""
2023
  "We also noticed that you have some segments in your list. You can select "
2024
  "specific list segments below if needed. This is optional."
2025
  msgstr ""
2026
 
2027
+ #: pro/includes/class-provider.php:765 pro/includes/class-provider.php:770
2028
  msgid "List Fields"
2029
  msgstr ""
2030
 
2031
+ #: pro/includes/class-provider.php:770
2032
  msgid "Available Form Fields"
2033
  msgstr ""
2034
 
2035
+ #: pro/includes/class-provider.php:831
2036
  msgid "Conditional Logic"
2037
  msgstr ""
2038
 
2039
+ #: pro/includes/class-provider.php:840
2040
  msgid "Enable conditional logic"
2041
  msgstr ""
2042
 
2043
+ #: pro/includes/class-provider.php:847
2044
  msgid "Process this form if"
2045
  msgstr ""
2046
 
2047
+ #: pro/includes/class-provider.php:878
2048
+ msgid "-- Select field --"
2049
  msgstr ""
2050
 
2051
+ #: pro/includes/class-provider.php:895
2052
+ msgid "is"
2053
  msgstr ""
2054
 
2055
+ #: pro/includes/class-provider.php:896
2056
+ msgid "is not"
2057
  msgstr ""
2058
 
2059
+ #: pro/includes/class-provider.php:930
2060
  msgid "AND"
2061
  msgstr ""
2062
 
2063
+ #: pro/includes/class-provider.php:947
2064
  msgid "Add rule group"
2065
  msgstr ""
2066
 
2067
+ #: pro/includes/class-provider.php:1099 pro/includes/class-provider.php:1134
 
 
 
 
2068
  msgid "Missing data"
2069
  msgstr ""
2070
 
2071
+ #: pro/includes/class-provider.php:1111
2072
  msgid "Connection missing"
2073
  msgstr ""
2074
 
2075
+ #: pro/includes/class-provider.php:1148 pro/includes/class-provider.php:1199
2076
  msgid "Connected on: "
2077
  msgstr ""
2078
 
2079
+ #: pro/includes/class-provider.php:1149 pro/includes/class-provider.php:1200
2080
  msgid "Disconnect "
2081
  msgstr ""
2082
 
2083
+ #: pro/includes/class-provider.php:1184
2084
+ msgid "Integrate %s with WPForms"
2085
+ msgstr ""
2086
+
2087
+ #: pro/includes/class-provider.php:1185
2088
  msgid "Connected"
2089
  msgstr ""
2090
 
2091
+ #: pro/includes/class-provider.php:1215
2092
  msgid ""
2093
  "Please fill out all of the fields below to add your new provider account."
2094
  msgstr ""
2095
 
2096
+ #: pro/includes/class-provider.php:1221
2097
  msgid "Connect to"
2098
  msgstr ""
2099
 
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 ""
lite/includes/admin/class-settings.php CHANGED
@@ -66,6 +66,7 @@ class WPForms_Settings {
66
  $this->options = get_option( 'wpforms_settings', array() );
67
 
68
  add_action( 'wpforms_tab_settings_general', array( $this, 'settings_page_tab_general' ) );
 
69
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
70
  add_action( 'wpforms_admin_page', array( $this, 'output' ) );
71
 
@@ -134,6 +135,7 @@ class WPForms_Settings {
134
  // Define our base tabs
135
  $tabs = array(
136
  'general' => __( 'General', 'wpforms' ),
 
137
  );
138
 
139
  // Allow for addons and extensions to add additional tabs
@@ -275,6 +277,22 @@ class WPForms_Settings {
275
  <?php
276
  }
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  /**
279
  * Build the output for the plugin settings page.
280
  *
@@ -323,5 +341,186 @@ class WPForms_Settings {
323
 
324
  return $links;
325
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  }
327
  new WPForms_Settings;
66
  $this->options = get_option( 'wpforms_settings', array() );
67
 
68
  add_action( 'wpforms_tab_settings_general', array( $this, 'settings_page_tab_general' ) );
69
+ add_action( 'wpforms_tab_settings_system', array( $this, 'settings_page_tab_system' ) );
70
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
71
  add_action( 'wpforms_admin_page', array( $this, 'output' ) );
72
 
135
  // Define our base tabs
136
  $tabs = array(
137
  'general' => __( 'General', 'wpforms' ),
138
+ 'system' => __( 'System Information', 'wpforms' ),
139
  );
140
 
141
  // Allow for addons and extensions to add additional tabs
277
  <?php
278
  }
279
 
280
+ /**
281
+ * Build the output for System Info (system) tab on the settings page.
282
+ *
283
+ * @since 1.2.3
284
+ */
285
+ public function settings_page_tab_system() {
286
+
287
+ ?>
288
+ <div id="wpforms-settings-system">
289
+
290
+ <textarea readonly="readonly" class="system-info-textarea"><?php echo $this->get_system_info(); ?></textarea>
291
+
292
+ </div>
293
+ <?php
294
+ }
295
+
296
  /**
297
  * Build the output for the plugin settings page.
298
  *
341
 
342
  return $links;
343
  }
344
+
345
+ /**
346
+ * Get system information.
347
+ *
348
+ * Based on a function from Easy Digital Downloads by Pippin Williamson
349
+ *
350
+ * @link https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/admin/tools.php#L470
351
+ * @since 1.2.3
352
+ * @return string
353
+ */
354
+ public function get_system_info() {
355
+
356
+ global $wpdb;
357
+
358
+ // Get theme info
359
+ $theme_data = wp_get_theme();
360
+ $theme = $theme_data->Name . ' ' . $theme_data->Version;
361
+
362
+ $return = '### Begin System Info ###' . "\n\n";
363
+
364
+ // Start with the basics...
365
+ $return .= '-- Site Info' . "\n\n";
366
+ $return .= 'Site URL: ' . site_url() . "\n";
367
+ $return .= 'Home URL: ' . home_url() . "\n";
368
+ $return .= 'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n";
369
+
370
+ // WordPress configuration
371
+ $return .= "\n" . '-- WordPress Configuration' . "\n\n";
372
+ $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
373
+ $return .= 'Language: ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n";
374
+ $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
375
+ $return .= 'Active Theme: ' . $theme . "\n";
376
+ $return .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n";
377
+
378
+ // Only show page specs if frontpage is set to 'page'
379
+ if( get_option( 'show_on_front' ) == 'page' ) {
380
+ $front_page_id = get_option( 'page_on_front' );
381
+ $blog_page_id = get_option( 'page_for_posts' );
382
+ $return .= 'Page On Front: ' . ( $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n";
383
+ $return .= 'Page For Posts: ' . ( $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n";
384
+ }
385
+
386
+ $return .= 'ABSPATH: ' . ABSPATH . "\n";
387
+
388
+ // Make sure wp_remote_post() is working
389
+ /*
390
+ $request['cmd'] = '_notify-validate';
391
+ $params = array(
392
+ 'sslverify' => false,
393
+ 'timeout' => 60,
394
+ 'user-agent' => 'WPForms/' . WPFORMS_VERSION,
395
+ 'body' => $request
396
+ );
397
+
398
+ $response = wp_remote_post( 'https://www.paypal.com/cgi-bin/webscr', $params );
399
+
400
+ if( !is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) {
401
+ $WP_REMOTE_POST = 'wp_remote_post() works';
402
+ } else {
403
+ $WP_REMOTE_POST = 'wp_remote_post() does not work';
404
+ }
405
+ $return .= 'Remote Post: ' . $WP_REMOTE_POST . "\n";
406
+ */
407
+
408
+ $return .= 'Table Prefix: ' . 'Length: ' . strlen( $wpdb->prefix ) . ' Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n";
409
+ $return .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
410
+ $return .= 'WPFORMS_DEBUG: ' . ( defined( 'WPFORMS_DEBUG' ) ? WPFORMS_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
411
+ $return .= 'Memory Limit: ' . WP_MEMORY_LIMIT . "\n";
412
+ $return .= 'Registered Post Stati: ' . implode( ', ', get_post_stati() ) . "\n";
413
+
414
+ // @todo WPForms configuration/specific details
415
+ $return .= "\n" . '-- WordPress Uploads/Constants' . "\n\n";
416
+ $return .= 'WP_CONTENT_DIR: ' . ( defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR ? WP_CONTENT_DIR : 'Disabled' : 'Not set' ) . "\n";
417
+ $return .= 'WP_CONTENT_URL: ' . ( defined( 'WP_CONTENT_URL' ) ? WP_CONTENT_URL ? WP_CONTENT_URL : 'Disabled' : 'Not set' ) . "\n";
418
+ $return .= 'UPLOADS: ' . ( defined( 'UPLOADS' ) ? UPLOADS ? UPLOADS : 'Disabled' : 'Not set' ) . "\n";
419
+ $uploads_dir = wp_upload_dir();
420
+ $return .= 'wp_uploads_dir() path: ' . $uploads_dir['path']. "\n";
421
+ $return .= 'wp_uploads_dir() url: ' . $uploads_dir['url']. "\n";
422
+ $return .= 'wp_uploads_dir() basedir: ' . $uploads_dir['basedir']. "\n";
423
+ $return .= 'wp_uploads_dir() baseurl: ' . $uploads_dir['baseurl']. "\n";
424
+
425
+
426
+ // Get plugins that have an update
427
+ $updates = get_plugin_updates();
428
+
429
+ // Must-use plugins
430
+ // NOTE: MU plugins can't show updates!
431
+ $muplugins = get_mu_plugins();
432
+ if( count( $muplugins ) > 0 && !empty( $muplugins ) ) {
433
+ $return .= "\n" . '-- Must-Use Plugins' . "\n\n";
434
+
435
+ foreach( $muplugins as $plugin => $plugin_data ) {
436
+ $return .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n";
437
+ }
438
+ }
439
+
440
+ // WordPress active plugins
441
+ $return .= "\n" . '-- WordPress Active Plugins' . "\n\n";
442
+
443
+ $plugins = get_plugins();
444
+ $active_plugins = get_option( 'active_plugins', array() );
445
+
446
+ foreach( $plugins as $plugin_path => $plugin ) {
447
+ if( !in_array( $plugin_path, $active_plugins ) )
448
+ continue;
449
+
450
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
451
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
452
+ }
453
+
454
+ // WordPress inactive plugins
455
+ $return .= "\n" . '-- WordPress Inactive Plugins' . "\n\n";
456
+
457
+ foreach( $plugins as $plugin_path => $plugin ) {
458
+ if( in_array( $plugin_path, $active_plugins ) )
459
+ continue;
460
+
461
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
462
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
463
+ }
464
+
465
+ if( is_multisite() ) {
466
+ // WordPress Multisite active plugins
467
+ $return .= "\n" . '-- Network Active Plugins' . "\n\n";
468
+
469
+ $plugins = wp_get_active_network_plugins();
470
+ $active_plugins = get_site_option( 'active_sitewide_plugins', array() );
471
+
472
+ foreach( $plugins as $plugin_path ) {
473
+ $plugin_base = plugin_basename( $plugin_path );
474
+
475
+ if( !array_key_exists( $plugin_base, $active_plugins ) )
476
+ continue;
477
+
478
+ $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[$plugin_path]->update->new_version . ')' : '';
479
+ $plugin = get_plugin_data( $plugin_path );
480
+ $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
481
+ }
482
+ }
483
+
484
+ // Server configuration (really just versioning)
485
+ $return .= "\n" . '-- Webserver Configuration' . "\n\n";
486
+ $return .= 'PHP Version: ' . PHP_VERSION . "\n";
487
+ $return .= 'MySQL Version: ' . $wpdb->db_version() . "\n";
488
+ $return .= 'Webserver Info: ' . $_SERVER['SERVER_SOFTWARE'] . "\n";
489
+
490
+ // PHP configs... now we're getting to the important stuff
491
+ $return .= "\n" . '-- PHP Configuration' . "\n\n";
492
+ $return .= 'Safe Mode: ' . ( ini_get( 'safe_mode' ) ? 'Enabled' : 'Disabled' . "\n" );
493
+ $return .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
494
+ $return .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
495
+ $return .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
496
+ $return .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n";
497
+ $return .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n";
498
+ $return .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n";
499
+ $return .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n";
500
+
501
+ // PHP extensions and such
502
+ $return .= "\n" . '-- PHP Extensions' . "\n\n";
503
+ $return .= 'cURL: ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n";
504
+ $return .= 'fsockopen: ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n";
505
+ $return .= 'SOAP Client: ' . ( class_exists( 'SoapClient' ) ? 'Installed' : 'Not Installed' ) . "\n";
506
+ $return .= 'Suhosin: ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n";
507
+
508
+ // Session stuff
509
+ $return .= "\n" . '-- Session Configuration' . "\n\n";
510
+ $return .= 'Session: ' . ( isset( $_SESSION ) ? 'Enabled' : 'Disabled' ) . "\n";
511
+
512
+ // The rest of this is only relevant is session is enabled
513
+ if( isset( $_SESSION ) ) {
514
+ $return .= 'Session Name: ' . esc_html( ini_get( 'session.name' ) ) . "\n";
515
+ $return .= 'Cookie Path: ' . esc_html( ini_get( 'session.cookie_path' ) ) . "\n";
516
+ $return .= 'Save Path: ' . esc_html( ini_get( 'session.save_path' ) ) . "\n";
517
+ $return .= 'Use Cookies: ' . ( ini_get( 'session.use_cookies' ) ? 'On' : 'Off' ) . "\n";
518
+ $return .= 'Use Only Cookies: ' . ( ini_get( 'session.use_only_cookies' ) ? 'On' : 'Off' ) . "\n";
519
+ }
520
+
521
+ $return .= "\n" . '### End System Info ###';
522
+
523
+ return $return;
524
+ }
525
  }
526
  new WPForms_Settings;
lite/wpforms-lite.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * WPForms Lite. Load Lite specific features/functionality.
4
  *
5
- * @since 1.2.x
6
  * @package WPForms
7
  */
8
  class WPForms_Lite {
@@ -16,13 +16,14 @@ class WPForms_Lite {
16
 
17
  $this->includes();
18
 
19
- add_action( 'wpforms_setup_panel_after', array( $this, 'form_templates' ) );
20
- add_filter( 'wpforms_builder_fields_buttons', array( $this, 'form_fields' ), 20 );
21
- add_action( 'wpforms_builder_panel_buttons', array( $this, 'form_panels' ), 20 );
22
- add_action( 'wpforms_builder_enqueues_before', array( $this, 'builder_enqueues' ) );
23
- add_action( 'wpforms_admin_page', array( $this, 'entries_page' ) );
24
- add_action( 'admin_enqueue_scripts', array( $this, 'addon_page_enqueues' ) );
25
- add_action( 'wpforms_admin_page', array( $this, 'addons_page' ) );
 
26
  }
27
 
28
  /**
@@ -37,6 +38,154 @@ class WPForms_Lite {
37
  }
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Provide upgrade URL.
42
  *
@@ -352,6 +501,14 @@ class WPForms_Lite {
352
  <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
353
  </div>
354
  <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-second">
 
 
 
 
 
 
 
 
355
  <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-conditional-logic.png"></div>
356
  <div class="wpforms-addon-text">
357
  <h4>Conditional Logic Addon</h4>
@@ -359,6 +516,14 @@ class WPForms_Lite {
359
  </div>
360
  <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
361
  </div>
 
 
 
 
 
 
 
 
362
  <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-first">
363
  <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-mailchimp.png"></div>
364
  <div class="wpforms-addon-text">
2
  /**
3
  * WPForms Lite. Load Lite specific features/functionality.
4
  *
5
+ * @since 1.2.0
6
  * @package WPForms
7
  */
8
  class WPForms_Lite {
16
 
17
  $this->includes();
18
 
19
+ add_action( 'wpforms_form_settings_notifications', array( $this, 'form_settings_notifications' ), 8, 1 );
20
+ add_action( 'wpforms_setup_panel_after', array( $this, 'form_templates' ) );
21
+ add_filter( 'wpforms_builder_fields_buttons', array( $this, 'form_fields' ), 20 );
22
+ add_action( 'wpforms_builder_panel_buttons', array( $this, 'form_panels' ), 20 );
23
+ add_action( 'wpforms_builder_enqueues_before', array( $this, 'builder_enqueues' ) );
24
+ add_action( 'wpforms_admin_page', array( $this, 'entries_page' ) );
25
+ add_action( 'admin_enqueue_scripts', array( $this, 'addon_page_enqueues' ) );
26
+ add_action( 'wpforms_admin_page', array( $this, 'addons_page' ) );
27
  }
28
 
29
  /**
38
  }
39
  }
40
 
41
+ /**
42
+ * Form notification settings, supports multiple notifications.
43
+ *
44
+ * @since 1.2.3
45
+ * @param object $settings
46
+ */
47
+ public function form_settings_notifications( $settings ) {
48
+
49
+ // Fetch next ID and handle backwards compatibility
50
+ if ( empty( $settings->form_data['settings']['notifications'] ) ) {
51
+ $settings->form_data['settings']['notifications'][1]['email'] = !empty( $settings->form_data['settings']['notification_email'] ) ? $settings->form_data['settings']['notification_email'] : '';
52
+ $settings->form_data['settings']['notifications'][1]['subject'] = !empty( $settings->form_data['settings']['notification_subject'] ) ? $settings->form_data['settings']['notification_subject'] : '';
53
+ $settings->form_data['settings']['notifications'][1]['sender_name'] = !empty( $settings->form_data['settings']['notification_fromname'] ) ? $settings->form_data['settings']['notification_fromname'] : '';
54
+ $settings->form_data['settings']['notifications'][1]['sender_address'] = !empty( $settings->form_data['settings']['notification_fromaddress'] ) ? $settings->form_data['settings']['notification_fromaddress'] : '';
55
+ $settings->form_data['settings']['notifications'][1]['replyto'] = !empty( $settings->form_data['settings']['notification_replyto'] ) ? $settings->form_data['settings']['notification_replyto'] : '';
56
+ }
57
+ $id = 1;
58
+
59
+ echo '<div class="wpforms-panel-content-section-title">';
60
+ _e( 'Notifications', 'wpforms' );
61
+ echo '</div>';
62
+
63
+ echo '<p class="wpforms-alert wpforms-alert-info">Want multiple notifications with smart conditional logic?<br><a href="' . $this->upgrade_link() . 'target="_blank"><strong>Upgrade to PRO</strong></a> to unlock it and more awesome features.</p>';
64
+
65
+ wpforms_panel_field(
66
+ 'select',
67
+ 'settings',
68
+ 'notification_enable',
69
+ $settings->form_data,
70
+ __( 'Notifications', 'wpforms' ),
71
+ array(
72
+ 'default' => '1',
73
+ 'options' => array(
74
+ '1' => __( 'On', 'wpforms' ),
75
+ '0' => __( 'Off', 'wpforms' ),
76
+ ),
77
+ )
78
+ );
79
+
80
+ echo '<div class="wpforms-notification">';
81
+
82
+ echo '<div class="wpforms-notification-header">';
83
+ echo '<span>' . __( 'Default Notification', 'wpforms' ) . '</span>';
84
+ echo '</div>';
85
+
86
+ wpforms_panel_field(
87
+ 'text',
88
+ 'notifications',
89
+ 'email',
90
+ $settings->form_data,
91
+ __( 'Send To Email Address', 'wpforms' ),
92
+ array(
93
+ 'default' => '{admin_email}',
94
+ 'tooltip' => __( 'Enter the email address to receive form entry notifications. For multiple notifications, seperate email addresses with a comma.', 'wpforms' ),
95
+ 'smarttags' => array(
96
+ 'type' => 'fields',
97
+ 'fields' => 'name,email,text',
98
+ ),
99
+ 'parent' => 'settings',
100
+ 'subsection' => $id,
101
+ 'class' => 'email-recipient',
102
+ )
103
+ );
104
+ wpforms_panel_field(
105
+ 'text',
106
+ 'notifications',
107
+ 'subject',
108
+ $settings->form_data,
109
+ __( 'Email Subject', 'wpforms' ),
110
+ array(
111
+ 'default' => __( 'New Entry: ' , 'wpforms' ) . $settings->form->post_title,
112
+ 'smarttags' => array(
113
+ 'type' => 'fields',
114
+ 'fields' => 'name,email,text',
115
+ ),
116
+ 'parent' => 'settings',
117
+ 'subsection' => $id
118
+ )
119
+ );
120
+ wpforms_panel_field(
121
+ 'text',
122
+ 'notifications',
123
+ 'sender_name',
124
+ $settings->form_data,
125
+ __( 'From Name', 'wpforms' ),
126
+ array(
127
+ 'default' => sanitize_text_field( get_option( 'blogname' ) ),
128
+ 'smarttags' => array(
129
+ 'type' => 'fields',
130
+ 'fields' => 'name,email,text',
131
+ ),
132
+ 'parent' => 'settings',
133
+ 'subsection' => $id
134
+ )
135
+ );
136
+ wpforms_panel_field(
137
+ 'text',
138
+ 'notifications',
139
+ 'sender_address',
140
+ $settings->form_data,
141
+ __( 'From Email', 'wpforms' ),
142
+ array(
143
+ 'default' => '{admin_email}',
144
+ 'smarttags' => array(
145
+ 'type' => 'fields',
146
+ 'fields' => 'name,email,text',
147
+ ),
148
+ 'parent' => 'settings',
149
+ 'subsection' => $id
150
+ )
151
+ );
152
+ wpforms_panel_field(
153
+ 'text',
154
+ 'notifications',
155
+ 'replyto',
156
+ $settings->form_data,
157
+ __( 'Reply-To', 'wpforms' ),
158
+ array(
159
+ 'smarttags' => array(
160
+ 'type' => 'fields',
161
+ 'fields' => 'name,email,text',
162
+ ),
163
+ 'parent' => 'settings',
164
+ 'subsection' => $id
165
+ )
166
+ );
167
+ wpforms_panel_field(
168
+ 'textarea',
169
+ 'notifications',
170
+ 'message',
171
+ $settings->form_data,
172
+ __( 'Message', 'wpforms' ),
173
+ array(
174
+ 'rows' => 6,
175
+ 'default' => '{all_fields}',
176
+ 'smarttags' => array(
177
+ 'type' => 'all'
178
+ ),
179
+ 'parent' => 'settings',
180
+ 'subsection' => $id,
181
+ 'class' => 'email-msg',
182
+ 'after' => '<p class="note">' . __( 'To display all form fields, use the <code>{all_fields}</code> Smart Tag.', 'wpforms' ) . '</p>'
183
+ )
184
+ );
185
+
186
+ echo '</div>';
187
+ }
188
+
189
  /**
190
  * Provide upgrade URL.
191
  *
501
  <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
502
  </div>
503
  <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-second">
504
+ <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-campaign-monitor.png"></div>
505
+ <div class="wpforms-addon-text">
506
+ <h4>Campaign Monitor Addon</h4>
507
+ <p class="desc">WPForms Campaign Monitor addon allows you to create Campaign Monitor newsletter signup forms in WordPress, so you can grow your email list.</p>
508
+ </div>
509
+ <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
510
+ </div>
511
+ <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-first">
512
  <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-conditional-logic.png"></div>
513
  <div class="wpforms-addon-text">
514
  <h4>Conditional Logic Addon</h4>
516
  </div>
517
  <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
518
  </div>
519
+ <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-second">
520
+ <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-getresponse.png"></div>
521
+ <div class="wpforms-addon-text">
522
+ <h4>GetResponse Addon</h4>
523
+ <p class="desc">WPForms GetResponse addon allows you to create GetResponse newsletter signup forms in WordPress, so you can grow your email list.</p>
524
+ </div>
525
+ <div class="wpforms-addon-action"><a href="<?php echo $upgrade; ?>" target="_blank">Upgrade Now</a></div>
526
+ </div>
527
  <div class="wpforms-addon-item wpforms-addon-status-upgrade wpforms-first">
528
  <div class="wpforms-addon-image"><img src="https://wpforms.com/images/addon-icon-mailchimp.png"></div>
529
  <div class="wpforms-addon-text">
readme.txt CHANGED
@@ -160,6 +160,16 @@ Syed Balkhi
160
 
161
  == Changelog ==
162
 
 
 
 
 
 
 
 
 
 
 
163
  = 1.2.2.2 =
164
  - Fixed: Javascript asset not loading due to incorrect path
165
 
160
 
161
  == Changelog ==
162
 
163
+ = 1.2.3 =
164
+ - Added: Form notification message setting
165
+ - Added: Additional Smart Tags available inside Form Settings panels
166
+ - Added: Process Smart Tags inside form confirmation messages and URLs
167
+ - Added: Hide WPForms Preview page from WordPress dashboard
168
+ - Added: System Details tab to WPForms Settings, to display debug information, etc
169
+ - Changed: Many form builder javascript improvements
170
+ - Changed: Improved internal logging and debugging tools
171
+ - Fixed: Large forms not always saving because of max_input_vars PHP setting
172
+
173
  = 1.2.2.2 =
174
  - Fixed: Javascript asset not loading due to incorrect path
175
 
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.2.2
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
@@ -44,7 +44,7 @@ if ( class_exists( 'WPForms' ) ) :
44
  deactivate_plugins( plugin_basename( __FILE__ ) );
45
  }
46
  add_action( 'admin_init', 'wpforms_deactivate' );
47
-
48
  /**
49
  * Display notice after deactivation.
50
  *
@@ -60,7 +60,7 @@ if ( class_exists( 'WPForms' ) ) :
60
  else :
61
 
62
  /**
63
- * Main WPForms class
64
  *
65
  * @since 1.0.0
66
  * @package WPForms
@@ -81,7 +81,7 @@ final class WPForms {
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
- public $version = '1.2.2.2';
85
 
86
  /**
87
  * The form data handler instance.
@@ -211,6 +211,7 @@ final class WPForms {
211
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-menu.php';
212
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview.php';
213
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/class-builder.php';
 
214
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-welcome.php';
215
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-editor.php';
216
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/ajax-actions.php';
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
9
  * Text Domain: wpforms
10
  * Domain Path: languages
11
  *
44
  deactivate_plugins( plugin_basename( __FILE__ ) );
45
  }
46
  add_action( 'admin_init', 'wpforms_deactivate' );
47
+
48
  /**
49
  * Display notice after deactivation.
50
  *
60
  else :
61
 
62
  /**
63
+ * Main WPForms class.
64
  *
65
  * @since 1.0.0
66
  * @package WPForms
81
  * @since 1.0.0
82
  * @var sting
83
  */
84
+ public $version = '1.2.3';
85
 
86
  /**
87
  * The form data handler instance.
211
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-menu.php';
212
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/overview/class-overview.php';
213
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/class-builder.php';
214
+ require_once WPFORMS_PLUGIN_DIR . 'includes/admin/builder/functions.php';
215
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-welcome.php';
216
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/class-editor.php';
217
  require_once WPFORMS_PLUGIN_DIR . 'includes/admin/ajax-actions.php';