Easy Digital Downloads - Version 2.7.12

Version Description

Download this release

Release Info

Developer cklosows
Plugin Icon 128x128 Easy Digital Downloads
Version 2.7.12
Comparing to
See all releases

Code changes from version 2.8.15 to 2.7.12

Files changed (99) hide show
  1. assets/css/edd-admin.css +63 -358
  2. assets/css/edd-admin.min.css +1 -1
  3. assets/js/admin-backwards-compatibility.js +0 -73
  4. assets/js/admin-backwards-compatibility.min.js +0 -1
  5. assets/js/admin-scripts.js +61 -88
  6. assets/js/admin-scripts.min.js +1 -2
  7. assets/js/edd-ajax.js +16 -41
  8. assets/js/edd-ajax.min.js +1 -1
  9. assets/js/edd-checkout-global.js +0 -30
  10. assets/js/edd-checkout-global.min.js +1 -1
  11. assets/js/jquery.payment.min.js +0 -1
  12. easy-digital-downloads.php +4 -5
  13. includes/EDD_SL_Plugin_Updater.php +6 -20
  14. includes/actions.php +6 -4
  15. includes/admin/add-ons.php +22 -57
  16. includes/admin/admin-actions.php +0 -55
  17. includes/admin/customers/customer-actions.php +4 -18
  18. includes/admin/customers/customers.php +2 -2
  19. includes/admin/discounts/add-discount.php +10 -10
  20. includes/admin/discounts/discount-actions.php +1 -3
  21. includes/admin/discounts/edit-discount.php +5 -5
  22. includes/admin/downloads/metabox.php +275 -485
  23. includes/admin/import/class-batch-import-downloads.php +1 -1
  24. includes/admin/import/class-batch-import-payments.php +7 -19
  25. includes/admin/payments/class-payments-table.php +29 -107
  26. includes/admin/payments/view-order-details.php +17 -35
  27. includes/admin/reporting/class-categories-reports-table.php +0 -1
  28. includes/admin/reporting/class-file-downloads-logs-list-table.php +1 -10
  29. includes/admin/reporting/class-sales-logs-list-table.php +4 -5
  30. includes/admin/reporting/export/class-batch-export-payments.php +5 -12
  31. includes/admin/reporting/export/class-batch-export-sales.php +15 -19
  32. includes/admin/reporting/graphing.php +13 -14
  33. includes/admin/settings/register-settings.php +119 -166
  34. includes/admin/thickbox.php +0 -1
  35. includes/admin/tools.php +34 -132
  36. includes/admin/tools/class-edd-tools-recount-all-stats.php +2 -11
  37. includes/admin/tools/class-edd-tools-recount-download-stats.php +2 -11
  38. includes/admin/tools/class-edd-tools-recount-single-customer-stats.php +6 -15
  39. includes/admin/tools/class-edd-tools-recount-store-earnings.php +2 -11
  40. includes/admin/tools/class-edd-tools-reset-stats.php +2 -11
  41. includes/admin/tracking.php +17 -5
  42. includes/ajax-functions.php +9 -28
  43. includes/api/class-edd-api.php +6 -29
  44. includes/cart/class-edd-cart.php +9 -23
  45. includes/cart/functions.php +7 -0
  46. includes/checkout/functions.php +5 -23
  47. includes/checkout/template.php +5 -54
  48. includes/class-edd-cli.php +7 -23
  49. includes/class-edd-customer-query.php +0 -750
  50. includes/class-edd-customer.php +17 -37
  51. includes/class-edd-db-customers.php +218 -162
  52. includes/class-edd-discount.php +11 -18
  53. includes/class-edd-fees.php +0 -11
  54. includes/class-edd-html-elements.php +17 -71
  55. includes/class-edd-license-handler.php +4 -2
  56. includes/class-edd-logging.php +0 -147
  57. includes/class-edd-register-meta.php +1 -8
  58. includes/class-edd-session.php +7 -41
  59. includes/class-edd-stats.php +1 -1
  60. includes/country-functions.php +0 -51
  61. includes/deprecated-functions.php +1 -18
  62. includes/discount-functions.php +9 -74
  63. includes/emails/actions.php +4 -8
  64. includes/emails/class-edd-email-tags.php +7 -8
  65. includes/emails/class-edd-emails.php +1 -5
  66. includes/emails/functions.php +22 -68
  67. includes/emails/template.php +23 -21
  68. includes/error-tracking.php +7 -18
  69. includes/gateways/amazon-payments.php +0 -3
  70. includes/gateways/paypal-standard.php +16 -167
  71. includes/libraries/array2xml.php +0 -4
  72. includes/libraries/class-ArrayToXML.php +0 -134
  73. includes/login-register.php +7 -5
  74. includes/misc-functions.php +38 -25
  75. includes/payments/actions.php +23 -79
  76. includes/payments/class-edd-payment.php +41 -159
  77. includes/payments/class-payments-query.php +10 -83
  78. includes/payments/functions.php +9 -45
  79. includes/process-download.php +3 -8
  80. includes/process-purchase.php +32 -50
  81. includes/scripts.php +23 -54
  82. includes/shortcodes.php +40 -2
  83. includes/tax-functions.php +2 -2
  84. includes/template-actions.php +0 -34
  85. includes/template-functions.php +3 -44
  86. includes/user-functions.php +37 -66
  87. includes/widgets.php +1 -1
  88. languages/easy-digital-downloads.pot +1219 -1403
  89. readme.txt +31 -213
  90. templates/edd.css +12 -37
  91. templates/edd.min.css +1 -1
  92. templates/history-downloads.php +1 -1
  93. templates/history-purchases.php +2 -2
  94. templates/shortcode-download.php +0 -56
  95. templates/shortcode-login.php +2 -4
  96. templates/shortcode-profile-editor.php +4 -3
  97. templates/shortcode-receipt.php +6 -8
  98. templates/shortcode-register.php +1 -9
  99. templates/widget-cart-item.php +1 -1
assets/css/edd-admin.css CHANGED
@@ -64,13 +64,6 @@ a.edd-delete:hover {
64
  z-index: 9999 !important;
65
  }
66
 
67
- .download_page_edd-settings .edd-settings-payment-icon-wrapper {
68
- margin-right:10px;
69
- line-height:16px;
70
- height:16px;
71
- display: table;
72
- }
73
-
74
  /* =Add Ons Styles
75
  -------------------------------------------------------------- */
76
 
@@ -89,9 +82,6 @@ a.edd-delete:hover {
89
  #edd-add-ons h2 {
90
  margin: 0 0 15px;
91
  }
92
- .edd-add-ons-view-wrapper {
93
- height: 50px;
94
- }
95
  #edd-add-ons h2 .button-primary {
96
  position: absolute;
97
  }
@@ -141,34 +131,13 @@ a.edd-delete:hover {
141
  height: 100px;
142
  min-width: 200px;
143
  }
144
- #edd-add-discount input[type="text"],
145
- #edd-edit-discount input[type="text"] {
146
- width: 300px;
147
- }
148
-
149
- #edd-add-discount input.edd-price-field,
150
- #edd-edit-discount input.edd-price-field {
151
- padding: 3px 5px;
152
- width: 75px;
153
  }
154
 
155
  /* Payment History Styles
156
  -------------------------------------------------------------- */
157
- .edit-php.post-type-download .wrap .wp-heading-inline,
158
- .download_page_edd-addons .wrap .wp-heading-inline {
159
- display: none;
160
- }
161
-
162
- .edit-php.post-type-download .wrap > .page-title-action,
163
- .download_page_edd-addons .wrap > .page-title-action {
164
- display: none;
165
- }
166
-
167
- .edit-php.post-type-download .wrap .nav-tab-wrapper .page-title-action,
168
- .download_page_edd-addons .wrap .nav-tab-wrapper .page-title-action {
169
- top: 7px;
170
- margin-left: 5px;
171
- }
172
 
173
  #edd-payment-filters {
174
  background: #f5f5f5;
@@ -194,9 +163,6 @@ a.edd-delete:hover {
194
  #edd-payment-filters p {
195
  color: #777;
196
  }
197
- #edd-payment-date-filters input {
198
- vertical-align: middle;
199
- }
200
  tr.status-refunded td {
201
  background: #cecece;
202
  border-top-color: #ccc;
@@ -242,6 +208,8 @@ tr.status-refunded td {
242
  /* Metabox Styles
243
  -------------------------------------------------------------- */
244
 
 
 
245
  .edd_files_name_label {
246
  width: 225px;
247
  float: left;
@@ -256,204 +224,20 @@ tr.status-refunded td {
256
  #postbox-container-1 .edd_files_url_label {
257
  width: 80px;
258
  }
259
- .edd-add-repeatable-row {
260
- margin: 10px 0;
261
- }
262
- .edd-add-repeatable-row .submit {
263
- padding: 0 !important;
264
- }
265
- .edd_variable_prices_wrapper:not(:first-child),
266
- .edd_repeatable_upload_wrapper:not(:first-child) {
267
- margin-top: 12px;
268
- }
269
- .edd-repeatable-row-actions {
270
- color: #777;
271
- font-size: 12px;
272
- }
273
- .edd-repeatable-row-actions a {
274
- text-decoration: none;
275
- width: auto;
276
- cursor: pointer;
277
- vertical-align: middle;
278
- }
279
- .edd-repeatable-row-actions .toggle-custom-price-option-section {
280
- color: #777;
281
- }
282
- .edd-repeatable-row-actions .toggle-custom-price-option-section:hover {
283
- color: #444;
284
- }
285
- .edd-repeatable-row-header,
286
- .edd-bundle-products-header {
287
- clear: both;
288
- background: #f1f1f1;
289
- border: 1px solid #e5e5e5;
290
- }
291
- .edd-repeatable-row-header {
292
- cursor: move;
293
- }
294
- .edd-repeatable-row-header:before,
295
- .edd-repeatable-row-header:after,
296
- .edd-bundled-product-row:before,
297
- .edd-bundled-product-row:after {
298
- content: '';
299
- display: table;
300
- }
301
- .edd-repeatable-row-header:after,
302
- .edd-bundled-product-row:after {
303
- clear: both;
304
- }
305
- .edd-repeatable-row-title {
306
- float: left;
307
- font-weight: 600;
308
- }
309
- .edd-bundled-product-item-reorder .edd-product-file-reorder {
310
- color: #e5e5e5;
311
- font-family: "dashicons";
312
- content: "\f545";
313
- font-size: 18px;
314
- font-weight: 300;
315
- margin-left: 4px;
316
- vertical-align: top;
317
- transition: .2s color;
318
- }
319
- .edd-bundled-product-item-reorder .edd-product-file-reorder:hover {
320
- color: #bbb;
321
- }
322
- .edd-repeatable-row-title,
323
- .edd-repeatable-row-actions {
324
- padding: 8px;
325
- box-sizing: border-box;
326
- }
327
- .edd-repeatable-row-actions {
328
- float: right;
329
- text-align: right;
330
- padding: 8px;
331
- }
332
- .edd-repeatable-row-actions .edd-remove-row,
333
- .edd-bundled-product-row .edd-remove-row {
334
- font-size: 12px;
335
- width: auto;
336
- cursor: pointer;
337
- }
338
- .edd-repeatable-row-standard-fields,
339
- .edd-bundled-product-row {
340
- background: #f9f9f9;
341
- padding: 8px;
342
- border-width: 0 1px 1px;
343
- border-style: solid;
344
- border-color: #e5e5e5;
345
- }
346
- .edd-repeatable-row-setting-label {
347
- display: block;
348
- margin-bottom: 4px;
349
- }
350
- .edd-repeatable-row-setting-label .edd-help-tip {
351
- display: inline-block;
352
- margin-left: 4px;
353
- }
354
- .edd-option-name,
355
- .edd-option-price,
356
- .edd_repeatable_default,
357
- .edd-file-name,
358
- .edd-file-url,
359
- .edd-file-assignment,
360
- .edd-bundled-product-row .edd-bundled-product-item-reorder,
361
- .edd-bundled-product-row .edd-bundled-product-item,
362
- .edd-bundled-product-row .edd-bundled-product-price-assignment,
363
- .edd-bundled-product-row .edd-bundled-product-actions {
364
  display: inline-block;
365
- vertical-align: top;
366
  }
367
- .edd-option-name {
368
- width: 38%;
369
- margin-right: 5%;
370
- }
371
- .edd-option-price {
372
- min-width: 100px;
373
- }
374
- .edd_repeatable_default {
375
- text-align: center;
376
- min-width: 80px;
377
- }
378
- .edd-file-name {
379
- width: 18%;
380
- margin-right: 3%;
381
- }
382
- .edd-file-url {
383
- width: 65%;
384
- }
385
- .edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url {
386
- width: 38%;
387
- margin-right: 5%;
388
- }
389
- .edd-file-assignment {
390
- width: 27%;
391
- }
392
- .edd-file-assignment .edd-repeatable-row-setting-label {
393
- margin-bottom: 0;
394
  }
395
- .edd-custom-price-option-sections-wrap {
396
- display: none;
397
- border-width: 0 1px 1px;
398
- border-style: solid;
399
- border-color: #e5e5e5;
400
- box-sizing: border-box;
401
  width: 100%;
402
  }
403
- .edd-custom-price-option-section {
404
- display: block;
405
- padding: 10px 8px;
406
- border-bottom: 1px solid rgba( 222, 222, 222, 0.3 );
407
- }
408
- .edd-custom-price-option-section:last-child {
409
- border-bottom: none;
410
- }
411
- label.edd_prices_shipping { /* remove once Simple Shipping markup is improved */
412
- display: none !important;
413
- }
414
- .edd-custom-price-option-section-title {
415
- display: block;
416
- font-size: 14px;
417
- font-weight: 600;
418
- padding: 0 0 10px;
419
- }
420
- .edd-custom-price-option-section > *:not(.edd-custom-price-option-section-title) {
421
- display: inline-block;
422
- padding-right: 20px;
423
- vertical-align: top;
424
- margin-bottom: 4px;
425
- }
426
- .edd-custom-price-option-section > *:not(.edd-custom-price-option-section-title) label {
427
- display: block;
428
- margin-bottom: 2px;
429
- }
430
- .edd-bundle-products-header {
431
- font-weight: 600;
432
- padding: 8px;
433
- }
434
- .edd-bundled-product-row .edd-bundled-product-item-reorder {
435
- min-width: 30px;
436
- margin-right: 8px;
437
- }
438
- .edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
439
- font-size: 20px;
440
- font-weight: 300;
441
- padding: 16px 4px 0;
442
- cursor: move;
443
- }
444
- .edd-bundled-product-row .edd-bundled-product-item {
445
- width: 60%;
446
- margin-right: 3%;
447
- }
448
- .edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item {
449
- width: 47%;
450
- }
451
- .edd-bundled-product-row .edd-bundled-product-price-assignment {
452
- width: 23%;
453
- margin-right: 3%;
454
- }
455
- .edd-bundled-product-row .edd-bundled-product-actions {
456
- float: right;
457
  }
458
  .edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container {
459
  position: relative;
@@ -463,12 +247,36 @@ label.edd_prices_shipping { /* remove once Simple Shipping markup is improved */
463
  display: block;
464
  padding: 2px 8px 2px;
465
  position: absolute;
466
- top: 3px;
467
  right: 7px;
468
  }
469
  .edd_upload_field {
470
  padding-right: 8em;
471
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
  textarea#edd-payment-note {
473
  width: 100%;
474
  height: 4em;
@@ -502,28 +310,13 @@ input[class*="edd-price-field"] {
502
  min-width: 100%;
503
  }
504
  #edd_product_notes_field {
505
- display: block;
506
- margin: 12px 0 0;
507
  height: 4em;
508
- width: 100%;
509
  }
510
-
511
- /* still used by extensions - Software Licensing upgrade paths, Custom Prices */
512
- .edd_remove_repeatable {
513
- border: none;
514
- cursor: pointer;
515
- display: inline-block;
516
- padding: 0;
517
- overflow: hidden;
518
- margin: 8px 0 0 0;
519
- text-indent: -9999px;
520
- width: 10px;
521
- height: 10px;
522
- }
523
- .edd_remove_repeatable:active,
524
- .edd_remove_repeatable:hover,
525
- .edd_remove_repeatable:focus {
526
- background-position: -10px 0 !important;
527
  }
528
 
529
  /* Payment Details
@@ -540,9 +333,6 @@ input[class*="edd-price-field"] {
540
  #edd-edit-order-form .column:nth-child(2n+1) {
541
  margin-right: 0;
542
  }
543
- #edd-edit-order-form input.large-text {
544
- width: 90%;
545
- }
546
  .edd-edit-purchase-element ul li.download {
547
  width: 35%;
548
  }
@@ -689,9 +479,6 @@ input[class*="edd-price-field"] {
689
  font-size: 14px;
690
  font-weight: 500;
691
  }
692
- .edd-edit-purchase-element .edd-purchased-download-title .deleted {
693
- color: #777;
694
- }
695
  .edd-edit-purchase-element .edd-purchased-download-actions {
696
  color: #777;
697
  line-height: 1.4;
@@ -991,8 +778,6 @@ td.edd_order_price {
991
  padding: 12px 12px 4px;
992
  overflow: auto;
993
  margin: 20px -12px -23px;
994
- position: relative;
995
- width: 100%;
996
  }
997
  .edd-import-export-form .notice-wrap .spinner {
998
  margin: 4px 10px 8px;
@@ -1182,6 +967,23 @@ td.edd_order_price {
1182
  clear: both;
1183
  }
1184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1185
  /* System Info page styles
1186
  -------------------------------------------------------------- */
1187
 
@@ -1225,8 +1027,7 @@ td.edd_order_price {
1225
  -------------------------------------------------------------- */
1226
 
1227
  .edd-select-chosen {
1228
- width: 100%;
1229
- max-width: 300px;
1230
  }
1231
  .chosen-container-multi .chosen-choices {
1232
  background-image: none;
@@ -1334,10 +1135,6 @@ td.edd_order_price {
1334
  width: 100%;
1335
  min-height: 230px;
1336
  }
1337
-
1338
- #edd-edit-order-form input.large-text {
1339
- width: 100%;
1340
- }
1341
  }
1342
 
1343
  /* Customer Styles
@@ -1671,8 +1468,7 @@ td.edd_order_price {
1671
  #edd-item-card-wrapper .customer-section {
1672
  margin-bottom: 0;
1673
  }
1674
- #edd-item-card-wrapper .widefat td,
1675
- #edd-item-card-wrapper .widefat th {
1676
  padding: 4px 6px;
1677
  max-width: 100px!important;
1678
  display: table-cell;
@@ -1692,88 +1488,6 @@ td.edd_order_price {
1692
  #edd-item-tab-wrapper-list li:nth-child(even) {
1693
  border-width: 0 0 1px 0;
1694
  }
1695
- .edd-repeatable-row-title,
1696
- .edd-repeatable-row-actions {
1697
- text-align: left;
1698
- width: 100%;
1699
- }
1700
- .edd-repeatable-row-title {
1701
- padding-bottom: 0;
1702
- }
1703
- .edd-option-name,
1704
- .edd-option-price,
1705
- .edd_repeatable_default,
1706
- .edd-bundled-product-item-reorder,
1707
- .edd-bundled-product-row .edd-bundled-product-item,
1708
- .edd-bundled-product-row .edd-bundled-product-price-assignment,
1709
- .edd-file-name,
1710
- .edd-file-url,
1711
- .edd-file-assignment {
1712
- float: none;
1713
- text-align: left;
1714
- width: 100% !important;
1715
- margin: 10px 0;
1716
- }
1717
- .edd-bundled-product-row .edd-bundled-product-actions {
1718
- float: none;
1719
- }
1720
- .edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder {
1721
- padding: 0;
1722
- }
1723
-
1724
- #edd-payment-filters span {
1725
- display: block;
1726
- margin: 2px 0;
1727
- }
1728
-
1729
- #edd-payment-filters a,
1730
- .download_page_edd-reports .button {
1731
- text-align: center;
1732
- }
1733
-
1734
- #edd-payment-date-filters span {
1735
- display: block;
1736
- }
1737
- #edd-payment-date-filters span > input {
1738
- float: right;
1739
- }
1740
-
1741
- #edd-add-discount select[multiple] option,
1742
- #edd-edit-discount select[multiple] option {
1743
- height: 20px;
1744
- }
1745
-
1746
- .download_page_edd-tools .inside input[type="text"],
1747
- .download_page_edd-tools .inside select,
1748
- .download_page_edd-tools .inside input[type="submit"],
1749
- .download_page_edd-settings .inside input[type="button"],
1750
- .download_page_edd-reports .inside input[type="text"],
1751
- .download_page_edd-reports .inside select,
1752
- .download_page_edd-reports .inside input[type="submit"],
1753
- .download_page_edd-reports .inside .button,
1754
- #system-info-textarea,
1755
- #edd-add-discount input[type="text"],
1756
- #edd-edit-discount input[type="text"],
1757
- #edd-payment-filters input:not([type='radio']),
1758
- #edd-payment-filters select,
1759
- #edd-payment-filters a {
1760
- width: 100%;
1761
- }
1762
-
1763
- #edd-add-discount select[multiple],
1764
- #edd-edit-discount select[multiple],
1765
- .download_page_edd-tools select[multiple] {
1766
- height: 200px !important;
1767
- }
1768
-
1769
- .download_page_edd-settings input[type="checkbox"] {
1770
- margin: 2px 0;
1771
- }
1772
-
1773
- .post-type-download input[type="checkbox"] {
1774
- margin-left: 2px;
1775
- }
1776
-
1777
  }
1778
 
1779
  /* Tools Styles
@@ -1786,12 +1500,3 @@ td.edd_order_price {
1786
  display: none;
1787
  line-height: 24px;
1788
  }
1789
-
1790
- #edd-debug-log p.submit {
1791
- margin: 20px 0 0;
1792
- padding: 0;
1793
- }
1794
-
1795
- #edd-debug-log .edd-inline-button {
1796
- margin-left: 5px;
1797
- }
64
  z-index: 9999 !important;
65
  }
66
 
 
 
 
 
 
 
 
67
  /* =Add Ons Styles
68
  -------------------------------------------------------------- */
69
 
82
  #edd-add-ons h2 {
83
  margin: 0 0 15px;
84
  }
 
 
 
85
  #edd-add-ons h2 .button-primary {
86
  position: absolute;
87
  }
131
  height: 100px;
132
  min-width: 200px;
133
  }
134
+ #edd-add-discount input[type="checkbox"],
135
+ #edd-edit-discount input[type="checkbox"] {
136
+ width: 15px;
 
 
 
 
 
 
137
  }
138
 
139
  /* Payment History Styles
140
  -------------------------------------------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
  #edd-payment-filters {
143
  background: #f5f5f5;
163
  #edd-payment-filters p {
164
  color: #777;
165
  }
 
 
 
166
  tr.status-refunded td {
167
  background: #cecece;
168
  border-top-color: #ccc;
208
  /* Metabox Styles
209
  -------------------------------------------------------------- */
210
 
211
+ .edd_file_help_labels {
212
+ }
213
  .edd_files_name_label {
214
  width: 225px;
215
  float: left;
224
  #postbox-container-1 .edd_files_url_label {
225
  width: 80px;
226
  }
227
+ .edd_add_repeatable {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  display: inline-block;
 
229
  }
230
+ .edd_repeatable_row td {
231
+ vertical-align: middle;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  }
233
+ #downloadinformation .edd_meta_table_wrap table input,
234
+ #downloadinformation .edd_meta_table_wrap table select,
235
+ #downloadinformation .edd_meta_table_wrap table textarea {
236
+ margin: 4px 0;
 
 
237
  width: 100%;
238
  }
239
+ #downloadinformation .edd_meta_table_wrap table .submit input {
240
+ width: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  }
242
  .edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container {
243
  position: relative;
247
  display: block;
248
  padding: 2px 8px 2px;
249
  position: absolute;
250
+ top: 2px;
251
  right: 7px;
252
  }
253
  .edd_upload_field {
254
  padding-right: 8em;
255
  }
256
+ .edd_remove_repeatable {
257
+ border: none;
258
+ cursor: pointer;
259
+ display: inline-block;
260
+ padding: 0;
261
+ overflow: hidden;
262
+ margin: 8px 0 0 0;
263
+ text-indent: -9999px;
264
+ width: 10px;
265
+ height: 10px;
266
+ }
267
+ .edd_remove_repeatable:active,
268
+ .edd_remove_repeatable:hover,
269
+ .edd_remove_repeatable:focus {
270
+ background-position: -10px 0!important;
271
+ }
272
+ .edd_draghandle {
273
+ background: url(../images/edd-cross-hair.png);
274
+ cursor: move;
275
+ display: block;
276
+ margin: 4px 0 0 0;
277
+ width: 20px;
278
+ height: 20px;
279
+ }
280
  textarea#edd-payment-note {
281
  width: 100%;
282
  height: 4em;
310
  min-width: 100%;
311
  }
312
  #edd_product_notes_field {
313
+ margin: 0;
314
+ width: 98%;
315
  height: 4em;
 
316
  }
317
+ .edd_repeatable_default_wrapper {
318
+ text-align: center;
319
+ width: 25px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  }
321
 
322
  /* Payment Details
333
  #edd-edit-order-form .column:nth-child(2n+1) {
334
  margin-right: 0;
335
  }
 
 
 
336
  .edd-edit-purchase-element ul li.download {
337
  width: 35%;
338
  }
479
  font-size: 14px;
480
  font-weight: 500;
481
  }
 
 
 
482
  .edd-edit-purchase-element .edd-purchased-download-actions {
483
  color: #777;
484
  line-height: 1.4;
778
  padding: 12px 12px 4px;
779
  overflow: auto;
780
  margin: 20px -12px -23px;
 
 
781
  }
782
  .edd-import-export-form .notice-wrap .spinner {
783
  margin: 4px 10px 8px;
967
  clear: both;
968
  }
969
 
970
+ /* Taxonomy styles
971
+ -------------------------------------------------------------- */
972
+
973
+ .post-type-download .fixed .column-name {
974
+ width: 27%;
975
+ }
976
+ .post-type-download .fixed .column-description {
977
+ width: 30%;
978
+ }
979
+ .post-type-download .fixed .column-slug {
980
+ width: 23%;
981
+ }
982
+ .post-type-download .fixed .column-posts {
983
+ text-align: left;
984
+ width: 17%;
985
+ }
986
+
987
  /* System Info page styles
988
  -------------------------------------------------------------- */
989
 
1027
  -------------------------------------------------------------- */
1028
 
1029
  .edd-select-chosen {
1030
+ width: 300px;
 
1031
  }
1032
  .chosen-container-multi .chosen-choices {
1033
  background-image: none;
1135
  width: 100%;
1136
  min-height: 230px;
1137
  }
 
 
 
 
1138
  }
1139
 
1140
  /* Customer Styles
1468
  #edd-item-card-wrapper .customer-section {
1469
  margin-bottom: 0;
1470
  }
1471
+ #edd-item-card-wrapper .widefat td, .widefat th {
 
1472
  padding: 4px 6px;
1473
  max-width: 100px!important;
1474
  display: table-cell;
1488
  #edd-item-tab-wrapper-list li:nth-child(even) {
1489
  border-width: 0 0 1px 0;
1490
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1491
  }
1492
 
1493
  /* Tools Styles
1500
  display: none;
1501
  line-height: 24px;
1502
  }
 
 
 
 
 
 
 
 
 
assets/css/edd-admin.min.css CHANGED
@@ -1 +1 @@
1
- #edd-add-ons .edd-extension .third-party,.download_page_edd-addons .wrap .wp-heading-inline,.download_page_edd-addons .wrap>.page-title-action,.edd-hidden,.edit-php.post-type-download .wrap .wp-heading-inline,.edit-php.post-type-download .wrap>.page-title-action{display:none}#edd-payment-date-filters input,.edd-mobile-link{vertical-align:middle}.edd-clearfix:after{content:".";display:block;height:0;text-indent:-9999px;visibility:hidden}.edd-wrap a{text-decoration:none}a.edd-delete{color:#a00}a.edd-delete:hover{color:red}.download_page_edd-settings .form-table label{color:#666;font-size:14px;font-style:italic;margin:4px 0 0}.download_page_edd-settings .form-table input.small-text~label,.download_page_edd-settings .form-table input[type=checkbox]+label{display:inline}.download_page_edd-settings .form-table tr>th>h3,.download_page_edd-settings .form-table tr>th>strong{font-size:1.2em;font-weight:600;margin:0 auto}.edd-help-tip{cursor:help}.edd-ui-tooltip{background:#333!important;border-width:1px!important;border-radius:3px!important;box-shadow:1px 1px 2px 1px rgba(214,214,214,.5)!important;color:#dedede!important;max-width:300px!important;padding:7px!important;text-rendering:optimizeLegibility;text-shadow:none!important;z-index:9999!important}.download_page_edd-settings .edd-settings-payment-icon-wrapper{margin-right:10px;line-height:16px;height:16px;display:table}#edd-add-ons h2.nav-tab-wrapper{position:relative}#edd-add-ons h2 .button-primary,.edd-tab-span{position:absolute}.edd-tab-span{top:-6px;right:0}.edd-add-ons-footer{padding-top:10px}#edd-add-ons h2{margin:0 0 15px}.edd-add-ons-view-wrapper{height:50px}#edd-add-ons .edd-extension{background:#fff;border:1px solid #ccc;float:left;padding:14px;position:relative;margin:0 15px 15px 0;width:320px;height:315px}#edd-add-ons .edd-extension h3{font-size:13px;margin:0 0 8px}#edd-add-ons .edd-extension .button-secondary{position:absolute;bottom:14px;left:14px}#edd-add-ons .edd-browse-all{clear:both;width:100%}#edd-add-ons .edd-starter-package{background-color:#85c0e5;border-color:#62a9d7;color:#fff}#edd-add-ons .edd-starter-package h3{color:#fff}#edd-payment-filters p,.edd-repeatable-row-actions .toggle-custom-price-option-section{color:#777}#edd-add-ons .edd-extension .wp-post-image{width:100%;height:auto}#edd-products{height:100px;min-width:200px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text]{width:300px}#edd-add-discount input.edd-price-field,#edd-edit-discount input.edd-price-field{padding:3px 5px;width:75px}.download_page_edd-addons .wrap .nav-tab-wrapper .page-title-action,.edit-php.post-type-download .wrap .nav-tab-wrapper .page-title-action{top:7px;margin-left:5px}#edd-payment-filters{background:#f5f5f5;clear:both;background-image:-webkit-gradient(linear,left bottom,left top,from(#f5f5f5),to(#fafafa));background-image:-webkit-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-moz-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-o-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:linear-gradient(to top,#f5f5f5,#fafafa);border-color:#dfdfdf;border-width:1px;border-style:solid;border-radius:3px;font-size:13px;line-height:2.1em;overflow:auto;padding:12px;margin:8px 0}#edd-payments-filter ul.subsubsub{margin-bottom:8px}tr.status-refunded td{background:#cecece;border-top-color:#ccc}.wp-list-table.downloads th#ID{width:80px}.wp-list-table.downloads th#details{width:130px}.wp-list-table.downloads th#date{width:140px}.wp-list-table.downloads th#user{width:130px}.edd-mobile-link{line-height:32px}.edd-mobile-link img{max-width:80%;height:auto;float:left}@media handheld,only screen and (max-width:640px){.wp-list-table.downloads th{width:auto!important}}.download_page_edd-payment-history .ui-dialog .ui-dialog-titlebar-close span{margin-left:-8px;margin-top:-8px}#edd-download-link-textarea{width:100%}.edd_files_name_label{width:225px;float:left}.edd_files_url_label{width:220px;float:left}#postbox-container-1 .edd_files_name_label,#postbox-container-1 .edd_files_url_label{width:80px}.edd-add-repeatable-row{margin:10px 0}.edd-add-repeatable-row .submit{padding:0!important}.edd_repeatable_upload_wrapper:not(:first-child),.edd_variable_prices_wrapper:not(:first-child){margin-top:12px}.edd-repeatable-row-actions{color:#777;font-size:12px}.edd-repeatable-row-actions a{text-decoration:none;width:auto;cursor:pointer;vertical-align:middle}.edd-repeatable-row-actions .toggle-custom-price-option-section:hover{color:#444}.edd-bundle-products-header,.edd-repeatable-row-header{clear:both;background:#f1f1f1;border:1px solid #e5e5e5}.edd-repeatable-row-header{cursor:move}.edd-bundled-product-row:after,.edd-bundled-product-row:before,.edd-repeatable-row-header:after,.edd-repeatable-row-header:before{content:'';display:table}.edd-bundled-product-row:after,.edd-repeatable-row-header:after{clear:both}.edd-repeatable-row-title{float:left;font-weight:600}.edd-admin-box .right,.edd-bundled-product-row .edd-bundled-product-actions{float:right}.edd-bundled-product-item-reorder .edd-product-file-reorder{color:#e5e5e5;font-family:dashicons;content:"\f545";font-size:18px;font-weight:300;margin-left:4px;vertical-align:top;transition:.2s color}.edd-bundled-product-item-reorder .edd-product-file-reorder:hover{color:#bbb}.edd-repeatable-row-actions,.edd-repeatable-row-title{padding:8px;box-sizing:border-box}.edd-repeatable-row-actions{float:right;text-align:right;padding:8px}.edd-bundled-product-row .edd-remove-row,.edd-repeatable-row-actions .edd-remove-row{font-size:12px;width:auto;cursor:pointer}.edd-bundled-product-row,.edd-repeatable-row-standard-fields{background:#f9f9f9;padding:8px;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5}.edd-repeatable-row-setting-label{display:block;margin-bottom:4px}.edd-repeatable-row-setting-label .edd-help-tip{display:inline-block;margin-left:4px}.edd-bundled-product-row .edd-bundled-product-actions,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{display:inline-block;vertical-align:top}.edd-option-name{width:38%;margin-right:5%}.edd-option-price{min-width:100px}.edd_repeatable_default{text-align:center;min-width:80px}.edd-file-name{width:18%;margin-right:3%}.edd-file-url{width:65%}.edd-repeatable-row-standard-fields.has-variable-pricing .edd-file-url{width:38%;margin-right:5%}.edd-file-assignment{width:27%}.edd-file-assignment .edd-repeatable-row-setting-label{margin-bottom:0}.edd-custom-price-option-sections-wrap{display:none;border-width:0 1px 1px;border-style:solid;border-color:#e5e5e5;box-sizing:border-box;width:100%}.edd-custom-price-option-section{display:block;padding:10px 8px;border-bottom:1px solid rgba(222,222,222,.3)}.edd-custom-price-option-section:last-child{border-bottom:none}label.edd_prices_shipping{display:none!important}.edd-custom-price-option-section-title{display:block;font-size:14px;font-weight:600;padding:0 0 10px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title){display:inline-block;padding-right:20px;vertical-align:top;margin-bottom:4px}.edd-custom-price-option-section>:not(.edd-custom-price-option-section-title) label{display:block;margin-bottom:2px}.edd-bundle-products-header{font-weight:600;padding:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder{min-width:30px;margin-right:8px}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{font-size:20px;font-weight:300;padding:16px 4px 0;cursor:move}.edd-admin-box .label,.edd-admin-box-inside .strong{font-weight:600}.edd-bundled-product-row .edd-bundled-product-item{width:60%;margin-right:3%}.edd-bundled-product-row.has-variable-pricing .edd-bundled-product-item{width:47%}.edd-bundled-product-row .edd-bundled-product-price-assignment{width:23%;margin-right:3%}.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container{position:relative}.edd_upload_file{background:#fff;display:block;padding:2px 8px;position:absolute;top:3px;right:7px}.edd_upload_field{padding-right:8em}textarea#edd-payment-note{width:100%;height:4em;margin:0}#edd-purchased-files .row .edd-purchased-files-list-wrapper .download{line-height:1.4}#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option{color:#666}input[class*=edd-price-field]{padding:3px 5px;width:75px}#edd-order-download-quantity[type=number].small-text,#edd-order-download-tax[type=text].small-text,[class*=item_] [class*=edd-payment-details-download-][type=number].small-text{height:25px}#edd-order-download-quantity[type=number].small-text,.item_price .edd-payment-details-download-quantity[type=number].small-text{width:55px}#edd-order-download-tax[type=text].small-text,.item_tax .edd-payment-details-download-item-tax[type=number].small-text{width:75px}.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%}#edd_product_notes_field{display:block;margin:12px 0 0;height:4em;width:100%}.edd_remove_repeatable{border:none;cursor:pointer;display:inline-block;padding:0;overflow:hidden;margin:8px 0 0;text-indent:-9999px;width:10px;height:10px}.edd_remove_repeatable:active,.edd_remove_repeatable:focus,.edd_remove_repeatable:hover{background-position:-10px 0!important}#edd-edit-order-form .column{width:32%}.edd-edit-purchase-element[class*=columns-] ul li{padding-right:1%}#edd-edit-order-form .column:nth-child(2n+1),#edd-edit-order-form .columns-4 .column:nth-child(2n+1),#edd-edit-order-form .columns-5 .column:nth-child(3n+1){margin-right:0}#edd-edit-order-form input.large-text{width:90%}.edd-edit-purchase-element ul li.download{width:35%}.edd-edit-purchase-element ul li.item_price{width:15%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:25%}.edd-edit-purchase-element ul li.item_tax{width:15%}.edd-edit-purchase-element ul li.price{width:20%}.edd-admin-box-inside{border-bottom:1px solid #eee;clear:both;padding:3px 12px;margin:0;word-break:break-word}.rtl .edd-admin-box-inside{padding:5px 10px 5px 0}.edd-payment-fees .fee-label{color:#666;font-weight:400}.rtl .edd-admin-box .right{float:left;margin-left:10px}#edd-customer-details .actions,#edd-order-recalc-total{float:right}#edd-order-details .inside,#edd-order-update .inside{margin:0;padding:0}#edd-order-update input.edd_datepicker{width:180px}#edd-order-update input[type=number].edd-payment-time-hour,#edd-order-update input[type=number].edd-payment-time-min{width:50px}#edd-order-update .edd-tax-rate{color:#9c9c9c;font-style:italic}#edd-order-resend-receipt .inside{margin-top:11px}#edd-order-resend-receipt .edd-order-resend-receipt-addresses{margin-top:10px}.edd-admin-box-inside:last-child{border-bottom:0}#edd-edit-order-form .data-payment-key{word-break:break-all}.edd-order-update-box #major-publishing-actions .button-secondary{margin-right:10px}.edd-edit-purchase-element .edd-select-chosen{width:196px}#edd-customer-details .order-data-address input,#edd-customer-details .order-data-column p.data input,#edd-edit-order-form .column input,#edd-order-address-country-wrap select,.edd-edit-purchase-element ul{clear:both;display:block}#edd-customer-details .customer-info .column{width:49%}.edd-order-data input.small-text{margin:0}.edd-order-data input.med-text{margin:0;width:100px}#edd-order-update span.label{display:inline;width:50px}.edd-order-update-box .button-primary{margin-right:0}#edd-edit-order-form .column .description{padding-right:10px}#edd-edit-order-form .column,.edd-edit-purchase-element ul li{display:inline-block;line-height:1.4;position:relative;margin:0;vertical-align:middle}.edd-edit-purchase-element .row{padding:12px}.edd-edit-purchase-element .row:not(:last-child){border-bottom:1px solid #eee}.edd-edit-purchase-element .row:nth-child(odd):not(.header){background-color:#f9f9f9}.edd-edit-purchase-element .row.header{padding:6px 12px;font-weight:600;vertical-align:top}.edd-edit-purchase-element ul{font-size:0}.edd-edit-purchase-element ul li{font-size:13px}#edd-order-data .data span{color:#666;font-weight:600}.edd-edit-purchase-element .inside{padding:12px}.edd-edit-purchase-element .edd-purchased-download-title{font-size:14px;font-weight:500}.edd-edit-purchase-element .edd-purchased-download-title .deleted{color:#777}.edd-edit-purchase-element .edd-purchased-download-actions{color:#777;line-height:1.4}.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label{font-weight:500}.edd-edit-purchase-element .edd-purchased-download-actions a{color:#777;font-size:12px}.edd-edit-purchase-element .edd-purchased-download-actions a:hover{color:#444}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download{color:#a00}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover{color:red}#edd_products .edd-select,.edd_repeatable_product_wrapper .edd-select,.edd_repeatable_upload_wrapper .pricing select{min-width:100%;max-width:200px}.edd_repeatable_product_wrapper td{overflow:visible}.edd-payment-details-label-mobile{display:none}@media screen and (max-width:1284px){.edd-edit-purchase-element ul li.download{padding-bottom:15px;width:100%}.edd-edit-purchase-element .edd-purchased-download-title{font-size:16px}.edd-edit-purchase-element ul li.item_price{width:22%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax{width:25%}.edd-edit-purchase-element ul li.price{width:20%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:10px}.edd-add-download-to-purchase-header,.edd-purchased-files-header{display:none}.edd-payment-details-label-mobile{display:block;font-weight:500;padding-bottom:6px}}@media screen and (max-width:1024px){.edd-edit-purchase-element ul li.item_price.item_quantity{width:40%}.edd-edit-purchase-element ul li.price{width:24%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:15px}.edd-edit-purchase-element .edd-purchased-download-actions,.edd-edit-purchase-element .edd-purchased-download-actions a{font-size:14px}}@media screen and (max-width:782px){#edd-edit-order-form .column{width:49%}.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity{padding-bottom:10px}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax,.edd-edit-purchase-element ul li.price{width:20%;padding-bottom:10px}.edd-payment-details-label-mobile{font-size:14px;font-weight:500}.edd-payment-details-download-amount,.edd-price-currency{font-size:16px}.order-data-column input[type=email]{padding:6px 10px}}@media screen and (max-width:600px){.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity,.edd-edit-purchase-element ul li.item_tax{width:100%;padding-bottom:20px}.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax,.edd-edit-purchase-element ul li.price{width:100%;padding-bottom:0}.edd-edit-purchase-element .edd-add-download-to-purchase-actions{padding-top:15px}#edd-edit-order-form .column{width:100%}}#edd_product_stats .label{display:inline-block}#edd_product_stats hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}#edd_product_stats .product-earnings-stats:before,#edd_product_stats .product-sales-stats:before{color:#82878c;font:400 20px/1 dashicons;display:inline-block;padding:0 2px 0 0;position:relative;top:0;left:-1px;speak:none;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#edd-item-card-wrapper a.delete,#edd-item-stats-wrapper a,.customer-edit-link a,.disconnect-user a,.wrap-licenses .edd-license-data.edd-license-expired a:hover,.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover,.wrap-licenses .edd-license-data[class*=edd-license-] a:hover{text-decoration:none}#edd_product_stats .product-sales-stats:before{content:'\f174'}#edd_product_stats .product-earnings-stats:before{content:'\f239'}.edd_dashboard_widget table thead td{border-bottom:1px solid #ececec;color:#777}.edd_dashboard_widget .table_left{float:left;width:45%}.edd_dashboard_widget .table_right{float:right;width:45%}.edd_dashboard_widget .inside{font-size:12px}.edd_dashboard_widget td{padding:3px 0}.edd_dashboard_widget .b,.edd_dashboard_widget .t{line-height:1.5;vertical-align:middle}.edd_dashboard_widget .b{font-size:14px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;padding-right:6px;width:auto}.edd_dashboard_widget .t{font-size:12px;padding-right:12px;color:#777;width:100%}.edd_dashboard_widget .label_heading{border-top:1px solid #ececec;color:#8f8f8f;font-family:Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;display:block;padding-top:10px;margin:0 0 8px 12px}.edd_dashboard_widget .edd_dashboard_widget_subheading{border-top:1px solid #ececec;color:#8f8f8f;font-size:14px;padding-top:10px;margin:1em 0 0}.edd_dashboard_widget .edd_dashboard_widget_subheading+.table{margin:8px 0 0}.edd_dashboard_widget .edd_price_label{background:#00769c;border-radius:3px;color:#fff;font-size:10px;padding:2px 4px;margin-right:2px}.edd_dashboard_widget table{width:100%;margin-left:0;margin-bottom:1em}td.edd_order_label{width:80%}td.edd_order_price{text-align:right}@media handheld,only screen and (max-width:1000px){.edd_dashboard_widget .edd-recent-email{display:none}}#edd-dashboard-widgets-wrap .postbox h3{cursor:default}#edd-date-range-options,#edd-graphs-date-options{float:left}#edd-date-range-options span{float:left;line-height:24px;height:24px;margin-right:6px}.edd-import-export-form{position:relative}.edd-import-export-form .edd-progress{background:#ddd;position:absolute;bottom:15px;width:95%;height:15px}.edd-import-export-form .edd-progress div{background:#ccc;height:100%;width:0}.edd-import-export-form .notice-wrap{background-color:#f4f4f4;border-style:solid;border-width:1px 0;border-color:#eae9e9;padding:12px 12px 4px;overflow:auto;margin:20px -12px -23px;position:relative;width:100%}.edd-import-export-form .notice-wrap .spinner{margin:4px 10px 8px;float:right}.admin-color-fresh .edd-import-export-form .edd-progress div{background:#0073aa}.admin-color-light .edd-import-export-form .edd-progress div{background:#888}.admin-color-blue .edd-import-export-form .edd-progress div{background:#096484}.admin-color-coffee .edd-import-export-form .edd-progress div{background:#c7a589}.admin-color-ectoplasm .edd-import-export-form .edd-progress div{background:#a3b745}.admin-color-midnight .edd-import-export-form .edd-progress div{background:#e14d43}.admin-color-sunrise .edd-import-export-form .edd-progress div{background:#dd823b}#edd-graphs-filter label{vertical-align:inherit}#edd-graphs-filter .graph-option-section{float:left;line-height:2.5em;padding-right:5px}.edd-mix-totals{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);padding:10px}.edd-mix-chart{display:inline-block;width:49%;vertical-align:top}.edd-graph-notes{color:#9c9c9c}.edd-graph-notes span{display:block}.edd-pie-graph .legend{display:none}.edd-pie-legend{overflow:auto;margin-top:10px}.edd-legend-item-wrapper{color:#333;display:inline-block;font-size:8pt;padding:2px 5px 0;width:48%;height:20px}.edd-legend-color{border:1px solid #cfcfcf;display:inline-block;margin-right:5px;width:20px;height:15px}.edd-pie-legend-item{display:inline-block;vertical-align:top;width:80%}#edd_tax_rates{margin:1em 0 0}#edd_tax_rates .edd_tax_country *,#edd_tax_rates .edd_tax_state *{max-width:100%}#edd_tax_rates .edd_tax_country,#edd_tax_rates .edd_tax_state{width:180px}#edd_tax_rates .edd_tax_rate{width:80px}#edd_tax_rates th{padding:15px 10px}.wrap-licenses .form-table,.wrap-licenses caption,.wrap-licenses tbody,.wrap-licenses td,.wrap-licenses tfoot,.wrap-licenses th,.wrap-licenses thead,.wrap-licenses tr{display:block}.wrap-licenses .form-table tr{float:left;margin:0 15px 15px 0;background:#fff;border:1px solid #ccc;width:30.5%;max-width:350px;padding:14px;min-height:220px;position:relative;box-sizing:border-box}.wrap-licenses .form-table th{background:#f9f9f9;padding:14px;border-bottom:1px solid #ccc;margin:-14px -14px 20px;width:100%}.wrap-licenses .form-table td{padding:0}.wrap-licenses td input.regular-text{margin:0 0 8px;width:100%}.wrap-licenses .edd-license-data[class*=edd-license-]{position:absolute;background:#fafafa;padding:14px;border-top:1px solid #eee;margin:20px -14px -14px;min-height:67px;width:100%;bottom:14px;box-sizing:border-box}.wrap-licenses .edd-license-data[class*=edd-license-] a{color:#444}.wrap-licenses .edd-license-data.license-expires-soon-notice{background-color:#00a0d2;color:#fff;border-color:#00a0d2}.wrap-licenses .edd-license-data.edd-license-expired{background-color:#e24e4e;color:#fff;border-color:#e24e4e}.wrap-licenses .edd-license-data.edd-license-error,.wrap-licenses .edd-license-data.edd-license-invalid,.wrap-licenses .edd-license-data.edd-license-item_name_mismatch,.wrap-licenses .edd-license-data.edd-license-missing,.wrap-licenses .edd-license-data.edd-license-site_inactive{background-color:#ffebcd;border-color:#ffebcd}.wrap-licenses .edd-license-data p{font-size:13px;margin-top:0}.wrap-licenses .edd-license-data.edd-license-expired a,.wrap-licenses .edd-license-data.license-expires-soon-notice a{color:#fff}.wrap-licenses p.submit{clear:both}#system-info-textarea{background:0 0;font-family:Menlo,Monaco,monospace;display:block;overflow:auto;white-space:pre;width:800px;height:400px}#TB_window #edd-add-download:active,#TB_window #edd-add-download:focus,#TB_window #edd-add-download:hover{color:#fff}.edd-graph .y1Axis{color:#edc240!important}.edd-graph .y2Axis{color:#afd8f8!important}.download_page_edd-tools .apikeys .column-user{width:192px}.edd-select-chosen{width:100%;max-width:300px}.chosen-container-multi .chosen-choices{background-image:none;border-color:#dfdfdf;-webkit-border-radius:3px;border-radius:3px}.chosen-container-multi .chosen-choices input{border-color:#dfdfdf;height:27px!important;margin:2px}.chosen-container .chosen-drop{border-color:#aaa;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1)}.chosen-container .search-field{float:none!important}.chosen-container .search-field input{width:90%!important}.chosen-container-active .chosen-choices{border-color:#aaa;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.1);border-radius:3px 3px 0 0}.download_page_edd-tools .tablenav .actions{overflow:visible}.edd_user_search_wrap{position:relative;overflow:visible}.edd_user_search_results{position:absolute;left:0;top:27px}.edd_user_search_results a.edd-ajax-user-cancel{position:absolute;right:6px;top:2px}.edd_user_search_results ul{background:#f0f0f0;border:1px solid #dfdfdf;overflow-y:scroll;padding:10px 10px 4px;margin:0;max-height:200px;width:300px}.wp-list-table .type-download .row-actions{color:#999}@media screen and (max-width:1100px){.edd-mix-chart{display:block;width:100%}.wrap-licenses .form-table tr{width:46%;max-width:none;min-height:230px}}@media screen and (max-width:782px){.post-type-download .nav-tab-wrapper a{font-size:70%;padding:2px 4px}.download_page_edd-tools .apikeys .column-user{width:80px}.license-expiration-date-notice,.license-lifetime-notice,.license-null{padding-left:0}[class^=license-] input[type=text]{margin-bottom:3px}}#edd-item-tab-wrapper-list li a,#edd-item-tab-wrapper-list li.active{display:block;padding:8px 10px 8px 6px}@media screen and (max-width:600px){.wrap-licenses .form-table tr{width:100%;min-height:230px}#edd-edit-order-form input.large-text{width:100%}}#edd-item-wrapper{background:#f5f5f5;border:1px solid #e5e5e5;webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);max-width:830px}#edd-item-wrapper:after{content:"";display:block;clear:both;visibility:hidden;font-size:0;height:0}#edd-item-tab-wrapper{float:left;width:18%;z-index:1}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{display:block;background-color:#eaeaea;color:#444;font-size:12px;border-bottom:1px solid #e5e5e5;margin-bottom:0;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word}#edd-item-tab-wrapper-list li.active{background-color:#fff}#edd-item-tab-wrapper-list .inactive a,#edd-item-tab-wrapper-list .inactive a:visited{background-color:#f5f5f5;color:#444;text-decoration:none}#edd-item-tab-wrapper-list .inactive a:hover{background-color:#fff}#edd-item-tab-wrapper-list .dashicons{color:#444;font-size:16px;min-width:24px;height:auto}#edd-item-card-wrapper .left{float:left}#edd-item-card-wrapper .right{float:right}#edd-item-card-wrapper input{font-weight:400}#edd-item-card-wrapper .customer-id,.customer-info .customer-name{font-size:24px;font-weight:600}#edd-item-card-wrapper{background-color:#fff;border:1px solid #e5e5e5;display:inline-block;margin-left:-1px;min-height:200px;width:700px;z-index:2}.edd-item-has-tabs #edd-item-card-wrapper{border-width:0 0 0 1px;width:82%}#edd-item-card-wrapper .customer-section{border-bottom:1px solid #eee;margin-bottom:10px;overflow:auto}#edd-item-card-wrapper .customer-section table{margin-bottom:20px}#edd-item-card-wrapper>div{padding:0 20px}#edd-item-card-wrapper>div:first-child{padding-top:20px}#edd-item-card-wrapper>div:last-child{border:none;padding-bottom:20px}#edd-item-card-wrapper .avatar-wrap{padding-right:10px;text-align:center}#edd-item-card-wrapper .customer-main-wrapper input{width:200px}#edd-item-card-wrapper .customer-address-wrapper{margin-right:25px;max-width:33%;width:202px}#edd-item-card-wrapper .customer-address-wrapper select{width:200px}#edd-item-card-wrapper .customer-info{margin-top:5px;margin-bottom:10px;min-height:185px}#edd-item-card-wrapper .info-wrapper{min-height:125px;overflow:visible}#edd-item-card-wrapper a.delete{color:red;margin-right:5px}.customer-edit-link a,.disconnect-user a{font-size:12px;font-weight:400}#customer-edit-actions{line-height:28px;margin-bottom:20px;text-align:center}#customer-edit-actions .button-secondary{margin-right:10px}#edd-item-card-wrapper .row-title{width:30%}#edd-item-card-wrapper .info-item{display:block;line-height:16px;padding-bottom:5px}#edd-item-card-wrapper .edit-item{display:none}#edd-item-card-wrapper .edd_user_search_results{left:1px;top:16px}#edd-item-card-wrapper .edd_user_search_results ul{width:200px}#edd-item-stats-wrapper{margin:0 auto;min-height:30px;text-align:center}#edd-item-stats-wrapper li{font-size:14px;float:left;line-height:22px;width:50%}#edd-item-stats-wrapper .dashicons{color:#888}#edd-item-tables-wrapper table{text-align:center;width:100%}#edd-item-tables-wrapper th{text-align:center}#edd-item-tables-wrapper .downloads tr>td:first-child,#edd-item-tables-wrapper .downloads tr>th:first-child,#edd-item-tables-wrapper .emails tr>td:first-child,#edd-item-tables-wrapper .emails tr>th:first-child{text-align:left}#edd-item-tables-wrapper .downloads tr>td:only-child,.delete-customer{text-align:center}#edd-item-tables-wrapper .emails .add-customer-email-row td{background-color:#f9f9f9;border-top:1px solid #e5e5e5}#edd-item-tables-wrapper .emails .primary-email-icon{font-size:13px;vertical-align:middle;line-height:1.5em}#edd-item-tables-wrapper .emails input{vertical-align:middle;margin:6px 0}#edd-item-tables-wrapper .emails .spinner{float:none}#edd-item-notes-wrapper{min-height:50px}.edd-item-notes-header img,.edd-item-notes-header span{font-weight:600;line-height:30px;vertical-align:middle}.customer-note-input{margin-bottom:5px;width:100%}#edd-customer-notes div:nth-of-type(even){background-color:#fcfcfc}.customer-note-wrapper{border-bottom:1px solid #f9f9f9;min-height:38px;padding:7px 0 7px 7px}.customer-note-wrapper span{display:block}.note-content-wrap{padding-top:7px}#edd-item-card-wrapper .notice-wrap{padding-left:20px;padding-right:20px;margin-left:-20px;margin-right:-20px}@media screen and (max-width:810px) and (min-width:656px){.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper .widefat td,.widefat th{padding:4px 6px;max-width:100px!important;display:table-cell}}@media screen and (max-width:781px){#edd-item-card-wrapper,#edd-item-tab-wrapper{margin:0;width:100%}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{float:left;display:inline;font-size:14px;box-sizing:border-box;border-width:0 1px 1px 0;border-style:solid;border-color:#e5e5e5;width:33.33333%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 0 1px}#edd-item-tab-wrapper-list .dashicons{font-size:18px}.edd-item-has-tabs #edd-item-card-wrapper{border-top:1px solid #e5e5e5;border-left:0;margin-top:-1px;width:100%}}@media screen and (max-width:656px){#edd-item-card-wrapper .customer-id,.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper .customer-info{min-height:220px}.edd-item-info.customer-info{position:relative}#edd-item-card-wrapper .customer-address-wrapper{float:none;position:absolute;top:84px;left:110px;max-width:200px}#edd-item-card-wrapper .customer-main-wrapper{float:none;position:absolute;left:110px}#edd-item-card-wrapper #edd-item-stats-wrapper{padding-left:0;padding-right:0}#edd-item-card-wrapper .customer-section{margin-bottom:0}#edd-item-card-wrapper .widefat td,#edd-item-card-wrapper .widefat th{padding:4px 6px;max-width:100px!important;display:table-cell;overflow:hidden}}@media screen and (max-width:480px){#edd-item-tab-wrapper-list li{width:50%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 1px 1px 0}#edd-item-tab-wrapper-list li:nth-child(even){border-width:0 0 1px}.edd-repeatable-row-actions,.edd-repeatable-row-title{text-align:left;width:100%}.edd-repeatable-row-title{padding-bottom:0}.edd-bundled-product-item-reorder,.edd-bundled-product-row .edd-bundled-product-item,.edd-bundled-product-row .edd-bundled-product-price-assignment,.edd-file-assignment,.edd-file-name,.edd-file-url,.edd-option-name,.edd-option-price,.edd_repeatable_default{float:none;text-align:left;width:100%!important;margin:10px 0}.edd-bundled-product-row .edd-bundled-product-actions{float:none}.edd-bundled-product-row .edd-bundled-product-item-reorder .edd-product-file-reorder{padding:0}#edd-payment-filters span{display:block;margin:2px 0}#edd-payment-filters a,.download_page_edd-reports .button{text-align:center}#edd-payment-date-filters span{display:block}#edd-payment-date-filters span>input{float:right}#edd-add-discount select[multiple] option,#edd-edit-discount select[multiple] option{height:20px}#edd-add-discount input[type=text],#edd-edit-discount input[type=text],#edd-payment-filters a,#edd-payment-filters input:not([type=radio]),#edd-payment-filters select,#system-info-textarea,.download_page_edd-reports .inside .button,.download_page_edd-reports .inside input[type=submit],.download_page_edd-reports .inside input[type=text],.download_page_edd-reports .inside select,.download_page_edd-settings .inside input[type=button],.download_page_edd-tools .inside input[type=submit],.download_page_edd-tools .inside input[type=text],.download_page_edd-tools .inside select{width:100%}#edd-add-discount select[multiple],#edd-edit-discount select[multiple],.download_page_edd-tools select[multiple]{height:200px!important}.download_page_edd-settings input[type=checkbox]{margin:2px 0}.post-type-download input[type=checkbox]{margin-left:2px}}.recount-stats-controls form{display:inline}.edd-recount-stats-descriptions span{display:none;line-height:24px}#edd-debug-log p.submit{margin:20px 0 0;padding:0}#edd-debug-log .edd-inline-button{margin-left:5px}
1
+ .edd-hidden{display:none}.edd-clearfix:after{content:".";display:block;height:0;text-indent:-9999px;visibility:hidden}.edd-wrap a{text-decoration:none}a.edd-delete{color:#a00}a.edd-delete:hover{color:red}.download_page_edd-settings .form-table label{color:#666;font-size:14px;font-style:italic;margin:4px 0 0}.download_page_edd-settings .form-table input.small-text ~ label,.download_page_edd-settings .form-table input[type="checkbox"] + label{display:inline}.download_page_edd-settings .form-table tr > th > strong,.download_page_edd-settings .form-table tr > th > h3{font-size:1.2em;font-weight:600;margin:0 auto}.edd-help-tip{cursor:help}.edd-ui-tooltip{background:#333!important;border-width:1px!important;border-radius:3px!important;box-shadow:1px 1px 2px 1px rgba(214,214,214,0.5)!important;color:#dedede!important;max-width:300px!important;padding:7px!important;text-rendering:optimizeLegibility;text-shadow:none!important;z-index:9999!important}#edd-add-ons h2.nav-tab-wrapper{position:relative}.edd-tab-span{top:-6px;right:0;position:absolute}.edd-add-ons-footer{padding-top:10px}#edd-add-ons h2{margin:0 0 15px}#edd-add-ons h2 .button-primary{position:absolute}#edd-add-ons .edd-extension{background:#fff;border:1px solid #ccc;float:left;padding:14px;position:relative;margin:0 15px 15px 0;width:320px;height:315px}#edd-add-ons .edd-extension h3{font-size:13px;margin:0 0 8px}#edd-add-ons .edd-extension .button-secondary{position:absolute;bottom:14px;left:14px}#edd-add-ons .edd-browse-all{clear:both;width:100%}#edd-add-ons .edd-extension .third-party{display:none}#edd-add-ons .edd-starter-package{background-color:#85c0e5;border-color:#62a9d7;color:#fff}#edd-add-ons .edd-starter-package h3{color:#fff}#edd-add-ons .edd-extension .wp-post-image{width:100%;height:auto}#edd-products{height:100px;min-width:200px}#edd-add-discount input[type="checkbox"],#edd-edit-discount input[type="checkbox"]{width:15px}#edd-payment-filters{background:#f5f5f5;clear:both;background-image:-webkit-gradient(linear,left bottom,left top,from(#f5f5f5),to(#fafafa));background-image:-webkit-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-moz-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:-o-linear-gradient(bottom,#f5f5f5,#fafafa);background-image:linear-gradient(to top,#f5f5f5,#fafafa);border-color:#dfdfdf;border-width:1px;border-style:solid;border-radius:3px;font-size:13px;line-height:2.1em;overflow:auto;padding:12px;margin:8px 0}#edd-payments-filter ul.subsubsub{margin-bottom:8px}#edd-payment-filters p{color:#777}tr.status-refunded td{background:#cecece;border-top-color:#ccc}.wp-list-table.downloads th#ID{width:80px}.wp-list-table.downloads th#details{width:130px}.wp-list-table.downloads th#date{width:140px}.wp-list-table.downloads th#user{width:130px}.edd-mobile-link{line-height:32px;vertical-align:middle}.edd-mobile-link img{max-width:80%;height:auto;float:left}@media handheld,only screen and (max-width: 640px){.wp-list-table.downloads th{width:auto!important}}.download_page_edd-payment-history .ui-dialog .ui-dialog-titlebar-close span{margin-left:-8px;margin-top:-8px}#edd-download-link-textarea{width:100%}.edd_files_name_label{width:225px;float:left}.edd_files_url_label{width:220px;float:left}#postbox-container-1 .edd_files_name_label{width:80px}#postbox-container-1 .edd_files_url_label{width:80px}.edd_add_repeatable{display:inline-block}.edd_repeatable_row td{vertical-align:middle}#downloadinformation .edd_meta_table_wrap table input,#downloadinformation .edd_meta_table_wrap table select,#downloadinformation .edd_meta_table_wrap table textarea{margin:4px 0;width:100%}#downloadinformation .edd_meta_table_wrap table .submit input{width:auto}.edd_repeatable_upload_wrapper .edd_repeatable_upload_field_container{position:relative}.edd_upload_file{background:#fff;display:block;padding:2px 8px;position:absolute;top:2px;right:7px}.edd_upload_field{padding-right:8em}.edd_remove_repeatable{border:none;cursor:pointer;display:inline-block;padding:0;overflow:hidden;margin:8px 0 0;text-indent:-9999px;width:10px;height:10px}.edd_remove_repeatable:active,.edd_remove_repeatable:hover,.edd_remove_repeatable:focus{background-position:-10px 0!important}.edd_draghandle{background:url(../images/edd-cross-hair.png);cursor:move;display:block;margin:4px 0 0;width:20px;height:20px}textarea#edd-payment-note{width:100%;height:4em;margin:0}#edd-purchased-files .row .edd-purchased-files-list-wrapper .download{line-height:1.4}#edd-purchased-files .edd-purchased-files-list-wrapper .edd-purchased-option{color:#666}input[class*="edd-price-field"]{padding:3px 5px;width:75px}[class*="item_"] [class*="edd-payment-details-download-"][type="number"].small-text,#edd-order-download-quantity[type="number"].small-text,#edd-order-download-tax[type="text"].small-text{height:25px}.item_price .edd-payment-details-download-quantity[type="number"].small-text,#edd-order-download-quantity[type="number"].small-text{width:55px}.item_tax .edd-payment-details-download-item-tax[type="number"].small-text,#edd-order-download-tax[type="text"].small-text{width:75px}.edd_repeatable_upload_wrapper .pricing select,.edd_repeatable_product_wrapper .edd-select{min-width:100%}#edd_product_notes_field{margin:0;width:98%;height:4em}.edd_repeatable_default_wrapper{text-align:center;width:25px}#edd-edit-order-form .column{width:32%}.edd-edit-purchase-element[class*="columns-"] ul li{padding-right:1%}#edd-edit-order-form .columns-4 .column:nth-child(2n+1),#edd-edit-order-form .columns-5 .column:nth-child(3n+1),#edd-edit-order-form .column:nth-child(2n+1){margin-right:0}.edd-edit-purchase-element ul li.download{width:35%}.edd-edit-purchase-element ul li.item_price{width:15%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:25%}.edd-edit-purchase-element ul li.item_tax{width:15%}.edd-edit-purchase-element ul li.price{width:20%}.edd-admin-box .label{font-weight:600}.edd-admin-box-inside{border-bottom:1px solid #eee;clear:both;padding:3px 12px;margin:0;word-break:break-word}.rtl .edd-admin-box-inside{padding:5px 10px 5px 0}.edd-admin-box-inside .strong{font-weight:600}.edd-payment-fees .fee-label{color:#666;font-weight:400}.edd-admin-box .right{float:right}.rtl .edd-admin-box .right{float:left;margin-left:10px}#edd-order-update .inside,#edd-order-details .inside{margin:0;padding:0}#edd-order-update input.edd_datepicker{width:180px}#edd-order-update input[type="number"].edd-payment-time-hour,#edd-order-update input[type="number"].edd-payment-time-min{width:50px}#edd-order-update .edd-tax-rate{color:#9c9c9c;font-style:italic}#edd-order-resend-receipt .inside{margin-top:11px}#edd-order-resend-receipt .edd-order-resend-receipt-addresses{margin-top:10px}.edd-admin-box-inside:last-child{border-bottom:0}#edd-edit-order-form .data-payment-key{word-break:break-all}.edd-order-update-box #major-publishing-actions .button-secondary{margin-right:10px}.edd-edit-purchase-element .edd-select-chosen{width:196px}.edd-edit-purchase-element ul,#edd-order-address-country-wrap select,#edd-customer-details .order-data-address input,#edd-edit-order-form .column input,#edd-customer-details .order-data-column p.data input{clear:both;display:block}#edd-customer-details .customer-info .column{width:49%}#edd-customer-details .actions{float:right}.edd-order-data input.small-text{margin:0}.edd-order-data input.med-text{margin:0;width:100px}#edd-order-update span.label{display:inline;width:50px}.edd-order-update-box .button-primary{margin-right:0}#edd-edit-order-form .column .description{padding-right:10px}#edd-edit-order-form .column,.edd-edit-purchase-element ul li{display:inline-block;line-height:1.4;position:relative;margin:0;vertical-align:middle}.edd-edit-purchase-element .row{padding:12px}.edd-edit-purchase-element .row:not(:last-child){border-bottom:1px solid #eee}.edd-edit-purchase-element .row:nth-child(odd):not(.header){background-color:#f9f9f9}.edd-edit-purchase-element .row.header{padding:6px 12px;font-weight:600;vertical-align:top}.edd-edit-purchase-element ul{font-size:0}.edd-edit-purchase-element ul li{font-size:13px}#edd-order-data .data span{color:#666;font-weight:600}.edd-edit-purchase-element .inside{padding:12px}.edd-edit-purchase-element .edd-purchased-download-title{font-size:14px;font-weight:500}.edd-edit-purchase-element .edd-purchased-download-actions{color:#777;line-height:1.4}.edd-edit-purchase-element .edd-purchased-download-actions .edd-purchased-download-actions-label{font-weight:500}.edd-edit-purchase-element .edd-purchased-download-actions a{color:#777;font-size:12px}.edd-edit-purchase-element .edd-purchased-download-actions a:hover{color:#444}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download{color:#a00}.edd-edit-purchase-element .edd-purchased-download-actions .edd-order-remove-download:hover{color:red}#edd-order-recalc-total{float:right}.edd_repeatable_upload_wrapper .pricing select,.edd_repeatable_product_wrapper .edd-select,#edd_products .edd-select{min-width:100%;max-width:200px}.edd_repeatable_product_wrapper td{overflow:visible}.edd-payment-details-label-mobile{display:none}@media screen and ( max-width: 1284px ){.edd-edit-purchase-element ul li.download{padding-bottom:15px;width:100%}.edd-edit-purchase-element .edd-purchased-download-title{font-size:16px}.edd-edit-purchase-element ul li.item_price{width:22%}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax{width:25%}.edd-edit-purchase-element ul li.price{width:20%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:10px}.edd-purchased-files-header,.edd-add-download-to-purchase-header{display:none}.edd-payment-details-label-mobile{display:block;font-weight:500;padding-bottom:6px}}@media screen and ( max-width: 1024px ){.edd-edit-purchase-element ul li.item_price.item_quantity{width:40%}.edd-edit-purchase-element ul li.price{width:24%}.edd-edit-purchase-element .edd-purchased-download-actions{padding-top:15px}.edd-edit-purchase-element .edd-purchased-download-actions,.edd-edit-purchase-element .edd-purchased-download-actions a{font-size:14px}}@media screen and ( max-width: 782px ){#edd-edit-order-form .column{width:49%}.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity{padding-bottom:10px}.edd-edit-purchase-element ul li.item_price.item_quantity{width:35%}.edd-edit-purchase-element ul li.item_tax,.edd-edit-purchase-element ul li.price{width:20%;padding-bottom:10px}.edd-payment-details-label-mobile{font-size:14px;font-weight:500}.edd-price-currency,.edd-payment-details-download-amount{font-size:16px}.order-data-column input[type="email"]{padding:6px 10px}}@media screen and ( max-width: 600px ){.edd-edit-purchase-element ul li.item_price,.edd-edit-purchase-element ul li.item_price.item_quantity,.edd-edit-purchase-element ul li.item_tax{width:100%;padding-bottom:20px}.edd-edit-purchase-element ul li.price,.edd-edit-purchase-element .edd-add-download-to-purchase ul li.item_tax{width:100%;padding-bottom:0}.edd-edit-purchase-element .edd-add-download-to-purchase-actions{padding-top:15px}#edd-edit-order-form .column{width:100%}}#edd_product_stats .label{display:inline-block}#edd_product_stats hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}#edd_product_stats .product-sales-stats:before,#edd_product_stats .product-earnings-stats:before{color:#82878c;font:normal 20px/1 dashicons;display:inline-block;padding:0 2px 0 0;position:relative;top:0;left:-1px;speak:none;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#edd_product_stats .product-sales-stats:before{content:'\f174'}#edd_product_stats .product-earnings-stats:before{content:'\f239'}.edd_dashboard_widget table thead td{border-bottom:1px solid #ececec;color:#777}.edd_dashboard_widget .table_left{float:left;width:45%}.edd_dashboard_widget .table_right{float:right;width:45%}.edd_dashboard_widget .inside{font-size:12px}.edd_dashboard_widget td{padding:3px 0}.edd_dashboard_widget .b,.edd_dashboard_widget .t{line-height:1.5;vertical-align:middle}.edd_dashboard_widget .b{font-size:14px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;padding-right:6px;width:auto}.edd_dashboard_widget .t{font-size:12px;padding-right:12px;color:#777;width:100%}.edd_dashboard_widget .label_heading{border-top:1px solid #ececec;color:#8f8f8f;font-family:Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;display:block;padding-top:10px;margin:0 0 8px 12px}.edd_dashboard_widget .edd_dashboard_widget_subheading{border-top:1px solid #ececec;color:#8f8f8f;font-size:14px;padding-top:10px;margin:1em 0 0}.edd_dashboard_widget .edd_dashboard_widget_subheading + .table{margin:8px 0 0}.edd_dashboard_widget .edd_price_label{background:#00769c;border-radius:3px;color:#fff;font-size:10px;padding:2px 4px;margin-right:2px}.edd_dashboard_widget table{width:100%;margin-left:0;margin-bottom:1em}td.edd_order_label{width:80%}td.edd_order_price{text-align:right}@media handheld,only screen and (max-width: 1000px){.edd_dashboard_widget .edd-recent-email{display:none}}#edd-dashboard-widgets-wrap .postbox h3{cursor:default}#edd-graphs-date-options,#edd-date-range-options{float:left}#edd-date-range-options span{float:left;line-height:24px;height:24px;margin-right:6px}.edd-import-export-form{position:relative}.edd-import-export-form .edd-progress{background:#ddd;position:absolute;bottom:15px;width:95%;height:15px}.edd-import-export-form .edd-progress div{background:#ccc;height:100%;width:0}.edd-import-export-form .notice-wrap{background-color:#f4f4f4;border-style:solid;border-width:1px 0;border-color:#eae9e9;padding:12px 12px 4px;overflow:auto;margin:20px -12px -23px}.edd-import-export-form .notice-wrap .spinner{margin:4px 10px 8px;float:right}.admin-color-fresh .edd-import-export-form .edd-progress div{background:#0073aa}.admin-color-light .edd-import-export-form .edd-progress div{background:#888}.admin-color-blue .edd-import-export-form .edd-progress div{background:#096484}.admin-color-coffee .edd-import-export-form .edd-progress div{background:#c7a589}.admin-color-ectoplasm .edd-import-export-form .edd-progress div{background:#a3b745}.admin-color-midnight .edd-import-export-form .edd-progress div{background:#e14d43}.admin-color-sunrise .edd-import-export-form .edd-progress div{background:#dd823b}#edd-graphs-filter label{vertical-align:inherit}#edd-graphs-filter .graph-option-section{float:left;line-height:2.5em;padding-right:5px}.edd-mix-totals{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,0.04);padding:10px}.edd-mix-chart{display:inline-block;width:49%;vertical-align:top}.edd-graph-notes{color:#9c9c9c}.edd-graph-notes span{display:block}.edd-pie-graph .legend{display:none}.edd-pie-legend{overflow:auto;margin-top:10px}.edd-legend-item-wrapper{color:#333;display:inline-block;font-size:8pt;padding:2px 5px 0;width:48%;height:20px}.edd-legend-color{border:1px solid #cfcfcf;display:inline-block;margin-right:5px;width:20px;height:15px}.edd-pie-legend-item{display:inline-block;vertical-align:top;width:80%}#edd_tax_rates{margin:1em 0 0}#edd_tax_rates .edd_tax_country *,#edd_tax_rates .edd_tax_state *{max-width:100%}#edd_tax_rates .edd_tax_country,#edd_tax_rates .edd_tax_state{width:180px}#edd_tax_rates .edd_tax_rate{width:80px}#edd_tax_rates th{padding:15px 10px}.wrap-licenses .form-table,.wrap-licenses thead,.wrap-licenses tbody,.wrap-licenses tfoot,.wrap-licenses tr,.wrap-licenses td,.wrap-licenses th,.wrap-licenses caption{display:block}.wrap-licenses .form-table tr{float:left;margin:0 15px 15px 0;background:#fff;border:1px solid #ccc;width:30.5%;max-width:350px;padding:14px;min-height:220px;position:relative;box-sizing:border-box}.wrap-licenses .form-table th{background:#f9f9f9;padding:14px;border-bottom:1px solid #ccc;margin:-14px -14px 20px;width:100%}.wrap-licenses .form-table td{padding:0}.wrap-licenses td input.regular-text{margin:0 0 8px;width:100%}.wrap-licenses .edd-license-data[class*="edd-license-"]{position:absolute;background:#fafafa;padding:14px;border-top:1px solid #eee;margin:20px -14px -14px;min-height:67px;width:100%;bottom:14px;box-sizing:border-box}.wrap-licenses .edd-license-data[class*="edd-license-"] a{color:#444}.wrap-licenses .edd-license-data[class*="edd-license-"] a:hover{text-decoration:none}.wrap-licenses .edd-license-data.license-expires-soon-notice{background-color:#00a0d2;color:#fff;border-color:#00a0d2}.wrap-licenses .edd-license-data.edd-license-expired{background-color:#e24e4e;color:#fff;border-color:#e24e4e}.wrap-licenses .edd-license-data.edd-license-error,.wrap-licenses .edd-license-data.edd-license-missing,.wrap-licenses .edd-license-data.edd-license-invalid,.wrap-licenses .edd-license-data.edd-license-site_inactive,.wrap-licenses .edd-license-data.edd-license-item_name_mismatch{background-color:#ffebcd;border-color:#ffebcd}.wrap-licenses .edd-license-data p{font-size:13px;margin-top:0}.wrap-licenses .edd-license-data.license-expires-soon-notice a,.wrap-licenses .edd-license-data.edd-license-expired a{color:#fff}.wrap-licenses .edd-license-data.license-expires-soon-notice a:hover,.wrap-licenses .edd-license-data.edd-license-expired a:hover{text-decoration:none}.wrap-licenses p.submit{clear:both}.post-type-download .fixed .column-name{width:27%}.post-type-download .fixed .column-description{width:30%}.post-type-download .fixed .column-slug{width:23%}.post-type-download .fixed .column-posts{text-align:left;width:17%}#system-info-textarea{background:none;font-family:Menlo,Monaco,monospace;display:block;overflow:auto;white-space:pre;width:800px;height:400px}#TB_window #edd-add-download:hover,#TB_window #edd-add-download:active,#TB_window #edd-add-download:focus{color:#fff}.edd-graph .y1Axis{color:#edc240!important}.edd-graph .y2Axis{color:#afd8f8!important}.download_page_edd-tools .apikeys .column-user{width:192px}.edd-select-chosen{width:300px}.chosen-container-multi .chosen-choices{background-image:none;border-color:#dfdfdf;-webkit-border-radius:3px;border-radius:3px}.chosen-container-multi .chosen-choices input{border-color:#dfdfdf;height:27px!important;margin:2px}.chosen-container .chosen-drop{border-color:#aaa;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,0.1);box-shadow:1px 1px 2px rgba(0,0,0,0.1)}.chosen-container .search-field{float:none!important}.chosen-container .search-field input{width:90%!important}.chosen-container-active .chosen-choices{border-color:#aaa;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,0.1);box-shadow:1px 1px 2px rgba(0,0,0,0.1)}.download_page_edd-tools .tablenav .actions{overflow:visible}.edd_user_search_wrap{position:relative;overflow:visible}.edd_user_search_results{position:absolute;left:0;top:27px}.edd_user_search_results a.edd-ajax-user-cancel{position:absolute;right:6px;top:2px}.edd_user_search_results ul{background:#f0f0f0;border:1px solid #dfdfdf;overflow-y:scroll;padding:10px 10px 4px;margin:0;max-height:200px;width:300px}.wp-list-table .type-download .row-actions{color:#999}@media screen and ( max-width: 1100px ){.edd-mix-chart{display:block;width:100%}.wrap-licenses .form-table tr{width:46%;max-width:none;min-height:230px}}@media screen and ( max-width: 782px ){.post-type-download .nav-tab-wrapper a{font-size:70%;padding:2px 4px}.download_page_edd-tools .apikeys .column-user{width:80px}.license-lifetime-notice,.license-expiration-date-notice,.license-null{padding-left:0}[class^="license-"] input[type="text"]{margin-bottom:3px}}@media screen and ( max-width: 600px ){.wrap-licenses .form-table tr{width:100%;min-height:230px}}#edd-item-wrapper{background:#f5f5f5;border:1px solid #e5e5e5;webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);max-width:830px}#edd-item-wrapper:after{content:"";display:block;clear:both;visibility:hidden;font-size:0;height:0}#edd-item-tab-wrapper{float:left;width:18%;z-index:1}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{display:block;background-color:#eaeaea;color:#444;font-size:12px;border-bottom:1px solid #e5e5e5;margin-bottom:0;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word}#edd-item-tab-wrapper-list li a{display:block;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list li.active{display:block;background-color:#fff;padding:8px 10px 8px 6px}#edd-item-tab-wrapper-list .inactive a,#edd-item-tab-wrapper-list .inactive a:visited{background-color:#f5f5f5;color:#444;text-decoration:none}#edd-item-tab-wrapper-list .inactive a:hover{background-color:#fff}#edd-item-tab-wrapper-list .dashicons{color:#444;font-size:16px;min-width:24px;height:auto}#edd-item-card-wrapper .left{float:left}#edd-item-card-wrapper .right{float:right}#edd-item-card-wrapper input{font-weight:400}#edd-item-card-wrapper{background-color:#fff;border:1px solid #e5e5e5;display:inline-block;margin-left:-1px;min-height:200px;width:700px;z-index:2}.edd-item-has-tabs #edd-item-card-wrapper{border-width:0 0 0 1px;width:82%}#edd-item-card-wrapper .customer-section{border-bottom:1px solid #eee;margin-bottom:10px;overflow:auto}#edd-item-card-wrapper .customer-section table{margin-bottom:20px}#edd-item-card-wrapper > div{padding:0 20px}#edd-item-card-wrapper > div:first-child{padding-top:20px}#edd-item-card-wrapper > div:last-child{border:none;padding-bottom:20px}#edd-item-card-wrapper .avatar-wrap{padding-right:10px;text-align:center}#edd-item-card-wrapper .customer-id{font-size:24px;font-weight:600}#edd-item-card-wrapper .customer-main-wrapper input{width:200px}#edd-item-card-wrapper .customer-address-wrapper{margin-right:25px;max-width:33%;width:202px}#edd-item-card-wrapper .customer-address-wrapper select{width:200px}#edd-item-card-wrapper .customer-info{margin-top:5px;margin-bottom:10px;min-height:185px}#edd-item-card-wrapper .info-wrapper{min-height:125px;overflow:visible}#edd-item-card-wrapper a.delete{color:red;margin-right:5px;text-decoration:none}.customer-info .customer-name{font-size:24px;font-weight:600}.customer-edit-link a,.disconnect-user a{font-size:12px;font-weight:400;text-decoration:none}#customer-edit-actions{line-height:28px;margin-bottom:20px;text-align:center}#customer-edit-actions .button-secondary{margin-right:10px}#edd-item-card-wrapper .row-title{width:30%}#edd-item-card-wrapper .info-item{display:block;line-height:16px;padding-bottom:5px}#edd-item-card-wrapper .edit-item{display:none}#edd-item-card-wrapper .edd_user_search_results{left:1px;top:16px}#edd-item-card-wrapper .edd_user_search_results ul{width:200px}#edd-item-stats-wrapper{margin:0 auto;min-height:30px;text-align:center}#edd-item-stats-wrapper li{font-size:14px;float:left;line-height:22px;width:50%}#edd-item-stats-wrapper a{text-decoration:none}#edd-item-stats-wrapper .dashicons{color:#888}#edd-item-tables-wrapper table{text-align:center;width:100%}#edd-item-tables-wrapper th{text-align:center}#edd-item-tables-wrapper .downloads tr > th:first-child,#edd-item-tables-wrapper .downloads tr > td:first-child,#edd-item-tables-wrapper .emails tr > th:first-child,#edd-item-tables-wrapper .emails tr > td:first-child{text-align:left}#edd-item-tables-wrapper .downloads tr > td:only-child{text-align:center}#edd-item-tables-wrapper .emails .add-customer-email-row td{background-color:#f9f9f9;border-top:1px solid #e5e5e5}#edd-item-tables-wrapper .emails .primary-email-icon{font-size:13px;vertical-align:middle;line-height:1.5em}#edd-item-tables-wrapper .emails input{vertical-align:middle;margin:6px 0}#edd-item-tables-wrapper .emails .spinner{float:none}#edd-item-notes-wrapper{min-height:50px}.edd-item-notes-header span,.edd-item-notes-header img{font-weight:600;line-height:30px;vertical-align:middle}.customer-note-input{margin-bottom:5px;width:100%}#edd-customer-notes div:nth-of-type(even){background-color:#fcfcfc}.customer-note-wrapper{border-bottom:1px solid #f9f9f9;min-height:38px;padding:7px 0 7px 7px}.customer-note-wrapper span{display:block}.note-content-wrap{padding-top:7px}.delete-customer{text-align:center}#edd-item-card-wrapper .notice-wrap{padding-left:20px;padding-right:20px;margin-left:-20px;margin-right:-20px}@media screen and ( max-width: 810px ) and ( min-width: 656px ){.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper .widefat td,.widefat th{padding:4px 6px;max-width:100px!important;display:table-cell}}@media screen and ( max-width: 781px ){#edd-item-tab-wrapper,#edd-item-card-wrapper{margin:0;width:100%}#edd-item-tab-wrapper-list{background:#fff;margin:0}#edd-item-tab-wrapper-list li{float:left;display:inline;font-size:14px;box-sizing:border-box;border-width:0 1px 1px 0;border-style:solid;border-color:#e5e5e5;width:33.33333%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 0 1px}#edd-item-tab-wrapper-list .dashicons{font-size:18px}.edd-item-has-tabs #edd-item-card-wrapper{border-top:1px solid #e5e5e5;border-left:0;margin-top:-1px;width:100%}}@media screen and ( max-width: 656px ){#edd-item-card-wrapper .customer-info{min-height:220px}.edd-item-info.customer-info{position:relative}#edd-item-card-wrapper .customer-address-wrapper{float:none;position:absolute;top:84px;left:110px;max-width:200px}#edd-item-card-wrapper .customer-main-wrapper{float:none;position:absolute;left:110px}.customer-info .customer-name{font-size:16px}#edd-item-card-wrapper #edd-item-stats-wrapper{padding-left:0;padding-right:0}#edd-item-card-wrapper .customer-section{margin-bottom:0}#edd-item-card-wrapper .widefat td,.widefat th{padding:4px 6px;max-width:100px!important;display:table-cell;overflow:hidden}#edd-item-card-wrapper .customer-id{font-size:16px}}@media screen and ( max-width: 480px ){#edd-item-tab-wrapper-list li{width:50%}#edd-item-tab-wrapper-list li:nth-child(3n+3){border-width:0 1px 1px 0}#edd-item-tab-wrapper-list li:nth-child(even){border-width:0 0 1px}}.recount-stats-controls form{display:inline}.edd-recount-stats-descriptions span{display:none;line-height:24px}
assets/js/admin-backwards-compatibility.js DELETED
@@ -1,73 +0,0 @@
1
- /**
2
- * Developer Notice: The contents of this JavaScript file are not to be relied on in any future versions of EDD
3
- * These exist as a backwards compatibility measure for https://github.com/easydigitaldownloads/easy-digital-downloads/issues/2704
4
- */
5
- jQuery(document).ready(function ($) {
6
-
7
- // Adjust location of setting labels for settings in the new containers created below (back compat)
8
- $( document.body ).find( '.edd-custom-price-option-sections .edd-legacy-setting-label' ).each(function() {
9
- $(this).prependTo($(this).nextAll('span:not(:has(>.edd-legacy-setting-label))').first());
10
- });
11
-
12
- // Build HTML containers for existing price option settings (back compat)
13
- $( document.body ).find( '.edd-custom-price-option-sections' ).each(function() {
14
- $(this).find('[class*="purchase_limit"]').wrapAll( '<div class="edd-purchase-limit-price-option-settings-legacy edd-custom-price-option-section"></div>' );
15
- $(this).find('[class*="shipping"]').wrapAll( '<div class="edd-simple-shipping-price-option-settings-legacy edd-custom-price-option-section" style="display: none;"></div>' );
16
- $(this).find('[class*="sl-"]').wrapAll( '<div class="edd-sl-price-option-settings-legacy edd-custom-price-option-section"></div>' );
17
- $(this).find('[class*="edd-recurring-"]').wrapAll( '<div class="edd-recurring-price-option-settings-legacy edd-custom-price-option-section"></div>' );
18
- });
19
-
20
- // only display Simple Shipping/Software Licensing sections if enabled (back compat)
21
- $( document.body ).find( '#edd_enable_shipping', '#edd_license_enabled' ).each(function() {
22
- var variable_pricing = $('#edd_variable_pricing').is( ':checked' );
23
- var ss_checked = $( '#edd_enable_shipping' ).is( ':checked' );
24
- var ss_section = $( '.edd-simple-shipping-price-option-settings-legacy' );
25
- var sl_checked = $( '#edd_license_enabled' ).is( ':checked' );
26
- var sl_section = $( '.edd-sl-price-option-settings-legacy' );
27
- if ( variable_pricing ) {
28
- if ( ss_checked ) {
29
- ss_section.show();
30
- } else {
31
- ss_section.hide();
32
- }
33
- if ( sl_checked ) {
34
- sl_section.show();
35
- } else {
36
- sl_section.hide();
37
- }
38
- }
39
- });
40
- $( '#edd_enable_shipping' ).on( 'change', function() {
41
- var enabled = $(this).is( ':checked' );
42
- var section = $( '.edd-simple-shipping-price-option-settings-legacy' );
43
- if ( enabled ) {
44
- section.show();
45
- } else {
46
- section.hide();
47
- }
48
- });
49
- $( '#edd_license_enabled' ).on( 'change', function() {
50
- var enabled = $(this).is( ':checked' );
51
- var section = $( '.edd-sl-price-option-settings-legacy' );
52
- if ( enabled ) {
53
- section.show();
54
- } else {
55
- section.hide();
56
- }
57
- });
58
-
59
- // Create section titles for newly created HTML containers (back compat)
60
- $( document.body ).find( '.edd-purchase-limit-price-option-settings-legacy' ).each(function() {
61
- $(this).prepend( '<span class="edd-custom-price-option-section-title">' + edd_backcompat_vars.purchase_limit_settings + '</span>' );
62
- });
63
- $( document.body ).find( '.edd-simple-shipping-price-option-settings-legacy' ).each(function() {
64
- $(this).prepend( '<span class="edd-custom-price-option-section-title">' + edd_backcompat_vars.simple_shipping_settings + '</span>' );
65
- });
66
- $( document.body ).find( '.edd-sl-price-option-settings-legacy' ).each(function() {
67
- $(this).prepend( '<span class="edd-custom-price-option-section-title">' + edd_backcompat_vars.software_licensing_settings + '</span>' );
68
- });
69
- $( document.body ).find( '.edd-recurring-price-option-settings-legacy' ).each(function() {
70
- $(this).prepend( '<span class="edd-custom-price-option-section-title">' + edd_backcompat_vars.recurring_payments_settings + '</span>' );
71
- });
72
-
73
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin-backwards-compatibility.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(document).ready(function(e){e(document.body).find(".edd-custom-price-option-sections .edd-legacy-setting-label").each(function(){e(this).prependTo(e(this).nextAll("span:not(:has(>.edd-legacy-setting-label))").first())}),e(document.body).find(".edd-custom-price-option-sections").each(function(){e(this).find('[class*="purchase_limit"]').wrapAll('<div class="edd-purchase-limit-price-option-settings-legacy edd-custom-price-option-section"></div>'),e(this).find('[class*="shipping"]').wrapAll('<div class="edd-simple-shipping-price-option-settings-legacy edd-custom-price-option-section" style="display: none;"></div>'),e(this).find('[class*="sl-"]').wrapAll('<div class="edd-sl-price-option-settings-legacy edd-custom-price-option-section"></div>'),e(this).find('[class*="edd-recurring-"]').wrapAll('<div class="edd-recurring-price-option-settings-legacy edd-custom-price-option-section"></div>')}),e(document.body).find("#edd_enable_shipping","#edd_license_enabled").each(function(){var i=e("#edd_variable_pricing").is(":checked"),s=e("#edd_enable_shipping").is(":checked"),n=e(".edd-simple-shipping-price-option-settings-legacy"),t=e("#edd_license_enabled").is(":checked"),c=e(".edd-sl-price-option-settings-legacy");i&&(s?n.show():n.hide(),t?c.show():c.hide())}),e("#edd_enable_shipping").on("change",function(){var i=e(this).is(":checked"),s=e(".edd-simple-shipping-price-option-settings-legacy");i?s.show():s.hide()}),e("#edd_license_enabled").on("change",function(){var i=e(this).is(":checked"),s=e(".edd-sl-price-option-settings-legacy");i?s.show():s.hide()}),e(document.body).find(".edd-purchase-limit-price-option-settings-legacy").each(function(){e(this).prepend('<span class="edd-custom-price-option-section-title">'+edd_backcompat_vars.purchase_limit_settings+"</span>")}),e(document.body).find(".edd-simple-shipping-price-option-settings-legacy").each(function(){e(this).prepend('<span class="edd-custom-price-option-section-title">'+edd_backcompat_vars.simple_shipping_settings+"</span>")}),e(document.body).find(".edd-sl-price-option-settings-legacy").each(function(){e(this).prepend('<span class="edd-custom-price-option-section-title">'+edd_backcompat_vars.software_licensing_settings+"</span>")}),e(document.body).find(".edd-recurring-price-option-settings-legacy").each(function(){e(this).prepend('<span class="edd-custom-price-option-section-title">'+edd_backcompat_vars.recurring_payments_settings+"</span>")})});
 
assets/js/admin-scripts.js CHANGED
@@ -1,8 +1,23 @@
1
  jQuery(document).ready(function ($) {
2
 
3
  // Tooltips
4
- var tooltips = $('.edd-help-tip');
5
- edd_attach_tooltips( tooltips );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  /**
8
  * Download Configuration Metabox
@@ -21,7 +36,7 @@ jQuery(document).ready(function ($) {
21
 
22
  // Retrieve the highest current key
23
  var key = highest = 1;
24
- row.parent().find( '.edd_repeatable_row' ).each(function() {
25
  var current = $(this).data( 'key' );
26
  if( parseInt( current ) > highest ) {
27
  highest = current;
@@ -39,7 +54,8 @@ jQuery(document).ready(function ($) {
39
  clone.removeClass( 'edd_add_blank' );
40
 
41
  clone.attr( 'data-key', key );
42
- clone.find( 'input, select, textarea' ).val( '' ).each(function() {
 
43
  var name = $( this ).attr( 'name' );
44
  var id = $( this ).attr( 'id' );
45
 
@@ -75,12 +91,11 @@ jQuery(document).ready(function ($) {
75
 
76
  clone.find( '.edd_repeatable_condition_field' ).each ( function() {
77
  $( this ).find( 'option:eq(0)' ).prop( 'selected', 'selected' );
78
- });
79
 
80
  // Remove Chosen elements
81
  clone.find( '.search-choice' ).remove();
82
  clone.find( '.chosen-container' ).remove();
83
- edd_attach_tooltips(clone.find('.edd-help-tip'));
84
 
85
  return clone;
86
  },
@@ -89,7 +104,7 @@ jQuery(document).ready(function ($) {
89
  $( document.body ).on( 'click', '.submit .edd_add_repeatable', function(e) {
90
  e.preventDefault();
91
  var button = $( this ),
92
- row = button.parent().parent().prev( '.edd_repeatable_row' ),
93
  clone = EDD_Download_Configuration.clone_repeatable(row);
94
 
95
  clone.insertAfter( row ).find('input, textarea, select').filter(':visible').eq(0).focus();
@@ -107,10 +122,10 @@ jQuery(document).ready(function ($) {
107
 
108
  move : function() {
109
 
110
- $(".edd_repeatable_table .edd-repeatables-wrap").sortable({
111
- handle: '.edd-draghandle-anchor', items: '.edd_repeatable_row', opacity: 0.6, cursor: 'move', axis: 'y', update: function() {
112
  var count = 0;
113
- $(this).find( '.edd_repeatable_row' ).each(function() {
114
  $(this).find( 'input.edd_repeatable_index' ).each(function() {
115
  $( this ).val( count );
116
  });
@@ -122,22 +137,22 @@ jQuery(document).ready(function ($) {
122
  },
123
 
124
  remove : function() {
125
- $( document.body ).on( 'click', '.edd-remove-row, .edd_remove_repeatable', function(e) {
126
  e.preventDefault();
127
 
128
- var row = $(this).parents( '.edd_repeatable_row' ),
129
- count = row.parent().find( '.edd_repeatable_row' ).length,
130
  type = $(this).data('type'),
131
- repeatable = 'div.edd_repeatable_' + type + 's',
132
  focusElement,
133
  focusable,
134
  firstFocusable;
135
 
136
  // Set focus on next element if removing the first row. Otherwise set focus on previous element.
137
- if ( $(this).is( '.ui-sortable .edd_repeatable_row:first-child .edd-remove-row, .ui-sortable .edd_repeatable_row:first-child .edd_remove_repeatable' ) ) {
138
- focusElement = row.next( '.edd_repeatable_row' );
139
  } else {
140
- focusElement = row.prev( '.edd_repeatable_row' );
141
  }
142
 
143
  focusable = focusElement.find( 'select, input, textarea, button' ).filter( ':visible' );
@@ -149,7 +164,7 @@ jQuery(document).ready(function ($) {
149
  $( '.edd_repeatable_condition_field option[value="' + price_row_id + '"]' ).remove();
150
  }
151
 
152
- if ( count > 1 ) {
153
  $( 'input, select', row ).val( '' );
154
  row.fadeOut( 'fast' ).remove();
155
  firstFocusable.focus();
@@ -204,16 +219,13 @@ jQuery(document).ready(function ($) {
204
  $( document.body ).on( 'change', '#edd_variable_pricing', function(e) {
205
  var checked = $(this).is(':checked');
206
  var single = $( '#edd_regular_price_field' );
207
- var variable = $( '#edd_variable_price_fields, .edd_repeatable_table .pricing' );
208
- var bundleRow = $( '.edd-bundled-product-row, .edd-repeatable-row-standard-fields' );
209
  if ( checked ) {
210
  single.hide();
211
  variable.show();
212
- bundleRow.addClass( 'has-variable-pricing' );
213
  } else {
214
  single.show();
215
  variable.hide();
216
- bundleRow.removeClass( 'has-variable-pricing' );
217
  }
218
  });
219
  },
@@ -297,7 +309,7 @@ jQuery(document).ready(function ($) {
297
  clone = EDD_Download_Configuration.clone_repeatable( row );
298
 
299
  clone.find( '.edd_repeatable_attachment_id_field' ).val( attachment.id );
300
- clone.find( '.edd_repeatable_thumbnail_size_field' ).val( selectedSize );
301
  clone.find( '.edd_repeatable_upload_field' ).val( selectedURL );
302
  clone.find( '.edd_repeatable_name_field' ).val( selectedName );
303
  clone.insertAfter( row );
@@ -318,7 +330,7 @@ jQuery(document).ready(function ($) {
318
  updatePrices: function() {
319
  $( '#edd_price_fields' ).on( 'keyup', '.edd_variable_prices_name', function() {
320
 
321
- var key = $( this ).parents( '.edd_repeatable_row' ).data( 'key' ),
322
  name = $( this ).val(),
323
  field_option = $( '.edd_repeatable_condition_field option[value=' + key + ']' );
324
 
@@ -336,29 +348,6 @@ jQuery(document).ready(function ($) {
336
 
337
  };
338
 
339
- // Toggle display of entire custom settings section for a price option
340
- $( document.body ).on( 'click', '.toggle-custom-price-option-section', function(e) {
341
- e.preventDefault();
342
- var show = $(this).html() == edd_vars.show_advanced_settings ? true : false;
343
-
344
- if ( show ) {
345
- $(this).html( edd_vars.hide_advanced_settings );
346
- } else {
347
- $(this).html( edd_vars.show_advanced_settings );
348
- }
349
-
350
- var header = $(this).parents('.edd-repeatable-row-header');
351
- header.siblings('.edd-custom-price-option-sections-wrap').slideToggle();
352
-
353
- var first_input;
354
- if ( show ) {
355
- first_input = $(":input:not(input[type=button],input[type=submit],button):visible:first", header.siblings('.edd-custom-price-option-sections-wrap'));
356
- } else {
357
- first_input = $(":input:not(input[type=button],input[type=submit],button):visible:first", header.siblings('.edd-repeatable-row-standard-fields'));
358
- }
359
- first_input.focus();
360
- });
361
-
362
  EDD_Download_Configuration.init();
363
 
364
  //$('#edit-slug-box').remove();
@@ -424,7 +413,7 @@ jQuery(document).ready(function ($) {
424
  // Remove a download from a purchase
425
  $('#edd-purchased-files').on('click', '.edd-order-remove-download', function() {
426
 
427
- var count = $( document.body ).find( '#edd-purchased-files > .row:not(.header)' ).length;
428
 
429
  if ( count === 1 ) {
430
  alert( edd_vars.one_download_min );
@@ -618,9 +607,9 @@ jQuery(document).ready(function ($) {
618
  var row = $(this).parents('ul.edd-purchased-files-list-wrapper');
619
  $( '.edd-order-payment-recalc-totals' ).show();
620
 
621
- var quantity = row.find('input.edd-payment-details-download-quantity').val().replace(edd_vars.thousands_separator,'');
622
- var item_price = row.find('input.edd-payment-details-download-item-price').val().replace(edd_vars.thousands_separator,'');
623
- var item_tax = row.find('input.edd-payment-details-download-item-tax').val().replace(edd_vars.thousands_separator,'');
624
 
625
  item_price = parseFloat( item_price );
626
  if ( isNaN( item_price ) ) {
@@ -1080,7 +1069,7 @@ jQuery(document).ready(function ($) {
1080
  taxes : function() {
1081
  var no_states = $('select.edd-no-states');
1082
  if( no_states.length ) {
1083
- no_states.closest('tr').addClass('hidden');
1084
  }
1085
 
1086
  // Update base state field based on selected base country
@@ -1093,9 +1082,9 @@ jQuery(document).ready(function ($) {
1093
  };
1094
  $.post(ajaxurl, data, function (response) {
1095
  if( 'nostates' == response ) {
1096
- $tr.next().addClass('hidden');
1097
  } else {
1098
- $tr.next().removeClass('hidden');
1099
  $tr.next().find('select').replaceWith( response );
1100
  }
1101
  });
@@ -1277,19 +1266,24 @@ jQuery(document).ready(function ($) {
1277
  });
1278
 
1279
  $('.edd-select-chosen .chosen-search input').each( function() {
1280
- var selectElem = $(this).parent().parent().parent().prev('select.edd-select-chosen'),
1281
- type = selectElem.data('search-type'),
1282
- placeholder = selectElem.data('search-placeholder');
 
 
 
 
 
 
 
 
 
1283
  $(this).attr( 'placeholder', placeholder );
1284
  });
1285
 
1286
  // Add placeholders for Chosen input fields
1287
  $( '.chosen-choices' ).on( 'click', function () {
1288
- var placeholder = $(this).parent().prev().data('search-placeholder');
1289
- if ( typeof placeholder === "undefined" ) {
1290
- placeholder = edd_vars.type_to_search;
1291
- }
1292
- $(this).children('li').children('input').attr( 'placeholder', placeholder );
1293
  });
1294
 
1295
  // Variables for setting up the typing timer
@@ -1417,7 +1411,7 @@ jQuery(document).ready(function ($) {
1417
  } );
1418
  },
1419
  recount_stats : function() {
1420
- $( document.body).on( 'change', '#recount-stats-type', function() {
1421
 
1422
  var export_form = $('#edd-tools-recount-form');
1423
  var selected_type = $('option:selected', this).data('type');
@@ -1453,7 +1447,7 @@ jQuery(document).ready(function ($) {
1453
  $('#' + selected_type ).show();
1454
  } );
1455
 
1456
- $(document.body).on('change', '#confirm-reset', function() {
1457
  var checked = $(this).is(':checked');
1458
  if ( checked ) {
1459
  $('#recount-stats-submit').removeClass('button-disabled').removeAttr('disabled');
@@ -1600,7 +1594,7 @@ jQuery(document).ready(function ($) {
1600
  },
1601
 
1602
  dismiss_message : function() {
1603
- $(document.body).on( 'click', '#edd-batch-success .notice-dismiss', function() {
1604
  $('#edd-batch-success').parent().slideUp('fast');
1605
  });
1606
  }
@@ -1706,7 +1700,7 @@ jQuery(document).ready(function ($) {
1706
 
1707
  });
1708
 
1709
- $(document.body).on('click', '.edd-import-proceed', function(e) {
1710
 
1711
  e.preventDefault();
1712
 
@@ -2048,7 +2042,7 @@ jQuery(document).ready(function ($) {
2048
  });
2049
  }
2050
 
2051
- $(document.body).on('keydown', '.customer-note-input', function(e) {
2052
  if(e.keyCode == 13 && (e.metaKey || e.ctrlKey)) {
2053
  $('#add-customer-note').click();
2054
  }
@@ -2099,24 +2093,3 @@ var eddLegendFormatterEarnings = function (label, series) {
2099
  jQuery('#edd-pie-legend-' + series.edd_vars.id).append( item );
2100
  return item;
2101
  }
2102
-
2103
- function edd_attach_tooltips( selector ) {
2104
- // Tooltips
2105
- selector.tooltip({
2106
- content: function() {
2107
- return jQuery(this).prop('title');
2108
- },
2109
- tooltipClass: 'edd-ui-tooltip',
2110
- position: {
2111
- my: 'center top',
2112
- at: 'center bottom+10',
2113
- collision: 'flipfit'
2114
- },
2115
- hide: {
2116
- duration: 200
2117
- },
2118
- show: {
2119
- duration: 200
2120
- }
2121
- });
2122
- }
1
  jQuery(document).ready(function ($) {
2
 
3
  // Tooltips
4
+ $('.edd-help-tip').tooltip({
5
+ content: function() {
6
+ return $(this).prop('title');
7
+ },
8
+ tooltipClass: 'edd-ui-tooltip',
9
+ position: {
10
+ my: 'center top',
11
+ at: 'center bottom+10',
12
+ collision: 'flipfit',
13
+ },
14
+ hide: {
15
+ duration: 200,
16
+ },
17
+ show: {
18
+ duration: 200,
19
+ },
20
+ });
21
 
22
  /**
23
  * Download Configuration Metabox
36
 
37
  // Retrieve the highest current key
38
  var key = highest = 1;
39
+ row.parent().find( 'tr.edd_repeatable_row' ).each(function() {
40
  var current = $(this).data( 'key' );
41
  if( parseInt( current ) > highest ) {
42
  highest = current;
54
  clone.removeClass( 'edd_add_blank' );
55
 
56
  clone.attr( 'data-key', key );
57
+ clone.find( 'td input, td select, textarea' ).val( '' );
58
+ clone.find( 'input, select, textarea' ).each(function() {
59
  var name = $( this ).attr( 'name' );
60
  var id = $( this ).attr( 'id' );
61
 
91
 
92
  clone.find( '.edd_repeatable_condition_field' ).each ( function() {
93
  $( this ).find( 'option:eq(0)' ).prop( 'selected', 'selected' );
94
+ } )
95
 
96
  // Remove Chosen elements
97
  clone.find( '.search-choice' ).remove();
98
  clone.find( '.chosen-container' ).remove();
 
99
 
100
  return clone;
101
  },
104
  $( document.body ).on( 'click', '.submit .edd_add_repeatable', function(e) {
105
  e.preventDefault();
106
  var button = $( this ),
107
+ row = button.parent().parent().prev( 'tr' ),
108
  clone = EDD_Download_Configuration.clone_repeatable(row);
109
 
110
  clone.insertAfter( row ).find('input, textarea, select').filter(':visible').eq(0).focus();
122
 
123
  move : function() {
124
 
125
+ $(".edd_repeatable_table tbody").sortable({
126
+ handle: '.edd_draghandle', items: '.edd_repeatable_row', opacity: 0.6, cursor: 'move', axis: 'y', update: function() {
127
  var count = 0;
128
+ $(this).find( 'tr' ).each(function() {
129
  $(this).find( 'input.edd_repeatable_index' ).each(function() {
130
  $( this ).val( count );
131
  });
137
  },
138
 
139
  remove : function() {
140
+ $( document.body ).on( 'click', '.edd_remove_repeatable', function(e) {
141
  e.preventDefault();
142
 
143
+ var row = $(this).parent().parent( 'tr' ),
144
+ count = row.parent().find( 'tr' ).length - 1,
145
  type = $(this).data('type'),
146
+ repeatable = 'tr.edd_repeatable_' + type + 's',
147
  focusElement,
148
  focusable,
149
  firstFocusable;
150
 
151
  // Set focus on next element if removing the first row. Otherwise set focus on previous element.
152
+ if ( $(this).is( '.ui-sortable tr:first-child .edd_remove_repeatable:first-child' ) ) {
153
+ focusElement = row.next( 'tr' );
154
  } else {
155
+ focusElement = row.prev( 'tr' );
156
  }
157
 
158
  focusable = focusElement.find( 'select, input, textarea, button' ).filter( ':visible' );
164
  $( '.edd_repeatable_condition_field option[value="' + price_row_id + '"]' ).remove();
165
  }
166
 
167
+ if( count > 1 ) {
168
  $( 'input, select', row ).val( '' );
169
  row.fadeOut( 'fast' ).remove();
170
  firstFocusable.focus();
219
  $( document.body ).on( 'change', '#edd_variable_pricing', function(e) {
220
  var checked = $(this).is(':checked');
221
  var single = $( '#edd_regular_price_field' );
222
+ var variable = $( '#edd_variable_price_fields,.edd_repeatable_table .pricing' );
 
223
  if ( checked ) {
224
  single.hide();
225
  variable.show();
 
226
  } else {
227
  single.show();
228
  variable.hide();
 
229
  }
230
  });
231
  },
309
  clone = EDD_Download_Configuration.clone_repeatable( row );
310
 
311
  clone.find( '.edd_repeatable_attachment_id_field' ).val( attachment.id );
312
+ clone.find( 'edd_repeatable_thumbnail_size_field' ).val( selectedSize );
313
  clone.find( '.edd_repeatable_upload_field' ).val( selectedURL );
314
  clone.find( '.edd_repeatable_name_field' ).val( selectedName );
315
  clone.insertAfter( row );
330
  updatePrices: function() {
331
  $( '#edd_price_fields' ).on( 'keyup', '.edd_variable_prices_name', function() {
332
 
333
+ var key = $( this ).parents( 'tr' ).data( 'key' ),
334
  name = $( this ).val(),
335
  field_option = $( '.edd_repeatable_condition_field option[value=' + key + ']' );
336
 
348
 
349
  };
350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  EDD_Download_Configuration.init();
352
 
353
  //$('#edit-slug-box').remove();
413
  // Remove a download from a purchase
414
  $('#edd-purchased-files').on('click', '.edd-order-remove-download', function() {
415
 
416
+ var count = $( document.body ).find( '#edd-purchased-files > .row' ).length;
417
 
418
  if ( count === 1 ) {
419
  alert( edd_vars.one_download_min );
607
  var row = $(this).parents('ul.edd-purchased-files-list-wrapper');
608
  $( '.edd-order-payment-recalc-totals' ).show();
609
 
610
+ var quantity = row.find('input.edd-payment-details-download-quantity').val();
611
+ var item_price = row.find('input.edd-payment-details-download-item-price').val();
612
+ var item_tax = row.find('input.edd-payment-details-download-item-tax').val();
613
 
614
  item_price = parseFloat( item_price );
615
  if ( isNaN( item_price ) ) {
1069
  taxes : function() {
1070
  var no_states = $('select.edd-no-states');
1071
  if( no_states.length ) {
1072
+ no_states.closest('tr').hide();
1073
  }
1074
 
1075
  // Update base state field based on selected base country
1082
  };
1083
  $.post(ajaxurl, data, function (response) {
1084
  if( 'nostates' == response ) {
1085
+ $tr.next().hide();
1086
  } else {
1087
+ $tr.next().show();
1088
  $tr.next().find('select').replaceWith( response );
1089
  }
1090
  });
1266
  });
1267
 
1268
  $('.edd-select-chosen .chosen-search input').each( function() {
1269
+ var type = $(this).parent().parent().parent().prev('select.edd-select-chosen').data('search-type');
1270
+ var placeholder = '';
1271
+
1272
+ if ( type === 'download' ) {
1273
+ placeholder = edd_vars.search_placeholder;
1274
+ } else {
1275
+ var type = 'search_placeholder_' + type;
1276
+ if ( edd_vars[type] ) {
1277
+ placeholder = edd_vars[type];
1278
+ }
1279
+ }
1280
+
1281
  $(this).attr( 'placeholder', placeholder );
1282
  });
1283
 
1284
  // Add placeholders for Chosen input fields
1285
  $( '.chosen-choices' ).on( 'click', function () {
1286
+ $(this).children('li').children('input').attr( 'placeholder', edd_vars.type_to_search );
 
 
 
 
1287
  });
1288
 
1289
  // Variables for setting up the typing timer
1411
  } );
1412
  },
1413
  recount_stats : function() {
1414
+ $( 'body').on( 'change', '#recount-stats-type', function() {
1415
 
1416
  var export_form = $('#edd-tools-recount-form');
1417
  var selected_type = $('option:selected', this).data('type');
1447
  $('#' + selected_type ).show();
1448
  } );
1449
 
1450
+ $('body').on('change', '#confirm-reset', function() {
1451
  var checked = $(this).is(':checked');
1452
  if ( checked ) {
1453
  $('#recount-stats-submit').removeClass('button-disabled').removeAttr('disabled');
1594
  },
1595
 
1596
  dismiss_message : function() {
1597
+ $('body').on( 'click', '#edd-batch-success .notice-dismiss', function() {
1598
  $('#edd-batch-success').parent().slideUp('fast');
1599
  });
1600
  }
1700
 
1701
  });
1702
 
1703
+ $('body').on('click', '.edd-import-proceed', function(e) {
1704
 
1705
  e.preventDefault();
1706
 
2042
  });
2043
  }
2044
 
2045
+ $(document).on('keydown', '.customer-note-input', function(e) {
2046
  if(e.keyCode == 13 && (e.metaKey || e.ctrlKey)) {
2047
  $('#add-customer-note').click();
2048
  }
2093
  jQuery('#edd-pie-legend-' + series.edd_vars.id).append( item );
2094
  return item;
2095
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/admin-scripts.min.js CHANGED
@@ -1,2 +1 @@
1
- function edd_attach_tooltips(e){e.tooltip({content:function(){return jQuery(this).prop("title")},tooltipClass:"edd-ui-tooltip",position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}})}jQuery(document).ready(function(e){var t=e(".edd-help-tip");edd_attach_tooltips(t);var d={init:function(){this.add(),this.move(),this.remove(),this.type(),this.prices(),this.files(),this.updatePrices()},clone_repeatable:function(t){var d=highest=1;return t.parent().find(".edd_repeatable_row").each(function(){var t=e(this).data("key");parseInt(t)>highest&&(highest=t)}),d=highest+=1,clone=t.clone(),clone.find("select").each(function(){e(this).val(t.find('select[name="'+e(this).attr("name")+'"]').val())}),clone.removeClass("edd_add_blank"),clone.attr("data-key",d),clone.find("input, select, textarea").val("").each(function(){var t=e(this).attr("name"),a=e(this).attr("id");t&&(t=t.replace(/\[(\d+)\]/,"["+parseInt(d)+"]"),e(this).attr("name",t)),e(this).attr("data-key",d),"undefined"!=typeof a&&(a=a.replace(/(\d+)/,parseInt(d)),e(this).attr("id",a))}),clone.find("span.edd_price_id").each(function(){e(this).text(parseInt(d))}),clone.find("span.edd_file_id").each(function(){e(this).text(parseInt(d))}),clone.find(".edd_repeatable_default_input").each(function(){e(this).val(parseInt(d)).removeAttr("checked")}),clone.find(".edd_repeatable_condition_field").each(function(){e(this).find("option:eq(0)").prop("selected","selected")}),clone.find(".search-choice").remove(),clone.find(".chosen-container").remove(),edd_attach_tooltips(clone.find(".edd-help-tip")),clone},add:function(){e(document.body).on("click",".submit .edd_add_repeatable",function(t){t.preventDefault();var a=e(this),n=a.parent().parent().prev(".edd_repeatable_row"),i=d.clone_repeatable(n);i.insertAfter(n).find("input, textarea, select").filter(":visible").eq(0).focus(),i.find(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),i.find(".edd-select-chosen").css("width","100%"),i.find(".edd-select-chosen .chosen-search input").attr("placeholder",edd_vars.search_placeholder)})},move:function(){e(".edd_repeatable_table .edd-repeatables-wrap").sortable({handle:".edd-draghandle-anchor",items:".edd_repeatable_row",opacity:.6,cursor:"move",axis:"y",update:function(){var t=0;e(this).find(".edd_repeatable_row").each(function(){e(this).find("input.edd_repeatable_index").each(function(){e(this).val(t)}),t++})}})},remove:function(){e(document.body).on("click",".edd-remove-row, .edd_remove_repeatable",function(t){t.preventDefault();var d,a,n,i=e(this).parents(".edd_repeatable_row"),o=i.parent().find(".edd_repeatable_row").length,r=e(this).data("type"),s="div.edd_repeatable_"+r+"s";if(d=e(this).is(".ui-sortable .edd_repeatable_row:first-child .edd-remove-row, .ui-sortable .edd_repeatable_row:first-child .edd_remove_repeatable")?i.next(".edd_repeatable_row"):i.prev(".edd_repeatable_row"),a=d.find("select, input, textarea, button").filter(":visible"),n=a.eq(0),"price"===r){var c=i.data("key");e('.edd_repeatable_condition_field option[value="'+c+'"]').remove()}if(o>1)e("input, select",i).val(""),i.fadeOut("fast").remove(),n.focus();else switch(r){case"price":alert(edd_vars.one_price_min);break;case"file":e("input, select",i).val("");break;default:alert(edd_vars.one_field_min)}e(s).each(function(t){e(this).find("input, select").each(function(){var d=e(this).attr("name");d=d.replace(/\[(\d+)\]/,"["+t+"]"),e(this).attr("name",d).attr("id",d)})})})},type:function(){e(document.body).on("change","#_edd_product_type",function(t){var d=e("#edd_products"),a=e("#edd_download_files"),n=e("#edd_download_limit_wrap");"bundle"===e(this).val()?(d.show(),a.hide(),n.hide()):(d.hide(),a.show(),n.show())})},prices:function(){e(document.body).on("change","#edd_variable_pricing",function(t){var d=e(this).is(":checked"),a=e("#edd_regular_price_field"),n=e("#edd_variable_price_fields, .edd_repeatable_table .pricing"),i=e(".edd-bundled-product-row, .edd-repeatable-row-standard-fields");d?(a.hide(),n.show(),i.addClass("has-variable-pricing")):(a.show(),n.hide(),i.removeClass("has-variable-pricing"))})},files:function(){var t;window.formfield="",e(document.body).on("click",".edd_upload_file_button",function(a){a.preventDefault();var n=e(this);return window.formfield=e(this).closest(".edd_repeatable_upload_wrapper"),t?void t.open():(t=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:n.data("uploader-title"),button:{text:n.data("uploader-button-text")},multiple:"0"==e(this).data("multiple")?!1:!0}),t.on("menu:render:default",function(e){var t={};e.unset("library-separator"),e.unset("gallery"),e.unset("featured-image"),e.unset("embed"),e.set(t)}),t.on("insert",function(){var a=t.state().get("selection");a.each(function(t,a){t=t.toJSON();var n="image"===t.type?e(".attachment-display-settings .size option:selected").val():!1,i=t.url,o=t.title.length>0?t.title:t.filename;if(n&&"undefined"!=typeof t.sizes[n]&&(i=t.sizes[n].url),"image"===t.type&&(o=n&&"undefined"!=typeof t.sizes[n]?o+"-"+t.sizes[n].width+"x"+t.sizes[n].height:o+"-"+t.width+"x"+t.height),0===a)window.formfield.find(".edd_repeatable_attachment_id_field").val(t.id),window.formfield.find(".edd_repeatable_thumbnail_size_field").val(n),window.formfield.find(".edd_repeatable_upload_field").val(i),window.formfield.find(".edd_repeatable_name_field").val(o);else{var r=window.formfield,s=d.clone_repeatable(r);s.find(".edd_repeatable_attachment_id_field").val(t.id),s.find(".edd_repeatable_thumbnail_size_field").val(n),s.find(".edd_repeatable_upload_field").val(i),s.find(".edd_repeatable_name_field").val(o),s.insertAfter(r)}})}),void t.open())});var t;window.formfield=""},updatePrices:function(){e("#edd_price_fields").on("keyup",".edd_variable_prices_name",function(){var t=e(this).parents(".edd_repeatable_row").data("key"),d=e(this).val(),a=e(".edd_repeatable_condition_field option[value="+t+"]");a.length>0?a.text(d):e(".edd_repeatable_condition_field").append(e("<option></option>").attr("value",t).text(d))})}};e(document.body).on("click",".toggle-custom-price-option-section",function(t){t.preventDefault();var d=e(this).html()==edd_vars.show_advanced_settings?!0:!1;d?e(this).html(edd_vars.hide_advanced_settings):e(this).html(edd_vars.show_advanced_settings);var a=e(this).parents(".edd-repeatable-row-header");a.siblings(".edd-custom-price-option-sections-wrap").slideToggle();var n;n=d?e(":input:not(input[type=button],input[type=submit],button):visible:first",a.siblings(".edd-custom-price-option-sections-wrap")):e(":input:not(input[type=button],input[type=submit],button):visible:first",a.siblings(".edd-repeatable-row-standard-fields")),n.focus()}),d.init();var a=e(".edd_datepicker");if(a.length>0){var n="mm/dd/yy";a.datepicker({dateFormat:n})}var i={init:function(){this.edit_address(),this.remove_download(),this.add_download(),this.change_customer(),this.new_customer(),this.edit_price(),this.recalculate_total(),this.variable_prices_check(),this.add_note(),this.remove_note(),this.resend_receipt(),this.copy_download_link()},edit_address:function(){e('select[name="edd-payment-address[0][country]"]').change(function(){var t=e(this),d={action:"edd_get_shop_states",country:t.val(),field_name:"edd-payment-address[0][state]"};return e.post(ajaxurl,d,function(t){var d=e("#edd-order-address-state-wrap select, #edd-order-address-state-wrap input");e("#edd-order-address-state-wrap .chosen-container").remove(),"nostates"==t?d.replaceWith('<input type="text" name="edd-payment-address[0][state]" value="" class="edd-edit-toggles medium-text"/>'):d.replaceWith(t)}),!1})},remove_download:function(){e("#edd-purchased-files").on("click",".edd-order-remove-download",function(){var t=e(document.body).find("#edd-purchased-files > .row:not(.header)").length;if(1===t)return alert(edd_vars.one_download_min),!1;if(confirm(edd_vars.delete_payment_download)){var d=e(this).data("key"),a=(e(".edd-payment-id").val(),e('input[name="edd-payment-details-downloads['+d+'][id]"]').val()),n=e('input[name="edd-payment-details-downloads['+d+'][price_id]"]').val(),i=e('input[name="edd-payment-details-downloads['+d+'][quantity]"]').val(),o=e('input[name="edd-payment-details-downloads['+d+'][amount]"]').val();if(e('input[name="edd-payment-details-downloads['+d+'][tax]"]'))var r=e('input[name="edd-payment-details-downloads['+d+'][tax]"]').val();if(e('input[name="edd-payment-details-downloads['+d+'][fees]"]'))var r=e.parseJSON(e('input[name="edd-payment-details-downloads['+d+'][fees]"]').val());var s=e('input[name="edd-payment-removed"]').val();s=e.parseJSON(s),s.length<1&&(s={});var c=[{id:a,price_id:n,quantity:i,amount:o,cart_index:d}];s[d]=c,e('input[name="edd-payment-removed"]').val(JSON.stringify(s)),e(this).parent().parent().remove(),r&&r.length&&e.each(r,function(t,d){e('*li[data-fee-id="'+d+'"]').remove()}),e("#edd-payment-downloads-changed").val(1),e(".edd-order-payment-recalc-totals").show()}return!1})},change_customer:function(){e("#edd-customer-details").on("click",".edd-payment-change-customer, .edd-payment-change-customer-cancel",function(t){t.preventDefault();var d=e(this).hasClass("edd-payment-change-customer"),a=e(this).hasClass("edd-payment-change-customer-cancel");d?(e(".customer-info").hide(),e(".change-customer").show(),e(".edd-payment-change-customer-input").css("width","auto")):a&&(e(".customer-info").show(),e(".change-customer").hide())})},new_customer:function(){e("#edd-customer-details").on("click",".edd-payment-new-customer, .edd-payment-new-customer-cancel",function(t){t.preventDefault();var d=e(this).hasClass("edd-payment-new-customer"),a=e(this).hasClass("edd-payment-new-customer-cancel");d?(e(".customer-info").hide(),e(".new-customer").show()):a&&(e(".customer-info").show(),e(".new-customer").hide());var d=e("#edd-new-customer");e(".new-customer").is(":visible")?d.val(1):d.val(0)})},add_download:function(){e(".edd-edit-purchase-element").on("click","#edd-order-add-download",function(t){t.preventDefault();var d=e("#edd_order_download_select"),a=e("#edd-order-download-quantity"),n=e("#edd-order-download-price"),i=e("#edd-order-download-tax"),o=e(".edd_price_options_select option:selected"),r=d.val(),s=d.find(":selected").text(),c=a.val(),l=n.val(),p=i.val(),u=o.val(),_=o.text();if(1>r)return!1;if(l||(l=0),l=parseFloat(l),isNaN(l))return alert(edd_vars.numeric_item_price),!1;if(p=parseFloat(p),isNaN(p))return alert(edd_vars.numeric_item_tax),!1;if(isNaN(parseInt(c)))return alert(edd_vars.numeric_quantity),!1;_&&(s=s+" - "+_);var m=e("#edd-purchased-files div.row").length,f=e("#edd-purchased-files div.row:last").clone();f.find(".download span").html('<a href="post.php?post='+r+'&action=edit"></a>'),f.find(".download span a").text(s),f.find(".edd-payment-details-download-item-price").val(l.toFixed(edd_vars.currency_decimals)),f.find(".edd-payment-details-download-item-tax").val(p.toFixed(edd_vars.currency_decimals)),f.find("input.edd-payment-details-download-id").val(r),f.find("input.edd-payment-details-download-price-id").val(u);var h=l*c+p;h=h.toFixed(edd_vars.currency_decimals),f.find("span.edd-payment-details-download-amount").text(h),f.find("input.edd-payment-details-download-amount").val(h),f.find("input.edd-payment-details-download-quantity").val(c),f.find("input.edd-payment-details-download-has-log").val(0),f.find(".edd-copy-download-link-wrapper").remove(),f.find("input").each(function(){var t=e(this).attr("name");t=t.replace(/\[(\d+)\]/,"["+parseInt(m)+"]"),e(this).attr("name",t).attr("id",t)}),f.find("a.edd-order-remove-download").attr("data-key",parseInt(m)),e("#edd-payment-downloads-changed").val(1),e(f).insertAfter("#edd-purchased-files div.row:last"),e(".edd-order-payment-recalc-totals").show(),e(".edd-add-download-field").val("")})},edit_price:function(){e(document.body).on("change keyup",".edd-payment-item-input",function(){var t=e(this).parents("ul.edd-purchased-files-list-wrapper");e(".edd-order-payment-recalc-totals").show();var d=t.find("input.edd-payment-details-download-quantity").val().replace(edd_vars.thousands_separator,""),a=t.find("input.edd-payment-details-download-item-price").val().replace(edd_vars.thousands_separator,""),n=t.find("input.edd-payment-details-download-item-tax").val().replace(edd_vars.thousands_separator,"");if(a=parseFloat(a),isNaN(a))return alert(edd_vars.numeric_item_price),!1;n=parseFloat(n),isNaN(n)&&(n=0),isNaN(parseInt(d))&&(d=1);var i=a*d+n;i=i.toFixed(edd_vars.currency_decimals),t.find("input.edd-payment-details-download-amount").val(i),t.find("span.edd-payment-details-download-amount").text(i)})},recalculate_total:function(){e("#edd-order-recalc-total").on("click",function(t){t.preventDefault();var d=0,a=0,n=e("#edd-purchased-files .row input.edd-payment-details-download-amount"),i=e("#edd-purchased-files .row input.edd-payment-details-download-item-tax");n.length&&n.each(function(){d+=parseFloat(e(this).val())}),i.length&&i.each(function(){a+=parseFloat(e(this).val())}),e(".edd-payment-fees").length&&e(".edd-payment-fees span.fee-amount").each(function(){d+=parseFloat(e(this).data("fee"))}),e("input[name=edd-payment-total]").val(d.toFixed(edd_vars.currency_decimals)),e("input[name=edd-payment-tax]").val(a.toFixed(edd_vars.currency_decimals))})},variable_prices_check:function(){e(".edd-edit-purchase-element").on("change","select#edd_order_download_select",function(){var t=e(this),d=t.val();if(parseInt(d)>0){var a={action:"edd_check_for_download_price_variations",download_id:d};e.ajax({type:"POST",data:a,url:ajaxurl,success:function(d){e(".edd_price_options_select").remove(),e(d).insertAfter(t.next())}}).fail(function(e){window.console&&window.console.log&&console.log(e)})}})},add_note:function(){e("#edd-add-payment-note").on("click",function(t){t.preventDefault();var d={action:"edd_insert_payment_note",payment_id:e(this).data("payment-id"),note:e("#edd-payment-note").val()};if(d.note)e.ajax({type:"POST",data:d,url:ajaxurl,success:function(t){e("#edd-payment-notes-inner").append(t),e(".edd-no-payment-notes").hide(),e("#edd-payment-note").val("")}}).fail(function(e){window.console&&window.console.log&&console.log(e)});else{var a=e("#edd-payment-note").css("border-color");e("#edd-payment-note").css("border-color","red"),setTimeout(function(){e("#edd-payment-note").css("border-color",a)},500)}})},remove_note:function(){e(document.body).on("click",".edd-delete-payment-note",function(t){if(t.preventDefault(),confirm(edd_vars.delete_payment_note)){var d={action:"edd_delete_payment_note",payment_id:e(this).data("payment-id"),note_id:e(this).data("note-id")};return e.ajax({type:"POST",data:d,url:ajaxurl,success:function(t){return e("#edd-payment-note-"+d.note_id).remove(),e(".edd-payment-note").length||e(".edd-no-payment-notes").show(),!1}}).fail(function(e){window.console&&window.console.log&&console.log(e)}),!0}})},resend_receipt:function(){var t=e(".edd-order-resend-receipt-addresses");e(document.body).on("click","#edd-select-receipt-email",function(e){e.preventDefault(),t.slideDown()}),e(document.body).on("change",".edd-order-resend-receipt-email",function(){var t=e("#edd-select-receipt-email").prop("href")+"&email="+e(this).val();confirm(edd_vars.resend_receipt)&&(window.location=t)}),e(document.body).on("click","#edd-resend-receipt",function(e){return confirm(edd_vars.resend_receipt)})},copy_download_link:function(){e(document.body).on("click",".edd-copy-download-link",function(t){t.preventDefault();var d=e(this),a={action:"edd_get_file_download_link",payment_id:e('input[name="edd_payment_id"]').val(),download_id:d.data("download-id"),price_id:d.data("price-id")};e.ajax({type:"POST",data:a,url:ajaxurl,success:function(t){return e("#edd-download-link").dialog({width:400}).html('<textarea rows="10" cols="40" id="edd-download-link-textarea">'+t+"</textarea>"),e("#edd-download-link-textarea").focus().select(),!1}}).fail(function(e){window.console&&window.console.log&&console.log(e)})})}};i.init();var o={init:function(){this.type_select(),this.product_requirements()},type_select:function(){e("#edd-edit-discount #edd-type, #edd-add-discount #edd-type").change(function(){var t=e(this).val();e(".edd-amount-description").hide(),e(".edd-amount-description."+t+"-discount").show()})},product_requirements:function(){e("#products").change(function(){var t=e("#edd-discount-product-conditions");e(this).val()?t.show():t.hide()})}};o.init();var r={init:function(){this.date_options(),this.customers_export()},date_options:function(){e("#edd-graphs-date-options").change(function(){var t=e(this),d=e("#edd-date-range-options");"other"===t.val()?d.show():d.hide()})},customers_export:function(){e("#edd_customer_export_download").change(function(){var t=e(this),d=e("option:selected",t).val(),a=e("#edd_customer_export_option");if("0"===t.val()?a.show():a.hide(),0!=parseInt(d)){var n={action:"edd_check_for_download_price_variations",download_id:d,all_prices:!0},i=e(".edd_price_options_select");e.post(ajaxurl,n,function(t){i.remove(),e("#edd_customer_export_download_chosen").after(t)})}else i.remove()})}};r.init();var s={init:function(){this.general(),this.taxes(),this.emails(),this.misc()},general:function(){var t=e(".edd-color-picker");if(t.length&&t.wpColorPicker(),"undefined"==typeof wp||"1"!==edd_vars.new_media_ui){var d=e(".edd_settings_upload_button");d.length>0&&(window.formfield="",e(document.body).on("click",d,function(t){t.preventDefault(),window.formfield=e(this).parent().prev(),window.tbframe_interval=setInterval(function(){jQuery("#TB_iframeContent").contents().find(".savesend .button").val(edd_vars.use_this_file).end().find("#insert-gallery, .wp-post-thumbnail").hide()},2e3),tb_show(edd_vars.add_new_download,"media-upload.php?TB_iframe=true")}),window.edd_send_to_editor=window.send_to_editor,window.send_to_editor=function(t){window.formfield?(imgurl=e("a","<div>"+t+"</div>").attr("href"),window.formfield.val(imgurl),window.clearInterval(window.tbframe_interval),tb_remove()):window.edd_send_to_editor(t),window.send_to_editor=window.edd_send_to_editor,window.formfield="",window.imagefield=!1})}else{var a;window.formfield="",e(document.body).on("click",".edd_settings_upload_button",function(t){t.preventDefault();var d=e(this);return window.formfield=e(this).parent().prev(),a?void a.open():(a=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:d.data("uploader_title"),button:{text:d.data("uploader_button_text")},multiple:!1}),a.on("menu:render:default",function(e){var t={};e.unset("library-separator"),e.unset("gallery"),e.unset("featured-image"),e.unset("embed"),e.set(t)}),a.on("insert",function(){var e=a.state().get("selection");e.each(function(e,t){e=e.toJSON(),window.formfield.val(e.url)})}),void a.open())});var a;window.formfield=""}},taxes:function(){var t=e("select.edd-no-states");t.length&&t.closest("tr").addClass("hidden"),e('select[name="edd_settings[base_country]"]').change(function(){var t=e(this),d=t.closest("tr"),a={action:"edd_get_shop_states",country:e(this).val(),field_name:"edd_settings[base_state]"};return e.post(ajaxurl,a,function(e){"nostates"==e?d.next().addClass("hidden"):(d.next().removeClass("hidden"),d.next().find("select").replaceWith(e))}),!1}),e(document.body).on("change","#edd_tax_rates select.edd-tax-country",function(){var t=e(this),d={action:"edd_get_shop_states",country:e(this).val(),field_name:t.attr("name").replace("country","state")};return e.post(ajaxurl,d,function(e){if("nostates"==e){var a='<input type="text" name="'+d.field_name+'" value=""/>';t.parent().next().find("select").replaceWith(a)}else t.parent().next().find("input,select").show(),t.parent().next().find("input,select").replaceWith(e)}),!1}),e("#edd_add_tax_rate").on("click",function(){var t=e("#edd_tax_rates tr:last"),d=t.clone(),a=t.parent().find("tr").length;return d.find("td input").not(":input[type=checkbox]").val(""),d.find('td [type="checkbox"]').attr("checked",!1),d.find("input, select").each(function(){var t=e(this).attr("name");t=t.replace(/\[(\d+)\]/,"["+parseInt(a)+"]"),e(this).attr("name",t).attr("id",t)}),d.find("label").each(function(){var t=e(this).attr("for");t=t.replace(/\[(\d+)\]/,"["+parseInt(a)+"]"),e(this).attr("for",t)}),d.insertAfter(t),!1}),e(document.body).on("click","#edd_tax_rates .edd_remove_tax_rate",function(){if(confirm(edd_vars.delete_tax_rate)){var t=e("#edd_tax_rates tr:visible"),d=t.length;2===d?(e("#edd_tax_rates select").val(""),e('#edd_tax_rates input[type="text"]').val(""),e('#edd_tax_rates input[type="number"]').val(""),e('#edd_tax_rates input[type="checkbox"]').attr("checked",!1)):e(this).closest("tr").remove(),e("#edd_tax_rates tr").each(function(t){e(this).children().find("input, select").each(function(){var d=e(this).attr("name");d=d.replace(/\[(\d+)\]/,"["+(t-1)+"]"),e(this).attr("name",d).attr("id",d)})})}return!1})},emails:function(){var t=e("#email-preview-wrap");if(t.length){var d=e("#email-preview");t.colorbox({inline:!0,href:d,width:"80%",height:"auto"})}},misc:function(){var t=e('select[name="edd_settings[download_method]"]'),d=t.parent().parent().next();"direct"==t.val()&&(d.hide(),d.find("input").prop("checked",!1)),t.on("change",function(){"direct"==e(this).val()?(d.hide(),d.find("input").prop("checked",!1)):d.show()})}};s.init(),e(".download_page_edd-payment-history .row-actions .delete a, a.edd-delete-payment").on("click",function(){return confirm(edd_vars.delete_payment)?!0:!1}),e("#the-list").on("click",".editinline",function(){var t=e(this).closest("tr").attr("id");t=t.replace("post-","");var d=e("#post-"+t),a=d.find(".column-price .downloadprice-"+t).val();a!=e("#post-"+t+".column-price .downloadprice-"+t).val()?e(".regprice","#edd-download-data").val(a).attr("disabled",!1):e(".regprice","#edd-download-data").val(edd_vars.quick_edit_warning).attr("disabled","disabled")}),e(document.body).on("click","#bulk_edit",function(){var t=e("#bulk-edit"),d=new Array;t.find("#bulk-titles").children().each(function(){d.push(e(this).attr("id").replace(/^(ttle)/i,""))});var a=e('#edd-download-data input[name="_edd_regprice"]').val(),n={action:"edd_save_bulk_edit",edd_bulk_nonce:d,post_ids:d,price:a};e.post(ajaxurl,n)}),e(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),e(".edd-select-chosen .chosen-search input").each(function(){var t=e(this).parent().parent().parent().prev("select.edd-select-chosen"),d=(t.data("search-type"),t.data("search-placeholder"));e(this).attr("placeholder",d)}),e(".chosen-choices").on("click",function(){var t=e(this).parent().prev().data("search-placeholder");"undefined"==typeof t&&(t=edd_vars.type_to_search),e(this).children("li").children("input").attr("placeholder",t)});var c,l=342;e(document.body).on("keyup",".edd-select.chosen-container .chosen-search input, .edd-select.chosen-container .search-field input",function(t){var d=e(this).val(),a=e(this).closest(".edd-select-chosen"),n=(a.attr("id").replace("_chosen",""),a.prev()),i=a.hasClass("no-bundles"),o=a.hasClass("variations"),r=t.which,s="edd_download_search";if(a.prev().data("search-type")){if("no_ajax"==n.data("search-type"))return;s="edd_"+n.data("search-type")+"_search"}d.length<=3&&"edd_download_search"==s||16==r||13==r||91==r||17==r||37==r||38==r||39==r||40==r||(clearTimeout(c),c=setTimeout(function(){e.ajax({type:"GET",url:ajaxurl,data:{action:s,s:d,no_bundles:i,variations:o},dataType:"json",beforeSend:function(){n.closest("ul.chosen-results").empty()},success:function(t){e("option:not(:selected)",n).remove(),e.each(t,function(t,d){e('option[value="'+d.id+'"]',n).length||n.prepend('<option value="'+d.id+'">'+d.name+"</option>")}),e(".edd-select-chosen").trigger("chosen:updated"),n.next().find("input").val(d)}}).fail(function(e){window.console&&window.console.log&&console.log(e)}).done(function(e){})},l))}),e("#post").on("click",".edd-thickbox",function(){e(".edd-select-chosen","#choose-download").css("width","100%")});var p={init:function(){this.revoke_api_key(),this.regenerate_api_key(),this.create_api_key(),this.recount_stats()},revoke_api_key:function(){e(document.body).on("click",".edd-revoke-api-key",function(e){return confirm(edd_vars.revoke_api_key)})},regenerate_api_key:function(){e(document.body).on("click",".edd-regenerate-api-key",function(e){return confirm(edd_vars.regenerate_api_key)})},create_api_key:function(){e(document.body).on("submit","#api-key-generate-form",function(t){var d=e('input[type="text"][name="user_id"]');d.css("border-color","#ddd");var a=d.val();return a.length<1||0==a?(d.css("border-color","#ff0000"),!1):void 0})},recount_stats:function(){e(document.body).on("change","#recount-stats-type",function(){var t=e("#edd-tools-recount-form"),d=e("option:selected",this).data("type"),a=e("#recount-stats-submit"),n=e("#tools-product-dropdown");if(t.find(".notice-wrap").remove(),a.removeClass("button-disabled").attr("disabled",!1),n.hide(),e(".edd-recount-stats-descriptions span").hide(),"recount-download"===d)n.show(),n.find(".edd-select-chosen").css("width","auto");else if("reset-stats"===d){t.append('<div class="notice-wrap"></div>');var i=t.find(".notice-wrap");i.html('<div class="notice notice-warning"><p><input type="checkbox" id="confirm-reset" name="confirm_reset_store" value="1" /> <label for="confirm-reset">'+edd_vars.reset_stats_warn+"</label></p></div>"),e("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}else n.hide(),n.val(0);e("#"+d).show()}),e(document.body).on("change","#confirm-reset",function(){var t=e(this).is(":checked");t?e("#recount-stats-submit").removeClass("button-disabled").removeAttr("disabled"):e("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}),e("#edd-tools-recount-form").submit(function(t){var d=e("#recount-stats-type").val(),a=e(this),n=e("option:selected",this).data("type");if("reset-stats"===n){var i=e("#confirm-reset").is(":checked");if(i)return!0;r=!0}a.find(".notice-wrap").remove(),a.append('<div class="notice-wrap"></div>');var o=a.find(".notice-wrap"),r=!1;if((null===d||0===d)&&(o.html('<div class="updated error"><p>'+edd_vars.batch_export_no_class+"</p></div>"),r=!0),"recount-download"===n){var s=e('select[name="download_id"]').val();0==s&&(o.html('<div class="updated error"><p>'+edd_vars.batch_export_no_reqs+"</p></div>"),r=!0)}return r?(a.find(".button-disabled").removeClass("button-disabled"),!1):void 0})}};p.init();var u={init:function(){this.submit(),this.dismiss_message()},submit:function(){var t=this;e(document.body).on("submit",".edd-export-form",function(d){d.preventDefault();var a=e(this).find('input[type="submit"]');if(!a.hasClass("button-disabled")){var n=e(this).serialize();a.addClass("button-disabled"),e(this).find(".notice-wrap").remove(),e(this).append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),t.process_step(1,n,t)}})},process_step:function(t,d,a){e.ajax({type:"POST",url:ajaxurl,data:{form:d,action:"edd_do_ajax_export",step:t},dataType:"json",success:function(t){if("done"==t.step||t.error||t.success){var n=e(".edd-export-form").find(".edd-progress").parent().parent(),i=n.find(".notice-wrap");if(n.find(".button-disabled").removeClass("button-disabled"),t.error){var o=t.message;i.html('<div class="updated error"><p>'+o+"</p></div>")}else if(t.success){var r=t.message;i.html('<div id="edd-batch-success" class="updated notice is-dismissible"><p>'+r+'<span class="notice-dismiss"></span></p></div>')}else i.remove(),window.location=t.url}else e(".edd-progress div").animate({width:t.percentage+"%"},50,function(){}),a.process_step(parseInt(t.step),d,a)}}).fail(function(e){window.console&&window.console.log&&console.log(e)})},dismiss_message:function(){e(document.body).on("click","#edd-batch-success .notice-dismiss",function(){e("#edd-batch-success").parent().slideUp("fast")})}};u.init();var _={init:function(){this.submit()},submit:function(){var t=this;e(".edd-import-form").ajaxForm({beforeSubmit:t.before_submit,success:t.success,complete:t.complete,dataType:"json",error:t.error})},before_submit:function(t,d,a){if(d.find(".notice-wrap").remove(),d.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),!(window.File&&window.FileReader&&window.FileList&&window.Blob)){var n=e(".edd-import-form").find(".edd-progress").parent().parent(),i=n.find(".notice-wrap");return n.find(".button-disabled").removeClass("button-disabled"),i.html('<div class="update error"><p>'+edd_vars.unsupported_browser+"</p></div>"),!1}},success:function(e,t,d,a){},complete:function(t){var d=jQuery.parseJSON(t.responseText);if(d.success){var a=e(".edd-import-form .notice-wrap").parent();a.find(".edd-import-file-wrap,.notice-wrap").remove(),a.find(".edd-import-options").slideDown();var n=a.find("select.edd-import-csv-column"),i=(n.parent().parent(),""),o=d.data.columns.sort(function(e,t){return t>e?-1:e>t?1:0});e.each(o,function(e,t){i+='<option value="'+t+'">'+t+"</option>"}),n.append(i),n.on("change",function(){var t=e(this).val();t&&0!=d.data.first_row[t]?e(this).parent().next().html(d.data.first_row[t]):e(this).parent().next().html("")}),e(document.body).on("click",".edd-import-proceed",function(e){e.preventDefault(),a.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),d.data.mapping=a.serialize(),_.process_step(1,d.data,self)})}else _.error(t)},error:function(t){var d=jQuery.parseJSON(t.responseText),a=e(".edd-import-form").find(".edd-progress").parent().parent(),n=a.find(".notice-wrap");a.find(".button-disabled").removeClass("button-disabled"),d.data.error?n.html('<div class="update error"><p>'+d.data.error+"</p></div>"):n.remove()},process_step:function(t,d,a){e.ajax({type:"POST",url:ajaxurl,data:{form:d.form,nonce:d.nonce,"class":d["class"],upload:d.upload,mapping:d.mapping,action:"edd_do_ajax_import",step:t},dataType:"json",success:function(t){if("done"==t.data.step||t.data.error){var n=e(".edd-import-form").find(".edd-progress").parent().parent(),i=n.find(".notice-wrap");n.find(".button-disabled").removeClass("button-disabled"),t.data.error?i.html('<div class="update error"><p>'+t.data.error+"</p></div>"):(n.find(".edd-import-options").hide(),e("html, body").animate({scrollTop:n.parent().offset().top},500),i.html('<div class="updated"><p>'+t.data.message+"</p></div>"))}else e(".edd-progress div").animate({width:t.data.percentage+"%"},50,function(){}),_.process_step(parseInt(t.data.step),d,a)}}).fail(function(e){window.console&&window.console.log&&console.log(e)})}};_.init();var m={vars:{customer_card_wrap_editable:e(".edd-customer-card-wrapper .editable"),customer_card_wrap_edit_item:e(".edd-customer-card-wrapper .edit-item"),user_id:e('input[name="customerinfo[user_id]"]'),state_input:e(':input[name="customerinfo[state]"]'),note:e("#customer-note")},init:function(){this.edit_customer(),this.add_email(),this.user_search(),this.remove_user(),this.cancel_edit(),this.change_country(),this.add_note(),this.delete_checked()},edit_customer:function(){e(document.body).on("click","#edit-customer",function(e){e.preventDefault(),m.vars.customer_card_wrap_editable.hide(),m.vars.customer_card_wrap_edit_item.fadeIn().css("display","block")})},add_email:function(){e(document.body).on("click","#add-customer-email",function(t){t.preventDefault();var d=e(this),a=d.parent();a.parent().find(".notice-wrap").remove(),a.find(".spinner").css("visibility","visible"),d.attr("disabled",!0);var n=a.find('input[name="customer-id"]').val(),i=a.find('input[name="additional-email"]').val(),o=a.find('input[name="make-additional-primary"]').is(":checked"),r=a.find('input[name="add_email_nonce"]').val(),s={edd_action:"customer-add-email",customer_id:n,email:i,primary:o,_wpnonce:r};e.post(ajaxurl,s,function(e){!0===e.success?window.location.href=e.redirect:(d.attr("disabled",!1),
2
- a.after('<div class="notice-wrap"><div class="notice notice-error inline"><p>'+e.message+"</p></div></div>"),a.find(".spinner").css("visibility","hidden"))},"json")})},user_search:function(){e(document.body).on("click.eddSelectUser",".edd_user_search_results a",function(t){t.preventDefault();var d=e(this).data("userid");m.vars.user_id.val(d)})},remove_user:function(){e(document.body).on("click","#disconnect-customer",function(t){t.preventDefault();var d=e('input[name="customerinfo[id]"]').val(),a={edd_action:"disconnect-userid",customer_id:d,_wpnonce:e("#edit-customer-info #_wpnonce").val()};e.post(ajaxurl,a,function(e){window.location.href=window.location.href},"json")})},cancel_edit:function(){e(document.body).on("click","#edd-edit-customer-cancel",function(t){t.preventDefault(),m.vars.customer_card_wrap_edit_item.hide(),m.vars.customer_card_wrap_editable.show(),e(".edd_user_search_results").html("")})},change_country:function(){e('select[name="customerinfo[country]"]').change(function(){var t=e(this),d={action:"edd_get_shop_states",country:t.val(),field_name:"customerinfo[state]"};return e.post(ajaxurl,d,function(e){"nostates"==e?m.vars.state_input.replaceWith('<input type="text" name="'+d.field_name+'" value="" class="edd-edit-toggles medium-text"/>'):m.vars.state_input.replaceWith(e)}),!1})},add_note:function(){e(document.body).on("click","#add-customer-note",function(t){t.preventDefault();var d={edd_action:"add-customer-note",customer_id:e("#customer-id").val(),customer_note:m.vars.note.val(),add_customer_note_nonce:e("#add_customer_note_nonce").val()};if(d.customer_note)e.ajax({type:"POST",data:d,url:ajaxurl,success:function(t){e("#edd-customer-notes").prepend(t),e(".edd-no-customer-notes").hide(),m.vars.note.val("")}}).fail(function(e){window.console&&window.console.log&&console.log(e)});else{var a=m.vars.note.css("border-color");m.vars.note.css("border-color","red"),setTimeout(function(){m.vars.note.css("border-color",a)},500)}})},delete_checked:function(){e("#edd-customer-delete-confirm").change(function(){var t=e("#edd-customer-delete-records"),d=e("#edd-delete-customer");e(this).prop("checked")?(t.attr("disabled",!1),d.attr("disabled",!1)):(t.attr("disabled",!0),t.prop("checked",!1),d.attr("disabled",!0))})}};m.init(),e(".edd-ajax-user-search").keyup(function(){var t=e(this).val(),d="";e(this).data("exclude")&&(d=e(this).data("exclude")),e(".edd-ajax").show();var a={action:"edd_search_users",user_name:t,exclude:d};document.body.style.cursor="wait",e.ajax({type:"POST",data:a,dataType:"json",url:ajaxurl,success:function(t){e(".edd-ajax").hide(),e(".edd_user_search_results").removeClass("hidden"),e(".edd_user_search_results span").html(""),e(t.results).appendTo(".edd_user_search_results span"),document.body.style.cursor="default"}})}),e(document.body).on("click.eddSelectUser",".edd_user_search_results span a",function(t){t.preventDefault();var d=e(this).data("login");e(".edd-ajax-user-search").val(d),e(".edd_user_search_results").addClass("hidden"),e(".edd_user_search_results span").html("")}),e(document.body).on("click.eddCancelUserSearch",".edd_user_search_results a.edd-ajax-user-cancel",function(t){t.preventDefault(),e(".edd-ajax-user-search").val(""),e(".edd_user_search_results").addClass("hidden"),e(".edd_user_search_results span").html("")}),e("#edd_dashboard_sales").length&&e.ajax({type:"GET",data:{action:"edd_load_dashboard_widget"},url:ajaxurl,success:function(t){e("#edd_dashboard_sales .inside").html(t)}}),e(document.body).on("keydown",".customer-note-input",function(t){13==t.keyCode&&(t.metaKey||t.ctrlKey)&&e("#add-customer-note").click()})});var eddFormatCurrency=function(e){var t=parseFloat(e),d=edd_vars.currency,a=edd_vars.currency_decimals;return t.toLocaleString(d,{style:"currency",currency:d,minimumFractionDigits:a,maximumFractionDigits:a})},eddFormatNumber=function(e){var t=parseFloat(e),d=edd_vars.currency;edd_vars.currency_decimals;return t.toLocaleString(d,{style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0})},eddLabelFormatter=function(e,t){return'<div style="font-size:12px; text-align:center; padding:2px">'+e+"</div>"},eddLegendFormatterSales=function(e,t){var d=e.toLowerCase().replace(/\s/g,"-"),a='<div class="edd-legend-color" style="background-color: '+t.color+'"></div>',n='<div class="edd-pie-legend-item">'+e+": "+Math.round(t.percent)+"% ("+eddFormatNumber(t.data[0][1])+")</div>",i='<div id="'+t.edd_vars.id+d+'" class="edd-legend-item-wrapper">'+a+n+"</div>";return jQuery("#edd-pie-legend-"+t.edd_vars.id).append(i),i},eddLegendFormatterEarnings=function(e,t){var d=e.toLowerCase().replace(/\s/g,"-"),a='<div class="edd-legend-color" style="background-color: '+t.color+'"></div>',n='<div class="edd-pie-legend-item">'+e+": "+Math.round(t.percent)+"% ("+eddFormatCurrency(t.data[0][1])+")</div>",i='<div id="'+t.edd_vars.id+d+'" class="edd-legend-item-wrapper">'+a+n+"</div>";return jQuery("#edd-pie-legend-"+t.edd_vars.id).append(i),i};
1
+ jQuery(document).ready(function(a){a(".edd-help-tip").tooltip({content:function(){return a(this).prop("title")},tooltipClass:"edd-ui-tooltip",position:{my:"center top",at:"center bottom+10",collision:"flipfit"},hide:{duration:200},show:{duration:200}});var b={init:function(){this.add(),this.move(),this.remove(),this.type(),this.prices(),this.files(),this.updatePrices()},clone_repeatable:function(b){var c=highest=1;return b.parent().find("tr.edd_repeatable_row").each(function(){var b=a(this).data("key");parseInt(b)>highest&&(highest=b)}),c=highest+=1,clone=b.clone(),clone.find("select").each(function(){a(this).val(b.find('select[name="'+a(this).attr("name")+'"]').val())}),clone.removeClass("edd_add_blank"),clone.attr("data-key",c),clone.find("td input, td select, textarea").val(""),clone.find("input, select, textarea").each(function(){var b=a(this).attr("name"),d=a(this).attr("id");b&&(b=b.replace(/\[(\d+)\]/,"["+parseInt(c)+"]"),a(this).attr("name",b)),a(this).attr("data-key",c),void 0!==d&&(d=d.replace(/(\d+)/,parseInt(c)),a(this).attr("id",d))}),clone.find("span.edd_price_id").each(function(){a(this).text(parseInt(c))}),clone.find("span.edd_file_id").each(function(){a(this).text(parseInt(c))}),clone.find(".edd_repeatable_default_input").each(function(){a(this).val(parseInt(c)).removeAttr("checked")}),clone.find(".edd_repeatable_condition_field").each(function(){a(this).find("option:eq(0)").prop("selected","selected")}),clone.find(".search-choice").remove(),clone.find(".chosen-container").remove(),clone},add:function(){a(document.body).on("click",".submit .edd_add_repeatable",function(c){c.preventDefault();var d=a(this),e=d.parent().parent().prev("tr"),f=b.clone_repeatable(e);f.insertAfter(e).find("input, textarea, select").filter(":visible").eq(0).focus(),f.find(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),f.find(".edd-select-chosen").css("width","100%"),f.find(".edd-select-chosen .chosen-search input").attr("placeholder",edd_vars.search_placeholder)})},move:function(){a(".edd_repeatable_table tbody").sortable({handle:".edd_draghandle",items:".edd_repeatable_row",opacity:.6,cursor:"move",axis:"y",update:function(){var b=0;a(this).find("tr").each(function(){a(this).find("input.edd_repeatable_index").each(function(){a(this).val(b)}),b++})}})},remove:function(){a(document.body).on("click",".edd_remove_repeatable",function(b){b.preventDefault();var g,h,i,c=a(this).parent().parent("tr"),d=c.parent().find("tr").length-1,e=a(this).data("type"),f="tr.edd_repeatable_"+e+"s";if(g=a(this).is(".ui-sortable tr:first-child .edd_remove_repeatable:first-child")?c.next("tr"):c.prev("tr"),h=g.find("select, input, textarea, button").filter(":visible"),i=h.eq(0),"price"===e){var j=c.data("key");a('.edd_repeatable_condition_field option[value="'+j+'"]').remove()}if(d>1)a("input, select",c).val(""),c.fadeOut("fast").remove(),i.focus();else switch(e){case"price":alert(edd_vars.one_price_min);break;case"file":a("input, select",c).val("");break;default:alert(edd_vars.one_field_min)}a(f).each(function(b){a(this).find("input, select").each(function(){var c=a(this).attr("name");c=c.replace(/\[(\d+)\]/,"["+b+"]"),a(this).attr("name",c).attr("id",c)})})})},type:function(){a(document.body).on("change","#_edd_product_type",function(b){var c=a("#edd_products"),d=a("#edd_download_files"),e=a("#edd_download_limit_wrap");"bundle"===a(this).val()?(c.show(),d.hide(),e.hide()):(c.hide(),d.show(),e.show())})},prices:function(){a(document.body).on("change","#edd_variable_pricing",function(b){var c=a(this).is(":checked"),d=a("#edd_regular_price_field"),e=a("#edd_variable_price_fields,.edd_repeatable_table .pricing");c?(d.hide(),e.show()):(d.show(),e.hide())})},files:function(){var c;window.formfield="",a(document.body).on("click",".edd_upload_file_button",function(d){d.preventDefault();var e=a(this);if(window.formfield=a(this).closest(".edd_repeatable_upload_wrapper"),c)return void c.open();c=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:e.data("uploader-title"),button:{text:e.data("uploader-button-text")},multiple:"0"!=a(this).data("multiple")}),c.on("menu:render:default",function(a){var b={};a.unset("library-separator"),a.unset("gallery"),a.unset("featured-image"),a.unset("embed"),a.set(b)}),c.on("insert",function(){c.state().get("selection").each(function(c,d){c=c.toJSON();var e="image"===c.type&&a(".attachment-display-settings .size option:selected").val(),f=c.url,g=c.title.length>0?c.title:c.filename;if(e&&void 0!==c.sizes[e]&&(f=c.sizes[e].url),"image"===c.type&&(g=e&&void 0!==c.sizes[e]?g+"-"+c.sizes[e].width+"x"+c.sizes[e].height:g+"-"+c.width+"x"+c.height),0===d)window.formfield.find(".edd_repeatable_attachment_id_field").val(c.id),window.formfield.find(".edd_repeatable_thumbnail_size_field").val(e),window.formfield.find(".edd_repeatable_upload_field").val(f),window.formfield.find(".edd_repeatable_name_field").val(g);else{var h=window.formfield,i=b.clone_repeatable(h);i.find(".edd_repeatable_attachment_id_field").val(c.id),i.find("edd_repeatable_thumbnail_size_field").val(e),i.find(".edd_repeatable_upload_field").val(f),i.find(".edd_repeatable_name_field").val(g),i.insertAfter(h)}})}),c.open()});var c;window.formfield=""},updatePrices:function(){a("#edd_price_fields").on("keyup",".edd_variable_prices_name",function(){var b=a(this).parents("tr").data("key"),c=a(this).val(),d=a(".edd_repeatable_condition_field option[value="+b+"]");d.length>0?d.text(c):a(".edd_repeatable_condition_field").append(a("<option></option>").attr("value",b).text(c))})}};b.init();var c=a(".edd_datepicker");if(c.length>0){c.datepicker({dateFormat:"mm/dd/yy"})}({init:function(){this.edit_address(),this.remove_download(),this.add_download(),this.change_customer(),this.new_customer(),this.edit_price(),this.recalculate_total(),this.variable_prices_check(),this.add_note(),this.remove_note(),this.resend_receipt(),this.copy_download_link()},edit_address:function(){a('select[name="edd-payment-address[0][country]"]').change(function(){var b=a(this),c={action:"edd_get_shop_states",country:b.val(),field_name:"edd-payment-address[0][state]"};return a.post(ajaxurl,c,function(b){var c=a("#edd-order-address-state-wrap select, #edd-order-address-state-wrap input");a("#edd-order-address-state-wrap .chosen-container").remove(),"nostates"==b?c.replaceWith('<input type="text" name="edd-payment-address[0][state]" value="" class="edd-edit-toggles medium-text"/>'):c.replaceWith(b)}),!1})},remove_download:function(){a("#edd-purchased-files").on("click",".edd-order-remove-download",function(){if(1===a(document.body).find("#edd-purchased-files > .row").length)return alert(edd_vars.one_download_min),!1;if(confirm(edd_vars.delete_payment_download)){var c=a(this).data("key"),e=(a(".edd-payment-id").val(),a('input[name="edd-payment-details-downloads['+c+'][id]"]').val()),f=a('input[name="edd-payment-details-downloads['+c+'][price_id]"]').val(),g=a('input[name="edd-payment-details-downloads['+c+'][quantity]"]').val(),h=a('input[name="edd-payment-details-downloads['+c+'][amount]"]').val();if(a('input[name="edd-payment-details-downloads['+c+'][tax]"]'))var i=a('input[name="edd-payment-details-downloads['+c+'][tax]"]').val();if(a('input[name="edd-payment-details-downloads['+c+'][fees]"]'))var i=a.parseJSON(a('input[name="edd-payment-details-downloads['+c+'][fees]"]').val());var j=a('input[name="edd-payment-removed"]').val();j=a.parseJSON(j),j.length<1&&(j={});var k=[{id:e,price_id:f,quantity:g,amount:h,cart_index:c}];j[c]=k,a('input[name="edd-payment-removed"]').val(JSON.stringify(j)),a(this).parent().parent().remove(),i&&i.length&&a.each(i,function(b,c){a('*li[data-fee-id="'+c+'"]').remove()}),a("#edd-payment-downloads-changed").val(1),a(".edd-order-payment-recalc-totals").show()}return!1})},change_customer:function(){a("#edd-customer-details").on("click",".edd-payment-change-customer, .edd-payment-change-customer-cancel",function(b){b.preventDefault();var c=a(this).hasClass("edd-payment-change-customer"),d=a(this).hasClass("edd-payment-change-customer-cancel");c?(a(".customer-info").hide(),a(".change-customer").show(),a(".edd-payment-change-customer-input").css("width","auto")):d&&(a(".customer-info").show(),a(".change-customer").hide())})},new_customer:function(){a("#edd-customer-details").on("click",".edd-payment-new-customer, .edd-payment-new-customer-cancel",function(b){b.preventDefault();var c=a(this).hasClass("edd-payment-new-customer"),d=a(this).hasClass("edd-payment-new-customer-cancel");c?(a(".customer-info").hide(),a(".new-customer").show()):d&&(a(".customer-info").show(),a(".new-customer").hide());var c=a("#edd-new-customer");a(".new-customer").is(":visible")?c.val(1):c.val(0)})},add_download:function(){a(".edd-edit-purchase-element").on("click","#edd-order-add-download",function(b){b.preventDefault();var c=a("#edd_order_download_select"),d=a("#edd-order-download-quantity"),e=a("#edd-order-download-price"),f=a("#edd-order-download-tax"),g=a(".edd_price_options_select option:selected"),h=c.val(),i=c.find(":selected").text(),j=d.val(),k=e.val(),l=f.val(),m=g.val(),n=g.text();if(h<1)return!1;if(k||(k=0),k=parseFloat(k),isNaN(k))return alert(edd_vars.numeric_item_price),!1;if(l=parseFloat(l),isNaN(l))return alert(edd_vars.numeric_item_tax),!1;if(isNaN(parseInt(j)))return alert(edd_vars.numeric_quantity),!1;n&&(i=i+" - "+n);var o=a("#edd-purchased-files div.row").length,p=a("#edd-purchased-files div.row:last").clone();p.find(".download span").html('<a href="post.php?post='+h+'&action=edit"></a>'),p.find(".download span a").text(i),p.find(".edd-payment-details-download-item-price").val(k.toFixed(edd_vars.currency_decimals)),p.find(".edd-payment-details-download-item-tax").val(l.toFixed(edd_vars.currency_decimals)),p.find("input.edd-payment-details-download-id").val(h),p.find("input.edd-payment-details-download-price-id").val(m);var q=k*j+l;q=q.toFixed(edd_vars.currency_decimals),p.find("span.edd-payment-details-download-amount").text(q),p.find("input.edd-payment-details-download-amount").val(q),p.find("input.edd-payment-details-download-quantity").val(j),p.find("input.edd-payment-details-download-has-log").val(0),p.find(".edd-copy-download-link-wrapper").remove(),p.find("input").each(function(){var b=a(this).attr("name");b=b.replace(/\[(\d+)\]/,"["+parseInt(o)+"]"),a(this).attr("name",b).attr("id",b)}),p.find("a.edd-order-remove-download").attr("data-key",parseInt(o)),a("#edd-payment-downloads-changed").val(1),a(p).insertAfter("#edd-purchased-files div.row:last"),a(".edd-order-payment-recalc-totals").show(),a(".edd-add-download-field").val("")})},edit_price:function(){a(document.body).on("change keyup",".edd-payment-item-input",function(){var b=a(this).parents("ul.edd-purchased-files-list-wrapper");a(".edd-order-payment-recalc-totals").show();var c=b.find("input.edd-payment-details-download-quantity").val(),d=b.find("input.edd-payment-details-download-item-price").val(),e=b.find("input.edd-payment-details-download-item-tax").val();if(d=parseFloat(d),isNaN(d))return alert(edd_vars.numeric_item_price),!1;e=parseFloat(e),isNaN(e)&&(e=0),isNaN(parseInt(c))&&(c=1);var f=d*c+e;f=f.toFixed(edd_vars.currency_decimals),b.find("input.edd-payment-details-download-amount").val(f),b.find("span.edd-payment-details-download-amount").text(f)})},recalculate_total:function(){a("#edd-order-recalc-total").on("click",function(b){b.preventDefault();var c=0,d=0,e=a("#edd-purchased-files .row input.edd-payment-details-download-amount"),f=a("#edd-purchased-files .row input.edd-payment-details-download-item-tax");e.length&&e.each(function(){c+=parseFloat(a(this).val())}),f.length&&f.each(function(){d+=parseFloat(a(this).val())}),a(".edd-payment-fees").length&&a(".edd-payment-fees span.fee-amount").each(function(){c+=parseFloat(a(this).data("fee"))}),a("input[name=edd-payment-total]").val(c.toFixed(edd_vars.currency_decimals)),a("input[name=edd-payment-tax]").val(d.toFixed(edd_vars.currency_decimals))})},variable_prices_check:function(){a(".edd-edit-purchase-element").on("change","select#edd_order_download_select",function(){var b=a(this),c=b.val();if(parseInt(c)>0){var d={action:"edd_check_for_download_price_variations",download_id:c};a.ajax({type:"POST",data:d,url:ajaxurl,success:function(c){a(".edd_price_options_select").remove(),a(c).insertAfter(b.next())}}).fail(function(a){window.console&&window.console.log&&console.log(a)})}})},add_note:function(){a("#edd-add-payment-note").on("click",function(b){b.preventDefault();var c={action:"edd_insert_payment_note",payment_id:a(this).data("payment-id"),note:a("#edd-payment-note").val()};if(c.note)a.ajax({type:"POST",data:c,url:ajaxurl,success:function(b){a("#edd-payment-notes-inner").append(b),a(".edd-no-payment-notes").hide(),a("#edd-payment-note").val("")}}).fail(function(a){window.console&&window.console.log&&console.log(a)});else{var d=a("#edd-payment-note").css("border-color");a("#edd-payment-note").css("border-color","red"),setTimeout(function(){a("#edd-payment-note").css("border-color",d)},500)}})},remove_note:function(){a(document.body).on("click",".edd-delete-payment-note",function(b){if(b.preventDefault(),confirm(edd_vars.delete_payment_note)){var c={action:"edd_delete_payment_note",payment_id:a(this).data("payment-id"),note_id:a(this).data("note-id")};return a.ajax({type:"POST",data:c,url:ajaxurl,success:function(b){return a("#edd-payment-note-"+c.note_id).remove(),a(".edd-payment-note").length||a(".edd-no-payment-notes").show(),!1}}).fail(function(a){window.console&&window.console.log&&console.log(a)}),!0}})},resend_receipt:function(){var b=a(".edd-order-resend-receipt-addresses");a(document.body).on("click","#edd-select-receipt-email",function(a){a.preventDefault(),b.slideDown()}),a(document.body).on("change",".edd-order-resend-receipt-email",function(){var b=a("#edd-select-receipt-email").prop("href")+"&email="+a(this).val();confirm(edd_vars.resend_receipt)&&(window.location=b)}),a(document.body).on("click","#edd-resend-receipt",function(a){return confirm(edd_vars.resend_receipt)})},copy_download_link:function(){a(document.body).on("click",".edd-copy-download-link",function(b){b.preventDefault();var c=a(this),d={action:"edd_get_file_download_link",payment_id:a('input[name="edd_payment_id"]').val(),download_id:c.data("download-id"),price_id:c.data("price-id")};a.ajax({type:"POST",data:d,url:ajaxurl,success:function(b){return a("#edd-download-link").dialog({width:400}).html('<textarea rows="10" cols="40" id="edd-download-link-textarea">'+b+"</textarea>"),a("#edd-download-link-textarea").focus().select(),!1}}).fail(function(a){window.console&&window.console.log&&console.log(a)})})}}).init(),{init:function(){this.type_select(),this.product_requirements()},type_select:function(){a("#edd-edit-discount #edd-type, #edd-add-discount #edd-type").change(function(){var b=a(this).val();a(".edd-amount-description").hide(),a(".edd-amount-description."+b+"-discount").show()})},product_requirements:function(){a("#products").change(function(){var b=a("#edd-discount-product-conditions");a(this).val()?b.show():b.hide()})}}.init(),{init:function(){this.date_options(),this.customers_export()},date_options:function(){a("#edd-graphs-date-options").change(function(){var b=a(this),c=a("#edd-date-range-options");"other"===b.val()?c.show():c.hide()})},customers_export:function(){a("#edd_customer_export_download").change(function(){var b=a(this),c=a("option:selected",b).val(),d=a("#edd_customer_export_option");if("0"===b.val()?d.show():d.hide(),0!=parseInt(c)){var e={action:"edd_check_for_download_price_variations",download_id:c,all_prices:!0},f=a(".edd_price_options_select");a.post(ajaxurl,e,function(b){f.remove(),a("#edd_customer_export_download_chosen").after(b)})}else f.remove()})}}.init(),{init:function(){this.general(),this.taxes(),this.emails(),this.misc()},general:function(){var b=a(".edd-color-picker");if(b.length&&b.wpColorPicker(),"undefined"==typeof wp||"1"!==edd_vars.new_media_ui){var c=a(".edd_settings_upload_button");c.length>0&&(window.formfield="",a(document.body).on("click",c,function(b){b.preventDefault(),window.formfield=a(this).parent().prev(),window.tbframe_interval=setInterval(function(){jQuery("#TB_iframeContent").contents().find(".savesend .button").val(edd_vars.use_this_file).end().find("#insert-gallery, .wp-post-thumbnail").hide()},2e3),tb_show(edd_vars.add_new_download,"media-upload.php?TB_iframe=true")}),window.edd_send_to_editor=window.send_to_editor,window.send_to_editor=function(b){window.formfield?(imgurl=a("a","<div>"+b+"</div>").attr("href"),window.formfield.val(imgurl),window.clearInterval(window.tbframe_interval),tb_remove()):window.edd_send_to_editor(b),window.send_to_editor=window.edd_send_to_editor,window.formfield="",window.imagefield=!1})}else{var d;window.formfield="",a(document.body).on("click",".edd_settings_upload_button",function(b){b.preventDefault();var c=a(this);if(window.formfield=a(this).parent().prev(),d)return void d.open();d=wp.media.frames.file_frame=wp.media({frame:"post",state:"insert",title:c.data("uploader_title"),button:{text:c.data("uploader_button_text")},multiple:!1}),d.on("menu:render:default",function(a){var b={};a.unset("library-separator"),a.unset("gallery"),a.unset("featured-image"),a.unset("embed"),a.set(b)}),d.on("insert",function(){d.state().get("selection").each(function(a,b){a=a.toJSON(),window.formfield.val(a.url)})}),d.open()});var d;window.formfield=""}},taxes:function(){var b=a("select.edd-no-states");b.length&&b.closest("tr").hide(),a('select[name="edd_settings[base_country]"]').change(function(){var b=a(this),c=b.closest("tr"),d={action:"edd_get_shop_states",country:a(this).val(),field_name:"edd_settings[base_state]"};return a.post(ajaxurl,d,function(a){"nostates"==a?c.next().hide():(c.next().show(),c.next().find("select").replaceWith(a))}),!1}),a(document.body).on("change","#edd_tax_rates select.edd-tax-country",function(){var b=a(this),c={action:"edd_get_shop_states",country:a(this).val(),field_name:b.attr("name").replace("country","state")};return a.post(ajaxurl,c,function(a){if("nostates"==a){var d='<input type="text" name="'+c.field_name+'" value=""/>';b.parent().next().find("select").replaceWith(d)}else b.parent().next().find("input,select").show(),b.parent().next().find("input,select").replaceWith(a)}),!1}),a("#edd_add_tax_rate").on("click",function(){var b=a("#edd_tax_rates tr:last"),c=b.clone(),d=b.parent().find("tr").length;return c.find("td input").not(":input[type=checkbox]").val(""),c.find('td [type="checkbox"]').attr("checked",!1),c.find("input, select").each(function(){var b=a(this).attr("name");b=b.replace(/\[(\d+)\]/,"["+parseInt(d)+"]"),a(this).attr("name",b).attr("id",b)}),c.find("label").each(function(){var b=a(this).attr("for");b=b.replace(/\[(\d+)\]/,"["+parseInt(d)+"]"),a(this).attr("for",b)}),c.insertAfter(b),!1}),a(document.body).on("click","#edd_tax_rates .edd_remove_tax_rate",function(){if(confirm(edd_vars.delete_tax_rate)){2===a("#edd_tax_rates tr:visible").length?(a("#edd_tax_rates select").val(""),a('#edd_tax_rates input[type="text"]').val(""),a('#edd_tax_rates input[type="number"]').val(""),a('#edd_tax_rates input[type="checkbox"]').attr("checked",!1)):a(this).closest("tr").remove(),a("#edd_tax_rates tr").each(function(b){a(this).children().find("input, select").each(function(){var c=a(this).attr("name");c=c.replace(/\[(\d+)\]/,"["+(b-1)+"]"),a(this).attr("name",c).attr("id",c)})})}return!1})},emails:function(){var b=a("#email-preview-wrap");if(b.length){var c=a("#email-preview");b.colorbox({inline:!0,href:c,width:"80%",height:"auto"})}},misc:function(){var b=a('select[name="edd_settings[download_method]"]'),c=b.parent().parent().next();"direct"==b.val()&&(c.hide(),c.find("input").prop("checked",!1)),b.on("change",function(){"direct"==a(this).val()?(c.hide(),c.find("input").prop("checked",!1)):c.show()})}}.init(),a(".download_page_edd-payment-history .row-actions .delete a, a.edd-delete-payment").on("click",function(){return!!confirm(edd_vars.delete_payment)}),a("#the-list").on("click",".editinline",function(){var b=a(this).closest("tr").attr("id");b=b.replace("post-","");var c=a("#post-"+b),d=c.find(".column-price .downloadprice-"+b).val();d!=a("#post-"+b+".column-price .downloadprice-"+b).val()?a(".regprice","#edd-download-data").val(d).attr("disabled",!1):a(".regprice","#edd-download-data").val(edd_vars.quick_edit_warning).attr("disabled","disabled")}),a(document.body).on("click","#bulk_edit",function(){var b=a("#bulk-edit"),c=new Array;b.find("#bulk-titles").children().each(function(){c.push(a(this).attr("id").replace(/^(ttle)/i,""))});var d=a('#edd-download-data input[name="_edd_regprice"]').val(),e={action:"edd_save_bulk_edit",edd_bulk_nonce:c,post_ids:c,price:d};a.post(ajaxurl,e)}),a(".edd-select-chosen").chosen({inherit_select_classes:!0,placeholder_text_single:edd_vars.one_option,placeholder_text_multiple:edd_vars.one_or_more_option}),a(".edd-select-chosen .chosen-search input").each(function(){var b=a(this).parent().parent().parent().prev("select.edd-select-chosen").data("search-type"),c="";if("download"===b)c=edd_vars.search_placeholder;else{var b="search_placeholder_"+b;edd_vars[b]&&(c=edd_vars[b])}a(this).attr("placeholder",c)}),a(".chosen-choices").on("click",function(){a(this).children("li").children("input").attr("placeholder",edd_vars.type_to_search)});var i;a(document.body).on("keyup",".edd-select.chosen-container .chosen-search input, .edd-select.chosen-container .search-field input",function(b){var c=a(this).val(),d=a(this).closest(".edd-select-chosen"),f=(d.attr("id").replace("_chosen",""),d.prev()),g=d.hasClass("no-bundles"),h=d.hasClass("variations"),k=b.which,l="edd_download_search";if(d.prev().data("search-type")){if("no_ajax"==f.data("search-type"))return;l="edd_"+f.data("search-type")+"_search"}c.length<=3&&"edd_download_search"==l||16==k||13==k||91==k||17==k||37==k||38==k||39==k||40==k||(clearTimeout(i),i=setTimeout(function(){a.ajax({type:"GET",url:ajaxurl,data:{action:l,s:c,no_bundles:g,variations:h},dataType:"json",beforeSend:function(){f.closest("ul.chosen-results").empty()},success:function(b){a("option:not(:selected)",f).remove(),a.each(b,function(b,c){a('option[value="'+c.id+'"]',f).length||f.prepend('<option value="'+c.id+'">'+c.name+"</option>")}),a(".edd-select-chosen").trigger("chosen:updated"),f.next().find("input").val(c)}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){})},342))}),a("#post").on("click",".edd-thickbox",function(){a(".edd-select-chosen","#choose-download").css("width","100%")}),{init:function(){this.revoke_api_key(),this.regenerate_api_key(),this.create_api_key(),this.recount_stats()},revoke_api_key:function(){a(document.body).on("click",".edd-revoke-api-key",function(a){return confirm(edd_vars.revoke_api_key)})},regenerate_api_key:function(){a(document.body).on("click",".edd-regenerate-api-key",function(a){return confirm(edd_vars.regenerate_api_key)})},create_api_key:function(){a(document.body).on("submit","#api-key-generate-form",function(b){var c=a('input[type="text"][name="user_id"]');c.css("border-color","#ddd");var d=c.val();if(d.length<1||0==d)return c.css("border-color","#ff0000"),!1})},recount_stats:function(){a("body").on("change","#recount-stats-type",function(){var b=a("#edd-tools-recount-form"),c=a("option:selected",this).data("type"),d=a("#recount-stats-submit"),e=a("#tools-product-dropdown");if(b.find(".notice-wrap").remove(),d.removeClass("button-disabled").attr("disabled",!1),e.hide(),a(".edd-recount-stats-descriptions span").hide(),"recount-download"===c)e.show(),e.find(".edd-select-chosen").css("width","auto");else if("reset-stats"===c){b.append('<div class="notice-wrap"></div>');var f=b.find(".notice-wrap");f.html('<div class="notice notice-warning"><p><input type="checkbox" id="confirm-reset" name="confirm_reset_store" value="1" /> <label for="confirm-reset">'+edd_vars.reset_stats_warn+"</label></p></div>"),a("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}else e.hide(),e.val(0);a("#"+c).show()}),a("body").on("change","#confirm-reset",function(){a(this).is(":checked")?a("#recount-stats-submit").removeClass("button-disabled").removeAttr("disabled"):a("#recount-stats-submit").addClass("button-disabled").attr("disabled","disabled")}),a("#edd-tools-recount-form").submit(function(b){var c=a("#recount-stats-type").val(),d=a(this),e=a("option:selected",this).data("type");if("reset-stats"===e){if(a("#confirm-reset").is(":checked"))return!0;h=!0}d.find(".notice-wrap").remove(),d.append('<div class="notice-wrap"></div>');var g=d.find(".notice-wrap"),h=!1;if(null!==c&&0!==c||(g.html('<div class="updated error"><p>'+edd_vars.batch_export_no_class+"</p></div>"),h=!0),"recount-download"===e){0==a('select[name="download_id"]').val()&&(g.html('<div class="updated error"><p>'+edd_vars.batch_export_no_reqs+"</p></div>"),h=!0)}if(h)return d.find(".button-disabled").removeClass("button-disabled"),!1})}}.init(),{init:function(){this.submit(),this.dismiss_message()},submit:function(){var b=this;a(document.body).on("submit",".edd-export-form",function(c){c.preventDefault();var d=a(this).find('input[type="submit"]');if(!d.hasClass("button-disabled")){var e=a(this).serialize();d.addClass("button-disabled"),a(this).find(".notice-wrap").remove(),a(this).append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),b.process_step(1,e,b)}})},process_step:function(b,c,d){a.ajax({type:"POST",url:ajaxurl,data:{form:c,action:"edd_do_ajax_export",step:b},dataType:"json",success:function(b){if("done"==b.step||b.error||b.success){var e=a(".edd-export-form").find(".edd-progress").parent().parent(),f=e.find(".notice-wrap");if(e.find(".button-disabled").removeClass("button-disabled"),b.error){var g=b.message;f.html('<div class="updated error"><p>'+g+"</p></div>")}else if(b.success){var h=b.message;f.html('<div id="edd-batch-success" class="updated notice is-dismissible"><p>'+h+'<span class="notice-dismiss"></span></p></div>')}else f.remove(),window.location=b.url}else a(".edd-progress div").animate({width:b.percentage+"%"},50,function(){}),d.process_step(parseInt(b.step),c,d)}}).fail(function(a){window.console&&window.console.log&&console.log(a)})},dismiss_message:function(){a("body").on("click","#edd-batch-success .notice-dismiss",function(){a("#edd-batch-success").parent().slideUp("fast")})}}.init();var m={init:function(){this.submit()},submit:function(){var b=this;a(".edd-import-form").ajaxForm({beforeSubmit:b.before_submit,success:b.success,complete:b.complete,dataType:"json",error:b.error})},before_submit:function(b,c,d){if(c.find(".notice-wrap").remove(),c.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),!(window.File&&window.FileReader&&window.FileList&&window.Blob)){var e=a(".edd-import-form").find(".edd-progress").parent().parent(),f=e.find(".notice-wrap");return e.find(".button-disabled").removeClass("button-disabled"),f.html('<div class="update error"><p>'+edd_vars.unsupported_browser+"</p></div>"),!1}},success:function(a,b,c,d){},complete:function(b){var c=jQuery.parseJSON(b.responseText);if(c.success){var d=a(".edd-import-form .notice-wrap").parent();d.find(".edd-import-file-wrap,.notice-wrap").remove(),d.find(".edd-import-options").slideDown();var e=d.find("select.edd-import-csv-column"),g=(e.parent().parent(),""),h=c.data.columns.sort(function(a,b){return a<b?-1:a>b?1:0});a.each(h,function(a,b){g+='<option value="'+b+'">'+b+"</option>"}),e.append(g),e.on("change",function(){var b=a(this).val();b&&0!=c.data.first_row[b]?a(this).parent().next().html(c.data.first_row[b]):a(this).parent().next().html("")}),a("body").on("click",".edd-import-proceed",function(a){a.preventDefault(),d.append('<div class="notice-wrap"><span class="spinner is-active"></span><div class="edd-progress"><div></div></div></div>'),c.data.mapping=d.serialize(),m.process_step(1,c.data,self)})}else m.error(b)},error:function(b){var c=jQuery.parseJSON(b.responseText),d=a(".edd-import-form").find(".edd-progress").parent().parent(),e=d.find(".notice-wrap");d.find(".button-disabled").removeClass("button-disabled"),c.data.error?e.html('<div class="update error"><p>'+c.data.error+"</p></div>"):e.remove()},process_step:function(b,c,d){a.ajax({type:"POST",url:ajaxurl,data:{form:c.form,nonce:c.nonce,class:c.class,upload:c.upload,mapping:c.mapping,action:"edd_do_ajax_import",step:b},dataType:"json",success:function(b){if("done"==b.data.step||b.data.error){var e=a(".edd-import-form").find(".edd-progress").parent().parent(),f=e.find(".notice-wrap");e.find(".button-disabled").removeClass("button-disabled"),b.data.error?f.html('<div class="update error"><p>'+b.data.error+"</p></div>"):(e.find(".edd-import-options").hide(),a("html, body").animate({scrollTop:e.parent().offset().top},500),f.html('<div class="updated"><p>'+b.data.message+"</p></div>"))}else a(".edd-progress div").animate({width:b.data.percentage+"%"},50,function(){}),m.process_step(parseInt(b.data.step),c,d)}}).fail(function(a){window.console&&window.console.log&&console.log(a)})}};m.init();var n={vars:{customer_card_wrap_editable:a(".edd-customer-card-wrapper .editable"),customer_card_wrap_edit_item:a(".edd-customer-card-wrapper .edit-item"),user_id:a('input[name="customerinfo[user_id]"]'),state_input:a(':input[name="customerinfo[state]"]'),note:a("#customer-note")},init:function(){this.edit_customer(),this.add_email(),this.user_search(),this.remove_user(),this.cancel_edit(),this.change_country(),this.add_note(),this.delete_checked()},edit_customer:function(){a(document.body).on("click","#edit-customer",function(a){a.preventDefault(),n.vars.customer_card_wrap_editable.hide(),n.vars.customer_card_wrap_edit_item.fadeIn().css("display","block")})},add_email:function(){a(document.body).on("click","#add-customer-email",function(b){b.preventDefault();var c=a(this),d=c.parent();d.parent().find(".notice-wrap").remove(),d.find(".spinner").css("visibility","visible"),c.attr("disabled",!0);var e=d.find('input[name="customer-id"]').val(),f=d.find('input[name="additional-email"]').val(),g=d.find('input[name="make-additional-primary"]').is(":checked"),h=d.find('input[name="add_email_nonce"]').val(),i={edd_action:"customer-add-email",customer_id:e,email:f,primary:g,_wpnonce:h};a.post(ajaxurl,i,function(a){!0===a.success?window.location.href=a.redirect:(c.attr("disabled",!1),d.after('<div class="notice-wrap"><div class="notice notice-error inline"><p>'+a.message+"</p></div></div>"),d.find(".spinner").css("visibility","hidden"))},"json")})},user_search:function(){a(document.body).on("click.eddSelectUser",".edd_user_search_results a",function(b){b.preventDefault();var c=a(this).data("userid");n.vars.user_id.val(c)})},remove_user:function(){a(document.body).on("click","#disconnect-customer",function(b){b.preventDefault();var c=a('input[name="customerinfo[id]"]').val(),d={edd_action:"disconnect-userid",customer_id:c,_wpnonce:a("#edit-customer-info #_wpnonce").val()};a.post(ajaxurl,d,function(a){window.location.href=window.location.href},"json")})},cancel_edit:function(){a(document.body).on("click","#edd-edit-customer-cancel",function(b){b.preventDefault(),n.vars.customer_card_wrap_edit_item.hide(),n.vars.customer_card_wrap_editable.show(),a(".edd_user_search_results").html("")})},change_country:function(){a('select[name="customerinfo[country]"]').change(function(){var b=a(this),c={action:"edd_get_shop_states",country:b.val(),field_name:"customerinfo[state]"};return a.post(ajaxurl,c,function(a){"nostates"==a?n.vars.state_input.replaceWith('<input type="text" name="'+c.field_name+'" value="" class="edd-edit-toggles medium-text"/>'):n.vars.state_input.replaceWith(a)}),!1})},add_note:function(){a(document.body).on("click","#add-customer-note",function(b){b.preventDefault();var c={edd_action:"add-customer-note",customer_id:a("#customer-id").val(),customer_note:n.vars.note.val(),add_customer_note_nonce:a("#add_customer_note_nonce").val()};if(c.customer_note)a.ajax({type:"POST",data:c,url:ajaxurl,success:function(b){a("#edd-customer-notes").prepend(b),a(".edd-no-customer-notes").hide(),n.vars.note.val("")}}).fail(function(a){window.console&&window.console.log&&console.log(a)});else{var d=n.vars.note.css("border-color");n.vars.note.css("border-color","red"),setTimeout(function(){n.vars.note.css("border-color",d)},500)}})},delete_checked:function(){a("#edd-customer-delete-confirm").change(function(){var b=a("#edd-customer-delete-records"),c=a("#edd-delete-customer");a(this).prop("checked")?(b.attr("disabled",!1),c.attr("disabled",!1)):(b.attr("disabled",!0),b.prop("checked",!1),c.attr("disabled",!0))})}};n.init(),a(".edd-ajax-user-search").keyup(function(){var b=a(this).val(),c="";a(this).data("exclude")&&(c=a(this).data("exclude")),a(".edd-ajax").show();var d={action:"edd_search_users",user_name:b,exclude:c};document.body.style.cursor="wait",a.ajax({type:"POST",data:d,dataType:"json",url:ajaxurl,success:function(b){a(".edd-ajax").hide(),a(".edd_user_search_results").removeClass("hidden"),a(".edd_user_search_results span").html(""),a(b.results).appendTo(".edd_user_search_results span"),document.body.style.cursor="default"}})}),a(document.body).on("click.eddSelectUser",".edd_user_search_results span a",function(b){b.preventDefault();var c=a(this).data("login");a(".edd-ajax-user-search").val(c),a(".edd_user_search_results").addClass("hidden"),a(".edd_user_search_results span").html("")}),a(document.body).on("click.eddCancelUserSearch",".edd_user_search_results a.edd-ajax-user-cancel",function(b){b.preventDefault(),a(".edd-ajax-user-search").val(""),a(".edd_user_search_results").addClass("hidden"),a(".edd_user_search_results span").html("")}),a("#edd_dashboard_sales").length&&a.ajax({type:"GET",data:{action:"edd_load_dashboard_widget"},url:ajaxurl,success:function(b){a("#edd_dashboard_sales .inside").html(b)}}),a(document).on("keydown",".customer-note-input",function(b){13==b.keyCode&&(b.metaKey||b.ctrlKey)&&a("#add-customer-note").click()})});var eddFormatCurrency=function(a){var b=parseFloat(a),c=edd_vars.currency,d=edd_vars.currency_decimals;return b.toLocaleString(c,{style:"currency",currency:c,minimumFractionDigits:d,maximumFractionDigits:d})},eddFormatNumber=function(a){var b=parseFloat(a),c=edd_vars.currency;edd_vars.currency_decimals;return b.toLocaleString(c,{style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0})},eddLabelFormatter=function(a,b){return'<div style="font-size:12px; text-align:center; padding:2px">'+a+"</div>"},eddLegendFormatterSales=function(a,b){var c=a.toLowerCase().replace(/\s/g,"-"),d='<div class="edd-legend-color" style="background-color: '+b.color+'"></div>',e='<div class="edd-pie-legend-item">'+a+": "+Math.round(b.percent)+"% ("+eddFormatNumber(b.data[0][1])+")</div>",f='<div id="'+b.edd_vars.id+c+'" class="edd-legend-item-wrapper">'+d+e+"</div>";return jQuery("#edd-pie-legend-"+b.edd_vars.id).append(f),f},eddLegendFormatterEarnings=function(a,b){var c=a.toLowerCase().replace(/\s/g,"-"),d='<div class="edd-legend-color" style="background-color: '+b.color+'"></div>',e='<div class="edd-pie-legend-item">'+a+": "+Math.round(b.percent)+"% ("+eddFormatCurrency(b.data[0][1])+")</div>",f='<div id="'+b.edd_vars.id+c+'" class="edd-legend-item-wrapper">'+d+e+"</div>";return jQuery("#edd-pie-legend-"+b.edd_vars.id).append(f),f};
 
assets/js/edd-ajax.js CHANGED
@@ -6,7 +6,7 @@ jQuery(document).ready(function ($) {
6
  $('a.edd-add-to-cart').addClass('edd-has-js');
7
 
8
  // Send Remove from Cart requests
9
- $(document.body).on('click.eddRemoveFromCart', '.edd-remove-from-cart', function (event) {
10
  var $this = $(this),
11
  item = $this.data('cart-item'),
12
  action = $this.data('action'),
@@ -57,7 +57,7 @@ jQuery(document).ready(function ($) {
57
  }
58
 
59
  $('span.edd-cart-quantity').text( response.cart_quantity );
60
- $(document.body).trigger('edd_quantity_updated', [ response.cart_quantity ]);
61
  if ( edd_scripts.taxes_enabled ) {
62
  $('.cart_item.edd_subtotal span').html( response.subtotal );
63
  $('.cart_item.edd_cart_tax span').html( response.tax );
@@ -79,7 +79,7 @@ jQuery(document).ready(function ($) {
79
  });
80
  }
81
 
82
- $(document.body).trigger('edd_cart_item_removed', [ response ]);
83
  }
84
  }
85
  }).fail(function (response) {
@@ -94,7 +94,7 @@ jQuery(document).ready(function ($) {
94
  });
95
 
96
  // Send Add to Cart request
97
- $(document.body).on('click.eddAddToCart', '.edd-add-to-cart', function (e) {
98
 
99
  e.preventDefault();
100
 
@@ -230,7 +230,7 @@ jQuery(document).ready(function ($) {
230
 
231
  $('span.edd-cart-quantity').each(function() {
232
  $(this).text(response.cart_quantity);
233
- $(document.body).trigger('edd_quantity_updated', [ response.cart_quantity ]);
234
  });
235
 
236
  // Show the "number of items in cart" message
@@ -270,7 +270,7 @@ jQuery(document).ready(function ($) {
270
  // Re-enable the add to cart button
271
  $this.prop('disabled', false);
272
 
273
- $(document.body).trigger('edd_cart_item_added', [ response ]);
274
 
275
  }
276
  }
@@ -351,33 +351,14 @@ jQuery(document).ready(function ($) {
351
  });
352
 
353
  // Auto load first payment gateway
354
- if( edd_scripts.is_checkout == '1' ) {
355
-
356
- var chosen_gateway = false;
357
- var ajax_needed = false;
358
-
359
- if ( $('select#edd-gateway, input.edd-gateway').length ) {
360
- chosen_gateway = $("meta[name='edd-chosen-gateway']").attr('content');
361
- ajax_needed = true;
362
- }
363
-
364
  if( ! chosen_gateway ) {
365
  chosen_gateway = edd_scripts.default_gateway;
366
  }
367
-
368
- if ( ajax_needed ) {
369
-
370
- // If we need to ajax in a gateway form, send the requests for the POST.
371
- setTimeout( function() {
372
- edd_load_gateway( chosen_gateway );
373
- }, 200);
374
-
375
- } else {
376
-
377
- // The form is already on page, just trigger that the gateway is loaded so further action can be taken.
378
- $('body').trigger('edd_gateway_loaded', [ chosen_gateway ]);
379
-
380
- }
381
  }
382
 
383
  $(document).on('click', '#edd_purchase_form #edd_purchase_submit input[type=submit]', function(e) {
@@ -408,26 +389,20 @@ jQuery(document).ready(function ($) {
408
  $('.edd-loading-ajax').remove();
409
  $('.edd_errors').remove();
410
  $('.edd-error').hide();
411
- $( edd_global_vars.checkout_error_anchor ).before(data);
412
  $('#edd-purchase-button').prop( 'disabled', false );
413
-
414
- $(document.body).trigger( 'edd_checkout_error', [ data ] );
415
  }
416
  });
417
 
418
  });
419
 
420
- $(document.body).on('change', '#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country', update_state_field);
421
 
422
  function update_state_field() {
423
 
424
  var $this = $(this);
425
  var $form;
426
  var is_checkout = typeof edd_global_vars !== 'undefined';
427
- var field_name = 'card_state';
428
- if ( $(this).attr('id') == 'edd_address_country' ) {
429
- field_name = 'edd_address_state';
430
- }
431
 
432
  if( 'card_state' != $this.attr('id') ) {
433
 
@@ -435,7 +410,7 @@ jQuery(document).ready(function ($) {
435
  var postData = {
436
  action: 'edd_get_shop_states',
437
  country: $this.val(),
438
- field_name: field_name,
439
  };
440
 
441
  $.ajax({
@@ -462,7 +437,7 @@ jQuery(document).ready(function ($) {
462
  }
463
 
464
  if ( is_checkout ) {
465
- $(document.body).trigger('edd_cart_billing_address_updated', [ response ]);
466
  }
467
 
468
  }
@@ -485,7 +460,7 @@ jQuery(document).ready(function ($) {
485
  }
486
 
487
  // If is_checkout, recalculate sales tax on postalCode change.
488
- $(document.body).on('change', '#edd_cc_address input[name=card_zip]', function () {
489
  if (typeof edd_global_vars !== 'undefined') {
490
  recalculate_taxes();
491
  }
6
  $('a.edd-add-to-cart').addClass('edd-has-js');
7
 
8
  // Send Remove from Cart requests
9
+ $('body').on('click.eddRemoveFromCart', '.edd-remove-from-cart', function (event) {
10
  var $this = $(this),
11
  item = $this.data('cart-item'),
12
  action = $this.data('action'),
57
  }
58
 
59
  $('span.edd-cart-quantity').text( response.cart_quantity );
60
+ $('body').trigger('edd_quantity_updated', [ response.cart_quantity ]);
61
  if ( edd_scripts.taxes_enabled ) {
62
  $('.cart_item.edd_subtotal span').html( response.subtotal );
63
  $('.cart_item.edd_cart_tax span').html( response.tax );
79
  });
80
  }
81
 
82
+ $('body').trigger('edd_cart_item_removed', [ response ]);
83
  }
84
  }
85
  }).fail(function (response) {
94
  });
95
 
96
  // Send Add to Cart request
97
+ $('body').on('click.eddAddToCart', '.edd-add-to-cart', function (e) {
98
 
99
  e.preventDefault();
100
 
230
 
231
  $('span.edd-cart-quantity').each(function() {
232
  $(this).text(response.cart_quantity);
233
+ $('body').trigger('edd_quantity_updated', [ response.cart_quantity ]);
234
  });
235
 
236
  // Show the "number of items in cart" message
270
  // Re-enable the add to cart button
271
  $this.prop('disabled', false);
272
 
273
+ $('body').trigger('edd_cart_item_added', [ response ]);
274
 
275
  }
276
  }
351
  });
352
 
353
  // Auto load first payment gateway
354
+ if( edd_scripts.is_checkout == '1' && $('select#edd-gateway, input.edd-gateway').length ) {
355
+ var chosen_gateway = $("meta[name='edd-chosen-gateway']").attr('content');
 
 
 
 
 
 
 
 
356
  if( ! chosen_gateway ) {
357
  chosen_gateway = edd_scripts.default_gateway;
358
  }
359
+ setTimeout( function() {
360
+ edd_load_gateway( chosen_gateway );
361
+ }, 200);
 
 
 
 
 
 
 
 
 
 
 
362
  }
363
 
364
  $(document).on('click', '#edd_purchase_form #edd_purchase_submit input[type=submit]', function(e) {
389
  $('.edd-loading-ajax').remove();
390
  $('.edd_errors').remove();
391
  $('.edd-error').hide();
392
+ $('#edd_purchase_submit').before(data);
393
  $('#edd-purchase-button').prop( 'disabled', false );
 
 
394
  }
395
  });
396
 
397
  });
398
 
399
+ $('body').on('change', '#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country', update_state_field);
400
 
401
  function update_state_field() {
402
 
403
  var $this = $(this);
404
  var $form;
405
  var is_checkout = typeof edd_global_vars !== 'undefined';
 
 
 
 
406
 
407
  if( 'card_state' != $this.attr('id') ) {
408
 
410
  var postData = {
411
  action: 'edd_get_shop_states',
412
  country: $this.val(),
413
+ field_name: 'card_state'
414
  };
415
 
416
  $.ajax({
437
  }
438
 
439
  if ( is_checkout ) {
440
+ $('body').trigger('edd_cart_billing_address_updated', [ response ]);
441
  }
442
 
443
  }
460
  }
461
 
462
  // If is_checkout, recalculate sales tax on postalCode change.
463
+ $('body').on('change', '#edd_cc_address input[name=card_zip]', function () {
464
  if (typeof edd_global_vars !== 'undefined') {
465
  recalculate_taxes();
466
  }
assets/js/edd-ajax.min.js CHANGED
@@ -1 +1 @@
1
- function edd_load_gateway(e){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var d=edd_scripts.ajaxurl;d+=d.indexOf("?")>0?"&":"?",d=d+"payment-mode="+e,jQuery.post(d,{action:"edd_load_gateway",edd_payment_mode:e},function(d){jQuery("#edd_purchase_form_wrap").html(d),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[e])})}var edd_scripts;jQuery(document).ready(function(e){function d(){var d,t=e(this),a="undefined"!=typeof edd_global_vars,r="card_state";if("edd_address_country"==e(this).attr("id")&&(r="edd_address_state"),"card_state"!=t.attr("id")){var i={action:"edd_get_shop_states",country:t.val(),field_name:r};e.ajax({type:"POST",data:i,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(r){d=a?e("#edd_purchase_form"):t.closest("form");var i='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==e.trim(r)){var o='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';d.find(i).replaceWith(o)}else d.find(i).replaceWith(r);a&&e(document.body).trigger("edd_cart_billing_address_updated",[r])}}).fail(function(e){window.console&&window.console.log&&console.log(e)}).done(function(e){a&&recalculate_taxes()})}else a&&recalculate_taxes();return!1}if(e(".edd-no-js").hide(),e("a.edd-add-to-cart").addClass("edd-has-js"),e(document.body).on("click.eddRemoveFromCart",".edd-remove-from-cart",function(d){var t=e(this),a=t.data("cart-item"),r=t.data("action"),i=t.data("download-id"),o={action:r,cart_item:a};return e.ajax({type:"POST",data:o,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(d){if(d.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(a,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;e(".edd-cart").each(function(){e(this).find("[data-cart-item='"+a+"']").parent().remove()}),e(".edd-cart").each(function(){var d=0;e(this).find("[data-cart-item]").each(function(){e(this).attr("data-cart-item",d),d+=1})}),e("[id^=edd_purchase_"+i+"]").length&&(e("[id^=edd_purchase_"+i+"] .edd_go_to_checkout").hide(),e("[id^=edd_purchase_"+i+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&e("[id^=edd_purchase_"+i+"] .edd_download_quantity_wrapper").show()),e("span.edd-cart-quantity").text(d.cart_quantity),e(document.body).trigger("edd_quantity_updated",[d.cart_quantity]),edd_scripts.taxes_enabled&&(e(".cart_item.edd_subtotal span").html(d.subtotal),e(".cart_item.edd_cart_tax span").html(d.tax)),e(".cart_item.edd_total span").html(d.total),0==d.cart_quantity&&(e(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),e(".edd-cart").each(function(){var d=e(this).parent();d&&(d.addClass("cart-empty"),d.removeClass("cart-not-empty")),e(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),e(document.body).trigger("edd_cart_item_removed",[d])}}}).fail(function(e){window.console&&window.console.log&&console.log(e)}).done(function(e){}),!1}),e(document.body).on("click.eddAddToCart",".edd-add-to-cart",function(d){d.preventDefault();var t=e(this),a=t.closest("form");t.prop("disabled",!0);var r=(t.find(".edd-loading"),t.closest("div"));t.attr("data-edd-loading","");var a=t.parents("form").last(),i=t.data("download-id"),o=t.data("variable-price"),c=t.data("price-mode"),n=[],s=!0;if("yes"==o)if(a.find(".edd_price_option_"+i+'[type="hidden"]').length>0)n[0]=e(".edd_price_option_"+i,a).val(),a.find(".edd-submit").data("price")&&a.find(".edd-submit").data("price")>0&&(s=!1);else{if(!a.find(".edd_price_option_"+i+":checked",a).length)return t.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),d.stopPropagation(),t.prop("disabled",!1),!1;a.find(".edd_price_option_"+i+":checked",a).each(function(d){if(n[d]=e(this).val(),!0===s){var t=e(this).data("price");t&&t>0&&(s=!1)}})}else n[0]=i,t.data("price")&&t.data("price")>0&&(s=!1);if(s&&a.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==a.find(".edd_action_input").val())return a.submit(),!0;var _=t.data("action"),l={action:_,download_id:i,price_ids:n,post_data:e(a).serialize()};return e.ajax({type:"POST",data:l,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(d){var n="1"==edd_scripts.redirect_to_checkout,s="1"==a.find("#edd_redirect_to_checkout").val();if(n&&s||!n&&s)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(e(".cart_item.edd_subtotal").show(),e(".cart_item.edd_cart_tax").show()),e(".cart_item.edd_total").show(),e(".cart_item.edd_checkout").show(),e(".cart_item.empty").length&&e(".cart_item.empty").hide(),e(".widget_edd_cart_widget .edd-cart").each(function(t){var a=e(this).find(".edd-cart-meta:first");e(d.cart_item).insertBefore(a);var r=e(this).parent();r&&(r.addClass("cart-not-empty"),r.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(e(".edd-cart-meta.edd_subtotal span").html(d.subtotal),e(".edd-cart-meta.edd_cart_tax span").html(d.tax)),e(".edd-cart-meta.edd_total span").html(d.total);e(".edd-cart-item-title",d.cart_item).length;if(e("span.edd-cart-quantity").each(function(){e(this).text(d.cart_quantity),e(document.body).trigger("edd_quantity_updated",[d.cart_quantity])}),"none"==e(".edd-cart-number-of-items").css("display")&&e(".edd-cart-number-of-items").show("slow"),("no"==o||"multi"!=c)&&(e("a.edd-add-to-cart",r).toggle(),e(".edd_go_to_checkout",r).css("display","inline-block")),"multi"==c&&t.removeAttr("data-edd-loading"),e(".edd_download_purchase_form").length&&("no"==o||!a.find(".edd_price_option_"+i).is("input:hidden"))){var _=e('.edd_download_purchase_form *[data-download-id="'+i+'"]').parents("form");e("a.edd-add-to-cart",_).hide(),"multi"!=c&&_.find(".edd_download_quantity_wrapper").slideUp(),e(".edd_go_to_checkout",_).show().removeAttr("data-edd-loading")}"incart"!=d&&(e(".edd-cart-added-alert",r).fadeIn(),setTimeout(function(){e(".edd-cart-added-alert",r).fadeOut()},3e3)),t.prop("disabled",!1),e(document.body).trigger("edd_cart_item_added",[d])}}}).fail(function(e){window.console&&window.console.log&&console.log(e)}).done(function(e){}),!1}),e("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var d=e(this),t={action:d.data("action")};return e(".edd-cart-ajax").show(),e.post(edd_scripts.ajaxurl,t,function(d){e("#edd_checkout_login_register").html(edd_scripts.loading),e("#edd_checkout_login_register").html(d),e(".edd-cart-ajax").hide()}),!1}),e(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(d){d.preventDefault();var t=e(this).val();e(this).val(edd_global_vars.purchase_loading),e(this).after('<span class="edd-loading-ajax edd-loading"></span>');var a={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:e("#edd_login_fields #edd_user_login").val(),edd_user_pass:e("#edd_login_fields #edd_user_pass").val()};e.post(edd_global_vars.ajaxurl,a,function(d){"success"==e.trim(d)?(e(".edd_errors").remove(),window.location=edd_scripts.checkout_page):(e("#edd_login_fields input[type=submit]").val(t),e(".edd-loading-ajax").remove(),e(".edd_errors").remove(),e("#edd-user-login-submit").before(d))})}),e("select#edd-gateway, input.edd-gateway").change(function(d){var t=e("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"==t?!1:(edd_load_gateway(t),!1)}),"1"==edd_scripts.is_checkout){var t=!1,a=!1;e("select#edd-gateway, input.edd-gateway").length&&(t=e("meta[name='edd-chosen-gateway']").attr("content"),a=!0),t||(t=edd_scripts.default_gateway),a?setTimeout(function(){edd_load_gateway(t)},200):e("body").trigger("edd_gateway_loaded",[t])}e(document).on("click","#edd_purchase_form #edd_purchase_submit input[type=submit]",function(d){var t=document.getElementById("edd_purchase_form");if("function"!=typeof t.checkValidity||!1!==t.checkValidity()){d.preventDefault();var a=e(this).val();e(this).val(edd_global_vars.purchase_loading),e(this).prop("disabled",!0),e(this).after('<span class="edd-loading-ajax edd-loading"></span>'),e.post(edd_global_vars.ajaxurl,e("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(d){"success"==e.trim(d)?(e(".edd_errors").remove(),e(".edd-error").hide(),e(t).submit()):(e("#edd-purchase-button").val(a),e(".edd-loading-ajax").remove(),e(".edd_errors").remove(),e(".edd-error").hide(),e(edd_global_vars.checkout_error_anchor).before(d),e("#edd-purchase-button").prop("disabled",!1),e(document.body).trigger("edd_checkout_error",[d]))})}}),e(document.body).on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",d),e(document.body).on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
1
+ function edd_load_gateway(a){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var b=edd_scripts.ajaxurl;b+=b.indexOf("?")>0?"&":"?",b=b+"payment-mode="+a,jQuery.post(b,{action:"edd_load_gateway",edd_payment_mode:a},function(b){jQuery("#edd_purchase_form_wrap").html(b),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[a])})}var edd_scripts;jQuery(document).ready(function(a){function c(){var c,b=a(this),d="undefined"!=typeof edd_global_vars;if("card_state"!=b.attr("id")){var e={action:"edd_get_shop_states",country:b.val(),field_name:"card_state"};a.ajax({type:"POST",data:e,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){c=d?a("#edd_purchase_form"):b.closest("form");var f='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==a.trim(e)){var g='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';c.find(f).replaceWith(g)}else c.find(f).replaceWith(e);d&&a("body").trigger("edd_cart_billing_address_updated",[e])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){d&&recalculate_taxes()})}else d&&recalculate_taxes();return!1}if(a(".edd-no-js").hide(),a("a.edd-add-to-cart").addClass("edd-has-js"),a("body").on("click.eddRemoveFromCart",".edd-remove-from-cart",function(b){var c=a(this),d=c.data("cart-item"),e=c.data("action"),f=c.data("download-id"),g={action:e,cart_item:d};return a.ajax({type:"POST",data:g,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){if(b.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(d,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;a(".edd-cart").each(function(){a(this).find("[data-cart-item='"+d+"']").parent().remove()}),a(".edd-cart").each(function(){var b=0;a(this).find("[data-cart-item]").each(function(){a(this).attr("data-cart-item",b),b+=1})}),a("[id^=edd_purchase_"+f+"]").length&&(a("[id^=edd_purchase_"+f+"] .edd_go_to_checkout").hide(),a("[id^=edd_purchase_"+f+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&a("[id^=edd_purchase_"+f+"] .edd_download_quantity_wrapper").show()),a("span.edd-cart-quantity").text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity]),edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal span").html(b.subtotal),a(".cart_item.edd_cart_tax span").html(b.tax)),a(".cart_item.edd_total span").html(b.total),0==b.cart_quantity&&(a(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),a(".edd-cart").each(function(){var b=a(this).parent();b&&(b.addClass("cart-empty"),b.removeClass("cart-not-empty")),a(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),a("body").trigger("edd_cart_item_removed",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("body").on("click.eddAddToCart",".edd-add-to-cart",function(b){b.preventDefault();var c=a(this),d=c.closest("form");c.prop("disabled",!0);var f=(c.find(".edd-loading"),c.closest("div"));c.attr("data-edd-loading","");var d=c.parents("form").last(),g=c.data("download-id"),h=c.data("variable-price"),i=c.data("price-mode"),j=[],k=!0;if("yes"==h)if(d.find(".edd_price_option_"+g+'[type="hidden"]').length>0)j[0]=a(".edd_price_option_"+g,d).val(),d.find(".edd-submit").data("price")&&d.find(".edd-submit").data("price")>0&&(k=!1);else{if(!d.find(".edd_price_option_"+g+":checked",d).length)return c.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),b.stopPropagation(),c.prop("disabled",!1),!1;d.find(".edd_price_option_"+g+":checked",d).each(function(b){if(j[b]=a(this).val(),!0===k){var c=a(this).data("price");c&&c>0&&(k=!1)}})}else j[0]=g,c.data("price")&&c.data("price")>0&&(k=!1);if(k&&d.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==d.find(".edd_action_input").val())return d.submit(),!0;var l=c.data("action"),m={action:l,download_id:g,price_ids:j,post_data:a(d).serialize()};return a.ajax({type:"POST",data:m,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){var e="1"==edd_scripts.redirect_to_checkout,j="1"==d.find("#edd_redirect_to_checkout").val();if(e&&j||!e&&j)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal").show(),a(".cart_item.edd_cart_tax").show()),a(".cart_item.edd_total").show(),a(".cart_item.edd_checkout").show(),a(".cart_item.empty").length&&a(".cart_item.empty").hide(),a(".widget_edd_cart_widget .edd-cart").each(function(c){var d=a(this).find(".edd-cart-meta:first");a(b.cart_item).insertBefore(d);var e=a(this).parent();e&&(e.addClass("cart-not-empty"),e.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(a(".edd-cart-meta.edd_subtotal span").html(b.subtotal),a(".edd-cart-meta.edd_cart_tax span").html(b.tax)),a(".edd-cart-meta.edd_total span").html(b.total);a(".edd-cart-item-title",b.cart_item).length;if(a("span.edd-cart-quantity").each(function(){a(this).text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity])}),"none"==a(".edd-cart-number-of-items").css("display")&&a(".edd-cart-number-of-items").show("slow"),"no"!=h&&"multi"==i||(a("a.edd-add-to-cart",f).toggle(),a(".edd_go_to_checkout",f).css("display","inline-block")),"multi"==i&&c.removeAttr("data-edd-loading"),a(".edd_download_purchase_form").length&&("no"==h||!d.find(".edd_price_option_"+g).is("input:hidden"))){var l=a('.edd_download_purchase_form *[data-download-id="'+g+'"]').parents("form");a("a.edd-add-to-cart",l).hide(),"multi"!=i&&l.find(".edd_download_quantity_wrapper").slideUp(),a(".edd_go_to_checkout",l).show().removeAttr("data-edd-loading")}"incart"!=b&&(a(".edd-cart-added-alert",f).fadeIn(),setTimeout(function(){a(".edd-cart-added-alert",f).fadeOut()},3e3)),c.prop("disabled",!1),a("body").trigger("edd_cart_item_added",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var b=a(this),c={action:b.data("action")};return a(".edd-cart-ajax").show(),a.post(edd_scripts.ajaxurl,c,function(b){a("#edd_checkout_login_register").html(edd_scripts.loading),a("#edd_checkout_login_register").html(b),a(".edd-cart-ajax").hide()}),!1}),a(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(b){b.preventDefault();var c=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).after('<span class="edd-loading-ajax edd-loading"></span>');var d={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:a("#edd_login_fields #edd_user_login").val(),edd_user_pass:a("#edd_login_fields #edd_user_pass").val()};a.post(edd_global_vars.ajaxurl,d,function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),window.location=edd_scripts.checkout_page):(a("#edd_login_fields input[type=submit]").val(c),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a("#edd-user-login-submit").before(b))})}),a("select#edd-gateway, input.edd-gateway").change(function(b){var c=a("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"!=c&&(edd_load_gateway(c),!1)}),"1"==edd_scripts.is_checkout&&a("select#edd-gateway, input.edd-gateway").length){var b=a("meta[name='edd-chosen-gateway']").attr("content");b||(b=edd_scripts.default_gateway),setTimeout(function(){edd_load_gateway(b)},200)}a(document).on("click","#edd_purchase_form #edd_purchase_submit input[type=submit]",function(b){var c=document.getElementById("edd_purchase_form");if("function"!=typeof c.checkValidity||!1!==c.checkValidity()){b.preventDefault();var d=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).prop("disabled",!0),a(this).after('<span class="edd-loading-ajax edd-loading"></span>'),a.post(edd_global_vars.ajaxurl,a("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),a(".edd-error").hide(),a(c).submit()):(a("#edd-purchase-button").val(d),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a(".edd-error").hide(),a("#edd_purchase_submit").before(b),a("#edd-purchase-button").prop("disabled",!1))})}}),a("body").on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",c),a("body").on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
assets/js/edd-checkout-global.js CHANGED
@@ -14,28 +14,10 @@ window.EDD_Checkout = (function($) {
14
  before_discount = $edd_cart_amount.text();
15
  $checkout_form_wrap = $('#edd_checkout_form_wrap');
16
 
17
- $body.on('edd_gateway_loaded', function( e ) {
18
- edd_format_card_number( $form );
19
- });
20
-
21
  $body.on('keyup change', '.edd-do-validate .card-number', function() {
22
  edd_validate_card( $(this) );
23
  });
24
 
25
- $body.on('blur change', '.card-name', function() {
26
- var name_field = $(this);
27
-
28
- name_field.validateCreditCard(function(result) {
29
- if(result.card_type != null) {
30
- name_field.removeClass('valid').addClass('error');
31
- $('#edd-purchase-button').attr('disabled', 'disabled');
32
- } else {
33
- name_field.removeClass('error').addClass('valid');
34
- $('#edd-purchase-button').removeAttr('disabled');
35
- }
36
- });
37
- });
38
-
39
  // Make sure a gateway is selected
40
  $body.on('submit', '#edd_payment_mode', function() {
41
  var gateway = $('#edd-gateway option:selected').val();
@@ -116,18 +98,6 @@ window.EDD_Checkout = (function($) {
116
  });
117
  }
118
 
119
- function edd_format_card_number( form ) {
120
- var card_number = form.find('.card-number'),
121
- card_cvc = form.find('.card-cvc'),
122
- card_expiry = form.find('.card-expiry');
123
-
124
- if ( card_number.length && 'function' === typeof card_number.payment ) {
125
- card_number.payment('formatCardNumber');
126
- card_cvc.payment('formatCardCVC');
127
- card_expiry.payment('formatCardExpiry');
128
- }
129
- }
130
-
131
  function apply_discount(event) {
132
 
133
  event.preventDefault();
14
  before_discount = $edd_cart_amount.text();
15
  $checkout_form_wrap = $('#edd_checkout_form_wrap');
16
 
 
 
 
 
17
  $body.on('keyup change', '.edd-do-validate .card-number', function() {
18
  edd_validate_card( $(this) );
19
  });
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  // Make sure a gateway is selected
22
  $body.on('submit', '#edd_payment_mode', function() {
23
  var gateway = $('#edd-gateway option:selected').val();
98
  });
99
  }
100
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  function apply_discount(event) {
102
 
103
  event.preventDefault();
assets/js/edd-checkout-global.min.js CHANGED
@@ -1 +1 @@
1
- function recalculate_taxes(e){if("1"==edd_global_vars.taxes_enabled){var d=jQuery("#edd_cc_address");e||(e=d.find("#card_state").val());var a={action:"edd_recalculate_taxes",billing_country:d.find("#billing_country").val(),state:e,card_zip:d.find("input[name=card_zip]").val()},t=++ajax_tax_count;jQuery.ajax({type:"POST",data:a,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){if(t===ajax_tax_count){jQuery("#edd_checkout_cart_form").replaceWith(e.html),jQuery(".edd_cart_amount").html(e.total);var d=new Object;d.postdata=a,d.response=e,jQuery("body").trigger("edd_taxes_recalculated",[d])}}}).fail(function(e){window.console&&window.console.log&&(console.log(e),t===ajax_tax_count&&jQuery("body").trigger("edd_taxes_recalculated",[tax_data]))})}}window.EDD_Checkout=function(e){"use strict";function d(){c=e(document.body),r=e("#edd_purchase_form"),l=e(".edd_cart_amount"),s=l.text(),_=e("#edd_checkout_form_wrap"),c.on("edd_gateway_loaded",function(e){t(r)}),c.on("keyup change",".edd-do-validate .card-number",function(){a(e(this))}),c.on("blur change",".card-name",function(){var d=e(this);d.validateCreditCard(function(a){null!=a.card_type?(d.removeClass("valid").addClass("error"),e("#edd-purchase-button").attr("disabled","disabled")):(d.removeClass("error").addClass("valid"),e("#edd-purchase-button").removeAttr("disabled"))})}),c.on("submit","#edd_payment_mode",function(){var d=e("#edd-gateway option:selected").val();return 0==d?(alert(edd_global_vars.no_gateway),!1):void 0}),c.on("click","#edd_payment_mode_select input",function(){e("#edd_payment_mode_select label.edd-gateway-option-selected").removeClass("edd-gateway-option-selected"),e("#edd_payment_mode_select input:checked").parent().addClass("edd-gateway-option-selected")}),_.on("click",".edd-apply-discount",o),_.on("keypress","#edd-discount",function(e){return"13"==e.keyCode?!1:void 0}),_.on("keyup","#edd-discount",function(e){"13"==e.keyCode&&_.find(".edd-apply-discount").trigger("click")}),c.on("click",".edd_discount_remove",n),c.on("click",".edd_discount_link",function(d){d.preventDefault(),e(".edd_discount_link").parent().hide(),e("#edd-discount-code-wrap").show().find("#edd-discount").focus()}),c.find("#edd-discount-code-wrap").hide(),c.find("#edd_show_discount").show(),c.on("change",".edd-item-quantity",i),c.on("click",".edd-amazon-logout #Logout",function(e){e.preventDefault(),amazon.Login.logout(),window.location=edd_amazon.checkoutUri})}function a(d){var a=d;a.validateCreditCard(function(d){var t=e(".card-type");null==d.card_type?(t.removeClass().addClass("off card-type"),a.removeClass("valid"),a.addClass("error")):(t.removeClass("off"),t.addClass(d.card_type.name),d.length_valid&&d.luhn_valid?(a.addClass("valid"),a.removeClass("error")):(a.removeClass("valid"),a.addClass("error")))})}function t(e){var d=e.find(".card-number"),a=e.find(".card-cvc"),t=e.find(".card-expiry");d.length&&"function"==typeof d.payment&&(d.payment("formatCardNumber"),a.payment("formatCardCVC"),t.payment("formatCardExpiry"))}function o(d){d.preventDefault();var a=(e(this),e("#edd-discount").val()),t=e("#edd-discount-loader");if(""==a||a==edd_global_vars.enter_discount)return!1;var o={action:"edd_apply_discount",code:a,form:e("#edd_purchase_form").serialize()};return e("#edd-discount-error-wrap").html("").hide(),t.show(),e.ajax({type:"POST",data:o,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(d){if(d)if("valid"==d.msg){e(".edd_cart_discount").html(d.html),e(".edd_cart_discount_row").show(),e(".edd_cart_amount").each(function(){e(this).text(d.total),e(this).data("total",d.total_plain)}),e("#edd-discount",_).val(""),recalculate_taxes();var a=e("#edd_cc_fields .edd-input, #edd_cc_fields .edd-select,#edd_cc_address .edd-input, #edd_cc_address .edd-select,#edd_payment_mode_select .edd-input, #edd_payment_mode_select .edd-select");"0.00"==d.total_plain?(e("#edd_cc_fields,#edd_cc_address,#edd_payment_mode_select").slideUp(),a.removeAttr("required"),e('input[name="edd-gateway"]').val("manual")):(a.is(".card-address-2")||a.attr("required","required"),e("#edd_cc_fields,#edd_cc_address").slideDown()),c.trigger("edd_discount_applied",[d])}else e("#edd-discount-error-wrap").html('<span class="edd_error">'+d.msg+"</span>"),e("#edd-discount-error-wrap").show(),c.trigger("edd_discount_invalid",[d]);else window.console&&window.console.log&&console.log(d),c.trigger("edd_discount_failed",[d]);t.hide()}}).fail(function(e){window.console&&window.console.log&&console.log(e)}),!1}function n(d){var a=e(this),t={action:"edd_remove_discount",code:a.data("code")};return e.ajax({type:"POST",data:t,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(d){var a="0"+edd_global_vars.decimal_separator+"00";e(".edd_cart_amount").each(function(){(edd_global_vars.currency_sign+a==e(this).text()||a+edd_global_vars.currency_sign==e(this).text())&&window.location.reload(),e(this).text(d.total),e(this).data("total",d.total_plain)}),e(".edd_cart_discount").html(d.html),d.discounts||e(".edd_cart_discount_row").hide(),recalculate_taxes(),e("#edd_cc_fields,#edd_cc_address").slideDown(),c.trigger("edd_discount_removed",[d])}}).fail(function(e){window.console&&window.console.log&&console.log(e)}),!1}function i(d){var a=e(this),t=a.val(),o=a.data("key"),n=a.closest(".edd_cart_item").data("download-id"),i=a.parent().find('input[name="edd-cart-download-'+o+'-options"]').val(),r=e("#edd_cc_address"),l=r.find("#billing_country").val(),s=r.find("#card_state").val(),_={action:"edd_update_quantity",quantity:t,download_id:n,options:i,billing_country:l,card_state:s};return e.ajax({type:"POST",data:_,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(d){e(".edd_cart_subtotal_amount").each(function(){e(this).text(d.subtotal)}),e(".edd_cart_tax_amount").each(function(){e(this).text(d.taxes)}),e(".edd_cart_amount").each(function(){e(this).text(d.total),c.trigger("edd_quantity_updated",[d])})}}).fail(function(e){window.console&&window.console.log&&console.log(e)}),!1}var c,r,l,s,_;return{init:d,recalculate_taxes:recalculate_taxes}}(window.jQuery),window.jQuery(document).ready(EDD_Checkout.init);var ajax_tax_count=0;
1
+ function recalculate_taxes(a){if("1"==edd_global_vars.taxes_enabled){var b=jQuery("#edd_cc_address");a||(a=b.find("#card_state").val());var c={action:"edd_recalculate_taxes",billing_country:b.find("#billing_country").val(),state:a,card_zip:b.find("input[name=card_zip]").val()},d=++ajax_tax_count;jQuery.ajax({type:"POST",data:c,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(a){if(d===ajax_tax_count){jQuery("#edd_checkout_cart_form").replaceWith(a.html),jQuery(".edd_cart_amount").html(a.total);var b=new Object;b.postdata=c,b.response=a,jQuery("body").trigger("edd_taxes_recalculated",[b])}}}).fail(function(a){window.console&&window.console.log&&(console.log(a),d===ajax_tax_count&&jQuery("body").trigger("edd_taxes_recalculated",[tax_data]))})}}window.EDD_Checkout=function(a){"use strict";function g(){b=a(document.body),c=a("#edd_purchase_form"),d=a(".edd_cart_amount"),e=d.text(),f=a("#edd_checkout_form_wrap"),b.on("keyup change",".edd-do-validate .card-number",function(){h(a(this))}),b.on("submit","#edd_payment_mode",function(){var b=a("#edd-gateway option:selected").val();if(0==b)return alert(edd_global_vars.no_gateway),!1}),b.on("click","#edd_payment_mode_select input",function(){a("#edd_payment_mode_select label.edd-gateway-option-selected").removeClass("edd-gateway-option-selected"),a("#edd_payment_mode_select input:checked").parent().addClass("edd-gateway-option-selected")}),f.on("click",".edd-apply-discount",i),f.on("keypress","#edd-discount",function(a){if("13"==a.keyCode)return!1}),f.on("keyup","#edd-discount",function(a){"13"==a.keyCode&&f.find(".edd-apply-discount").trigger("click")}),b.on("click",".edd_discount_remove",j),b.on("click",".edd_discount_link",function(b){b.preventDefault(),a(".edd_discount_link").parent().hide(),a("#edd-discount-code-wrap").show().find("#edd-discount").focus()}),b.find("#edd-discount-code-wrap").hide(),b.find("#edd_show_discount").show(),b.on("change",".edd-item-quantity",k),b.on("click",".edd-amazon-logout #Logout",function(a){a.preventDefault(),amazon.Login.logout(),window.location=edd_amazon.checkoutUri})}function h(b){var c=b;c.validateCreditCard(function(b){var d=a(".card-type");null==b.card_type?(d.removeClass().addClass("off card-type"),c.removeClass("valid"),c.addClass("error")):(d.removeClass("off"),d.addClass(b.card_type.name),b.length_valid&&b.luhn_valid?(c.addClass("valid"),c.removeClass("error")):(c.removeClass("valid"),c.addClass("error")))})}function i(c){c.preventDefault();var e=(a(this),a("#edd-discount").val()),g=a("#edd-discount-loader");if(""==e||e==edd_global_vars.enter_discount)return!1;var h={action:"edd_apply_discount",code:e,form:a("#edd_purchase_form").serialize()};return a("#edd-discount-error-wrap").html("").hide(),g.show(),a.ajax({type:"POST",data:h,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(c){if(c)if("valid"==c.msg){a(".edd_cart_discount").html(c.html),a(".edd_cart_discount_row").show(),a(".edd_cart_amount").each(function(){a(this).text(c.total),a(this).data("total",c.total_plain)}),a("#edd-discount",f).val(""),recalculate_taxes();var d=a("#edd_cc_fields .edd-input, #edd_cc_fields .edd-select,#edd_cc_address .edd-input, #edd_cc_address .edd-select,#edd_payment_mode_select .edd-input, #edd_payment_mode_select .edd-select");"0.00"==c.total_plain?(a("#edd_cc_fields,#edd_cc_address,#edd_payment_mode_select").slideUp(),d.removeAttr("required"),a('input[name="edd-gateway"]').val("manual")):(d.is(".card-address-2")||d.attr("required","required"),a("#edd_cc_fields,#edd_cc_address").slideDown()),b.trigger("edd_discount_applied",[c])}else a("#edd-discount-error-wrap").html('<span class="edd_error">'+c.msg+"</span>"),a("#edd-discount-error-wrap").show(),b.trigger("edd_discount_invalid",[c]);else window.console&&window.console.log&&console.log(c),b.trigger("edd_discount_failed",[c]);g.hide()}}).fail(function(a){window.console&&window.console.log&&console.log(a)}),!1}function j(c){var d=a(this),e={action:"edd_remove_discount",code:d.data("code")};return a.ajax({type:"POST",data:e,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(c){var d="0"+edd_global_vars.decimal_separator+"00";a(".edd_cart_amount").each(function(){edd_global_vars.currency_sign+d!=a(this).text()&&d+edd_global_vars.currency_sign!=a(this).text()||window.location.reload(),a(this).text(c.total),a(this).data("total",c.total_plain)}),a(".edd_cart_discount").html(c.html),c.discounts||a(".edd_cart_discount_row").hide(),recalculate_taxes(),a("#edd_cc_fields,#edd_cc_address").slideDown(),b.trigger("edd_discount_removed",[c])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}),!1}function k(c){var d=a(this),e=d.val(),f=d.data("key"),g=d.closest(".edd_cart_item").data("download-id"),h=d.parent().find('input[name="edd-cart-download-'+f+'-options"]').val(),i=a("#edd_cc_address"),j=i.find("#billing_country").val(),k=i.find("#card_state").val(),l={action:"edd_update_quantity",quantity:e,download_id:g,options:h,billing_country:j,card_state:k};return a.ajax({type:"POST",data:l,dataType:"json",url:edd_global_vars.ajaxurl,xhrFields:{withCredentials:!0},success:function(c){a(".edd_cart_subtotal_amount").each(function(){a(this).text(c.subtotal)}),a(".edd_cart_tax_amount").each(function(){a(this).text(c.taxes)}),a(".edd_cart_amount").each(function(){a(this).text(c.total),b.trigger("edd_quantity_updated",[c])})}}).fail(function(a){window.console&&window.console.log&&console.log(a)}),!1}var b,c,d,e,f;return{init:g,recalculate_taxes:recalculate_taxes}}(window.jQuery),window.jQuery(document).ready(EDD_Checkout.init);var ajax_tax_count=0;
assets/js/jquery.payment.min.js DELETED
@@ -1 +0,0 @@
1
- (function(){var t,e,n,r,a,o,i,l,u,s,c,h,p,g,v,f,d,m,y,C,T,w,$,D,S=[].slice,k=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1};t=window.jQuery||window.Zepto||window.$,t.payment={},t.payment.fn={},t.fn.payment=function(){var e,n;return n=arguments[0],e=2<=arguments.length?S.call(arguments,1):[],t.payment.fn[n].apply(this,e)},a=/(\d{1,4})/g,t.payment.cards=r=[{type:"maestro",patterns:[5018,502,503,506,56,58,639,6220,67],format:a,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",patterns:[600],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",patterns:[5019],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"visa",patterns:[4],format:a,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",patterns:[51,52,53,54,55,22,23,24,25,26,27],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"amex",patterns:[34,37],format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",patterns:[30,36,38,39],format:/(\d{1,4})(\d{1,6})?(\d{1,4})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",patterns:[60,64,65,622],format:a,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",patterns:[62,88],format:a,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",patterns:[35],format:a,length:[16],cvcLength:[3],luhn:!0}],e=function(t){var e,n,a,o,i,l,u,s;for(t=(t+"").replace(/\D/g,""),o=0,l=r.length;l>o;o++)for(e=r[o],s=e.patterns,i=0,u=s.length;u>i;i++)if(a=s[i],n=a+"",t.substr(0,n.length)===n)return e},n=function(t){var e,n,a;for(n=0,a=r.length;a>n;n++)if(e=r[n],e.type===t)return e},p=function(t){var e,n,r,a,o,i;for(r=!0,a=0,n=(t+"").split("").reverse(),o=0,i=n.length;i>o;o++)e=n[o],e=parseInt(e,10),(r=!r)&&(e*=2),e>9&&(e-=9),a+=e;return a%10===0},h=function(t){var e;return null!=t.prop("selectionStart")&&t.prop("selectionStart")!==t.prop("selectionEnd")?!0:null!=("undefined"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)&&document.selection.createRange().text?!0:!1},$=function(t,e){var n,r,a,o,i,l;try{r=e.prop("selectionStart")}catch(u){o=u,r=null}return i=e.val(),e.val(t),null!==r&&e.is(":focus")?(r===i.length&&(r=t.length),i!==t&&(l=i.slice(r-1,+r+1||9e9),n=t.slice(r-1,+r+1||9e9),a=t[r],/\d/.test(a)&&l===""+a+" "&&n===" "+a&&(r+=1)),e.prop("selectionStart",r),e.prop("selectionEnd",r)):void 0},m=function(t){var e,n,r,a,o,i,l,u;for(null==t&&(t=""),r="0123456789",a="0123456789",i="",e=t.split(""),l=0,u=e.length;u>l;l++)n=e[l],o=r.indexOf(n),o>-1&&(n=a[o]),i+=n;return i},d=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var t;return t=n.val(),t=m(t),t=t.replace(/\D/g,""),$(t,n)})},v=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var e;return e=n.val(),e=m(e),e=t.payment.formatCardNumber(e),$(e,n)})},l=function(n){var r,a,o,i,l,u,s;return o=String.fromCharCode(n.which),!/^\d+$/.test(o)||(r=t(n.currentTarget),s=r.val(),a=e(s+o),i=(s.replace(/\D/g,"")+o).length,u=16,a&&(u=a.length[a.length.length-1]),i>=u||null!=r.prop("selectionStart")&&r.prop("selectionStart")!==s.length)?void 0:(l=a&&"amex"===a.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,l.test(s)?(n.preventDefault(),setTimeout(function(){return r.val(s+" "+o)})):l.test(s+o)?(n.preventDefault(),setTimeout(function(){return r.val(s+o+" ")})):void 0)},o=function(e){var n,r;return n=t(e.currentTarget),r=n.val(),8!==e.which||null!=n.prop("selectionStart")&&n.prop("selectionStart")!==r.length?void 0:/\d\s$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d\s$/,""))})):/\s\d?$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d$/,""))})):void 0},f=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var e;return e=n.val(),e=m(e),e=t.payment.formatExpiry(e),$(e,n)})},u=function(e){var n,r,a;return r=String.fromCharCode(e.which),/^\d+$/.test(r)?(n=t(e.currentTarget),a=n.val()+r,/^\d$/.test(a)&&"0"!==a&&"1"!==a?(e.preventDefault(),setTimeout(function(){return n.val("0"+a+" / ")})):/^\d\d$/.test(a)?(e.preventDefault(),setTimeout(function(){var t,e;return t=parseInt(a[0],10),e=parseInt(a[1],10),e>2&&0!==t?n.val("0"+t+" / "+e):n.val(""+a+" / ")})):void 0):void 0},s=function(e){var n,r,a;return r=String.fromCharCode(e.which),/^\d+$/.test(r)?(n=t(e.currentTarget),a=n.val(),/^\d\d$/.test(a)?n.val(""+a+" / "):void 0):void 0},c=function(e){var n,r,a;return a=String.fromCharCode(e.which),"/"===a||" "===a?(n=t(e.currentTarget),r=n.val(),/^\d$/.test(r)&&"0"!==r?n.val("0"+r+" / "):void 0):void 0},i=function(e){var n,r;return n=t(e.currentTarget),r=n.val(),8!==e.which||null!=n.prop("selectionStart")&&n.prop("selectionStart")!==r.length?void 0:/\d\s\/\s$/.test(r)?(e.preventDefault(),setTimeout(function(){return n.val(r.replace(/\d\s\/\s$/,""))})):void 0},g=function(e){var n;return n=t(e.currentTarget),setTimeout(function(){var t;return t=n.val(),t=m(t),t=t.replace(/\D/g,"").slice(0,4),$(t,n)})},w=function(t){var e;return t.metaKey||t.ctrlKey?!0:32===t.which?!1:0===t.which?!0:t.which<33?!0:(e=String.fromCharCode(t.which),!!/[\d\s]/.test(e))},C=function(n){var r,a,o,i;return r=t(n.currentTarget),o=String.fromCharCode(n.which),/^\d+$/.test(o)&&!h(r)?(i=(r.val()+o).replace(/\D/g,""),a=e(i),a?i.length<=a.length[a.length.length-1]:i.length<=16):void 0},T=function(e){var n,r,a;return n=t(e.currentTarget),r=String.fromCharCode(e.which),/^\d+$/.test(r)&&!h(n)?(a=n.val()+r,a=a.replace(/\D/g,""),a.length>6?!1:void 0):void 0},y=function(e){var n,r,a;return n=t(e.currentTarget),r=String.fromCharCode(e.which),/^\d+$/.test(r)&&!h(n)?(a=n.val()+r,a.length<=4):void 0},D=function(e){var n,a,o,i,l;return n=t(e.currentTarget),l=n.val(),i=t.payment.cardType(l)||"unknown",n.hasClass(i)?void 0:(a=function(){var t,e,n;for(n=[],t=0,e=r.length;e>t;t++)o=r[t],n.push(o.type);return n}(),n.removeClass("unknown"),n.removeClass(a.join(" ")),n.addClass(i),n.toggleClass("identified","unknown"!==i),n.trigger("payment.cardType",i))},t.payment.fn.formatCardCVC=function(){return this.on("keypress",w),this.on("keypress",y),this.on("paste",g),this.on("change",g),this.on("input",g),this},t.payment.fn.formatCardExpiry=function(){return this.on("keypress",w),this.on("keypress",T),this.on("keypress",u),this.on("keypress",c),this.on("keypress",s),this.on("keydown",i),this.on("change",f),this.on("input",f),this},t.payment.fn.formatCardNumber=function(){return this.on("keypress",w),this.on("keypress",C),this.on("keypress",l),this.on("keydown",o),this.on("keyup",D),this.on("paste",v),this.on("change",v),this.on("input",v),this.on("input",D),this},t.payment.fn.restrictNumeric=function(){return this.on("keypress",w),this.on("paste",d),this.on("change",d),this.on("input",d),this},t.payment.fn.cardExpiryVal=function(){return t.payment.cardExpiryVal(t(this).val())},t.payment.cardExpiryVal=function(t){var e,n,r,a;return a=t.split(/[\s\/]+/,2),e=a[0],r=a[1],2===(null!=r?r.length:void 0)&&/^\d+$/.test(r)&&(n=(new Date).getFullYear(),n=n.toString().slice(0,2),r=n+r),e=parseInt(e,10),r=parseInt(r,10),{month:e,year:r}},t.payment.validateCardNumber=function(t){var n,r;return t=(t+"").replace(/\s+|-/g,""),/^\d+$/.test(t)?(n=e(t),n?(r=t.length,k.call(n.length,r)>=0&&(n.luhn===!1||p(t))):!1):!1},t.payment.validateCardExpiry=function(e,n){var r,a,o;return"object"==typeof e&&"month"in e&&(o=e,e=o.month,n=o.year),e&&n?(e=t.trim(e),n=t.trim(n),/^\d+$/.test(e)&&/^\d+$/.test(n)&&e>=1&&12>=e?(2===n.length&&(n=70>n?"20"+n:"19"+n),4!==n.length?!1:(a=new Date(n,e),r=new Date,a.setMonth(a.getMonth()-1),a.setMonth(a.getMonth()+1,1),a>r)):!1):!1},t.payment.validateCardCVC=function(e,r){var a,o;return e=t.trim(e),/^\d+$/.test(e)?(a=n(r),null!=a?(o=e.length,k.call(a.cvcLength,o)>=0):e.length>=3&&e.length<=4):!1},t.payment.cardType=function(t){var n;return t?(null!=(n=e(t))?n.type:void 0)||null:null},t.payment.formatCardNumber=function(n){var r,a,o,i;return n=n.replace(/\D/g,""),(r=e(n))?(o=r.length[r.length.length-1],n=n.slice(0,o),r.format.global?null!=(i=n.match(r.format))?i.join(" "):void 0:(a=r.format.exec(n),null!=a?(a.shift(),a=t.grep(a,function(t){return t}),a.join(" ")):void 0)):n},t.payment.formatExpiry=function(t){var e,n,r,a;return(n=t.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(e=n[1]||"",r=n[2]||"",a=n[3]||"",a.length>0?r=" / ":" /"===r?(e=e.substring(0,1),r=""):2===e.length||r.length>0?r=" / ":1===e.length&&"0"!==e&&"1"!==e&&(e="0"+e,r=" / "),e+r+a):""}}).call(this);
 
easy-digital-downloads.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: The easiest way to sell digital products with WordPress.
6
  * Author: Easy Digital Downloads
7
  * Author URI: https://easydigitaldownloads.com
8
- * Version: 2.8.15
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
@@ -25,7 +25,7 @@
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
- * @version 2.8.15
29
  */
30
 
31
  // Exit if accessed directly.
@@ -206,7 +206,7 @@ final class Easy_Digital_Downloads {
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
- define( 'EDD_VERSION', '2.8.15' );
210
  }
211
 
212
  // Plugin Folder Path.
@@ -250,7 +250,6 @@ final class Easy_Digital_Downloads {
250
  require_once EDD_PLUGIN_DIR . 'includes/ajax-functions.php';
251
  require_once EDD_PLUGIN_DIR . 'includes/api/class-edd-api.php';
252
  require_once EDD_PLUGIN_DIR . 'includes/template-functions.php';
253
- require_once EDD_PLUGIN_DIR . 'includes/template-actions.php';
254
  require_once EDD_PLUGIN_DIR . 'includes/checkout/template.php';
255
  require_once EDD_PLUGIN_DIR . 'includes/checkout/functions.php';
256
  require_once EDD_PLUGIN_DIR . 'includes/cart/class-edd-cart.php';
@@ -260,7 +259,6 @@ final class Easy_Digital_Downloads {
260
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db.php';
261
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customers.php';
262
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customer-meta.php';
263
- require_once EDD_PLUGIN_DIR . 'includes/class-edd-customer-query.php';
264
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-customer.php';
265
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-discount.php';
266
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-download.php';
@@ -294,6 +292,7 @@ final class Easy_Digital_Downloads {
294
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-payment-stats.php';
295
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-payments-query.php';
296
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-edd-payment.php';
 
297
  require_once EDD_PLUGIN_DIR . 'includes/download-functions.php';
298
  require_once EDD_PLUGIN_DIR . 'includes/scripts.php';
299
  require_once EDD_PLUGIN_DIR . 'includes/post-types.php';
5
  * Description: The easiest way to sell digital products with WordPress.
6
  * Author: Easy Digital Downloads
7
  * Author URI: https://easydigitaldownloads.com
8
+ * Version: 2.7.12
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
+ * @version 2.7.12
29
  */
30
 
31
  // Exit if accessed directly.
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
+ define( 'EDD_VERSION', '2.7.12' );
210
  }
211
 
212
  // Plugin Folder Path.
250
  require_once EDD_PLUGIN_DIR . 'includes/ajax-functions.php';
251
  require_once EDD_PLUGIN_DIR . 'includes/api/class-edd-api.php';
252
  require_once EDD_PLUGIN_DIR . 'includes/template-functions.php';
 
253
  require_once EDD_PLUGIN_DIR . 'includes/checkout/template.php';
254
  require_once EDD_PLUGIN_DIR . 'includes/checkout/functions.php';
255
  require_once EDD_PLUGIN_DIR . 'includes/cart/class-edd-cart.php';
259
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db.php';
260
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customers.php';
261
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-db-customer-meta.php';
 
262
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-customer.php';
263
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-discount.php';
264
  require_once EDD_PLUGIN_DIR . 'includes/class-edd-download.php';
292
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-payment-stats.php';
293
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-payments-query.php';
294
  require_once EDD_PLUGIN_DIR . 'includes/payments/class-edd-payment.php';
295
+ require_once EDD_PLUGIN_DIR . 'includes/misc-functions.php';
296
  require_once EDD_PLUGIN_DIR . 'includes/download-functions.php';
297
  require_once EDD_PLUGIN_DIR . 'includes/scripts.php';
298
  require_once EDD_PLUGIN_DIR . 'includes/post-types.php';
includes/EDD_SL_Plugin_Updater.php CHANGED
@@ -7,7 +7,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
7
  * Allows plugins to use their own update API.
8
  *
9
  * @author Easy Digital Downloads
10
- * @version 1.6.14
11
  */
12
  class EDD_SL_Plugin_Updater {
13
 
@@ -307,13 +307,11 @@ class EDD_SL_Plugin_Updater {
307
  * @return object $array
308
  */
309
  public function http_request_args( $args, $url ) {
310
-
311
- $verify_ssl = $this->verify_ssl();
312
  if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
313
- $args['sslverify'] = $verify_ssl;
314
  }
315
  return $args;
316
-
317
  }
318
 
319
  /**
@@ -353,8 +351,7 @@ class EDD_SL_Plugin_Updater {
353
  'beta' => ! empty( $data['beta'] ),
354
  );
355
 
356
- $verify_ssl = $this->verify_ssl();
357
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
358
 
359
  if ( ! is_wp_error( $request ) ) {
360
  $request = json_decode( wp_remote_retrieve_body( $request ) );
@@ -416,8 +413,7 @@ class EDD_SL_Plugin_Updater {
416
  'beta' => ! empty( $data['beta'] )
417
  );
418
 
419
- $verify_ssl = $this->verify_ssl();
420
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
421
 
422
  if ( ! is_wp_error( $request ) ) {
423
  $version_info = json_decode( wp_remote_retrieve_body( $request ) );
@@ -474,18 +470,8 @@ class EDD_SL_Plugin_Updater {
474
  'value' => json_encode( $value )
475
  );
476
 
477
- update_option( $cache_key, $data, 'no' );
478
-
479
- }
480
 
481
- /**
482
- * Returns if the SSL of the store should be verified.
483
- *
484
- * @since 1.6.13
485
- * @return bool
486
- */
487
- private function verify_ssl() {
488
- return (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true, $this );
489
  }
490
 
491
  }
7
  * Allows plugins to use their own update API.
8
  *
9
  * @author Easy Digital Downloads
10
+ * @version 1.6.12
11
  */
12
  class EDD_SL_Plugin_Updater {
13
 
307
  * @return object $array
308
  */
309
  public function http_request_args( $args, $url ) {
310
+ // If it is an https request and we are performing a package download, disable ssl verification
 
311
  if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
312
+ $args['sslverify'] = false;
313
  }
314
  return $args;
 
315
  }
316
 
317
  /**
351
  'beta' => ! empty( $data['beta'] ),
352
  );
353
 
354
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
 
355
 
356
  if ( ! is_wp_error( $request ) ) {
357
  $request = json_decode( wp_remote_retrieve_body( $request ) );
413
  'beta' => ! empty( $data['beta'] )
414
  );
415
 
416
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
 
417
 
418
  if ( ! is_wp_error( $request ) ) {
419
  $version_info = json_decode( wp_remote_retrieve_body( $request ) );
470
  'value' => json_encode( $value )
471
  );
472
 
473
+ update_option( $cache_key, $data );
 
 
474
 
 
 
 
 
 
 
 
 
475
  }
476
 
477
  }
includes/actions.php CHANGED
@@ -21,8 +21,9 @@ if ( ! defined( 'ABSPATH' ) ) exit;
21
  * @return void
22
  */
23
  function edd_get_actions() {
24
- if ( isset( $_GET['edd_action'] ) ) {
25
- do_action( 'edd_' . $_GET['edd_action'], $_GET );
 
26
  }
27
  }
28
  add_action( 'init', 'edd_get_actions' );
@@ -36,8 +37,9 @@ add_action( 'init', 'edd_get_actions' );
36
  * @return void
37
  */
38
  function edd_post_actions() {
39
- if ( isset( $_POST['edd_action'] ) ) {
40
- do_action( 'edd_' . $_POST['edd_action'], $_POST );
 
41
  }
42
  }
43
  add_action( 'init', 'edd_post_actions' );
21
  * @return void
22
  */
23
  function edd_get_actions() {
24
+ $key = ! empty( $_GET['edd_action'] ) ? sanitize_key( $_GET['edd_action'] ) : false;
25
+ if ( ! empty( $key ) ) {
26
+ do_action( "edd_{$key}" , $_GET );
27
  }
28
  }
29
  add_action( 'init', 'edd_get_actions' );
37
  * @return void
38
  */
39
  function edd_post_actions() {
40
+ $key = ! empty( $_POST['edd_action'] ) ? sanitize_key( $_POST['edd_action'] ) : false;
41
+ if ( ! empty( $key ) ) {
42
+ do_action( "edd_{$key}", $_POST );
43
  }
44
  }
45
  add_action( 'init', 'edd_post_actions' );
includes/admin/add-ons.php CHANGED
@@ -21,71 +21,41 @@ if ( ! defined( 'ABSPATH' ) ) exit;
21
  * @return void
22
  */
23
  function edd_add_ons_page() {
24
- $add_ons_tabs = apply_filters( 'edd_add_ons_tabs', array( 'popular' => __( 'Popular', 'easy-digital-downloads' ), 'new' => __( 'New', 'easy-digital-downloads' ), 'all' => __( 'View all Integrations', 'easy-digital-downloads' ) ) );
25
- $active_tab = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $add_ons_tabs ) ? $_GET['tab'] : 'popular';
26
-
27
- // Set a new campaign for tracking purposes
28
- $campaign = isset( $_GET['view'] ) && strtolower( $_GET['view'] ) === 'integrations' ? 'EDDIntegrationsPage' : 'EDDAddonsPage';
29
 
30
  ob_start(); ?>
31
  <div class="wrap" id="edd-add-ons">
32
- <h1 class="wp-heading-inline"><?php echo edd_get_label_plural(); ?></h1>
33
- <a href="<?php echo admin_url( 'post-new.php?post_type=download' ); ?>" class="page-title-action">Add New</a>
34
- <hr class="wp-header-end">
35
- <?php edd_display_product_tabs(); ?>
36
- <h2>
37
- <?php _e( 'Apps and Integrations for Easy Digital Downloads', 'easy-digital-downloads' ); ?>
38
  <span>
39
- &nbsp;&nbsp;<a href="http://easydigitaldownloads.com/extensions/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=<?php echo $campaign; ?>&utm_content=All%20Extensions" class="button-primary" target="_blank"><?php _e( 'Browse All Integrations', 'easy-digital-downloads' ); ?></a>
40
  </span>
41
- </h2>
42
- <p><?php _e( 'These <em><strong>add functionality</strong></em> to your Easy Digital Downloads powered store.', 'easy-digital-downloads' ); ?></p>
43
- <div class="edd-add-ons-view-wrapper">
44
- <ul class="subsubsub">
45
- <?php
46
- $total_tabs = count( $add_ons_tabs );
47
- $i = 1;
48
- foreach( $add_ons_tabs as $tab_id => $tab_name ) {
49
-
50
- $tab_url = add_query_arg( array(
51
- 'settings-updated' => false,
52
- 'tab' => $tab_id
53
- ) );
54
 
55
- if ( 'all' === $tab_id ) {
56
- $tab_url = 'http://easydigitaldownloads.com/extensions/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=' . $campaign . '&utm_content=All%20Extensions';
57
- }
 
58
 
59
- $active = $active_tab == $tab_id ? 'current' : '';
60
 
61
- echo '<li class="' . $tab_id . '">';
62
- echo '<a href="' . esc_url( $tab_url ) . '" class="' . $active . '">';
63
  echo esc_html( $tab_name );
64
- echo '</a>';
65
-
66
- if ( 'all' === $tab_id ) {
67
- $count = '150+';
68
- } else {
69
- $count = '29';
70
- }
71
-
72
- echo ' <span class="count">(' . $count . ')</span>';
73
- echo '</li>';
74
-
75
- if ( $i !== $total_tabs ) {
76
- echo ' | ';
77
- }
78
-
79
- $i++;
80
- }
81
- ?>
82
- </ul>
83
- </div>
84
  <div id="tab_container">
85
  <?php echo edd_add_ons_get_feed( $active_tab ); ?>
86
  <div class="clear"></div>
87
  <div class="edd-add-ons-footer">
88
- <a href="http://easydigitaldownloads.com/extensions/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=<?php echo $campaign; ?>&utm_content=All%20Extensions" class="button-primary" target="_blank"><?php _e( 'Browse All Integrations', 'easy-digital-downloads' ); ?></a>
89
  </div>
90
  </div><!-- #tab_container-->
91
  </div>
@@ -123,10 +93,5 @@ function edd_add_ons_get_feed( $tab = 'popular' ) {
123
  }
124
  }
125
 
126
- if ( isset( $_GET['view'] ) && 'integrations' === $_GET['view'] ) {
127
- // Set a new campaign for tracking purposes
128
- $cache = str_replace( 'EDDAddonsPage', 'EDDIntegrationsPage', $cache );
129
- }
130
-
131
  return $cache;
132
  }
21
  * @return void
22
  */
23
  function edd_add_ons_page() {
24
+ $add_ons_tabs = apply_filters( 'edd_add_ons_tabs', array( 'popular' => 'Popular', 'new' => 'New') );
25
+ $active_tab = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $add_ons_tabs ) ? $_GET['tab'] : 'popular';
 
 
 
26
 
27
  ob_start(); ?>
28
  <div class="wrap" id="edd-add-ons">
29
+ <h1>
30
+ <?php _e( 'Extensions for Easy Digital Downloads', 'easy-digital-downloads' ); ?>
 
 
 
 
31
  <span>
32
+ &nbsp;&nbsp;<a href="http://easydigitaldownloads.com/extensions/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=EDD%20Addons%20Page&utm_content=All%20Extensions" class="button-primary" target="_blank"><?php _e( 'Browse All Extensions', 'easy-digital-downloads' ); ?></a>
33
  </span>
34
+ </h1>
35
+ <p><?php _e( 'These extensions <em><strong>add functionality</strong></em> to your Easy Digital Downloads powered store.', 'easy-digital-downloads' ); ?></p>
36
+ <h2 class="nav-tab-wrapper">
37
+ <?php
38
+ foreach( $add_ons_tabs as $tab_id => $tab_name ) {
 
 
 
 
 
 
 
 
39
 
40
+ $tab_url = add_query_arg( array(
41
+ 'settings-updated' => false,
42
+ 'tab' => $tab_id
43
+ ) );
44
 
45
+ $active = $active_tab == $tab_id ? ' nav-tab-active' : '';
46
 
47
+ echo '<a href="' . esc_url( $tab_url ) . '" class="nav-tab' . $active . '">';
 
48
  echo esc_html( $tab_name );
49
+ echo '</a>';
50
+ }
51
+ ?>
52
+ <span class="edd-tab-span"><img src="<?php echo EDD_PLUGIN_URL; ?>assets/images/edd-peeking.png" /></span>
53
+ </h2>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  <div id="tab_container">
55
  <?php echo edd_add_ons_get_feed( $active_tab ); ?>
56
  <div class="clear"></div>
57
  <div class="edd-add-ons-footer">
58
+ <a href="http://easydigitaldownloads.com/extensions/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=EDD%20Addons%20Page&utm_content=All%20Extensions" class="button-primary" target="_blank"><?php _e( 'Browse All Extensions', 'easy-digital-downloads' ); ?></a>
59
  </div>
60
  </div><!-- #tab_container-->
61
  </div>
93
  }
94
  }
95
 
 
 
 
 
 
96
  return $cache;
97
  }
includes/admin/admin-actions.php CHANGED
@@ -29,58 +29,3 @@ function edd_process_actions() {
29
  }
30
  }
31
  add_action( 'admin_init', 'edd_process_actions' );
32
-
33
- /**
34
- * When the Download list table loads, call the function to view our tabs.
35
- *
36
- * @since 2.8.9
37
- * @param $views
38
- *
39
- * @return mixed
40
- */
41
- function edd_products_tabs( $views ) {
42
- edd_display_product_tabs();
43
-
44
- return $views;
45
- }
46
- add_filter( 'views_edit-download', 'edd_products_tabs', 10, 1 );
47
-
48
- /**
49
- * Displays the product tabs for 'Products' and 'Apps and Integrations'
50
- *
51
- * @since 2.8.9
52
- */
53
- function edd_display_product_tabs() {
54
- ?>
55
- <h2 class="nav-tab-wrapper">
56
- <?php
57
- $tabs = array(
58
- 'products' => array(
59
- 'name' => edd_get_label_plural(),
60
- 'url' => admin_url( 'edit.php?post_type=download' ),
61
- ),
62
- 'integrations' => array(
63
- 'name' => __( 'Apps and Integrations', 'easy-digital-downloads' ),
64
- 'url' => admin_url( 'edit.php?post_type=download&page=edd-addons&view=integrations' ),
65
- ),
66
- );
67
-
68
- $tabs = apply_filters( 'edd_add_ons_tabs', $tabs );
69
- $active_tab = isset( $_GET['page'] ) && $_GET['page'] === 'edd-addons' ? 'integrations' : 'products';
70
- foreach( $tabs as $tab_id => $tab ) {
71
-
72
- $active = $active_tab == $tab_id ? ' nav-tab-active' : '';
73
-
74
- echo '<a href="' . esc_url( $tab['url'] ) . '" class="nav-tab' . $active . '">';
75
- echo esc_html( $tab['name'] );
76
- echo '</a>';
77
- }
78
- ?>
79
-
80
- <a href="<?php echo admin_url( 'post-new.php?post_type=download' ); ?>" class="page-title-action">
81
- <?php _e( 'Add New' ); // No text domain so it just follows what WP Core does ?>
82
- </a>
83
- </h2>
84
- <br />
85
- <?php
86
- }
29
  }
30
  }
31
  add_action( 'admin_init', 'edd_process_actions' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/admin/customers/customer-actions.php CHANGED
@@ -250,11 +250,11 @@ function edd_add_customer_email( $args ) {
250
 
251
  $user = wp_get_current_user();
252
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
253
- $customer_note = sprintf( __( 'Email address %s added by %s', 'easy-digital-downloads' ), $email, $user_login );
254
  $customer->add_note( $customer_note );
255
 
256
  if ( $primary ) {
257
- $customer_note = sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), $email, $user_login );
258
  $customer->add_note( $customer_note );
259
  }
260
 
@@ -308,7 +308,7 @@ function edd_remove_customer_email() {
308
 
309
  $user = wp_get_current_user();
310
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
311
- $customer_note = sprintf( __( 'Email address %s removed by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
312
  $customer->add_note( $customer_note );
313
 
314
  } else {
@@ -352,7 +352,7 @@ function edd_set_customer_primary_email() {
352
 
353
  $user = wp_get_current_user();
354
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
355
- $customer_note = sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
356
  $customer->add_note( $customer_note );
357
 
358
  } else {
@@ -637,17 +637,3 @@ function edd_include_single_customer_recount_tool_batch_processer( $class ) {
637
  }
638
 
639
  }
640
-
641
- /**
642
- * Sets up additional action calls for the set_last_changed method in the EDD_DB_Customers class.
643
- *
644
- * @since 2.8.7
645
- * @param void
646
- * @return void
647
- */
648
- function edd_customer_action_calls() {
649
- add_action( 'added_customer_meta', array( EDD()->customers, 'set_last_changed' ) );
650
- add_action( 'updated_customer_meta', array( EDD()->customers, 'set_last_changed' ) );
651
- add_action( 'deleted_customer_meta', array( EDD()->customers, 'set_last_changed' ) );
652
- }
653
- add_action( 'init', 'edd_customer_action_calls' );
250
 
251
  $user = wp_get_current_user();
252
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
253
+ $customer_note = __( sprintf( 'Email address %s added by %s', $email, $user_login ), 'easy-digital-downloads' );
254
  $customer->add_note( $customer_note );
255
 
256
  if ( $primary ) {
257
+ $customer_note = __( sprintf( 'Email address %s set as primary by %s', $email, $user_login ), 'easy-digital-downloads' );
258
  $customer->add_note( $customer_note );
259
  }
260
 
308
 
309
  $user = wp_get_current_user();
310
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
311
+ $customer_note = __( sprintf( 'Email address %s removed by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
312
  $customer->add_note( $customer_note );
313
 
314
  } else {
352
 
353
  $user = wp_get_current_user();
354
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
355
+ $customer_note = __( sprintf( 'Email address %s set as primary by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
356
  $customer->add_note( $customer_note );
357
 
358
  } else {
637
  }
638
 
639
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/admin/customers/customers.php CHANGED
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
14
  function edd_customers_page() {
15
  $default_views = edd_customer_views();
16
  $requested_view = isset( $_GET['view'] ) ? sanitize_text_field( $_GET['view'] ) : 'customers';
17
- if ( array_key_exists( $requested_view, $default_views ) && is_callable( $default_views[$requested_view] ) ) {
18
  edd_render_customer_view( $requested_view, $default_views );
19
  } else {
20
  edd_customers_list();
@@ -164,7 +164,7 @@ function edd_render_customer_view( $view, $callbacks ) {
164
  </div>
165
 
166
  <div id="edd-item-card-wrapper" class="edd-customer-card-wrapper" style="float: left">
167
- <?php call_user_func( $callbacks[ $view ], $customer ); ?>
168
  </div>
169
  </div>
170
 
14
  function edd_customers_page() {
15
  $default_views = edd_customer_views();
16
  $requested_view = isset( $_GET['view'] ) ? sanitize_text_field( $_GET['view'] ) : 'customers';
17
+ if ( array_key_exists( $requested_view, $default_views ) && function_exists( $default_views[$requested_view] ) ) {
18
  edd_render_customer_view( $requested_view, $default_views );
19
  } else {
20
  edd_customers_list();
164
  </div>
165
 
166
  <div id="edd-item-card-wrapper" class="edd-customer-card-wrapper" style="float: left">
167
+ <?php $callbacks[$view]( $customer ) ?>
168
  </div>
169
  </div>
170
 
includes/admin/discounts/add-discount.php CHANGED
@@ -23,8 +23,8 @@ if ( ! defined( 'ABSPATH' ) ) exit;
23
  <label for="edd-name"><?php _e( 'Name', 'easy-digital-downloads' ); ?></label>
24
  </th>
25
  <td>
26
- <input name="name" required="required" id="edd-name" type="text" value="" />
27
- <p class="description"><?php _e( 'The name of this discount.', 'easy-digital-downloads' ); ?></p>
28
  </td>
29
  </tr>
30
  <?php do_action( 'edd_add_discount_form_before_code' ); ?>
@@ -33,7 +33,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
33
  <label for="edd-code"><?php _e( 'Code', 'easy-digital-downloads' ); ?></label>
34
  </th>
35
  <td>
36
- <input type="text" required="required" id="edd-code" name="code" value="" pattern="[a-zA-Z0-9-_]+" />
37
  <p class="description"><?php _e( 'Enter a code for this discount, such as 10PERCENT. Only alphanumeric characters are allowed.', 'easy-digital-downloads' ); ?></p>
38
  </td>
39
  </tr>
@@ -56,7 +56,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
56
  <label for="edd-amount"><?php _e( 'Amount', 'easy-digital-downloads' ); ?></label>
57
  </th>
58
  <td>
59
- <input type="text" required="required" class="edd-price-field" id="edd-amount" name="amount" value="" />
60
  <p class="description edd-amount-description flat-discount" style="display:none;"><?php printf( __( 'Enter the discount amount in %s', 'easy-digital-downloads' ), edd_get_currency() ); ?></p>
61
  <p class="description edd-amount-description percent-discount"><?php _e( 'Enter the discount percentage. 10 = 10%', 'easy-digital-downloads' ); ?></p>
62
  </td>
@@ -120,7 +120,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
120
  <label for="edd-start"><?php _e( 'Start date', 'easy-digital-downloads' ); ?></label>
121
  </th>
122
  <td>
123
- <input name="start" id="edd-start" type="text" value="" class="edd_datepicker"/>
124
  <p class="description"><?php _e( 'Enter the start date for this discount code in the format of mm/dd/yyyy. For no start date, leave blank. If entered, the discount can only be used after or on this date.', 'easy-digital-downloads' ); ?></p>
125
  </td>
126
  </tr>
@@ -130,8 +130,8 @@ if ( ! defined( 'ABSPATH' ) ) exit;
130
  <label for="edd-expiration"><?php _e( 'Expiration date', 'easy-digital-downloads' ); ?></label>
131
  </th>
132
  <td>
133
- <input name="expiration" id="edd-expiration" type="text" class="edd_datepicker"/>
134
- <p class="description"><?php _e( 'Enter the expiration date for this discount code in the format of mm/dd/yyyy. For no expiration, leave blank.', 'easy-digital-downloads' ); ?></p>
135
  </td>
136
  </tr>
137
  <?php do_action( 'edd_add_discount_form_before_min_cart_amount' ); ?>
@@ -140,8 +140,8 @@ if ( ! defined( 'ABSPATH' ) ) exit;
140
  <label for="edd-min-cart-amount"><?php _e( 'Minimum Amount', 'easy-digital-downloads' ); ?></label>
141
  </th>
142
  <td>
143
- <input type="text" id="edd-min-cart-amount" name="min_price" value="" />
144
- <p class="description"><?php _e( 'The minimum dollar amount that must be in the cart before this discount can be used. Leave blank for no minimum.', 'easy-digital-downloads' ); ?></p>
145
  </td>
146
  </tr>
147
  <?php do_action( 'edd_add_discount_form_before_max_uses' ); ?>
@@ -150,7 +150,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
150
  <label for="edd-max-uses"><?php _e( 'Max Uses', 'easy-digital-downloads' ); ?></label>
151
  </th>
152
  <td>
153
- <input type="text" id="edd-max-uses" name="max" value="" />
154
  <p class="description"><?php _e( 'The maximum number of times this discount can be used. Leave blank for unlimited.', 'easy-digital-downloads' ); ?></p>
155
  </td>
156
  </tr>
23
  <label for="edd-name"><?php _e( 'Name', 'easy-digital-downloads' ); ?></label>
24
  </th>
25
  <td>
26
+ <input name="name" required="required" id="edd-name" type="text" value="" style="width: 300px;"/>
27
+ <p class="description"><?php _e( 'The name of this discount', 'easy-digital-downloads' ); ?></p>
28
  </td>
29
  </tr>
30
  <?php do_action( 'edd_add_discount_form_before_code' ); ?>
33
  <label for="edd-code"><?php _e( 'Code', 'easy-digital-downloads' ); ?></label>
34
  </th>
35
  <td>
36
+ <input type="text" required="required" id="edd-code" name="code" value="" pattern="[a-zA-Z0-9]+" style="width: 300px;"/>
37
  <p class="description"><?php _e( 'Enter a code for this discount, such as 10PERCENT. Only alphanumeric characters are allowed.', 'easy-digital-downloads' ); ?></p>
38
  </td>
39
  </tr>
56
  <label for="edd-amount"><?php _e( 'Amount', 'easy-digital-downloads' ); ?></label>
57
  </th>
58
  <td>
59
+ <input type="text" required="required" id="edd-amount" name="amount" value="" style="width: 40px;"/>
60
  <p class="description edd-amount-description flat-discount" style="display:none;"><?php printf( __( 'Enter the discount amount in %s', 'easy-digital-downloads' ), edd_get_currency() ); ?></p>
61
  <p class="description edd-amount-description percent-discount"><?php _e( 'Enter the discount percentage. 10 = 10%', 'easy-digital-downloads' ); ?></p>
62
  </td>
120
  <label for="edd-start"><?php _e( 'Start date', 'easy-digital-downloads' ); ?></label>
121
  </th>
122
  <td>
123
+ <input name="start" id="edd-start" type="text" value="" style="width: 300px;" class="edd_datepicker"/>
124
  <p class="description"><?php _e( 'Enter the start date for this discount code in the format of mm/dd/yyyy. For no start date, leave blank. If entered, the discount can only be used after or on this date.', 'easy-digital-downloads' ); ?></p>
125
  </td>
126
  </tr>
130
  <label for="edd-expiration"><?php _e( 'Expiration date', 'easy-digital-downloads' ); ?></label>
131
  </th>
132
  <td>
133
+ <input name="expiration" id="edd-expiration" type="text" style="width: 300px;" class="edd_datepicker"/>
134
+ <p class="description"><?php _e( 'Enter the expiration date for this discount code in the format of mm/dd/yyyy. For no expiration, leave blank', 'easy-digital-downloads' ); ?></p>
135
  </td>
136
  </tr>
137
  <?php do_action( 'edd_add_discount_form_before_min_cart_amount' ); ?>
140
  <label for="edd-min-cart-amount"><?php _e( 'Minimum Amount', 'easy-digital-downloads' ); ?></label>
141
  </th>
142
  <td>
143
+ <input type="text" id="edd-min-cart-amount" name="min_price" value="" style="width: 40px;"/>
144
+ <p class="description"><?php _e( 'The minimum amount that must be purchased before this discount can be used. Leave blank for no minimum.', 'easy-digital-downloads' ); ?></p>
145
  </td>
146
  </tr>
147
  <?php do_action( 'edd_add_discount_form_before_max_uses' ); ?>
150
  <label for="edd-max-uses"><?php _e( 'Max Uses', 'easy-digital-downloads' ); ?></label>
151
  </th>
152
  <td>
153
+ <input type="text" id="edd-max-uses" name="max" value="" style="width: 40px;"/>
154
  <p class="description"><?php _e( 'The maximum number of times this discount can be used. Leave blank for unlimited.', 'easy-digital-downloads' ); ?></p>
155
  </td>
156
  </tr>
includes/admin/discounts/discount-actions.php CHANGED
@@ -38,9 +38,7 @@ function edd_add_discount( $data ) {
38
  edd_die();
39
  }
40
 
41
- // Verify only accepted characters
42
- $sanitized = preg_replace('/[^a-zA-Z0-9-_]+/', '', $data['code'] );
43
- if ( strtoupper( $data['code'] ) !== strtoupper( $sanitized ) ) {
44
  wp_redirect( add_query_arg( 'edd-message', 'discount_invalid_code' ) );
45
  edd_die();
46
  }
38
  edd_die();
39
  }
40
 
41
+ if ( ! ctype_alnum( $data['code'] ) ) {
 
 
42
  wp_redirect( add_query_arg( 'edd-message', 'discount_invalid_code' ) );
43
  edd_die();
44
  }
includes/admin/discounts/edit-discount.php CHANGED
@@ -37,7 +37,7 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
37
  <label for="edd-name"><?php _e( 'Name', 'easy-digital-downloads' ); ?></label>
38
  </th>
39
  <td>
40
- <input name="name" required="required" id="edd-name" type="text" value="<?php echo esc_attr( stripslashes( $discount->post_title ) ); ?>" />
41
  <p class="description"><?php _e( 'The name of this discount', 'easy-digital-downloads' ); ?></p>
42
  </td>
43
  </tr>
@@ -47,7 +47,7 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
47
  <label for="edd-code"><?php _e( 'Code', 'easy-digital-downloads' ); ?></label>
48
  </th>
49
  <td>
50
- <input type="text" required="required" id="edd-code" name="code" value="<?php echo esc_attr( edd_get_discount_code( $discount_id ) ); ?>" pattern="[a-zA-Z0-9-_]+" />
51
  <p class="description"><?php _e( 'Enter a code for this discount, such as 10PERCENT. Only alphanumeric characters are allowed.', 'easy-digital-downloads' ); ?></p>
52
  </td>
53
  </tr>
@@ -70,7 +70,7 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
70
  <label for="edd-amount"><?php _e( 'Amount', 'easy-digital-downloads' ); ?></label>
71
  </th>
72
  <td>
73
- <input type="text" class="edd-price-field" required="required" id="edd-amount" name="amount" value="<?php echo esc_attr( edd_get_discount_amount( $discount_id ) ); ?>" />
74
  <p class="description edd-amount-description flat"<?php echo $flat_display; ?>><?php printf( __( 'Enter the discount amount in %s', 'easy-digital-downloads' ), edd_get_currency() ); ?></p>
75
  <p class="description edd-amount-description percent"<?php echo $percent_display; ?>><?php _e( 'Enter the discount percentage. 10 = 10%', 'easy-digital-downloads' ); ?></p>
76
  </td>
@@ -135,7 +135,7 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
135
  <label for="edd-start"><?php _e( 'Start date', 'easy-digital-downloads' ); ?></label>
136
  </th>
137
  <td>
138
- <input name="start" id="edd-start" type="text" value="<?php echo esc_attr( edd_get_discount_start_date( $discount_id ) ); ?>" class="edd_datepicker"/>
139
  <p class="description"><?php _e( 'Enter the start date for this discount code in the format of mm/dd/yyyy. For no start date, leave blank. If entered, the discount can only be used after or on this date.', 'easy-digital-downloads' ); ?></p>
140
  </td>
141
  </tr>
@@ -145,7 +145,7 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
145
  <label for="edd-expiration"><?php _e( 'Expiration date', 'easy-digital-downloads' ); ?></label>
146
  </th>
147
  <td>
148
- <input name="expiration" id="edd-expiration" type="text" value="<?php echo esc_attr( edd_get_discount_expiration( $discount_id ) ); ?>" class="edd_datepicker"/>
149
  <p class="description"><?php _e( 'Enter the expiration date for this discount code in the format of mm/dd/yyyy. For no expiration, leave blank', 'easy-digital-downloads' ); ?></p>
150
  </td>
151
  </tr>
37
  <label for="edd-name"><?php _e( 'Name', 'easy-digital-downloads' ); ?></label>
38
  </th>
39
  <td>
40
+ <input name="name" required="required" id="edd-name" type="text" value="<?php echo esc_attr( stripslashes( $discount->post_title ) ); ?>" style="width: 300px;"/>
41
  <p class="description"><?php _e( 'The name of this discount', 'easy-digital-downloads' ); ?></p>
42
  </td>
43
  </tr>
47
  <label for="edd-code"><?php _e( 'Code', 'easy-digital-downloads' ); ?></label>
48
  </th>
49
  <td>
50
+ <input type="text" required="required" id="edd-code" name="code" value="<?php echo esc_attr( edd_get_discount_code( $discount_id ) ); ?>" pattern="[a-zA-Z0-9]+" style="width: 300px;"/>
51
  <p class="description"><?php _e( 'Enter a code for this discount, such as 10PERCENT. Only alphanumeric characters are allowed.', 'easy-digital-downloads' ); ?></p>
52
  </td>
53
  </tr>
70
  <label for="edd-amount"><?php _e( 'Amount', 'easy-digital-downloads' ); ?></label>
71
  </th>
72
  <td>
73
+ <input type="text" required="required" id="edd-amount" name="amount" value="<?php echo esc_attr( edd_get_discount_amount( $discount_id ) ); ?>" style="width: 40px;"/>
74
  <p class="description edd-amount-description flat"<?php echo $flat_display; ?>><?php printf( __( 'Enter the discount amount in %s', 'easy-digital-downloads' ), edd_get_currency() ); ?></p>
75
  <p class="description edd-amount-description percent"<?php echo $percent_display; ?>><?php _e( 'Enter the discount percentage. 10 = 10%', 'easy-digital-downloads' ); ?></p>
76
  </td>
135
  <label for="edd-start"><?php _e( 'Start date', 'easy-digital-downloads' ); ?></label>
136
  </th>
137
  <td>
138
+ <input name="start" id="edd-start" type="text" value="<?php echo esc_attr( edd_get_discount_start_date( $discount_id ) ); ?>" style="width: 300px;" class="edd_datepicker"/>
139
  <p class="description"><?php _e( 'Enter the start date for this discount code in the format of mm/dd/yyyy. For no start date, leave blank. If entered, the discount can only be used after or on this date.', 'easy-digital-downloads' ); ?></p>
140
  </td>
141
  </tr>
145
  <label for="edd-expiration"><?php _e( 'Expiration date', 'easy-digital-downloads' ); ?></label>
146
  </th>
147
  <td>
148
+ <input name="expiration" id="edd-expiration" type="text" value="<?php echo esc_attr( edd_get_discount_expiration( $discount_id ) ); ?>" style="width: 300px;" class="edd_datepicker"/>
149
  <p class="description"><?php _e( 'Enter the expiration date for this discount code in the format of mm/dd/yyyy. For no expiration, leave blank', 'easy-digital-downloads' ); ?></p>
150
  </td>
151
  </tr>
includes/admin/downloads/metabox.php CHANGED
@@ -42,11 +42,6 @@ function edd_add_download_meta_box() {
42
  /** Product Stats */
43
  add_meta_box( 'edd_product_stats', sprintf( __( '%1$s Stats', 'easy-digital-downloads' ), edd_get_label_singular(), edd_get_label_plural() ), 'edd_render_stats_meta_box', $post_type, 'side', 'high' );
44
  }
45
-
46
- if ( ! class_exists( 'EDD_Reviews' ) ) {
47
- add_meta_box( 'edd-reviews-status', __( 'Product Reviews', 'easy-digital-downloads' ), 'edd_render_review_status_metabox', 'download', 'side', 'low' );
48
- }
49
-
50
  }
51
  }
52
  add_action( 'add_meta_boxes', 'edd_add_download_meta_box' );
@@ -302,7 +297,7 @@ function edd_render_price_field( $post_id ) {
302
  $price_display = $variable_pricing ? ' style="display:none;"' : '';
303
  $variable_display = $variable_pricing ? '' : ' style="display:none;"';
304
  $currency_position = edd_get_option( 'currency_position', 'before' );
305
- ?>
306
  <p>
307
  <strong><?php echo apply_filters( 'edd_price_options_heading', __( 'Pricing Options:', 'easy-digital-downloads' ) ); ?></strong>
308
  </p>
@@ -343,37 +338,47 @@ function edd_render_price_field( $post_id ) {
343
  <label for="_edd_price_options_mode"><?php echo apply_filters( 'edd_multi_option_purchase_text', __( 'Enable multi-option purchase mode. Allows multiple price options to be added to your cart at once', 'easy-digital-downloads' ) ); ?></label>
344
  </p>
345
  <div id="edd_price_fields" class="edd_meta_table_wrap">
346
- <div class="widefat edd_repeatable_table">
347
-
348
- <div class="edd-price-option-fields edd-repeatables-wrap">
 
 
 
 
 
 
 
 
 
 
349
  <?php
350
  if ( ! empty( $prices ) ) :
351
 
352
  foreach ( $prices as $key => $value ) :
353
- $name = ( isset( $value['name'] ) && ! empty( $value['name'] ) ) ? $value['name'] : '';
354
- $index = ( isset( $value['index'] ) && $value['index'] !== '' ) ? $value['index'] : $key;
355
  $amount = isset( $value['amount'] ) ? $value['amount'] : '';
356
- $args = apply_filters( 'edd_price_row_args', compact( 'name', 'amount' ), $value );
 
357
  ?>
358
- <div class="edd_variable_prices_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $key ); ?>">
359
  <?php do_action( 'edd_render_price_row', $key, $args, $post_id, $index ); ?>
360
- </div>
361
  <?php
362
  endforeach;
363
  else :
364
  ?>
365
- <div class="edd_variable_prices_wrapper edd_repeatable_row" data-key="1">
366
  <?php do_action( 'edd_render_price_row', 1, array(), $post_id, 1 ); ?>
367
- </div>
368
  <?php endif; ?>
369
 
370
- <div class="edd-add-repeatable-row">
371
- <div class="submit" style="float: none; clear:both; background:#fff; padding: 4px 4px 0 0;">
372
- <button class="button-secondary edd_add_repeatable"><?php _e( 'Add New Price', 'easy-digital-downloads' ); ?></button>
373
- </div>
374
- </div>
375
- </div>
376
- </div>
377
  </div>
378
  </div><!--end #edd_variable_price_fields-->
379
  <?php
@@ -393,8 +398,6 @@ add_action( 'edd_meta_box_price_fields', 'edd_render_price_field', 10 );
393
  * @param $post_id
394
  */
395
  function edd_render_price_row( $key, $args = array(), $post_id, $index ) {
396
- global $wp_filter;
397
-
398
  $defaults = array(
399
  'name' => null,
400
  'amount' => null
@@ -402,131 +405,58 @@ function edd_render_price_row( $key, $args = array(), $post_id, $index ) {
402
 
403
  $args = wp_parse_args( $args, $defaults );
404
 
405
- $default_price_id = edd_get_default_variable_price( $post_id );
406
- $currency_position = edd_get_option( 'currency_position', 'before' );
407
- $custom_price_options = isset( $wp_filter['edd_download_price_option_row'] ) ? true : false;
408
-
409
- // Run our advanced settings now, so we know if we need to display the settings.
410
- // Output buffer so that the headers run, so we can log them and use them later
411
- ob_start();
412
- do_action( 'edd_download_price_table_head', $post_id );
413
- ob_end_clean();
414
 
415
- ob_start();
416
- do_action( 'edd_download_price_table_row', $post_id, $key, $args );
417
- $show_advanced = ob_get_clean();
418
  ?>
419
- <?php
420
- // If we need to show the legacy form fields, load the backwards compatibility layer of the JavaScript as well.
421
- if ( $show_advanced ) {
422
- wp_enqueue_script( 'edd-admin-scripts-compatibility' );
423
- }
424
- ?>
425
- <div class="edd-repeatable-row-header edd-draghandle-anchor">
426
- <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order price options', 'easy-digital-downloads' ); ?>">
427
- <?php printf( __( 'Price ID: %s', 'easy-digital-downloads' ), '<span class="edd_price_id">' . $key . '</span>' ); ?>
428
- <input type="hidden" name="edd_variable_prices[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
429
- </span>
430
- <?php
431
- $actions = array();
432
- if ( ! empty( $show_advanced ) || $custom_price_options ) {
433
- $actions['show_advanced'] = '<a href="#" class="toggle-custom-price-option-section">' . __( 'Show advanced settings', 'easy-digital-downloads' ) . '</a>';
434
- }
435
-
436
- $actions['remove'] = '<a class="edd-remove-row edd-delete" data-type="price">' . sprintf( __( 'Remove', 'easy-digital-downloads' ), $key ) . '<span class="screen-reader-text">' . sprintf( __( 'Remove price option %s', 'easy-digital-downloads' ), $key ) . '</span></a>';
437
- ?>
438
- <span class="edd-repeatable-row-actions">
439
- <?php echo implode( '&nbsp;&#124;&nbsp;', $actions ); ?>
440
- </span>
441
- </div>
442
-
443
- <div class="edd-repeatable-row-standard-fields">
444
-
445
- <div class="edd-option-name">
446
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Option Name', 'easy-digital-downloads' ); ?></span>
447
- <?php echo EDD()->html->text( array(
448
- 'name' => 'edd_variable_prices[' . $key . '][name]',
449
- 'value' => esc_attr( $args['name'] ),
450
- 'placeholder' => __( 'Option Name', 'easy-digital-downloads' ),
451
- 'class' => 'edd_variable_prices_name large-text'
452
- ) ); ?>
453
- </div>
454
 
455
- <div class="edd-option-price">
456
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Price', 'easy-digital-downloads' ); ?></span>
457
- <?php
458
  $price_args = array(
459
  'name' => 'edd_variable_prices[' . $key . '][amount]',
460
  'value' => $args['amount'],
461
  'placeholder' => edd_format_amount( 9.99 ),
462
  'class' => 'edd-price-field'
463
  );
464
- ?>
465
-
466
- <span class="edd-price-input-group">
467
- <?php if( $currency_position == 'before' ) : ?>
468
- <span><?php echo edd_currency_filter( '' ); ?></span>
469
- <?php echo EDD()->html->text( $price_args ); ?>
470
- <?php else : ?>
471
- <?php echo EDD()->html->text( $price_args ); ?>
472
- <?php echo edd_currency_filter( '' ); ?>
473
- <?php endif; ?>
474
- </span>
475
- </div>
476
-
477
- <div class="edd_repeatable_default edd_repeatable_default_wrapper">
478
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Default', 'easy-digital-downloads' ); ?></span>
479
- <label class="edd-default-price">
480
- <input type="radio" <?php checked( $default_price_id, $key, true ); ?> class="edd_repeatable_default_input" name="_edd_default_price_id" value="<?php echo $key; ?>" />
481
- <span class="screen-reader-text"><?php printf( __( 'Set ID %s as default price', 'easy-digital-downloads' ), $key ); ?></span>
482
- </label>
483
- </div>
484
 
485
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
486
 
487
- <?php
488
- /**
489
- * Intercept extension-specific settings and rebuild the markup
490
- */
491
- if ( ! empty( $show_advanced ) || $custom_price_options ) {
492
- ?>
493
 
494
- <div class="edd-custom-price-option-sections-wrap">
495
- <?php
496
- $elements = str_replace(
497
- array(
498
- '<td>',
499
- '<td ',
500
- '</td>',
501
- '<th>',
502
- '<th ',
503
- '</th>',
504
- 'class="times"',
505
- 'class="signup_fee"',
506
- ),
507
- array(
508
- '<span class="edd-custom-price-option-section">',
509
- '<span ',
510
- '</span>',
511
- '<label class="edd-legacy-setting-label">',
512
- '<label ',
513
- '</label>',
514
- 'class="edd-recurring-times times"', // keep old class for back compat
515
- 'class="edd-recurring-signup-fee signup_fee"' // keep old class for back compat
516
- ),
517
- $show_advanced
518
- );
519
- ?>
520
- <div class="edd-custom-price-option-sections">
521
- <?php
522
- echo $elements;
523
- do_action( 'edd_download_price_option_row', $post_id, $key, $args );
524
- ?>
525
- </div>
526
- </div>
527
 
528
- <?php
529
- }
 
 
530
  }
531
  add_action( 'edd_render_price_row', 'edd_render_price_row', 10, 4 );
532
 
@@ -554,7 +484,7 @@ function edd_render_product_type_field( $post_id = 0 ) {
554
  'show_option_all' => false,
555
  'show_option_none' => false
556
  ) ); ?>
557
- <label for="_edd_product_type"><?php _e( 'Select a product type', 'easy-digital-downloads' ); ?></label>
558
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Product Type</strong>: Sell this item as a single product, or use the Bundle type to sell a collection of products.', 'easy-digital-downloads' ); ?>"></span>
559
  </p>
560
  <?php
@@ -574,144 +504,125 @@ function edd_render_products_field( $post_id ) {
574
  $products = $download->get_bundled_downloads();
575
  $variable_pricing = $download->has_variable_prices();
576
  $variable_display = $variable_pricing ? '' : 'display:none;';
577
- $variable_class = $variable_pricing ? ' has-variable-pricing' : '';
578
  $prices = $download->get_prices();
579
  ?>
580
  <div id="edd_products"<?php echo $display; ?>>
581
  <div id="edd_file_fields" class="edd_meta_table_wrap">
582
- <div class="widefat edd_repeatable_table">
583
-
584
- <?php do_action( 'edd_download_products_table_head', $post_id ); ?>
585
-
586
- <div class="edd-bundled-product-select edd-repeatables-wrap">
587
-
588
- <?php if ( $products ) : ?>
589
-
590
- <div class="edd-bundle-products-header">
591
- <span class="edd-bundle-products-title"><?php printf( __( 'Bundled %s', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></span>
592
- </div>
593
-
594
- <?php $index = 1; ?>
595
- <?php foreach ( $products as $key => $product ) : ?>
596
- <div class="edd_repeatable_product_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $index ); ?>">
597
- <div class="edd-bundled-product-row<?php echo $variable_class; ?>">
598
- <div class="edd-bundled-product-item-reorder">
599
- <span class="edd-product-file-reorder edd-draghandle-anchor dashicons dashicons-move" title="<?php printf( __( 'Click and drag to re-order bundled %s', 'easy-digital-downloads' ), edd_get_label_plural() ); ?>"></span>
600
- <input type="hidden" name="edd_bundled_products[<?php echo $index; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
601
- </div>
602
- <div class="edd-bundled-product-item">
603
- <span class="edd-repeatable-row-setting-label"><?php printf( __( 'Select %s:', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></span>
604
- <?php
605
- echo EDD()->html->product_dropdown( array(
606
- 'name' => '_edd_bundled_products[]',
607
- 'id' => 'edd_bundled_products_' . $index,
608
- 'selected' => $product,
609
- 'multiple' => false,
610
- 'chosen' => true,
611
- 'bundles' => false,
612
- 'variations' => true,
613
- ) );
614
- ?>
615
- </div>
616
- <div class="edd-bundled-product-price-assignment pricing" style="<?php echo $variable_display; ?>">
617
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Price assignment:', 'easy-digital-downloads' ); ?></span>
618
- <?php
619
- $options = array();
620
-
621
- if ( $prices ) {
622
- foreach ( $prices as $price_key => $price ) {
623
- $options[ $price_key ] = $prices[ $price_key ]['name'];
624
- }
625
- }
626
-
627
- $price_assignments = edd_get_bundle_pricing_variations( $post_id );
628
- $price_assignments = $price_assignments[0];
629
-
630
- $selected = isset( $price_assignments[ $index ] ) ? $price_assignments[ $index ] : null;
631
-
632
- echo EDD()->html->select( array(
633
- 'name' => '_edd_bundled_products_conditions['. $index .']',
634
- 'class' => 'edd_repeatable_condition_field',
635
- 'options' => $options,
636
- 'show_option_none' => false,
637
- 'selected' => $selected
638
- ) );
639
- ?>
640
- </div>
641
- <span class="edd-bundled-product-actions">
642
- <a class="edd-remove-row edd-delete" data-type="file"><?php printf( __( 'Remove', 'easy-digital-downloads' ), $index ); ?><span class="screen-reader-text"><?php printf( __( 'Remove bundle option %s', 'easy-digital-downloads' ), $index ); ?></span></a>
643
- </span>
644
- <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
645
- </div>
646
- </div>
647
- <?php $index++; ?>
648
- <?php endforeach; ?>
649
-
650
- <?php else: ?>
651
-
652
- <div class="edd-bundle-products-header">
653
- <span class="edd-bundle-products-title"><?php printf( __( 'Bundled %s:', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></span>
654
- </div>
655
- <div class="edd_repeatable_product_wrapper edd_repeatable_row" data-key="1">
656
- <div class="edd-bundled-product-row<?php echo $variable_class; ?>">
657
-
658
- <div class="edd-bundled-product-item-reorder">
659
- <span class="edd-product-file-reorder edd-draghandle-anchor dashicons dashicons-move" title="<?php printf( __( 'Click and drag to re-order bundled %s', 'easy-digital-downloads' ), edd_get_label_plural() ); ?>"></span>
660
- <input type="hidden" name="edd_bundled_products[1][index]" class="edd_repeatable_index" value="1"/>
661
- </div>
662
- <div class="edd-bundled-product-item">
663
- <span class="edd-repeatable-row-setting-label"><?php printf( __( 'Select %s:', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></span>
664
- <?php
665
- echo EDD()->html->product_dropdown( array(
666
- 'name' => '_edd_bundled_products[]',
667
- 'id' => 'edd_bundled_products_1',
668
- 'multiple' => false,
669
- 'chosen' => true,
670
- 'bundles' => false,
671
- 'variations' => true,
672
- ) );
673
- ?>
674
- </div>
675
- <div class="edd-bundled-product-price-assignment pricing" style="<?php echo $variable_display; ?>">
676
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Price assignment:', 'easy-digital-downloads' ); ?></span>
677
- <?php
678
- $options = array();
679
-
680
- if ( $prices ) {
681
- foreach ( $prices as $price_key => $price ) {
682
- $options[ $price_key ] = $prices[ $price_key ]['name'];
683
- }
684
  }
 
685
 
686
- $price_assignments = edd_get_bundle_pricing_variations( $post_id );
687
-
688
- echo EDD()->html->select( array(
689
- 'name' => '_edd_bundled_products_conditions[1]',
690
- 'class' => 'edd_repeatable_condition_field',
691
- 'options' => $options,
692
- 'show_option_none' => false,
693
- 'selected' => null,
694
- ) );
695
- ?>
696
- </div>
697
- <span class="edd-bundled-product-actions">
698
- <a class="edd-remove-row edd-delete" data-type="file" ><?php printf( __( 'Remove', 'easy-digital-downloads' ) ); ?><span class="screen-reader-text"><?php __( 'Remove bundle option 1', 'easy-digital-downloads' ); ?></span></a>
699
- </span>
700
- <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
701
- </div>
702
- </div>
703
 
704
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
 
706
- <div class="edd-add-repeatable-row">
707
- <div class="submit" style="float: none; clear:both; background: #fff;">
708
- <button class="button-secondary edd_add_repeatable"><?php _e( 'Add New File', 'easy-digital-downloads' ); ?></button>
709
- </div>
710
- </div>
711
 
712
- </div>
713
 
714
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
  </div>
716
  </div>
717
  <?php
@@ -738,46 +649,59 @@ function edd_render_files_field( $post_id = 0 ) {
738
  $variable_display = $variable_pricing ? '' : 'display:none;';
739
  ?>
740
  <div id="edd_download_files"<?php echo $display; ?>>
 
 
 
741
 
742
  <input type="hidden" id="edd_download_files" class="edd_repeatable_upload_name_field" value=""/>
743
 
744
  <div id="edd_file_fields" class="edd_meta_table_wrap">
745
- <div class="widefat edd_repeatable_table">
746
-
747
- <div class="edd-file-fields edd-repeatables-wrap">
748
- <?php
749
- if ( ! empty( $files ) && is_array( $files ) ) :
750
- foreach ( $files as $key => $value ) :
751
- $index = isset( $value['index'] ) ? $value['index'] : $key;
752
- $name = isset( $value['name'] ) ? $value['name'] : '';
753
- $file = isset( $value['file'] ) ? $value['file'] : '';
754
- $condition = isset( $value['condition'] ) ? $value['condition'] : false;
755
- $attachment_id = isset( $value['attachment_id'] ) ? absint( $value['attachment_id'] ) : false;
756
- $thumbnail_size = isset( $value['thumbnail_size'] ) ? $value['thumbnail_size'] : '';
757
-
758
- $args = apply_filters( 'edd_file_row_args', compact( 'name', 'file', 'condition', 'attachment_id', 'thumbnail_size' ), $value );
759
- ?>
760
-
761
- <div class="edd_repeatable_upload_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $key ); ?>">
762
- <?php do_action( 'edd_render_file_row', $key, $args, $post_id, $index ); ?>
763
- </div>
764
- <?php
765
- endforeach;
766
- else : ?>
767
- <div class="edd_repeatable_upload_wrapper edd_repeatable_row">
768
- <?php do_action( 'edd_render_file_row', 1, array(), $post_id, 0 ); ?>
769
- </div>
770
- <?php
771
- endif;
772
- ?>
773
-
774
- <div class="edd-add-repeatable-row">
775
- <div class="submit" style="float: none; clear:both; background: #fff;">
776
- <button class="button-secondary edd_add_repeatable"><?php _e( 'Add New File', 'easy-digital-downloads' ); ?></button>
777
- </div>
778
- </div>
779
- </div>
780
- </div>
 
 
 
 
 
 
 
 
 
 
781
  </div>
782
  </div>
783
  <?php
@@ -812,75 +736,67 @@ function edd_render_file_row( $key = '', $args = array(), $post_id, $index ) {
812
 
813
  $variable_pricing = edd_has_variable_prices( $post_id );
814
  $variable_display = $variable_pricing ? '' : ' style="display:none;"';
815
- $variable_class = $variable_pricing ? ' has-variable-pricing' : '';
816
  ?>
817
- <div class="edd-repeatable-row-header edd-draghandle-anchor">
818
- <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order files', 'easy-digital-downloads' ); ?>">
819
- <?php printf( __( '%1$s file ID: %2$s', 'easy-digital-downloads' ), edd_get_label_singular(), '<span class="edd_file_id">' . $key . '</span>' ); ?>
820
- <input type="hidden" name="edd_download_files[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
821
- </span>
822
- <span class="edd-repeatable-row-actions">
823
- <a class="edd-remove-row edd-delete" data-type="file"><?php printf( __( 'Remove', 'easy-digital-downloads' ), $key ); ?><span class="screen-reader-text"><?php printf( __( 'Remove file %s', 'easy-digital-downloads' ), $key ); ?></span>
824
- </a>
825
- </span>
826
- </div>
827
 
828
- <div class="edd-repeatable-row-standard-fields<?php echo $variable_class; ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
829
 
830
- <div class="edd-file-name">
831
- <span class="edd-repeatable-row-setting-label"><?php _e( 'File Name', 'easy-digital-downloads' ); ?></span>
832
- <input type="hidden" name="edd_download_files[<?php echo absint( $key ); ?>][attachment_id]" class="edd_repeatable_attachment_id_field" value="<?php echo esc_attr( absint( $args['attachment_id'] ) ); ?>"/>
833
- <input type="hidden" name="edd_download_files[<?php echo absint( $key ); ?>][thumbnail_size]" class="edd_repeatable_thumbnail_size_field" value="<?php echo esc_attr( $args['thumbnail_size'] ); ?>"/>
834
  <?php echo EDD()->html->text( array(
835
- 'name' => 'edd_download_files[' . $key . '][name]',
836
- 'value' => $args['name'],
837
- 'placeholder' => __( 'File Name', 'easy-digital-downloads' ),
838
- 'class' => 'edd_repeatable_name_field large-text'
839
  ) ); ?>
840
- </div>
841
 
842
- <div class="edd-file-url">
843
- <span class="edd-repeatable-row-setting-label"><?php _e( 'File URL', 'easy-digital-downloads' ); ?></span>
844
- <div class="edd_repeatable_upload_field_container">
845
- <?php echo EDD()->html->text( array(
846
- 'name' => 'edd_download_files[' . $key . '][file]',
847
- 'value' => $args['file'],
848
- 'placeholder' => __( 'Upload or enter the file URL', 'easy-digital-downloads' ),
849
- 'class' => 'edd_repeatable_upload_field edd_upload_field large-text'
850
- ) ); ?>
851
-
852
- <span class="edd_upload_file">
853
- <a href="#" data-uploader-title="<?php _e( 'Insert File', 'easy-digital-downloads' ); ?>" data-uploader-button-text="<?php _e( 'Insert', 'easy-digital-downloads' ); ?>" class="edd_upload_file_button" onclick="return false;"><?php _e( 'Upload a File', 'easy-digital-downloads' ); ?></a>
854
- </span>
855
- </div>
856
  </div>
 
857
 
858
- <div class="edd-file-assignment pricing"<?php echo $variable_display; ?>>
859
-
860
- <span class="edd-repeatable-row-setting-label"><?php _e( 'Price Assignment', 'easy-digital-downloads' ); ?><span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Price Assignment</strong>: With variable pricing enabled, you can choose to allow certain price variations access to specific files, or allow all price variations to access a file.', 'easy-digital-downloads' ); ?>"></span></span>
861
-
862
- <?php
863
- $options = array();
864
 
865
- if ( $prices ) {
866
- foreach ( $prices as $price_key => $price ) {
867
- $options[ $price_key ] = $prices[ $price_key ]['name'];
868
- }
869
  }
 
870
 
871
- echo EDD()->html->select( array(
872
- 'name' => 'edd_download_files[' . $key . '][condition]',
873
- 'class' => 'edd_repeatable_condition_field',
874
- 'options' => $options,
875
- 'selected' => $args['condition'],
876
- 'show_option_none' => false
877
- ) );
878
- ?>
879
- </div>
880
 
881
- <?php do_action( 'edd_download_file_table_row', $post_id, $key, $args ); ?>
 
 
882
 
883
- </div>
 
 
 
 
884
  <?php
885
  }
886
  add_action( 'edd_render_file_row', 'edd_render_file_row', 10, 4 );
@@ -953,20 +869,6 @@ add_action( 'edd_meta_box_settings_fields', 'edd_render_download_limit_row', 20
953
  * @return void
954
  */
955
  function edd_render_dowwn_tax_options( $post_id = 0 ) {
956
- edd_render_down_tax_options( $post_id );
957
- }
958
-
959
- /**
960
- * Product tax settings
961
- *
962
- * Outputs the option to mark whether a product is exclusive of tax
963
- *
964
- * @since 1.9
965
- * @since 2.8.12 Fixed miss-spelling in function name. See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5101
966
- * @param int $post_id Download (Post) ID
967
- * @return void
968
- */
969
- function edd_render_down_tax_options( $post_id = 0 ) {
970
  if( ! current_user_can( 'manage_shop_settings' ) || ! edd_use_taxes() ) {
971
  return;
972
  }
@@ -983,7 +885,7 @@ function edd_render_down_tax_options( $post_id = 0 ) {
983
  </label>
984
  <?php
985
  }
986
- add_action( 'edd_meta_box_settings_fields', 'edd_render_down_tax_options', 30 );
987
 
988
  /**
989
  * Product quantity settings
@@ -1202,115 +1104,3 @@ function edd_render_stats_meta_box() {
1202
  <?php
1203
  do_action('edd_stats_meta_box');
1204
  }
1205
-
1206
- /**
1207
- * Outputs a metabox for the Product Reviews extension to show or activate it.
1208
- *
1209
- * @since 2.8
1210
- * @return void
1211
- */
1212
- function edd_render_review_status_metabox() {
1213
- ob_start();
1214
-
1215
- $possible_locations = array( 'edd-reviews/edd-reviews.php', 'EDD-Reviews/edd-reviews.php' );
1216
- $plugin_found = false;
1217
- foreach ( $possible_locations as $location ) {
1218
- if ( 0 !== validate_plugin( $location ) ) {
1219
- continue;
1220
- }
1221
-
1222
- $plugin_found = $location;
1223
- break;
1224
- }
1225
- if ( false !== $plugin_found ) {
1226
-
1227
- $base_url = wp_nonce_url( admin_url( 'plugins.php' ), 'activate-plugin_' . $plugin_found );
1228
- $args = array(
1229
- 'action' => 'activate',
1230
- 'plugin' => sanitize_text_field( $plugin_found ),
1231
- 'plugin_status' => 'all',
1232
- );
1233
- $activate_url = add_query_arg( $args, $base_url );
1234
- ?><p style="text-align: center;"><a href="<?php echo esc_url( $activate_url ); ?>" class="button-secondary"><?php _e( 'Activate Reviews', 'easy-digital-downloads' ); ?></a></p><?php
1235
-
1236
- } else {
1237
-
1238
- $base_url = 'https://easydigitaldownloads.com/downloads/product-reviews';
1239
- $args = array(
1240
- 'utm_source' => 'edit-download',
1241
- 'utm_medium' => 'enable-reviews',
1242
- 'utm_campaign' => 'admin',
1243
- );
1244
- $url = add_query_arg( $args, $base_url );
1245
- ?>
1246
- <p>
1247
- <?php printf( __( 'Would you like to enable reviews for this product? Check out our <a target="_blank" href="%s">Product Reviews</a> extension.', 'easy-digital-downloads' ), $url ); ?>
1248
- </p>
1249
- <?php
1250
-
1251
- }
1252
-
1253
-
1254
- $rendered = ob_get_contents();
1255
- ob_end_clean();
1256
-
1257
- echo $rendered;
1258
- }
1259
-
1260
- /**
1261
- * Internal use only: This is to help with https://github.com/easydigitaldownloads/easy-digital-downloads/issues/2704
1262
- *
1263
- * This function takes any hooked functions for edd_download_price_table_head and re-registers them into the edd_download_price_table_row
1264
- * action. It will also de-register any original table_row data, so that labels appear before their setting, then re-registers the table_row.
1265
- *
1266
- * @since 2.8
1267
- *
1268
- * @param $arg1
1269
- * @param $arg2
1270
- * @param $arg3
1271
- *
1272
- * @return void
1273
- */
1274
- function edd_hijack_edd_download_price_table_head( $arg1, $arg2, $arg3 ) {
1275
- global $wp_filter;
1276
-
1277
- $found_fields = isset( $wp_filter['edd_download_price_table_row'] ) ? $wp_filter['edd_download_price_table_row'] : false;
1278
- $found_headers = isset( $wp_filter['edd_download_price_table_head'] ) ? $wp_filter['edd_download_price_table_head'] : false;
1279
-
1280
- $re_register = array();
1281
-
1282
- if ( ! $found_fields && ! $found_headers ) {
1283
- return;
1284
- }
1285
-
1286
- foreach ( $found_fields->callbacks as $priority => $callbacks ) {
1287
- if ( -1 === $priority ) {
1288
- continue; // Skip our -1 priority so we don't break the interwebs
1289
- }
1290
-
1291
- if ( is_object( $found_headers ) && property_exists( $found_headers, 'callbacks' ) && array_key_exists( $priority, $found_headers->callbacks ) ) {
1292
-
1293
- // De-register any row data.
1294
- foreach ( $callbacks as $callback ) {
1295
- $re_register[ $priority ][] = $callback;
1296
- remove_action( 'edd_download_price_table_row', $callback['function'], $priority, $callback['accepted_args'] );
1297
- }
1298
-
1299
- // Register any header data.
1300
- foreach( $found_headers->callbacks[ $priority ] as $callback ) {
1301
- if ( is_callable( $callback['function'] ) ) {
1302
- add_action( 'edd_download_price_table_row', $callback['function'], $priority, 1 );
1303
- }
1304
- }
1305
- }
1306
-
1307
- }
1308
-
1309
- // Now that we've re-registered our headers first...re-register the inputs
1310
- foreach ( $re_register as $priority => $callbacks ) {
1311
- foreach ( $callbacks as $callback ) {
1312
- add_action( 'edd_download_price_table_row', $callback['function'], $priority, $callback['accepted_args'] );
1313
- }
1314
- }
1315
- }
1316
- add_action( 'edd_download_price_table_row', 'edd_hijack_edd_download_price_table_head', -1, 3 );
42
  /** Product Stats */
43
  add_meta_box( 'edd_product_stats', sprintf( __( '%1$s Stats', 'easy-digital-downloads' ), edd_get_label_singular(), edd_get_label_plural() ), 'edd_render_stats_meta_box', $post_type, 'side', 'high' );
44
  }
 
 
 
 
 
45
  }
46
  }
47
  add_action( 'add_meta_boxes', 'edd_add_download_meta_box' );
297
  $price_display = $variable_pricing ? ' style="display:none;"' : '';
298
  $variable_display = $variable_pricing ? '' : ' style="display:none;"';
299
  $currency_position = edd_get_option( 'currency_position', 'before' );
300
+ ?>
301
  <p>
302
  <strong><?php echo apply_filters( 'edd_price_options_heading', __( 'Pricing Options:', 'easy-digital-downloads' ) ); ?></strong>
303
  </p>
338
  <label for="_edd_price_options_mode"><?php echo apply_filters( 'edd_multi_option_purchase_text', __( 'Enable multi-option purchase mode. Allows multiple price options to be added to your cart at once', 'easy-digital-downloads' ) ); ?></label>
339
  </p>
340
  <div id="edd_price_fields" class="edd_meta_table_wrap">
341
+ <table class="widefat edd_repeatable_table" width="100%" cellpadding="0" cellspacing="0">
342
+ <thead>
343
+ <tr>
344
+ <th style="width: 20px"></th>
345
+ <th><?php _e( 'Option Name', 'easy-digital-downloads' ); ?></th>
346
+ <th style="width: 100px"><?php _e( 'Price', 'easy-digital-downloads' ); ?></th>
347
+ <th class="edd_repeatable_default"><?php _e( 'Default', 'easy-digital-downloads' ); ?></th>
348
+ <th style="width: 15px"><?php _e( 'ID', 'easy-digital-downloads' ); ?></th>
349
+ <?php do_action( 'edd_download_price_table_head', $post_id ); ?>
350
+ <th style="width: 2%"></th>
351
+ </tr>
352
+ </thead>
353
+ <tbody>
354
  <?php
355
  if ( ! empty( $prices ) ) :
356
 
357
  foreach ( $prices as $key => $value ) :
358
+ $name = isset( $value['name'] ) ? $value['name'] : '';
 
359
  $amount = isset( $value['amount'] ) ? $value['amount'] : '';
360
+ $index = isset( $value['index'] ) ? $value['index'] : $key;
361
+ $args = apply_filters( 'edd_price_row_args', compact( 'name', 'amount' ), $value );
362
  ?>
363
+ <tr class="edd_variable_prices_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $key ); ?>">
364
  <?php do_action( 'edd_render_price_row', $key, $args, $post_id, $index ); ?>
365
+ </tr>
366
  <?php
367
  endforeach;
368
  else :
369
  ?>
370
+ <tr class="edd_variable_prices_wrapper edd_repeatable_row" data-key="1">
371
  <?php do_action( 'edd_render_price_row', 1, array(), $post_id, 1 ); ?>
372
+ </tr>
373
  <?php endif; ?>
374
 
375
+ <tr>
376
+ <td class="submit" colspan="4" style="float: none; clear:both; background:#fff;">
377
+ <button class="button-secondary edd_add_repeatable" style="margin: 6px 0;"><?php _e( 'Add New Price', 'easy-digital-downloads' ); ?></button>
378
+ </td>
379
+ </tr>
380
+ </tbody>
381
+ </table>
382
  </div>
383
  </div><!--end #edd_variable_price_fields-->
384
  <?php
398
  * @param $post_id
399
  */
400
  function edd_render_price_row( $key, $args = array(), $post_id, $index ) {
 
 
401
  $defaults = array(
402
  'name' => null,
403
  'amount' => null
405
 
406
  $args = wp_parse_args( $args, $defaults );
407
 
408
+ $default_price_id = edd_get_default_variable_price( $post_id );
409
+ $currency_position = edd_get_option( 'currency_position', 'before' );
 
 
 
 
 
 
 
410
 
 
 
 
411
  ?>
412
+ <td>
413
+ <span class="edd_draghandle"></span>
414
+ <input type="hidden" name="edd_variable_prices[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
415
+ </td>
416
+ <td>
417
+ <?php echo EDD()->html->text( array(
418
+ 'name' => 'edd_variable_prices[' . $key . '][name]',
419
+ 'value' => esc_attr( $args['name'] ),
420
+ 'placeholder' => __( 'Option Name', 'easy-digital-downloads' ),
421
+ 'class' => 'edd_variable_prices_name large-text'
422
+ ) ); ?>
423
+ </td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
 
425
+ <td>
426
+ <?php
 
427
  $price_args = array(
428
  'name' => 'edd_variable_prices[' . $key . '][amount]',
429
  'value' => $args['amount'],
430
  'placeholder' => edd_format_amount( 9.99 ),
431
  'class' => 'edd-price-field'
432
  );
433
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
 
435
+ <?php if( $currency_position == 'before' ) : ?>
436
+ <span><?php echo edd_currency_filter( '' ); ?></span>
437
+ <?php echo EDD()->html->text( $price_args ); ?>
438
+ <?php else : ?>
439
+ <?php echo EDD()->html->text( $price_args ); ?>
440
+ <?php echo edd_currency_filter( '' ); ?>
441
+ <?php endif; ?>
442
+ </td>
443
+ <td class="edd_repeatable_default_wrapper">
444
+ <label class="edd-default-price">
445
+ <input type="radio" <?php checked( $default_price_id, $key, true ); ?> class="edd_repeatable_default_input" name="_edd_default_price_id" value="<?php echo $key; ?>" />
446
+ <span class="screen-reader-text"><?php printf( __( 'Set ID %s as default price', 'easy-digital-downloads' ), $key ); ?></span>
447
+ </label>
448
+ </td>
449
 
450
+ <td>
451
+ <span class="edd_price_id"><?php echo $key; ?></span>
452
+ </td>
 
 
 
453
 
454
+ <?php do_action( 'edd_download_price_table_row', $post_id, $key, $args ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
 
456
+ <td>
457
+ <button class="edd_remove_repeatable" data-type="price" style="background: url(<?php echo admin_url('/images/xit.gif'); ?>) no-repeat;"><span class="screen-reader-text"><?php printf( __( 'Remove price option %s', 'easy-digital-downloads' ), $key ); ?></span><span aria-hidden="true">&times;</span></button>
458
+ </td>
459
+ <?php
460
  }
461
  add_action( 'edd_render_price_row', 'edd_render_price_row', 10, 4 );
462
 
484
  'show_option_all' => false,
485
  'show_option_none' => false
486
  ) ); ?>
487
+ <label for="edd_product_type"><?php _e( 'Select a product type', 'easy-digital-downloads' ); ?></label>
488
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Product Type</strong>: Sell this item as a single product, or use the Bundle type to sell a collection of products.', 'easy-digital-downloads' ); ?>"></span>
489
  </p>
490
  <?php
504
  $products = $download->get_bundled_downloads();
505
  $variable_pricing = $download->has_variable_prices();
506
  $variable_display = $variable_pricing ? '' : 'display:none;';
 
507
  $prices = $download->get_prices();
508
  ?>
509
  <div id="edd_products"<?php echo $display; ?>>
510
  <div id="edd_file_fields" class="edd_meta_table_wrap">
511
+ <table class="widefat edd_repeatable_table" width="100%" cellpadding="0" cellspacing="0">
512
+ <thead>
513
+ <tr>
514
+ <th style="width: 20px"></th>
515
+ <th><?php printf( __( 'Bundled %s:', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></th>
516
+ <th></th>
517
+ <th class="pricing" style="width: 20%; <?php echo $variable_display; ?>"><?php _e( 'Price Assignment', 'easy-digital-downloads' ); ?></th>
518
+ <?php do_action( 'edd_download_products_table_head', $post_id ); ?>
519
+ </tr>
520
+ </thead>
521
+ <tbody>
522
+ <?php if ( $products ) : ?>
523
+ <?php $index = 1; ?>
524
+ <?php foreach ( $products as $key => $product ) : ?>
525
+ <tr class="edd_repeatable_product_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $index ); ?>">
526
+ <td>
527
+ <span class="edd_draghandle"></span>
528
+ <input type="hidden" name="edd_bundled_products[<?php echo $index; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
529
+ </td>
530
+ <td>
531
+ <?php
532
+ echo EDD()->html->product_dropdown( array(
533
+ 'name' => '_edd_bundled_products[]',
534
+ 'id' => 'edd_bundled_products_' . $index,
535
+ 'selected' => $product,
536
+ 'multiple' => false,
537
+ 'chosen' => true,
538
+ 'bundles' => false,
539
+ 'variations' => true,
540
+ ) );
541
+ ?>
542
+ </td>
543
+ <td>
544
+ <button class="edd_remove_repeatable" data-type="file" style="background: url(<?php echo admin_url('/images/xit.gif'); ?>) no-repeat;"><span class="screen-reader-text"><?php printf( __( 'Remove bundle option %s', 'easy-digital-downloads' ), $index ); ?></span><span aria-hidden="true">&times;</span></button>
545
+ </td>
546
+ <td class="pricing" style="<?php echo $variable_display; ?>">
547
+ <?php
548
+ $options = array();
549
+
550
+ if ( $prices ) {
551
+ foreach ( $prices as $price_key => $price ) {
552
+ $options[ $price_key ] = $prices[ $price_key ]['name'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
553
  }
554
+ }
555
 
556
+ $price_assignments = edd_get_bundle_pricing_variations( $post_id );
557
+ $price_assignments = $price_assignments[0];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
558
 
559
+ $selected = isset( $price_assignments[ $index ] ) ? $price_assignments[ $index ] : null;
560
+
561
+ echo EDD()->html->select( array(
562
+ 'name' => '_edd_bundled_products_conditions['. $index .']',
563
+ 'class' => 'edd_repeatable_condition_field',
564
+ 'options' => $options,
565
+ 'show_option_none' => false,
566
+ 'selected' => $selected
567
+ ) );
568
+ ?>
569
+ </td>
570
+ <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
571
+ </tr>
572
+ <?php $index++; ?>
573
+ <?php endforeach; ?>
574
+ <?php else: ?>
575
+ <tr class="edd_repeatable_product_wrapper edd_repeatable_row" data-key="1">
576
+ <td>
577
+ <span class="edd_draghandle"></span>
578
+ <input type="hidden" name="edd_bundled_products[1][index]" class="edd_repeatable_index" value="1"/>
579
+ </td>
580
+ <td>
581
+ <?php
582
+ echo EDD()->html->product_dropdown( array(
583
+ 'name' => '_edd_bundled_products[]',
584
+ 'id' => 'edd_bundled_products_1',
585
+ 'multiple' => false,
586
+ 'chosen' => true,
587
+ 'bundles' => false,
588
+ 'variations' => true,
589
+ ) );
590
+ ?>
591
+ </td>
592
+ <td>
593
+ <button class="edd_remove_repeatable" data-type="file" style="background: url(<?php echo admin_url('/images/xit.gif'); ?>) no-repeat;"><span class="screen-reader-text"><?php echo __( 'Remove bundle option', 'easy-digital-downloads' ); ?></span><span aria-hidden="true">&times;</span></button>
594
+ </td>
595
+ <td class="pricing" style="<?php echo $variable_display; ?>">
596
+ <?php
597
+ $options = array();
598
 
599
+ if ( $prices ) {
600
+ foreach ( $prices as $price_key => $price ) {
601
+ $options[ $price_key ] = $prices[ $price_key ]['name'];
602
+ }
603
+ }
604
 
605
+ $price_assignments = edd_get_bundle_pricing_variations( $post_id );
606
 
607
+ echo EDD()->html->select( array(
608
+ 'name' => '_edd_bundled_products_conditions[1]',
609
+ 'class' => 'edd_repeatable_condition_field',
610
+ 'options' => $options,
611
+ 'show_option_none' => false,
612
+ 'selected' => null,
613
+ ) );
614
+ ?>
615
+ </td>
616
+ <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
617
+ </tr>
618
+ <?php endif; ?>
619
+ <tr>
620
+ <td class="submit" colspan="3" style="float: none; clear:both; background: #fff;">
621
+ <button class="button-secondary edd_add_repeatable" style="margin: 6px 0 10px;"><?php _e( 'Add New File', 'easy-digital-downloads' ); ?></button>
622
+ </td>
623
+ </tr>
624
+ </tbody>
625
+ </table>
626
  </div>
627
  </div>
628
  <?php
649
  $variable_display = $variable_pricing ? '' : 'display:none;';
650
  ?>
651
  <div id="edd_download_files"<?php echo $display; ?>>
652
+ <p>
653
+ <strong><?php _e( 'File Downloads:', 'easy-digital-downloads' ); ?></strong>
654
+ </p>
655
 
656
  <input type="hidden" id="edd_download_files" class="edd_repeatable_upload_name_field" value=""/>
657
 
658
  <div id="edd_file_fields" class="edd_meta_table_wrap">
659
+ <table class="widefat edd_repeatable_table" width="100%" cellpadding="0" cellspacing="0">
660
+ <thead>
661
+ <tr>
662
+ <th style="width: 20px"></th>
663
+ <th style="width: 20%"><?php _e( 'File Name', 'easy-digital-downloads' ); ?></th>
664
+ <th><?php _e( 'File URL', 'easy-digital-downloads' ); ?></th>
665
+ <th class="pricing" style="width: 20%; <?php echo $variable_display; ?>">
666
+ <?php _e( 'Price Assignment', 'easy-digital-downloads' ); ?>
667
+ <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( '<strong>Price Assignment</strong>: With variable pricing enabled, you can choose to allow certain price variations access to specific files, or allow all price variations to access a file.', 'easy-digital-downloads' ); ?>"></span>
668
+ </th>
669
+ <th style="width: 15px"><?php _e( 'ID', 'easy-digital-downloads' ); ?></th>
670
+ <?php do_action( 'edd_download_file_table_head', $post_id ); ?>
671
+ <th style="width: 2%"></th>
672
+ </tr>
673
+ </thead>
674
+ <tbody>
675
+ <?php
676
+ if ( ! empty( $files ) && is_array( $files ) ) :
677
+ foreach ( $files as $key => $value ) :
678
+ $index = isset( $value['index'] ) ? $value['index'] : $key;
679
+ $name = isset( $value['name'] ) ? $value['name'] : '';
680
+ $file = isset( $value['file'] ) ? $value['file'] : '';
681
+ $condition = isset( $value['condition'] ) ? $value['condition'] : false;
682
+ $attachment_id = isset( $value['attachment_id'] ) ? absint( $value['attachment_id'] ) : false;
683
+ $thumbnail_size = isset( $value['thumbnail_size'] ) ? $value['thumbnail_size'] : '';
684
+
685
+ $args = apply_filters( 'edd_file_row_args', compact( 'name', 'file', 'condition', 'attachment_id', 'thumbnail_size' ), $value );
686
+ ?>
687
+ <tr class="edd_repeatable_upload_wrapper edd_repeatable_row" data-key="<?php echo esc_attr( $key ); ?>">
688
+ <?php do_action( 'edd_render_file_row', $key, $args, $post_id, $index ); ?>
689
+ </tr>
690
+ <?php
691
+ endforeach;
692
+ else :
693
+ ?>
694
+ <tr class="edd_repeatable_upload_wrapper edd_repeatable_row">
695
+ <?php do_action( 'edd_render_file_row', 1, array(), $post_id, 0 ); ?>
696
+ </tr>
697
+ <?php endif; ?>
698
+ <tr>
699
+ <td class="submit" colspan="4" style="float: none; clear:both; background: #fff;">
700
+ <button class="button-secondary edd_add_repeatable" style="margin: 6px 0 10px;"><?php _e( 'Add New File', 'easy-digital-downloads' ); ?></button>
701
+ </td>
702
+ </tr>
703
+ </tbody>
704
+ </table>
705
  </div>
706
  </div>
707
  <?php
736
 
737
  $variable_pricing = edd_has_variable_prices( $post_id );
738
  $variable_display = $variable_pricing ? '' : ' style="display:none;"';
 
739
  ?>
 
 
 
 
 
 
 
 
 
 
740
 
741
+ <td>
742
+ <span class="edd_draghandle"></span>
743
+ <input type="hidden" name="edd_download_files[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
744
+ </td>
745
+ <td>
746
+ <input type="hidden" name="edd_download_files[<?php echo absint( $key ); ?>][attachment_id]" class="edd_repeatable_attachment_id_field" value="<?php echo esc_attr( absint( $args['attachment_id'] ) ); ?>"/>
747
+ <input type="hidden" name="edd_download_files[<?php echo absint( $key ); ?>][thumbnail_size]" class="edd_repeatable_thumbnail_size_field" value="<?php echo esc_attr( $args['thumbnail_size'] ); ?>"/>
748
+ <?php echo EDD()->html->text( array(
749
+ 'name' => 'edd_download_files[' . $key . '][name]',
750
+ 'value' => $args['name'],
751
+ 'placeholder' => __( 'File Name', 'easy-digital-downloads' ),
752
+ 'class' => 'edd_repeatable_name_field large-text'
753
+ ) ); ?>
754
+ </td>
755
 
756
+ <td>
757
+ <div class="edd_repeatable_upload_field_container">
 
 
758
  <?php echo EDD()->html->text( array(
759
+ 'name' => 'edd_download_files[' . $key . '][file]',
760
+ 'value' => $args['file'],
761
+ 'placeholder' => __( 'Upload or enter the file URL', 'easy-digital-downloads' ),
762
+ 'class' => 'edd_repeatable_upload_field edd_upload_field large-text'
763
  ) ); ?>
 
764
 
765
+ <span class="edd_upload_file">
766
+ <a href="#" data-uploader-title="<?php _e( 'Insert File', 'easy-digital-downloads' ); ?>" data-uploader-button-text="<?php _e( 'Insert', 'easy-digital-downloads' ); ?>" class="edd_upload_file_button" onclick="return false;"><?php _e( 'Upload a File', 'easy-digital-downloads' ); ?></a>
767
+ </span>
 
 
 
 
 
 
 
 
 
 
 
768
  </div>
769
+ </td>
770
 
771
+ <td class="pricing"<?php echo $variable_display; ?>>
772
+ <?php
773
+ $options = array();
 
 
 
774
 
775
+ if ( $prices ) {
776
+ foreach ( $prices as $price_key => $price ) {
777
+ $options[ $price_key ] = $prices[ $price_key ]['name'];
 
778
  }
779
+ }
780
 
781
+ echo EDD()->html->select( array(
782
+ 'name' => 'edd_download_files[' . $key . '][condition]',
783
+ 'class' => 'edd_repeatable_condition_field',
784
+ 'options' => $options,
785
+ 'selected' => $args['condition'],
786
+ 'show_option_none' => false
787
+ ) );
788
+ ?>
789
+ </td>
790
 
791
+ <td>
792
+ <span class="edd_file_id"><?php echo $key; ?></span>
793
+ </td>
794
 
795
+ <?php do_action( 'edd_download_file_table_row', $post_id, $key, $args ); ?>
796
+
797
+ <td>
798
+ <button class="edd_remove_repeatable" data-type="file" style="background: url(<?php echo admin_url('/images/xit.gif'); ?>) no-repeat;"><span class="screen-reader-text"><?php printf( __( 'Remove file option %s', 'easy-digital-downloads' ), $key ); ?></span><span aria-hidden="true">&times;</span></button>
799
+ </td>
800
  <?php
801
  }
802
  add_action( 'edd_render_file_row', 'edd_render_file_row', 10, 4 );
869
  * @return void
870
  */
871
  function edd_render_dowwn_tax_options( $post_id = 0 ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
872
  if( ! current_user_can( 'manage_shop_settings' ) || ! edd_use_taxes() ) {
873
  return;
874
  }
885
  </label>
886
  <?php
887
  }
888
+ add_action( 'edd_meta_box_settings_fields', 'edd_render_dowwn_tax_options', 30 );
889
 
890
  /**
891
  * Product quantity settings
1104
  <?php
1105
  do_action('edd_stats_meta_box');
1106
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/admin/import/class-batch-import-downloads.php CHANGED
@@ -257,7 +257,7 @@ class EDD_Batch_Downloads_Import extends EDD_Batch_Import {
257
  public function get_percentage_complete() {
258
 
259
  if( $this->total > 0 ) {
260
- $percentage = ( $this->step * $this->per_step / $this->total ) * 100;
261
  }
262
 
263
  if( $percentage > 100 ) {
257
  public function get_percentage_complete() {
258
 
259
  if( $this->total > 0 ) {
260
+ $percentage = ( $this->step / $this->total ) * 100;
261
  }
262
 
263
  if( $percentage > 100 ) {
includes/admin/import/class-batch-import-payments.php CHANGED
@@ -85,11 +85,6 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
85
 
86
  if( $offset > $this->total ) {
87
  $this->done = true;
88
-
89
- // Clean up the temporary records in the payment import process
90
- global $wpdb;
91
- $sql = "DELETE FROM {$wpdb->prefix}edd_customermeta WHERE meta_key = '_canonical_import_id'";
92
- $wpdb->query( $sql );
93
  }
94
 
95
  if( ! $this->done && $this->csv->data ) {
@@ -302,7 +297,6 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
302
  $download_name = $download['download'];
303
  $price = $download['price'];
304
  $tax = $download['tax'];
305
- $price_id = $download['price_id'];
306
  } else {
307
  $download_name = $download;
308
  }
@@ -315,15 +309,11 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
315
 
316
  $item_price = ! isset( $price ) ? edd_get_download_price( $download_id ) : $price;
317
  $item_tax = ! isset( $tax ) ? ( $download_count > 1 ? 0.00 : $payment->tax ) : $tax;
318
- $price_id = ! isset( $price_id ) ? false : $price_id;
319
 
320
- $args = array(
321
  'item_price' => $item_price,
322
- 'tax' => $item_tax,
323
- 'price_id' => $price_id,
324
- );
325
-
326
- $payment->add_download( $download_id, $args );
327
 
328
  }
329
 
@@ -541,16 +531,14 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
541
  foreach( $downloads as $key => $download ) {
542
 
543
  $d = (array) explode( '|', $download );
544
- preg_match_all( '/\{(\d|(\d+(\.\d+|\d+)))\}/', $d[1], $matches );
545
  $price = trim( substr( $d[1], 0, strpos( $d[1], '{' ) ) );
546
- $tax = isset( $matches[1][0] ) ? trim( $matches[1][0] ) : 0;
547
- $price_id = isset( $matches[1][1] ) ? trim( $matches[1][1] ) : false;
548
 
549
  $d_array[] = array(
550
  'download' => trim( $d[0] ),
551
  'price' => $price - $tax,
552
- 'tax' => $tax,
553
- 'price_id' => $price_id,
554
  );
555
 
556
  }
@@ -572,7 +560,7 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
572
  $total = count( $this->csv->data );
573
 
574
  if( $total > 0 ) {
575
- $percentage = ( $this->step * $this->per_step / $total ) * 100;
576
  }
577
 
578
  if( $percentage > 100 ) {
85
 
86
  if( $offset > $this->total ) {
87
  $this->done = true;
 
 
 
 
 
88
  }
89
 
90
  if( ! $this->done && $this->csv->data ) {
297
  $download_name = $download['download'];
298
  $price = $download['price'];
299
  $tax = $download['tax'];
 
300
  } else {
301
  $download_name = $download;
302
  }
309
 
310
  $item_price = ! isset( $price ) ? edd_get_download_price( $download_id ) : $price;
311
  $item_tax = ! isset( $tax ) ? ( $download_count > 1 ? 0.00 : $payment->tax ) : $tax;
 
312
 
313
+ $payment->add_download( $download_id, array(
314
  'item_price' => $item_price,
315
+ 'tax' => $item_tax
316
+ ) );
 
 
 
317
 
318
  }
319
 
531
  foreach( $downloads as $key => $download ) {
532
 
533
  $d = (array) explode( '|', $download );
534
+ preg_match( '/\{(\d+(\.\d+|\d+))\}/', $d[1], $matches );
535
  $price = trim( substr( $d[1], 0, strpos( $d[1], '{' ) ) );
536
+ $tax = isset( $matches[1] ) ? trim( $matches[1] ) : 0;
 
537
 
538
  $d_array[] = array(
539
  'download' => trim( $d[0] ),
540
  'price' => $price - $tax,
541
+ 'tax' => $tax
 
542
  );
543
 
544
  }
560
  $total = count( $this->csv->data );
561
 
562
  if( $total > 0 ) {
563
+ $percentage = ( $this->step / $total ) * 100;
564
  }
565
 
566
  if( $percentage > 100 ) {
includes/admin/payments/class-payments-table.php CHANGED
@@ -66,14 +66,6 @@ class EDD_Payment_History_Table extends WP_List_Table {
66
  */
67
  public $pending_count;
68
 
69
- /**
70
- * Total number of processing payments
71
- *
72
- * @var int
73
- * @since 2.8
74
- */
75
- public $processing_count;
76
-
77
  /**
78
  * Total number of refunded payments
79
  *
@@ -133,59 +125,19 @@ class EDD_Payment_History_Table extends WP_List_Table {
133
  $start_date = isset( $_GET['start-date'] ) ? sanitize_text_field( $_GET['start-date'] ) : null;
134
  $end_date = isset( $_GET['end-date'] ) ? sanitize_text_field( $_GET['end-date'] ) : null;
135
  $status = isset( $_GET['status'] ) ? $_GET['status'] : '';
136
-
137
- $all_gateways = edd_get_payment_gateways();
138
- $gateways = array();
139
- $selected_gateway = isset( $_GET['gateway'] ) ? sanitize_text_field( $_GET['gateway'] ) : 'all';
140
-
141
- if ( ! empty( $all_gateways ) ) {
142
- $gateways['all'] = __( 'All Gateways', 'edd' );
143
-
144
- foreach( $all_gateways as $slug => $admin_label ) {
145
- $gateways[ $slug ] = $admin_label['admin_label'];
146
- }
147
- }
148
-
149
- /**
150
- * Allow gateways that aren't registered the standard way to be displayed in the dropdown.
151
- *
152
- * @since 2.8.11
153
- */
154
- $gateways = apply_filters( 'edd_payments_table_gateways', $gateways );
155
- ?>
156
  <div id="edd-payment-filters">
157
  <span id="edd-payment-date-filters">
158
- <span>
159
- <label for="start-date"><?php _e( 'Start Date:', 'easy-digital-downloads' ); ?></label>
160
- <input type="text" id="start-date" name="start-date" class="edd_datepicker" value="<?php echo $start_date; ?>" placeholder="mm/dd/yyyy"/>
161
- </span>
162
- <span>
163
- <label for="end-date"><?php _e( 'End Date:', 'easy-digital-downloads' ); ?></label>
164
- <input type="text" id="end-date" name="end-date" class="edd_datepicker" value="<?php echo $end_date; ?>" placeholder="mm/dd/yyyy"/>
165
- </span>
166
- </span>
167
- <span id="edd-payment-gateway-filter">
168
- <?php
169
- if ( ! empty( $gateways ) ) {
170
- echo EDD()->html->select( array(
171
- 'options' => $gateways,
172
- 'name' => 'gateway',
173
- 'id' => 'gateway',
174
- 'selected' => $selected_gateway,
175
- 'show_option_all' => false,
176
- 'show_option_none' => false
177
- ) );
178
- }
179
- ?>
180
- </span>
181
- <span id="edd-payment-after-core-filters">
182
- <?php do_action( 'edd_payment_advanced_filters_after_fields' ); ?>
183
  <input type="submit" class="button-secondary" value="<?php _e( 'Apply', 'easy-digital-downloads' ); ?>"/>
184
  </span>
185
  <?php if( ! empty( $status ) ) : ?>
186
  <input type="hidden" name="status" value="<?php echo esc_attr( $status ); ?>"/>
187
  <?php endif; ?>
188
- <?php if( ! empty( $start_date ) || ! empty( $end_date ) || 'all' !== $selected_gateway ) : ?>
189
  <a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history' ); ?>" class="button-secondary"><?php _e( 'Clear Filter', 'easy-digital-downloads' ); ?></a>
190
  <?php endif; ?>
191
  <?php do_action( 'edd_payment_advanced_filters_row' ); ?>
@@ -235,25 +187,23 @@ class EDD_Payment_History_Table extends WP_List_Table {
235
  */
236
  public function get_views() {
237
 
238
- $current = isset( $_GET['status'] ) ? $_GET['status'] : '';
239
- $total_count = '&nbsp;<span class="count">(' . $this->total_count . ')</span>';
240
- $complete_count = '&nbsp;<span class="count">(' . $this->complete_count . ')</span>';
241
- $pending_count = '&nbsp;<span class="count">(' . $this->pending_count . ')</span>';
242
- $processing_count = '&nbsp;<span class="count">(' . $this->processing_count . ')</span>';
243
- $refunded_count = '&nbsp;<span class="count">(' . $this->refunded_count . ')</span>';
244
- $failed_count = '&nbsp;<span class="count">(' . $this->failed_count . ')</span>';
245
- $abandoned_count = '&nbsp;<span class="count">(' . $this->abandoned_count . ')</span>';
246
- $revoked_count = '&nbsp;<span class="count">(' . $this->revoked_count . ')</span>';
247
 
248
  $views = array(
249
- 'all' => sprintf( '<a href="%s"%s>%s</a>', remove_query_arg( array( 'status', 'paged' ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __('All','easy-digital-downloads' ) . $total_count ),
250
- 'publish' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'publish', 'paged' => FALSE ) ), $current === 'publish' ? ' class="current"' : '', __('Completed','easy-digital-downloads' ) . $complete_count ),
251
- 'pending' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'pending', 'paged' => FALSE ) ), $current === 'pending' ? ' class="current"' : '', __('Pending','easy-digital-downloads' ) . $pending_count ),
252
- 'processing' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'processing', 'paged' => FALSE ) ), $current === 'processing' ? ' class="current"' : '', __('Processing','easy-digital-downloads' ) . $processing_count ),
253
- 'refunded' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'refunded', 'paged' => FALSE ) ), $current === 'refunded' ? ' class="current"' : '', __('Refunded','easy-digital-downloads' ) . $refunded_count ),
254
- 'revoked' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'revoked', 'paged' => FALSE ) ), $current === 'revoked' ? ' class="current"' : '', __('Revoked','easy-digital-downloads' ) . $revoked_count ),
255
- 'failed' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'failed', 'paged' => FALSE ) ), $current === 'failed' ? ' class="current"' : '', __('Failed','easy-digital-downloads' ) . $failed_count ),
256
- 'abandoned' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'abandoned', 'paged' => FALSE ) ), $current === 'abandoned' ? ' class="current"' : '', __('Abandoned','easy-digital-downloads' ) . $abandoned_count ),
257
  );
258
 
259
  return apply_filters( 'edd_payments_table_views', $views );
@@ -445,7 +395,6 @@ class EDD_Payment_History_Table extends WP_List_Table {
445
  'delete' => __( 'Delete', 'easy-digital-downloads' ),
446
  'set-status-publish' => __( 'Set To Completed', 'easy-digital-downloads' ),
447
  'set-status-pending' => __( 'Set To Pending', 'easy-digital-downloads' ),
448
- 'set-status-processing' => __( 'Set To Processing', 'easy-digital-downloads' ),
449
  'set-status-refunded' => __( 'Set To Refunded', 'easy-digital-downloads' ),
450
  'set-status-revoked' => __( 'Set To Revoked', 'easy-digital-downloads' ),
451
  'set-status-failed' => __( 'Set To Failed', 'easy-digital-downloads' ),
@@ -490,10 +439,6 @@ class EDD_Payment_History_Table extends WP_List_Table {
490
  edd_update_payment_status( $id, 'pending' );
491
  }
492
 
493
- if ( 'set-status-processing' === $this->current_action() ) {
494
- edd_update_payment_status( $id, 'processing' );
495
- }
496
-
497
  if ( 'set-status-refunded' === $this->current_action() ) {
498
  edd_update_payment_status( $id, 'refunded' );
499
  }
@@ -519,6 +464,7 @@ class EDD_Payment_History_Table extends WP_List_Table {
519
  }
520
 
521
  if( 'resend-receipt' === $this->current_action() ) {
 
522
  edd_email_purchase_receipt( $id, false );
523
  }
524
 
@@ -564,18 +510,13 @@ class EDD_Payment_History_Table extends WP_List_Table {
564
  $args['end-date'] = urldecode( $_GET['end-date'] );
565
  }
566
 
567
- if ( ! empty( $_GET['gateway'] ) && $_GET['gateway'] !== 'all' ) {
568
- $args['gateway'] = $_GET['gateway'];
569
- }
570
-
571
- $payment_count = edd_count_payments( $args );
572
- $this->complete_count = $payment_count->publish;
573
- $this->pending_count = $payment_count->pending;
574
- $this->processing_count = $payment_count->processing;
575
- $this->refunded_count = $payment_count->refunded;
576
- $this->failed_count = $payment_count->failed;
577
- $this->revoked_count = $payment_count->revoked;
578
- $this->abandoned_count = $payment_count->abandoned;
579
 
580
  foreach( $payment_count as $count ) {
581
  $this->total_count += $count;
@@ -604,26 +545,11 @@ class EDD_Payment_History_Table extends WP_List_Table {
604
  $search = isset( $_GET['s'] ) ? sanitize_text_field( $_GET['s'] ) : null;
605
  $start_date = isset( $_GET['start-date'] ) ? sanitize_text_field( $_GET['start-date'] ) : null;
606
  $end_date = isset( $_GET['end-date'] ) ? sanitize_text_field( $_GET['end-date'] ) : $start_date;
607
- $gateway = isset( $_GET['gateway'] ) ? sanitize_text_field( $_GET['gateway'] ) : null;
608
-
609
- /**
610
- * Introduced as part of #6063. Allow a gateway to specified based on the context.
611
- *
612
- * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/6063
613
- * @since 2.8.11
614
- *
615
- * @param string $gateway
616
- */
617
- $gateway = apply_filters( 'edd_payments_table_search_gateway', $gateway );
618
 
619
  if( ! empty( $search ) ) {
620
  $status = 'any'; // Force all payment statuses when searching
621
  }
622
 
623
- if ( $gateway === 'all' ) {
624
- $gateway = null;
625
- }
626
-
627
  $args = array(
628
  'output' => 'payments',
629
  'number' => $per_page,
@@ -640,7 +566,6 @@ class EDD_Payment_History_Table extends WP_List_Table {
640
  's' => $search,
641
  'start_date' => $start_date,
642
  'end_date' => $end_date,
643
- 'gateway' => $gateway
644
  );
645
 
646
  if( is_string( $search ) && false !== strpos( $search, 'txn:' ) ) {
@@ -687,9 +612,6 @@ class EDD_Payment_History_Table extends WP_List_Table {
687
  case 'pending':
688
  $total_items = $this->pending_count;
689
  break;
690
- case 'processing':
691
- $total_items = $this->processing_count;
692
- break;
693
  case 'refunded':
694
  $total_items = $this->refunded_count;
695
  break;
66
  */
67
  public $pending_count;
68
 
 
 
 
 
 
 
 
 
69
  /**
70
  * Total number of refunded payments
71
  *
125
  $start_date = isset( $_GET['start-date'] ) ? sanitize_text_field( $_GET['start-date'] ) : null;
126
  $end_date = isset( $_GET['end-date'] ) ? sanitize_text_field( $_GET['end-date'] ) : null;
127
  $status = isset( $_GET['status'] ) ? $_GET['status'] : '';
128
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  <div id="edd-payment-filters">
130
  <span id="edd-payment-date-filters">
131
+ <label for="start-date"><?php _e( 'Start Date:', 'easy-digital-downloads' ); ?></label>
132
+ <input type="text" id="start-date" name="start-date" class="edd_datepicker" value="<?php echo $start_date; ?>" placeholder="mm/dd/yyyy"/>
133
+ <label for="end-date"><?php _e( 'End Date:', 'easy-digital-downloads' ); ?></label>
134
+ <input type="text" id="end-date" name="end-date" class="edd_datepicker" value="<?php echo $end_date; ?>" placeholder="mm/dd/yyyy"/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  <input type="submit" class="button-secondary" value="<?php _e( 'Apply', 'easy-digital-downloads' ); ?>"/>
136
  </span>
137
  <?php if( ! empty( $status ) ) : ?>
138
  <input type="hidden" name="status" value="<?php echo esc_attr( $status ); ?>"/>
139
  <?php endif; ?>
140
+ <?php if( ! empty( $start_date ) || ! empty( $end_date ) ) : ?>
141
  <a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history' ); ?>" class="button-secondary"><?php _e( 'Clear Filter', 'easy-digital-downloads' ); ?></a>
142
  <?php endif; ?>
143
  <?php do_action( 'edd_payment_advanced_filters_row' ); ?>
187
  */
188
  public function get_views() {
189
 
190
+ $current = isset( $_GET['status'] ) ? $_GET['status'] : '';
191
+ $total_count = '&nbsp;<span class="count">(' . $this->total_count . ')</span>';
192
+ $complete_count = '&nbsp;<span class="count">(' . $this->complete_count . ')</span>';
193
+ $pending_count = '&nbsp;<span class="count">(' . $this->pending_count . ')</span>';
194
+ $refunded_count = '&nbsp;<span class="count">(' . $this->refunded_count . ')</span>';
195
+ $failed_count = '&nbsp;<span class="count">(' . $this->failed_count . ')</span>';
196
+ $abandoned_count = '&nbsp;<span class="count">(' . $this->abandoned_count . ')</span>';
197
+ $revoked_count = '&nbsp;<span class="count">(' . $this->revoked_count . ')</span>';
 
198
 
199
  $views = array(
200
+ 'all' => sprintf( '<a href="%s"%s>%s</a>', remove_query_arg( array( 'status', 'paged' ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __('All','easy-digital-downloads' ) . $total_count ),
201
+ 'publish' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'publish', 'paged' => FALSE ) ), $current === 'publish' ? ' class="current"' : '', __('Completed','easy-digital-downloads' ) . $complete_count ),
202
+ 'pending' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'pending', 'paged' => FALSE ) ), $current === 'pending' ? ' class="current"' : '', __('Pending','easy-digital-downloads' ) . $pending_count ),
203
+ 'refunded' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'refunded', 'paged' => FALSE ) ), $current === 'refunded' ? ' class="current"' : '', __('Refunded','easy-digital-downloads' ) . $refunded_count ),
204
+ 'revoked' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'revoked', 'paged' => FALSE ) ), $current === 'revoked' ? ' class="current"' : '', __('Revoked','easy-digital-downloads' ) . $revoked_count ),
205
+ 'failed' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'failed', 'paged' => FALSE ) ), $current === 'failed' ? ' class="current"' : '', __('Failed','easy-digital-downloads' ) . $failed_count ),
206
+ 'abandoned' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( array( 'status' => 'abandoned', 'paged' => FALSE ) ), $current === 'abandoned' ? ' class="current"' : '', __('Abandoned','easy-digital-downloads' ) . $abandoned_count ),
 
207
  );
208
 
209
  return apply_filters( 'edd_payments_table_views', $views );
395
  'delete' => __( 'Delete', 'easy-digital-downloads' ),
396
  'set-status-publish' => __( 'Set To Completed', 'easy-digital-downloads' ),
397
  'set-status-pending' => __( 'Set To Pending', 'easy-digital-downloads' ),
 
398
  'set-status-refunded' => __( 'Set To Refunded', 'easy-digital-downloads' ),
399
  'set-status-revoked' => __( 'Set To Revoked', 'easy-digital-downloads' ),
400
  'set-status-failed' => __( 'Set To Failed', 'easy-digital-downloads' ),
439
  edd_update_payment_status( $id, 'pending' );
440
  }
441
 
 
 
 
 
442
  if ( 'set-status-refunded' === $this->current_action() ) {
443
  edd_update_payment_status( $id, 'refunded' );
444
  }
464
  }
465
 
466
  if( 'resend-receipt' === $this->current_action() ) {
467
+
468
  edd_email_purchase_receipt( $id, false );
469
  }
470
 
510
  $args['end-date'] = urldecode( $_GET['end-date'] );
511
  }
512
 
513
+ $payment_count = edd_count_payments( $args );
514
+ $this->complete_count = $payment_count->publish;
515
+ $this->pending_count = $payment_count->pending;
516
+ $this->refunded_count = $payment_count->refunded;
517
+ $this->failed_count = $payment_count->failed;
518
+ $this->revoked_count = $payment_count->revoked;
519
+ $this->abandoned_count = $payment_count->abandoned;
 
 
 
 
 
520
 
521
  foreach( $payment_count as $count ) {
522
  $this->total_count += $count;
545
  $search = isset( $_GET['s'] ) ? sanitize_text_field( $_GET['s'] ) : null;
546
  $start_date = isset( $_GET['start-date'] ) ? sanitize_text_field( $_GET['start-date'] ) : null;
547
  $end_date = isset( $_GET['end-date'] ) ? sanitize_text_field( $_GET['end-date'] ) : $start_date;
 
 
 
 
 
 
 
 
 
 
 
548
 
549
  if( ! empty( $search ) ) {
550
  $status = 'any'; // Force all payment statuses when searching
551
  }
552
 
 
 
 
 
553
  $args = array(
554
  'output' => 'payments',
555
  'number' => $per_page,
566
  's' => $search,
567
  'start_date' => $start_date,
568
  'end_date' => $end_date,
 
569
  );
570
 
571
  if( is_string( $search ) && false !== strpos( $search, 'txn:' ) ) {
612
  case 'pending':
613
  $total_items = $this->pending_count;
614
  break;
 
 
 
615
  case 'refunded':
616
  $total_items = $this->refunded_count;
617
  break;
includes/admin/payments/view-order-details.php CHANGED
@@ -393,7 +393,6 @@ $customer = new EDD_Customer( $payment->customer_id );
393
  $item_tax = isset( $cart_item['tax'] ) ? $cart_item['tax'] : 0;
394
  $price_id = isset( $cart_item['item_number']['options']['price_id'] ) ? $cart_item['item_number']['options']['price_id'] : null;
395
  $quantity = isset( $cart_item['quantity'] ) && $cart_item['quantity'] > 0 ? $cart_item['quantity'] : 1;
396
- $download = new EDD_Download( $item_id );
397
 
398
  if( false === $price ) {
399
 
@@ -404,27 +403,16 @@ $customer = new EDD_Customer( $payment->customer_id );
404
 
405
  <li class="download">
406
  <span class="edd-purchased-download-title">
407
- <?php if ( ! empty( $download->ID ) ) : ?>
408
- <a href="<?php echo admin_url( 'post.php?post=' . $item_id . '&action=edit' ); ?>">
409
- <?php echo $download->get_name();
410
- if ( isset( $cart_items[ $key ]['item_number'] ) && isset( $cart_items[ $key ]['item_number']['options'] ) ) {
411
- $price_options = $cart_items[ $key ]['item_number']['options'];
412
- if ( edd_has_variable_prices( $item_id ) && isset( $price_id ) ) {
413
- echo ' - ' . edd_get_price_option_name( $item_id, $price_id, $payment_id );
414
- }
415
  }
416
- ?>
417
- </a>
418
- <?php else: ?>
419
- <span class="deleted">
420
- <?php if ( ! empty( $cart_item['name'] ) ) : ?>
421
- <?php echo $cart_item['name']; ?>&nbsp;-&nbsp;
422
- <em>(<?php _e( 'Deleted', 'easy-digital-downloads' ); ?>)</em>
423
- <?php else: ?>
424
- <em><?php printf( __( '%s deleted', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></em>
425
- <?php endif; ?>
426
- </span>
427
- <?php endif; ?>
428
  </span>
429
  <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][id]" class="edd-payment-details-download-id" value="<?php echo esc_attr( $item_id ); ?>"/>
430
  <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][price_id]" class="edd-payment-details-download-price-id" value="<?php echo esc_attr( $price_id ); ?>"/>
@@ -467,7 +455,7 @@ $customer = new EDD_Customer( $payment->customer_id );
467
  <?php _ex( 'Tax', 'payment details purchased item tax - mobile', 'easy-digital-downloads' ); ?>
468
  </span>
469
  <?php echo edd_currency_symbol( $currency_code ); ?>
470
- <input type="text" class="small-text edd-price-field edd-payment-details-download-item-tax edd-payment-item-input" name="edd-payment-details-downloads[<?php echo $key; ?>][item_tax]" value="<?php echo edd_format_amount( $item_tax ); ?>" />
471
  </li>
472
  <?php endif; ?>
473
 
@@ -697,23 +685,23 @@ $customer = new EDD_Customer( $payment->customer_id );
697
  <div class="column">
698
  <p>
699
  <strong class="order-data-address-line"><?php _e( 'Street Address Line 1:', 'easy-digital-downloads' ); ?></strong><br/>
700
- <input type="text" name="edd-payment-address[0][line1]" value="<?php echo esc_attr( $address['line1'] ); ?>" class="large-text" />
701
  </p>
702
  <p>
703
  <strong class="order-data-address-line"><?php _e( 'Street Address Line 2:', 'easy-digital-downloads' ); ?></strong><br/>
704
- <input type="text" name="edd-payment-address[0][line2]" value="<?php echo esc_attr( $address['line2'] ); ?>" class="large-text" />
705
  </p>
706
 
707
  </div>
708
  <div class="column">
709
  <p>
710
  <strong class="order-data-address-line"><?php echo _x( 'City:', 'Address City', 'easy-digital-downloads' ); ?></strong><br/>
711
- <input type="text" name="edd-payment-address[0][city]" value="<?php echo esc_attr( $address['city'] ); ?>" class="large-text"/>
712
 
713
  </p>
714
  <p>
715
  <strong class="order-data-address-line"><?php echo _x( 'Zip / Postal Code:', 'Zip / Postal code of address', 'easy-digital-downloads' ); ?></strong><br/>
716
- <input type="text" name="edd-payment-address[0][zip]" value="<?php echo esc_attr( $address['zip'] ); ?>" class="large-text"/>
717
 
718
  </p>
719
  </div>
@@ -730,10 +718,7 @@ $customer = new EDD_Customer( $payment->customer_id );
730
  'show_option_none' => false,
731
  'chosen' => true,
732
  'placeholder' => __( 'Select a country', 'easy-digital-downloads' ),
733
- 'data' => array(
734
- 'search-type' => 'no_ajax',
735
- 'search-placeholder' => __( 'Type to search all Countries', 'easy-digital-downloads' ),
736
- ),
737
  ) );
738
  ?>
739
  </p>
@@ -751,13 +736,10 @@ $customer = new EDD_Customer( $payment->customer_id );
751
  'show_option_none' => false,
752
  'chosen' => true,
753
  'placeholder' => __( 'Select a state', 'easy-digital-downloads' ),
754
- 'data' => array(
755
- 'search-type' => 'no_ajax',
756
- 'search-placeholder' => __( 'Type to search all States/Provinces', 'easy-digital-downloads' ),
757
- ),
758
  ) );
759
  } else { ?>
760
- <input type="text" name="edd-payment-address[0][state]" value="<?php echo esc_attr( $address['state'] ); ?>" class="large-text"/>
761
  <?php
762
  } ?>
763
  </p>
393
  $item_tax = isset( $cart_item['tax'] ) ? $cart_item['tax'] : 0;
394
  $price_id = isset( $cart_item['item_number']['options']['price_id'] ) ? $cart_item['item_number']['options']['price_id'] : null;
395
  $quantity = isset( $cart_item['quantity'] ) && $cart_item['quantity'] > 0 ? $cart_item['quantity'] : 1;
 
396
 
397
  if( false === $price ) {
398
 
403
 
404
  <li class="download">
405
  <span class="edd-purchased-download-title">
406
+ <a href="<?php echo admin_url( 'post.php?post=' . $item_id . '&action=edit' ); ?>">
407
+ <?php echo get_the_title( $item_id );
408
+ if ( isset( $cart_items[ $key ]['item_number'] ) && isset( $cart_items[ $key ]['item_number']['options'] ) ) {
409
+ $price_options = $cart_items[ $key ]['item_number']['options'];
410
+ if ( edd_has_variable_prices( $item_id ) && isset( $price_id ) ) {
411
+ echo ' - ' . edd_get_price_option_name( $item_id, $price_id, $payment_id );
 
 
412
  }
413
+ }
414
+ ?>
415
+ </a>
 
 
 
 
 
 
 
 
 
416
  </span>
417
  <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][id]" class="edd-payment-details-download-id" value="<?php echo esc_attr( $item_id ); ?>"/>
418
  <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][price_id]" class="edd-payment-details-download-price-id" value="<?php echo esc_attr( $price_id ); ?>"/>
455
  <?php _ex( 'Tax', 'payment details purchased item tax - mobile', 'easy-digital-downloads' ); ?>
456
  </span>
457
  <?php echo edd_currency_symbol( $currency_code ); ?>
458
+ <input type="number" step="0.01" min="0" class="small-text edd-payment-details-download-item-tax edd-payment-item-input" name="edd-payment-details-downloads[<?php echo $key; ?>][item_tax]" value="<?php echo edd_format_amount( $item_tax ); ?>" />
459
  </li>
460
  <?php endif; ?>
461
 
685
  <div class="column">
686
  <p>
687
  <strong class="order-data-address-line"><?php _e( 'Street Address Line 1:', 'easy-digital-downloads' ); ?></strong><br/>
688
+ <input type="text" name="edd-payment-address[0][line1]" value="<?php echo esc_attr( $address['line1'] ); ?>" class="medium-text" />
689
  </p>
690
  <p>
691
  <strong class="order-data-address-line"><?php _e( 'Street Address Line 2:', 'easy-digital-downloads' ); ?></strong><br/>
692
+ <input type="text" name="edd-payment-address[0][line2]" value="<?php echo esc_attr( $address['line2'] ); ?>" class="medium-text" />
693
  </p>
694
 
695
  </div>
696
  <div class="column">
697
  <p>
698
  <strong class="order-data-address-line"><?php echo _x( 'City:', 'Address City', 'easy-digital-downloads' ); ?></strong><br/>
699
+ <input type="text" name="edd-payment-address[0][city]" value="<?php echo esc_attr( $address['city'] ); ?>" class="medium-text"/>
700
 
701
  </p>
702
  <p>
703
  <strong class="order-data-address-line"><?php echo _x( 'Zip / Postal Code:', 'Zip / Postal code of address', 'easy-digital-downloads' ); ?></strong><br/>
704
+ <input type="text" name="edd-payment-address[0][zip]" value="<?php echo esc_attr( $address['zip'] ); ?>" class="medium-text"/>
705
 
706
  </p>
707
  </div>
718
  'show_option_none' => false,
719
  'chosen' => true,
720
  'placeholder' => __( 'Select a country', 'easy-digital-downloads' ),
721
+ 'data' => array( 'search-type' => 'no_ajax' ),
 
 
 
722
  ) );
723
  ?>
724
  </p>
736
  'show_option_none' => false,
737
  'chosen' => true,
738
  'placeholder' => __( 'Select a state', 'easy-digital-downloads' ),
739
+ 'data' => array( 'search-type' => 'no_ajax' ),
 
 
 
740
  ) );
741
  } else { ?>
742
+ <input type="text" name="edd-payment-address[0][state]" value="<?php echo esc_attr( $address['state'] ); ?>" class="medium-text"/>
743
  <?php
744
  } ?>
745
  </p>
includes/admin/reporting/class-categories-reports-table.php CHANGED
@@ -163,7 +163,6 @@ class EDD_Categories_Reports_Table extends WP_List_Table {
163
  $term_args = array(
164
  'parent' => 0,
165
  'hierarchical' => 0,
166
- 'hide_empty' => false
167
  );
168
 
169
  $categories = get_terms( 'download_category', $term_args );
163
  $term_args = array(
164
  'parent' => 0,
165
  'hierarchical' => 0,
 
166
  );
167
 
168
  $categories = get_terms( 'download_category', $term_args );
includes/admin/reporting/class-file-downloads-logs-list-table.php CHANGED
@@ -127,8 +127,6 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
127
  return '<a href="' . add_query_arg( 'user', $item[ 'customer' ]->email ) . '">' . $item['customer']->name . '</a>';
128
  case 'payment_id' :
129
  return $item['payment_id'] !== false ? '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $item['payment_id'] ) . '">' . edd_get_payment_number( $item['payment_id'] ) . '</a>' : '';
130
- case 'ip' :
131
- return '<a href="https://ipinfo.io/' . $item['ip'] . '" target="_blank" rel="noopener noreferrer">' . $item['ip'] . '</a>';
132
  default:
133
  return $item[ $column_name ];
134
  }
@@ -401,15 +399,8 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
401
  $files = $this->queried_files[ $log->post_parent ];
402
  }
403
 
404
- // Filter the download files
405
- $files = apply_filters( 'edd_log_file_download_download_files', $files, $log, $meta );
406
-
407
  $file_id = (int) $meta['_edd_log_file_id'][0];
408
  $file_id = $file_id !== false ? $file_id : 0;
409
-
410
- // Filter the $file_id
411
- $file_id = apply_filters( 'edd_log_file_download_file_id', $file_id, $log );
412
-
413
  $file_name = isset( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : null;
414
 
415
  if ( ( $this->file_search && strpos( strtolower( $file_name ), strtolower( $this->get_search() ) ) !== false ) || ! $this->file_search ) {
@@ -471,4 +462,4 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
471
  public function has_items() {
472
  return true;
473
  }
474
- }
127
  return '<a href="' . add_query_arg( 'user', $item[ 'customer' ]->email ) . '">' . $item['customer']->name . '</a>';
128
  case 'payment_id' :
129
  return $item['payment_id'] !== false ? '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $item['payment_id'] ) . '">' . edd_get_payment_number( $item['payment_id'] ) . '</a>' : '';
 
 
130
  default:
131
  return $item[ $column_name ];
132
  }
399
  $files = $this->queried_files[ $log->post_parent ];
400
  }
401
 
 
 
 
402
  $file_id = (int) $meta['_edd_log_file_id'][0];
403
  $file_id = $file_id !== false ? $file_id : 0;
 
 
 
 
404
  $file_name = isset( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : null;
405
 
406
  if ( ( $this->file_search && strpos( strtolower( $file_name ), strtolower( $this->get_search() ) ) !== false ) || ! $this->file_search ) {
462
  public function has_items() {
463
  return true;
464
  }
465
+ }
includes/admin/reporting/class-sales-logs-list-table.php CHANGED
@@ -315,11 +315,10 @@ class EDD_Sales_Log_Table extends WP_List_Table {
315
  $download = empty( $_GET['s'] ) ? $this->get_filtered_download() : null;
316
 
317
  $log_query = array(
318
- 'post_parent' => $download,
319
- 'log_type' => 'sale',
320
- 'paged' => $paged,
321
- 'meta_query' => $this->get_meta_query(),
322
- 'posts_per_page' => $this->per_page,
323
  );
324
 
325
  $logs = $edd_logs->get_connected_logs( $log_query );
315
  $download = empty( $_GET['s'] ) ? $this->get_filtered_download() : null;
316
 
317
  $log_query = array(
318
+ 'post_parent' => $download,
319
+ 'log_type' => 'sale',
320
+ 'paged' => $paged,
321
+ 'meta_query' => $this->get_meta_query(),
 
322
  );
323
 
324
  $logs = $edd_logs->get_connected_logs( $log_query );
includes/admin/reporting/export/class-batch-export-payments.php CHANGED
@@ -63,8 +63,7 @@ class EDD_Batch_Payments_Export extends EDD_Batch_Export {
63
  'currency' => __( 'Currency', 'easy-digital-downloads' ),
64
  'ip' => __( 'IP Address', 'easy-digital-downloads' ),
65
  'mode' => __( 'Mode (Live|Test)', 'easy-digital-downloads' ),
66
- 'status' => __( 'Status', 'easy-digital-downloads' ),
67
- 'country_name' => __( 'Country Name', 'easy-digital-downloads' ),
68
  );
69
 
70
  if( ! edd_use_skus() ){
@@ -111,6 +110,8 @@ class EDD_Batch_Payments_Export extends EDD_Batch_Export {
111
 
112
  }
113
 
 
 
114
  $payments = edd_get_payments( $args );
115
 
116
  if( $payments ) {
@@ -141,8 +142,7 @@ class EDD_Batch_Payments_Export extends EDD_Batch_Export {
141
  $price = edd_get_download_final_price( $id, $user_info, $price_override );
142
  }
143
 
144
- $download_tax = isset( $download['tax'] ) ? $download['tax'] : 0;
145
- $download_price_id = isset( $download['item_number']['options']['price_id'] ) ? absint( $download['item_number']['options']['price_id'] ) : false;
146
 
147
  /* Set up verbose product column */
148
 
@@ -183,12 +183,6 @@ class EDD_Batch_Payments_Export extends EDD_Batch_Export {
183
 
184
  /* Set up raw products column - Nothing but product names */
185
  $products_raw .= html_entity_decode( get_the_title( $id ) ) . '|' . $price . '{' . $download_tax . '}';
186
-
187
- // if we have a Price ID, include it.
188
- if ( false !== $download_price_id ) {
189
- $products_raw .= '{' . $download_price_id . '}';
190
- }
191
-
192
  if ( $key != ( count( $downloads ) -1 ) ) {
193
 
194
  $products_raw .= ' / ';
@@ -230,8 +224,7 @@ class EDD_Batch_Payments_Export extends EDD_Batch_Export {
230
  'currency' => $payment->currency,
231
  'ip' => $payment->ip,
232
  'mode' => $payment->get_meta( '_edd_payment_mode', true ),
233
- 'status' => ( 'publish' === $payment->status ) ? 'complete' : $payment->status,
234
- 'country_name' => isset( $user_info['address']['country'] ) ? edd_get_country_name( $user_info['address']['country'] ) : '',
235
  );
236
 
237
  }
63
  'currency' => __( 'Currency', 'easy-digital-downloads' ),
64
  'ip' => __( 'IP Address', 'easy-digital-downloads' ),
65
  'mode' => __( 'Mode (Live|Test)', 'easy-digital-downloads' ),
66
+ 'status' => __( 'Status', 'easy-digital-downloads' )
 
67
  );
68
 
69
  if( ! edd_use_skus() ){
110
 
111
  }
112
 
113
+ //echo json_encode($args ); exit;
114
+
115
  $payments = edd_get_payments( $args );
116
 
117
  if( $payments ) {
142
  $price = edd_get_download_final_price( $id, $user_info, $price_override );
143
  }
144
 
145
+ $download_tax = isset( $download['tax'] ) ? $download['tax'] : 0;
 
146
 
147
  /* Set up verbose product column */
148
 
183
 
184
  /* Set up raw products column - Nothing but product names */
185
  $products_raw .= html_entity_decode( get_the_title( $id ) ) . '|' . $price . '{' . $download_tax . '}';
 
 
 
 
 
 
186
  if ( $key != ( count( $downloads ) -1 ) ) {
187
 
188
  $products_raw .= ' / ';
224
  'currency' => $payment->currency,
225
  'ip' => $payment->ip,
226
  'mode' => $payment->get_meta( '_edd_payment_mode', true ),
227
+ 'status' => ( 'publish' === $payment->status ) ? 'complete' : $payment->status
 
228
  );
229
 
230
  }
includes/admin/reporting/export/class-batch-export-sales.php CHANGED
@@ -37,13 +37,12 @@ class EDD_Batch_Sales_Export extends EDD_Batch_Export {
37
  */
38
  public function csv_cols() {
39
  $cols = array(
40
- 'ID' => __( 'Log ID', 'easy-digital-downloads' ),
41
- 'user_id' => __( 'User', 'easy-digital-downloads' ),
42
- 'customer_id' => __( 'Customer ID', 'easy-digital-downloads' ),
43
- 'download' => edd_get_label_singular(),
44
- 'amount' => __( 'Item Amount', 'easy-digital-downloads' ),
45
- 'payment_id' => __( 'Payment ID', 'easy-digital-downloads' ),
46
- 'date' => __( 'Date', 'easy-digital-downloads' ),
47
  );
48
 
49
  return $cols;
@@ -65,9 +64,7 @@ class EDD_Batch_Sales_Export extends EDD_Batch_Export {
65
  $args = array(
66
  'log_type' => 'sale',
67
  'posts_per_page' => 30,
68
- 'paged' => $this->step,
69
- 'orderby' => 'ID',
70
- 'order' => 'ASC',
71
  );
72
 
73
  if ( ! empty( $this->start ) || ! empty( $this->end ) ) {
@@ -115,13 +112,12 @@ class EDD_Batch_Sales_Export extends EDD_Batch_Export {
115
  }
116
  }
117
  $data[] = array(
118
- 'ID' => $log->ID,
119
- 'user_id' => $customer->user_id,
120
- 'customer_id' => $customer->id,
121
- 'download' => $download->post_title,
122
- 'amount' => $amount,
123
- 'payment_id' => $payment->ID,
124
- 'date' => get_post_field( 'post_date', $payment_id ),
125
  );
126
  }
127
 
@@ -182,7 +178,7 @@ class EDD_Batch_Sales_Export extends EDD_Batch_Export {
182
 
183
  public function set_properties( $request ) {
184
  $this->start = isset( $request['start'] ) ? sanitize_text_field( $request['start'] ) : '';
185
- $this->end = isset( $request['end'] ) ? sanitize_text_field( $request['end'] ) . ' 23:59:59' : '';
186
  $this->download_id = isset( $request['download_id'] ) ? absint( $request['download_id'] ) : 0;
187
  }
188
- }
37
  */
38
  public function csv_cols() {
39
  $cols = array(
40
+ 'ID' => __( 'Log ID', 'easy-digital-downloads' ),
41
+ 'user_id' => __( 'User', 'easy-digital-downloads' ),
42
+ 'download' => edd_get_label_singular(),
43
+ 'amount' => __( 'Item Amount', 'easy-digital-downloads' ),
44
+ 'payment_id' => __( 'Payment ID', 'easy-digital-downloads' ),
45
+ 'date' => __( 'Date', 'easy-digital-downloads' ),
 
46
  );
47
 
48
  return $cols;
64
  $args = array(
65
  'log_type' => 'sale',
66
  'posts_per_page' => 30,
67
+ 'paged' => $this->step
 
 
68
  );
69
 
70
  if ( ! empty( $this->start ) || ! empty( $this->end ) ) {
112
  }
113
  }
114
  $data[] = array(
115
+ 'ID' => $log->ID,
116
+ 'user_id' => $customer->user_id,
117
+ 'download' => $download->post_title,
118
+ 'amount' => $amount,
119
+ 'payment_id' => $payment->ID,
120
+ 'date' => get_post_field( 'post_date', $payment_id ),
 
121
  );
122
  }
123
 
178
 
179
  public function set_properties( $request ) {
180
  $this->start = isset( $request['start'] ) ? sanitize_text_field( $request['start'] ) : '';
181
+ $this->end = isset( $request['end'] ) ? sanitize_text_field( $request['end'] ) : '';
182
  $this->download_id = isset( $request['download_id'] ) ? absint( $request['download_id'] ) : 0;
183
  }
184
+ }
includes/admin/reporting/graphing.php CHANGED
@@ -23,10 +23,10 @@ function edd_reports_graph() {
23
  $dates = edd_get_report_dates();
24
 
25
  // Determine graph options
26
- switch ( $dates['range'] ) {
27
  case 'today' :
28
  case 'yesterday' :
29
- $day_by_day = true;
30
  break;
31
  case 'last_year' :
32
  case 'this_year' :
@@ -48,7 +48,7 @@ function edd_reports_graph() {
48
  default:
49
  $day_by_day = true;
50
  break;
51
- }
52
 
53
  $earnings_totals = 0.00; // Total earnings for time period shown
54
  $sales_totals = 0; // Total sales for time period shown
@@ -415,23 +415,25 @@ function edd_reports_graph_of_download( $download_id = 0 ) {
415
  $dates = edd_get_report_dates();
416
 
417
  // Determine graph options
418
- switch ( $dates['range'] ) {
419
  case 'today' :
420
  case 'yesterday' :
421
- $day_by_day = true;
422
  break;
423
  case 'last_year' :
 
 
424
  case 'this_year' :
425
- $day_by_day = false;
426
  break;
427
  case 'last_quarter' :
 
 
428
  case 'this_quarter' :
429
- $day_by_day = true;
430
  break;
431
  case 'other' :
432
- if ( $dates['m_start'] == 12 && $dates['m_end'] == 1 ) {
433
- $day_by_day = true;
434
- } elseif ( $dates['m_end'] - $dates['m_start'] >= 3 || ( $dates['year_end'] > $dates['year'] && ( $dates['m_start'] - $dates['m_end'] ) != 10 ) ) {
435
  $day_by_day = false;
436
  } else {
437
  $day_by_day = true;
@@ -440,7 +442,7 @@ function edd_reports_graph_of_download( $download_id = 0 ) {
440
  default:
441
  $day_by_day = true;
442
  break;
443
- }
444
 
445
  $earnings_totals = (float) 0.00; // Total earnings for time period shown
446
  $sales_totals = 0; // Total sales for time period shown
@@ -542,9 +544,6 @@ function edd_reports_graph_of_download( $download_id = 0 ) {
542
  if ( $month_start < $month_end ) {
543
  $d = 1;
544
  }
545
- } elseif ( $i > $month_start && $i < $month_end ) {
546
- $num_of_days = cal_days_in_month( CAL_GREGORIAN, $i, $y );
547
- $d = 1;
548
  } else {
549
  $num_of_days = cal_days_in_month( CAL_GREGORIAN, $i, $y );
550
  }
23
  $dates = edd_get_report_dates();
24
 
25
  // Determine graph options
26
+ switch ( $dates['range'] ) :
27
  case 'today' :
28
  case 'yesterday' :
29
+ $day_by_day = true;
30
  break;
31
  case 'last_year' :
32
  case 'this_year' :
48
  default:
49
  $day_by_day = true;
50
  break;
51
+ endswitch;
52
 
53
  $earnings_totals = 0.00; // Total earnings for time period shown
54
  $sales_totals = 0; // Total sales for time period shown
415
  $dates = edd_get_report_dates();
416
 
417
  // Determine graph options
418
+ switch ( $dates['range'] ) :
419
  case 'today' :
420
  case 'yesterday' :
421
+ $day_by_day = true;
422
  break;
423
  case 'last_year' :
424
+ $day_by_day = false;
425
+ break;
426
  case 'this_year' :
427
+ $day_by_day = false;
428
  break;
429
  case 'last_quarter' :
430
+ $day_by_day = false;
431
+ break;
432
  case 'this_quarter' :
433
+ $day_by_day = false;
434
  break;
435
  case 'other' :
436
+ if( $dates['m_end'] - $dates['m_start'] >= 2 || $dates['year_end'] > $dates['year'] ) {
 
 
437
  $day_by_day = false;
438
  } else {
439
  $day_by_day = true;
442
  default:
443
  $day_by_day = true;
444
  break;
445
+ endswitch;
446
 
447
  $earnings_totals = (float) 0.00; // Total earnings for time period shown
448
  $sales_totals = 0; // Total sales for time period shown
544
  if ( $month_start < $month_end ) {
545
  $d = 1;
546
  }
 
 
 
547
  } else {
548
  $num_of_days = cal_days_in_month( CAL_GREGORIAN, $i, $y );
549
  }
includes/admin/settings/register-settings.php CHANGED
@@ -85,7 +85,6 @@ function edd_update_option( $key = '', $value = false ) {
85
  * @return boolean True if removed, false if not.
86
  */
87
  function edd_delete_option( $key = '' ) {
88
- global $edd_options;
89
 
90
  // If no key, exit
91
  if ( empty( $key ) ){
@@ -102,13 +101,6 @@ function edd_delete_option( $key = '' ) {
102
 
103
  }
104
 
105
- // Remove this option from the global EDD settings to the array_merge in edd_settings_sanitize() doesn't re-add it.
106
- if( isset( $edd_options[ $key ] ) ) {
107
-
108
- unset( $edd_options[ $key ] );
109
-
110
- }
111
-
112
  $did_update = update_option( 'edd_settings', $options );
113
 
114
  // If it updated, let's update the global variable
@@ -200,7 +192,6 @@ function edd_register_settings() {
200
  'max' => null,
201
  'step' => null,
202
  'chosen' => null,
203
- 'multiple' => null,
204
  'placeholder' => null,
205
  'allow_blank' => true,
206
  'readonly' => false,
@@ -241,9 +232,6 @@ function edd_get_registered_settings() {
241
  * 'Whitelisted' EDD settings, filters are provided for each settings
242
  * section to allow extensions and other plugins to add their own settings
243
  */
244
-
245
- $shop_states = edd_get_shop_states( edd_get_shop_country() );
246
-
247
  $edd_settings = array(
248
  /** General Settings */
249
  'general' => apply_filters( 'edd_settings_general',
@@ -251,7 +239,7 @@ function edd_get_registered_settings() {
251
  'main' => array(
252
  'page_settings' => array(
253
  'id' => 'page_settings',
254
- 'name' => '<h3>' . __( 'Pages', 'easy-digital-downloads' ) . '</h3>',
255
  'desc' => '',
256
  'type' => 'header',
257
  'tooltip_title' => __( 'Page Settings', 'easy-digital-downloads' ),
@@ -297,7 +285,7 @@ function edd_get_registered_settings() {
297
  'id' => 'login_redirect_page',
298
  'name' => __( 'Login Redirect Page', 'easy-digital-downloads' ),
299
  'desc' => sprintf(
300
- __( 'If a customer logs in using the [edd_login] shortcode, this is the page they will be redirected to. Note, this can be overridden using the redirect attribute in the shortcode like this: [edd_login redirect="%s"].', 'easy-digital-downloads' ), trailingslashit( home_url() )
301
  ),
302
  'type' => 'select',
303
  'options' => edd_get_pages(),
@@ -328,11 +316,10 @@ function edd_get_registered_settings() {
328
  'type' => 'shop_states',
329
  'chosen' => true,
330
  'placeholder' => __( 'Select a state', 'easy-digital-downloads' ),
331
- 'class' => ( empty( $shop_states ) ) ? 'hidden' : '',
332
  ),
333
  'tracking_settings' => array(
334
  'id' => 'tracking_settings',
335
- 'name' => '<h3>' . __( 'Tracking', 'easy-digital-downloads' ) . '</h3>',
336
  'desc' => '',
337
  'type' => 'header',
338
  ),
@@ -340,13 +327,19 @@ function edd_get_registered_settings() {
340
  'id' => 'allow_tracking',
341
  'name' => __( 'Allow Usage Tracking?', 'easy-digital-downloads' ),
342
  'desc' => sprintf(
343
- __( 'Allow Easy Digital Downloads to anonymously track how this plugin is used and help us make the plugin better. Opt-in to tracking and our newsletter and immediately be emailed a discount to the EDD shop, valid towards the <a href="%s" target="_blank">purchase of extensions</a>. No sensitive data is tracked.', 'easy-digital-downloads' ),
344
  'https://easydigitaldownloads.com/downloads/?utm_source=' . substr( md5( get_bloginfo( 'name' ) ), 0, 10 ) . '&utm_medium=admin&utm_term=settings&utm_campaign=EDDUsageTracking'
345
  ),
346
  'type' => 'checkbox',
347
  ),
348
  ),
349
  'currency' => array(
 
 
 
 
 
 
350
  'currency' => array(
351
  'id' => 'currency',
352
  'name' => __( 'Currency', 'easy-digital-downloads' ),
@@ -368,7 +361,7 @@ function edd_get_registered_settings() {
368
  'thousands_separator' => array(
369
  'id' => 'thousands_separator',
370
  'name' => __( 'Thousands Separator', 'easy-digital-downloads' ),
371
- 'desc' => __( 'The symbol (usually , or .) to separate thousands.', 'easy-digital-downloads' ),
372
  'type' => 'text',
373
  'size' => 'small',
374
  'std' => ',',
@@ -376,7 +369,7 @@ function edd_get_registered_settings() {
376
  'decimal_separator' => array(
377
  'id' => 'decimal_separator',
378
  'name' => __( 'Decimal Separator', 'easy-digital-downloads' ),
379
- 'desc' => __( 'The symbol (usually , or .) to separate decimal points.', 'easy-digital-downloads' ),
380
  'type' => 'text',
381
  'size' => 'small',
382
  'std' => '.',
@@ -385,7 +378,7 @@ function edd_get_registered_settings() {
385
  'api' => array(
386
  'api_settings' => array(
387
  'id' => 'api_settings',
388
- 'name' => '<h3>' . __( 'API', 'easy-digital-downloads' ) . '</h3>',
389
  'desc' => '',
390
  'type' => 'header',
391
  'tooltip_title' => __( 'API Settings', 'easy-digital-downloads' ),
@@ -409,6 +402,12 @@ function edd_get_registered_settings() {
409
  'gateways' => apply_filters('edd_settings_gateways',
410
  array(
411
  'main' => array(
 
 
 
 
 
 
412
  'test_mode' => array(
413
  'id' => 'test_mode',
414
  'name' => __( 'Test Mode', 'easy-digital-downloads' ),
@@ -432,7 +431,7 @@ function edd_get_registered_settings() {
432
  'accepted_cards' => array(
433
  'id' => 'accepted_cards',
434
  'name' => __( 'Accepted Payment Method Icons', 'easy-digital-downloads' ),
435
- 'desc' => __( 'Display icons for the selected payment methods.', 'easy-digital-downloads' ) . '<br/>' . __( 'You will also need to configure your gateway settings if you are accepting credit cards.', 'easy-digital-downloads' ),
436
  'type' => 'payment_icons',
437
  'options' => apply_filters('edd_accepted_payment_icons', array(
438
  'mastercard' => 'Mastercard',
@@ -450,6 +449,11 @@ function edd_get_registered_settings() {
450
  'emails' => apply_filters('edd_settings_emails',
451
  array(
452
  'main' => array(
 
 
 
 
 
453
  'email_template' => array(
454
  'id' => 'email_template',
455
  'name' => __( 'Email Template', 'easy-digital-downloads' ),
@@ -463,6 +467,19 @@ function edd_get_registered_settings() {
463
  'desc' => __( 'Upload or choose a logo to be displayed at the top of the purchase receipt emails. Displayed on HTML emails only.', 'easy-digital-downloads' ),
464
  'type' => 'upload',
465
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
466
  'from_name' => array(
467
  'id' => 'from_name',
468
  'name' => __( 'From Name', 'easy-digital-downloads' ),
@@ -474,34 +491,20 @@ function edd_get_registered_settings() {
474
  'id' => 'from_email',
475
  'name' => __( 'From Email', 'easy-digital-downloads' ),
476
  'desc' => __( 'Email to send purchase receipts from. This will act as the "from" and "reply-to" address.', 'easy-digital-downloads' ),
477
- 'type' => 'email',
478
  'std' => get_bloginfo( 'admin_email' ),
479
  ),
480
- 'email_settings' => array(
481
- 'id' => 'email_settings',
482
- 'name' => '',
483
- 'desc' => '',
484
- 'type' => 'hook',
485
- ),
486
- ),
487
- 'purchase_receipts' => array(
488
- 'purchase_receipt_email_settings' => array(
489
- 'id' => 'purchase_receipt_email_settings',
490
- 'name' => '',
491
- 'desc' => '',
492
- 'type' => 'hook',
493
- ),
494
  'purchase_subject' => array(
495
  'id' => 'purchase_subject',
496
  'name' => __( 'Purchase Email Subject', 'easy-digital-downloads' ),
497
- 'desc' => __( 'Enter the subject line for the purchase receipt email.', 'easy-digital-downloads' ),
498
  'type' => 'text',
499
  'std' => __( 'Purchase Receipt', 'easy-digital-downloads' ),
500
  ),
501
  'purchase_heading' => array(
502
  'id' => 'purchase_heading',
503
  'name' => __( 'Purchase Email Heading', 'easy-digital-downloads' ),
504
- 'desc' => __( 'Enter the heading for the purchase receipt email.', 'easy-digital-downloads' ),
505
  'type' => 'text',
506
  'std' => __( 'Purchase Receipt', 'easy-digital-downloads' ),
507
  ),
@@ -514,10 +517,15 @@ function edd_get_registered_settings() {
514
  ),
515
  ),
516
  'sale_notifications' => array(
 
 
 
 
 
517
  'sale_notification_subject' => array(
518
  'id' => 'sale_notification_subject',
519
  'name' => __( 'Sale Notification Subject', 'easy-digital-downloads' ),
520
- 'desc' => __( 'Enter the subject line for the sale notification email.', 'easy-digital-downloads' ),
521
  'type' => 'text',
522
  'std' => 'New download purchase - Order #{payment_id}',
523
  ),
@@ -531,7 +539,7 @@ function edd_get_registered_settings() {
531
  'admin_notice_emails' => array(
532
  'id' => 'admin_notice_emails',
533
  'name' => __( 'Sale Notification Emails', 'easy-digital-downloads' ),
534
- 'desc' => __( 'Enter the email address(es) that should receive a notification anytime a sale is made, one per line.', 'easy-digital-downloads' ),
535
  'type' => 'textarea',
536
  'std' => get_bloginfo( 'admin_email' ),
537
  ),
@@ -548,13 +556,18 @@ function edd_get_registered_settings() {
548
  'styles' => apply_filters('edd_settings_styles',
549
  array(
550
  'main' => array(
 
 
 
 
 
551
  'disable_styles' => array(
552
  'id' => 'disable_styles',
553
  'name' => __( 'Disable Styles', 'easy-digital-downloads' ),
554
  'desc' => __( 'Check this to disable all included styling of buttons, checkout fields, and all other elements.', 'easy-digital-downloads' ),
555
  'type' => 'checkbox',
556
  'tooltip_title' => __( 'Disabling Styles', 'easy-digital-downloads' ),
557
- 'tooltip_desc' => __( "If your theme has a complete custom CSS file for Easy Digital Downloads, you may wish to disable our default styles. This is not recommended unless you're sure your theme has a complete custom CSS.", 'easy-digital-downloads' ),
558
  ),
559
  'button_header' => array(
560
  'id' => 'button_header',
@@ -583,6 +596,11 @@ function edd_get_registered_settings() {
583
  'taxes' => apply_filters('edd_settings_taxes',
584
  array(
585
  'main' => array(
 
 
 
 
 
586
  'tax_help' => array(
587
  'id' => 'tax_help',
588
  'name' => __( 'Need help?', 'easy-digital-downloads' ),
@@ -658,6 +676,11 @@ function edd_get_registered_settings() {
658
  'misc' => apply_filters('edd_settings_misc',
659
  array(
660
  'main' => array(
 
 
 
 
 
661
  'redirect_on_add' => array(
662
  'id' => 'redirect_on_add',
663
  'name' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
@@ -668,14 +691,8 @@ function edd_get_registered_settings() {
668
  ),
669
  'item_quantities' => array(
670
  'id' => 'item_quantities',
671
- 'name' => __('Cart Item Quantities','easy-digital-downloads' ),
672
- 'desc' => sprintf(__('Allow quantities to be adjusted when adding %s to the cart, and while viewing the checkout cart.','easy-digital-downloads' ), edd_get_label_plural( true ) ),
673
- 'type' => 'checkbox',
674
- ),
675
- 'debug_mode' => array(
676
- 'id' => 'debug_mode',
677
- 'name' => __( 'Debug Mode', 'easy-digital-downloads' ),
678
- 'desc' => __( 'Check this box to enable debug mode. When enabled, debug messages will be logged and shown in Downloads &rarr; Tools &rarr; Debug Log.', 'easy-digital-downloads' ),
679
  'type' => 'checkbox',
680
  ),
681
  'uninstall_on_delete' => array(
@@ -686,6 +703,11 @@ function edd_get_registered_settings() {
686
  ),
687
  ),
688
  'checkout' => array(
 
 
 
 
 
689
  'enforce_ssl' => array(
690
  'id' => 'enforce_ssl',
691
  'name' => __( 'Enforce SSL on Checkout', 'easy-digital-downloads' ),
@@ -729,6 +751,11 @@ function edd_get_registered_settings() {
729
  ),
730
  ),
731
  'button_text' => array(
 
 
 
 
 
732
  'checkout_label' => array(
733
  'id' => 'checkout_label',
734
  'name' => __( 'Complete Purchase Text', 'easy-digital-downloads' ),
@@ -736,13 +763,6 @@ function edd_get_registered_settings() {
736
  'type' => 'text',
737
  'std' => __( 'Purchase', 'easy-digital-downloads' ),
738
  ),
739
- 'free_checkout_label' => array(
740
- 'id' => 'free_checkout_label',
741
- 'name' => __( 'Register Text', 'easy-digital-downloads' ),
742
- 'desc' => __( 'The button label for completing a free purchase.', 'easy-digital-downloads' ),
743
- 'type' => 'text',
744
- 'std' => __( 'Free Download', 'easy-digital-downloads' ),
745
- ),
746
  'add_to_cart_text' => array(
747
  'id' => 'add_to_cart_text',
748
  'name' => __( 'Add to Cart Text', 'easy-digital-downloads' ),
@@ -759,6 +779,11 @@ function edd_get_registered_settings() {
759
  ),
760
  ),
761
  'file_downloads' => array(
 
 
 
 
 
762
  'download_method' => array(
763
  'id' => 'download_method',
764
  'name' => __( 'Download Method', 'easy-digital-downloads' ),
@@ -805,6 +830,11 @@ function edd_get_registered_settings() {
805
  ),
806
  ),
807
  'accounting' => array(
 
 
 
 
 
808
  'enable_skus' => array(
809
  'id' => 'enable_skus',
810
  'name' => __( 'Enable SKU Entry', 'easy-digital-downloads' ),
@@ -839,6 +869,11 @@ function edd_get_registered_settings() {
839
  ),
840
  ),
841
  'site_terms' => array(
 
 
 
 
 
842
  'show_agree_to_terms' => array(
843
  'id' => 'show_agree_to_terms',
844
  'name' => __( 'Agree to Terms', 'easy-digital-downloads' ),
@@ -881,9 +916,9 @@ function edd_get_registered_settings() {
881
  * @since 1.0.8.2
882
  *
883
  * @param array $input The value inputted in the field
884
- * @global array $edd_options Array of all the EDD Options
885
  *
886
- * @return string $input Sanitized value
887
  */
888
  function edd_settings_sanitize( $input = array() ) {
889
  global $edd_options;
@@ -902,12 +937,6 @@ function edd_settings_sanitize( $input = array() ) {
902
  $tab = isset( $referrer['tab'] ) ? $referrer['tab'] : 'general';
903
  $section = isset( $referrer['section'] ) ? $referrer['section'] : 'main';
904
 
905
- if ( ! empty( $_POST['edd_section_override'] ) ) {
906
- $section = sanitize_text_field( $_POST['edd_section_override'] );
907
- }
908
-
909
- $setting_types = edd_get_registered_settings_types( $tab, $section );
910
-
911
  // Run a general sanitization for the tab for special fields (like taxes)
912
  $input = apply_filters( 'edd_settings_' . $tab . '_sanitize', $input );
913
 
@@ -950,7 +979,7 @@ function edd_settings_sanitize( $input = array() ) {
950
  }
951
  break;
952
  default:
953
- if ( array_key_exists( $key, $input ) && empty( $input[ $key ] ) || ( array_key_exists( $key, $output ) && ! array_key_exists( $key, $input ) ) ) {
954
  unset( $output[ $key ] );
955
  }
956
  break;
@@ -975,23 +1004,15 @@ function edd_settings_sanitize( $input = array() ) {
975
  * in a much cleaner set of logic in edd_settings_sanitize
976
  *
977
  * @since 2.6.5
978
- * @since 2.8 - Added the ability to filter setting types by tab and section
979
- *
980
- * @param $filtered_tab bool|string A tab to filter setting types by.
981
- * @param $filtered_section bool|string A section to filter setting types by.
982
  * @return array Key is the setting ID, value is the type of setting it is registered as
983
  */
984
- function edd_get_registered_settings_types( $filtered_tab = false, $filtered_section = false ) {
985
  $settings = edd_get_registered_settings();
986
  $setting_types = array();
987
 
988
- foreach ( $settings as $tab_id => $tab ) {
989
 
990
- if ( false !== $filtered_tab && $filtered_tab !== $tab_id ) {
991
- continue;
992
- }
993
-
994
- foreach ( $tab as $section_id => $section_or_setting ) {
995
 
996
  // See if we have a setting registered at the tab level for backwards compatibility
997
  if ( is_array( $section_or_setting ) && array_key_exists( 'type', $section_or_setting ) ) {
@@ -999,10 +1020,6 @@ function edd_get_registered_settings_types( $filtered_tab = false, $filtered_sec
999
  continue;
1000
  }
1001
 
1002
- if ( false !== $filtered_section && $filtered_section !== $section_id ) {
1003
- continue;
1004
- }
1005
-
1006
  foreach ( $section_or_setting as $section => $section_settings ) {
1007
  $setting_types[ $section_settings['id'] ] = $section_settings['type'];
1008
  }
@@ -1018,7 +1035,7 @@ function edd_get_registered_settings_types( $filtered_tab = false, $filtered_sec
1018
  *
1019
  * @since 2.5
1020
  * @param array $input The value inputted in the field
1021
- * @return string $input Sanitized value
1022
  */
1023
  function edd_settings_sanitize_misc_file_downloads( $input ) {
1024
 
@@ -1040,7 +1057,7 @@ add_filter( 'edd_settings_misc-file_downloads_sanitize', 'edd_settings_sanitize_
1040
  *
1041
  * @since 2.5
1042
  * @param array $input The value inputted in the field
1043
- * @return string $input Sanitized value
1044
  */
1045
  function edd_settings_sanitize_misc_accounting( $input ) {
1046
 
@@ -1067,7 +1084,7 @@ add_filter( 'edd_settings_misc-accounting_sanitize', 'edd_settings_sanitize_misc
1067
  *
1068
  * @since 1.6
1069
  * @param array $input The value inputted in the field
1070
- * @return string $input Sanitized value
1071
  */
1072
  function edd_settings_sanitize_taxes( $input ) {
1073
 
@@ -1094,7 +1111,7 @@ add_filter( 'edd_settings_taxes_sanitize', 'edd_settings_sanitize_taxes' );
1094
  *
1095
  * @since 2.7
1096
  * @param array $input The value inputted in the field
1097
- * @return string $input Sanitized value
1098
  */
1099
  function edd_settings_sanitize_gateways( $input ) {
1100
 
@@ -1132,7 +1149,7 @@ add_filter( 'edd_settings_gateways_sanitize', 'edd_settings_sanitize_gateways' )
1132
  *
1133
  * @since 1.8
1134
  * @param array $input The field value
1135
- * @return string $input Sanitized value
1136
  */
1137
  function edd_sanitize_text_field( $input ) {
1138
  $tags = array(
@@ -1148,6 +1165,7 @@ function edd_sanitize_text_field( $input ) {
1148
  'href' => array(),
1149
  'title' => array(),
1150
  'class' => array(),
 
1151
  'id' => array(),
1152
  ),
1153
  'strong' => array(),
@@ -1265,35 +1283,35 @@ function edd_get_registered_settings_sections() {
1265
 
1266
  $sections = array(
1267
  'general' => apply_filters( 'edd_settings_sections_general', array(
1268
- 'main' => __( 'General', 'easy-digital-downloads' ),
1269
- 'currency' => __( 'Currency', 'easy-digital-downloads' ),
1270
- 'api' => __( 'API', 'easy-digital-downloads' ),
1271
  ) ),
1272
  'gateways' => apply_filters( 'edd_settings_sections_gateways', array(
1273
- 'main' => __( 'General', 'easy-digital-downloads' ),
1274
  'paypal' => __( 'PayPal Standard', 'easy-digital-downloads' ),
1275
  ) ),
1276
  'emails' => apply_filters( 'edd_settings_sections_emails', array(
1277
- 'main' => __( 'General', 'easy-digital-downloads' ),
1278
  'purchase_receipts' => __( 'Purchase Receipts', 'easy-digital-downloads' ),
1279
  'sale_notifications' => __( 'New Sale Notifications', 'easy-digital-downloads' ),
1280
  ) ),
1281
  'styles' => apply_filters( 'edd_settings_sections_styles', array(
1282
- 'main' => __( 'General', 'easy-digital-downloads' ),
1283
  ) ),
1284
  'taxes' => apply_filters( 'edd_settings_sections_taxes', array(
1285
- 'main' => __( 'General', 'easy-digital-downloads' ),
1286
  ) ),
1287
  'extensions' => apply_filters( 'edd_settings_sections_extensions', array(
1288
  'main' => __( 'Main', 'easy-digital-downloads' )
1289
  ) ),
1290
  'licenses' => apply_filters( 'edd_settings_sections_licenses', array() ),
1291
  'misc' => apply_filters( 'edd_settings_sections_misc', array(
1292
- 'main' => __( 'Miscellaneous', 'easy-digital-downloads' ),
1293
- 'checkout' => __( 'Checkout', 'easy-digital-downloads' ),
1294
  'button_text' => __( 'Button Text', 'easy-digital-downloads' ),
1295
  'file_downloads' => __( 'File Downloads', 'easy-digital-downloads' ),
1296
- 'accounting' => __( 'Accounting', 'easy-digital-downloads' ),
1297
  'site_terms' => __( 'Terms of Agreement', 'easy-digital-downloads' ),
1298
  ) ),
1299
  );
@@ -1424,7 +1442,7 @@ function edd_payment_icons_callback( $args ) {
1424
  $enabled = NULL;
1425
  }
1426
 
1427
- $html .= '<label for="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" class="edd-settings-payment-icon-wrapper">';
1428
 
1429
  $html .= '<input name="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" class="' . $class . '" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
1430
 
@@ -1530,13 +1548,6 @@ function edd_gateways_callback( $args ) {
1530
  $html .= '<input name="edd_settings[' . esc_attr( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" class="' . $class . '" type="checkbox" value="1" ' . checked('1', $enabled, false) . '/>&nbsp;';
1531
  $html .= '<label for="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']">' . esc_html( $option['admin_label'] ) . '</label><br/>';
1532
  endforeach;
1533
- $url_args = array(
1534
- 'utm_source' => 'settings',
1535
- 'utm_medium' => 'gateways',
1536
- 'utm_campaign' => 'admin',
1537
- );
1538
- $url = esc_url( add_query_arg( $url_args, 'https://easydigitaldownloads.com/downloads/category/extensions/gateways/' ) );
1539
- $html .= '<p class="description">' . sprintf( __( 'Don\'t see what you need? More Payment Gateway options are available <a href="%s">here</a>.', 'easy-digital-downloads' ), $url ) . '</p>';
1540
 
1541
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1542
  }
@@ -1611,46 +1622,6 @@ function edd_text_callback( $args ) {
1611
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1612
  }
1613
 
1614
- /**
1615
- * Email Callback
1616
- *
1617
- * Renders email fields.
1618
- *
1619
- * @since 2.8
1620
- * @param array $args Arguments passed by the setting
1621
- *
1622
- * @return void
1623
- */
1624
- function edd_email_callback( $args ) {
1625
- $edd_option = edd_get_option( $args['id'] );
1626
-
1627
- if ( $edd_option ) {
1628
- $value = $edd_option;
1629
- } elseif( ! empty( $args['allow_blank'] ) && empty( $edd_option ) ) {
1630
- $value = '';
1631
- } else {
1632
- $value = isset( $args['std'] ) ? $args['std'] : '';
1633
- }
1634
-
1635
- if ( isset( $args['faux'] ) && true === $args['faux'] ) {
1636
- $args['readonly'] = true;
1637
- $value = isset( $args['std'] ) ? $args['std'] : '';
1638
- $name = '';
1639
- } else {
1640
- $name = 'name="edd_settings[' . esc_attr( $args['id'] ) . ']"';
1641
- }
1642
-
1643
- $class = edd_sanitize_html_class( $args['field_class'] );
1644
-
1645
- $disabled = ! empty( $args['disabled'] ) ? ' disabled="disabled"' : '';
1646
- $readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
1647
- $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
1648
- $html = '<input type="email" class="' . $class . ' ' . sanitize_html_class( $size ) . '-text" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" ' . $name . ' value="' . esc_attr( stripslashes( $value ) ) . '"' . $readonly . $disabled . ' placeholder="' . esc_attr( $args['placeholder'] ) . '"/>';
1649
- $html .= '<label for="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
1650
-
1651
- echo apply_filters( 'edd_after_setting_output', $html, $args );
1652
- }
1653
-
1654
  /**
1655
  * Number Callback
1656
  *
@@ -1778,14 +1749,7 @@ function edd_select_callback($args) {
1778
  if ( $edd_option ) {
1779
  $value = $edd_option;
1780
  } else {
1781
-
1782
- // Properly set default fallback if the Select Field allows Multiple values
1783
- if ( empty( $args['multiple'] ) ) {
1784
- $value = isset( $args['std'] ) ? $args['std'] : '';
1785
- } else {
1786
- $value = ! empty( $args['std'] ) ? $args['std'] : array();
1787
- }
1788
-
1789
  }
1790
 
1791
  if ( isset( $args['placeholder'] ) ) {
@@ -1797,25 +1761,14 @@ function edd_select_callback($args) {
1797
  $class = edd_sanitize_html_class( $args['field_class'] );
1798
 
1799
  if ( isset( $args['chosen'] ) ) {
1800
- $class .= ' edd-select-chosen';
1801
  }
1802
 
1803
- // If the Select Field allows Multiple values, save as an Array
1804
- $name_attr = 'edd_settings[' . esc_attr( $args['id'] ) . ']';
1805
- $name_attr = ( $args['multiple'] ) ? $name_attr . '[]' : $name_attr;
1806
-
1807
- $html = '<select id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="' . $name_attr . '" class="' . $class . '" data-placeholder="' . esc_html( $placeholder ) . '" ' . ( ( $args['multiple'] ) ? 'multiple="true"' : '' ) . '>';
1808
 
1809
  foreach ( $args['options'] as $option => $name ) {
1810
-
1811
- if ( ! $args['multiple'] ) {
1812
- $selected = selected( $option, $value, false );
1813
- $html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
1814
- } else {
1815
- // Do an in_array() check to output selected attribute for Multiple
1816
- $html .= '<option value="' . esc_attr( $option ) . '" ' . ( ( in_array( $option, $value ) ) ? 'selected="true"' : '' ) . '>' . esc_html( $name ) . '</option>';
1817
- }
1818
-
1819
  }
1820
 
1821
  $html .= '</select>';
85
  * @return boolean True if removed, false if not.
86
  */
87
  function edd_delete_option( $key = '' ) {
 
88
 
89
  // If no key, exit
90
  if ( empty( $key ) ){
101
 
102
  }
103
 
 
 
 
 
 
 
 
104
  $did_update = update_option( 'edd_settings', $options );
105
 
106
  // If it updated, let's update the global variable
192
  'max' => null,
193
  'step' => null,
194
  'chosen' => null,
 
195
  'placeholder' => null,
196
  'allow_blank' => true,
197
  'readonly' => false,
232
  * 'Whitelisted' EDD settings, filters are provided for each settings
233
  * section to allow extensions and other plugins to add their own settings
234
  */
 
 
 
235
  $edd_settings = array(
236
  /** General Settings */
237
  'general' => apply_filters( 'edd_settings_general',
239
  'main' => array(
240
  'page_settings' => array(
241
  'id' => 'page_settings',
242
+ 'name' => '<h3>' . __( 'Page Settings', 'easy-digital-downloads' ) . '</h3>',
243
  'desc' => '',
244
  'type' => 'header',
245
  'tooltip_title' => __( 'Page Settings', 'easy-digital-downloads' ),
285
  'id' => 'login_redirect_page',
286
  'name' => __( 'Login Redirect Page', 'easy-digital-downloads' ),
287
  'desc' => sprintf(
288
+ __( 'This is the page where buyers will be redirected by default once they log in. The [edd_login redirect="%s"] shortcode with the redirect attribute can override this setting.', 'easy-digital-downloads' ), trailingslashit( home_url() )
289
  ),
290
  'type' => 'select',
291
  'options' => edd_get_pages(),
316
  'type' => 'shop_states',
317
  'chosen' => true,
318
  'placeholder' => __( 'Select a state', 'easy-digital-downloads' ),
 
319
  ),
320
  'tracking_settings' => array(
321
  'id' => 'tracking_settings',
322
+ 'name' => '<h3>' . __( 'Tracking Settings', 'easy-digital-downloads' ) . '</h3>',
323
  'desc' => '',
324
  'type' => 'header',
325
  ),
327
  'id' => 'allow_tracking',
328
  'name' => __( 'Allow Usage Tracking?', 'easy-digital-downloads' ),
329
  'desc' => sprintf(
330
+ __( 'Allow Easy Digital Downloads to anonymously track how this plugin is used and help us make the plugin better. Opt-in to tracking and our newsletter and immediately be emailed a 20&#37; discount to the EDD shop, valid towards the <a href="%s" target="_blank">purchase of extensions</a>. No sensitive data is tracked.', 'easy-digital-downloads' ),
331
  'https://easydigitaldownloads.com/downloads/?utm_source=' . substr( md5( get_bloginfo( 'name' ) ), 0, 10 ) . '&utm_medium=admin&utm_term=settings&utm_campaign=EDDUsageTracking'
332
  ),
333
  'type' => 'checkbox',
334
  ),
335
  ),
336
  'currency' => array(
337
+ 'currency_settings' => array(
338
+ 'id' => 'currency_settings',
339
+ 'name' => '<h3>' . __( 'Currency Settings', 'easy-digital-downloads' ) . '</h3>',
340
+ 'desc' => '',
341
+ 'type' => 'header',
342
+ ),
343
  'currency' => array(
344
  'id' => 'currency',
345
  'name' => __( 'Currency', 'easy-digital-downloads' ),
361
  'thousands_separator' => array(
362
  'id' => 'thousands_separator',
363
  'name' => __( 'Thousands Separator', 'easy-digital-downloads' ),
364
+ 'desc' => __( 'The symbol (usually , or .) to separate thousands', 'easy-digital-downloads' ),
365
  'type' => 'text',
366
  'size' => 'small',
367
  'std' => ',',
369
  'decimal_separator' => array(
370
  'id' => 'decimal_separator',
371
  'name' => __( 'Decimal Separator', 'easy-digital-downloads' ),
372
+ 'desc' => __( 'The symbol (usually , or .) to separate decimal points', 'easy-digital-downloads' ),
373
  'type' => 'text',
374
  'size' => 'small',
375
  'std' => '.',
378
  'api' => array(
379
  'api_settings' => array(
380
  'id' => 'api_settings',
381
+ 'name' => '<h3>' . __( 'API Settings', 'easy-digital-downloads' ) . '</h3>',
382
  'desc' => '',
383
  'type' => 'header',
384
  'tooltip_title' => __( 'API Settings', 'easy-digital-downloads' ),
402
  'gateways' => apply_filters('edd_settings_gateways',
403
  array(
404
  'main' => array(
405
+ 'gateway_settings' => array(
406
+ 'id' => 'api_header',
407
+ 'name' => '<h3>' . __( 'Gateway Settings', 'easy-digital-downloads' ) . '</h3>',
408
+ 'desc' => '',
409
+ 'type' => 'header',
410
+ ),
411
  'test_mode' => array(
412
  'id' => 'test_mode',
413
  'name' => __( 'Test Mode', 'easy-digital-downloads' ),
431
  'accepted_cards' => array(
432
  'id' => 'accepted_cards',
433
  'name' => __( 'Accepted Payment Method Icons', 'easy-digital-downloads' ),
434
+ 'desc' => __( 'Display icons for the selected payment methods', 'easy-digital-downloads' ) . '<br/>' . __( 'You will also need to configure your gateway settings if you are accepting credit cards', 'easy-digital-downloads' ),
435
  'type' => 'payment_icons',
436
  'options' => apply_filters('edd_accepted_payment_icons', array(
437
  'mastercard' => 'Mastercard',
449
  'emails' => apply_filters('edd_settings_emails',
450
  array(
451
  'main' => array(
452
+ 'email_settings_header' => array(
453
+ 'id' => 'email_settings_header',
454
+ 'name' => '<h3>' . __( 'Email Settings', 'easy-digital-downloads' ) . '</h3>',
455
+ 'type' => 'header',
456
+ ),
457
  'email_template' => array(
458
  'id' => 'email_template',
459
  'name' => __( 'Email Template', 'easy-digital-downloads' ),
467
  'desc' => __( 'Upload or choose a logo to be displayed at the top of the purchase receipt emails. Displayed on HTML emails only.', 'easy-digital-downloads' ),
468
  'type' => 'upload',
469
  ),
470
+ 'email_settings' => array(
471
+ 'id' => 'email_settings',
472
+ 'name' => '',
473
+ 'desc' => '',
474
+ 'type' => 'hook',
475
+ ),
476
+ ),
477
+ 'purchase_receipts' => array(
478
+ 'purchase_receipt_settings' => array(
479
+ 'id' => 'purchase_receipt_settings',
480
+ 'name' => '<h3>' . __( 'Purchase Receipts', 'easy-digital-downloads' ) . '</h3>',
481
+ 'type' => 'header',
482
+ ),
483
  'from_name' => array(
484
  'id' => 'from_name',
485
  'name' => __( 'From Name', 'easy-digital-downloads' ),
491
  'id' => 'from_email',
492
  'name' => __( 'From Email', 'easy-digital-downloads' ),
493
  'desc' => __( 'Email to send purchase receipts from. This will act as the "from" and "reply-to" address.', 'easy-digital-downloads' ),
494
+ 'type' => 'text',
495
  'std' => get_bloginfo( 'admin_email' ),
496
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497
  'purchase_subject' => array(
498
  'id' => 'purchase_subject',
499
  'name' => __( 'Purchase Email Subject', 'easy-digital-downloads' ),
500
+ 'desc' => __( 'Enter the subject line for the purchase receipt email', 'easy-digital-downloads' ),
501
  'type' => 'text',
502
  'std' => __( 'Purchase Receipt', 'easy-digital-downloads' ),
503
  ),
504
  'purchase_heading' => array(
505
  'id' => 'purchase_heading',
506
  'name' => __( 'Purchase Email Heading', 'easy-digital-downloads' ),
507
+ 'desc' => __( 'Enter the heading for the purchase receipt email', 'easy-digital-downloads' ),
508
  'type' => 'text',
509
  'std' => __( 'Purchase Receipt', 'easy-digital-downloads' ),
510
  ),
517
  ),
518
  ),
519
  'sale_notifications' => array(
520
+ 'sale_notification_settings' => array(
521
+ 'id' => 'sale_notification_settings',
522
+ 'name' => '<h3>' . __( 'Sale Notifications', 'easy-digital-downloads' ) . '</h3>',
523
+ 'type' => 'header',
524
+ ),
525
  'sale_notification_subject' => array(
526
  'id' => 'sale_notification_subject',
527
  'name' => __( 'Sale Notification Subject', 'easy-digital-downloads' ),
528
+ 'desc' => __( 'Enter the subject line for the sale notification email', 'easy-digital-downloads' ),
529
  'type' => 'text',
530
  'std' => 'New download purchase - Order #{payment_id}',
531
  ),
539
  'admin_notice_emails' => array(
540
  'id' => 'admin_notice_emails',
541
  'name' => __( 'Sale Notification Emails', 'easy-digital-downloads' ),
542
+ 'desc' => __( 'Enter the email address(es) that should receive a notification anytime a sale is made, one per line', 'easy-digital-downloads' ),
543
  'type' => 'textarea',
544
  'std' => get_bloginfo( 'admin_email' ),
545
  ),
556
  'styles' => apply_filters('edd_settings_styles',
557
  array(
558
  'main' => array(
559
+ 'style_settings' => array(
560
+ 'id' => 'style_settings',
561
+ 'name' => '<h3>' . __( 'Style Settings', 'easy-digital-downloads' ) . '</h3>',
562
+ 'type' => 'header',
563
+ ),
564
  'disable_styles' => array(
565
  'id' => 'disable_styles',
566
  'name' => __( 'Disable Styles', 'easy-digital-downloads' ),
567
  'desc' => __( 'Check this to disable all included styling of buttons, checkout fields, and all other elements.', 'easy-digital-downloads' ),
568
  'type' => 'checkbox',
569
  'tooltip_title' => __( 'Disabling Styles', 'easy-digital-downloads' ),
570
+ 'tooltip_desc' => __( 'If your theme has a complete custom CSS file for Easy Digital Downloads, you may wish to disable our default styles. This is not recommended unless your sure your theme has a complete custom CSS.', 'easy-digital-downloads' ),
571
  ),
572
  'button_header' => array(
573
  'id' => 'button_header',
596
  'taxes' => apply_filters('edd_settings_taxes',
597
  array(
598
  'main' => array(
599
+ 'tax_settings' => array(
600
+ 'id' => 'tax_settings',
601
+ 'name' => '<h3>' . __( 'Tax Settings', 'easy-digital-downloads' ) . '</h3>',
602
+ 'type' => 'header',
603
+ ),
604
  'tax_help' => array(
605
  'id' => 'tax_help',
606
  'name' => __( 'Need help?', 'easy-digital-downloads' ),
676
  'misc' => apply_filters('edd_settings_misc',
677
  array(
678
  'main' => array(
679
+ 'misc_settings' => array(
680
+ 'id' => 'misc_settings',
681
+ 'name' => '<h3>' . __( 'Misc Settings', 'easy-digital-downloads' ) . '</h3>',
682
+ 'type' => 'header',
683
+ ),
684
  'redirect_on_add' => array(
685
  'id' => 'redirect_on_add',
686
  'name' => __( 'Redirect to Checkout', 'easy-digital-downloads' ),
691
  ),
692
  'item_quantities' => array(
693
  'id' => 'item_quantities',
694
+ 'name' => __('Item Quantities','easy-digital-downloads' ),
695
+ 'desc' => __('Allow item quantities to be changed.','easy-digital-downloads' ),
 
 
 
 
 
 
696
  'type' => 'checkbox',
697
  ),
698
  'uninstall_on_delete' => array(
703
  ),
704
  ),
705
  'checkout' => array(
706
+ 'checkout_settings' => array(
707
+ 'id' => 'checkout_settings',
708
+ 'name' => '<h3>' . __( 'Checkout Settings', 'easy-digital-downloads' ) . '</h3>',
709
+ 'type' => 'header',
710
+ ),
711
  'enforce_ssl' => array(
712
  'id' => 'enforce_ssl',
713
  'name' => __( 'Enforce SSL on Checkout', 'easy-digital-downloads' ),
751
  ),
752
  ),
753
  'button_text' => array(
754
+ 'button_settings' => array(
755
+ 'id' => 'button_settings',
756
+ 'name' => '<h3>' . __( 'Button Text', 'easy-digital-downloads' ) . '</h3>',
757
+ 'type' => 'header',
758
+ ),
759
  'checkout_label' => array(
760
  'id' => 'checkout_label',
761
  'name' => __( 'Complete Purchase Text', 'easy-digital-downloads' ),
763
  'type' => 'text',
764
  'std' => __( 'Purchase', 'easy-digital-downloads' ),
765
  ),
 
 
 
 
 
 
 
766
  'add_to_cart_text' => array(
767
  'id' => 'add_to_cart_text',
768
  'name' => __( 'Add to Cart Text', 'easy-digital-downloads' ),
779
  ),
780
  ),
781
  'file_downloads' => array(
782
+ 'file_settings' => array(
783
+ 'id' => 'file_settings',
784
+ 'name' => '<h3>' . __( 'File Download Settings', 'easy-digital-downloads' ) . '</h3>',
785
+ 'type' => 'header',
786
+ ),
787
  'download_method' => array(
788
  'id' => 'download_method',
789
  'name' => __( 'Download Method', 'easy-digital-downloads' ),
830
  ),
831
  ),
832
  'accounting' => array(
833
+ 'accounting_settings' => array(
834
+ 'id' => 'accounting_settings',
835
+ 'name' => '<h3>' . __( 'Accounting Settings', 'easy-digital-downloads' ) . '</h3>',
836
+ 'type' => 'header',
837
+ ),
838
  'enable_skus' => array(
839
  'id' => 'enable_skus',
840
  'name' => __( 'Enable SKU Entry', 'easy-digital-downloads' ),
869
  ),
870
  ),
871
  'site_terms' => array(
872
+ 'terms_settings' => array(
873
+ 'id' => 'terms_settings',
874
+ 'name' => '<h3>' . __( 'Agreement Settings', 'easy-digital-downloads' ) . '</h3>',
875
+ 'type' => 'header',
876
+ ),
877
  'show_agree_to_terms' => array(
878
  'id' => 'show_agree_to_terms',
879
  'name' => __( 'Agree to Terms', 'easy-digital-downloads' ),
916
  * @since 1.0.8.2
917
  *
918
  * @param array $input The value inputted in the field
919
+ * @global $edd_options Array of all the EDD Options
920
  *
921
+ * @return string $input Sanitizied value
922
  */
923
  function edd_settings_sanitize( $input = array() ) {
924
  global $edd_options;
937
  $tab = isset( $referrer['tab'] ) ? $referrer['tab'] : 'general';
938
  $section = isset( $referrer['section'] ) ? $referrer['section'] : 'main';
939
 
 
 
 
 
 
 
940
  // Run a general sanitization for the tab for special fields (like taxes)
941
  $input = apply_filters( 'edd_settings_' . $tab . '_sanitize', $input );
942
 
979
  }
980
  break;
981
  default:
982
+ if ( array_key_exists( $key, $input ) && empty( $input[ $key ] ) ) {
983
  unset( $output[ $key ] );
984
  }
985
  break;
1004
  * in a much cleaner set of logic in edd_settings_sanitize
1005
  *
1006
  * @since 2.6.5
 
 
 
 
1007
  * @return array Key is the setting ID, value is the type of setting it is registered as
1008
  */
1009
+ function edd_get_registered_settings_types() {
1010
  $settings = edd_get_registered_settings();
1011
  $setting_types = array();
1012
 
1013
+ foreach ( $settings as $tab ) {
1014
 
1015
+ foreach ( $tab as $section_or_setting ) {
 
 
 
 
1016
 
1017
  // See if we have a setting registered at the tab level for backwards compatibility
1018
  if ( is_array( $section_or_setting ) && array_key_exists( 'type', $section_or_setting ) ) {
1020
  continue;
1021
  }
1022
 
 
 
 
 
1023
  foreach ( $section_or_setting as $section => $section_settings ) {
1024
  $setting_types[ $section_settings['id'] ] = $section_settings['type'];
1025
  }
1035
  *
1036
  * @since 2.5
1037
  * @param array $input The value inputted in the field
1038
+ * @return string $input Sanitizied value
1039
  */
1040
  function edd_settings_sanitize_misc_file_downloads( $input ) {
1041
 
1057
  *
1058
  * @since 2.5
1059
  * @param array $input The value inputted in the field
1060
+ * @return string $input Sanitizied value
1061
  */
1062
  function edd_settings_sanitize_misc_accounting( $input ) {
1063
 
1084
  *
1085
  * @since 1.6
1086
  * @param array $input The value inputted in the field
1087
+ * @return string $input Sanitizied value
1088
  */
1089
  function edd_settings_sanitize_taxes( $input ) {
1090
 
1111
  *
1112
  * @since 2.7
1113
  * @param array $input The value inputted in the field
1114
+ * @return string $input Sanitizied value
1115
  */
1116
  function edd_settings_sanitize_gateways( $input ) {
1117
 
1149
  *
1150
  * @since 1.8
1151
  * @param array $input The field value
1152
+ * @return string $input Sanitizied value
1153
  */
1154
  function edd_sanitize_text_field( $input ) {
1155
  $tags = array(
1165
  'href' => array(),
1166
  'title' => array(),
1167
  'class' => array(),
1168
+ 'title' => array(),
1169
  'id' => array(),
1170
  ),
1171
  'strong' => array(),
1283
 
1284
  $sections = array(
1285
  'general' => apply_filters( 'edd_settings_sections_general', array(
1286
+ 'main' => __( 'General Settings', 'easy-digital-downloads' ),
1287
+ 'currency' => __( 'Currency Settings', 'easy-digital-downloads' ),
1288
+ 'api' => __( 'API Settings', 'easy-digital-downloads' ),
1289
  ) ),
1290
  'gateways' => apply_filters( 'edd_settings_sections_gateways', array(
1291
+ 'main' => __( 'Gateway Settings', 'easy-digital-downloads' ),
1292
  'paypal' => __( 'PayPal Standard', 'easy-digital-downloads' ),
1293
  ) ),
1294
  'emails' => apply_filters( 'edd_settings_sections_emails', array(
1295
+ 'main' => __( 'Email Settings', 'easy-digital-downloads' ),
1296
  'purchase_receipts' => __( 'Purchase Receipts', 'easy-digital-downloads' ),
1297
  'sale_notifications' => __( 'New Sale Notifications', 'easy-digital-downloads' ),
1298
  ) ),
1299
  'styles' => apply_filters( 'edd_settings_sections_styles', array(
1300
+ 'main' => __( 'Style Settings', 'easy-digital-downloads' ),
1301
  ) ),
1302
  'taxes' => apply_filters( 'edd_settings_sections_taxes', array(
1303
+ 'main' => __( 'Tax Settings', 'easy-digital-downloads' ),
1304
  ) ),
1305
  'extensions' => apply_filters( 'edd_settings_sections_extensions', array(
1306
  'main' => __( 'Main', 'easy-digital-downloads' )
1307
  ) ),
1308
  'licenses' => apply_filters( 'edd_settings_sections_licenses', array() ),
1309
  'misc' => apply_filters( 'edd_settings_sections_misc', array(
1310
+ 'main' => __( 'Misc Settings', 'easy-digital-downloads' ),
1311
+ 'checkout' => __( 'Checkout Settings', 'easy-digital-downloads' ),
1312
  'button_text' => __( 'Button Text', 'easy-digital-downloads' ),
1313
  'file_downloads' => __( 'File Downloads', 'easy-digital-downloads' ),
1314
+ 'accounting' => __( 'Accounting Settings', 'easy-digital-downloads' ),
1315
  'site_terms' => __( 'Terms of Agreement', 'easy-digital-downloads' ),
1316
  ) ),
1317
  );
1442
  $enabled = NULL;
1443
  }
1444
 
1445
+ $html .= '<label for="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
1446
 
1447
  $html .= '<input name="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" class="' . $class . '" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
1448
 
1548
  $html .= '<input name="edd_settings[' . esc_attr( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']" class="' . $class . '" type="checkbox" value="1" ' . checked('1', $enabled, false) . '/>&nbsp;';
1549
  $html .= '<label for="edd_settings[' . edd_sanitize_key( $args['id'] ) . '][' . edd_sanitize_key( $key ) . ']">' . esc_html( $option['admin_label'] ) . '</label><br/>';
1550
  endforeach;
 
 
 
 
 
 
 
1551
 
1552
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1553
  }
1622
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1623
  }
1624
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1625
  /**
1626
  * Number Callback
1627
  *
1749
  if ( $edd_option ) {
1750
  $value = $edd_option;
1751
  } else {
1752
+ $value = isset( $args['std'] ) ? $args['std'] : '';
 
 
 
 
 
 
 
1753
  }
1754
 
1755
  if ( isset( $args['placeholder'] ) ) {
1761
  $class = edd_sanitize_html_class( $args['field_class'] );
1762
 
1763
  if ( isset( $args['chosen'] ) ) {
1764
+ $class .= ' edd-chosen';
1765
  }
1766
 
1767
+ $html = '<select id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="edd_settings[' . esc_attr( $args['id'] ) . ']" class="' . $class . '" data-placeholder="' . esc_html( $placeholder ) . '" />';
 
 
 
 
1768
 
1769
  foreach ( $args['options'] as $option => $name ) {
1770
+ $selected = selected( $option, $value, false );
1771
+ $html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
 
 
 
 
 
 
 
1772
  }
1773
 
1774
  $html .= '</select>';
includes/admin/thickbox.php CHANGED
@@ -29,7 +29,6 @@ function edd_media_button() {
29
  $output = '<a href="#TB_inline?width=640&inlineId=choose-download" class="thickbox button edd-thickbox" style="padding-left: .4em;">' . $img . sprintf( __( 'Insert %s', 'easy-digital-downloads' ), strtolower( edd_get_label_singular() ) ) . '</a>';
30
 
31
  }
32
-
33
  echo $output;
34
  }
35
  add_action( 'media_buttons', 'edd_media_button', 11 );
29
  $output = '<a href="#TB_inline?width=640&inlineId=choose-download" class="thickbox button edd-thickbox" style="padding-left: .4em;">' . $img . sprintf( __( 'Insert %s', 'easy-digital-downloads' ), strtolower( edd_get_label_singular() ) ) . '</a>';
30
 
31
  }
 
32
  echo $output;
33
  }
34
  add_action( 'media_buttons', 'edd_media_button', 11 );
includes/admin/tools.php CHANGED
@@ -27,6 +27,7 @@ function edd_tools_page() {
27
  $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general';
28
  ?>
29
  <div class="wrap">
 
30
  <h2><?php _e( 'Easy Digital Downloads Tools', 'easy-digital-downloads' ); ?></h2>
31
  <h2 class="nav-tab-wrapper">
32
  <?php
@@ -73,11 +74,6 @@ function edd_get_tools_tabs() {
73
  }
74
 
75
  $tabs['system_info'] = __( 'System Info', 'easy-digital-downloads' );
76
-
77
- if( edd_is_debug_mode() ) {
78
- $tabs['debug_log'] = __( 'Debug Log', 'easy-digital-downloads' );
79
- }
80
-
81
  $tabs['import_export'] = __( 'Import/Export', 'easy-digital-downloads' );
82
 
83
  return apply_filters( 'edd_tools_tabs', $tabs );
@@ -101,11 +97,11 @@ function edd_tools_banned_emails_display() {
101
  <div class="postbox">
102
  <h3><span><?php _e( 'Banned Emails', 'easy-digital-downloads' ); ?></span></h3>
103
  <div class="inside">
104
- <p><?php _e( 'Emails placed in the box below will not be allowed to make purchases.', 'easy-digital-downloads' ); ?></p>
105
  <form method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ); ?>">
106
  <p>
107
  <textarea name="banned_emails" rows="10" class="large-text"><?php echo implode( "\n", edd_get_banned_emails() ); ?></textarea>
108
- <span class="description"><?php _e( 'Enter emails and/or domains (starting with "@") and/or TLDs (starting with ".") to disallow, one per line.', 'easy-digital-downloads' ); ?></span>
109
  </p>
110
  <p>
111
  <input type="hidden" name="edd_action" value="save_banned_emails" />
@@ -399,8 +395,10 @@ function edd_tools_banned_emails_save() {
399
  $emails = array_map( 'sanitize_text_field', $emails );
400
 
401
  foreach( $emails as $id => $email ) {
402
- if( ! is_email( $email ) && $email[0] != '@' && $email[0] != '.' ) {
403
- unset( $emails[$id] );
 
 
404
  }
405
  }
406
  } else {
@@ -475,7 +473,7 @@ function edd_tools_import_export_display() {
475
  ?>
476
  </p>
477
 
478
- <table class="widefat edd_repeatable_table striped" width="100%" cellpadding="0" cellspacing="0">
479
  <thead>
480
  <tr>
481
  <th><strong><?php _e( 'Payment Field', 'easy-digital-downloads' ); ?></strong></th>
@@ -493,7 +491,7 @@ function edd_tools_import_export_display() {
493
  </td>
494
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
495
  </tr>
496
- <tr>
497
  <td><?php _e( 'Email', 'easy-digital-downloads' ); ?></td>
498
  <td>
499
  <select name="edd-import-field[email]" class="edd-import-csv-column">
@@ -511,7 +509,7 @@ function edd_tools_import_export_display() {
511
  </td>
512
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
513
  </tr>
514
- <tr>
515
  <td><?php _e( 'Last Name', 'easy-digital-downloads' ); ?></td>
516
  <td>
517
  <select name="edd-import-field[last_name]" class="edd-import-csv-column">
@@ -529,7 +527,7 @@ function edd_tools_import_export_display() {
529
  </td>
530
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
531
  </tr>
532
- <tr>
533
  <td><?php _e( 'Discount Code(s)', 'easy-digital-downloads' ); ?></td>
534
  <td>
535
  <select name="edd-import-field[discounts]" class="edd-import-csv-column">
@@ -547,7 +545,7 @@ function edd_tools_import_export_display() {
547
  </td>
548
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
549
  </tr>
550
- <tr>
551
  <td><?php _e( 'Mode (Live|Test)', 'easy-digital-downloads' ); ?></td>
552
  <td>
553
  <select name="edd-import-field[mode]" class="edd-import-csv-column">
@@ -565,7 +563,7 @@ function edd_tools_import_export_display() {
565
  </td>
566
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
567
  </tr>
568
- <tr>
569
  <td><?php _e( 'Payment Method', 'easy-digital-downloads' ); ?></td>
570
  <td>
571
  <select name="edd-import-field[gateway]" class="edd-import-csv-column">
@@ -583,7 +581,7 @@ function edd_tools_import_export_display() {
583
  </td>
584
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
585
  </tr>
586
- <tr>
587
  <td><?php _e( 'Date', 'easy-digital-downloads' ); ?></td>
588
  <td>
589
  <select name="edd-import-field[date]" class="edd-import-csv-column">
@@ -601,7 +599,7 @@ function edd_tools_import_export_display() {
601
  </td>
602
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
603
  </tr>
604
- <tr>
605
  <td><?php _e( 'Purchased Product(s)', 'easy-digital-downloads' ); ?></td>
606
  <td>
607
  <select name="edd-import-field[downloads]" class="edd-import-csv-column">
@@ -619,7 +617,7 @@ function edd_tools_import_export_display() {
619
  </td>
620
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
621
  </tr>
622
- <tr>
623
  <td><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?></td>
624
  <td>
625
  <select name="edd-import-field[subtotal]" class="edd-import-csv-column">
@@ -637,7 +635,7 @@ function edd_tools_import_export_display() {
637
  </td>
638
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
639
  </tr>
640
- <tr>
641
  <td><?php _e( 'Total', 'easy-digital-downloads' ); ?></td>
642
  <td>
643
  <select name="edd-import-field[total]" class="edd-import-csv-column">
@@ -655,7 +653,7 @@ function edd_tools_import_export_display() {
655
  </td>
656
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
657
  </tr>
658
- <tr>
659
  <td><?php _e( 'User', 'easy-digital-downloads' ); ?></td>
660
  <td>
661
  <select name="edd-import-field[user_id]" class="edd-import-csv-column">
@@ -673,7 +671,7 @@ function edd_tools_import_export_display() {
673
  </td>
674
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
675
  </tr>
676
- <tr>
677
  <td><?php _e( 'Address Line 2', 'easy-digital-downloads' ); ?></td>
678
  <td>
679
  <select name="edd-import-field[line2]" class="edd-import-csv-column">
@@ -682,7 +680,7 @@ function edd_tools_import_export_display() {
682
  </td>
683
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
684
  </tr>
685
- <tr>
686
  <td><?php _e( 'City', 'easy-digital-downloads' ); ?></td>
687
  <td>
688
  <select name="edd-import-field[city]" class="edd-import-csv-column">
@@ -700,7 +698,7 @@ function edd_tools_import_export_display() {
700
  </td>
701
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
702
  </tr>
703
- <tr>
704
  <td><?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?></td>
705
  <td>
706
  <select name="edd-import-field[zip]" class="edd-import-csv-column">
@@ -757,7 +755,7 @@ function edd_tools_import_export_display() {
757
  ?>
758
  </p>
759
 
760
- <table class="widefat edd_repeatable_table striped" width="100%" cellpadding="0" cellspacing="0">
761
  <thead>
762
  <tr>
763
  <th><strong><?php _e( 'Product Field', 'easy-digital-downloads' ); ?></strong></th>
@@ -775,7 +773,7 @@ function edd_tools_import_export_display() {
775
  </td>
776
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
777
  </tr>
778
- <tr>
779
  <td><?php _e( 'Product Categories', 'easy-digital-downloads' ); ?></td>
780
  <td>
781
  <select name="edd-import-field[categories]" class="edd-import-csv-column">
@@ -793,7 +791,7 @@ function edd_tools_import_export_display() {
793
  </td>
794
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
795
  </tr>
796
- <tr>
797
  <td><?php _e( 'Product Description', 'easy-digital-downloads' ); ?></td>
798
  <td>
799
  <select name="edd-import-field[post_content]" class="edd-import-csv-column">
@@ -811,7 +809,7 @@ function edd_tools_import_export_display() {
811
  </td>
812
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
813
  </tr>
814
- <tr>
815
  <td><?php _e( 'Product Image', 'easy-digital-downloads' ); ?></td>
816
  <td>
817
  <select name="edd-import-field[featured_image]" class="edd-import-csv-column">
@@ -829,7 +827,7 @@ function edd_tools_import_export_display() {
829
  </td>
830
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
831
  </tr>
832
- <tr>
833
  <td><?php _e( 'Product Price(s)', 'easy-digital-downloads' ); ?></td>
834
  <td>
835
  <select name="edd-import-field[price]" class="edd-import-csv-column">
@@ -847,7 +845,7 @@ function edd_tools_import_export_display() {
847
  </td>
848
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
849
  </tr>
850
- <tr>
851
  <td><?php _e( 'Product Slug', 'easy-digital-downloads' ); ?></td>
852
  <td>
853
  <select name="edd-import-field[post_name]" class="edd-import-csv-column">
@@ -865,7 +863,7 @@ function edd_tools_import_export_display() {
865
  </td>
866
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
867
  </tr>
868
- <tr>
869
  <td><?php _e( 'Product Tags', 'easy-digital-downloads' ); ?></td>
870
  <td>
871
  <select name="edd-import-field[tags]" class="edd-import-csv-column">
@@ -883,7 +881,7 @@ function edd_tools_import_export_display() {
883
  </td>
884
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
885
  </tr>
886
- <tr>
887
  <td><?php _e( 'Download Files', 'easy-digital-downloads' ); ?></td>
888
  <td>
889
  <select name="edd-import-field[files]" class="edd-import-csv-column">
@@ -901,7 +899,7 @@ function edd_tools_import_export_display() {
901
  </td>
902
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
903
  </tr>
904
- <tr>
905
  <td><?php _e( 'Sale Count', 'easy-digital-downloads' ); ?></td>
906
  <td>
907
  <select name="edd-import-field[sales]" class="edd-import-csv-column">
@@ -983,12 +981,8 @@ function edd_tools_import_export_process_export() {
983
  if( ! current_user_can( 'manage_shop_settings' ) )
984
  return;
985
 
986
- $edd_settings = get_option( 'edd_settings' );
987
- $edd_tax_rates = get_option( 'edd_tax_rates' );
988
- $settings = array(
989
- 'edd_settings' => $edd_settings,
990
- 'edd_tax_rates' => $edd_tax_rates,
991
- );
992
 
993
  ignore_user_abort( true );
994
 
@@ -1036,23 +1030,7 @@ function edd_tools_import_export_process_import() {
1036
  // Retrieve the settings from the file and convert the json object to an array
1037
  $settings = edd_object_to_array( json_decode( file_get_contents( $import_file ) ) );
1038
 
1039
- if ( ! isset( $settings['edd_settings'] ) ) {
1040
-
1041
- // Process a settings export from a pre 2.8 version of EDD
1042
- update_option( 'edd_settings', $settings );
1043
-
1044
- } else {
1045
-
1046
- // Update the settings from a 2.8+ export file
1047
- $edd_settings = $settings['edd_settings'];
1048
- update_option( 'edd_settings', $edd_settings );
1049
-
1050
- $edd_tax_rates = $settings['edd_tax_rates'];
1051
- update_option( 'edd_tax_rates', $edd_tax_rates );
1052
-
1053
- }
1054
-
1055
-
1056
 
1057
  wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-tools&edd-message=settings-imported' ) ); exit;
1058
 
@@ -1060,79 +1038,6 @@ function edd_tools_import_export_process_import() {
1060
  add_action( 'edd_import_settings', 'edd_tools_import_export_process_import' );
1061
 
1062
 
1063
- /**
1064
- * Display the debug log tab
1065
- *
1066
- * @since 2.8.7
1067
- * @return void
1068
- */
1069
- function edd_tools_debug_log_display() {
1070
-
1071
- global $edd_logs;
1072
-
1073
- if( ! current_user_can( 'manage_shop_settings' ) || ! edd_is_debug_mode() ) {
1074
- return;
1075
- }
1076
-
1077
- ?>
1078
- <div class="postbox">
1079
- <h3><span><?php esc_html_e( 'Debug Log', 'easy-digital-downloads' ); ?></span></h3>
1080
- <div class="inside">
1081
- <form id="edd-debug-log" method="post">
1082
- <p><?php _e( 'Use this tool to help debug Easy Digital Downloads functionality. Developers may use the <a href="https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/class-edd-logging.php">EDD_Logging class</a> to record debug data.', 'easy-digital-downloads' ); ?></p>
1083
- <textarea readonly="readonly" class="large-text" rows="15" name="edd-debug-log-contents"><?php echo esc_textarea( $edd_logs->get_file_contents() ); ?></textarea>
1084
- <p class="submit">
1085
- <input type="hidden" name="edd_action" value="submit_debug_log" />
1086
- <?php
1087
- submit_button( __( 'Download Debug Log File', 'easy-digital-downloads' ), 'primary', 'edd-download-debug-log', false );
1088
- submit_button( __( 'Clear Log', 'easy-digital-downloads' ), 'secondary edd-inline-button', 'edd-clear-debug-log', false );
1089
- submit_button( __( 'Copy Entire Log', 'easy-digital-downloads' ), 'secondary edd-inline-button', 'edd-copy-debug-log', false, array( 'onclick' => "this.form['edd-debug-log-contents'].focus();this.form['edd-debug-log-contents'].select();document.execCommand('copy');return false;" ) );
1090
- ?>
1091
- </p>
1092
- <?php wp_nonce_field( 'edd-debug-log-action' ); ?>
1093
- </form>
1094
- </div><!-- .inside -->
1095
- </div><!-- .postbox -->
1096
- <?php
1097
- }
1098
- add_action( 'edd_tools_tab_debug_log', 'edd_tools_debug_log_display' );
1099
-
1100
- /**
1101
- * Handles submit actions for the debug log.
1102
- *
1103
- * @since 2.8.7
1104
- */
1105
- function edd_handle_submit_debug_log() {
1106
-
1107
- global $edd_logs;
1108
-
1109
- if ( ! current_user_can( 'manage_shop_settings' ) ) {
1110
- return;
1111
- }
1112
-
1113
- check_admin_referer( 'edd-debug-log-action' );
1114
-
1115
- if ( isset( $_REQUEST['edd-download-debug-log'] ) ) {
1116
- nocache_headers();
1117
-
1118
- header( 'Content-Type: text/plain' );
1119
- header( 'Content-Disposition: attachment; filename="edd-debug-log.txt"' );
1120
-
1121
- echo wp_strip_all_tags( $_REQUEST['edd-debug-log-contents'] );
1122
- exit;
1123
-
1124
- } elseif ( isset( $_REQUEST['edd-clear-debug-log'] ) ) {
1125
-
1126
- // Clear the debug log.
1127
- $edd_logs->clear_log_file();
1128
-
1129
- wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=debug_log' ) );
1130
- exit;
1131
-
1132
- }
1133
- }
1134
- add_action( 'edd_submit_debug_log', 'edd_handle_submit_debug_log' );
1135
-
1136
  /**
1137
  * Display the system info tab
1138
  *
@@ -1210,12 +1115,10 @@ function edd_tools_sysinfo_get() {
1210
 
1211
  $return = apply_filters( 'edd_sysinfo_after_user_browser', $return );
1212
 
1213
- $locale = get_locale();
1214
-
1215
  // WordPress configuration
1216
  $return .= "\n" . '-- WordPress Configuration' . "\n\n";
1217
  $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
1218
- $return .= 'Language: ' . ( !empty( $locale ) ? $locale : 'en_US' ) . "\n";
1219
  $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
1220
  $return .= 'Active Theme: ' . $theme . "\n";
1221
  if ( $parent_theme !== $theme ) {
@@ -1276,7 +1179,6 @@ function edd_tools_sysinfo_get() {
1276
  $return .= 'Decimal Separator: ' . edd_get_option( 'decimal_separator', '.' ) . "\n";
1277
  $return .= 'Thousands Separator: ' . edd_get_option( 'thousands_separator', ',' ) . "\n";
1278
  $return .= 'Upgrades Completed: ' . implode( ',', edd_get_completed_upgrades() ) . "\n";
1279
- $return .= 'Download Link Expiration: ' . edd_get_option( 'download_link_expiration' ) . " hour(s)\n";
1280
 
1281
  $return = apply_filters( 'edd_sysinfo_after_edd_config', $return );
1282
 
27
  $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general';
28
  ?>
29
  <div class="wrap">
30
+ <?php screen_icon(); ?>
31
  <h2><?php _e( 'Easy Digital Downloads Tools', 'easy-digital-downloads' ); ?></h2>
32
  <h2 class="nav-tab-wrapper">
33
  <?php
74
  }
75
 
76
  $tabs['system_info'] = __( 'System Info', 'easy-digital-downloads' );
 
 
 
 
 
77
  $tabs['import_export'] = __( 'Import/Export', 'easy-digital-downloads' );
78
 
79
  return apply_filters( 'edd_tools_tabs', $tabs );
97
  <div class="postbox">
98
  <h3><span><?php _e( 'Banned Emails', 'easy-digital-downloads' ); ?></span></h3>
99
  <div class="inside">
100
+ <p><?php _e( 'Emails placed in the box below will not be allowed to make purchases. To ban an entire domain, enter the domain starting with "@".', 'easy-digital-downloads' ); ?></p>
101
  <form method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ); ?>">
102
  <p>
103
  <textarea name="banned_emails" rows="10" class="large-text"><?php echo implode( "\n", edd_get_banned_emails() ); ?></textarea>
104
+ <span class="description"><?php _e( 'Enter emails and/or domains (starting with @) to disallow, one per line.', 'easy-digital-downloads' ); ?></span>
105
  </p>
106
  <p>
107
  <input type="hidden" name="edd_action" value="save_banned_emails" />
395
  $emails = array_map( 'sanitize_text_field', $emails );
396
 
397
  foreach( $emails as $id => $email ) {
398
+ if( ! is_email( $email ) ) {
399
+ if( $email[0] != '@' ) {
400
+ unset( $emails[$id] );
401
+ }
402
  }
403
  }
404
  } else {
473
  ?>
474
  </p>
475
 
476
+ <table class="widefat edd_repeatable_table" width="100%" cellpadding="0" cellspacing="0">
477
  <thead>
478
  <tr>
479
  <th><strong><?php _e( 'Payment Field', 'easy-digital-downloads' ); ?></strong></th>
491
  </td>
492
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
493
  </tr>
494
+ <tr class="alternate">
495
  <td><?php _e( 'Email', 'easy-digital-downloads' ); ?></td>
496
  <td>
497
  <select name="edd-import-field[email]" class="edd-import-csv-column">
509
  </td>
510
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
511
  </tr>
512
+ <tr class="alternate">
513
  <td><?php _e( 'Last Name', 'easy-digital-downloads' ); ?></td>
514
  <td>
515
  <select name="edd-import-field[last_name]" class="edd-import-csv-column">
527
  </td>
528
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
529
  </tr>
530
+ <tr class="alternate">
531
  <td><?php _e( 'Discount Code(s)', 'easy-digital-downloads' ); ?></td>
532
  <td>
533
  <select name="edd-import-field[discounts]" class="edd-import-csv-column">
545
  </td>
546
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
547
  </tr>
548
+ <tr class="alternate">
549
  <td><?php _e( 'Mode (Live|Test)', 'easy-digital-downloads' ); ?></td>
550
  <td>
551
  <select name="edd-import-field[mode]" class="edd-import-csv-column">
563
  </td>
564
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
565
  </tr>
566
+ <tr class="alternate">
567
  <td><?php _e( 'Payment Method', 'easy-digital-downloads' ); ?></td>
568
  <td>
569
  <select name="edd-import-field[gateway]" class="edd-import-csv-column">
581
  </td>
582
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
583
  </tr>
584
+ <tr class="alternate">
585
  <td><?php _e( 'Date', 'easy-digital-downloads' ); ?></td>
586
  <td>
587
  <select name="edd-import-field[date]" class="edd-import-csv-column">
599
  </td>
600
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
601
  </tr>
602
+ <tr class="alternate">
603
  <td><?php _e( 'Purchased Product(s)', 'easy-digital-downloads' ); ?></td>
604
  <td>
605
  <select name="edd-import-field[downloads]" class="edd-import-csv-column">
617
  </td>
618
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
619
  </tr>
620
+ <tr class="alternate">
621
  <td><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?></td>
622
  <td>
623
  <select name="edd-import-field[subtotal]" class="edd-import-csv-column">
635
  </td>
636
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
637
  </tr>
638
+ <tr class="alternate">
639
  <td><?php _e( 'Total', 'easy-digital-downloads' ); ?></td>
640
  <td>
641
  <select name="edd-import-field[total]" class="edd-import-csv-column">
653
  </td>
654
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
655
  </tr>
656
+ <tr class="alternate">
657
  <td><?php _e( 'User', 'easy-digital-downloads' ); ?></td>
658
  <td>
659
  <select name="edd-import-field[user_id]" class="edd-import-csv-column">
671
  </td>
672
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
673
  </tr>
674
+ <tr class="alternate">
675
  <td><?php _e( 'Address Line 2', 'easy-digital-downloads' ); ?></td>
676
  <td>
677
  <select name="edd-import-field[line2]" class="edd-import-csv-column">
680
  </td>
681
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
682
  </tr>
683
+ <tr class="alternate">
684
  <td><?php _e( 'City', 'easy-digital-downloads' ); ?></td>
685
  <td>
686
  <select name="edd-import-field[city]" class="edd-import-csv-column">
698
  </td>
699
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
700
  </tr>
701
+ <tr class="alternate">
702
  <td><?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?></td>
703
  <td>
704
  <select name="edd-import-field[zip]" class="edd-import-csv-column">
755
  ?>
756
  </p>
757
 
758
+ <table class="widefat edd_repeatable_table" width="100%" cellpadding="0" cellspacing="0">
759
  <thead>
760
  <tr>
761
  <th><strong><?php _e( 'Product Field', 'easy-digital-downloads' ); ?></strong></th>
773
  </td>
774
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
775
  </tr>
776
+ <tr class="alternate">
777
  <td><?php _e( 'Product Categories', 'easy-digital-downloads' ); ?></td>
778
  <td>
779
  <select name="edd-import-field[categories]" class="edd-import-csv-column">
791
  </td>
792
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
793
  </tr>
794
+ <tr class="alternate">
795
  <td><?php _e( 'Product Description', 'easy-digital-downloads' ); ?></td>
796
  <td>
797
  <select name="edd-import-field[post_content]" class="edd-import-csv-column">
809
  </td>
810
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
811
  </tr>
812
+ <tr class="alternate">
813
  <td><?php _e( 'Product Image', 'easy-digital-downloads' ); ?></td>
814
  <td>
815
  <select name="edd-import-field[featured_image]" class="edd-import-csv-column">
827
  </td>
828
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
829
  </tr>
830
+ <tr class="alternate">
831
  <td><?php _e( 'Product Price(s)', 'easy-digital-downloads' ); ?></td>
832
  <td>
833
  <select name="edd-import-field[price]" class="edd-import-csv-column">
845
  </td>
846
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
847
  </tr>
848
+ <tr class="alternate">
849
  <td><?php _e( 'Product Slug', 'easy-digital-downloads' ); ?></td>
850
  <td>
851
  <select name="edd-import-field[post_name]" class="edd-import-csv-column">
863
  </td>
864
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
865
  </tr>
866
+ <tr class="alternate">
867
  <td><?php _e( 'Product Tags', 'easy-digital-downloads' ); ?></td>
868
  <td>
869
  <select name="edd-import-field[tags]" class="edd-import-csv-column">
881
  </td>
882
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
883
  </tr>
884
+ <tr class="alternate">
885
  <td><?php _e( 'Download Files', 'easy-digital-downloads' ); ?></td>
886
  <td>
887
  <select name="edd-import-field[files]" class="edd-import-csv-column">
899
  </td>
900
  <td class="edd-import-preview-field"><?php _e( '- select field to preview data -', 'easy-digital-downloads' ); ?></td>
901
  </tr>
902
+ <tr class="alternate">
903
  <td><?php _e( 'Sale Count', 'easy-digital-downloads' ); ?></td>
904
  <td>
905
  <select name="edd-import-field[sales]" class="edd-import-csv-column">
981
  if( ! current_user_can( 'manage_shop_settings' ) )
982
  return;
983
 
984
+ $settings = array();
985
+ $settings = get_option( 'edd_settings' );
 
 
 
 
986
 
987
  ignore_user_abort( true );
988
 
1030
  // Retrieve the settings from the file and convert the json object to an array
1031
  $settings = edd_object_to_array( json_decode( file_get_contents( $import_file ) ) );
1032
 
1033
+ update_option( 'edd_settings', $settings );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1034
 
1035
  wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-tools&edd-message=settings-imported' ) ); exit;
1036
 
1038
  add_action( 'edd_import_settings', 'edd_tools_import_export_process_import' );
1039
 
1040
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1041
  /**
1042
  * Display the system info tab
1043
  *
1115
 
1116
  $return = apply_filters( 'edd_sysinfo_after_user_browser', $return );
1117
 
 
 
1118
  // WordPress configuration
1119
  $return .= "\n" . '-- WordPress Configuration' . "\n\n";
1120
  $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
1121
+ $return .= 'Language: ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n";
1122
  $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
1123
  $return .= 'Active Theme: ' . $theme . "\n";
1124
  if ( $parent_theme !== $theme ) {
1179
  $return .= 'Decimal Separator: ' . edd_get_option( 'decimal_separator', '.' ) . "\n";
1180
  $return .= 'Thousands Separator: ' . edd_get_option( 'thousands_separator', ',' ) . "\n";
1181
  $return .= 'Upgrades Completed: ' . implode( ',', edd_get_completed_upgrades() ) . "\n";
 
1182
 
1183
  $return = apply_filters( 'edd_sysinfo_after_edd_config', $return );
1184
 
includes/admin/tools/class-edd-tools-recount-all-stats.php CHANGED
@@ -343,16 +343,7 @@ class EDD_Tools_Recount_All_Stats extends EDD_Batch_Export {
343
  global $wpdb;
344
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
345
 
346
- if ( empty( $value ) ) {
347
- return false;
348
- }
349
-
350
- $maybe_json = json_decode( $value );
351
- if ( ! is_null( $maybe_json ) ) {
352
- $value = json_decode( $value, true );
353
- }
354
-
355
- return $value;
356
  }
357
 
358
  /**
@@ -366,7 +357,7 @@ class EDD_Tools_Recount_All_Stats extends EDD_Batch_Export {
366
  private function store_data( $key, $value ) {
367
  global $wpdb;
368
 
369
- $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
370
 
371
  $data = array(
372
  'option_name' => $key,
343
  global $wpdb;
344
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
345
 
346
+ return empty( $value ) ? false : maybe_unserialize( $value );
 
 
 
 
 
 
 
 
 
347
  }
348
 
349
  /**
357
  private function store_data( $key, $value ) {
358
  global $wpdb;
359
 
360
+ $value = maybe_serialize( $value );
361
 
362
  $data = array(
363
  'option_name' => $key,
includes/admin/tools/class-edd-tools-recount-download-stats.php CHANGED
@@ -272,16 +272,7 @@ class EDD_Tools_Recount_Download_Stats extends EDD_Batch_Export {
272
  global $wpdb;
273
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
274
 
275
- if ( empty( $value ) ) {
276
- return false;
277
- }
278
-
279
- $maybe_json = json_decode( $value );
280
- if ( ! is_null( $maybe_json ) ) {
281
- $value = json_decode( $value, true );
282
- }
283
-
284
- return $value;
285
  }
286
 
287
  /**
@@ -295,7 +286,7 @@ class EDD_Tools_Recount_Download_Stats extends EDD_Batch_Export {
295
  private function store_data( $key, $value ) {
296
  global $wpdb;
297
 
298
- $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
299
 
300
  $data = array(
301
  'option_name' => $key,
272
  global $wpdb;
273
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
274
 
275
+ return empty( $value ) ? false : maybe_unserialize( $value );
 
 
 
 
 
 
 
 
 
276
  }
277
 
278
  /**
286
  private function store_data( $key, $value ) {
287
  global $wpdb;
288
 
289
+ $value = maybe_serialize( $value );
290
 
291
  $data = array(
292
  'option_name' => $key,
includes/admin/tools/class-edd-tools-recount-single-customer-stats.php CHANGED
@@ -111,7 +111,7 @@ class EDD_Tools_Recount_Single_Customer_Stats extends EDD_Batch_Export {
111
  */
112
  public function get_percentage_complete() {
113
 
114
- $payments = $this->get_stored_data( 'edd_recount_customer_payments_' . $this->customer_id, array() );
115
  $total = count( $payments );
116
 
117
  $percentage = 100;
@@ -156,10 +156,10 @@ class EDD_Tools_Recount_Single_Customer_Stats extends EDD_Batch_Export {
156
  return true;
157
  } else {
158
  $customer = new EDD_Customer( $this->customer_id );
159
- $payment_ids = $this->get_stored_data( 'edd_stats_found_payments_' . $customer->id, array() );
160
  $this->delete_data( 'edd_stats_found_payments_' . $customer->id );
161
 
162
- $removed_payments = array_unique( $this->get_stored_data( 'edd_stats_missing_payments' . $customer->id, array() ) );
163
 
164
  // Find non-existing payments (deleted) and total up the purchase count
165
  $purchase_count = 0;
@@ -266,20 +266,11 @@ class EDD_Tools_Recount_Single_Customer_Stats extends EDD_Batch_Export {
266
  * @param string $key The option_name
267
  * @return mixed Returns the data from the database
268
  */
269
- private function get_stored_data( $key, $default = false ) {
270
  global $wpdb;
271
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
272
 
273
- if ( empty( $value ) ) {
274
- return $default;
275
- }
276
-
277
- $maybe_json = json_decode( $value );
278
- if ( ! is_null( $maybe_json ) && ! is_numeric( $value ) ) {
279
- $value = $maybe_json;
280
- }
281
-
282
- return $value;
283
  }
284
 
285
  /**
@@ -293,7 +284,7 @@ class EDD_Tools_Recount_Single_Customer_Stats extends EDD_Batch_Export {
293
  private function store_data( $key, $value ) {
294
  global $wpdb;
295
 
296
- $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
297
 
298
  $data = array(
299
  'option_name' => $key,
111
  */
112
  public function get_percentage_complete() {
113
 
114
+ $payments = $this->get_stored_data( 'edd_recount_customer_payments_' . $this->customer_id );
115
  $total = count( $payments );
116
 
117
  $percentage = 100;
156
  return true;
157
  } else {
158
  $customer = new EDD_Customer( $this->customer_id );
159
+ $payment_ids = get_option( 'edd_stats_found_payments_' . $customer->id, array() );
160
  $this->delete_data( 'edd_stats_found_payments_' . $customer->id );
161
 
162
+ $removed_payments = array_unique( get_option( 'edd_stats_missing_payments' . $customer->id, array() ) );
163
 
164
  // Find non-existing payments (deleted) and total up the purchase count
165
  $purchase_count = 0;
266
  * @param string $key The option_name
267
  * @return mixed Returns the data from the database
268
  */
269
+ private function get_stored_data( $key ) {
270
  global $wpdb;
271
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
272
 
273
+ return empty( $value ) ? false : maybe_unserialize( $value );
 
 
 
 
 
 
 
 
 
274
  }
275
 
276
  /**
284
  private function store_data( $key, $value ) {
285
  global $wpdb;
286
 
287
+ $value = maybe_serialize( $value );
288
 
289
  $data = array(
290
  'option_name' => $key,
includes/admin/tools/class-edd-tools-recount-store-earnings.php CHANGED
@@ -207,16 +207,7 @@ class EDD_Tools_Recount_Store_Earnings extends EDD_Batch_Export {
207
  global $wpdb;
208
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
209
 
210
- if ( empty( $value ) ) {
211
- return false;
212
- }
213
-
214
- $maybe_json = json_decode( $value );
215
- if ( ! is_null( $maybe_json ) ) {
216
- $value = json_decode( $value, true );
217
- }
218
-
219
- return $value;
220
  }
221
 
222
  /**
@@ -230,7 +221,7 @@ class EDD_Tools_Recount_Store_Earnings extends EDD_Batch_Export {
230
  private function store_data( $key, $value ) {
231
  global $wpdb;
232
 
233
- $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
234
 
235
  $data = array(
236
  'option_name' => $key,
207
  global $wpdb;
208
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
209
 
210
+ return empty( $value ) ? false : maybe_unserialize( $value );
 
 
 
 
 
 
 
 
 
211
  }
212
 
213
  /**
221
  private function store_data( $key, $value ) {
222
  global $wpdb;
223
 
224
+ $value = maybe_serialize( $value );
225
 
226
  $data = array(
227
  'option_name' => $key,
includes/admin/tools/class-edd-tools-reset-stats.php CHANGED
@@ -283,16 +283,7 @@ class EDD_Tools_Reset_Stats extends EDD_Batch_Export {
283
  global $wpdb;
284
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
285
 
286
- if ( empty( $value ) ) {
287
- return false;
288
- }
289
-
290
- $maybe_json = json_decode( $value );
291
- if ( ! is_null( $maybe_json ) ) {
292
- $value = json_decode( $value, true );
293
- }
294
-
295
- return $value;
296
  }
297
 
298
  /**
@@ -306,7 +297,7 @@ class EDD_Tools_Reset_Stats extends EDD_Batch_Export {
306
  private function store_data( $key, $value ) {
307
  global $wpdb;
308
 
309
- $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
310
 
311
  $data = array(
312
  'option_name' => $key,
283
  global $wpdb;
284
  $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
285
 
286
+ return empty( $value ) ? false : maybe_unserialize( $value );
 
 
 
 
 
 
 
 
 
287
  }
288
 
289
  /**
297
  private function store_data( $key, $value ) {
298
  global $wpdb;
299
 
300
+ $value = maybe_serialize( $value );
301
 
302
  $data = array(
303
  'option_name' => $key,
includes/admin/tracking.php CHANGED
@@ -38,9 +38,9 @@ class EDD_Tracking {
38
 
39
  add_action( 'init', array( $this, 'schedule_send' ) );
40
  add_action( 'edd_settings_general_sanitize', array( $this, 'check_for_settings_optin' ) );
41
- add_action( 'edd_opt_into_tracking', array( $this, 'check_for_optin' ) );
42
  add_action( 'edd_opt_out_of_tracking', array( $this, 'check_for_optout' ) );
43
- add_action( 'admin_notices', array( $this, 'admin_notice' ) );
44
 
45
  }
46
 
@@ -178,6 +178,10 @@ class EDD_Tracking {
178
  */
179
  public function check_for_optin( $data ) {
180
 
 
 
 
 
181
  edd_update_option( 'allow_tracking', 1 );
182
 
183
  $this->send_checkin( true );
@@ -193,6 +197,10 @@ class EDD_Tracking {
193
  * @return void
194
  */
195
  public function check_for_optout( $data ) {
 
 
 
 
196
  edd_delete_option( 'allow_tracking' );
197
  update_option( 'edd_tracking_notice', '1' );
198
  wp_redirect( remove_query_arg( 'edd_action' ) ); exit;
@@ -211,12 +219,16 @@ class EDD_Tracking {
211
  /**
212
  * Schedule a weekly checkin
213
  *
 
 
 
214
  * @access public
215
  * @return void
216
  */
217
  public function schedule_send() {
218
- // We send once a week (while tracking is allowed) to check in, which can be used to determine active sites
219
- add_action( 'edd_weekly_scheduled_events', array( $this, 'send_checkin' ) );
 
220
  }
221
 
222
  /**
@@ -253,7 +265,7 @@ class EDD_Tracking {
253
  $source = substr( md5( get_bloginfo( 'name' ) ), 0, 10 );
254
  $extensions_url = 'https://easydigitaldownloads.com/downloads/?utm_source=' . $source . '&utm_medium=admin&utm_term=notice&utm_campaign=EDDUsageTracking';
255
  echo '<div class="updated"><p>';
256
- echo sprintf( __( 'Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and our newsletter and immediately be emailed a discount to the EDD shop, valid towards the <a href="%s" target="_blank">purchase of extensions</a>. No sensitive data is tracked.', 'easy-digital-downloads' ), $extensions_url );
257
  echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-secondary">' . __( 'Allow', 'easy-digital-downloads' ) . '</a>';
258
  echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary">' . __( 'Do not allow', 'easy-digital-downloads' ) . '</a>';
259
  echo '</p></div>';
38
 
39
  add_action( 'init', array( $this, 'schedule_send' ) );
40
  add_action( 'edd_settings_general_sanitize', array( $this, 'check_for_settings_optin' ) );
41
+ add_action( 'edd_opt_into_tracking', array( $this, 'check_for_optin' ) );
42
  add_action( 'edd_opt_out_of_tracking', array( $this, 'check_for_optout' ) );
43
+ add_action( 'admin_notices', array( $this, 'admin_notice' ) );
44
 
45
  }
46
 
178
  */
179
  public function check_for_optin( $data ) {
180
 
181
+ if ( ! current_user_can( 'manage_options' ) ) {
182
+ return;
183
+ }
184
+
185
  edd_update_option( 'allow_tracking', 1 );
186
 
187
  $this->send_checkin( true );
197
  * @return void
198
  */
199
  public function check_for_optout( $data ) {
200
+ if ( ! current_user_can( 'manage_options' ) ) {
201
+ return;
202
+ }
203
+
204
  edd_delete_option( 'allow_tracking' );
205
  update_option( 'edd_tracking_notice', '1' );
206
  wp_redirect( remove_query_arg( 'edd_action' ) ); exit;
219
  /**
220
  * Schedule a weekly checkin
221
  *
222
+ * We send once a week (while tracking is allowed) to check in, which can be
223
+ * used to determine active sites.
224
+ *
225
  * @access public
226
  * @return void
227
  */
228
  public function schedule_send() {
229
+ if ( edd_doing_cron() ) {
230
+ add_action( 'edd_weekly_scheduled_events', array( $this, 'send_checkin' ) );
231
+ }
232
  }
233
 
234
  /**
265
  $source = substr( md5( get_bloginfo( 'name' ) ), 0, 10 );
266
  $extensions_url = 'https://easydigitaldownloads.com/downloads/?utm_source=' . $source . '&utm_medium=admin&utm_term=notice&utm_campaign=EDDUsageTracking';
267
  echo '<div class="updated"><p>';
268
+ echo sprintf( __( 'Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and our newsletter and immediately be emailed a 20%s discount to the EDD shop, valid towards the <a href="%s" target="_blank">purchase of extensions</a>. No sensitive data is tracked.', 'easy-digital-downloads' ), '%', $extensions_url );
269
  echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-secondary">' . __( 'Allow', 'easy-digital-downloads' ) . '</a>';
270
  echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary">' . __( 'Do not allow', 'easy-digital-downloads' ) . '</a>';
271
  echo '</p></div>';
includes/ajax-functions.php CHANGED
@@ -388,25 +388,19 @@ function edd_load_checkout_register_fields() {
388
  add_action('wp_ajax_nopriv_checkout_register', 'edd_load_checkout_register_fields');
389
 
390
  /**
391
- * Get Download Title via AJAX
392
  *
393
  * @since 1.0
394
- * @since 2.8 Restrict to just the download post type
395
  * @return void
396
  */
397
  function edd_ajax_get_download_title() {
398
  if ( isset( $_POST['download_id'] ) ) {
399
- $post_id = absint( $_POST['download_id'] );
400
- $post_type = get_post_type( $post_id );
401
- $title = 'fail';
402
- if ( 'download' === $post_type ) {
403
- $post_title = get_the_title( $_POST['download_id'] );
404
- if ( $post_title ) {
405
- echo $title = $post_title;
406
- }
407
  }
408
-
409
- echo $title;
410
  }
411
  edd_die();
412
  }
@@ -522,22 +516,9 @@ function edd_ajax_download_search() {
522
  $where .= "AND `ID` NOT IN (" . $exclude . ") ";
523
  }
524
 
525
- if ( ! current_user_can( 'edit_products' ) ) {
526
- $status = apply_filters( 'edd_product_dropdown_status_nopriv', array( 'publish' ) );
527
- } else {
528
- $status = apply_filters( 'edd_product_dropdown_status', array( 'publish', 'draft', 'private', 'future' ) );
529
- }
530
-
531
- if ( is_array( $status ) && ! empty( $status ) ) {
532
-
533
- $status = array_map( 'sanitize_text_field', $status );
534
- $status_in = "'" . join( "', '", $status ) . "'";
535
- $where .= "AND `post_status` IN ({$status_in}) ";
536
-
537
- } else {
538
-
539
- $where .= "AND `post_status` = `publish` ";
540
-
541
  }
542
 
543
  // Limit the result sets
388
  add_action('wp_ajax_nopriv_checkout_register', 'edd_load_checkout_register_fields');
389
 
390
  /**
391
+ * Get Download Title via AJAX (used only in WordPress Admin)
392
  *
393
  * @since 1.0
 
394
  * @return void
395
  */
396
  function edd_ajax_get_download_title() {
397
  if ( isset( $_POST['download_id'] ) ) {
398
+ $title = get_the_title( $_POST['download_id'] );
399
+ if ( $title ) {
400
+ echo $title;
401
+ } else {
402
+ echo 'fail';
 
 
 
403
  }
 
 
404
  }
405
  edd_die();
406
  }
516
  $where .= "AND `ID` NOT IN (" . $exclude . ") ";
517
  }
518
 
519
+ // If the user can't edit products, limit to just published items
520
+ if( ! current_user_can( 'edit_products' ) ) {
521
+ $where .= "AND `post_status` = 'publish' ";
 
 
 
 
 
 
 
 
 
 
 
 
 
522
  }
523
 
524
  // Limit the result sets
includes/api/class-edd-api.php CHANGED
@@ -301,7 +301,7 @@ class EDD_API {
301
  * @uses EDD_API::invalid_key()
302
  * @uses EDD_API::invalid_auth()
303
  * @since 1.5
304
- * @return bool
305
  */
306
  private function validate_request() {
307
  global $wp_query;
@@ -313,7 +313,6 @@ class EDD_API {
313
 
314
  if ( empty( $wp_query->query_vars['token'] ) || empty( $wp_query->query_vars['key'] ) ) {
315
  $this->missing_auth();
316
- return false;
317
  }
318
 
319
  // Auth was provided, include the upgrade routine so we can use the fallback api checks
@@ -323,7 +322,6 @@ class EDD_API {
323
  if ( ! ( $user = $this->get_user( $wp_query->query_vars['key'] ) ) ) {
324
 
325
  $this->invalid_key();
326
- return false;
327
 
328
  } else {
329
 
@@ -331,14 +329,11 @@ class EDD_API {
331
  $secret = $this->get_user_secret_key( $user );
332
  $public = urldecode( $wp_query->query_vars['key'] );
333
 
334
- $valid = $this->check_keys( $secret, $public, $token );
335
- if ( $valid ) {
336
  $this->is_valid_request = true;
337
  } else {
338
  $this->invalid_auth();
339
- return false;
340
  }
341
-
342
  }
343
  } elseif ( ! empty( $wp_query->query_vars['edd-api'] ) && $this->is_public_query() ) {
344
  $this->is_valid_request = true;
@@ -1899,11 +1894,9 @@ class EDD_API {
1899
 
1900
  case 'xml' :
1901
 
1902
- require_once EDD_PLUGIN_DIR . 'includes/libraries/class-ArrayToXML.php';
1903
- $arraytoxml = new ArrayToXML();
1904
- $xml = $arraytoxml->buildXML( $this->data, 'edd' );
1905
-
1906
- echo $xml;
1907
 
1908
  break;
1909
 
@@ -2274,20 +2267,4 @@ class EDD_API {
2274
  return apply_filters( 'edd_api_log_requests', true );
2275
  }
2276
 
2277
- /**
2278
- * Check API keys vs token
2279
- *
2280
- * @access public
2281
- * @since 2.8.2
2282
- *
2283
- * @param string $secret Secret key
2284
- * @param string $public Public key
2285
- * @param string $token Token used in API request
2286
- *
2287
- * @return bool
2288
- */
2289
- public function check_keys( $secret, $public, $token ) {
2290
- return hash_equals( md5( $secret . $public ), $token );
2291
- }
2292
-
2293
- }
301
  * @uses EDD_API::invalid_key()
302
  * @uses EDD_API::invalid_auth()
303
  * @since 1.5
304
+ * @return void
305
  */
306
  private function validate_request() {
307
  global $wp_query;
313
 
314
  if ( empty( $wp_query->query_vars['token'] ) || empty( $wp_query->query_vars['key'] ) ) {
315
  $this->missing_auth();
 
316
  }
317
 
318
  // Auth was provided, include the upgrade routine so we can use the fallback api checks
322
  if ( ! ( $user = $this->get_user( $wp_query->query_vars['key'] ) ) ) {
323
 
324
  $this->invalid_key();
 
325
 
326
  } else {
327
 
329
  $secret = $this->get_user_secret_key( $user );
330
  $public = urldecode( $wp_query->query_vars['key'] );
331
 
332
+ if ( hash_equals( md5( $secret . $public ), $token ) ) {
 
333
  $this->is_valid_request = true;
334
  } else {
335
  $this->invalid_auth();
 
336
  }
 
337
  }
338
  } elseif ( ! empty( $wp_query->query_vars['edd-api'] ) && $this->is_public_query() ) {
339
  $this->is_valid_request = true;
1894
 
1895
  case 'xml' :
1896
 
1897
+ require_once EDD_PLUGIN_DIR . 'includes/libraries/array2xml.php';
1898
+ $xml = Array2XML::createXML( 'edd', $this->data );
1899
+ echo $xml->saveXML();
 
 
1900
 
1901
  break;
1902
 
2267
  return apply_filters( 'edd_api_log_requests', true );
2268
  }
2269
 
2270
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/cart/class-edd-cart.php CHANGED
@@ -137,7 +137,7 @@ class EDD_Cart {
137
  $this->get_contents_details();
138
  $this->get_all_fees();
139
  $this->get_discounts_from_session();
140
- $this->get_quantity();
141
  }
142
 
143
  /**
@@ -173,7 +173,7 @@ class EDD_Cart {
173
  *
174
  * @since 2.7
175
  * @access public
176
- * @return array List of cart contents.
177
  */
178
  public function get_contents() {
179
  if ( ! did_action( 'edd_cart_contents_loaded_from_session' ) ) {
@@ -228,7 +228,6 @@ class EDD_Cart {
228
  }
229
 
230
  $item['quantity'] = edd_item_quantities_enabled() ? absint( $item['quantity'] ) : 1;
231
- $item['quantity'] = max( 1, $item['quantity'] ); // Force quantity to 1
232
 
233
  $options = isset( $item['options'] ) ? $item['options'] : array();
234
 
@@ -239,24 +238,17 @@ class EDD_Cart {
239
  $discount = apply_filters( 'edd_get_cart_content_details_item_discount_amount', $discount, $item );
240
  $quantity = $this->get_item_quantity( $item['id'], $options );
241
  $fees = $this->get_fees( 'fee', $item['id'], $price_id );
242
- $subtotal = floatval( $item_price ) * $quantity;
243
 
244
- // Subtotal for tax calculation must exclude fees that are greater than 0. See $this->get_tax_on_fees()
245
  $subtotal_for_tax = $subtotal;
246
 
247
  foreach ( $fees as $fee ) {
248
-
249
  $fee_amount = (float) $fee['amount'];
250
  $subtotal += $fee_amount;
251
-
252
- if( $fee_amount > 0 ) {
253
- continue;
254
- }
255
-
256
- $subtotal_for_tax += $fee_amount;
257
  }
258
 
259
- $tax = $this->get_item_tax( $item['id'], $options, $subtotal_for_tax - $discount );
260
 
261
  if ( edd_prices_include_tax() ) {
262
  $subtotal -= round( $tax, edd_currency_decimal_filter() );
@@ -301,7 +293,7 @@ class EDD_Cart {
301
  */
302
  public function get_discounts() {
303
  $this->get_discounts_from_session();
304
- $this->discounts = ! empty( $this->discounts ) ? explode( '|', $this->discounts ) : array();
305
  return $this->discounts;
306
  }
307
 
@@ -330,8 +322,7 @@ class EDD_Cart {
330
 
331
  $has_discounts = false;
332
 
333
- $discounts = $this->get_discounts();
334
- if ( ! empty( $discounts ) ) {
335
  $has_discounts = true;
336
  }
337
 
@@ -665,7 +656,7 @@ class EDD_Cart {
665
 
666
  $discounts = false === $discount ? $this->get_discounts() : array( $discount );
667
 
668
- if ( ! empty( $discounts ) ) {
669
  foreach ( $discounts as $discount ) {
670
  $code_id = edd_get_discount_id_by_code( $discount );
671
 
@@ -846,7 +837,7 @@ class EDD_Cart {
846
  $quantity = 1;
847
  }
848
 
849
- return absint( apply_filters( 'edd_get_cart_item_quantity', $quantity, $download_id, $options ) );
850
  }
851
 
852
  /**
@@ -1286,11 +1277,6 @@ class EDD_Cart {
1286
  }
1287
  $cart_tax += $this->get_tax_on_fees();
1288
 
1289
- $subtotal = $this->get_subtotal();
1290
- if ( empty( $subtotal ) ) {
1291
- $cart_tax = 0;
1292
- }
1293
-
1294
  $cart_tax = apply_filters( 'edd_get_cart_tax', edd_sanitize_amount( $cart_tax ) );
1295
 
1296
  return $cart_tax;
137
  $this->get_contents_details();
138
  $this->get_all_fees();
139
  $this->get_discounts_from_session();
140
+ $this->quantity = $this->get_quantity();
141
  }
142
 
143
  /**
173
  *
174
  * @since 2.7
175
  * @access public
176
+ * @return void
177
  */
178
  public function get_contents() {
179
  if ( ! did_action( 'edd_cart_contents_loaded_from_session' ) ) {
228
  }
229
 
230
  $item['quantity'] = edd_item_quantities_enabled() ? absint( $item['quantity'] ) : 1;
 
231
 
232
  $options = isset( $item['options'] ) ? $item['options'] : array();
233
 
238
  $discount = apply_filters( 'edd_get_cart_content_details_item_discount_amount', $discount, $item );
239
  $quantity = $this->get_item_quantity( $item['id'], $options );
240
  $fees = $this->get_fees( 'fee', $item['id'], $price_id );
241
+ $subtotal = $item_price * $quantity;
242
 
243
+ // Subtotal for tax calculation must bwe exclusive of fees. See $this->get_tax_on_fees()
244
  $subtotal_for_tax = $subtotal;
245
 
246
  foreach ( $fees as $fee ) {
 
247
  $fee_amount = (float) $fee['amount'];
248
  $subtotal += $fee_amount;
 
 
 
 
 
 
249
  }
250
 
251
+ $tax = $this->get_item_tax( $item['id'], $options, $subtotal_for_tax - $discount );
252
 
253
  if ( edd_prices_include_tax() ) {
254
  $subtotal -= round( $tax, edd_currency_decimal_filter() );
293
  */
294
  public function get_discounts() {
295
  $this->get_discounts_from_session();
296
+ $this->discounts = ! empty( $this->discounts ) ? explode( '|', $this->discounts ) : false;
297
  return $this->discounts;
298
  }
299
 
322
 
323
  $has_discounts = false;
324
 
325
+ if ( $this->get_discounts() ) {
 
326
  $has_discounts = true;
327
  }
328
 
656
 
657
  $discounts = false === $discount ? $this->get_discounts() : array( $discount );
658
 
659
+ if ( $discounts ) {
660
  foreach ( $discounts as $discount ) {
661
  $code_id = edd_get_discount_id_by_code( $discount );
662
 
837
  $quantity = 1;
838
  }
839
 
840
+ return apply_filters( 'edd_get_cart_item_quantity', $quantity, $download_id, $options );
841
  }
842
 
843
  /**
1277
  }
1278
  $cart_tax += $this->get_tax_on_fees();
1279
 
 
 
 
 
 
1280
  $cart_tax = apply_filters( 'edd_get_cart_tax', edd_sanitize_amount( $cart_tax ) );
1281
 
1282
  return $cart_tax;
includes/cart/functions.php CHANGED
@@ -603,6 +603,8 @@ function edd_get_cart_token() {
603
  /**
604
  * Delete Saved Carts after one week
605
  *
 
 
606
  * @since 1.8
607
  * @global $wpdb
608
  * @return void
@@ -610,6 +612,11 @@ function edd_get_cart_token() {
610
  function edd_delete_saved_carts() {
611
  global $wpdb;
612
 
 
 
 
 
 
613
  $start = date( 'Y-m-d', strtotime( '-7 days' ) );
614
  $carts = $wpdb->get_results(
615
  "
603
  /**
604
  * Delete Saved Carts after one week
605
  *
606
+ * This function is only intended to be used by WordPress cron.
607
+ *
608
  * @since 1.8
609
  * @global $wpdb
610
  * @return void
612
  function edd_delete_saved_carts() {
613
  global $wpdb;
614
 
615
+ // Bail if not in WordPress cron
616
+ if ( ! edd_doing_cron() ) {
617
+ return;
618
+ }
619
+
620
  $start = date( 'Y-m-d', strtotime( '-7 days' ) );
621
  $carts = $wpdb->get_results(
622
  "
includes/checkout/functions.php CHANGED
@@ -259,51 +259,33 @@ function edd_get_banned_emails() {
259
  * Determines if an email is banned
260
  *
261
  * @since 2.0
262
- * @param string $email Email to check if is banned.
263
- * @return bool
264
  */
265
  function edd_is_email_banned( $email = '' ) {
266
 
267
- $email = trim( $email );
268
  if( empty( $email ) ) {
269
  return false;
270
  }
271
 
272
- $email = strtolower( $email );
273
  $banned_emails = edd_get_banned_emails();
274
 
275
  if( ! is_array( $banned_emails ) || empty( $banned_emails ) ) {
276
  return false;
277
  }
278
 
279
- $return = false;
280
  foreach( $banned_emails as $banned_email ) {
281
-
282
- $banned_email = strtolower( $banned_email );
283
-
284
  if( is_email( $banned_email ) ) {
285
-
286
- // Complete email address
287
- $return = ( $banned_email == $email ? true : false );
288
-
289
- } elseif ( strpos( $banned_email, '.' ) === 0 ) {
290
-
291
- // TLD block
292
- $return = ( substr( $email, ( strlen( $banned_email ) * -1 ) ) == $banned_email ) ? true : false;
293
-
294
  } else {
295
-
296
- // Domain block
297
- $return = ( stristr( $email, $banned_email ) ? true : false );
298
-
299
  }
300
 
301
- if( true === $return ) {
302
  break;
303
  }
304
  }
305
 
306
- return apply_filters( 'edd_is_email_banned', $return, $email );
307
  }
308
 
309
  /**
259
  * Determines if an email is banned
260
  *
261
  * @since 2.0
262
+ * @return bool
 
263
  */
264
  function edd_is_email_banned( $email = '' ) {
265
 
 
266
  if( empty( $email ) ) {
267
  return false;
268
  }
269
 
 
270
  $banned_emails = edd_get_banned_emails();
271
 
272
  if( ! is_array( $banned_emails ) || empty( $banned_emails ) ) {
273
  return false;
274
  }
275
 
 
276
  foreach( $banned_emails as $banned_email ) {
 
 
 
277
  if( is_email( $banned_email ) ) {
278
+ $ret = ( $banned_email == trim( $email ) ? true : false );
 
 
 
 
 
 
 
 
279
  } else {
280
+ $ret = ( stristr( trim( $email ), $banned_email ) ? true : false );
 
 
 
281
  }
282
 
283
+ if( true === $ret ) {
284
  break;
285
  }
286
  }
287
 
288
+ return apply_filters( 'edd_is_email_banned', $ret, $email );
289
  }
290
 
291
  /**
includes/checkout/template.php CHANGED
@@ -246,7 +246,7 @@ function edd_get_cc_form() {
246
  <span class="card-type"></span>
247
  </label>
248
  <span class="edd-description"><?php _e( 'The (typically) 16 digits on the front of your credit card.', 'easy-digital-downloads' ); ?></span>
249
- <input type="tel" pattern="^[0-9!@#$%^&* ]*$" autocomplete="off" name="card_number" id="card_number" class="card-number edd-input required" placeholder="<?php _e( 'Card number', 'easy-digital-downloads' ); ?>" />
250
  </p>
251
  <p id="edd-card-cvc-wrap">
252
  <label for="card_cvc" class="edd-label">
@@ -326,18 +326,6 @@ function edd_default_cc_address_fields() {
326
 
327
  }
328
 
329
- /**
330
- * Billing Address Details.
331
- *
332
- * Allows filtering the customer address details that will be pre-populated on the checkout form.
333
- *
334
- * @since 2.8
335
- *
336
- * @param array $address The customer address.
337
- * @param array $customer The customer data from the session
338
- */
339
- $customer['address'] = apply_filters( 'edd_checkout_billing_details_address', $customer['address'], $customer );
340
-
341
  ob_start(); ?>
342
  <fieldset id="edd_cc_address" class="cc-address">
343
  <legend><?php _e( 'Billing Details', 'easy-digital-downloads' ); ?></legend>
@@ -745,10 +733,8 @@ function edd_discount_field() {
745
  <?php _e( 'Discount', 'easy-digital-downloads' ); ?>
746
  </label>
747
  <span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
748
- <span class="edd-discount-code-field-wrap">
749
- <input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
750
- <input type="submit" class="edd-apply-discount edd-submit button <?php echo $color . ' ' . $style; ?>" value="<?php echo _x( 'Apply', 'Apply discount at checkout', 'easy-digital-downloads' ); ?>"/>
751
- </span>
752
  <span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
753
  <span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
754
  </p>
@@ -770,8 +756,6 @@ function edd_terms_agreement() {
770
  if ( edd_get_option( 'show_agree_to_terms', false ) ) {
771
  $agree_text = edd_get_option( 'agree_text', '' );
772
  $agree_label = edd_get_option( 'agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
773
-
774
- ob_start();
775
  ?>
776
  <fieldset id="edd_terms_agreement">
777
  <div id="edd_terms" style="display:none;">
@@ -791,9 +775,6 @@ function edd_terms_agreement() {
791
  </div>
792
  </fieldset>
793
  <?php
794
- $html_output = ob_get_clean();
795
-
796
- echo apply_filters( 'edd_checkout_terms_agreement_html', $html_output );
797
  }
798
  }
799
  add_action( 'edd_purchase_form_before_submit', 'edd_terms_agreement' );
@@ -887,12 +868,11 @@ function edd_checkout_button_purchase() {
887
  * @return string
888
  */
889
  function edd_get_checkout_button_purchase_label() {
 
890
 
891
  if ( edd_get_cart_total() ) {
892
- $label = edd_get_option( 'checkout_label', '' );
893
  $complete_purchase = ! empty( $label ) ? $label : __( 'Purchase', 'easy-digital-downloads' );
894
  } else {
895
- $label = edd_get_option( 'free_checkout_label', '' );
896
  $complete_purchase = ! empty( $label ) ? $label : __( 'Free Download', 'easy-digital-downloads' );
897
  }
898
 
@@ -970,34 +950,5 @@ add_filter( 'the_content', 'edd_filter_success_page_content', 99999 );
970
  * @return boolean
971
  */
972
  function edd_receipt_show_download_files( $item_id, $receipt_args, $item = array() ) {
973
-
974
- $ret = true;
975
-
976
- /*
977
- * If re-download is disabled, set return to false
978
- *
979
- * When the purchase session is still present AND the receipt being shown is for that purchase,
980
- * file download links are still shown. Once session expires, links are disabled
981
- */
982
- if ( edd_no_redownload() ) {
983
-
984
- $key = isset( $_GET['payment_key'] ) ? sanitize_text_field( $_GET['payment_key'] ) : '';
985
- $session = edd_get_purchase_session();
986
-
987
- if ( ! empty( $key ) && ! empty( $session ) && $key != $session['purchase_key'] ) {
988
-
989
- // We have session data but the payment key provided is not for this session
990
- $ret = false;
991
-
992
- } elseif ( empty( $session ) ) {
993
-
994
- // No session data is present but a key has been provided
995
- $ret = false;
996
-
997
- }
998
-
999
-
1000
- }
1001
-
1002
- return apply_filters( 'edd_receipt_show_download_files', $ret, $item_id, $receipt_args, $item );
1003
  }
246
  <span class="card-type"></span>
247
  </label>
248
  <span class="edd-description"><?php _e( 'The (typically) 16 digits on the front of your credit card.', 'easy-digital-downloads' ); ?></span>
249
+ <input type="tel" pattern="[0-9]{13,16}" autocomplete="off" name="card_number" id="card_number" class="card-number edd-input required" placeholder="<?php _e( 'Card number', 'easy-digital-downloads' ); ?>" />
250
  </p>
251
  <p id="edd-card-cvc-wrap">
252
  <label for="card_cvc" class="edd-label">
326
 
327
  }
328
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  ob_start(); ?>
330
  <fieldset id="edd_cc_address" class="cc-address">
331
  <legend><?php _e( 'Billing Details', 'easy-digital-downloads' ); ?></legend>
733
  <?php _e( 'Discount', 'easy-digital-downloads' ); ?>
734
  </label>
735
  <span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
736
+ <input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
737
+ <input type="submit" class="edd-apply-discount edd-submit button <?php echo $color . ' ' . $style; ?>" value="<?php echo _x( 'Apply', 'Apply discount at checkout', 'easy-digital-downloads' ); ?>"/>
 
 
738
  <span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
739
  <span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
740
  </p>
756
  if ( edd_get_option( 'show_agree_to_terms', false ) ) {
757
  $agree_text = edd_get_option( 'agree_text', '' );
758
  $agree_label = edd_get_option( 'agree_label', __( 'Agree to Terms?', 'easy-digital-downloads' ) );
 
 
759
  ?>
760
  <fieldset id="edd_terms_agreement">
761
  <div id="edd_terms" style="display:none;">
775
  </div>
776
  </fieldset>
777
  <?php
 
 
 
778
  }
779
  }
780
  add_action( 'edd_purchase_form_before_submit', 'edd_terms_agreement' );
868
  * @return string
869
  */
870
  function edd_get_checkout_button_purchase_label() {
871
+ $label = edd_get_option( 'checkout_label', '' );
872
 
873
  if ( edd_get_cart_total() ) {
 
874
  $complete_purchase = ! empty( $label ) ? $label : __( 'Purchase', 'easy-digital-downloads' );
875
  } else {
 
876
  $complete_purchase = ! empty( $label ) ? $label : __( 'Free Download', 'easy-digital-downloads' );
877
  }
878
 
950
  * @return boolean
951
  */
952
  function edd_receipt_show_download_files( $item_id, $receipt_args, $item = array() ) {
953
+ return apply_filters( 'edd_receipt_show_download_files', true, $item_id, $receipt_args, $item );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
954
  }
includes/class-edd-cli.php CHANGED
@@ -363,20 +363,12 @@ class EDD_CLI extends WP_CLI_Command {
363
  *
364
  * ## OPTIONS
365
  *
366
- * --email=<customer_email>: The email address of the customer to retrieve
367
- *
368
  * ## EXAMPLES
369
- *
370
  * wp edd sales
371
- * wp edd sales --email=john@test.com
372
  */
373
  public function sales( $args, $assoc_args ) {
374
-
375
- $email = isset( $assoc_args ) && array_key_exists( 'email', $assoc_args ) ? $assoc_args['email'] : '';
376
-
377
- global $wp_query;
378
-
379
- $wp_query->query_vars['email'] = $email;
380
 
381
  $sales = $this->api->get_recent_sales();
382
 
@@ -495,7 +487,7 @@ class EDD_CLI extends WP_CLI_Command {
495
  *
496
  * ## EXAMPLES
497
  *
498
- * wp edd payments create --number=10 --status=complete
499
  * wp edd payments create --number=10 --id=103
500
  */
501
  public function payments( $args, $assoc_args ) {
@@ -579,8 +571,6 @@ class EDD_CLI extends WP_CLI_Command {
579
  'discount' => 'none'
580
  );
581
 
582
- $progress = \WP_CLI\Utils\make_progress_bar( 'Creating Payments', $number );
583
-
584
  for( $i = 0; $i < $number; $i++ ) {
585
 
586
  $products = array();
@@ -593,7 +583,7 @@ class EDD_CLI extends WP_CLI_Command {
593
  'post_type' => 'download',
594
  'orderby' => 'rand',
595
  'order' => 'ASC',
596
- 'posts_per_page'=> rand( 1, 3 ),
597
  ) );
598
 
599
  } else {
@@ -627,13 +617,11 @@ class EDD_CLI extends WP_CLI_Command {
627
  $prices = edd_get_variable_prices( $download->ID );
628
 
629
  if( false === $price_id || ! array_key_exists( $price_id, (array) $prices ) ) {
630
- $item_price_id = array_rand( $prices );
631
- } else {
632
- $item_price_id = $price_id;
633
  }
634
 
635
- $item_price = $prices[ $item_price_id ]['amount'];
636
- $options['price_id'] = $item_price_id;
637
 
638
  } else {
639
 
@@ -713,12 +701,8 @@ class EDD_CLI extends WP_CLI_Command {
713
  $payment->save();
714
  }
715
 
716
- $progress->tick();
717
-
718
  }
719
 
720
- $progress->finish();
721
-
722
  WP_CLI::success( sprintf( __( 'Created %s payments', 'easy-digital-downloads' ), $number ) );
723
  return;
724
  }
363
  *
364
  * ## OPTIONS
365
  *
366
+ *
 
367
  * ## EXAMPLES
368
+ *
369
  * wp edd sales
 
370
  */
371
  public function sales( $args, $assoc_args ) {
 
 
 
 
 
 
372
 
373
  $sales = $this->api->get_recent_sales();
374
 
487
  *
488
  * ## EXAMPLES
489
  *
490
+ * wp edd payments create --number=10 --status=completed
491
  * wp edd payments create --number=10 --id=103
492
  */
493
  public function payments( $args, $assoc_args ) {
571
  'discount' => 'none'
572
  );
573
 
 
 
574
  for( $i = 0; $i < $number; $i++ ) {
575
 
576
  $products = array();
583
  'post_type' => 'download',
584
  'orderby' => 'rand',
585
  'order' => 'ASC',
586
+ 'posts_per_page'=> 1
587
  ) );
588
 
589
  } else {
617
  $prices = edd_get_variable_prices( $download->ID );
618
 
619
  if( false === $price_id || ! array_key_exists( $price_id, (array) $prices ) ) {
620
+ $price_id = rand( 0, count( $prices ) - 1 );
 
 
621
  }
622
 
623
+ $item_price = $prices[ $price_id ]['amount'];
624
+ $options['price_id'] = $price_id;
625
 
626
  } else {
627
 
701
  $payment->save();
702
  }
703
 
 
 
704
  }
705
 
 
 
706
  WP_CLI::success( sprintf( __( 'Created %s payments', 'easy-digital-downloads' ), $number ) );
707
  return;
708
  }
includes/class-edd-customer-query.php DELETED
@@ -1,750 +0,0 @@
1
- <?php
2
- /**
3
- * Customer query class
4
- *
5
- * This class should be used for querying customers.
6
- *
7
- * @package EDD
8
- * @subpackage Classes/Customer Query
9
- * @copyright Copyright (c) 2015, Pippin Williamson
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
- * @since 2.8
12
- */
13
-
14
- // Exit if accessed directly
15
- if ( ! defined( 'ABSPATH' ) ) exit;
16
-
17
- class EDD_Customer_Query {
18
-
19
- /**
20
- * SQL for database query.
21
- *
22
- * @access public
23
- * @since 2.8
24
- * @var string
25
- */
26
- public $request;
27
-
28
- /**
29
- * Date query container.
30
- *
31
- * @access public
32
- * @since 2.8
33
- * @var object WP_Date_Query
34
- */
35
- public $date_query = false;
36
-
37
- /**
38
- * Meta query container.
39
- *
40
- * @access public
41
- * @since 2.8
42
- * @var object WP_Meta_Query
43
- */
44
- public $meta_query = false;
45
-
46
- /**
47
- * Query vars set by the user.
48
- *
49
- * @access public
50
- * @since 2.8
51
- * @var array
52
- */
53
- public $query_vars;
54
-
55
- /**
56
- * Default values for query vars.
57
- *
58
- * @access public
59
- * @since 2.8
60
- * @var array
61
- */
62
- public $query_var_defaults;
63
-
64
- /**
65
- * List of customers located by the query.
66
- *
67
- * @access public
68
- * @since 2.8
69
- * @var array
70
- */
71
- public $items;
72
-
73
- /**
74
- * The amount of found customers for the current query.
75
- *
76
- * @access public
77
- * @since 2.8
78
- * @var int
79
- */
80
- public $found_items = 0;
81
-
82
- /**
83
- * The number of pages.
84
- *
85
- * @access public
86
- * @since 2.8
87
- * @var int
88
- */
89
- public $max_num_pages = 0;
90
-
91
- /**
92
- * SQL query clauses.
93
- *
94
- * @access protected
95
- * @since 2.8
96
- * @var array
97
- */
98
- protected $sql_clauses = array(
99
- 'select' => '',
100
- 'from' => '',
101
- 'where' => array(),
102
- 'groupby' => '',
103
- 'orderby' => '',
104
- 'limits' => '',
105
- );
106
-
107
- /**
108
- * Metadata query clauses.
109
- *
110
- * @access protected
111
- * @since 2.8
112
- * @var array
113
- */
114
- protected $meta_query_clauses = array();
115
-
116
- /**
117
- * EDD_DB_Customers instance.
118
- *
119
- * @access protected
120
- * @since 2.8
121
- * @var EDD_DB_Customers
122
- */
123
- protected $edd_db_customers;
124
-
125
- /**
126
- * The name of our database table.
127
- *
128
- * @access protected
129
- * @since 2.8
130
- * @var string
131
- */
132
- protected $table_name;
133
-
134
- /**
135
- * The meta type.
136
- *
137
- * @access protected
138
- * @since 2.8
139
- * @var string
140
- */
141
- protected $meta_type;
142
-
143
- /**
144
- * The name of the primary column.
145
- *
146
- * @access protected
147
- * @since 2.8
148
- * @var string
149
- */
150
- protected $primary_key;
151
-
152
- /**
153
- * The name of the date column.
154
- *
155
- * @access protected
156
- * @since 2.8
157
- * @var string
158
- */
159
- protected $date_key;
160
-
161
- /**
162
- * The name of the cache group.
163
- *
164
- * @access protected
165
- * @since 2.8
166
- * @var string
167
- */
168
- protected $cache_group;
169
-
170
- /**
171
- * Constructor.
172
- *
173
- * Sets up the customer query defaults and optionally runs a query.
174
- *
175
- * @access public
176
- * @since 2.8
177
- *
178
- * @param string|array $query {
179
- * Optional. Array or query string of customer query parameters. Default empty.
180
- *
181
- * @type int $number Maximum number of customers to retrieve. Default 20.
182
- * @type int $offset Number of customers to offset the query. Default 0.
183
- * @type string|array $orderby Customer status or array of statuses. To use 'meta_value'
184
- * or 'meta_value_num', `$meta_key` must also be provided.
185
- * To sort by a specific `$meta_query` clause, use that
186
- * clause's array key. Accepts 'id', 'user_id', 'name',
187
- * 'email', 'payment_ids', 'purchase_value', 'purchase_count',
188
- * 'notes', 'date_created', 'meta_value', 'meta_value_num',
189
- * the value of `$meta_key`, and the array keys of `$meta_query`.
190
- * Also accepts false, an empty array, or 'none' to disable the
191
- * `ORDER BY` clause. Default 'id'.
192
- * @type string $order How to order retrieved customers. Accepts 'ASC', 'DESC'.
193
- * Default 'DESC'.
194
- * @type string|array $include String or array of customer IDs to include. Default empty.
195
- * @type string|array $exclude String or array of customer IDs to exclude. Default empty.
196
- * @type string|array $users_include String or array of customer user IDs to include. Default
197
- * empty.
198
- * @type string|array $users_exclude String or array of customer user IDs to exclude. Default
199
- * empty.
200
- * @type string|array $email Limit results to those customers affiliated with one of
201
- * the given emails. Default empty.
202
- * @type string $search Search term(s) to retrieve matching customers for. Searches
203
- * through customer names. Default empty.
204
- * @type string|array $search_columns Columns to search using the value of `$search`. Default 'name'.
205
- * @type string $meta_key Include customers with a matching customer meta key.
206
- * Default empty.
207
- * @type string $meta_value Include customers with a matching customer meta value.
208
- * Requires `$meta_key` to be set. Default empty.
209
- * @type array $meta_query Meta query clauses to limit retrieved customers by.
210
- * See `WP_Meta_Query`. Default empty.
211
- * @type array $date_query Date query clauses to limit retrieved customers by.
212
- * See `WP_Date_Query`. Default empty.
213
- * @type bool $count Whether to return a count (true) instead of an array of
214
- * customer objects. Default false.
215
- * @type bool $no_found_rows Whether to disable the `SQL_CALC_FOUND_ROWS` query.
216
- * Default true.
217
- * }
218
- */
219
- public function __construct( $query = '', $edd_db_customers = null ) {
220
- if ( $edd_db_customers ) {
221
- $this->edd_db_customers = $edd_db_customers;
222
- } else {
223
- $this->edd_db_customers = EDD()->customers;
224
- }
225
-
226
- $this->table_name = $this->edd_db_customers->table_name;
227
- $this->meta_type = $this->edd_db_customers->meta_type;
228
- $this->primary_key = $this->edd_db_customers->primary_key;
229
- $this->date_key = $this->edd_db_customers->date_key;
230
- $this->cache_group = $this->edd_db_customers->cache_group;
231
-
232
- $this->query_var_defaults = array(
233
- 'number' => 20,
234
- 'offset' => 0,
235
- 'orderby' => 'id',
236
- 'order' => 'DESC',
237
- 'include' => '',
238
- 'exclude' => '',
239
- 'users_include' => '',
240
- 'users_exclude' => '',
241
- 'email' => '',
242
- 'search' => '',
243
- 'meta_key' => '',
244
- 'meta_value' => '',
245
- 'meta_query' => '',
246
- 'date_query' => null,
247
- 'count' => false,
248
- 'no_found_rows' => true,
249
- );
250
-
251
- if ( ! empty( $query ) ) {
252
- $this->query( $query );
253
- }
254
- }
255
-
256
- /**
257
- * Sets up the query for retrieving customers.
258
- *
259
- * @access public
260
- * @since 2.8
261
- *
262
- * @see EDD_Customer_Query::__construct()
263
- *
264
- * @param string|array $query Array or query string of parameters. See EDD_Customer_Query::__construct().
265
- * @return array|int List of customers, or number of customers when 'count' is passed as a query var.
266
- */
267
- public function query( $query ) {
268
- $this->query_vars = wp_parse_args( $query );
269
- $items = $this->get_items();
270
-
271
- return $items;
272
- }
273
-
274
- /**
275
- * Parses arguments passed to the customer query with default query parameters.
276
- *
277
- * @access protected
278
- * @since 2.8
279
- */
280
- protected function parse_query() {
281
- $this->query_vars = wp_parse_args( $this->query_vars, $this->query_var_defaults );
282
-
283
- if ( $this->query_vars['number'] < 1 ) {
284
- $this->query_vars['number'] = 999999999999;
285
- }
286
-
287
- $this->query_vars['offset'] = absint( $this->query_vars['offset'] );
288
-
289
- if ( ! empty( $this->query_vars['date_query'] ) && is_array( $this->query_vars['date_query'] ) ) {
290
- $this->date_query = new WP_Date_Query( $this->query_vars['date_query'], $this->table_name . '.' . $this->date_key );
291
- }
292
-
293
- $this->meta_query = new WP_Meta_Query();
294
- $this->meta_query->parse_query_vars( $this->query_vars );
295
-
296
- if ( ! empty( $this->meta_query->queries ) ) {
297
- $this->meta_query_clauses = $this->meta_query->get_sql( $this->meta_type, $this->table_name, $this->primary_key, $this );
298
- }
299
-
300
- /**
301
- * Fires after the customer query vars have been parsed.
302
- *
303
- * @since 2.8
304
- *
305
- * @param EDD_Customer_Query &$this The EDD_Customer_Query instance (passed by reference).
306
- */
307
- do_action_ref_array( 'edd_parse_customer_query', array( &$this ) );
308
- }
309
-
310
- /**
311
- * Retrieves a list of customers matching the query vars.
312
- *
313
- * Tries to use a cached value and otherwise uses `EDD_Customer_Query::query_items()`.
314
- *
315
- * @access protected
316
- * @since 2.8
317
- *
318
- * @return array|int List of customers, or number of customers when 'count' is passed as a query var.
319
- */
320
- protected function get_items() {
321
- $this->parse_query();
322
-
323
- /**
324
- * Fires before customers are retrieved.
325
- *
326
- * @since 2.8
327
- *
328
- * @param EDD_Customer_Query &$this Current instance of EDD_Customer_Query, passed by reference.
329
- */
330
- do_action_ref_array( 'edd_pre_get_customers', array( &$this ) );
331
-
332
- // $args can include anything. Only use the args defined in the query_var_defaults to compute the key.
333
- $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) );
334
-
335
- $last_changed = $this->edd_db_customers->get_last_changed();
336
-
337
- $cache_key = "query:$key:$last_changed";
338
- $cache_value = wp_cache_get( $cache_key, $this->cache_group );
339
-
340
- if ( false === $cache_value ) {
341
- $items = $this->query_items();
342
-
343
- if ( $items ) {
344
- $this->set_found_items();
345
- }
346
-
347
- $cache_value = array(
348
- 'items' => $items,
349
- 'found_items' => $this->found_items,
350
- );
351
- wp_cache_add( $cache_key, $cache_value, $this->cache_group );
352
- } else {
353
- $items = $cache_value['items'];
354
- $this->found_items = $cache_value['found_items'];
355
- }
356
-
357
- if ( $this->found_items && $this->query_vars['number'] ) {
358
- $this->max_num_pages = ceil( $this->found_items / $this->query_vars['number'] );
359
- }
360
-
361
- // If querying for a count only, there's nothing more to do.
362
- if ( $this->query_vars['count'] ) {
363
- // $items is actually a count in this case.
364
- return intval( $items[0]->count );
365
- }
366
-
367
- $this->items = $items;
368
-
369
- return $this->items;
370
- }
371
-
372
- /**
373
- * Runs a database query to retrieve customers.
374
- *
375
- * @access protected
376
- * @since 2.8
377
- *
378
- * @global wpdb $wpdb WordPress database abstraction object.
379
- *
380
- * @return @return array|int List of customers, or number of customers when 'count' is passed as a query var.
381
- */
382
- protected function query_items() {
383
- global $wpdb;
384
-
385
- $fields = $this->construct_request_fields();
386
- $join = $this->construct_request_join();
387
-
388
- $this->sql_clauses['where'] = $this->construct_request_where();
389
-
390
- $orderby = $this->construct_request_orderby();
391
- $limits = $this->construct_request_limits();
392
- $groupby = $this->construct_request_groupby();
393
-
394
- $found_rows = ! $this->query_vars['no_found_rows'] ? 'SQL_CALC_FOUND_ROWS' : '';
395
-
396
- $where = implode( ' AND ', $this->sql_clauses['where'] );
397
-
398
- if ( $where ) {
399
- $where = "WHERE $where";
400
- }
401
-
402
- if ( $orderby ) {
403
- $orderby = "ORDER BY $orderby";
404
- }
405
-
406
- if ( $groupby ) {
407
- $groupby = "GROUP BY $groupby";
408
- }
409
-
410
- $this->sql_clauses['select'] = "SELECT $found_rows $fields";
411
- $this->sql_clauses['from'] = "FROM $this->table_name $join";
412
- $this->sql_clauses['groupby'] = $groupby;
413
- $this->sql_clauses['orderby'] = $orderby;
414
- $this->sql_clauses['limits'] = $limits;
415
-
416
- $this->request = "{$this->sql_clauses['select']} {$this->sql_clauses['from']} {$where} {$this->sql_clauses['groupby']} {$this->sql_clauses['orderby']} {$this->sql_clauses['limits']}";
417
- $results = $wpdb->get_results( $this->request );
418
-
419
- return $results;
420
- }
421
-
422
- /**
423
- * Populates the found_items property for the current query if the limit clause was used.
424
- *
425
- * @access protected
426
- * @since 2.8
427
- *
428
- * @global wpdb $wpdb WordPress database abstraction object.
429
- */
430
- protected function set_found_items() {
431
- global $wpdb;
432
-
433
- if ( $this->query_vars['number'] && ! $this->query_vars['no_found_rows'] ) {
434
- /**
435
- * Filters the query used to retrieve the count of found customers.
436
- *
437
- * @since 2.8
438
- *
439
- * @param string $found_customers_query SQL query. Default 'SELECT FOUND_ROWS()'.
440
- * @param EDD_Customer_Query $customer_query The `EDD_Customer_Query` instance.
441
- */
442
- $found_items_query = apply_filters( 'edd_found_customers_query', 'SELECT FOUND_ROWS()', $this );
443
-
444
- $this->found_items = (int) $wpdb->get_var( $found_items_query );
445
- }
446
- }
447
-
448
- /**
449
- * Constructs the fields segment of the SQL request.
450
- *
451
- * @access protected
452
- * @since 2.8
453
- *
454
- * @return string SQL fields segment.
455
- */
456
- protected function construct_request_fields() {
457
- if ( $this->query_vars['count'] ) {
458
- return "COUNT($this->primary_key) AS count";
459
- }
460
-
461
- return "$this->table_name.*";
462
- }
463
-
464
- /**
465
- * Constructs the join segment of the SQL request.
466
- *
467
- * @access protected
468
- * @since 2.8
469
- *
470
- * @return string SQL join segment.
471
- */
472
- protected function construct_request_join() {
473
- $join = '';
474
-
475
- if ( ! empty( $this->meta_query_clauses['join'] ) ) {
476
- $join .= $this->meta_query_clauses['join'];
477
- }
478
-
479
- if ( ! empty( $this->query_vars['email'] ) && ! is_array( $this->query_vars['email'] ) ) {
480
- $meta_table = _get_meta_table( $this->meta_type );
481
-
482
- $join_type = false !== strpos( $join, 'INNER JOIN' ) ? 'INNER JOIN' : 'LEFT JOIN';
483
-
484
- $join .= " $join_type $meta_table AS email_mt ON $this->table_name.$this->primary_key = email_mt.{$this->meta_type}_id";
485
- }
486
-
487
- return $join;
488
- }
489
-
490
- /**
491
- * Constructs the where segment of the SQL request.
492
- *
493
- * @access protected
494
- * @since 2.8
495
- *
496
- * @return string SQL where segment.
497
- */
498
- protected function construct_request_where() {
499
- global $wpdb;
500
-
501
- $where = array();
502
-
503
- if ( ! empty( $this->query_vars['include'] ) ) {
504
- $include_ids = implode( ',', wp_parse_id_list( $this->query_vars['include'] ) );
505
- $where['include'] = "$this->primary_key IN ( $include_ids )";
506
- }
507
-
508
- if ( ! empty( $this->query_vars['exclude'] ) ) {
509
- $exclude_ids = implode( ',', wp_parse_id_list( $this->query_vars['exclude'] ) );
510
- $where['exclude'] = "$this->primary_key NOT IN ( $exclude_ids )";
511
- }
512
-
513
- if ( ! empty( $this->query_vars['users_include'] ) ) {
514
- $users_include_ids = implode( ',', wp_parse_id_list( $this->query_vars['users_include'] ) );
515
- $where['users_include'] = "user_id IN ( $users_include_ids )";
516
- }
517
-
518
- if ( ! empty( $this->query_vars['users_exclude'] ) ) {
519
- $users_exclude_ids = implode( ',', wp_parse_id_list( $this->query_vars['users_exclude'] ) );
520
- $where['users_exclude'] = "user_id NOT IN ( $users_exclude_ids )";
521
- }
522
-
523
- if ( ! empty( $this->query_vars['email'] ) ) {
524
- if ( is_array( $this->query_vars['email'] ) ) {
525
- $email_placeholders = implode( ', ', array_fill( 0, count( $this->query_vars['email'] ), '%s' ) );
526
-
527
- $where['email'] = $wpdb->prepare( "email IN( $email_placeholders )", $this->query_vars['email'] );
528
- } else {
529
- $where['email'] = $wpdb->prepare( "( ( email_mt.meta_key = 'additional_email' AND email_mt.meta_value = %s ) OR email = %s )", $this->query_vars['email'], $this->query_vars['email'] );
530
- }
531
- }
532
-
533
- if ( strlen( $this->query_vars['search'] ) ) {
534
- if ( ! empty( $this->query_vars['search_columns'] ) ) {
535
- $search_columns = array_map( 'sanitize_key', (array) $this->query_vars['search_columns'] );
536
- } else {
537
- $search_columns = array( 'name' );
538
- }
539
-
540
- $where['search'] = $this->get_search_sql( $this->query_vars['search'], $search_columns );
541
- }
542
-
543
- if ( $this->date_query ) {
544
- $where['date_query'] = preg_replace( '/^\s*AND\s*/', '', $this->date_query->get_sql() );
545
- }
546
-
547
- if ( ! empty( $this->meta_query_clauses['where'] ) ) {
548
- $where['meta_query'] = preg_replace( '/^\s*AND\s*/', '', $this->meta_query_clauses['where'] );
549
- }
550
-
551
- return $where;
552
- }
553
-
554
- /**
555
- * Constructs the orderby segment of the SQL request.
556
- *
557
- * @access protected
558
- * @since 2.8
559
- *
560
- * @return string SQL orderby segment.
561
- */
562
- protected function construct_request_orderby() {
563
- if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) {
564
- return '';
565
- }
566
-
567
- if ( empty( $this->query_vars['orderby'] ) ) {
568
- return $this->primary_key . ' ' . $this->parse_order_string( $this->query_vars['order'] );
569
- }
570
-
571
- if ( is_string( $this->query_vars['orderby'] ) ) {
572
- $ordersby = array( $this->query_vars['orderby'] => $this->query_vars['order'] );
573
- } else {
574
- $ordersby = $this->query_vars['orderby'];
575
- }
576
-
577
- $orderby_array = array();
578
-
579
- foreach ( $ordersby as $orderby => $order ) {
580
- $parsed_orderby = $this->parse_orderby_string( $orderby );
581
- if ( ! $parsed_orderby ) {
582
- continue;
583
- }
584
-
585
- $parsed_order = $this->parse_order_string( $order, $orderby );
586
-
587
- if ( $parsed_order ) {
588
- $orderby_array[] = $parsed_orderby . ' ' . $parsed_order;
589
- } else {
590
- $orderby_array[] = $parsed_orderby;
591
- }
592
- }
593
-
594
- return implode( ', ', $orderby_array );
595
- }
596
-
597
- /**
598
- * Constructs the limits segment of the SQL request.
599
- *
600
- * @access protected
601
- * @since 2.8
602
- *
603
- * @return string SQL limits segment.
604
- */
605
- protected function construct_request_limits() {
606
- if ( $this->query_vars['number'] ) {
607
- if ( $this->query_vars['offset'] ) {
608
- return "LIMIT {$this->query_vars['offset']},{$this->query_vars['number']}";
609
- }
610
-
611
- return "LIMIT {$this->query_vars['number']}";
612
- }
613
-
614
- return '';
615
- }
616
-
617
- /**
618
- * Constructs the groupby segment of the SQL request.
619
- *
620
- * @access protected
621
- * @since 2.8
622
- *
623
- * @return string SQL groupby segment.
624
- */
625
- protected function construct_request_groupby() {
626
- if ( ! empty( $this->meta_query_clauses['join'] ) || ( ! empty( $this->query_vars['email'] ) && ! is_array( $this->query_vars['email'] ) ) ) {
627
- return "$this->table_name.$this->primary_key";
628
- }
629
-
630
- return '';
631
- }
632
-
633
- /**
634
- * Used internally to generate an SQL string for searching across multiple columns.
635
- *
636
- * @access protected
637
- * @since 2.8
638
- *
639
- * @global wpdb $wpdb WordPress database abstraction object.
640
- *
641
- * @param string $string Search string.
642
- * @param array $columns Columns to search.
643
- * @return string Search SQL.
644
- */
645
- protected function get_search_sql( $string, $columns ) {
646
- global $wpdb;
647
-
648
- if ( false !== strpos( $string, '*' ) ) {
649
- $like = '%' . implode( '%', array_map( array( $wpdb, 'esc_like' ), explode( '*', $string ) ) ) . '%';
650
- } else {
651
- $like = '%' . $wpdb->esc_like( $string ) . '%';
652
- }
653
-
654
- $searches = array();
655
- foreach ( $columns as $column ) {
656
- $searches[] = $wpdb->prepare( "$column LIKE %s", $like );
657
- }
658
-
659
- return '(' . implode( ' OR ', $searches ) . ')';
660
- }
661
-
662
- /**
663
- * Parses a single orderby string.
664
- *
665
- * @access protected
666
- * @since 2.8
667
- *
668
- * @param string $orderby Orderby string.
669
- * @return string Parsed orderby string to use in the SQL request, or an empty string.
670
- */
671
- protected function parse_orderby_string( $orderby ) {
672
- if ( 'include' === $orderby ) {
673
- if ( empty( $this->query_vars['include'] ) ) {
674
- return '';
675
- }
676
-
677
- $ids = implode( ',', wp_parse_id_list( $this->query_vars['include'] ) );
678
-
679
- return "FIELD( $this->table_name.$this->primary_key, $ids )";
680
- }
681
-
682
- if ( ! empty( $this->meta_query_clauses['where'] ) ) {
683
- $meta_table = _get_meta_table( $this->meta_type );
684
-
685
- if ( $this->query_vars['meta_key'] === $orderby || 'meta_value' === $orderby ) {
686
- return "$meta_table.meta_value";
687
- }
688
-
689
- if ( 'meta_value_num' === $orderby ) {
690
- return "$meta_table.meta_value+0";
691
- }
692
-
693
- $meta_query_clauses = $this->meta_query->get_clauses();
694
-
695
- if ( isset( $meta_query_clauses[ $orderby ] ) ) {
696
- return sprintf( "CAST(%s.meta_value AS %s)", esc_sql( $meta_query_clauses[ $orderby ]['alias'] ), esc_sql( $meta_query_clauses[ $orderby ]['cast'] ) );
697
- }
698
- }
699
-
700
- $allowed_keys = $this->get_allowed_orderby_keys();
701
-
702
- if ( in_array( $orderby, $allowed_keys, true ) ) {
703
- /* This column needs special handling here. */
704
- if ( 'purchase_value' === $orderby ) {
705
- return "$this->table_name.purchase_value+0";
706
- }
707
-
708
- return "$this->table_name.$orderby";
709
- }
710
-
711
- return '';
712
- }
713
-
714
- /**
715
- * Parses a single order string.
716
- *
717
- * @access protected
718
- * @since 2.8
719
- *
720
- * @param string $orderby Order string.
721
- * @return string Parsed order string to use in the SQL request, or an empty string.
722
- */
723
- protected function parse_order_string( $order, $orderby ) {
724
- if ( 'include' === $orderby ) {
725
- return '';
726
- }
727
-
728
- if ( ! is_string( $order ) || empty( $order ) ) {
729
- return 'DESC';
730
- }
731
-
732
- if ( 'ASC' === strtoupper( $order ) ) {
733
- return 'ASC';
734
- } else {
735
- return 'DESC';
736
- }
737
- }
738
-
739
- /**
740
- * Returns the basic allowed keys to use for the orderby clause.
741
- *
742
- * @access protected
743
- * @since 2.8
744
- *
745
- * @return array Allowed keys.
746
- */
747
- protected function get_allowed_orderby_keys() {
748
- return array_keys( $this->edd_db_customers->get_columns() );
749
- }
750
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-edd-customer.php CHANGED
@@ -87,14 +87,7 @@ class EDD_Customer {
87
  *
88
  * @since 2.3
89
  */
90
- protected $notes;
91
-
92
- /**
93
- * The raw notes values, for internal use only
94
- *
95
- * @since 2.8
96
- */
97
- private $raw_notes = null;
98
 
99
  /**
100
  * The Database Abstraction
@@ -127,6 +120,7 @@ class EDD_Customer {
127
  $customer = $this->db->get_customer_by( $field, $_id_or_email );
128
 
129
  if ( empty( $customer ) || ! is_object( $customer ) ) {
 
130
  return false;
131
  }
132
 
@@ -152,17 +146,7 @@ class EDD_Customer {
152
  switch ( $key ) {
153
 
154
  case 'notes':
155
- if ( ! empty( $value ) ) {
156
- $this->$key = $value;
157
- }
158
- break;
159
-
160
- case 'purchase_value':
161
- $this->$key = floatval( $value );
162
- break;
163
-
164
- case 'purchase_count':
165
- $this->$key = absint( $value );
166
  break;
167
 
168
  default:
@@ -504,7 +488,7 @@ class EDD_Customer {
504
 
505
  }
506
 
507
- do_action( 'edd_customer_pre_attach_payment', $payment->ID, $this->id, $this );
508
 
509
  $payment_added = $this->update( array( 'payment_ids' => $new_payment_ids ) );
510
 
@@ -524,7 +508,7 @@ class EDD_Customer {
524
 
525
  }
526
 
527
- do_action( 'edd_customer_post_attach_payment', $payment_added, $payment->ID, $this->id, $this );
528
 
529
  return $payment_added;
530
  }
@@ -587,7 +571,7 @@ class EDD_Customer {
587
 
588
  }
589
 
590
- do_action( 'edd_customer_post_remove_payment', $payment_removed, $payment->ID, $this->id, $this );
591
 
592
  return $payment_removed;
593
 
@@ -609,13 +593,13 @@ class EDD_Customer {
609
 
610
  $new_total = (int) $this->purchase_count + (int) $count;
611
 
612
- do_action( 'edd_customer_pre_increase_purchase_count', $count, $this->id, $this );
613
 
614
  if ( $this->update( array( 'purchase_count' => $new_total ) ) ) {
615
  $this->purchase_count = $new_total;
616
  }
617
 
618
- do_action( 'edd_customer_post_increase_purchase_count', $this->purchase_count, $count, $this->id, $this );
619
 
620
  return $this->purchase_count;
621
  }
@@ -640,13 +624,13 @@ class EDD_Customer {
640
  $new_total = 0;
641
  }
642
 
643
- do_action( 'edd_customer_pre_decrease_purchase_count', $count, $this->id, $this );
644
 
645
  if ( $this->update( array( 'purchase_count' => $new_total ) ) ) {
646
  $this->purchase_count = $new_total;
647
  }
648
 
649
- do_action( 'edd_customer_post_decrease_purchase_count', $this->purchase_count, $count, $this->id, $this );
650
 
651
  return $this->purchase_count;
652
  }
@@ -659,7 +643,8 @@ class EDD_Customer {
659
  * @return mixed If successful, the new value, otherwise false
660
  */
661
  public function increase_value( $value = 0.00 ) {
662
- $value = floatval( apply_filters( 'edd_customer_increase_value', $value, $this ) );
 
663
  $new_value = floatval( $this->purchase_value ) + $value;
664
 
665
  do_action( 'edd_customer_pre_increase_value', $value, $this->id, $this );
@@ -761,16 +746,15 @@ class EDD_Customer {
761
  $new_note = apply_filters( 'edd_customer_add_note_string', $note_string );
762
  $notes .= "\n\n" . $new_note;
763
 
764
- do_action( 'edd_customer_pre_add_note', $new_note, $this->id, $this );
765
 
766
  $updated = $this->update( array( 'notes' => $notes ) );
767
 
768
  if ( $updated ) {
769
- $this->raw_notes = $notes;
770
- $this->notes = $this->get_notes();
771
  }
772
 
773
- do_action( 'edd_customer_post_add_note', $this->notes, $new_note, $this->id, $this );
774
 
775
  // Return the formatted note, so we can test, as well as update any displays
776
  return $new_note;
@@ -785,13 +769,9 @@ class EDD_Customer {
785
  */
786
  private function get_raw_notes() {
787
 
788
- if ( ! is_null( $this->raw_notes ) ) {
789
- return $this->raw_notes;
790
- }
791
-
792
- $this->raw_notes = $this->db->get_column( 'notes', $this->id );
793
 
794
- return (string) $this->raw_notes;
795
 
796
  }
797
 
87
  *
88
  * @since 2.3
89
  */
90
+ public $notes;
 
 
 
 
 
 
 
91
 
92
  /**
93
  * The Database Abstraction
120
  $customer = $this->db->get_customer_by( $field, $_id_or_email );
121
 
122
  if ( empty( $customer ) || ! is_object( $customer ) ) {
123
+
124
  return false;
125
  }
126
 
146
  switch ( $key ) {
147
 
148
  case 'notes':
149
+ $this->$key = $this->get_notes();
 
 
 
 
 
 
 
 
 
 
150
  break;
151
 
152
  default:
488
 
489
  }
490
 
491
+ do_action( 'edd_customer_pre_attach_payment', $payment->ID, $this->id );
492
 
493
  $payment_added = $this->update( array( 'payment_ids' => $new_payment_ids ) );
494
 
508
 
509
  }
510
 
511
+ do_action( 'edd_customer_post_attach_payment', $payment_added, $payment->ID, $this->id );
512
 
513
  return $payment_added;
514
  }
571
 
572
  }
573
 
574
+ do_action( 'edd_customer_post_remove_payment', $payment_removed, $payment->ID, $this->id );
575
 
576
  return $payment_removed;
577
 
593
 
594
  $new_total = (int) $this->purchase_count + (int) $count;
595
 
596
+ do_action( 'edd_customer_pre_increase_purchase_count', $count, $this->id );
597
 
598
  if ( $this->update( array( 'purchase_count' => $new_total ) ) ) {
599
  $this->purchase_count = $new_total;
600
  }
601
 
602
+ do_action( 'edd_customer_post_increase_purchase_count', $this->purchase_count, $count, $this->id );
603
 
604
  return $this->purchase_count;
605
  }
624
  $new_total = 0;
625
  }
626
 
627
+ do_action( 'edd_customer_pre_decrease_purchase_count', $count, $this->id );
628
 
629
  if ( $this->update( array( 'purchase_count' => $new_total ) ) ) {
630
  $this->purchase_count = $new_total;
631
  }
632
 
633
+ do_action( 'edd_customer_post_decrease_purchase_count', $this->purchase_count, $count, $this->id );
634
 
635
  return $this->purchase_count;
636
  }
643
  * @return mixed If successful, the new value, otherwise false
644
  */
645
  public function increase_value( $value = 0.00 ) {
646
+ $value = apply_filters( 'edd_customer_increase_value', $value, $this );
647
+
648
  $new_value = floatval( $this->purchase_value ) + $value;
649
 
650
  do_action( 'edd_customer_pre_increase_value', $value, $this->id, $this );
746
  $new_note = apply_filters( 'edd_customer_add_note_string', $note_string );
747
  $notes .= "\n\n" . $new_note;
748
 
749
+ do_action( 'edd_customer_pre_add_note', $new_note, $this->id );
750
 
751
  $updated = $this->update( array( 'notes' => $notes ) );
752
 
753
  if ( $updated ) {
754
+ $this->notes = $this->get_notes();
 
755
  }
756
 
757
+ do_action( 'edd_customer_post_add_note', $this->notes, $new_note, $this->id );
758
 
759
  // Return the formatted note, so we can test, as well as update any displays
760
  return $new_note;
769
  */
770
  private function get_raw_notes() {
771
 
772
+ $all_notes = $this->db->get_column( 'notes', $this->id );
 
 
 
 
773
 
774
+ return (string) $all_notes;
775
 
776
  }
777
 
includes/class-edd-db-customers.php CHANGED
@@ -21,33 +21,6 @@ if ( ! defined( 'ABSPATH' ) ) exit;
21
  */
22
  class EDD_DB_Customers extends EDD_DB {
23
 
24
- /**
25
- * The metadata type.
26
- *
27
- * @access public
28
- * @since 2.8
29
- * @var string
30
- */
31
- public $meta_type = 'customer';
32
-
33
- /**
34
- * The name of the date column.
35
- *
36
- * @access public
37
- * @since 2.8
38
- * @var string
39
- */
40
- public $date_key = 'date_created';
41
-
42
- /**
43
- * The name of the cache group.
44
- *
45
- * @access public
46
- * @since 2.8
47
- * @var string
48
- */
49
- public $cache_group = 'customers';
50
-
51
  /**
52
  * Get things started
53
  *
@@ -164,40 +137,6 @@ class EDD_DB_Customers extends EDD_DB {
164
 
165
  }
166
 
167
- /**
168
- * Insert a new customer
169
- *
170
- * @access public
171
- * @since 2.1
172
- * @return int
173
- */
174
- public function insert( $data, $type = '' ) {
175
- $result = parent::insert( $data, $type );
176
-
177
- if ( $result ) {
178
- $this->set_last_changed();
179
- }
180
-
181
- return $result;
182
- }
183
-
184
- /**
185
- * Update a customer
186
- *
187
- * @access public
188
- * @since 2.1
189
- * @return bool
190
- */
191
- public function update( $row_id, $data = array(), $where = '' ) {
192
- $result = parent::update( $row_id, $data, $where );
193
-
194
- if ( $result ) {
195
- $this->set_last_changed();
196
- }
197
-
198
- return $result;
199
- }
200
-
201
  /**
202
  * Delete a customer
203
  *
@@ -219,14 +158,7 @@ class EDD_DB_Customers extends EDD_DB {
219
  if ( $customer->id > 0 ) {
220
 
221
  global $wpdb;
222
-
223
- $result = $wpdb->delete( $this->table_name, array( 'id' => $customer->id ), array( '%d' ) );
224
-
225
- if ( $result ) {
226
- $this->set_last_changed();
227
- }
228
-
229
- return $result;
230
 
231
  } else {
232
  return false;
@@ -387,6 +319,8 @@ class EDD_DB_Customers extends EDD_DB {
387
  * @return mixed Upon success, an object of the customer. Upon failure, NULL
388
  */
389
  public function get_customer_by( $field = 'id', $value = 0 ) {
 
 
390
  if ( empty( $field ) || empty( $value ) ) {
391
  return NULL;
392
  }
@@ -417,32 +351,40 @@ class EDD_DB_Customers extends EDD_DB {
417
  return false;
418
  }
419
 
420
- $args = array( 'number' => 1 );
421
-
422
  switch ( $field ) {
423
  case 'id':
424
  $db_field = 'id';
425
- $args['include'] = array( $value );
426
  break;
427
  case 'email':
428
- $args['email'] = sanitize_text_field( $value );
 
429
  break;
430
  case 'user_id':
431
- $args['users_include'] = array( $value );
432
  break;
433
  default:
434
  return false;
435
  }
436
 
437
- $query = new EDD_Customer_Query( '', $this );
 
 
 
 
 
 
 
 
 
 
 
 
438
 
439
- $results = $query->query( $args );
440
 
441
- if ( empty( $results ) ) {
442
  return false;
443
  }
444
 
445
- return array_shift( $results );
446
  }
447
 
448
  /**
@@ -452,12 +394,129 @@ class EDD_DB_Customers extends EDD_DB {
452
  * @since 2.1
453
  */
454
  public function get_customers( $args = array() ) {
455
- $args = $this->prepare_customer_query_args( $args );
456
- $args['count'] = false;
457
 
458
- $query = new EDD_Customer_Query( '', $this );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
 
460
- return $query->query( $args );
461
  }
462
 
463
 
@@ -468,107 +527,104 @@ class EDD_DB_Customers extends EDD_DB {
468
  * @since 2.1
469
  */
470
  public function count( $args = array() ) {
471
- $args = $this->prepare_customer_query_args( $args );
472
- $args['count'] = true;
473
- $args['offset'] = 0;
474
 
475
- $query = new EDD_Customer_Query( '', $this );
476
- $results = $query->query( $args );
477
 
478
- return $results;
479
- }
480
 
481
- /**
482
- * Prepare query arguments for `EDD_Customer_Query`.
483
- *
484
- * This method ensures that old arguments transition seamlessly to the new system.
485
- *
486
- * @access protected
487
- * @since 2.8
488
- *
489
- * @param array $args Arguments for `EDD_Customer_Query`.
490
- * @return array Prepared arguments.
491
- */
492
- protected function prepare_customer_query_args( $args ) {
493
- if ( ! empty( $args['id'] ) ) {
494
- $args['include'] = $args['id'];
495
- unset( $args['id'] );
496
- }
497
 
498
- if ( ! empty( $args['user_id'] ) ) {
499
- $args['users_include'] = $args['user_id'];
500
- unset( $args['user_id'] );
501
- }
 
 
 
502
 
503
- if ( ! empty( $args['name'] ) ) {
504
- $args['search'] = '***' . $args['name'] . '***';
505
- unset( $args['name'] );
506
  }
507
 
508
- if ( ! empty( $args['date'] ) ) {
509
- $date_query = array( 'relation' => 'AND' );
510
-
511
- if ( is_array( $args['date'] ) ) {
512
- $date_query[] = array(
513
- 'after' => date( 'Y-m-d 00:00:00', strtotime( $args['date']['start'] ) ),
514
- 'inclusive' => true,
515
- );
516
- $date_query[] = array(
517
- 'before' => date( 'Y-m-d 23:59:59', strtotime( $args['date']['end'] ) ),
518
- 'inclusive' => true,
519
- );
520
  } else {
521
- $date_query[] = array(
522
- 'year' => date( 'Y', strtotime( $args['date'] ) ),
523
- 'month' => date( 'm', strtotime( $args['date'] ) ),
524
- 'day' => date( 'd', strtotime( $args['date'] ) ),
525
- );
526
  }
527
 
528
- if ( empty( $args['date_query'] ) ) {
529
- $args['date_query'] = $date_query;
 
 
 
 
 
 
 
 
 
 
 
 
530
  } else {
531
- $args['date_query'] = array(
532
- 'relation' => 'AND',
533
- $date_query,
534
- $args['date_query'],
535
- );
536
  }
 
537
 
538
- unset( $args['date'] );
 
 
539
  }
540
 
541
- return $args;
542
- }
543
 
544
- /**
545
- * Sets the last_changed cache key for customers.
546
- *
547
- * @access public
548
- * @since 2.8
549
- */
550
- public function set_last_changed() {
551
- wp_cache_set( 'last_changed', microtime(), $this->cache_group );
552
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
553
 
554
- /**
555
- * Retrieves the value of the last_changed cache key for customers.
556
- *
557
- * @access public
558
- * @since 2.8
559
- */
560
- public function get_last_changed() {
561
- if ( function_exists( 'wp_cache_get_last_changed' ) ) {
562
- return wp_cache_get_last_changed( $this->cache_group );
563
  }
564
 
565
- $last_changed = wp_cache_get( 'last_changed', $this->cache_group );
566
- if ( ! $last_changed ) {
567
- $last_changed = microtime();
568
- wp_cache_set( 'last_changed', $last_changed, $this->cache_group );
 
 
 
 
569
  }
570
 
571
- return $last_changed;
 
572
  }
573
 
574
  /**
21
  */
22
  class EDD_DB_Customers extends EDD_DB {
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  /**
25
  * Get things started
26
  *
137
 
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  /**
141
  * Delete a customer
142
  *
158
  if ( $customer->id > 0 ) {
159
 
160
  global $wpdb;
161
+ return $wpdb->delete( $this->table_name, array( 'id' => $customer->id ), array( '%d' ) );
 
 
 
 
 
 
 
162
 
163
  } else {
164
  return false;
319
  * @return mixed Upon success, an object of the customer. Upon failure, NULL
320
  */
321
  public function get_customer_by( $field = 'id', $value = 0 ) {
322
+ global $wpdb;
323
+
324
  if ( empty( $field ) || empty( $value ) ) {
325
  return NULL;
326
  }
351
  return false;
352
  }
353
 
 
 
354
  switch ( $field ) {
355
  case 'id':
356
  $db_field = 'id';
 
357
  break;
358
  case 'email':
359
+ $value = sanitize_text_field( $value );
360
+ $db_field = 'email';
361
  break;
362
  case 'user_id':
363
+ $db_field = 'user_id';
364
  break;
365
  default:
366
  return false;
367
  }
368
 
369
+ if ( ! $customer = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->table_name WHERE $db_field = %s LIMIT 1", $value ) ) ) {
370
+
371
+ // Look for customer from an additional email
372
+ if( 'email' === $field ) {
373
+
374
+ $meta_table = EDD()->customer_meta->table_name;
375
+ $customer_id = $wpdb->get_var( $wpdb->prepare( "SELECT customer_id FROM $meta_table WHERE meta_key = 'additional_email' AND meta_value = '%s' LIMIT 1", $value ) );
376
+
377
+ if( ! empty( $customer_id ) ) {
378
+ return $this->get( $customer_id );
379
+ }
380
+
381
+ }
382
 
 
383
 
 
384
  return false;
385
  }
386
 
387
+ return $customer;
388
  }
389
 
390
  /**
394
  * @since 2.1
395
  */
396
  public function get_customers( $args = array() ) {
 
 
397
 
398
+ global $wpdb;
399
+
400
+ $defaults = array(
401
+ 'number' => 20,
402
+ 'offset' => 0,
403
+ 'user_id' => 0,
404
+ 'orderby' => 'id',
405
+ 'order' => 'DESC',
406
+ );
407
+
408
+ $args = wp_parse_args( $args, $defaults );
409
+
410
+ if( $args['number'] < 1 ) {
411
+ $args['number'] = 999999999999;
412
+ }
413
+
414
+ $join = '';
415
+ $where = ' WHERE 1=1 ';
416
+
417
+ // specific customers
418
+ if( ! empty( $args['id'] ) ) {
419
+
420
+ if( is_array( $args['id'] ) ) {
421
+ $ids = implode( ',', array_map('intval', $args['id'] ) );
422
+ } else {
423
+ $ids = intval( $args['id'] );
424
+ }
425
+
426
+ $where .= " AND `id` IN( {$ids} ) ";
427
+
428
+ }
429
+
430
+ // customers for specific user accounts
431
+ if( ! empty( $args['user_id'] ) ) {
432
+
433
+ if( is_array( $args['user_id'] ) ) {
434
+ $user_ids = implode( ',', array_map('intval', $args['user_id'] ) );
435
+ } else {
436
+ $user_ids = intval( $args['user_id'] );
437
+ }
438
+
439
+ $where .= " AND `user_id` IN( {$user_ids} ) ";
440
+
441
+ }
442
+
443
+ //specific customers by email
444
+ if( ! empty( $args['email'] ) ) {
445
+
446
+ if( is_array( $args['email'] ) ) {
447
+
448
+ $emails_count = count( $args['email'] );
449
+ $emails_placeholder = array_fill( 0, $emails_count, '%s' );
450
+ $emails = implode( ', ', $emails_placeholder );
451
+
452
+ $where .= $wpdb->prepare( " AND `email` IN( $emails ) ", $args['email'] );
453
+ } else {
454
+ $meta_table = $wpdb->prefix . 'edd_customermeta';
455
+ $customers_table = $this->table_name;
456
+
457
+ $join .= " LEFT JOIN $meta_table ON $customers_table.id = $meta_table.customer_id";
458
+ $where .= $wpdb->prepare( " AND ( ( `meta_key` = 'additional_email' AND `meta_value` = %s ) OR `email` = %s )", $args['email'], $args['email'] );
459
+ }
460
+ }
461
+
462
+ // specific customers by name
463
+ if( ! empty( $args['name'] ) ) {
464
+ $where .= $wpdb->prepare( " AND `name` LIKE '%%%%" . '%s' . "%%%%' ", $args['name'] );
465
+ }
466
+
467
+ // Customers created for a specific date or in a date range
468
+ if( ! empty( $args['date'] ) ) {
469
+
470
+ if( is_array( $args['date'] ) ) {
471
+
472
+ if( ! empty( $args['date']['start'] ) ) {
473
+
474
+ $start = date( 'Y-m-d 00:00:00', strtotime( $args['date']['start'] ) );
475
+ $where .= " AND `date_created` >= '{$start}'";
476
+
477
+ }
478
+
479
+ if( ! empty( $args['date']['end'] ) ) {
480
+
481
+ $end = date( 'Y-m-d 23:59:59', strtotime( $args['date']['end'] ) );
482
+ $where .= " AND `date_created` <= '{$end}'";
483
+
484
+ }
485
+
486
+ } else {
487
+
488
+ $year = date( 'Y', strtotime( $args['date'] ) );
489
+ $month = date( 'm', strtotime( $args['date'] ) );
490
+ $day = date( 'd', strtotime( $args['date'] ) );
491
+
492
+ $where .= " AND $year = YEAR ( date_created ) AND $month = MONTH ( date_created ) AND $day = DAY ( date_created )";
493
+ }
494
+
495
+ }
496
+
497
+ $args['orderby'] = ! array_key_exists( $args['orderby'], $this->get_columns() ) ? 'id' : $args['orderby'];
498
+
499
+ if( 'purchase_value' == $args['orderby'] ) {
500
+ $args['orderby'] = 'purchase_value+0';
501
+ }
502
+
503
+ $cache_key = md5( 'edd_customers_' . serialize( $args ) );
504
+
505
+ $customers = wp_cache_get( $cache_key, 'customers' );
506
+
507
+ $args['orderby'] = esc_sql( $args['orderby'] );
508
+ $args['order'] = esc_sql( $args['order'] );
509
+
510
+ $customers = false;
511
+
512
+ if( $customers === false ) {
513
+ $query = $wpdb->prepare( "SELECT * FROM $this->table_name $join $where GROUP BY $this->primary_key ORDER BY {$args['orderby']} {$args['order']} LIMIT %d,%d;", absint( $args['offset'] ), absint( $args['number'] ) );
514
+ $customers = $wpdb->get_results( $query );
515
+ wp_cache_set( $cache_key, $customers, 'customers', 3600 );
516
+ }
517
+
518
+ return $customers;
519
 
 
520
  }
521
 
522
 
527
  * @since 2.1
528
  */
529
  public function count( $args = array() ) {
 
 
 
530
 
531
+ global $wpdb;
 
532
 
533
+ $join = '';
534
+ $where = ' WHERE 1=1 ';
535
 
536
+ // specific customers
537
+ if( ! empty( $args['id'] ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
 
539
+ if( is_array( $args['id'] ) ) {
540
+ $ids = implode( ',', array_map('intval', $args['id'] ) );
541
+ } else {
542
+ $ids = intval( $args['id'] );
543
+ }
544
+
545
+ $where .= " AND `id` IN( {$ids} ) ";
546
 
 
 
 
547
  }
548
 
549
+ // customers for specific user accounts
550
+ if( ! empty( $args['user_id'] ) ) {
551
+
552
+ if( is_array( $args['user_id'] ) ) {
553
+ $user_ids = implode( ',', array_map('intval', $args['user_id'] ) );
 
 
 
 
 
 
 
554
  } else {
555
+ $user_ids = intval( $args['user_id'] );
 
 
 
 
556
  }
557
 
558
+ $where .= " AND `user_id` IN( {$user_ids} ) ";
559
+
560
+ }
561
+
562
+ //specific customers by email
563
+ if( ! empty( $args['email'] ) ) {
564
+
565
+ if( is_array( $args['email'] ) ) {
566
+
567
+ $emails_count = count( $args['email'] );
568
+ $emails_placeholder = array_fill( 0, $emails_count, '%s' );
569
+ $emails = implode( ', ', $emails_placeholder );
570
+
571
+ $where .= $wpdb->prepare( " AND `email` IN( $emails ) ", $args['email'] );
572
  } else {
573
+ $meta_table = $wpdb->prefix . 'edd_customermeta';
574
+ $customers_table = $this->table_name;
575
+
576
+ $join .= " LEFT JOIN $meta_table ON $customers_table.id = $meta_table.customer_id";
577
+ $where .= $wpdb->prepare( " AND ( ( `meta_key` = 'additional_email' AND `meta_value` = %s ) OR `email` = %s )", $args['email'], $args['email'] );
578
  }
579
+ }
580
 
581
+ // specific customers by name
582
+ if( ! empty( $args['name'] ) ) {
583
+ $where .= $wpdb->prepare( " AND `name` LIKE '%%%%" . '%s' . "%%%%' ", $args['name'] );
584
  }
585
 
586
+ // Customers created for a specific date or in a date range
587
+ if( ! empty( $args['date'] ) ) {
588
 
589
+ if( is_array( $args['date'] ) ) {
590
+
591
+ if( ! empty( $args['date']['start'] ) ) {
592
+
593
+ $start = date( 'Y-m-d 00:00:00', strtotime( $args['date']['start'] ) );
594
+ $where .= " AND `date_created` >= '{$start}'";
595
+
596
+ }
597
+
598
+ if( ! empty( $args['date']['end'] ) ) {
599
+
600
+ $end = date( 'Y-m-d 23:59:59', strtotime( $args['date']['end'] ) );
601
+ $where .= " AND `date_created` <= '{$end}'";
602
+
603
+ }
604
+
605
+ } else {
606
+
607
+ $year = date( 'Y', strtotime( $args['date'] ) );
608
+ $month = date( 'm', strtotime( $args['date'] ) );
609
+ $day = date( 'd', strtotime( $args['date'] ) );
610
+
611
+ $where .= " AND $year = YEAR ( date_created ) AND $month = MONTH ( date_created ) AND $day = DAY ( date_created )";
612
+ }
613
 
 
 
 
 
 
 
 
 
 
614
  }
615
 
616
+ $cache_key = md5( 'edd_customers_count' . serialize( $args ) );
617
+
618
+ $count = wp_cache_get( $cache_key, 'customers' );
619
+
620
+ if( $count === false ) {
621
+ $query = "SELECT COUNT($this->primary_key) FROM " . $this->table_name . "{$join} {$where};";
622
+ $count = $wpdb->get_var( $query);
623
+ wp_cache_set( $cache_key, $count, 'customers', 3600 );
624
  }
625
 
626
+ return absint( $count );
627
+
628
  }
629
 
630
  /**
includes/class-edd-discount.php CHANGED
@@ -1155,9 +1155,6 @@ class EDD_Discount {
1155
  }
1156
 
1157
  if ( true == $saved ) {
1158
- global $edd_get_discounts_cache;
1159
- $edd_get_discounts_cache = array();
1160
-
1161
  $this->setup_discount( WP_Post::get_instance( $this->ID ) );
1162
 
1163
  /**
@@ -1184,12 +1181,6 @@ class EDD_Discount {
1184
  * @return mixed bool|int false if data isn't passed and class not instantiated for creation, or post ID for the new discount.
1185
  */
1186
  public function add( $args ) {
1187
-
1188
- // If no code is provided, return early with false
1189
- if ( empty( $args['code'] ) ) {
1190
- return false;
1191
- }
1192
-
1193
  $meta = $this->build_meta( $args );
1194
 
1195
  if ( ! empty( $this->ID ) && $this->exists() ) {
@@ -1615,7 +1606,9 @@ class EDD_Discount {
1615
 
1616
  // Ensure we have requirements before proceeding
1617
  if ( ! $return && ! empty( $product_reqs ) ) {
1618
- switch ( $this->product_condition ) {
 
 
1619
  case 'all' :
1620
 
1621
  // Default back to true
@@ -1623,7 +1616,7 @@ class EDD_Discount {
1623
 
1624
  foreach ( $product_reqs as $download_id ) {
1625
 
1626
- if ( empty( $download_id ) ) {
1627
  continue;
1628
  }
1629
 
@@ -1647,7 +1640,7 @@ class EDD_Discount {
1647
 
1648
  foreach ( $product_reqs as $download_id ) {
1649
 
1650
- if ( empty( $download_id ) ) {
1651
  continue;
1652
  }
1653
 
@@ -1673,12 +1666,12 @@ class EDD_Discount {
1673
  }
1674
 
1675
  if ( ! empty( $excluded_ps ) ) {
1676
- if ( count( array_intersect( $cart_ids, $excluded_ps ) ) == count( $cart_ids ) ) {
1677
- $return = false;
1678
-
1679
  if ( $set_error ) {
1680
  edd_set_error( 'edd-discount-error', __( 'This discount is not valid for the cart contents.', 'easy-digital-downloads' ) );
1681
  }
 
 
1682
  }
1683
  }
1684
 
@@ -1756,7 +1749,7 @@ class EDD_Discount {
1756
  continue;
1757
  }
1758
 
1759
- if ( in_array( $payment->status, array( 'abandoned', 'failed', 'pending' ) ) ) {
1760
  continue;
1761
  }
1762
 
@@ -1810,8 +1803,8 @@ class EDD_Discount {
1810
  $this->is_started( $set_error ) &&
1811
  ! $this->is_maxed_out( $set_error ) &&
1812
  ! $this->is_used( $user, $set_error ) &&
1813
- $this->is_product_requirements_met( $set_error ) &&
1814
- $this->is_min_price_met( $set_error )
1815
  ) {
1816
  $return = true;
1817
  }
1155
  }
1156
 
1157
  if ( true == $saved ) {
 
 
 
1158
  $this->setup_discount( WP_Post::get_instance( $this->ID ) );
1159
 
1160
  /**
1181
  * @return mixed bool|int false if data isn't passed and class not instantiated for creation, or post ID for the new discount.
1182
  */
1183
  public function add( $args ) {
 
 
 
 
 
 
1184
  $meta = $this->build_meta( $args );
1185
 
1186
  if ( ! empty( $this->ID ) && $this->exists() ) {
1606
 
1607
  // Ensure we have requirements before proceeding
1608
  if ( ! $return && ! empty( $product_reqs ) ) {
1609
+
1610
+ switch( $this->product_condition ) {
1611
+
1612
  case 'all' :
1613
 
1614
  // Default back to true
1616
 
1617
  foreach ( $product_reqs as $download_id ) {
1618
 
1619
+ if( empty( $download_id ) ) {
1620
  continue;
1621
  }
1622
 
1640
 
1641
  foreach ( $product_reqs as $download_id ) {
1642
 
1643
+ if( empty( $download_id ) ) {
1644
  continue;
1645
  }
1646
 
1666
  }
1667
 
1668
  if ( ! empty( $excluded_ps ) ) {
1669
+ if ( $cart_ids == $excluded_ps ) {
 
 
1670
  if ( $set_error ) {
1671
  edd_set_error( 'edd-discount-error', __( 'This discount is not valid for the cart contents.', 'easy-digital-downloads' ) );
1672
  }
1673
+
1674
+ $return = false;
1675
  }
1676
  }
1677
 
1749
  continue;
1750
  }
1751
 
1752
+ if ( in_array( $payment->status, array( 'abandoned', 'failed' ) ) ) {
1753
  continue;
1754
  }
1755
 
1803
  $this->is_started( $set_error ) &&
1804
  ! $this->is_maxed_out( $set_error ) &&
1805
  ! $this->is_used( $user, $set_error ) &&
1806
+ $this->is_min_price_met( $set_error ) &&
1807
+ $this->is_product_requirements_met( $set_error )
1808
  ) {
1809
  $return = true;
1810
  }
includes/class-edd-fees.php CHANGED
@@ -204,21 +204,10 @@ class EDD_Fees {
204
 
205
  if ( ! empty( $fees ) && ! empty( $download_id ) ) {
206
  // Remove fees that don't belong to the specified Download
207
- $applied_fees = array();
208
  foreach ( $fees as $key => $fee ) {
209
-
210
  if ( empty( $fee['download_id'] ) || (int) $download_id !== (int) $fee['download_id'] ) {
211
  unset( $fees[ $key ] );
212
  }
213
-
214
- $fee_hash = md5( $fee['amount'] . $fee['label'] . $fee['type'] );
215
-
216
- if ( in_array( $fee_hash, $applied_fees ) ) {
217
- unset( $fees[ $key ] );
218
- }
219
-
220
- $applied_fees[] = $fee_hash;
221
-
222
  }
223
  }
224
 
204
 
205
  if ( ! empty( $fees ) && ! empty( $download_id ) ) {
206
  // Remove fees that don't belong to the specified Download
 
207
  foreach ( $fees as $key => $fee ) {
 
208
  if ( empty( $fee['download_id'] ) || (int) $download_id !== (int) $fee['download_id'] ) {
209
  unset( $fees[ $key ] );
210
  }
 
 
 
 
 
 
 
 
 
211
  }
212
  }
213
 
includes/class-edd-html-elements.php CHANGED
@@ -42,10 +42,7 @@ class EDD_HTML_Elements {
42
  'bundles' => true,
43
  'variations' => false,
44
  'placeholder' => sprintf( __( 'Choose a %s', 'easy-digital-downloads' ), edd_get_label_singular() ),
45
- 'data' => array(
46
- 'search-type' => 'download',
47
- 'search-placeholder' => sprintf( __( 'Type to search all %s', 'easy-digital-downloads' ), edd_get_label_plural() )
48
- ),
49
  );
50
 
51
  $args = wp_parse_args( $args, $defaults );
@@ -54,27 +51,9 @@ class EDD_HTML_Elements {
54
  'post_type' => 'download',
55
  'orderby' => 'title',
56
  'order' => 'ASC',
57
- 'posts_per_page' => $args['number'],
58
  );
59
 
60
- if ( ! current_user_can( 'edit_products' ) ) {
61
- $product_args['post_status'] = apply_filters( 'edd_product_dropdown_status_nopriv', array( 'publish' ) );
62
- } else {
63
- $product_args['post_status'] = apply_filters( 'edd_product_dropdown_status', array( 'publish', 'draft', 'private', 'future' ) );
64
- }
65
-
66
- if ( is_array( $product_args['post_status'] ) ) {
67
-
68
- // Given the array, sanitize them.
69
- $product_args['post_status'] = array_map( 'sanitize_text_field', $product_args['post_status'] );
70
-
71
- } else {
72
-
73
- // If we didn't get an array, fallback to 'publish'.
74
- $product_args['post_status'] = array( 'publish' );
75
-
76
- }
77
-
78
  // Maybe disable bundles
79
  if( ! $args['bundles'] ) {
80
  $product_args['meta_query'] = array(
@@ -87,36 +66,7 @@ class EDD_HTML_Elements {
87
  );
88
  }
89
 
90
- $product_args = apply_filters( 'edd_product_dropdown_args', $product_args );
91
-
92
- // Since it's possible to have selected items not within the queried limit, we need to include the selected items.
93
- $products = get_posts( $product_args );
94
- $existing_ids = wp_list_pluck( $products, 'ID' );
95
- if ( ! empty( $args['selected'] ) ) {
96
-
97
- $selected_items = $args['selected'];
98
- if ( ! is_array( $selected_items ) ) {
99
- $selected_items = array( $selected_items );
100
- }
101
-
102
- foreach ( $selected_items as $selected_item ) {
103
- if ( ! in_array( $selected_item, $existing_ids ) ) {
104
-
105
- // If the selected item has a variation, we just need the product ID.
106
- $has_variation = strpos( $selected_item, '_' );
107
- if ( false !== $has_variation ) {
108
- $selected_item = substr( $selected_item, 0, $has_variation );
109
- }
110
-
111
- $post = get_post( $selected_item );
112
- if ( ! is_null( $post ) ) {
113
- $products[] = $post;
114
- }
115
- }
116
- }
117
-
118
- }
119
-
120
  $options = array();
121
  $options[0] = '';
122
  if ( $products ) {
@@ -125,9 +75,10 @@ class EDD_HTML_Elements {
125
  if ( $args['variations'] && edd_has_variable_prices( $product->ID ) ) {
126
  $prices = edd_get_variable_prices( $product->ID );
127
  foreach ( $prices as $key => $value ) {
128
- $name = ! empty( $value['name'] ) ? $value['name'] : '';
129
- if ( $name ) {
130
- $options[ absint( $product->ID ) . '_' . $key ] = esc_html( $product->post_title . ': ' . $name );
 
131
  }
132
  }
133
  }
@@ -148,11 +99,12 @@ class EDD_HTML_Elements {
148
  $prices = edd_get_variable_prices( (int) $parsed_item['download_id'] );
149
  foreach ( $prices as $key => $value ) {
150
 
151
- $name = ( isset( $value['name'] ) && ! empty( $value['name'] ) ) ? $value['name'] : '';
 
152
 
153
- if ( $name && (int) $parsed_item['price_id'] === (int) $key ) {
154
 
155
- $options[ absint( $product->ID ) . '_' . $key ] = esc_html( get_the_title( (int) $parsed_item['download_id'] ) . ': ' . $name );
156
 
157
  }
158
 
@@ -178,11 +130,12 @@ class EDD_HTML_Elements {
178
 
179
  foreach ( $prices as $key => $value ) {
180
 
181
- $name = ( isset( $value['name'] ) && ! empty( $value['name'] ) ) ? $value['name'] : '';
 
182
 
183
- if ( $name && (int) $parsed_item['price_id'] === (int) $key ) {
184
 
185
- $options[ absint( $product->ID ) . '_' . $key ] = esc_html( get_the_title( (int) $parsed_item['download_id'] ) . ': ' . $name );
186
 
187
  }
188
 
@@ -242,10 +195,7 @@ class EDD_HTML_Elements {
242
  'chosen' => true,
243
  'placeholder' => __( 'Select a Customer', 'easy-digital-downloads' ),
244
  'number' => 30,
245
- 'data' => array(
246
- 'search-type' => 'customer',
247
- 'search-placeholder' => __( 'Type to search all Customers', 'easy-digital-downloads' )
248
- ),
249
  );
250
 
251
  $args = wp_parse_args( $args, $defaults );
@@ -319,10 +269,7 @@ class EDD_HTML_Elements {
319
  'chosen' => true,
320
  'placeholder' => __( 'Select a User', 'easy-digital-downloads' ),
321
  'number' => 30,
322
- 'data' => array(
323
- 'search-type' => 'user',
324
- 'search-placeholder' => __( 'Type to search all Users', 'easy-digital-downloads' ),
325
- ),
326
  );
327
 
328
  $args = wp_parse_args( $args, $defaults );
@@ -805,5 +752,4 @@ class EDD_HTML_Elements {
805
 
806
  return $output;
807
  }
808
-
809
  }
42
  'bundles' => true,
43
  'variations' => false,
44
  'placeholder' => sprintf( __( 'Choose a %s', 'easy-digital-downloads' ), edd_get_label_singular() ),
45
+ 'data' => array( 'search-type' => 'download' ),
 
 
 
46
  );
47
 
48
  $args = wp_parse_args( $args, $defaults );
51
  'post_type' => 'download',
52
  'orderby' => 'title',
53
  'order' => 'ASC',
54
+ 'posts_per_page' => $args['number']
55
  );
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  // Maybe disable bundles
58
  if( ! $args['bundles'] ) {
59
  $product_args['meta_query'] = array(
66
  );
67
  }
68
 
69
+ $products = get_posts( $product_args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  $options = array();
71
  $options[0] = '';
72
  if ( $products ) {
75
  if ( $args['variations'] && edd_has_variable_prices( $product->ID ) ) {
76
  $prices = edd_get_variable_prices( $product->ID );
77
  foreach ( $prices as $key => $value ) {
78
+ $name = ! empty( $value['name'] ) ? $value['name'] : '';
79
+ $index = ! empty( $value['index'] ) ? $value['index'] : $key;
80
+ if ( $name && $index ) {
81
+ $options[ absint( $product->ID ) . '_' . $index ] = esc_html( $product->post_title . ': ' . $name );
82
  }
83
  }
84
  }
99
  $prices = edd_get_variable_prices( (int) $parsed_item['download_id'] );
100
  foreach ( $prices as $key => $value ) {
101
 
102
+ $name = isset( $value['name'] ) ? $value['name'] : '';
103
+ $index = isset( $value['index'] ) ? $value['index'] : $key;
104
 
105
+ if ( $name && $index && (int) $parsed_item['price_id'] === (int) $index ) {
106
 
107
+ $options[ absint( $product->ID ) . '_' . $index ] = esc_html( get_the_title( (int) $parsed_item['download_id'] ) . ': ' . $name );
108
 
109
  }
110
 
130
 
131
  foreach ( $prices as $key => $value ) {
132
 
133
+ $name = isset( $value['name'] ) ? $value['name'] : '';
134
+ $index = isset( $value['index'] ) ? $value['index'] : $key;
135
 
136
+ if ( $name && $index && (int) $parsed_item['price_id'] === (int) $index ) {
137
 
138
+ $options[ absint( $product->ID ) . '_' . $index ] = esc_html( get_the_title( (int) $parsed_item['download_id'] ) . ': ' . $name );
139
 
140
  }
141
 
195
  'chosen' => true,
196
  'placeholder' => __( 'Select a Customer', 'easy-digital-downloads' ),
197
  'number' => 30,
198
+ 'data' => array( 'search-type' => 'customer' ),
 
 
 
199
  );
200
 
201
  $args = wp_parse_args( $args, $defaults );
269
  'chosen' => true,
270
  'placeholder' => __( 'Select a User', 'easy-digital-downloads' ),
271
  'number' => 30,
272
+ 'data' => array( 'search-type' => 'user' ),
 
 
 
273
  );
274
 
275
  $args = wp_parse_args( $args, $defaults );
752
 
753
  return $output;
754
  }
 
755
  }
includes/class-edd-license-handler.php CHANGED
@@ -104,7 +104,9 @@ class EDD_License {
104
  add_action( 'admin_init', array( $this, 'deactivate_license' ) );
105
 
106
  // Check that license is valid once per week
107
- add_action( 'edd_weekly_scheduled_events', array( $this, 'weekly_license_check' ) );
 
 
108
 
109
  // For testing license notices, uncomment this line to force checks on every page load
110
  //add_action( 'admin_init', array( $this, 'weekly_license_check' ) );
@@ -134,7 +136,7 @@ class EDD_License {
134
  'version' => $this->version,
135
  'license' => $this->license,
136
  'author' => $this->author,
137
- 'beta' => function_exists( 'edd_extension_has_beta_support' ) && edd_extension_has_beta_support( $this->item_shortname ),
138
  );
139
 
140
  if( ! empty( $this->item_id ) ) {
104
  add_action( 'admin_init', array( $this, 'deactivate_license' ) );
105
 
106
  // Check that license is valid once per week
107
+ if ( edd_doing_cron() ) {
108
+ add_action( 'edd_weekly_scheduled_events', array( $this, 'weekly_license_check' ) );
109
+ }
110
 
111
  // For testing license notices, uncomment this line to force checks on every page load
112
  //add_action( 'admin_init', array( $this, 'weekly_license_check' ) );
136
  'version' => $this->version,
137
  'license' => $this->license,
138
  'author' => $this->author,
139
+ 'beta' => edd_extension_has_beta_support( $this->item_shortname ),
140
  );
141
 
142
  if( ! empty( $this->item_id ) ) {
includes/class-edd-logging.php CHANGED
@@ -21,43 +21,18 @@ if ( ! defined( 'ABSPATH' ) ) exit;
21
  */
22
  class EDD_Logging {
23
 
24
- public $is_writable = true;
25
- private $filename = '';
26
- private $file = '';
27
-
28
  /**
29
  * Set up the EDD Logging Class
30
  *
31
  * @since 1.3.1
32
  */
33
  public function __construct() {
34
-
35
  // Create the log post type
36
  add_action( 'init', array( $this, 'register_post_type' ), 1 );
37
 
38
  // Create types taxonomy and default types
39
  add_action( 'init', array( $this, 'register_taxonomy' ), 1 );
40
 
41
- add_action( 'plugins_loaded', array( $this, 'setup_log_file' ), 0 );
42
-
43
- }
44
-
45
- /**
46
- * Sets up the log file if it is writable
47
- *
48
- * @since 2.8.7
49
- * @return void
50
- */
51
- public function setup_log_file() {
52
-
53
- $upload_dir = wp_upload_dir();
54
- $this->filename = wp_hash( home_url( '/' ) ) . '-edd-debug.log';
55
- $this->file = trailingslashit( $upload_dir['basedir'] ) . $this->filename;
56
-
57
- if ( ! is_writeable( $upload_dir['basedir'] ) ) {
58
- $this->is_writable = false;
59
- }
60
-
61
  }
62
 
63
  /**
@@ -375,108 +350,6 @@ class EDD_Logging {
375
  }
376
  }
377
 
378
- /**
379
- * Retrieve the log data
380
- *
381
- * @since 2.8.7
382
- * @return string
383
- */
384
- public function get_file_contents() {
385
- return $this->get_file();
386
- }
387
-
388
- /**
389
- * Log message to file
390
- *
391
- * @since 2.8.7
392
- * @return void
393
- */
394
- public function log_to_file( $message = '' ) {
395
- $message = date( 'Y-n-d H:i:s' ) . ' - ' . $message . "\r\n";
396
- $this->write_to_log( $message );
397
-
398
- }
399
-
400
- /**
401
- * Retrieve the file data is written to
402
- *
403
- * @since 2.8.7
404
- * @return string
405
- */
406
- protected function get_file() {
407
-
408
- $file = '';
409
-
410
- if ( @file_exists( $this->file ) ) {
411
-
412
- if ( ! is_writeable( $this->file ) ) {
413
- $this->is_writable = false;
414
- }
415
-
416
- $file = @file_get_contents( $this->file );
417
-
418
- } else {
419
-
420
- @file_put_contents( $this->file, '' );
421
- @chmod( $this->file, 0664 );
422
-
423
- }
424
-
425
- return $file;
426
- }
427
-
428
- /**
429
- * Write the log message
430
- *
431
- * @since 2.8.7
432
- * @return void
433
- */
434
- protected function write_to_log( $message = '' ) {
435
- $file = $this->get_file();
436
- $file .= $message;
437
- @file_put_contents( $this->file, $file );
438
- }
439
-
440
- /**
441
- * Delete the log file or removes all contents in the log file if we cannot delete it
442
- *
443
- * @since 2.8.7
444
- * @return void
445
- */
446
- public function clear_log_file() {
447
- @unlink( $this->file );
448
-
449
- if ( file_exists( $this->file ) ) {
450
-
451
- // it's still there, so maybe server doesn't have delete rights
452
- chmod( $this->file, 0664 ); // Try to give the server delete rights
453
- @unlink( $this->file );
454
-
455
- // See if it's still there
456
- if ( @file_exists( $this->file ) ) {
457
-
458
- /*
459
- * Remove all contents of the log file if we cannot delete it
460
- */
461
- if ( is_writeable( $this->file ) ) {
462
-
463
- file_put_contents( $this->file, '' );
464
-
465
- } else {
466
-
467
- return false;
468
-
469
- }
470
-
471
- }
472
-
473
- }
474
-
475
- $this->file = '';
476
- return true;
477
-
478
- }
479
-
480
  }
481
 
482
  // Initiate the logging system
@@ -505,23 +378,3 @@ function edd_record_log( $title = '', $message = '', $parent = 0, $type = null )
505
  $log = $edd_logs->add( $title, $message, $parent, $type );
506
  return $log;
507
  }
508
-
509
-
510
- /**
511
- * Logs a message to the debug log file
512
- *
513
- * @since 2.8.7
514
- *
515
- * @param string $message
516
- * @global $edd_logs EDD Logs Object
517
- * @return void
518
- */
519
- function edd_debug_log( $message = '' ) {
520
- global $edd_logs;
521
-
522
- if( edd_is_debug_mode() ) {
523
-
524
- $edd_logs->log_to_file( $message );
525
-
526
- }
527
- }
21
  */
22
  class EDD_Logging {
23
 
 
 
 
 
24
  /**
25
  * Set up the EDD Logging Class
26
  *
27
  * @since 1.3.1
28
  */
29
  public function __construct() {
 
30
  // Create the log post type
31
  add_action( 'init', array( $this, 'register_post_type' ), 1 );
32
 
33
  // Create types taxonomy and default types
34
  add_action( 'init', array( $this, 'register_taxonomy' ), 1 );
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
  /**
350
  }
351
  }
352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
  }
354
 
355
  // Initiate the logging system
378
  $log = $edd_logs->add( $title, $message, $parent, $type );
379
  return $log;
380
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-edd-register-meta.php CHANGED
@@ -159,7 +159,7 @@ class EDD_Register_Meta {
159
  array(
160
  'sanitize_callback' => 'sanitize_text_field',
161
  'type' => 'string',
162
- 'description' => __( "Defines how this product's 'Purchase' button should behave, either add to cart or buy now", 'easy-digital-downloads' ),
163
  'show_in_rest' => true,
164
  )
165
  );
@@ -379,14 +379,7 @@ class EDD_Register_Meta {
379
  }
380
 
381
  if ( is_serialized( $value ) ) {
382
-
383
- preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $value, $matches );
384
- if ( ! empty( $matches ) ) {
385
- return false;
386
- }
387
-
388
  $value = (array) maybe_unserialize( $value );
389
-
390
  }
391
 
392
  }
159
  array(
160
  'sanitize_callback' => 'sanitize_text_field',
161
  'type' => 'string',
162
+ 'description' => __( 'Defines how this products `Purchase` button should behave, either add to cart or buy now.', 'easy-digital-downloads' ),
163
  'show_in_rest' => true,
164
  )
165
  );
379
  }
380
 
381
  if ( is_serialized( $value ) ) {
 
 
 
 
 
 
382
  $value = (array) maybe_unserialize( $value );
 
383
  }
384
 
385
  }
includes/class-edd-session.php CHANGED
@@ -156,45 +156,11 @@ class EDD_Session {
156
  * @access public
157
  * @since 1.5
158
  * @param string $key Session key
159
- * @return mixed Session variable
160
  */
161
  public function get( $key ) {
162
-
163
- $key = sanitize_key( $key );
164
- $return = false;
165
-
166
- if ( isset( $this->session[ $key ] ) && ! empty( $this->session[ $key ] ) ) {
167
-
168
- preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $this->session[ $key ], $matches );
169
- if ( ! empty( $matches ) ) {
170
- $this->set( $key, null );
171
- return false;
172
- }
173
-
174
- if ( is_numeric( $this->session[ $key ] ) ) {
175
- $return = $this->session[ $key ];
176
- } else {
177
-
178
- $maybe_json = json_decode( $this->session[ $key ] );
179
-
180
- // Since json_last_error is PHP 5.3+, we have to rely on a `null` value for failing to parse JSON.
181
- if ( is_null( $maybe_json ) ) {
182
- $is_serialized = is_serialized( $this->session[ $key ] );
183
- if ( $is_serialized ) {
184
- $value = @unserialize( $this->session[ $key ] );
185
- $this->set( $key, (array) $value );
186
- $return = $value;
187
- } else {
188
- $return = $this->session[ $key ];
189
- }
190
- } else {
191
- $return = json_decode( $this->session[ $key ], true );
192
- }
193
-
194
- }
195
- }
196
-
197
- return $return;
198
  }
199
 
200
  /**
@@ -203,17 +169,17 @@ class EDD_Session {
203
  * @since 1.5
204
  *
205
  * @param string $key Session key
206
- * @param int|string|array $value Session variable
207
- * @return mixed Session variable
208
  */
209
  public function set( $key, $value ) {
210
 
211
  $key = sanitize_key( $key );
212
 
213
  if ( is_array( $value ) ) {
214
- $this->session[ $key ] = wp_json_encode( $value );
215
  } else {
216
- $this->session[ $key ] = esc_attr( $value );
217
  }
218
 
219
  if( $this->use_php_sessions ) {
156
  * @access public
157
  * @since 1.5
158
  * @param string $key Session key
159
+ * @return string Session variable
160
  */
161
  public function get( $key ) {
162
+ $key = sanitize_key( $key );
163
+ return isset( $this->session[ $key ] ) ? maybe_unserialize( $this->session[ $key ] ) : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  /**
169
  * @since 1.5
170
  *
171
  * @param string $key Session key
172
+ * @param integer $value Session variable
173
+ * @return string Session variable
174
  */
175
  public function set( $key, $value ) {
176
 
177
  $key = sanitize_key( $key );
178
 
179
  if ( is_array( $value ) ) {
180
+ $this->session[ $key ] = serialize( $value );
181
  } else {
182
+ $this->session[ $key ] = $value;
183
  }
184
 
185
  if( $this->use_php_sessions ) {
includes/class-edd-stats.php CHANGED
@@ -136,7 +136,7 @@ class EDD_Stats {
136
  $month = date( 'n', current_time( 'timestamp' ) );
137
  $year = date( 'Y', current_time( 'timestamp' ) );
138
 
139
- if ( ( is_string( $date ) || is_int( $date ) ) && array_key_exists( $date, $this->get_predefined_dates() ) ) {
140
 
141
  // This is a predefined date rate, such as last_week
142
  switch( $date ) {
136
  $month = date( 'n', current_time( 'timestamp' ) );
137
  $year = date( 'Y', current_time( 'timestamp' ) );
138
 
139
+ if ( array_key_exists( $date, $this->get_predefined_dates() ) ) {
140
 
141
  // This is a predefined date rate, such as last_week
142
  switch( $date ) {
includes/country-functions.php CHANGED
@@ -54,9 +54,6 @@ function edd_get_shop_states( $country = null ) {
54
  case 'US' :
55
  $states = edd_get_states_list();
56
  break;
57
- case 'AO' :
58
- $states = edd_get_angola_provinces_list();
59
- break;
60
  case 'CA' :
61
  $states = edd_get_provinces_list();
62
  break;
@@ -480,38 +477,6 @@ function edd_get_states_list() {
480
  return apply_filters( 'edd_us_states', $states );
481
  }
482
 
483
- /**
484
- * Get Angola States
485
- *
486
- * @since 2.8.5
487
- * @return array $states A list of states
488
- */
489
- function edd_get_angola_provinces_list() {
490
- $provinces = array(
491
- '' => '',
492
- 'BGO' => 'Bengo',
493
- 'BGU' => 'Benguela',
494
- 'BIE' => 'Bié',
495
- 'CAB' => 'Cabinda',
496
- 'CNN' => 'Cunene',
497
- 'HUA' => 'Huambo',
498
- 'HUI' => 'Huíla',
499
- 'CCU' => 'Kuando Kubango', // Cuando Cubango
500
- 'CNO' => 'Kwanza-Norte', // Cuanza Norte
501
- 'CUS' => 'Kwanza-Sul', // Cuanza Sul
502
- 'LUA' => 'Luanda',
503
- 'LNO' => 'Lunda-Norte', // Lunda Norte
504
- 'LSU' => 'Lunda-Sul', // Lunda Sul
505
- 'MAL' => 'Malanje', // Malanje
506
- 'MOX' => 'Moxico',
507
- 'NAM' => 'Namibe',
508
- 'UIG' => 'Uíge',
509
- 'ZAI' => 'Zaire'
510
- );
511
-
512
- return apply_filters( 'edd_angola_provinces', $provinces );
513
- }
514
-
515
  /**
516
  * Get Provinces List
517
  *
@@ -1657,19 +1622,3 @@ function edd_get_spain_states_list() {
1657
 
1658
  return apply_filters( 'edd_spain_states', $states );
1659
  }
1660
-
1661
- /**
1662
- * Given a country code, return the country name
1663
- *
1664
- * @since 2.8.7
1665
- * @param string $country_code The ISO Code for the country
1666
- *
1667
- * @return string
1668
- */
1669
- function edd_get_country_name( $country_code = '' ) {
1670
- $country_list = edd_get_country_list();
1671
- $country_name = isset( $country_list[ $country_code ] ) ? $country_list[ $country_code ] : $country_code;
1672
-
1673
- return apply_filters( 'edd_get_country_name', $country_name, $country_code );
1674
- }
1675
-
54
  case 'US' :
55
  $states = edd_get_states_list();
56
  break;
 
 
 
57
  case 'CA' :
58
  $states = edd_get_provinces_list();
59
  break;
477
  return apply_filters( 'edd_us_states', $states );
478
  }
479
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
  /**
481
  * Get Provinces List
482
  *
1622
 
1623
  return apply_filters( 'edd_spain_states', $states );
1624
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/deprecated-functions.php CHANGED
@@ -714,21 +714,4 @@ function edd_get_sales_by_date( $day = null, $month_num = null, $year = null, $h
714
  $result = $cached[ $key ];
715
 
716
  return $result;
717
- }
718
-
719
- /**
720
- * Set the Page Style for PayPal Purchase page
721
- *
722
- * @since 1.4.1
723
- * @deprecated 2.8
724
- * @return string
725
- */
726
- function edd_get_paypal_page_style() {
727
-
728
- $backtrace = debug_backtrace();
729
-
730
- _edd_deprecated_function( __FUNCTION__, '2.8', 'edd_get_paypal_image_url', $backtrace );
731
-
732
- $page_style = trim( edd_get_option( 'paypal_page_style', 'PayPal' ) );
733
- return apply_filters( 'edd_paypal_page_style', $page_style );
734
- }
714
  $result = $cached[ $key ];
715
 
716
  return $result;
717
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/discount-functions.php CHANGED
@@ -32,32 +32,19 @@ function edd_get_discounts( $args = array() ) {
32
 
33
  $args = wp_parse_args( $args, $defaults );
34
 
35
- $discounts_hash = md5( json_encode( $args ) );
36
- $discounts = edd_get_discounts_cache( $discounts_hash );
37
-
38
- if ( false === $discounts ) {
39
- $discounts = get_posts( $args );
40
- edd_set_discounts_cache( $discounts_hash, $discounts );
41
- }
42
 
43
  if ( $discounts ) {
44
  return $discounts;
45
  }
46
 
47
- // If no discounts are found and we are searching, re-query with a meta key to find discounts by code
48
  if( ! $discounts && ! empty( $args['s'] ) ) {
 
49
  $args['meta_key'] = '_edd_discount_code';
50
  $args['meta_value'] = $args['s'];
51
  $args['meta_compare'] = 'LIKE';
52
  unset( $args['s'] );
53
-
54
- $discounts_hash = md5( json_encode( $args ) );
55
- $discounts = edd_get_discounts_cache( $discounts_hash );
56
-
57
- if ( false === $discounts ) {
58
- $discounts = get_posts( $args );
59
- edd_set_discounts_cache( $discounts_hash, $discounts );
60
- }
61
  }
62
 
63
  if( $discounts ) {
@@ -129,10 +116,10 @@ function edd_get_discount( $discount_id = 0 ) {
129
  * @since 2.7 Updated to use EDD_Discount object
130
  *
131
  * @param string $code Discount code.
132
- * @return EDD_Discount|bool EDD_Discount object or false if not found.
133
  */
134
  function edd_get_discount_by_code( $code = '' ) {
135
- $discount = new EDD_Discount( $code, true );
136
 
137
  if ( ! $discount->ID > 0 ) {
138
  return false;
@@ -196,28 +183,17 @@ function edd_get_discount_by( $field = '', $value = '' ) {
196
  * @return mixed bool|int The discount ID of the discount code, or false on failure.
197
  */
198
  function edd_store_discount( $details, $discount_id = null ) {
199
- $return = false;
200
-
201
  if ( null == $discount_id ) {
202
  $discount = new EDD_Discount;
203
  $discount->add( $details );
204
-
205
- if ( ! empty( $discount->ID ) ) {
206
- $return = $discount->ID;
207
- }
208
  } else {
209
  $discount = new EDD_Discount( $discount_id );
210
  $discount->update( $details );
211
- $return = $discount->ID;
212
  }
213
 
214
- // If we stored a discount, we need to clear the edd_get_discounts_cache global.
215
- if ( false !== $return ) {
216
- global $edd_get_discounts_cache;
217
- $edd_get_discounts_cache = array();
218
- }
219
-
220
- return $return;
221
  }
222
 
223
  /**
@@ -814,7 +790,7 @@ function edd_get_cart_discounts_html( $discounts = false ) {
814
  $discounts = EDD()->cart->get_discounts();
815
  }
816
 
817
- if ( empty( $discounts ) ) {
818
  return;
819
  }
820
 
@@ -1076,47 +1052,6 @@ function edd_discount_status_cleanup() {
1076
  }
1077
 
1078
  }
1079
-
1080
- /**
1081
- * Check to see if this set of discounts has been queried for already.
1082
- *
1083
- * @since 2.8.7
1084
- * @param $hash string The hash of the edd_get_discount args.
1085
- *
1086
- * @return bool|mixed Found discounts if already queried, or false if it has not been queried yet.
1087
- */
1088
- function edd_get_discounts_cache( $hash ) {
1089
- global $edd_get_discounts_cache;
1090
-
1091
- if ( ! is_array( $edd_get_discounts_cache ) ) {
1092
- $edd_get_discounts_cache = array();
1093
- }
1094
-
1095
- if ( ! isset( $edd_get_discounts_cache[ $hash ] ) ) {
1096
- return false;
1097
- }
1098
-
1099
- return $edd_get_discounts_cache[ $hash ];
1100
- }
1101
-
1102
- /**
1103
- * Store found discounts with the hash.
1104
- * This is a non-persistent cache and uses a PHP global.
1105
- *
1106
- * @since 2.8.7
1107
- * @param $hash string The hash of the arguments from edd_get_discounts.
1108
- * @param $data array The data to store for this hash.
1109
- */
1110
- function edd_set_discounts_cache( $hash, $data ) {
1111
- global $edd_get_discounts_cache;
1112
-
1113
- if ( ! is_array( $edd_get_discounts_cache ) ) {
1114
- $edd_get_discounts_cache = array();
1115
- }
1116
-
1117
- $edd_get_discounts_cache[ $hash ] = $data;
1118
- }
1119
-
1120
  /**
1121
  * Disabled until https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5619 is completed
1122
  * See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5631
32
 
33
  $args = wp_parse_args( $args, $defaults );
34
 
35
+ $discounts = get_posts( $args );
 
 
 
 
 
 
36
 
37
  if ( $discounts ) {
38
  return $discounts;
39
  }
40
 
 
41
  if( ! $discounts && ! empty( $args['s'] ) ) {
42
+ // If no discounts are found and we are searching, re-query with a meta key to find discounts by code
43
  $args['meta_key'] = '_edd_discount_code';
44
  $args['meta_value'] = $args['s'];
45
  $args['meta_compare'] = 'LIKE';
46
  unset( $args['s'] );
47
+ $discounts = get_posts( $args );
 
 
 
 
 
 
 
48
  }
49
 
50
  if( $discounts ) {
116
  * @since 2.7 Updated to use EDD_Discount object
117
  *
118
  * @param string $code Discount code.
119
+ * @return mixed object|bool EDD_Discount object or false if not found.
120
  */
121
  function edd_get_discount_by_code( $code = '' ) {
122
+ $discount = new EDD_Discount( $code, true );
123
 
124
  if ( ! $discount->ID > 0 ) {
125
  return false;
183
  * @return mixed bool|int The discount ID of the discount code, or false on failure.
184
  */
185
  function edd_store_discount( $details, $discount_id = null ) {
 
 
186
  if ( null == $discount_id ) {
187
  $discount = new EDD_Discount;
188
  $discount->add( $details );
189
+ return $discount->ID;
 
 
 
190
  } else {
191
  $discount = new EDD_Discount( $discount_id );
192
  $discount->update( $details );
193
+ return $discount->ID;
194
  }
195
 
196
+ return false;
 
 
 
 
 
 
197
  }
198
 
199
  /**
790
  $discounts = EDD()->cart->get_discounts();
791
  }
792
 
793
+ if ( ! $discounts ) {
794
  return;
795
  }
796
 
1052
  }
1053
 
1054
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1055
  /**
1056
  * Disabled until https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5619 is completed
1057
  * See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5631
includes/emails/actions.php CHANGED
@@ -16,23 +16,19 @@ if ( ! defined( 'ABSPATH' ) ) exit;
16
  * Triggers Purchase Receipt to be sent after the payment status is updated
17
  *
18
  * @since 1.0.8.4
19
- * @since 2.8 - Add parameters for EDD_Payment and EDD_Customer object.
20
- *
21
- * @param int $payment_id Payment ID.
22
- * @param EDD_Payment $payment Payment object for payment ID.
23
- * @param EDD_Customer $customer Customer object for associated payment.
24
  * @return void
25
  */
26
- function edd_trigger_purchase_receipt( $payment_id = 0, $payment = null, $customer = null ) {
27
  // Make sure we don't send a purchase receipt while editing a payment
28
  if ( isset( $_POST['edd-action'] ) && 'edit_payment' == $_POST['edd-action'] ) {
29
  return;
30
  }
31
 
32
  // Send email with secure download link
33
- edd_email_purchase_receipt( $payment_id, true, '', $payment, $customer );
34
  }
35
- add_action( 'edd_complete_purchase', 'edd_trigger_purchase_receipt', 999, 3 );
36
 
37
  /**
38
  * Resend the Email Purchase Receipt. (This can be done from the Payment History page)
16
  * Triggers Purchase Receipt to be sent after the payment status is updated
17
  *
18
  * @since 1.0.8.4
19
+ * @param int $payment_id Payment ID
 
 
 
 
20
  * @return void
21
  */
22
+ function edd_trigger_purchase_receipt( $payment_id ) {
23
  // Make sure we don't send a purchase receipt while editing a payment
24
  if ( isset( $_POST['edd-action'] ) && 'edit_payment' == $_POST['edd-action'] ) {
25
  return;
26
  }
27
 
28
  // Send email with secure download link
29
+ edd_email_purchase_receipt( $payment_id );
30
  }
31
+ add_action( 'edd_complete_purchase', 'edd_trigger_purchase_receipt', 999, 1 );
32
 
33
  /**
34
  * Resend the Email Purchase Receipt. (This can be done from the Payment History page)
includes/emails/class-edd-email-tags.php CHANGED
@@ -439,15 +439,15 @@ function edd_email_tag_download_list( $payment_id ) {
439
 
440
  } elseif ( edd_is_bundled_product( $item['id'] ) ) {
441
 
442
- $bundled_products = apply_filters( 'edd_email_tag_bundled_products', edd_get_bundled_products( $item['id'], $price_id ), $item, $payment_id, 'download_list' );
443
 
444
  foreach ( $bundled_products as $bundle_item ) {
445
 
446
  $download_list .= '<div class="edd_bundled_product"><strong>' . get_the_title( $bundle_item ) . '</strong></div>';
447
 
448
- $download_files = edd_get_download_files( edd_get_bundle_item_id( $bundle_item ), edd_get_bundle_item_price_id( $bundle_item ) );
449
 
450
- foreach ( $download_files as $filekey => $file ) {
451
  if ( $show_links ) {
452
  $download_list .= '<div>';
453
  $file_url = edd_get_download_file_url( $payment_data['key'], $email, $filekey, $bundle_item, $price_id );
@@ -460,8 +460,7 @@ function edd_email_tag_download_list( $payment_id ) {
460
  }
461
  }
462
  }
463
-
464
- } else {
465
 
466
  $no_downloads_message = apply_filters( 'edd_receipt_no_files_found_text', __( 'No downloadable files found.', 'easy-digital-downloads' ), $item['id'] );
467
  $no_downloads_message = apply_filters( 'edd_email_receipt_no_downloads_message', $no_downloads_message, $item['id'], $price_id, $payment_id );
@@ -653,7 +652,7 @@ function edd_email_tag_first_name( $payment_id ) {
653
  return '';
654
  }
655
 
656
- $email_name = edd_get_email_names( $user_info, $payment );
657
 
658
  return $email_name['name'];
659
  }
@@ -674,7 +673,7 @@ function edd_email_tag_fullname( $payment_id ) {
674
  return '';
675
  }
676
 
677
- $email_name = edd_get_email_names( $user_info, $payment );
678
  return $email_name['fullname'];
679
  }
680
 
@@ -694,7 +693,7 @@ function edd_email_tag_username( $payment_id ) {
694
  return '';
695
  }
696
 
697
- $email_name = edd_get_email_names( $user_info, $payment );
698
  return $email_name['username'];
699
  }
700
 
439
 
440
  } elseif ( edd_is_bundled_product( $item['id'] ) ) {
441
 
442
+ $bundled_products = apply_filters( 'edd_email_tag_bundled_products', edd_get_bundled_products( $item['id'] ), $item, $payment_id, 'download_list' );
443
 
444
  foreach ( $bundled_products as $bundle_item ) {
445
 
446
  $download_list .= '<div class="edd_bundled_product"><strong>' . get_the_title( $bundle_item ) . '</strong></div>';
447
 
448
+ $files = edd_get_download_files( $bundle_item );
449
 
450
+ foreach ( $files as $filekey => $file ) {
451
  if ( $show_links ) {
452
  $download_list .= '<div>';
453
  $file_url = edd_get_download_file_url( $payment_data['key'], $email, $filekey, $bundle_item, $price_id );
460
  }
461
  }
462
  }
463
+ }else{
 
464
 
465
  $no_downloads_message = apply_filters( 'edd_receipt_no_files_found_text', __( 'No downloadable files found.', 'easy-digital-downloads' ), $item['id'] );
466
  $no_downloads_message = apply_filters( 'edd_email_receipt_no_downloads_message', $no_downloads_message, $item['id'], $price_id, $payment_id );
652
  return '';
653
  }
654
 
655
+ $email_name = edd_get_email_names( $user_info );
656
 
657
  return $email_name['name'];
658
  }
673
  return '';
674
  }
675
 
676
+ $email_name = edd_get_email_names( $user_info );
677
  return $email_name['fullname'];
678
  }
679
 
693
  return '';
694
  }
695
 
696
+ $email_name = edd_get_email_names( $user_info );
697
  return $email_name['username'];
698
  }
699
 
includes/emails/class-edd-emails.php CHANGED
@@ -124,11 +124,7 @@ class EDD_Emails {
124
  */
125
  public function get_from_address() {
126
  if ( ! $this->from_address ) {
127
- $this->from_address = edd_get_option( 'from_email' );
128
- }
129
-
130
- if( empty( $this->from_address ) || ! is_email( $this->from_address ) ) {
131
- $this->from_address = get_option( 'admin_email' );
132
  }
133
 
134
  return apply_filters( 'edd_email_from_address', $this->from_address, $this );
124
  */
125
  public function get_from_address() {
126
  if ( ! $this->from_address ) {
127
+ $this->from_address = edd_get_option( 'from_email', get_option( 'admin_email' ) );
 
 
 
 
128
  }
129
 
130
  return apply_filters( 'edd_email_from_address', $this->from_address, $this );
includes/emails/functions.php CHANGED
@@ -17,20 +17,13 @@ if ( ! defined( 'ABSPATH' ) ) exit;
17
  * customizable Purchase Receipt
18
  *
19
  * @since 1.0
20
- * @since 2.8 - Add parameters for EDD_Payment and EDD_Customer object.
21
- *
22
- * @param int $payment_id Payment ID
23
- * @param bool $admin_notice Whether to send the admin email notification or not (default: true)
24
- * @param EDD_Payment $payment Payment object for payment ID.
25
- * @param EDD_Customer $customer Customer object for associated payment.
26
  * @return void
27
  */
28
- function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_email = '', $payment = null, $customer = null ) {
29
- if ( is_null( $payment ) ) {
30
- $payment = edd_get_payment( $payment_id );
31
- }
32
 
33
- $payment_data = $payment->get_meta( '_edd_payment_meta', true );
34
 
35
  $from_name = edd_get_option( 'from_name', wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) );
36
  $from_name = apply_filters( 'edd_purchase_from_name', $from_name, $payment_id, $payment_data );
@@ -38,8 +31,10 @@ function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_emai
38
  $from_email = edd_get_option( 'from_email', get_bloginfo( 'admin_email' ) );
39
  $from_email = apply_filters( 'edd_purchase_from_address', $from_email, $payment_id, $payment_data );
40
 
41
- if ( empty( $to_email ) ) {
42
- $to_email = $payment->email;
 
 
43
  }
44
 
45
  $subject = edd_get_option( 'purchase_subject', __( 'Purchase Receipt', 'easy-digital-downloads' ) );
@@ -215,67 +210,26 @@ function edd_get_default_sale_notification_email() {
215
  *
216
  * @since 1.9
217
  * @param $user_info
218
- * @param $payment EDD_Payment for getting the names
219
  *
220
  * @return array $email_names
221
  */
222
- function edd_get_email_names( $user_info, $payment = false ) {
223
  $email_names = array();
224
- $email_names['fullname'] = '';
225
-
226
- if ( $payment instanceof EDD_Payment ) {
227
-
228
- if ( $payment->user_id > 0 ) {
229
-
230
- $user_data = get_userdata( $payment->user_id );
231
- $email_names['name'] = $payment->first_name;
232
- $email_names['fullname'] = trim( $payment->first_name . ' ' . $payment->last_name );
233
- $email_names['username'] = $user_data->user_login;
234
-
235
- } elseif ( ! empty( $payment->first_name ) ) {
236
-
237
- $email_names['name'] = $payment->first_name;
238
- $email_names['fullname'] = trim( $payment->first_name . ' ' . $payment->last_name );
239
- $email_names['username'] = $payment->first_name;
240
-
241
- } else {
242
-
243
- $email_names['name'] = $payment->email;
244
- $email_names['username'] = $payment->email;
245
-
246
- }
247
 
 
 
 
 
 
 
 
 
 
 
248
  } else {
249
-
250
- if ( is_serialized( $user_info ) ) {
251
-
252
- preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $user_info, $matches );
253
- if ( ! empty( $matches ) ) {
254
- return array(
255
- 'name' => '',
256
- 'fullname' => '',
257
- 'username' => '',
258
- );
259
- } else {
260
- $user_info = maybe_unserialize( $user_info );
261
- }
262
-
263
- }
264
-
265
- if ( isset( $user_info['id'] ) && $user_info['id'] > 0 && isset( $user_info['first_name'] ) ) {
266
- $user_data = get_userdata( $user_info['id'] );
267
- $email_names['name'] = $user_info['first_name'];
268
- $email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
269
- $email_names['username'] = $user_data->user_login;
270
- } elseif ( isset( $user_info['first_name'] ) ) {
271
- $email_names['name'] = $user_info['first_name'];
272
- $email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
273
- $email_names['username'] = $user_info['first_name'];
274
- } else {
275
- $email_names['name'] = $user_info['email'];
276
- $email_names['username'] = $user_info['email'];
277
- }
278
-
279
  }
280
 
281
  return $email_names;
17
  * customizable Purchase Receipt
18
  *
19
  * @since 1.0
20
+ * @param int $payment_id Payment ID
21
+ * @param bool $admin_notice Whether to send the admin email notification or not (default: true)
 
 
 
 
22
  * @return void
23
  */
24
+ function edd_email_purchase_receipt( $payment_id, $admin_notice = true, $to_email = '' ) {
 
 
 
25
 
26
+ $payment_data = edd_get_payment_meta( $payment_id );
27
 
28
  $from_name = edd_get_option( 'from_name', wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) );
29
  $from_name = apply_filters( 'edd_purchase_from_name', $from_name, $payment_id, $payment_data );
31
  $from_email = edd_get_option( 'from_email', get_bloginfo( 'admin_email' ) );
32
  $from_email = apply_filters( 'edd_purchase_from_address', $from_email, $payment_id, $payment_data );
33
 
34
+ if( empty( $to_email ) ) {
35
+
36
+ $to_email = edd_get_payment_user_email( $payment_id );
37
+
38
  }
39
 
40
  $subject = edd_get_option( 'purchase_subject', __( 'Purchase Receipt', 'easy-digital-downloads' ) );
210
  *
211
  * @since 1.9
212
  * @param $user_info
 
213
  *
214
  * @return array $email_names
215
  */
216
+ function edd_get_email_names( $user_info ) {
217
  $email_names = array();
218
+ $user_info = maybe_unserialize( $user_info );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
 
220
+ $email_names['fullname'] = '';
221
+ if ( isset( $user_info['id'] ) && $user_info['id'] > 0 && isset( $user_info['first_name'] ) ) {
222
+ $user_data = get_userdata( $user_info['id'] );
223
+ $email_names['name'] = $user_info['first_name'];
224
+ $email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
225
+ $email_names['username'] = $user_data->user_login;
226
+ } elseif ( isset( $user_info['first_name'] ) ) {
227
+ $email_names['name'] = $user_info['first_name'];
228
+ $email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
229
+ $email_names['username'] = $user_info['first_name'];
230
  } else {
231
+ $email_names['name'] = $user_info['email'];
232
+ $email_names['username'] = $user_info['email'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  }
234
 
235
  return $email_names;
includes/emails/template.php CHANGED
@@ -115,7 +115,7 @@ function edd_email_template_preview() {
115
  <?php
116
  echo ob_get_clean();
117
  }
118
- add_action( 'edd_purchase_receipt_email_settings', 'edd_email_template_preview' );
119
 
120
  /**
121
  * Displays the email preview
@@ -138,7 +138,7 @@ function edd_display_email_template_preview() {
138
  }
139
 
140
 
141
- EDD()->emails->heading = edd_email_preview_template_tags( edd_get_option( 'purchase_heading', __( 'Purchase Receipt', 'easy-digital-downloads' ) ) );
142
 
143
  echo EDD()->emails->build_email( edd_email_preview_template_tags( edd_get_email_body_content( 0, array() ) ) );
144
 
@@ -181,47 +181,49 @@ function edd_get_email_body_content( $payment_id = 0, $payment_data = array() )
181
  * @return string $email_body Body of the email
182
  */
183
  function edd_get_sale_notification_body_content( $payment_id = 0, $payment_data = array() ) {
184
- $payment = edd_get_payment( $payment_id );
 
185
 
186
- if( $payment->user_id > 0 ) {
187
- $user_data = get_userdata( $payment->user_id );
188
  $name = $user_data->display_name;
189
- } elseif( ! empty( $payment->first_name ) && ! empty( $payment->last_name ) ) {
190
- $name = $payment->first_name . ' ' . $payment->last_name;
191
  } else {
192
- $name = $payment->email;
193
  }
194
 
195
  $download_list = '';
196
-
197
- if( is_array( $payment->downloads ) ) {
198
- foreach( $payment->downloads as $item ) {
199
- $download = new EDD_Download( $item['id'] );
200
- $title = $download->get_name();
201
- if( isset( $item['options'] ) ) {
202
- if( isset( $item['options']['price_id'] ) ) {
203
- $title .= ' - ' . edd_get_price_option_name( $item['id'], $item['options']['price_id'], $payment_id );
 
204
  }
205
  }
206
  $download_list .= html_entity_decode( $title, ENT_COMPAT, 'UTF-8' ) . "\n";
207
  }
208
  }
209
 
210
- $gateway = edd_get_gateway_admin_label( $payment->gateway );
211
 
212
  $default_email_body = __( 'Hello', 'easy-digital-downloads' ) . "\n\n" . sprintf( __( 'A %s purchase has been made', 'easy-digital-downloads' ), edd_get_label_plural() ) . ".\n\n";
213
  $default_email_body .= sprintf( __( '%s sold:', 'easy-digital-downloads' ), edd_get_label_plural() ) . "\n\n";
214
  $default_email_body .= $download_list . "\n\n";
215
  $default_email_body .= __( 'Purchased by: ', 'easy-digital-downloads' ) . " " . html_entity_decode( $name, ENT_COMPAT, 'UTF-8' ) . "\n";
216
- $default_email_body .= __( 'Amount: ', 'easy-digital-downloads' ) . " " . html_entity_decode( edd_currency_filter( edd_format_amount( $payment->total ) ), ENT_COMPAT, 'UTF-8' ) . "\n";
217
  $default_email_body .= __( 'Payment Method: ', 'easy-digital-downloads' ) . " " . $gateway . "\n\n";
218
  $default_email_body .= __( 'Thank you', 'easy-digital-downloads' );
219
 
220
- $message = edd_get_option( 'sale_notification', false );
221
- $message = $message ? stripslashes( $message ) : $default_email_body;
222
 
223
  //$email_body = edd_email_template_tags( $email, $payment_data, $payment_id, true );
224
- $email_body = edd_do_email_tags( $message, $payment_id );
225
 
226
  $email_body = apply_filters( 'edd_email_template_wpautop', true ) ? wpautop( $email_body ) : $email_body;
227
 
115
  <?php
116
  echo ob_get_clean();
117
  }
118
+ add_action( 'edd_email_settings', 'edd_email_template_preview' );
119
 
120
  /**
121
  * Displays the email preview
138
  }
139
 
140
 
141
+ EDD()->emails->heading = __( 'Purchase Receipt', 'easy-digital-downloads' );
142
 
143
  echo EDD()->emails->build_email( edd_email_preview_template_tags( edd_get_email_body_content( 0, array() ) ) );
144
 
181
  * @return string $email_body Body of the email
182
  */
183
  function edd_get_sale_notification_body_content( $payment_id = 0, $payment_data = array() ) {
184
+ $user_info = maybe_unserialize( $payment_data['user_info'] );
185
+ $email = edd_get_payment_user_email( $payment_id );
186
 
187
+ if( isset( $user_info['id'] ) && $user_info['id'] > 0 ) {
188
+ $user_data = get_userdata( $user_info['id'] );
189
  $name = $user_data->display_name;
190
+ } elseif( isset( $user_info['first_name'] ) && isset( $user_info['last_name'] ) ) {
191
+ $name = $user_info['first_name'] . ' ' . $user_info['last_name'];
192
  } else {
193
+ $name = $email;
194
  }
195
 
196
  $download_list = '';
197
+ $downloads = maybe_unserialize( $payment_data['downloads'] );
198
+
199
+ if( is_array( $downloads ) ) {
200
+ foreach( $downloads as $download ) {
201
+ $id = isset( $payment_data['cart_details'] ) ? $download['id'] : $download;
202
+ $title = get_the_title( $id );
203
+ if( isset( $download['options'] ) ) {
204
+ if( isset( $download['options']['price_id'] ) ) {
205
+ $title .= ' - ' . edd_get_price_option_name( $id, $download['options']['price_id'], $payment_id );
206
  }
207
  }
208
  $download_list .= html_entity_decode( $title, ENT_COMPAT, 'UTF-8' ) . "\n";
209
  }
210
  }
211
 
212
+ $gateway = edd_get_gateway_admin_label( edd_get_payment_meta( $payment_id, '_edd_payment_gateway', true ) );
213
 
214
  $default_email_body = __( 'Hello', 'easy-digital-downloads' ) . "\n\n" . sprintf( __( 'A %s purchase has been made', 'easy-digital-downloads' ), edd_get_label_plural() ) . ".\n\n";
215
  $default_email_body .= sprintf( __( '%s sold:', 'easy-digital-downloads' ), edd_get_label_plural() ) . "\n\n";
216
  $default_email_body .= $download_list . "\n\n";
217
  $default_email_body .= __( 'Purchased by: ', 'easy-digital-downloads' ) . " " . html_entity_decode( $name, ENT_COMPAT, 'UTF-8' ) . "\n";
218
+ $default_email_body .= __( 'Amount: ', 'easy-digital-downloads' ) . " " . html_entity_decode( edd_currency_filter( edd_format_amount( edd_get_payment_amount( $payment_id ) ) ), ENT_COMPAT, 'UTF-8' ) . "\n";
219
  $default_email_body .= __( 'Payment Method: ', 'easy-digital-downloads' ) . " " . $gateway . "\n\n";
220
  $default_email_body .= __( 'Thank you', 'easy-digital-downloads' );
221
 
222
+ $email = edd_get_option( 'sale_notification', false );
223
+ $email = $email ? stripslashes( $email ) : $default_email_body;
224
 
225
  //$email_body = edd_email_template_tags( $email, $payment_data, $payment_id, true );
226
+ $email_body = edd_do_email_tags( $email, $payment_id );
227
 
228
  $email_body = apply_filters( 'edd_email_template_wpautop', true ) ? wpautop( $email_body ) : $email_body;
229
 
includes/error-tracking.php CHANGED
@@ -27,25 +27,16 @@ if ( ! defined( 'ABSPATH' ) ) exit;
27
  function edd_print_errors() {
28
  $errors = edd_get_errors();
29
  if ( $errors ) {
30
-
31
  $classes = apply_filters( 'edd_error_class', array(
32
  'edd_errors', 'edd-alert', 'edd-alert-error'
33
  ) );
34
-
35
- if ( ! empty( $errors ) ) {
36
- echo '<div class="' . implode( ' ', $classes ) . '">';
37
- // Loop error codes and display errors
38
- foreach ( $errors as $error_id => $error ) {
39
-
40
- echo '<p class="edd_error" id="edd_error_' . $error_id . '"><strong>' . __( 'Error', 'easy-digital-downloads' ) . '</strong>: ' . $error . '</p>';
41
-
42
- }
43
-
44
- echo '</div>';
45
- }
46
-
47
  edd_clear_errors();
48
-
49
  }
50
  }
51
  add_action( 'edd_purchase_form_before_submit', 'edd_print_errors' );
@@ -63,9 +54,7 @@ add_action( 'edd_print_errors', 'edd_print_errors' );
63
  * @return mixed array if errors are present, false if none found
64
  */
65
  function edd_get_errors() {
66
- $errors = EDD()->session->get( 'edd_errors' );
67
- $errors = apply_filters( 'edd_errors', $errors );
68
- return $errors;
69
  }
70
 
71
  /**
27
  function edd_print_errors() {
28
  $errors = edd_get_errors();
29
  if ( $errors ) {
 
30
  $classes = apply_filters( 'edd_error_class', array(
31
  'edd_errors', 'edd-alert', 'edd-alert-error'
32
  ) );
33
+ echo '<div class="' . implode( ' ', $classes ) . '">';
34
+ // Loop error codes and display errors
35
+ foreach ( $errors as $error_id => $error ) {
36
+ echo '<p class="edd_error" id="edd_error_' . $error_id . '"><strong>' . __( 'Error', 'easy-digital-downloads' ) . '</strong>: ' . $error . '</p>';
37
+ }
38
+ echo '</div>';
 
 
 
 
 
 
 
39
  edd_clear_errors();
 
40
  }
41
  }
42
  add_action( 'edd_purchase_form_before_submit', 'edd_print_errors' );
54
  * @return mixed array if errors are present, false if none found
55
  */
56
  function edd_get_errors() {
57
+ return EDD()->session->get( 'edd_errors' );
 
 
58
  }
59
 
60
  /**
includes/gateways/amazon-payments.php CHANGED
@@ -161,9 +161,6 @@ final class EDD_Amazon_Payments {
161
  add_filter( 'edd_accepted_payment_icons', array( $this, 'register_payment_icon' ), 10, 1 );
162
  add_filter( 'edd_show_gateways', array( $this, 'maybe_hide_gateway_select' ) );
163
 
164
- // Since the Amazon Gateway loads scripts on page, it needs the scripts to load in the header.
165
- add_filter( 'edd_load_scripts_in_footer', '__return_false' );
166
-
167
  if ( is_admin() ) {
168
  add_filter( 'edd_settings_sections_gateways', array( $this, 'register_gateway_section' ), 1, 1 );
169
  add_filter( 'edd_settings_gateways', array( $this, 'register_gateway_settings' ), 1, 1 );
161
  add_filter( 'edd_accepted_payment_icons', array( $this, 'register_payment_icon' ), 10, 1 );
162
  add_filter( 'edd_show_gateways', array( $this, 'maybe_hide_gateway_select' ) );
163
 
 
 
 
164
  if ( is_admin() ) {
165
  add_filter( 'edd_settings_sections_gateways', array( $this, 'register_gateway_section' ), 1, 1 );
166
  add_filter( 'edd_settings_gateways', array( $this, 'register_gateway_settings' ), 1, 1 );
includes/gateways/paypal-standard.php CHANGED
@@ -58,30 +58,17 @@ function edd_register_paypal_gateway_settings( $gateway_settings ) {
58
  'type' => 'text',
59
  'size' => 'regular',
60
  ),
61
- 'paypal_image_url' => array(
62
- 'id' => 'paypal_image_url',
63
- 'name' => __( 'PayPal Image URL', 'easy-digital-downloads' ),
64
- 'desc' => __( 'Upload an image to display on the PayPal checkout page.', 'easy-digital-downloads' ),
65
- 'type' => 'upload',
66
  'size' => 'regular',
67
  ),
68
  );
69
 
70
- $pdt_desc = sprintf(
71
- __( 'Enter your PayPal Identity Token in order to enable Payment Data Transfer (PDT). This allows payments to be verified without relying on the PayPal IPN. See our <a href="%s" target="_blank">documentation</a> for further information.', 'easy-digital-downloads' ),
72
- 'http://docs.easydigitaldownloads.com/article/918-paypal-standard'
73
- );
74
-
75
- $paypal_settings['paypal_identify_token'] = array(
76
- 'id' => 'paypal_identity_token',
77
- 'name' => __( 'PayPal Identity Token', 'easy-digital-downloads' ),
78
- 'type' => 'text',
79
- 'desc' => $pdt_desc,
80
- 'size' => 'regular',
81
- );
82
-
83
  $disable_ipn_desc = sprintf(
84
- __( 'If you are unable to use Payment Data Transfer and payments are not getting marked as complete, then check this box. This forces the site to use a slightly less secure method of verifying purchases. See our <a href="%s" target="_blank">FAQ</a> for further information.', 'easy-digital-downloads' ),
85
  'http://docs.easydigitaldownloads.com/article/190-payments-not-marked-as-complete'
86
  );
87
 
@@ -224,7 +211,7 @@ function edd_process_paypal_purchase( $purchase_data ) {
224
  'return' => $return_url,
225
  'cancel_return' => edd_get_failed_transaction_uri( '?payment-id=' . $payment ),
226
  'notify_url' => $listener_url,
227
- 'image_url' => edd_get_paypal_image_url(),
228
  'cbt' => get_bloginfo( 'name' ),
229
  'bn' => 'EasyDigitalDownloads_SP'
230
  );
@@ -299,8 +286,6 @@ function edd_process_paypal_purchase( $purchase_data ) {
299
 
300
  $paypal_args = apply_filters( 'edd_paypal_redirect_args', $paypal_args, $purchase_data );
301
 
302
- edd_debug_log( 'PayPal arguments: ' . print_r( $paypal_args, true ) );
303
-
304
  // Build query
305
  $paypal_redirect .= http_build_query( $paypal_args );
306
 
@@ -324,9 +309,6 @@ add_action( 'edd_gateway_paypal', 'edd_process_paypal_purchase' );
324
  function edd_listen_for_paypal_ipn() {
325
  // Regular PayPal IPN
326
  if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] == 'IPN' ) {
327
-
328
- edd_debug_log( 'PayPal IPN endpoint loaded' );
329
-
330
  do_action( 'edd_verify_paypal_ipn' );
331
  }
332
  }
@@ -344,8 +326,6 @@ function edd_process_paypal_ipn() {
344
  return;
345
  }
346
 
347
- edd_debug_log( 'edd_process_paypal_ipn() running during PayPal IPN processing' );
348
-
349
  // Set initial post data to empty string
350
  $post_data = '';
351
 
@@ -395,19 +375,6 @@ function edd_process_paypal_ipn() {
395
 
396
  }
397
 
398
- /**
399
- * PayPal Web IPN Verification
400
- *
401
- * Allows filtering the IPN Verification data that PayPal passes back in via IPN with PayPal Standard
402
- *
403
- * @since 2.8.13
404
- *
405
- * @param array $data The PayPal Web Accept Data
406
- */
407
- $encoded_data_array = apply_filters( 'edd_process_paypal_ipn_data', $encoded_data_array );
408
-
409
- edd_debug_log( 'encoded_data_array data array: ' . print_r( $encoded_data_array, true ) );
410
-
411
  if ( ! edd_get_option( 'disable_paypal_verification' ) ) {
412
 
413
  // Validate the IPN
@@ -430,26 +397,21 @@ function edd_process_paypal_ipn() {
430
  'body' => $encoded_data_array
431
  );
432
 
433
- edd_debug_log( 'Attempting to verify PayPal IPN. Data sent for verification: ' . print_r( $remote_post_vars, true ) );
434
-
435
  // Get response
436
  $api_response = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
437
 
438
  if ( is_wp_error( $api_response ) ) {
439
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
440
- edd_debug_log( 'Invalid IPN verification response. IPN data: ' . print_r( $api_response, true ) );
441
 
442
  return; // Something went wrong
443
  }
444
 
445
  if ( wp_remote_retrieve_body( $api_response ) !== 'VERIFIED' && edd_get_option( 'disable_paypal_verification', false ) ) {
446
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
447
- edd_debug_log( 'Invalid IPN verification response. IPN data: ' . print_r( $api_response, true ) );
448
 
449
  return; // Response not okay
450
  }
451
 
452
- edd_debug_log( 'IPN verified successfully' );
453
  }
454
 
455
  // Check if $post_data_array has been populated
@@ -495,19 +457,6 @@ add_action( 'edd_verify_paypal_ipn', 'edd_process_paypal_ipn' );
495
  * @return void
496
  */
497
  function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
498
-
499
- /**
500
- * PayPal Web Accept Data
501
- *
502
- * Allows filtering the Web Accept data that PayPal passes back in via IPN with PayPal Standard
503
- *
504
- * @since 2.8.13
505
- *
506
- * @param array $data The PayPal Web Accept Data
507
- * @param int $payment_id The Payment ID associated with this IPN request
508
- */
509
- $data = apply_filters( 'edd_paypal_web_accept_and_cart_data', $data, $payment_id );
510
-
511
  if ( $data['txn_type'] != 'web_accept' && $data['txn_type'] != 'cart' && $data['payment_status'] != 'Refunded' ) {
512
  return;
513
  }
@@ -533,7 +482,6 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
533
  // Verify payment recipient
534
  if ( strcasecmp( $business_email, trim( edd_get_option( 'paypal_email', false ) ) ) != 0 ) {
535
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid business email in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
536
- edd_debug_log( 'Invalid business email in IPN response. IPN data: ' . print_r( $data, true ) );
537
  edd_update_payment_status( $payment_id, 'failed' );
538
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid PayPal business email.', 'easy-digital-downloads' ) );
539
  return;
@@ -543,7 +491,6 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
543
  if ( $currency_code != strtolower( $payment->currency ) ) {
544
 
545
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid currency in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
546
- edd_debug_log( 'Invalid currency in IPN response. IPN data: ' . print_r( $data, true ) );
547
  edd_update_payment_status( $payment_id, 'failed' );
548
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid currency in PayPal IPN.', 'easy-digital-downloads' ) );
549
  return;
@@ -603,14 +550,12 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
603
  if ( number_format( (float) $paypal_amount, 2 ) < number_format( (float) $payment_amount, 2 ) ) {
604
  // The prices don't match
605
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid payment amount in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
606
- edd_debug_log( 'Invalid payment amount in IPN response. IPN data: ' . printf( $data, true ) );
607
  edd_update_payment_status( $payment_id, 'failed' );
608
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid amount in PayPal IPN.', 'easy-digital-downloads' ) );
609
  return;
610
  }
611
  if ( $purchase_key != edd_get_payment_key( $payment_id ) ) {
612
  // Purchase keys don't match
613
- edd_debug_log( 'Invalid purchase key in IPN response. IPN data: ' . printf( $data, true ) );
614
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid purchase key in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
615
  edd_update_payment_status( $payment_id, 'failed' );
616
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid purchase key in PayPal IPN.', 'easy-digital-downloads' ) );
@@ -691,7 +636,6 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
691
 
692
  if( ! empty( $note ) ) {
693
 
694
- edd_debug_log( 'Payment not marked as completed because: ' . $note );
695
  edd_insert_payment_note( $payment_id, $note );
696
 
697
  }
@@ -710,19 +654,8 @@ add_action( 'edd_paypal_web_accept', 'edd_process_paypal_web_accept_and_cart', 1
710
  */
711
  function edd_process_paypal_refund( $data, $payment_id = 0 ) {
712
 
713
- /**
714
- * PayPal Process Refund Data
715
- *
716
- * Allows filtering the Refund data that PayPal passes back in via IPN with PayPal Standard
717
- *
718
- * @since 2.8.13
719
- *
720
- * @param array $data The PayPal Refund data
721
- * @param int $payment_id The Payment ID associated with this IPN request
722
- */
723
- $data = apply_filters( 'edd_process_paypal_refund_data', $data, $payment_id );
724
-
725
  // Collect payment details
 
726
  if( empty( $payment_id ) ) {
727
  return;
728
  }
@@ -796,18 +729,18 @@ function edd_get_paypal_redirect( $ssl_check = false, $ipn = false ) {
796
  }
797
 
798
  /**
799
- * Get the image for the PayPal purchase page.
800
  *
801
- * @since 2.8
802
  * @return string
803
  */
804
- function edd_get_paypal_image_url() {
805
- $image_url = trim( edd_get_option( 'paypal_image_url', '' ) );
806
- return apply_filters( 'edd_paypal_image_url', $image_url );
807
  }
808
 
809
  /**
810
- * Shows "Purchase Processing" message for PayPal payments are still pending on site return.
811
  *
812
  * This helps address the Race Condition, as detailed in issue #1839
813
  *
@@ -829,9 +762,9 @@ function edd_paypal_success_page_content( $content ) {
829
  $payment_id = edd_get_purchase_id_by_key( $session['purchase_key'] );
830
  }
831
 
832
- $payment = new EDD_Payment( $payment_id );
833
 
834
- if ( $payment->ID > 0 && 'pending' == $payment->status ) {
835
 
836
  // Payment is still pending so show processing indicator to fix the Race Condition, issue #
837
  ob_start();
@@ -847,90 +780,6 @@ function edd_paypal_success_page_content( $content ) {
847
  }
848
  add_filter( 'edd_payment_confirm_paypal', 'edd_paypal_success_page_content' );
849
 
850
- /**
851
- * Mark payment as complete on return from PayPal if a PayPal Identity Token is present.
852
- *
853
- * See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/6197
854
- *
855
- * @since 2.8.13
856
- * @return void
857
- */
858
- function edd_paypal_process_pdt_on_return() {
859
-
860
- if ( ! isset( $_GET['payment-id'] ) || ! isset( $_GET['tx'] ) ) {
861
- return;
862
- }
863
-
864
- $token = edd_get_option( 'paypal_identity_token' );
865
-
866
- if( ! edd_is_success_page() || ! $token || ! edd_is_gateway_active( 'paypal' ) ) {
867
- return;
868
- }
869
-
870
- $payment_id = isset( $_GET['payment-id'] ) ? absint( $_GET['payment-id'] ) : false;
871
-
872
- if( empty( $payment_id ) ) {
873
- return;
874
- }
875
-
876
- $payment = new EDD_Payment( $payment_id );
877
-
878
- if( $token && ! empty( $_GET['tx'] ) && $payment->ID > 0 ) {
879
-
880
- // An identity token has been provided in settings so let's immediately verify the purchase
881
-
882
- $remote_post_vars = array(
883
- 'method' => 'POST',
884
- 'timeout' => 45,
885
- 'redirection' => 5,
886
- 'httpversion' => '1.1',
887
- 'blocking' => true,
888
- 'headers' => array(
889
- 'host' => 'www.paypal.com',
890
- 'connection' => 'close',
891
- 'content-type' => 'application/x-www-form-urlencoded',
892
- 'post' => '/cgi-bin/webscr HTTP/1.1',
893
- 'user-agent' => 'EDD PDT Verification/' . EDD_VERSION . '; ' . get_bloginfo( 'url' )
894
-
895
- ),
896
- 'sslverify' => false,
897
- 'body' => array(
898
- 'tx' => sanitize_text_field( $_GET['tx'] ),
899
- 'at' => $token,
900
- 'cmd' => '_notify-synch',
901
- )
902
- );
903
-
904
- // Sanitize the data for debug logging.
905
- $debug_args = $remote_post_vars;
906
- $debug_args['body']['at'] = str_pad( substr( $debug_args['body']['at'], -6 ), strlen( $debug_args['body']['at'] ), '*', STR_PAD_LEFT );
907
- edd_debug_log( 'Attempting to verify PayPal payment with PDT. Args: ' . print_r( $debug_args, true ) );
908
-
909
- $request = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
910
-
911
- if ( ! is_wp_error( $request ) ) {
912
-
913
- $body = wp_remote_retrieve_body( $request );
914
-
915
- if( false !== strpos( $body, 'SUCCESS' ) ) {
916
-
917
- // Purchase verified, set to completed
918
- $payment->status = 'publish';
919
- $payment->transaction_id = sanitize_text_field( $_GET['tx'] );
920
- $payment->save();
921
-
922
- }
923
-
924
- } else {
925
-
926
- edd_debug_log( 'Attempt to verify PayPal payment with PDT failed. Request return: ' . print_r( $request, true ) );
927
-
928
- }
929
- }
930
-
931
- }
932
- add_action( 'template_redirect', 'edd_paypal_process_pdt_on_return' );
933
-
934
  /**
935
  * Given a Payment ID, extract the transaction ID
936
  *
58
  'type' => 'text',
59
  'size' => 'regular',
60
  ),
61
+ 'paypal_page_style' => array(
62
+ 'id' => 'paypal_page_style',
63
+ 'name' => __( 'PayPal Page Style', 'easy-digital-downloads' ),
64
+ 'desc' => __( 'Enter the name of the page style to use, or leave blank for default', 'easy-digital-downloads' ),
65
+ 'type' => 'text',
66
  'size' => 'regular',
67
  ),
68
  );
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  $disable_ipn_desc = sprintf(
71
+ __( 'If payments are not getting marked as complete, then check this box. This forces the site to use a slightly less secure method of verifying purchases. See our <a href="%s" target="_blank">FAQ</a> for further information.', 'easy-digital-downloads' ),
72
  'http://docs.easydigitaldownloads.com/article/190-payments-not-marked-as-complete'
73
  );
74
 
211
  'return' => $return_url,
212
  'cancel_return' => edd_get_failed_transaction_uri( '?payment-id=' . $payment ),
213
  'notify_url' => $listener_url,
214
+ 'page_style' => edd_get_paypal_page_style(),
215
  'cbt' => get_bloginfo( 'name' ),
216
  'bn' => 'EasyDigitalDownloads_SP'
217
  );
286
 
287
  $paypal_args = apply_filters( 'edd_paypal_redirect_args', $paypal_args, $purchase_data );
288
 
 
 
289
  // Build query
290
  $paypal_redirect .= http_build_query( $paypal_args );
291
 
309
  function edd_listen_for_paypal_ipn() {
310
  // Regular PayPal IPN
311
  if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] == 'IPN' ) {
 
 
 
312
  do_action( 'edd_verify_paypal_ipn' );
313
  }
314
  }
326
  return;
327
  }
328
 
 
 
329
  // Set initial post data to empty string
330
  $post_data = '';
331
 
375
 
376
  }
377
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  if ( ! edd_get_option( 'disable_paypal_verification' ) ) {
379
 
380
  // Validate the IPN
397
  'body' => $encoded_data_array
398
  );
399
 
 
 
400
  // Get response
401
  $api_response = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
402
 
403
  if ( is_wp_error( $api_response ) ) {
404
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
 
405
 
406
  return; // Something went wrong
407
  }
408
 
409
  if ( wp_remote_retrieve_body( $api_response ) !== 'VERIFIED' && edd_get_option( 'disable_paypal_verification', false ) ) {
410
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
 
411
 
412
  return; // Response not okay
413
  }
414
 
 
415
  }
416
 
417
  // Check if $post_data_array has been populated
457
  * @return void
458
  */
459
  function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
460
  if ( $data['txn_type'] != 'web_accept' && $data['txn_type'] != 'cart' && $data['payment_status'] != 'Refunded' ) {
461
  return;
462
  }
482
  // Verify payment recipient
483
  if ( strcasecmp( $business_email, trim( edd_get_option( 'paypal_email', false ) ) ) != 0 ) {
484
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid business email in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
485
  edd_update_payment_status( $payment_id, 'failed' );
486
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid PayPal business email.', 'easy-digital-downloads' ) );
487
  return;
491
  if ( $currency_code != strtolower( $payment->currency ) ) {
492
 
493
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid currency in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
494
  edd_update_payment_status( $payment_id, 'failed' );
495
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid currency in PayPal IPN.', 'easy-digital-downloads' ) );
496
  return;
550
  if ( number_format( (float) $paypal_amount, 2 ) < number_format( (float) $payment_amount, 2 ) ) {
551
  // The prices don't match
552
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid payment amount in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
553
  edd_update_payment_status( $payment_id, 'failed' );
554
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid amount in PayPal IPN.', 'easy-digital-downloads' ) );
555
  return;
556
  }
557
  if ( $purchase_key != edd_get_payment_key( $payment_id ) ) {
558
  // Purchase keys don't match
 
559
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid purchase key in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
560
  edd_update_payment_status( $payment_id, 'failed' );
561
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid purchase key in PayPal IPN.', 'easy-digital-downloads' ) );
636
 
637
  if( ! empty( $note ) ) {
638
 
 
639
  edd_insert_payment_note( $payment_id, $note );
640
 
641
  }
654
  */
655
  function edd_process_paypal_refund( $data, $payment_id = 0 ) {
656
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  // Collect payment details
658
+
659
  if( empty( $payment_id ) ) {
660
  return;
661
  }
729
  }
730
 
731
  /**
732
+ * Set the Page Style for PayPal Purchase page
733
  *
734
+ * @since 1.4.1
735
  * @return string
736
  */
737
+ function edd_get_paypal_page_style() {
738
+ $page_style = trim( edd_get_option( 'paypal_page_style', 'PayPal' ) );
739
+ return apply_filters( 'edd_paypal_page_style', $page_style );
740
  }
741
 
742
  /**
743
+ * Shows "Purchase Processing" message for PayPal payments are still pending on site return
744
  *
745
  * This helps address the Race Condition, as detailed in issue #1839
746
  *
762
  $payment_id = edd_get_purchase_id_by_key( $session['purchase_key'] );
763
  }
764
 
765
+ $payment = get_post( $payment_id );
766
 
767
+ if ( $payment && 'pending' == $payment->post_status ) {
768
 
769
  // Payment is still pending so show processing indicator to fix the Race Condition, issue #
770
  ob_start();
780
  }
781
  add_filter( 'edd_payment_confirm_paypal', 'edd_paypal_success_page_content' );
782
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  /**
784
  * Given a Payment ID, extract the transaction ID
785
  *
includes/libraries/array2xml.php CHANGED
@@ -27,10 +27,6 @@ class Array2XML {
27
  * @return DomDocument
28
  */
29
  public static function &createXML($node_name, $arr=array()) {
30
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
31
- _edd_deprecated_function( 'array2xml::createXML', '2.8.11', 'ArrayToXML::buildXML' );
32
- }
33
-
34
  $xml = self::getXMLRoot();
35
  $xml->appendChild(self::convert($node_name, $arr));
36
 
27
  * @return DomDocument
28
  */
29
  public static function &createXML($node_name, $arr=array()) {
 
 
 
 
30
  $xml = self::getXMLRoot();
31
  $xml->appendChild(self::convert($node_name, $arr));
32
 
includes/libraries/class-ArrayToXML.php DELETED
@@ -1,134 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Based on: http://stackoverflow.com/questions/99350/passing-php-associative-arrays-to-and-from-xml
5
- */
6
- class ArrayToXML
7
- {
8
- private $version;
9
- private $encoding;
10
-
11
- /**
12
- * Construct ArrayToXML object with selected version and encoding
13
- *
14
- * for available values check XmlWriter docs http://www.php.net/manual/en/function.xmlwriter-start-document.php
15
- * @param string $xmlVersion XML Version, default 1.0
16
- * @param string $xmlEncoding XML Encoding, default UTF-8
17
- */
18
- public function __construct($xmlVersion = '1.0', $xmlEncoding = 'UTF-8')
19
- {
20
- $this->version = $xmlVersion;
21
- $this->encoding = $xmlEncoding;
22
- }
23
-
24
- /**
25
- * Build an XML Data Set
26
- *
27
- * @param array $data Associative Array containing values to be parsed into an XML Data Set(s)
28
- * @param string $startElement Root Opening Tag, default data
29
- * @return string XML String containing values
30
- * @return mixed Boolean false on failure, string XML result on success
31
- */
32
- public function buildXML($data, $startElement = 'data')
33
- {
34
- if (!is_array($data)) {
35
- $err = 'Invalid variable type supplied, expected array not found on line ' . __LINE__ . ' in Class: ' . __CLASS__ . ' Method: ' . __METHOD__;
36
- trigger_error($err);
37
- return false; //return false error occurred
38
- }
39
- $xml = new XmlWriter();
40
- $xml->openMemory();
41
- $xml->startDocument($this->version, $this->encoding);
42
- $xml->startElement($startElement);
43
-
44
- $data = $this->writeAttr($xml, $data);
45
- $this->writeEl($xml, $data);
46
-
47
- $xml->endElement(); //write end element
48
- //returns the XML results
49
- return $xml->outputMemory(true);
50
- }
51
-
52
- /**
53
- * Write keys in $data prefixed with @ as XML attributes, if $data is an array.
54
- * When an @ prefixed key is found, a '%' key is expected to indicate the element itself,
55
- * and '#' prefixed key indicates CDATA content
56
- *
57
- * @param XMLWriter $xml object
58
- * @param array $data with attributes filtered out
59
- * @return array $data | $nonAttributes
60
- */
61
- protected function writeAttr(XMLWriter $xml, $data)
62
- {
63
- if (is_array($data)) {
64
- $nonAttributes = array();
65
- foreach ($data as $key => $val) {
66
- //handle an attribute with elements
67
- if ($key[0] == '@') {
68
- $xml->writeAttribute(substr($key, 1), $val);
69
- } else if ($key[0] == '%') {
70
- if (is_array($val)) $nonAttributes = $val;
71
- else $xml->text($val);
72
- } elseif ($key[0] == '#') {
73
- if (is_array($val)) $nonAttributes = $val;
74
- else {
75
- $xml->startElement(substr($key, 1));
76
- $xml->writeCData($val);
77
- $xml->endElement();
78
- }
79
- }else if($key[0] == "!"){
80
- if (is_array($val)) $nonAttributes = $val;
81
- else $xml->writeCData($val);
82
- }
83
- //ignore normal elements
84
- else $nonAttributes[$key] = $val;
85
- }
86
- return $nonAttributes;
87
- } else return $data;
88
- }
89
-
90
- /**
91
- * Write XML as per Associative Array
92
- *
93
- * @param XMLWriter $xml object
94
- * @param array $data Associative Data Array
95
- */
96
- protected function writeEl(XMLWriter $xml, $data)
97
- {
98
- foreach ($data as $key => $value) {
99
- if (is_array($value) && !$this->isAssoc($value)) { //numeric array
100
- foreach ($value as $itemValue) {
101
- if (is_array($itemValue)) {
102
- $xml->startElement($key);
103
- $itemValue = $this->writeAttr($xml, $itemValue);
104
- $this->writeEl($xml, $itemValue);
105
- $xml->endElement();
106
- } else {
107
- $itemValue = $this->writeAttr($xml, $itemValue);
108
- $xml->writeElement($key, "$itemValue");
109
- }
110
- }
111
- } else if (is_array($value)) { //associative array
112
- $xml->startElement($key);
113
- $value = $this->writeAttr($xml, $value);
114
- $this->writeEl($xml, $value);
115
- $xml->endElement();
116
- } else { //scalar
117
- $value = $this->writeAttr($xml, $value);
118
- $xml->writeElement($key, "$value");
119
- }
120
- }
121
- }
122
-
123
- /**
124
- * Check if array is associative with string based keys
125
- * FROM: http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check-if-an-array-is-associative-or-sequential/4254008#4254008
126
- *
127
- * @param array $array Array to check
128
- * @return bool
129
- */
130
- protected function isAssoc($array)
131
- {
132
- return (bool)count(array_filter(array_keys($array), 'is_string'));
133
- }
134
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/login-register.php CHANGED
@@ -55,7 +55,9 @@ function edd_register_form( $redirect = '' ) {
55
 
56
  ob_start();
57
 
58
- edd_get_template_part( 'shortcode', 'register' );
 
 
59
 
60
  return apply_filters( 'edd_register_form', ob_get_clean() );
61
  }
@@ -79,13 +81,13 @@ function edd_process_login_form( $data ) {
79
 
80
  if ( wp_check_password( $data['edd_user_pass'], $user_data->user_pass, $user_data->ID ) ) {
81
 
82
- if ( isset( $data['rememberme'] ) ) {
83
- $data['rememberme'] = true;
84
  } else {
85
- $data['rememberme'] = false;
86
  }
87
 
88
- edd_log_user_in( $user_data->ID, $data['edd_user_login'], $data['edd_user_pass'], $data['rememberme'] );
89
  } else {
90
  edd_set_error( 'password_incorrect', __( 'The password you entered is incorrect', 'easy-digital-downloads' ) );
91
  }
55
 
56
  ob_start();
57
 
58
+ if( ! is_user_logged_in() ) {
59
+ edd_get_template_part( 'shortcode', 'register' );
60
+ }
61
 
62
  return apply_filters( 'edd_register_form', ob_get_clean() );
63
  }
81
 
82
  if ( wp_check_password( $data['edd_user_pass'], $user_data->user_pass, $user_data->ID ) ) {
83
 
84
+ if ( isset( $data['remember'] ) ) {
85
+ $data['remember'] = true;
86
  } else {
87
+ $data['remember'] = false;
88
  }
89
 
90
+ edd_log_user_in( $user_data->ID, $data['edd_user_login'], $data['edd_user_pass'], $data['remember'] );
91
  } else {
92
  edd_set_error( 'password_incorrect', __( 'The password you entered is incorrect', 'easy-digital-downloads' ) );
93
  }
includes/misc-functions.php CHANGED
@@ -23,20 +23,6 @@ function edd_is_test_mode() {
23
  return (bool) apply_filters( 'edd_is_test_mode', $ret );
24
  }
25
 
26
- /**
27
- * Is Debug Mode
28
- *
29
- * @since 2.8.7
30
- * @return bool $ret True if debug mode is enabled, false otherwise
31
- */
32
- function edd_is_debug_mode() {
33
- $ret = edd_get_option( 'debug_mode', false );
34
- if( defined( 'EDD_DEBUG_MODE' ) && EDD_DEBUG_MODE ) {
35
- $ret = true;
36
- }
37
- return (bool) apply_filters( 'edd_is_debug_mode', $ret );
38
- }
39
-
40
  /**
41
  * Checks if Guest checkout is enabled
42
  *
@@ -183,9 +169,7 @@ function edd_get_ip() {
183
  $ip = $_SERVER['HTTP_CLIENT_IP'];
184
  } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
185
  //to check ip is pass from proxy
186
- // can include more than 1 ip, first is the public one
187
- $ip = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
188
- $ip = trim($ip[0]);
189
  } elseif( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
190
  $ip = $_SERVER['REMOTE_ADDR'];
191
  }
@@ -343,8 +327,7 @@ function edd_get_currencies() {
343
  'INR' => __( 'Indian Rupee (&#8377;)', 'easy-digital-downloads' ),
344
  'TRY' => __( 'Turkish Lira (&#8378;)', 'easy-digital-downloads' ),
345
  'RIAL' => __( 'Iranian Rial (&#65020;)', 'easy-digital-downloads' ),
346
- 'RUB' => __( 'Russian Rubles', 'easy-digital-downloads' ),
347
- 'AOA' => __( 'Angolan Kwanza', 'easy-digital-downloads' ),
348
  );
349
 
350
  return apply_filters( 'edd_currencies', $currencies );
@@ -396,9 +379,6 @@ function edd_currency_symbol( $currency = '' ) {
396
  case "JPY" :
397
  $symbol = '&yen;';
398
  break;
399
- case "AOA" :
400
- $symbol = 'Kz';
401
- break;
402
  default :
403
  $symbol = $currency;
404
  break;
@@ -610,7 +590,7 @@ function edd_is_func_disabled( $function ) {
610
  * @author Chris Christoff
611
  *
612
  * @param unknown $v
613
- * @return int
614
  */
615
  function edd_let_to_num( $v ) {
616
  $l = substr( $v, -1 );
@@ -628,7 +608,7 @@ function edd_let_to_num( $v ) {
628
  break;
629
  }
630
 
631
- return (int) $ret;
632
  }
633
 
634
  /**
@@ -676,11 +656,19 @@ function edd_get_upload_dir() {
676
  /**
677
  * Delete symbolic links after they have been used
678
  *
 
 
679
  * @access public
680
  * @since 1.5
681
  * @return void
682
  */
683
  function edd_cleanup_file_symlinks() {
 
 
 
 
 
 
684
  $path = edd_get_symlink_dir();
685
  $dir = opendir( $path );
686
 
@@ -899,7 +887,7 @@ if ( ! function_exists( 'getallheaders' ) ) :
899
  * @return array
900
  */
901
  function getallheaders() {
902
- $headers = array();
903
  foreach ( $_SERVER as $name => $value ) {
904
  if ( substr( $name, 0, 5 ) == 'HTTP_' ) {
905
  $headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
@@ -950,3 +938,28 @@ function edd_can_view_receipt( $payment_key = '' ) {
950
 
951
  return (bool) apply_filters( 'edd_can_view_receipt', $return, $payment_key );
952
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  return (bool) apply_filters( 'edd_is_test_mode', $ret );
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Checks if Guest checkout is enabled
28
  *
169
  $ip = $_SERVER['HTTP_CLIENT_IP'];
170
  } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
171
  //to check ip is pass from proxy
172
+ $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
 
 
173
  } elseif( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
174
  $ip = $_SERVER['REMOTE_ADDR'];
175
  }
327
  'INR' => __( 'Indian Rupee (&#8377;)', 'easy-digital-downloads' ),
328
  'TRY' => __( 'Turkish Lira (&#8378;)', 'easy-digital-downloads' ),
329
  'RIAL' => __( 'Iranian Rial (&#65020;)', 'easy-digital-downloads' ),
330
+ 'RUB' => __( 'Russian Rubles', 'easy-digital-downloads' )
 
331
  );
332
 
333
  return apply_filters( 'edd_currencies', $currencies );
379
  case "JPY" :
380
  $symbol = '&yen;';
381
  break;
 
 
 
382
  default :
383
  $symbol = $currency;
384
  break;
590
  * @author Chris Christoff
591
  *
592
  * @param unknown $v
593
+ * @return int|string
594
  */
595
  function edd_let_to_num( $v ) {
596
  $l = substr( $v, -1 );
608
  break;
609
  }
610
 
611
+ return $ret;
612
  }
613
 
614
  /**
656
  /**
657
  * Delete symbolic links after they have been used
658
  *
659
+ * This function is only intended to be used by WordPress cron.
660
+ *
661
  * @access public
662
  * @since 1.5
663
  * @return void
664
  */
665
  function edd_cleanup_file_symlinks() {
666
+
667
+ // Bail if not in WordPress cron
668
+ if ( ! edd_doing_cron() ) {
669
+ return;
670
+ }
671
+
672
  $path = edd_get_symlink_dir();
673
  $dir = opendir( $path );
674
 
887
  * @return array
888
  */
889
  function getallheaders() {
890
+ $headers = '';
891
  foreach ( $_SERVER as $name => $value ) {
892
  if ( substr( $name, 0, 5 ) == 'HTTP_' ) {
893
  $headers[ str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) ) ] = $value;
938
 
939
  return (bool) apply_filters( 'edd_can_view_receipt', $return, $payment_key );
940
  }
941
+
942
+ /**
943
+ * Abstraction for WordPress cron checking, to avoid code duplication.
944
+ *
945
+ * In future versions of EDD, this function will be changed to only refer to
946
+ * EDD specific cron related jobs. You probably won't want to use it until then.
947
+ *
948
+ * @since 2.8.16
949
+ *
950
+ * @return boolean
951
+ */
952
+ function edd_doing_cron() {
953
+
954
+ // Bail if not doing WordPress cron (>4.8.0)
955
+ if ( function_exists( 'wp_doing_cron' ) && wp_doing_cron() ) {
956
+ return true;
957
+
958
+ // Bail if not doing WordPress cron (<4.8.0)
959
+ } elseif ( defined( 'DOING_CRON' ) && ( true === DOING_CRON ) ) {
960
+ return true;
961
+ }
962
+
963
+ // Default to false
964
+ return false;
965
+ }
includes/payments/actions.php CHANGED
@@ -121,33 +121,7 @@ function edd_complete_purchase( $payment_id, $new_status, $old_status ) {
121
  $payment->completed_date = current_time( 'mysql' );
122
  $payment->save();
123
 
124
- /**
125
- * Runs **when** a purchase is marked as "complete".
126
- *
127
- * @since 2.8 - Added EDD_Payment and EDD_Customer object to action.
128
- *
129
- * @param int $payment_id Payment ID.
130
- * @param EDD_Payment $payment EDD_Payment object containing all payment data.
131
- * @param EDD_Customer $customer EDD_Customer object containing all customer data.
132
- */
133
- do_action( 'edd_complete_purchase', $payment_id, $payment, $customer );
134
-
135
- // If cron doesn't work on a site, allow the filter to use __return_false and run the events immediately.
136
- $use_cron = apply_filters( 'edd_use_after_payment_actions', true, $payment_id );
137
- if ( false === $use_cron ) {
138
- /**
139
- * Runs **after** a purchase is marked as "complete".
140
- *
141
- * @see edd_process_after_payment_actions()
142
- *
143
- * @since 2.8 - Added EDD_Payment and EDD_Customer object to action.
144
- *
145
- * @param int $payment_id Payment ID.
146
- * @param EDD_Payment $payment EDD_Payment object containing all payment data.
147
- * @param EDD_Customer $customer EDD_Customer object containing all customer data.
148
- */
149
- do_action( 'edd_after_payment_actions', $payment_id, $payment, $customer );
150
- }
151
 
152
  }
153
 
@@ -156,49 +130,6 @@ function edd_complete_purchase( $payment_id, $new_status, $old_status ) {
156
  }
157
  add_action( 'edd_update_payment_status', 'edd_complete_purchase', 100, 3 );
158
 
159
- /**
160
- * Schedules the one time event via WP_Cron to fire after purchase actions.
161
- *
162
- * Is run on the edd_complete_purchase action.
163
- *
164
- * @since 2.8
165
- * @param $payment_id
166
- */
167
- function edd_schedule_after_payment_action( $payment_id ) {
168
- $use_cron = apply_filters( 'edd_use_after_payment_actions', true, $payment_id );
169
- if ( $use_cron ) {
170
- $after_payment_delay = apply_filters( 'edd_after_payment_actions_delay', 30, $payment_id );
171
-
172
- // Use time() instead of current_time( 'timestamp' ) to avoid scheduling the event in the past when server time
173
- // and WordPress timezone are different.
174
- wp_schedule_single_event( time() + $after_payment_delay, 'edd_after_payment_scheduled_actions', array( $payment_id, false ) );
175
- }
176
- }
177
- add_action( 'edd_complete_purchase', 'edd_schedule_after_payment_action', 10, 1 );
178
-
179
- /**
180
- * Executes the one time event used for after purchase actions.
181
- *
182
- * @since 2.8
183
- * @param $payment_id
184
- * @param $force
185
- */
186
- function edd_process_after_payment_actions( $payment_id = 0, $force = false ) {
187
- if ( empty( $payment_id ) ) {
188
- return;
189
- }
190
-
191
- $payment = new EDD_Payment( $payment_id );
192
- $has_fired = $payment->get_meta( '_edd_complete_actions_run' );
193
- if ( ! empty( $has_fired ) && false === $force ) {
194
- return;
195
- }
196
-
197
- $payment->add_note( __( 'After payment actions processed.', 'easy-digital-downloads' ) );
198
- $payment->update_meta( '_edd_complete_actions_run', time() ); // This is in GMT
199
- do_action( 'edd_after_payment_actions', $payment_id );
200
- }
201
- add_action( 'edd_after_payment_scheduled_actions', 'edd_process_after_payment_actions', 10, 1 );
202
 
203
  /**
204
  * Record payment status change
@@ -284,10 +215,18 @@ add_action( 'edd_upgrade_payments', 'edd_update_old_payments_with_totals' );
284
  /**
285
  * Updates week-old+ 'pending' orders to 'abandoned'
286
  *
 
 
287
  * @since 1.6
288
  * @return void
289
  */
290
  function edd_mark_abandoned_orders() {
 
 
 
 
 
 
291
  $args = array(
292
  'status' => 'pending',
293
  'number' => -1,
@@ -438,7 +377,16 @@ function edd_recover_payment() {
438
  return;
439
  }
440
 
441
- if ( is_user_logged_in() && $payment->user_id != get_current_user_id() ) {
 
 
 
 
 
 
 
 
 
442
  $redirect = get_permalink( edd_get_option( 'purchase_history_page' ) );
443
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
444
  wp_redirect( $redirect );
@@ -517,9 +465,8 @@ add_action( 'template_redirect', 'edd_recovery_user_mismatch' );
517
  function edd_recovery_force_login_fields() {
518
  $resuming_payment = EDD()->session->get( 'edd_resume_payment' );
519
  if ( $resuming_payment ) {
520
- $payment = new EDD_Payment( $resuming_payment );
521
- $requires_login = edd_no_guest_checkout();
522
- if ( ( $requires_login && ! is_user_logged_in() ) && ( $payment->user_id > 0 && ( ! is_user_logged_in() ) ) ) {
523
  ?>
524
  <div class="edd-alert edd-alert-info">
525
  <p><?php _e( 'To complete this payment, please login to your account.', 'easy-digital-downloads' ); ?></p>
@@ -551,11 +498,8 @@ add_action( 'edd_purchase_form_before_register_login', 'edd_recovery_force_login
551
  function edd_recovery_verify_logged_in( $verified_data, $post_data ) {
552
  $resuming_payment = EDD()->session->get( 'edd_resume_payment' );
553
  if ( $resuming_payment ) {
554
- $payment = new EDD_Payment( $resuming_payment );
555
- $same_user = ! empty( $payment->user_id ) && ( is_user_logged_in() && $payment->user_id == get_current_user_id() );
556
- $same_email = strtolower( $payment->email ) === strtolower( $post_data['edd_email'] );
557
-
558
- if ( ( is_user_logged_in() && ! $same_user ) || ( ! is_user_logged_in() && (int) $payment->user_id > 0 && ! $same_email ) ) {
559
  edd_set_error( 'recovery_requires_login', __( 'To complete this payment, please login to your account.', 'easy-digital-downloads' ) );
560
  }
561
  }
121
  $payment->completed_date = current_time( 'mysql' );
122
  $payment->save();
123
 
124
+ do_action( 'edd_complete_purchase', $payment_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
126
  }
127
 
130
  }
131
  add_action( 'edd_update_payment_status', 'edd_complete_purchase', 100, 3 );
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
  /**
135
  * Record payment status change
215
  /**
216
  * Updates week-old+ 'pending' orders to 'abandoned'
217
  *
218
+ * This function is only intended to be used by WordPress cron.
219
+ *
220
  * @since 1.6
221
  * @return void
222
  */
223
  function edd_mark_abandoned_orders() {
224
+
225
+ // Bail if not in WordPress cron
226
+ if ( ! edd_doing_cron() ) {
227
+ return;
228
+ }
229
+
230
  $args = array(
231
  'status' => 'pending',
232
  'number' => -1,
377
  return;
378
  }
379
 
380
+ if (
381
+ // Logged in, but wrong user ID
382
+ ( is_user_logged_in() && $payment->user_id != get_current_user_id() )
383
+
384
+ // ...OR...
385
+ ||
386
+
387
+ // Logged out, but payment is for a user
388
+ ( ! is_user_logged_in() && ! empty( $payment->user_id ) )
389
+ ) {
390
  $redirect = get_permalink( edd_get_option( 'purchase_history_page' ) );
391
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
392
  wp_redirect( $redirect );
465
  function edd_recovery_force_login_fields() {
466
  $resuming_payment = EDD()->session->get( 'edd_resume_payment' );
467
  if ( $resuming_payment ) {
468
+ $payment = new EDD_Payment( $resuming_payment );
469
+ if ( $payment->user_id > 0 && ( ! is_user_logged_in() ) ) {
 
470
  ?>
471
  <div class="edd-alert edd-alert-info">
472
  <p><?php _e( 'To complete this payment, please login to your account.', 'easy-digital-downloads' ); ?></p>
498
  function edd_recovery_verify_logged_in( $verified_data, $post_data ) {
499
  $resuming_payment = EDD()->session->get( 'edd_resume_payment' );
500
  if ( $resuming_payment ) {
501
+ $payment = new EDD_Payment( $resuming_payment );
502
+ if ( ! empty( $payment->user_id ) && ( ! is_user_logged_in() || $payment->user_id != get_current_user_id() ) ) {
 
 
 
503
  edd_set_error( 'recovery_requires_login', __( 'To complete this payment, please login to your account.', 'easy-digital-downloads' ) );
504
  }
505
  }
includes/payments/class-edd-payment.php CHANGED
@@ -97,14 +97,6 @@ class EDD_Payment {
97
  */
98
  protected $tax = 0;
99
 
100
- /**
101
- * The amount the payment has been discounted through discount codes
102
- *
103
- * @since 2.8.7
104
- * @var int
105
- */
106
- protected $discounted_amount = 0;
107
-
108
  /**
109
  * The tax rate charged on this payment
110
  *
@@ -565,19 +557,40 @@ class EDD_Payment {
565
  $this->ID = $payment_id;
566
  $this->_ID = $payment_id;
567
 
568
- $customer = $this->maybe_create_customer();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
569
 
570
  $this->customer_id = $customer->id;
571
  $this->pending['customer_id'] = $this->customer_id;
572
  $customer->attach_payment( $this->ID, false );
573
 
574
- /**
575
- * This run of the edd_payment_meta filter is for backwards compatibility purposes. The filter will also run in the EDD_Payment::save
576
- * method. By keeping this here, it retains compatbility of adding payment meta prior to the payment being inserted, as was previously supported
577
- * by edd_insert_payment().
578
- *
579
- * @reference: https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5838
580
- */
581
  $this->payment_meta = apply_filters( 'edd_payment_meta', $this->payment_meta, $payment_data );
582
  if ( ! empty( $this->payment_meta['fees'] ) ) {
583
  $this->fees = array_merge( $this->payment_meta['fees'], $this->fees );
@@ -628,14 +641,6 @@ class EDD_Payment {
628
  $this->ID = $this->_ID;
629
  }
630
 
631
- $customer = $this->maybe_create_customer();
632
- if ( $this->customer_id != $customer->id ) {
633
-
634
- $this->customer_id = $customer->id;
635
- $this->pending['customer_id'] = $this->customer_id;
636
-
637
- }
638
-
639
  // If we have something pending, let's save it
640
  if ( ! empty( $this->pending ) ) {
641
 
@@ -878,13 +883,10 @@ class EDD_Payment {
878
 
879
  case 'customer_id':
880
  $this->update_meta( '_edd_payment_customer_id', $this->customer_id );
881
- $customer = new EDD_Customer( $this->customer_id );
882
- $customer->attach_payment( $this->ID, false );
883
  break;
884
 
885
  case 'user_id':
886
  $this->update_meta( '_edd_payment_user_id', $this->user_id );
887
- $this->user_info['id'] = $this->user_id;
888
  break;
889
 
890
  case 'first_name':
@@ -1205,12 +1207,8 @@ class EDD_Payment {
1205
 
1206
  $download = new EDD_Download( $download_id );
1207
 
1208
- /**
1209
- * Bail if this post isn't a download post type.
1210
- *
1211
- * We need to allow this to process though for a missing post ID, in case it's a download that was deleted.
1212
- */
1213
- if( ! empty( $download->ID ) && $download->post_type !== 'download' ) {
1214
  return false;
1215
  }
1216
 
@@ -1407,15 +1405,14 @@ class EDD_Payment {
1407
  return false;
1408
  }
1409
 
1410
- // Format the item_price correctly now
1411
- $merged_item['item_price'] = edd_sanitize_amount( $merged_item['item_price'] );
 
1412
 
1413
- $new_subtotal = floatval( $merged_item['item_price'] ) * $merged_item['quantity'];
1414
- $merged_item['price'] = $new_subtotal + $merged_item['tax'];
1415
- $this->cart_details[ $cart_index ] = $merged_item;
1416
- $modified_download = $merged_item;
1417
- $modified_download['action'] = 'modify';
1418
- $modified_download['previous_data'] = $current_args;
1419
 
1420
  $this->pending['downloads'][] = $modified_download;
1421
 
@@ -1810,13 +1807,6 @@ class EDD_Payment {
1810
 
1811
  $meta = apply_filters( 'edd_get_payment_meta_' . $meta_key, $meta, $this->ID );
1812
 
1813
- if ( is_serialized( $meta ) ) {
1814
- preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $meta, $matches );
1815
- if ( ! empty( $matches ) ) {
1816
- $meta = array();
1817
- }
1818
- }
1819
-
1820
  return apply_filters( 'edd_get_payment_meta', $meta, $this->ID, $meta_key );
1821
  }
1822
 
@@ -1870,41 +1860,6 @@ class EDD_Payment {
1870
  return update_post_meta( $this->ID, $meta_key, $meta_value, $prev_value );
1871
  }
1872
 
1873
- /**
1874
- * Add an item to the payment meta
1875
- *
1876
- * @since 2.8
1877
- * @param string $meta_key
1878
- * @param string $meta_value
1879
- * @param bool $unique
1880
- *
1881
- * @return bool|false|int
1882
- */
1883
- public function add_meta( $meta_key = '', $meta_value = '', $unique = false ) {
1884
- if ( empty( $meta_key ) ) {
1885
- return false;
1886
- }
1887
-
1888
- return add_post_meta( $this->ID, $meta_key, $meta_value, $unique );
1889
- }
1890
-
1891
- /**
1892
- * Delete an item from payment meta
1893
- *
1894
- * @since 2.8
1895
- * @param string $meta_key
1896
- * @param string $meta_value
1897
- *
1898
- * @return bool
1899
- */
1900
- public function delete_meta( $meta_key = '', $meta_value = '' ) {
1901
- if ( empty( $meta_key ) ) {
1902
- return false;
1903
- }
1904
-
1905
- return delete_post_meta( $this->ID, $meta_key, $meta_value );
1906
- }
1907
-
1908
  /**
1909
  * Determines if this payment is able to be resumed by the user.
1910
  *
@@ -2326,7 +2281,7 @@ class EDD_Payment {
2326
  $user_id = $this->get_meta( '_edd_payment_user_id', true );
2327
  $customer = new EDD_Customer( $this->customer_id );
2328
 
2329
- // Make sure it exists, and that it matches that of the associated customer record
2330
  if( empty( $user_id ) || ( ! empty( $customer->user_id ) && (int) $user_id !== (int) $customer->user_id ) ) {
2331
 
2332
  $user_id = $customer->user_id;
@@ -2368,17 +2323,8 @@ class EDD_Payment {
2368
  'discount' => $this->discounts,
2369
  );
2370
 
2371
- $user_info = isset( $this->payment_meta['user_info'] ) ? $this->payment_meta['user_info'] : array();
2372
-
2373
- if ( is_serialized( $user_info ) ) {
2374
- preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $user_info, $matches );
2375
- if ( ! empty( $matches ) ) {
2376
- $user_info = array();
2377
- }
2378
- }
2379
-
2380
- // As per Github issue #4248, we need to run maybe_unserialize here still.
2381
- $user_info = wp_parse_args( maybe_unserialize( $user_info ), $defaults );
2382
 
2383
  // Ensure email index is in the old user info array
2384
  if( empty( $user_info['email'] ) ) {
@@ -2574,20 +2520,6 @@ class EDD_Payment {
2574
  return apply_filters( 'edd_payment_discounts', $this->discounts, $this->ID, $this );
2575
  }
2576
 
2577
- /**
2578
- * Return the discounted amount of the payment.
2579
- *
2580
- * @since 2.8.7
2581
- * @return float
2582
- */
2583
- private function get_discounted_amount() {
2584
- $total = $this->total;
2585
- $fees = $this->fees_total;
2586
- $tax = $this->tax;
2587
-
2588
- return floatval( apply_filters( 'edd_payment_discounted_amount', $total - ( $fees + $tax ), $this ) );
2589
- }
2590
-
2591
  /**
2592
  * Retrieve payment currency
2593
  *
@@ -2729,54 +2661,4 @@ class EDD_Payment {
2729
  return in_array( $this->status, $in_process_statuses );
2730
  }
2731
 
2732
- /**
2733
- * Determines if a customer needs to be created given the current payment details.
2734
- *
2735
- * @since 2.8.4
2736
- *
2737
- * @return EDD_Customer The customer object of the existing customer or new customer.
2738
- */
2739
- private function maybe_create_customer() {
2740
- $customer = new stdClass;
2741
-
2742
- if ( did_action( 'edd_pre_process_purchase' ) && is_user_logged_in() ) {
2743
-
2744
- $customer = new EDD_customer( get_current_user_id(), true );
2745
-
2746
- // Customer is logged in but used a different email to purchase with so assign to their customer record
2747
- if( ! empty( $customer->id ) && $this->email != $customer->email ) {
2748
- $customer->add_email( $this->email );
2749
- }
2750
-
2751
- }
2752
-
2753
- if ( empty( $customer->id ) ) {
2754
- $customer = new EDD_Customer( $this->email );
2755
- }
2756
-
2757
- if ( empty( $customer->id ) ) {
2758
-
2759
- if( empty( $this->first_name ) && empty( $this->last_name ) ) {
2760
-
2761
- $name = $this->email;
2762
-
2763
- } else {
2764
-
2765
- $name = $this->first_name . ' ' . $this->last_name;
2766
-
2767
- }
2768
-
2769
- $customer_data = array(
2770
- 'name' => $name,
2771
- 'email' => $this->email,
2772
- 'user_id' => $this->user_id,
2773
- );
2774
-
2775
- $customer->create( $customer_data );
2776
-
2777
- }
2778
-
2779
- return $customer;
2780
- }
2781
-
2782
  }
97
  */
98
  protected $tax = 0;
99
 
 
 
 
 
 
 
 
 
100
  /**
101
  * The tax rate charged on this payment
102
  *
557
  $this->ID = $payment_id;
558
  $this->_ID = $payment_id;
559
 
560
+ $customer = new stdClass;
561
+
562
+ if ( did_action( 'edd_pre_process_purchase' ) && is_user_logged_in() ) {
563
+
564
+ $customer = new EDD_customer( get_current_user_id(), true );
565
+
566
+ // Customer is logged in but used a different email to purchase with so assign to their customer record
567
+ if( ! empty( $customer->id ) && $this->email != $customer->email ) {
568
+ $customer->add_email( $this->email );
569
+ }
570
+
571
+ }
572
+
573
+ if ( empty( $customer->id ) ) {
574
+ $customer = new EDD_Customer( $this->email );
575
+ }
576
+
577
+ if ( empty( $customer->id ) ) {
578
+
579
+ $customer_data = array(
580
+ 'name' => ! is_email( $payment_title ) ? $this->first_name . ' ' . $this->last_name : '',
581
+ 'email' => $this->email,
582
+ 'user_id' => $this->user_id,
583
+ );
584
+
585
+ $customer->create( $customer_data );
586
+
587
+ }
588
+
589
 
590
  $this->customer_id = $customer->id;
591
  $this->pending['customer_id'] = $this->customer_id;
592
  $customer->attach_payment( $this->ID, false );
593
 
 
 
 
 
 
 
 
594
  $this->payment_meta = apply_filters( 'edd_payment_meta', $this->payment_meta, $payment_data );
595
  if ( ! empty( $this->payment_meta['fees'] ) ) {
596
  $this->fees = array_merge( $this->payment_meta['fees'], $this->fees );
641
  $this->ID = $this->_ID;
642
  }
643
 
 
 
 
 
 
 
 
 
644
  // If we have something pending, let's save it
645
  if ( ! empty( $this->pending ) ) {
646
 
883
 
884
  case 'customer_id':
885
  $this->update_meta( '_edd_payment_customer_id', $this->customer_id );
 
 
886
  break;
887
 
888
  case 'user_id':
889
  $this->update_meta( '_edd_payment_user_id', $this->user_id );
 
890
  break;
891
 
892
  case 'first_name':
1207
 
1208
  $download = new EDD_Download( $download_id );
1209
 
1210
+ // Bail if this post isn't a download
1211
+ if( ! $download || $download->post_type !== 'download' ) {
 
 
 
 
1212
  return false;
1213
  }
1214
 
1405
  return false;
1406
  }
1407
 
1408
+ $new_subtotal = $merged_item['item_price'] * $merged_item['quantity'];
1409
+ $merged_item['subtotal'] = $new_subtotal;
1410
+ $merged_item['price'] = $new_subtotal + $merged_item['tax'];
1411
 
1412
+ $this->cart_details[ $cart_index ] = $merged_item;
1413
+ $modified_download = $merged_item;
1414
+ $modified_download['action'] = 'modify';
1415
+ $modified_download['previous_data'] = $current_args;
 
 
1416
 
1417
  $this->pending['downloads'][] = $modified_download;
1418
 
1807
 
1808
  $meta = apply_filters( 'edd_get_payment_meta_' . $meta_key, $meta, $this->ID );
1809
 
 
 
 
 
 
 
 
1810
  return apply_filters( 'edd_get_payment_meta', $meta, $this->ID, $meta_key );
1811
  }
1812
 
1860
  return update_post_meta( $this->ID, $meta_key, $meta_value, $prev_value );
1861
  }
1862
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1863
  /**
1864
  * Determines if this payment is able to be resumed by the user.
1865
  *
2281
  $user_id = $this->get_meta( '_edd_payment_user_id', true );
2282
  $customer = new EDD_Customer( $this->customer_id );
2283
 
2284
+ // Make sure it exists, and that it matches that of the associted customer record
2285
  if( empty( $user_id ) || ( ! empty( $customer->user_id ) && (int) $user_id !== (int) $customer->user_id ) ) {
2286
 
2287
  $user_id = $customer->user_id;
2323
  'discount' => $this->discounts,
2324
  );
2325
 
2326
+ $user_info = isset( $this->payment_meta['user_info'] ) ? maybe_unserialize( $this->payment_meta['user_info'] ) : array();
2327
+ $user_info = wp_parse_args( $user_info, $defaults );
 
 
 
 
 
 
 
 
 
2328
 
2329
  // Ensure email index is in the old user info array
2330
  if( empty( $user_info['email'] ) ) {
2520
  return apply_filters( 'edd_payment_discounts', $this->discounts, $this->ID, $this );
2521
  }
2522
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2523
  /**
2524
  * Retrieve payment currency
2525
  *
2661
  return in_array( $this->status, $in_process_statuses );
2662
  }
2663
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2664
  }
includes/payments/class-payments-query.php CHANGED
@@ -49,24 +49,6 @@ class EDD_Payments_Query extends EDD_Stats {
49
  */
50
  public $payments = array();
51
 
52
- /**
53
- * Holds a boolean to determine if there is an existing $wp_query global.
54
- *
55
- * @var bool
56
- * @access private
57
- * @since 2.8
58
- */
59
- private $existing_query;
60
-
61
- /**
62
- * If an existing global $post item exists before we start our query, maintain it for later 'reset'.
63
- *
64
- * @var WP_Post|null
65
- * @access private
66
- * @since 2.8
67
- */
68
- private $existing_post;
69
-
70
  /**
71
  * Default query arguments.
72
  *
@@ -98,9 +80,7 @@ class EDD_Payments_Query extends EDD_Stats {
98
  'search_in_notes' => false,
99
  'children' => false,
100
  'fields' => null,
101
- 'download' => null,
102
- 'gateway' => null,
103
- 'post__in' => null,
104
  );
105
 
106
  // We need to store an array of the args used to instantiate the class, so that we can use it in later hooks.
@@ -141,10 +121,6 @@ class EDD_Payments_Query extends EDD_Stats {
141
  */
142
  public function init() {
143
 
144
- // Before we start setting up queries, let's store any existing queries that might be in globals.
145
- $this->existing_query = isset( $GLOBALS['wp_query'] ) && isset( $GLOBALS['wp_query']->post );
146
- $this->existing_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
147
-
148
  }
149
 
150
  /**
@@ -156,7 +132,7 @@ class EDD_Payments_Query extends EDD_Stats {
156
  *
157
  * @access public
158
  * @since 1.8
159
- * @return array
160
  */
161
  public function get_payments() {
162
 
@@ -170,11 +146,9 @@ class EDD_Payments_Query extends EDD_Stats {
170
  $this->user();
171
  $this->customer();
172
  $this->search();
173
- $this->gateway();
174
  $this->mode();
175
  $this->children();
176
  $this->download();
177
- $this->post__in();
178
 
179
  do_action( 'edd_pre_get_payments', $this );
180
 
@@ -190,7 +164,6 @@ class EDD_Payments_Query extends EDD_Stats {
190
  }
191
 
192
  if ( $query->have_posts() ) {
193
-
194
  while ( $query->have_posts() ) {
195
  $query->the_post();
196
 
@@ -205,14 +178,13 @@ class EDD_Payments_Query extends EDD_Stats {
205
  $this->payments[] = apply_filters( 'edd_payment', $payment, $payment_id, $this );
206
  }
207
 
 
208
  }
209
 
210
  add_action( 'edd_post_get_payments', array( $this, 'date_filter_post' ) );
211
 
212
  do_action( 'edd_post_get_payments', $this );
213
 
214
- $this->maybe_reset_globals();
215
-
216
  return $this->payments;
217
  }
218
 
@@ -381,39 +353,6 @@ class EDD_Payments_Query extends EDD_Stats {
381
  ) );
382
  }
383
 
384
- /**
385
- * Specific gateway
386
- *
387
- * @access public
388
- * @since 2.8
389
- * @return void
390
- */
391
- public function gateway() {
392
- if ( is_null( $this->args['gateway'] ) ) {
393
- return;
394
- }
395
-
396
- $this->__set( 'meta_query', array(
397
- 'key' => '_edd_payment_gateway',
398
- 'value' => $this->args['gateway']
399
- ) );
400
- }
401
-
402
- /**
403
- * Specific payments
404
- *
405
- * @access public
406
- * @since 2.8.7
407
- * @return void
408
- */
409
- public function post__in() {
410
- if ( is_null( $this->args['post__in'] ) ) {
411
- return;
412
- }
413
-
414
- $this->__set( 'post__in', $this->args['post__in'] );
415
- }
416
-
417
  /**
418
  * Search
419
  *
@@ -486,7 +425,13 @@ class EDD_Payments_Query extends EDD_Stats {
486
 
487
  $this->__unset( 's' );
488
 
489
- } elseif ( edd_get_option( 'enable_sequential' ) ) {
 
 
 
 
 
 
490
 
491
  $search_meta = array(
492
  'key' => '_edd_payment_number',
@@ -622,22 +567,4 @@ class EDD_Payments_Query extends EDD_Stats {
622
  $this->__unset( 'download' );
623
 
624
  }
625
-
626
- /**
627
- * Based off the current global variables for $wp_query and $post, we may need to reset some data or just restore it.
628
- *
629
- * @since 2.8
630
- * @access private
631
- * @return void
632
- */
633
- private function maybe_reset_globals() {
634
- // Based off our pre-iteration, let's reset the globals.
635
- if ( $this->existing_query ) {
636
- wp_reset_postdata();
637
- } elseif ( $this->existing_post ) {
638
- $GLOBALS['post'] = $this->existing_post;
639
- } else {
640
- unset( $GLOBALS['post'] );
641
- }
642
- }
643
  }
49
  */
50
  public $payments = array();
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Default query arguments.
54
  *
80
  'search_in_notes' => false,
81
  'children' => false,
82
  'fields' => null,
83
+ 'download' => null
 
 
84
  );
85
 
86
  // We need to store an array of the args used to instantiate the class, so that we can use it in later hooks.
121
  */
122
  public function init() {
123
 
 
 
 
 
124
  }
125
 
126
  /**
132
  *
133
  * @access public
134
  * @since 1.8
135
+ * @return object
136
  */
137
  public function get_payments() {
138
 
146
  $this->user();
147
  $this->customer();
148
  $this->search();
 
149
  $this->mode();
150
  $this->children();
151
  $this->download();
 
152
 
153
  do_action( 'edd_pre_get_payments', $this );
154
 
164
  }
165
 
166
  if ( $query->have_posts() ) {
 
167
  while ( $query->have_posts() ) {
168
  $query->the_post();
169
 
178
  $this->payments[] = apply_filters( 'edd_payment', $payment, $payment_id, $this );
179
  }
180
 
181
+ wp_reset_postdata();
182
  }
183
 
184
  add_action( 'edd_post_get_payments', array( $this, 'date_filter_post' ) );
185
 
186
  do_action( 'edd_post_get_payments', $this );
187
 
 
 
188
  return $this->payments;
189
  }
190
 
353
  ) );
354
  }
355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  /**
357
  * Search
358
  *
425
 
426
  $this->__unset( 's' );
427
 
428
+ } elseif (
429
+ edd_get_option( 'enable_sequential' ) &&
430
+ (
431
+ false !== strpos( $search, edd_get_option( 'sequential_prefix' ) ) ||
432
+ false !== strpos( $search, edd_get_option( 'sequential_postfix' ) )
433
+ )
434
+ ) {
435
 
436
  $search_meta = array(
437
  'key' => '_edd_payment_number',
567
  $this->__unset( 'download' );
568
 
569
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  }
includes/payments/functions.php CHANGED
@@ -167,6 +167,7 @@ function edd_insert_payment( $payment_data = array() ) {
167
  }
168
 
169
  if ( $resume_payment ) {
 
170
  $payment->date = date( 'Y-m-d G:i:s', current_time( 'timestamp' ) );
171
 
172
  $payment->add_note( __( 'Payment recovery processed', 'easy-digital-downloads' ) );
@@ -184,19 +185,6 @@ function edd_insert_payment( $payment_data = array() ) {
184
  $payment->remove_download( $download['id'], $item_args );
185
  }
186
 
187
- if ( strtolower( $payment->email ) !== strtolower( $payment_data['user_info']['email'] ) ) {
188
-
189
- // Remove the payment from the previous customer.
190
- $previous_customer = new EDD_Customer( $payment->customer_id );
191
- $previous_customer->remove_payment( $payment->ID, false );
192
-
193
- // Redefine the email frst and last names.
194
- $payment->email = $payment_data['user_info']['email'];
195
- $payment->first_name = $payment_data['user_info']['first_name'];
196
- $payment->last_name = $payment_data['user_info']['last_name'];
197
-
198
- }
199
-
200
  // Remove any remainders of possible fees from items.
201
  $payment->save();
202
 
@@ -474,7 +462,6 @@ function edd_count_payments( $args = array() ) {
474
  'start-date' => null,
475
  'end-date' => null,
476
  'download' => null,
477
- 'gateway' => null
478
  );
479
 
480
  $args = wp_parse_args( $args, $defaults );
@@ -536,7 +523,7 @@ function edd_count_payments( $args = array() ) {
536
  $join = "LEFT JOIN $wpdb->postmeta m ON m.meta_key = '_edd_log_payment_id' AND m.post_id = p.ID ";
537
  $join .= "INNER JOIN $wpdb->posts p2 ON m.meta_value = p2.ID ";
538
  $where = "WHERE p.post_type = 'edd_log' ";
539
- $where .= $wpdb->prepare( "AND p.post_parent = %d ", $search );
540
 
541
  } elseif ( is_numeric( $args['s'] ) ) {
542
 
@@ -574,18 +561,6 @@ function edd_count_payments( $args = array() ) {
574
 
575
  }
576
 
577
- // Limit payments count by gateway
578
- if ( ! empty( $args['gateway'] ) ) {
579
-
580
- $join .= "LEFT JOIN $wpdb->postmeta g ON (p.ID = g.post_id)";
581
- $where .= $wpdb->prepare( "
582
- AND g.meta_key = '_edd_payment_gateway'
583
- AND g.meta_value = %s",
584
- $args['gateway']
585
- );
586
-
587
- }
588
-
589
  // Limit payments count by date
590
  if ( ! empty( $args['start-date'] ) && false !== strpos( $args['start-date'], '/' ) ) {
591
 
@@ -751,8 +726,7 @@ function edd_get_payment_statuses() {
751
  'refunded' => __( 'Refunded', 'easy-digital-downloads' ),
752
  'failed' => __( 'Failed', 'easy-digital-downloads' ),
753
  'abandoned' => __( 'Abandoned', 'easy-digital-downloads' ),
754
- 'revoked' => __( 'Revoked', 'easy-digital-downloads' ),
755
- 'processing' => __( 'Processing', 'easy-digital-downloads' )
756
  );
757
 
758
  return apply_filters( 'edd_payment_statuses', $payment_statuses );
@@ -877,8 +851,8 @@ function edd_get_total_earnings() {
877
  * @return float $total Total earnings
878
  */
879
  function edd_increase_total_earnings( $amount = 0 ) {
880
- $total = floatval( edd_get_total_earnings() );
881
- $total += floatval( $amount );
882
  update_option( 'edd_earnings_total', $total );
883
  return $total;
884
  }
@@ -980,9 +954,7 @@ function edd_get_payment_meta_cart_details( $payment_id, $include_bundle_files =
980
  if( 'bundle' != edd_get_download_type( $cart_item['id'] ) )
981
  continue;
982
 
983
- $price_id = edd_get_cart_item_price_id( $cart_item );
984
- $products = edd_get_bundled_products( $cart_item['id'], $price_id );
985
-
986
  if ( empty( $products ) )
987
  continue;
988
 
@@ -1444,19 +1416,11 @@ function edd_set_payment_transaction_id( $payment_id = 0, $transaction_id = '' )
1444
  */
1445
  function edd_get_purchase_id_by_key( $key ) {
1446
  global $wpdb;
1447
- $global_key_string = 'edd_purchase_id_by_key' . $key;
1448
- global $$global_key_string;
1449
-
1450
- if ( null !== $$global_key_string ) {
1451
- return $$global_key_string;
1452
- }
1453
 
1454
  $purchase = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_edd_payment_purchase_key' AND meta_value = %s LIMIT 1", $key ) );
1455
 
1456
- if ( $purchase != NULL ) {
1457
- $$global_key_string = $purchase;
1458
- return $$global_key_string;
1459
- }
1460
 
1461
  return 0;
1462
  }
@@ -1593,7 +1557,7 @@ function edd_get_payment_note_html( $note, $payment_id = 0 ) {
1593
  $note_html = '<div class="edd-payment-note" id="edd-payment-note-' . $note->comment_ID . '">';
1594
  $note_html .='<p>';
1595
  $note_html .= '<strong>' . $user . '</strong>&nbsp;&ndash;&nbsp;' . date_i18n( $date_format, strtotime( $note->comment_date ) ) . '<br/>';
1596
- $note_html .= make_clickable( $note->comment_content );
1597
  $note_html .= '&nbsp;&ndash;&nbsp;<a href="' . esc_url( $delete_note_url ) . '" class="edd-delete-payment-note" data-note-id="' . absint( $note->comment_ID ) . '" data-payment-id="' . absint( $payment_id ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
1598
  $note_html .= '</p>';
1599
  $note_html .= '</div>';
167
  }
168
 
169
  if ( $resume_payment ) {
170
+
171
  $payment->date = date( 'Y-m-d G:i:s', current_time( 'timestamp' ) );
172
 
173
  $payment->add_note( __( 'Payment recovery processed', 'easy-digital-downloads' ) );
185
  $payment->remove_download( $download['id'], $item_args );
186
  }
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  // Remove any remainders of possible fees from items.
189
  $payment->save();
190
 
462
  'start-date' => null,
463
  'end-date' => null,
464
  'download' => null,
 
465
  );
466
 
467
  $args = wp_parse_args( $args, $defaults );
523
  $join = "LEFT JOIN $wpdb->postmeta m ON m.meta_key = '_edd_log_payment_id' AND m.post_id = p.ID ";
524
  $join .= "INNER JOIN $wpdb->posts p2 ON m.meta_value = p2.ID ";
525
  $where = "WHERE p.post_type = 'edd_log' ";
526
+ $where .= $wpdb->prepare( "AND p.post_parent = %d} ", $search );
527
 
528
  } elseif ( is_numeric( $args['s'] ) ) {
529
 
561
 
562
  }
563
 
 
 
 
 
 
 
 
 
 
 
 
 
564
  // Limit payments count by date
565
  if ( ! empty( $args['start-date'] ) && false !== strpos( $args['start-date'], '/' ) ) {
566
 
726
  'refunded' => __( 'Refunded', 'easy-digital-downloads' ),
727
  'failed' => __( 'Failed', 'easy-digital-downloads' ),
728
  'abandoned' => __( 'Abandoned', 'easy-digital-downloads' ),
729
+ 'revoked' => __( 'Revoked', 'easy-digital-downloads' )
 
730
  );
731
 
732
  return apply_filters( 'edd_payment_statuses', $payment_statuses );
851
  * @return float $total Total earnings
852
  */
853
  function edd_increase_total_earnings( $amount = 0 ) {
854
+ $total = edd_get_total_earnings();
855
+ $total += $amount;
856
  update_option( 'edd_earnings_total', $total );
857
  return $total;
858
  }
954
  if( 'bundle' != edd_get_download_type( $cart_item['id'] ) )
955
  continue;
956
 
957
+ $products = edd_get_bundled_products( $cart_item['id'] );
 
 
958
  if ( empty( $products ) )
959
  continue;
960
 
1416
  */
1417
  function edd_get_purchase_id_by_key( $key ) {
1418
  global $wpdb;
 
 
 
 
 
 
1419
 
1420
  $purchase = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_edd_payment_purchase_key' AND meta_value = %s LIMIT 1", $key ) );
1421
 
1422
+ if ( $purchase != NULL )
1423
+ return $purchase;
 
 
1424
 
1425
  return 0;
1426
  }
1557
  $note_html = '<div class="edd-payment-note" id="edd-payment-note-' . $note->comment_ID . '">';
1558
  $note_html .='<p>';
1559
  $note_html .= '<strong>' . $user . '</strong>&nbsp;&ndash;&nbsp;' . date_i18n( $date_format, strtotime( $note->comment_date ) ) . '<br/>';
1560
+ $note_html .= $note->comment_content;
1561
  $note_html .= '&nbsp;&ndash;&nbsp;<a href="' . esc_url( $delete_note_url ) . '" class="edd-delete-payment-note" data-note-id="' . absint( $note->comment_ID ) . '" data-payment-id="' . absint( $payment_id ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
1562
  $note_html .= '</p>';
1563
  $note_html .= '</div>';
includes/process-download.php CHANGED
@@ -141,15 +141,10 @@ function edd_process_download() {
141
  $file_details = parse_url( $requested_file );
142
  $schemes = array( 'http', 'https' ); // Direct URL schemes
143
 
144
- $supported_streams = stream_get_wrappers();
145
- if ( strtoupper( substr( PHP_OS, 0, 3 ) ) !== 'WIN' && isset( $file_details['scheme'] ) && ! in_array( $file_details['scheme'], $supported_streams ) ) {
146
- wp_die( __( 'Error downloading file. Please contact support.', 'easy-digital-downloads' ), __( 'File download error', 'easy-digital-downloads' ), 501 );
147
- }
148
-
149
  if ( ( ! isset( $file_details['scheme'] ) || ! in_array( $file_details['scheme'], $schemes ) ) && isset( $file_details['path'] ) && file_exists( $requested_file ) ) {
150
 
151
  /**
152
- * Download method is set to Redirect in settings but an absolute path was provided
153
  * We need to switch to a direct download in order for the file to download properly
154
  */
155
  $method = 'direct';
@@ -196,7 +191,7 @@ function edd_process_download() {
196
  header("Robots: none");
197
  header("Content-Type: " . $ctype . "");
198
  header("Content-Description: File Transfer");
199
- header("Content-Disposition: attachment; filename=\"" . apply_filters( 'edd_requested_file_name', basename( $requested_file ), $args ) . "\"");
200
  header("Content-Transfer-Encoding: binary");
201
 
202
  // If the file isn't locally hosted, process the redirect
@@ -742,7 +737,7 @@ function edd_readfile_chunked( $file, $retbytes = true ) {
742
  $chunksize = 1024 * 1024;
743
  $buffer = '';
744
  $cnt = 0;
745
- $handle = @fopen( $file, 'rb' );
746
 
747
  if ( $size = @filesize( $file ) ) {
748
  header("Content-Length: " . $size );
141
  $file_details = parse_url( $requested_file );
142
  $schemes = array( 'http', 'https' ); // Direct URL schemes
143
 
 
 
 
 
 
144
  if ( ( ! isset( $file_details['scheme'] ) || ! in_array( $file_details['scheme'], $schemes ) ) && isset( $file_details['path'] ) && file_exists( $requested_file ) ) {
145
 
146
  /**
147
+ * Download method is seto to Redirect in settings but an absolute path was provided
148
  * We need to switch to a direct download in order for the file to download properly
149
  */
150
  $method = 'direct';
191
  header("Robots: none");
192
  header("Content-Type: " . $ctype . "");
193
  header("Content-Description: File Transfer");
194
+ header("Content-Disposition: attachment; filename=\"" . apply_filters( 'edd_requested_file_name', basename( $requested_file ) ) . "\"");
195
  header("Content-Transfer-Encoding: binary");
196
 
197
  // If the file isn't locally hosted, process the redirect
737
  $chunksize = 1024 * 1024;
738
  $buffer = '';
739
  $cnt = 0;
740
+ $handle = @fopen( $file, 'r' );
741
 
742
  if ( $size = @filesize( $file ) ) {
743
  header("Content-Length: " . $size );
includes/process-purchase.php CHANGED
@@ -71,37 +71,9 @@ function edd_process_purchase_form() {
71
  'first_name' => $user['user_first'],
72
  'last_name' => $user['user_last'],
73
  'discount' => $valid_data['discount'],
74
- 'address' => ! empty( $user['address'] ) ? $user['address'] : array(),
75
  );
76
 
77
- // Update a customer record if they have added/updated information
78
- $customer = new EDD_Customer( $user_info['email'] );
79
-
80
- $name = $user_info['first_name'] . ' ' . $user_info['last_name'];
81
- if ( empty( $customer->name ) || $name != $customer->name ) {
82
- $update_data = array(
83
- 'name' => $name
84
- );
85
-
86
- // Update the customer's name and update the user record too
87
- $customer->update( $update_data );
88
- wp_update_user( array(
89
- 'ID' => get_current_user_id(),
90
- 'first_name' => $user_info['first_name'],
91
- 'last_name' => $user_info['last_name']
92
- ) );
93
- }
94
-
95
- // Update the customer's address if different to what's in the database
96
- $address = get_user_meta( $customer->user_id, '_edd_user_address', true );
97
- if ( ! is_array( $address ) ) {
98
- $address = array();
99
- }
100
-
101
- if ( 0 == strlen( implode( $address ) ) || count( array_diff( $address, $user_info['address'] ) ) > 0 ) {
102
- update_user_meta( $user['user_id'], '_edd_user_address', $user_info['address'] );
103
- }
104
-
105
  $auth_key = defined( 'AUTH_KEY' ) ? AUTH_KEY : '';
106
 
107
  $card_country = isset( $valid_data['cc_info']['card_country'] ) ? $valid_data['cc_info']['card_country'] : false;
@@ -195,7 +167,7 @@ function edd_checkout_check_existing_email( $valid_data, $post ) {
195
  if ( $email != strtolower( $customer->email ) && ( is_array( $customer->emails ) && ! in_array( $email, array_map( 'strtolower', $customer->emails ) ) ) ) {
196
  $found_customer = new EDD_Customer( $email );
197
  if ( $found_customer->id > 0 ) {
198
- edd_set_error( 'edd-customer-email-exists', sprintf( __( 'The email address %s is already in use.', 'easy-digital-downloads' ), $email ) );
199
  }
200
  }
201
 
@@ -847,12 +819,12 @@ function edd_get_purchase_form_user( $valid_data = array() ) {
847
 
848
  // Get the user's billing address details
849
  $user['address'] = array();
850
- $user['address']['line1'] = ! empty( $_POST['card_address'] ) ? sanitize_text_field( $_POST['card_address'] ) : '';
851
- $user['address']['line2'] = ! empty( $_POST['card_address_2'] ) ? sanitize_text_field( $_POST['card_address_2'] ) : '';
852
- $user['address']['city'] = ! empty( $_POST['card_city'] ) ? sanitize_text_field( $_POST['card_city'] ) : '';
853
- $user['address']['state'] = ! empty( $_POST['card_state'] ) ? sanitize_text_field( $_POST['card_state'] ) : '';
854
- $user['address']['country'] = ! empty( $_POST['billing_country'] ) ? sanitize_text_field( $_POST['billing_country'] ) : '';
855
- $user['address']['zip'] = ! empty( $_POST['card_zip'] ) ? sanitize_text_field( $_POST['card_zip'] ) : '';
856
 
857
  if ( empty( $user['address']['country'] ) )
858
  $user['address'] = false; // Country will always be set if address fields are present
@@ -877,7 +849,7 @@ function edd_purchase_form_validate_cc() {
877
  $card_data = edd_get_purchase_cc_info();
878
 
879
  // Validate the card zip
880
- if ( ! empty( $card_data['card_zip'] ) && edd_get_cart_total() > 0.00 ) {
881
  if ( ! edd_purchase_form_validate_cc_zip( $card_data['card_zip'], $card_data['card_country'] ) ) {
882
  edd_set_error( 'invalid_cc_zip', __( 'The zip / postal code you entered for your billing address is invalid', 'easy-digital-downloads' ) );
883
  }
@@ -1102,37 +1074,47 @@ function edd_purchase_form_validate_cc_zip( $zip = 0, $country_code = '' ) {
1102
  * @return void
1103
  */
1104
  function edd_check_purchase_email( $valid_data, $posted ) {
1105
-
1106
- $banned = edd_get_banned_emails();
1107
 
1108
  if( empty( $banned ) ) {
1109
  return;
1110
  }
1111
 
1112
- $user_emails = array( $posted['edd_email'] );
1113
  if( is_user_logged_in() ) {
1114
 
1115
  // The user is logged in, check that their account email is not banned
1116
- $user_data = get_userdata( get_current_user_id() );
1117
- $user_emails[] = $user_data->user_email;
 
 
 
 
 
 
 
1118
 
1119
  } elseif( isset( $posted['edd-purchase-var'] ) && $posted['edd-purchase-var'] == 'needs-to-login' ) {
1120
 
1121
  // The user is logging in, check that their email is not banned
1122
- if( $user_data = get_user_by( 'login', $posted['edd_user_login'] ) ) {
1123
- $user_emails[] = $user_data->user_email;
 
1124
  }
1125
 
1126
- }
1127
 
1128
- foreach ( $user_emails as $email ) {
1129
- if ( edd_is_email_banned( $email ) ) {
1130
- // Set an error and give the customer a general error (don't alert them that they were banned)
1131
- edd_set_error( 'email_banned', __( 'An internal error has occurred, please try again or contact support.', 'easy-digital-downloads' ) );
1132
- break;
1133
  }
 
1134
  }
1135
 
 
 
 
 
1136
  }
1137
  add_action( 'edd_checkout_error_checks', 'edd_check_purchase_email', 10, 2 );
1138
 
71
  'first_name' => $user['user_first'],
72
  'last_name' => $user['user_last'],
73
  'discount' => $valid_data['discount'],
74
+ 'address' => $user['address']
75
  );
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  $auth_key = defined( 'AUTH_KEY' ) ? AUTH_KEY : '';
78
 
79
  $card_country = isset( $valid_data['cc_info']['card_country'] ) ? $valid_data['cc_info']['card_country'] : false;
167
  if ( $email != strtolower( $customer->email ) && ( is_array( $customer->emails ) && ! in_array( $email, array_map( 'strtolower', $customer->emails ) ) ) ) {
168
  $found_customer = new EDD_Customer( $email );
169
  if ( $found_customer->id > 0 ) {
170
+ edd_set_error( 'edd-customer-email-exists', __( sprintf( 'The email address %s is already in use.', $email ), 'easy-digital-downloads' ) );
171
  }
172
  }
173
 
819
 
820
  // Get the user's billing address details
821
  $user['address'] = array();
822
+ $user['address']['line1'] = ! empty( $_POST['card_address'] ) ? sanitize_text_field( $_POST['card_address'] ) : false;
823
+ $user['address']['line2'] = ! empty( $_POST['card_address_2'] ) ? sanitize_text_field( $_POST['card_address_2'] ) : false;
824
+ $user['address']['city'] = ! empty( $_POST['card_city'] ) ? sanitize_text_field( $_POST['card_city'] ) : false;
825
+ $user['address']['state'] = ! empty( $_POST['card_state'] ) ? sanitize_text_field( $_POST['card_state'] ) : false;
826
+ $user['address']['country'] = ! empty( $_POST['billing_country'] ) ? sanitize_text_field( $_POST['billing_country'] ) : false;
827
+ $user['address']['zip'] = ! empty( $_POST['card_zip'] ) ? sanitize_text_field( $_POST['card_zip'] ) : false;
828
 
829
  if ( empty( $user['address']['country'] ) )
830
  $user['address'] = false; // Country will always be set if address fields are present
849
  $card_data = edd_get_purchase_cc_info();
850
 
851
  // Validate the card zip
852
+ if ( ! empty( $card_data['card_zip'] ) ) {
853
  if ( ! edd_purchase_form_validate_cc_zip( $card_data['card_zip'], $card_data['card_country'] ) ) {
854
  edd_set_error( 'invalid_cc_zip', __( 'The zip / postal code you entered for your billing address is invalid', 'easy-digital-downloads' ) );
855
  }
1074
  * @return void
1075
  */
1076
  function edd_check_purchase_email( $valid_data, $posted ) {
1077
+ $is_banned = false;
1078
+ $banned = edd_get_banned_emails();
1079
 
1080
  if( empty( $banned ) ) {
1081
  return;
1082
  }
1083
 
 
1084
  if( is_user_logged_in() ) {
1085
 
1086
  // The user is logged in, check that their account email is not banned
1087
+ $user_data = get_userdata( get_current_user_id() );
1088
+ if( edd_is_email_banned( $user_data->user_email ) ) {
1089
+
1090
+ $is_banned = true;
1091
+ }
1092
+
1093
+ if( edd_is_email_banned( $posted['edd_email'] ) ) {
1094
+ $is_banned = true;
1095
+ }
1096
 
1097
  } elseif( isset( $posted['edd-purchase-var'] ) && $posted['edd-purchase-var'] == 'needs-to-login' ) {
1098
 
1099
  // The user is logging in, check that their email is not banned
1100
+ $user_data = get_user_by( 'login', $posted['edd_user_login'] );
1101
+ if( $user_data && edd_is_email_banned( $user_data->user_email ) ) {
1102
+ $is_banned = true;
1103
  }
1104
 
1105
+ } else {
1106
 
1107
+ // Guest purchase, check that the email is not banned
1108
+ if( edd_is_email_banned( $posted['edd_email'] ) ) {
1109
+ $is_banned = true;
 
 
1110
  }
1111
+
1112
  }
1113
 
1114
+ if( $is_banned ) {
1115
+ // Set an error and give the customer a general error (don't alert them that they were banned)
1116
+ edd_set_error( 'email_banned', __( 'An internal error has occurred, please try again or contact support.', 'easy-digital-downloads' ) );
1117
+ }
1118
  }
1119
  add_action( 'edd_checkout_error_checks', 'edd_check_purchase_email', 10, 2 );
1120
 
includes/scripts.php CHANGED
@@ -39,45 +39,38 @@ function edd_load_scripts() {
39
  $has_purchase_links = true;
40
  }
41
 
42
- $in_footer = edd_scripts_in_footer();
43
-
44
  if ( edd_is_checkout() ) {
45
  if ( edd_is_cc_verify_enabled() ) {
46
- wp_register_script( 'creditCardValidator', $js_dir . 'jquery.creditCardValidator' . $suffix . '.js', array( 'jquery' ), EDD_VERSION, $in_footer );
47
-
48
- // Registered so gateways can enqueue it when they support the space formatting. wp_enqueue_script( 'jQuery.payment' );
49
- wp_register_script( 'jQuery.payment', $js_dir . 'jquery.payment.min.js', array( 'jquery' ), EDD_VERSION, $in_footer );
50
-
51
  wp_enqueue_script( 'creditCardValidator' );
52
  }
53
 
54
- wp_register_script( 'edd-checkout-global', $js_dir . 'edd-checkout-global' . $suffix . '.js', array( 'jquery' ), EDD_VERSION, $in_footer );
55
  wp_enqueue_script( 'edd-checkout-global' );
56
 
57
  wp_localize_script( 'edd-checkout-global', 'edd_global_vars', apply_filters( 'edd_global_checkout_script_vars', array(
58
- 'ajaxurl' => edd_get_ajax_url(),
59
- 'checkout_nonce' => wp_create_nonce( 'edd_checkout_nonce' ),
60
- 'checkout_error_anchor' => '#edd_purchase_submit',
61
- 'currency_sign' => edd_currency_filter(''),
62
- 'currency_pos' => edd_get_option( 'currency_position', 'before' ),
63
- 'decimal_separator' => edd_get_option( 'decimal_separator', '.' ),
64
- 'thousands_separator' => edd_get_option( 'thousands_separator', ',' ),
65
- 'no_gateway' => __( 'Please select a payment method', 'easy-digital-downloads' ),
66
- 'no_discount' => __( 'Please enter a discount code', 'easy-digital-downloads' ), // Blank discount code message
67
- 'enter_discount' => __( 'Enter discount', 'easy-digital-downloads' ),
68
- 'discount_applied' => __( 'Discount Applied', 'easy-digital-downloads' ), // Discount verified message
69
- 'no_email' => __( 'Please enter an email address before applying a discount code', 'easy-digital-downloads' ),
70
- 'no_username' => __( 'Please enter a username before applying a discount code', 'easy-digital-downloads' ),
71
- 'purchase_loading' => __( 'Please Wait...', 'easy-digital-downloads' ),
72
- 'complete_purchase' => edd_get_checkout_button_purchase_label(),
73
- 'taxes_enabled' => edd_use_taxes() ? '1' : '0',
74
- 'edd_version' => EDD_VERSION
75
  ) ) );
76
  }
77
 
78
  // Load AJAX scripts, if enabled
79
  if ( ! edd_is_ajax_disabled() ) {
80
- wp_register_script( 'edd-ajax', $js_dir . 'edd-ajax' . $suffix . '.js', array( 'jquery' ), EDD_VERSION, $in_footer );
81
  wp_enqueue_script( 'edd-ajax' );
82
 
83
  wp_localize_script( 'edd-ajax', 'edd_scripts', apply_filters( 'edd_ajax_script_vars', array(
@@ -220,8 +213,6 @@ function edd_load_admin_scripts( $hook ) {
220
  'currency_sign' => edd_currency_filter( '' ),
221
  'currency_pos' => edd_get_option( 'currency_position', 'before' ),
222
  'currency_decimals' => edd_currency_decimal_filter(),
223
- 'decimal_separator' => edd_get_option( 'decimal_separator', '.' ),
224
- 'thousands_separator' => edd_get_option( 'thousands_separator', ',' ),
225
  'new_media_ui' => apply_filters( 'edd_use_35_media_ui', 1 ),
226
  'remove_text' => __( 'Remove', 'easy-digital-downloads' ),
227
  'type_to_search' => sprintf( __( 'Type to search %s', 'easy-digital-downloads' ), edd_get_label_plural() ),
@@ -229,25 +220,13 @@ function edd_load_admin_scripts( $hook ) {
229
  'batch_export_no_class' => __( 'You must choose a method.', 'easy-digital-downloads' ),
230
  'batch_export_no_reqs' => __( 'Required fields not completed.', 'easy-digital-downloads' ),
231
  'reset_stats_warn' => __( 'Are you sure you want to reset your store? This process is <strong><em>not reversible</em></strong>. Please be sure you have a recent backup.', 'easy-digital-downloads' ),
 
 
 
 
232
  'unsupported_browser' => __( 'We are sorry but your browser is not compatible with this kind of file upload. Please upgrade your browser.', 'easy-digital-downloads' ),
233
- 'show_advanced_settings' => __( 'Show advanced settings', 'easy-digital-downloads' ),
234
- 'hide_advanced_settings' => __( 'Hide advanced settings', 'easy-digital-downloads' ),
235
  ));
236
 
237
- /*
238
- * This bit of JavaScript is to facilitate #2704, in order to not break backwards compatibility with the old Variable Price Rows
239
- * while we transition to an entire new markup. They should not be relied on for long-term usage.
240
- *
241
- * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/2704
242
- */
243
- wp_register_script( 'edd-admin-scripts-compatibility', $js_dir . 'admin-backwards-compatibility' . $suffix . '.js', array( 'jquery', 'edd-admin-scripts' ), EDD_VERSION );
244
- wp_localize_script( 'edd-admin-scripts-compatibility', 'edd_backcompat_vars', array(
245
- 'purchase_limit_settings' => __( 'Purchase Limit Settings', 'easy-digital-downloads' ),
246
- 'simple_shipping_settings' => __( 'Simple Shipping Settings', 'easy-digital-downloads' ),
247
- 'software_licensing_settings' => __( 'Software Licensing Settings', 'easy-digital-downloads' ),
248
- 'recurring_payments_settings' => __( 'Recurring Payments Settings', 'easy-digital-downloads' ),
249
- ) );
250
-
251
  wp_enqueue_style( 'wp-color-picker' );
252
  wp_enqueue_script( 'wp-color-picker' );
253
 
@@ -368,13 +347,3 @@ function edd_load_head_styles() {
368
  <?php
369
  }
370
  add_action( 'wp_head', 'edd_load_head_styles' );
371
-
372
- /**
373
- * Determine if the frontend scripts should be loaded in the footer or header (default: footer)
374
- *
375
- * @since 2.8.6
376
- * @return mixed
377
- */
378
- function edd_scripts_in_footer() {
379
- return apply_filters( 'edd_load_scripts_in_footer', true );
380
- }
39
  $has_purchase_links = true;
40
  }
41
 
 
 
42
  if ( edd_is_checkout() ) {
43
  if ( edd_is_cc_verify_enabled() ) {
44
+ wp_register_script( 'creditCardValidator', $js_dir . 'jquery.creditCardValidator' . $suffix . '.js', array( 'jquery' ), EDD_VERSION );
 
 
 
 
45
  wp_enqueue_script( 'creditCardValidator' );
46
  }
47
 
48
+ wp_register_script( 'edd-checkout-global', $js_dir . 'edd-checkout-global' . $suffix . '.js', array( 'jquery' ), EDD_VERSION );
49
  wp_enqueue_script( 'edd-checkout-global' );
50
 
51
  wp_localize_script( 'edd-checkout-global', 'edd_global_vars', apply_filters( 'edd_global_checkout_script_vars', array(
52
+ 'ajaxurl' => edd_get_ajax_url(),
53
+ 'checkout_nonce' => wp_create_nonce( 'edd_checkout_nonce' ),
54
+ 'currency_sign' => edd_currency_filter(''),
55
+ 'currency_pos' => edd_get_option( 'currency_position', 'before' ),
56
+ 'decimal_separator' => edd_get_option( 'decimal_separator', '.' ),
57
+ 'thousands_separator'=> edd_get_option( 'thousands_separator', ',' ),
58
+ 'no_gateway' => __( 'Please select a payment method', 'easy-digital-downloads' ),
59
+ 'no_discount' => __( 'Please enter a discount code', 'easy-digital-downloads' ), // Blank discount code message
60
+ 'enter_discount' => __( 'Enter discount', 'easy-digital-downloads' ),
61
+ 'discount_applied' => __( 'Discount Applied', 'easy-digital-downloads' ), // Discount verified message
62
+ 'no_email' => __( 'Please enter an email address before applying a discount code', 'easy-digital-downloads' ),
63
+ 'no_username' => __( 'Please enter a username before applying a discount code', 'easy-digital-downloads' ),
64
+ 'purchase_loading' => __( 'Please Wait...', 'easy-digital-downloads' ),
65
+ 'complete_purchase' => edd_get_checkout_button_purchase_label(),
66
+ 'taxes_enabled' => edd_use_taxes() ? '1' : '0',
67
+ 'edd_version' => EDD_VERSION
 
68
  ) ) );
69
  }
70
 
71
  // Load AJAX scripts, if enabled
72
  if ( ! edd_is_ajax_disabled() ) {
73
+ wp_register_script( 'edd-ajax', $js_dir . 'edd-ajax' . $suffix . '.js', array( 'jquery' ), EDD_VERSION );
74
  wp_enqueue_script( 'edd-ajax' );
75
 
76
  wp_localize_script( 'edd-ajax', 'edd_scripts', apply_filters( 'edd_ajax_script_vars', array(
213
  'currency_sign' => edd_currency_filter( '' ),
214
  'currency_pos' => edd_get_option( 'currency_position', 'before' ),
215
  'currency_decimals' => edd_currency_decimal_filter(),
 
 
216
  'new_media_ui' => apply_filters( 'edd_use_35_media_ui', 1 ),
217
  'remove_text' => __( 'Remove', 'easy-digital-downloads' ),
218
  'type_to_search' => sprintf( __( 'Type to search %s', 'easy-digital-downloads' ), edd_get_label_plural() ),
220
  'batch_export_no_class' => __( 'You must choose a method.', 'easy-digital-downloads' ),
221
  'batch_export_no_reqs' => __( 'Required fields not completed.', 'easy-digital-downloads' ),
222
  'reset_stats_warn' => __( 'Are you sure you want to reset your store? This process is <strong><em>not reversible</em></strong>. Please be sure you have a recent backup.', 'easy-digital-downloads' ),
223
+ 'search_placeholder' => sprintf( __( 'Type to search all %s', 'easy-digital-downloads' ), edd_get_label_plural() ),
224
+ 'search_placeholder_customer' => __( 'Type to search all Customers', 'easy-digital-downloads' ),
225
+ 'search_placeholder_country' => __( 'Type to search all Countries', 'easy-digital-downloads' ),
226
+ 'search_placeholder_state' => __( 'Type to search all States/Provinces', 'easy-digital-downloads' ),
227
  'unsupported_browser' => __( 'We are sorry but your browser is not compatible with this kind of file upload. Please upgrade your browser.', 'easy-digital-downloads' ),
 
 
228
  ));
229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  wp_enqueue_style( 'wp-color-picker' );
231
  wp_enqueue_script( 'wp-color-picker' );
232
 
347
  <?php
348
  }
349
  add_action( 'wp_head', 'edd_load_head_styles' );
 
 
 
 
 
 
 
 
 
 
includes/shortcodes.php CHANGED
@@ -580,9 +580,47 @@ function edd_downloads_query( $atts, $content = null ) {
580
  ob_start(); ?>
581
  <div class="edd_downloads_list <?php echo apply_filters( 'edd_downloads_list_wrapper_class', $wrapper_class, $atts ); ?>">
582
  <?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
583
- <?php do_action( 'edd_download_shortcode_item', $atts, $i ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  <?php $i++; endwhile; ?>
585
 
 
 
586
  <?php wp_reset_postdata(); ?>
587
 
588
  <?php if ( filter_var( $atts['pagination'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
@@ -932,7 +970,7 @@ function edd_process_profile_editor_remove_email() {
932
 
933
  $user = wp_get_current_user();
934
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
935
- $customer_note = sprintf( __( 'Email address %s removed by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
936
  $customer->add_note( $customer_note );
937
 
938
  } else {
580
  ob_start(); ?>
581
  <div class="edd_downloads_list <?php echo apply_filters( 'edd_downloads_list_wrapper_class', $wrapper_class, $atts ); ?>">
582
  <?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
583
+ <?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
584
+ <div <?php echo $schema; ?>class="<?php echo apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $atts, $i ); ?>" id="edd_download_<?php echo get_the_ID(); ?>">
585
+ <div class="<?php echo apply_filters( 'edd_download_inner_class', 'edd_download_inner', get_the_ID(), $atts, $i ); ?>">
586
+ <?php
587
+
588
+ do_action( 'edd_download_before' );
589
+
590
+ if ( 'false' != $atts['thumbnails'] ) :
591
+ edd_get_template_part( 'shortcode', 'content-image' );
592
+ do_action( 'edd_download_after_thumbnail' );
593
+ endif;
594
+
595
+ edd_get_template_part( 'shortcode', 'content-title' );
596
+ do_action( 'edd_download_after_title' );
597
+
598
+ if ( $atts['excerpt'] == 'yes' && $atts['full_content'] != 'yes' ) {
599
+ edd_get_template_part( 'shortcode', 'content-excerpt' );
600
+ do_action( 'edd_download_after_content' );
601
+ } else if ( $atts['full_content'] == 'yes' ) {
602
+ edd_get_template_part( 'shortcode', 'content-full' );
603
+ do_action( 'edd_download_after_content' );
604
+ }
605
+
606
+ if ( $atts['price'] == 'yes' ) {
607
+ edd_get_template_part( 'shortcode', 'content-price' );
608
+ do_action( 'edd_download_after_price' );
609
+ }
610
+
611
+ if ( $atts['buy_button'] == 'yes' )
612
+ edd_get_template_part( 'shortcode', 'content-cart-button' );
613
+
614
+ do_action( 'edd_download_after' );
615
+
616
+ ?>
617
+ </div>
618
+ </div>
619
+ <?php if ( $atts['columns'] != 0 && $i % $atts['columns'] == 0 ) { ?><div style="clear:both;"></div><?php } ?>
620
  <?php $i++; endwhile; ?>
621
 
622
+ <div style="clear:both;"></div>
623
+
624
  <?php wp_reset_postdata(); ?>
625
 
626
  <?php if ( filter_var( $atts['pagination'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
970
 
971
  $user = wp_get_current_user();
972
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
973
+ $customer_note = __( sprintf( 'Email address %s removed by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
974
  $customer->add_note( $customer_note );
975
 
976
  } else {
includes/tax-functions.php CHANGED
@@ -55,7 +55,7 @@ function edd_get_tax_rate( $country = false, $state = false ) {
55
  if( empty( $country ) ) {
56
  if( ! empty( $_POST['billing_country'] ) ) {
57
  $country = $_POST['billing_country'];
58
- } elseif( is_user_logged_in() && ! empty( $user_address['country'] ) ) {
59
  $country = $user_address['country'];
60
  }
61
  $country = ! empty( $country ) ? $country : edd_get_shop_country();
@@ -66,7 +66,7 @@ function edd_get_tax_rate( $country = false, $state = false ) {
66
  $state = $_POST['state'];
67
  } elseif( ! empty( $_POST['card_state'] ) ) {
68
  $state = $_POST['card_state'];
69
- } elseif( is_user_logged_in() && ! empty( $user_address['state'] ) ) {
70
  $state = $user_address['state'];
71
  }
72
  $state = ! empty( $state ) ? $state : edd_get_shop_state();
55
  if( empty( $country ) ) {
56
  if( ! empty( $_POST['billing_country'] ) ) {
57
  $country = $_POST['billing_country'];
58
+ } elseif( is_user_logged_in() && ! empty( $user_address ) ) {
59
  $country = $user_address['country'];
60
  }
61
  $country = ! empty( $country ) ? $country : edd_get_shop_country();
66
  $state = $_POST['state'];
67
  } elseif( ! empty( $_POST['card_state'] ) ) {
68
  $state = $_POST['card_state'];
69
+ } elseif( is_user_logged_in() && ! empty( $user_address ) ) {
70
  $state = $user_address['state'];
71
  }
72
  $state = ! empty( $state ) ? $state : edd_get_shop_state();
includes/template-actions.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
- /**
3
- * Manage actions and callbacks related to templates.
4
- *
5
- * @package EDD
6
- * @subpackage Templates
7
- * @copyright Copyright (c) 2017, Pippin Williamson
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 2.8
10
- */
11
-
12
- /**
13
- * Output a message and login form on the profile editor when the
14
- * current visitor is not logged in.
15
- *
16
- * @since 2.8
17
- */
18
- function edd_profile_editor_logged_out() {
19
- echo '<p class="edd-logged-out">' . esc_html( 'You need to login to edit your profile.', 'easy-digital-downloads' ) . '</p>';
20
- echo edd_login_form(); // WPCS: XSS ok.
21
- }
22
- add_action( 'edd_profile_editor_logged_out', 'edd_profile_editor_logged_out' );
23
-
24
- /**
25
- * Output a message on the login form when a user is already logged in.
26
- *
27
- * This remains mainly for backwards compatibility.
28
- *
29
- * @since 2.8
30
- */
31
- function edd_login_form_logged_in() {
32
- echo '<p class="edd-logged-in">' . esc_html( 'You are already logged in', 'easy-digital-downloads' ) . '</p>';
33
- }
34
- add_action( 'edd_login_form_logged_in', 'edd_login_form_logged_in' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/template-functions.php CHANGED
@@ -51,20 +51,9 @@ function edd_get_purchase_link( $args = array() ) {
51
 
52
  $purchase_page = edd_get_option( 'purchase_page', false );
53
  if ( ! $purchase_page || $purchase_page == 0 ) {
54
-
55
- global $no_checkout_error_displayed;
56
- if ( ! is_null( $no_checkout_error_displayed ) ) {
57
- return false;
58
- }
59
-
60
-
61
  edd_set_error( 'set_checkout', sprintf( __( 'No checkout page has been configured. Visit <a href="%s">Settings</a> to set one.', 'easy-digital-downloads' ), admin_url( 'edit.php?post_type=download&page=edd-settings' ) ) );
62
  edd_print_errors();
63
-
64
- $no_checkout_error_displayed = true;
65
-
66
  return false;
67
-
68
  }
69
 
70
  $post_id = is_object( $post ) ? $post->ID : 0;
@@ -133,6 +122,8 @@ function edd_get_purchase_link( $args = array() ) {
133
 
134
  }
135
 
 
 
136
  $data_price = 'data-price="' . $data_price_value . '"';
137
 
138
  $button_text = ! empty( $args['text'] ) ? '&nbsp;&ndash;&nbsp;' . $args['text'] : '';
@@ -297,14 +288,7 @@ function edd_purchase_variable_pricing( $download_id = 0, $args = array() ) {
297
 
298
  $item_prop = edd_add_schema_microdata() ? ' itemprop="description"' : '';
299
 
300
- // Construct the default price output.
301
- $price_output = '<span class="edd_price_option_name"' . $item_prop . '>' . esc_html( $price['name'] ) . '</span><span class="edd_price_option_sep">&nbsp;&ndash;&nbsp;</span><span class="edd_price_option_price">' . edd_currency_filter( edd_format_amount( $price['amount'] ) ) . '</span>';
302
-
303
- // Filter the default price output
304
- $price_output = apply_filters( 'edd_price_option_output', $price_output, $download_id, $key, $price, $form_id, $item_prop );
305
-
306
- // Output the filtered price output
307
- echo $price_output;
308
 
309
  if( edd_add_schema_microdata() ) {
310
  echo '<meta itemprop="price" content="' . esc_attr( $price['amount'] ) .'" />';
@@ -1113,28 +1097,3 @@ function edd_get_bundle_item_price_id( $bundle_item ) {
1113
 
1114
  return $bundle_price_id;
1115
  }
1116
-
1117
- /**
1118
- * Load a template file for a single download item.
1119
- *
1120
- * This is a wrapper function for backwards compatibility so the
1121
- * shortcode's attributes can be passed to the template file via
1122
- * a global variable.
1123
- *
1124
- * @since 2.8.0
1125
- *
1126
- * @param array $atts The [downloads] shortcode attributes.
1127
- * @param int $i The current item count.
1128
- */
1129
- function edd_download_shortcode_item( $atts, $i ) {
1130
- global $edd_download_shortcode_item_atts, $edd_download_shortcode_item_i;
1131
-
1132
- /**
1133
- * The variables are registered as part of the global scope so the template can access them.
1134
- */
1135
- $edd_download_shortcode_item_atts = $atts;
1136
- $edd_download_shortcode_item_i = $i;
1137
-
1138
- edd_get_template_part( 'shortcode', 'download' );
1139
- }
1140
- add_action( 'edd_download_shortcode_item', 'edd_download_shortcode_item', 10, 2 );
51
 
52
  $purchase_page = edd_get_option( 'purchase_page', false );
53
  if ( ! $purchase_page || $purchase_page == 0 ) {
 
 
 
 
 
 
 
54
  edd_set_error( 'set_checkout', sprintf( __( 'No checkout page has been configured. Visit <a href="%s">Settings</a> to set one.', 'easy-digital-downloads' ), admin_url( 'edit.php?post_type=download&page=edd-settings' ) ) );
55
  edd_print_errors();
 
 
 
56
  return false;
 
57
  }
58
 
59
  $post_id = is_object( $post ) ? $post->ID : 0;
122
 
123
  }
124
 
125
+ $args['display_price'] = $data_price_value;
126
+
127
  $data_price = 'data-price="' . $data_price_value . '"';
128
 
129
  $button_text = ! empty( $args['text'] ) ? '&nbsp;&ndash;&nbsp;' . $args['text'] : '';
288
 
289
  $item_prop = edd_add_schema_microdata() ? ' itemprop="description"' : '';
290
 
291
+ echo '<span class="edd_price_option_name"' . $item_prop . '>' . esc_html( $price['name'] ) . '</span><span class="edd_price_option_sep">&nbsp;&ndash;&nbsp;</span><span class="edd_price_option_price">' . edd_currency_filter( edd_format_amount( $price['amount'] ) ) . '</span>';
 
 
 
 
 
 
 
292
 
293
  if( edd_add_schema_microdata() ) {
294
  echo '<meta itemprop="price" content="' . esc_attr( $price['amount'] ) .'" />';
1097
 
1098
  return $bundle_price_id;
1099
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/user-functions.php CHANGED
@@ -126,21 +126,15 @@ function edd_get_users_purchased_products( $user = 0, $status = 'complete' ) {
126
  }
127
 
128
  // Get all the items purchased
129
- $limit_payments = apply_filters( 'edd_users_purchased_products_payments', 9999 );
130
  $payment_ids = array_reverse( explode( ',', $customer->payment_ids ) );
131
- $payment_args = array(
132
- 'output' => 'payments',
133
- 'post__in' => $payment_ids,
134
- 'status' => $status,
135
- 'number' => $limit_payments,
136
- );
137
- $payments_query = new EDD_Payments_Query( $payment_args );
138
- $payments = $payments_query->get_payments();
139
-
140
  $purchase_data = array();
141
 
142
- foreach ( $payments as $payment ) {
143
- $purchase_data[] = $payment->downloads;
144
  }
145
 
146
  if ( empty( $purchase_data ) ) {
@@ -403,42 +397,6 @@ function edd_validate_username( $username ) {
403
  return (bool) apply_filters( 'edd_validate_username', $valid, $username );
404
  }
405
 
406
- /**
407
- * Attach the customer to an existing user account when completing guest purchase
408
- *
409
- * This only runs when a user account already exists and a guest purchase is made
410
- * with the account's email address
411
- *
412
- * After attaching the customer to the user ID, the account is set to pending
413
- *
414
- * @since 2.8
415
- * @param bool $success True if payment was added successfully, false otherwise
416
- * @param int $payment_id The ID of the EDD_Payment that was added
417
- * @param int $customer_id The ID of the EDD_Customer object
418
- * @param object $customer The EDD_Customer object
419
- * @return void
420
- */
421
- function edd_connect_guest_customer_to_existing_user( $success, $payment_id, $customer_id, $customer ) {
422
-
423
- if( ! empty( $customer->user_id ) ) {
424
- return;
425
- }
426
-
427
- $user = get_user_by( 'email', $customer->email );
428
-
429
- if( ! $user ) {
430
- return;
431
- }
432
-
433
- $customer->update( array( 'user_id' => $user->ID ) );
434
-
435
- // Set a flag to force the account to be verified before purchase history can be accessed
436
- edd_set_user_to_pending( $user->ID );
437
- edd_send_user_verification_email( $user->ID );
438
-
439
- }
440
- add_action( 'edd_customer_post_attach_payment', 'edd_connect_guest_customer_to_existing_user', 10, 4 );
441
-
442
  /**
443
  * Attach the newly created user_id to a customer, if one exists
444
  *
@@ -473,7 +431,7 @@ function edd_add_past_purchases_to_new_user( $user_id ) {
473
 
474
  $email = get_the_author_meta( 'user_email', $user_id );
475
 
476
- $payments = edd_get_payments( array( 's' => $email, 'output' => 'payments' ) );
477
 
478
  if( $payments ) {
479
 
@@ -483,14 +441,18 @@ function edd_add_past_purchases_to_new_user( $user_id ) {
483
  edd_send_user_verification_email( $user_id );
484
 
485
  foreach( $payments as $payment ) {
486
- if ( is_object( $payment ) && $payment instanceof EDD_Payment ) {
487
- if ( intval( $payment->user_id ) > 0 ) {
488
- continue; // This payment already associated with an account
489
- }
490
-
491
- $payment->user_id = $user_id;
492
- $payment->save();
493
  }
 
 
 
 
 
 
 
 
 
494
  }
495
  }
496
 
@@ -528,14 +490,23 @@ function edd_get_customer_address( $user_id = 0 ) {
528
  $address = array();
529
  }
530
 
531
- $address = wp_parse_args( $address, array(
532
- 'line1' => '',
533
- 'line2' => '',
534
- 'city' => '',
535
- 'zip' => '',
536
- 'country' => '',
537
- 'state' => '',
538
- ) );
 
 
 
 
 
 
 
 
 
539
 
540
  return $address;
541
  }
@@ -654,9 +625,9 @@ function edd_set_user_to_verified( $user_id = 0 ) {
654
  * @since 2.4.4
655
  * @return bool
656
  */
657
- function edd_user_pending_verification( $user_id = null ) {
658
 
659
- if( is_null( $user_id ) ) {
660
  $user_id = get_current_user_id();
661
  }
662
 
126
  }
127
 
128
  // Get all the items purchased
 
129
  $payment_ids = array_reverse( explode( ',', $customer->payment_ids ) );
130
+ $limit_payments = apply_filters( 'edd_users_purchased_products_payments', 50 );
131
+ if ( ! empty( $limit_payments ) ) {
132
+ $payment_ids = array_slice( $payment_ids, 0, $limit_payments );
133
+ }
 
 
 
 
 
134
  $purchase_data = array();
135
 
136
+ foreach ( $payment_ids as $payment_id ) {
137
+ $purchase_data[] = edd_get_payment_meta_downloads( $payment_id );
138
  }
139
 
140
  if ( empty( $purchase_data ) ) {
397
  return (bool) apply_filters( 'edd_validate_username', $valid, $username );
398
  }
399
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
400
  /**
401
  * Attach the newly created user_id to a customer, if one exists
402
  *
431
 
432
  $email = get_the_author_meta( 'user_email', $user_id );
433
 
434
+ $payments = edd_get_payments( array( 's' => $email ) );
435
 
436
  if( $payments ) {
437
 
441
  edd_send_user_verification_email( $user_id );
442
 
443
  foreach( $payments as $payment ) {
444
+ if( intval( edd_get_payment_user_id( $payment->ID ) ) > 0 ) {
445
+ continue; // This payment already associated with an account
 
 
 
 
 
446
  }
447
+
448
+ $meta = edd_get_payment_meta( $payment->ID );
449
+ $meta['user_info'] = maybe_unserialize( $meta['user_info'] );
450
+ $meta['user_info']['id'] = $user_id;
451
+ $meta['user_info'] = $meta['user_info'];
452
+
453
+ // Store the updated user ID in the payment meta
454
+ edd_update_payment_meta( $payment->ID, '_edd_payment_meta', $meta );
455
+ edd_update_payment_meta( $payment->ID, '_edd_payment_user_id', $user_id );
456
  }
457
  }
458
 
490
  $address = array();
491
  }
492
 
493
+ if( ! isset( $address['line1'] ) )
494
+ $address['line1'] = '';
495
+
496
+ if( ! isset( $address['line2'] ) )
497
+ $address['line2'] = '';
498
+
499
+ if( ! isset( $address['city'] ) )
500
+ $address['city'] = '';
501
+
502
+ if( ! isset( $address['zip'] ) )
503
+ $address['zip'] = '';
504
+
505
+ if( ! isset( $address['country'] ) )
506
+ $address['country'] = '';
507
+
508
+ if( ! isset( $address['state'] ) )
509
+ $address['state'] = '';
510
 
511
  return $address;
512
  }
625
  * @since 2.4.4
626
  * @return bool
627
  */
628
+ function edd_user_pending_verification( $user_id = 0 ) {
629
 
630
+ if( empty( $user_id ) ) {
631
  $user_id = get_current_user_id();
632
  }
633
 
includes/widgets.php CHANGED
@@ -404,7 +404,7 @@ class EDD_Product_Details_Widget extends WP_Widget {
404
  <!-- Download title -->
405
  <p>
406
  <input <?php checked( $instance['download_title'], 'on' ); ?> id="<?php echo esc_attr( $this->get_field_id( 'download_title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'download_title' ) ); ?>" type="checkbox" />
407
- <label for="<?php echo esc_attr( $this->get_field_id( 'download_title' ) ); ?>"><?php printf( __( 'Show %s Title', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></label>
408
  </p>
409
 
410
  <!-- Show purchase button -->
404
  <!-- Download title -->
405
  <p>
406
  <input <?php checked( $instance['download_title'], 'on' ); ?> id="<?php echo esc_attr( $this->get_field_id( 'download_title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'download_title' ) ); ?>" type="checkbox" />
407
+ <label for="<?php echo esc_attr( $this->get_field_id( 'download_title' ) ); ?>"><?php _e( 'Show Title', 'easy-digital-downloads' ); ?></label>
408
  </p>
409
 
410
  <!-- Show purchase button -->
languages/easy-digital-downloads.pot CHANGED
@@ -2,27 +2,27 @@
2
  # This file is distributed under the same license as the Easy Digital Downloads package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Easy Digital Downloads 2.8.15\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
- "POT-Creation-Date: 2017-12-13 20:39:35+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
  "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: WP-Translations (http://wp-translations.org/)\n"
13
  "Language-Team: WP-Translations <wpt@wp-translations.org>\n"
 
 
 
 
14
  "Language: en_US\n"
15
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
  "X-Poedit-Country: United States\n"
17
  "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: "
19
- "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
20
- "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
21
  "X-Poedit-Basepath: ../\n"
22
  "X-Poedit-SearchPath-0: .\n"
23
  "X-Poedit-Bookmarks: \n"
24
  "X-Textdomain-Support: yes\n"
25
- "X-Generator: grunt-wp-i18n1.0.0\n"
26
 
27
  #: easy-digital-downloads.php:183 easy-digital-downloads.php:195
28
  msgid "Cheatin&#8217; huh?"
@@ -38,21 +38,21 @@ msgid ""
38
  "or %5$supdate now%6$s."
39
  msgstr ""
40
 
41
- #: includes/EDD_SL_Plugin_Updater.php:399
42
  msgid "You do not have permission to install plugin updates"
43
  msgstr ""
44
 
45
- #: includes/EDD_SL_Plugin_Updater.php:399
46
  #: includes/admin/customers/customer-actions.php:301
47
  #: includes/admin/customers/customer-actions.php:345
48
  #: includes/admin/customers/customer-actions.php:603
49
  #: includes/admin/discounts/discount-actions.php:30
50
- #: includes/admin/discounts/discount-actions.php:112
51
- #: includes/admin/discounts/discount-actions.php:172
52
- #: includes/admin/discounts/discount-actions.php:176
53
- #: includes/admin/discounts/discount-actions.php:197
54
- #: includes/admin/discounts/discount-actions.php:201
55
- #: includes/admin/discounts/discount-actions.php:222
56
  #: includes/admin/discounts/edit-discount.php:16
57
  #: includes/admin/downloads/dashboard-columns.php:171
58
  #: includes/admin/import/class-batch-import-downloads.php:65
@@ -78,7 +78,7 @@ msgstr ""
78
  #: includes/admin/tools/class-edd-tools-recount-single-customer-stats.php:149
79
  #: includes/admin/tools/class-edd-tools-recount-store-earnings.php:154
80
  #: includes/admin/tools/class-edd-tools-reset-stats.php:180
81
- #: includes/admin/tools.php:1027 includes/admin/tools.php:1033
82
  #: includes/admin/upgrades/upgrade-functions.php:205
83
  #: includes/admin/upgrades/upgrade-functions.php:521
84
  #: includes/admin/upgrades/upgrade-functions.php:603
@@ -87,68 +87,46 @@ msgstr ""
87
  #: includes/admin/upgrades/upgrade-functions.php:885
88
  #: includes/admin/upgrades/upgrade-functions.php:1013
89
  #: includes/admin/upgrades/upgrade-functions.php:1098
90
- #: includes/api/class-edd-api.php:1990 includes/api/class-edd-api.php:1995
91
- #: includes/api/class-edd-api.php:2007 includes/api/class-edd-api.php:2009
92
- #: includes/cart/class-edd-cart.php:1470 includes/cart/class-edd-cart.php:1484
93
  #: includes/class-edd-license-handler.php:307
94
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
95
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1248
96
- #: includes/emails/actions.php:53 includes/emails/template.php:243
97
- #: includes/error-tracking.php:40 includes/gateways/functions.php:221
98
- #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
99
- #: includes/process-download.php:289 includes/process-download.php:822
100
- #: includes/query-filters.php:48 includes/user-functions.php:880
101
- #: includes/user-functions.php:905 includes/user-functions.php:958
102
  msgid "Error"
103
  msgstr ""
104
 
105
- #: includes/admin/add-ons.php:24
106
- msgid "Popular"
107
- msgstr ""
108
-
109
- #: includes/admin/add-ons.php:24
110
- msgid "New"
111
  msgstr ""
112
 
113
- #: includes/admin/add-ons.php:24
114
- msgid "View all Integrations"
115
  msgstr ""
116
 
117
- #: includes/admin/add-ons.php:37
118
- msgid "Apps and Integrations for Easy Digital Downloads"
119
- msgstr ""
120
-
121
- #: includes/admin/add-ons.php:39 includes/admin/add-ons.php:88
122
- msgid "Browse All Integrations"
123
- msgstr ""
124
-
125
- #: includes/admin/add-ons.php:42
126
  msgid ""
127
- "These <em><strong>add functionality</strong></em> to your Easy Digital "
128
- "Downloads powered store."
129
  msgstr ""
130
 
131
- #: includes/admin/add-ons.php:122
132
  msgid ""
133
  "There was an error retrieving the extensions list from the server. Please "
134
  "try again later."
135
  msgstr ""
136
 
137
- #: includes/admin/admin-actions.php:63
138
- msgid "Apps and Integrations"
139
- msgstr ""
140
-
141
- #: includes/admin/admin-actions.php:81
142
- #: includes/admin/discounts/discount-codes.php:33 includes/post-types.php:30
143
- #: includes/post-types.php:77 includes/post-types.php:107
144
- msgid "Add New"
145
- msgstr ""
146
-
147
  #: includes/admin/admin-footer.php:27
148
  msgid ""
149
  "Thank you for using <a href=\"%1$s\" target=\"_blank\">Easy Digital "
150
- "Downloads</a>! Please <a href=\"%2$s\" target=\"_blank\">rate us on "
151
- "WordPress.org</a>"
152
  msgstr ""
153
 
154
  #: includes/admin/admin-pages.php:38
@@ -195,7 +173,7 @@ msgstr ""
195
 
196
  #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
197
  #: includes/admin/settings/contextual-help.php:87
198
- #: includes/admin/settings/register-settings.php:1220
199
  msgid "Extensions"
200
  msgstr ""
201
 
@@ -208,7 +186,7 @@ msgstr ""
208
  msgid "API Key"
209
  msgstr ""
210
 
211
- #: includes/admin/class-api-keys-table.php:53 includes/admin/tools.php:69
212
  msgid "API Keys"
213
  msgstr ""
214
 
@@ -225,8 +203,8 @@ msgid "Revoke"
225
  msgstr ""
226
 
227
  #: includes/admin/class-api-keys-table.php:176
228
- #: includes/checkout/template.php:484 includes/checkout/template.php:490
229
- #: templates/shortcode-register.php:20
230
  msgid "Username"
231
  msgstr ""
232
 
@@ -246,7 +224,7 @@ msgstr ""
246
  msgid "Generate New API Keys"
247
  msgstr ""
248
 
249
- #: includes/admin/class-edd-notices.php:48 includes/template-functions.php:61
250
  msgid ""
251
  "No checkout page has been configured. Visit <a href=\"%s\">Settings</a> to "
252
  "set one."
@@ -406,8 +384,8 @@ msgid "Failed to set primary email"
406
  msgstr ""
407
 
408
  #: includes/admin/customers/class-customer-table.php:72
409
- #: includes/admin/payments/class-payments-table.php:277
410
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:148
411
  #: includes/admin/reporting/class-sales-logs-list-table.php:131
412
  msgid "Customer"
413
  msgstr ""
@@ -427,9 +405,9 @@ msgstr ""
427
  #: includes/admin/customers/class-customer-table.php:161
428
  #: includes/admin/discounts/class-discount-codes-table.php:221
429
  #: includes/admin/discounts/class-discount-codes-table.php:289
430
- #: includes/admin/payments/class-payments-table.php:373
431
- #: includes/admin/payments/class-payments-table.php:445
432
- #: includes/payments/functions.php:1597
433
  msgid "Delete"
434
  msgstr ""
435
 
@@ -442,7 +420,7 @@ msgstr ""
442
  #: includes/admin/discounts/class-discount-codes-table.php:145
443
  #: includes/admin/discounts/edit-discount.php:37
444
  #: includes/admin/downloads/dashboard-columns.php:31
445
- #: includes/admin/payments/view-order-details.php:660
446
  #: includes/admin/reporting/class-export-customers.php:76
447
  #: includes/admin/reporting/export/class-batch-export-customers.php:43
448
  #: includes/admin/reporting/export/class-batch-export-downloads.php:44
@@ -510,7 +488,7 @@ msgid "An error has occured. Please try again."
510
  msgstr ""
511
 
512
  #: includes/admin/customers/customer-actions.php:207
513
- #: includes/user-functions.php:905
514
  msgid "Nonce verification failed."
515
  msgstr ""
516
 
@@ -530,31 +508,17 @@ msgstr ""
530
  msgid "Email successfully added to customer."
531
  msgstr ""
532
 
533
- #: includes/admin/customers/customer-actions.php:253
534
- msgid "Email address %s added by %s"
535
- msgstr ""
536
-
537
- #: includes/admin/customers/customer-actions.php:257
538
- #: includes/admin/customers/customer-actions.php:355
539
- msgid "Email address %s set as primary by %s"
540
- msgstr ""
541
-
542
  #: includes/admin/customers/customer-actions.php:301
543
  #: includes/admin/customers/customer-actions.php:345
544
  #: includes/admin/customers/customer-actions.php:603
545
  #: includes/admin/import/import-functions.php:31
546
  #: includes/admin/import/import-functions.php:113
547
  #: includes/admin/reporting/export/export-actions.php:23
548
- #: includes/api/class-edd-api.php:1990
549
  #: includes/class-edd-license-handler.php:307
550
  msgid "Nonce verification failed"
551
  msgstr ""
552
 
553
- #: includes/admin/customers/customer-actions.php:311
554
- #: includes/shortcodes.php:935
555
- msgid "Email address %s removed by %s"
556
- msgstr ""
557
-
558
  #: includes/admin/customers/customer-actions.php:395
559
  msgid "A note is required"
560
  msgstr ""
@@ -605,7 +569,7 @@ msgid "Invalid Customer ID Provided."
605
  msgstr ""
606
 
607
  #: includes/admin/customers/customers.php:116
608
- #: includes/admin/payments/view-order-details.php:613
609
  msgid "Customer Details"
610
  msgstr ""
611
 
@@ -628,14 +592,14 @@ msgstr ""
628
  #: includes/admin/customers/customers.php:242
629
  #: includes/admin/reporting/class-export-payments.php:68
630
  #: includes/admin/reporting/export/class-batch-export-payments.php:48
631
- #: includes/admin/tools.php:686 includes/checkout/template.php:373
632
  #: templates/shortcode-profile-editor.php:152
633
  msgid "City"
634
  msgstr ""
635
 
636
  #: includes/admin/customers/customers.php:269
637
- #: includes/admin/settings/register-settings.php:2018
638
- #: includes/admin/tools.php:695 includes/checkout/template.php:435
639
  #: templates/shortcode-profile-editor.php:171
640
  msgid "State / Province"
641
  msgstr ""
@@ -662,7 +626,7 @@ msgstr ""
662
 
663
  #: includes/admin/customers/customers.php:312
664
  #: includes/admin/reporting/class-export-payments.php:187
665
- #: includes/admin/reporting/export/class-batch-export-payments.php:224
666
  msgid "none"
667
  msgstr ""
668
 
@@ -676,9 +640,9 @@ msgstr ""
676
 
677
  #: includes/admin/customers/customers.php:328
678
  #: includes/admin/customers/customers.php:610
679
- #: includes/admin/payments/view-order-details.php:651
680
- #: includes/admin/payments/view-order-details.php:671
681
- #: includes/admin/thickbox.php:132 includes/class-edd-html-elements.php:803
682
  msgid "Cancel"
683
  msgstr ""
684
 
@@ -703,24 +667,24 @@ msgid ""
703
  msgstr ""
704
 
705
  #: includes/admin/customers/customers.php:378
706
- #: includes/admin/payments/class-payments-table.php:273
707
- #: includes/admin/payments/view-order-details.php:664
708
  #: includes/admin/reporting/class-export-customers.php:68
709
  #: includes/admin/reporting/class-export-customers.php:79
710
  #: includes/admin/reporting/class-export-payments.php:63
711
  #: includes/admin/reporting/export/class-batch-export-customers.php:44
712
  #: includes/admin/reporting/export/class-batch-export-payments.php:42
713
- #: includes/admin/tools.php:497 templates/shortcode-register.php:25
714
  msgid "Email"
715
  msgstr ""
716
 
717
  #: includes/admin/customers/customers.php:379
718
  #: includes/admin/customers/customers.php:438
719
  #: includes/admin/customers/customers.php:471
720
- #: includes/admin/payments/view-order-details.php:522
721
- #: includes/admin/payments/view-order-details.php:585
722
- #: includes/admin/payments/view-order-details.php:648
723
- #: includes/admin/payments/view-order-details.php:668
724
  #: templates/checkout_cart.php:13
725
  msgid "Actions"
726
  msgstr ""
@@ -731,12 +695,8 @@ msgid "Make Primary"
731
  msgstr ""
732
 
733
  #: includes/admin/customers/customers.php:401
734
- #: includes/admin/downloads/metabox.php:436
735
- #: includes/admin/downloads/metabox.php:642
736
- #: includes/admin/downloads/metabox.php:698
737
- #: includes/admin/downloads/metabox.php:823
738
- #: includes/admin/payments/view-order-details.php:490
739
- #: includes/admin/settings/register-settings.php:2021 includes/scripts.php:226
740
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
741
  #: templates/shortcode-profile-editor.php:123
742
  msgid "Remove"
@@ -760,7 +720,9 @@ msgid "Recent Payments"
760
  msgstr ""
761
 
762
  #: includes/admin/customers/customers.php:434
763
- #: includes/admin/payments/class-payments-table.php:272
 
 
764
  #: includes/admin/reporting/class-export-payments.php:61
765
  #: includes/admin/reporting/class-export.php:69
766
  #: includes/admin/reporting/export/class-batch-export-customers.php:42
@@ -773,7 +735,7 @@ msgstr ""
773
  #: includes/admin/discounts/add-discount.php:56
774
  #: includes/admin/discounts/class-discount-codes-table.php:147
775
  #: includes/admin/discounts/edit-discount.php:70
776
- #: includes/admin/payments/class-payments-table.php:275
777
  #: includes/admin/reporting/class-export-payments.php:74
778
  #: includes/admin/reporting/export/class-batch-export-payments.php:55
779
  #: templates/history-purchases.php:20
@@ -782,19 +744,19 @@ msgstr ""
782
 
783
  #: includes/admin/customers/customers.php:436
784
  #: includes/admin/downloads/dashboard-columns.php:37
785
- #: includes/admin/payments/class-payments-table.php:276
786
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:94
787
  #: includes/admin/reporting/class-export-download-history.php:64
788
  #: includes/admin/reporting/class-export-payments.php:80
789
  #: includes/admin/reporting/class-export.php:70
790
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:152
791
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:134
792
  #: includes/admin/reporting/class-sales-logs-list-table.php:135
793
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:47
794
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:42
795
  #: includes/admin/reporting/export/class-batch-export-payments.php:61
796
- #: includes/admin/reporting/export/class-batch-export-sales.php:46
797
- #: includes/admin/tools.php:587 templates/history-purchases.php:19
798
  #: templates/shortcode-receipt.php:59
799
  msgid "Date"
800
  msgstr ""
@@ -802,11 +764,11 @@ msgstr ""
802
  #: includes/admin/customers/customers.php:437
803
  #: includes/admin/discounts/class-discount-codes-table.php:151
804
  #: includes/admin/discounts/edit-discount.php:175
805
- #: includes/admin/payments/class-payments-table.php:278
806
  #: includes/admin/reporting/class-export-payments.php:82
807
  #: includes/admin/reporting/export/class-batch-export-downloads.php:49
808
  #: includes/admin/reporting/export/class-batch-export-payments.php:66
809
- #: includes/admin/tools.php:614
810
  msgid "Status"
811
  msgstr ""
812
 
@@ -852,7 +814,7 @@ msgstr ""
852
  msgid "Delete Customer"
853
  msgstr ""
854
 
855
- #: includes/admin/customers/customers.php:638 includes/admin/tools.php:153
856
  msgid "Recount Customer Stats"
857
  msgstr ""
858
 
@@ -862,7 +824,7 @@ msgid ""
862
  "customer."
863
  msgstr ""
864
 
865
- #: includes/admin/customers/customers.php:646 includes/admin/tools.php:140
866
  msgid "Recount Stats"
867
  msgstr ""
868
 
@@ -889,7 +851,7 @@ msgstr ""
889
  #: includes/admin/reporting/class-download-reports-table.php:112
890
  #: includes/admin/reporting/export/class-batch-export-downloads.php:59
891
  #: includes/admin/reporting/graphing.php:333
892
- #: includes/admin/reporting/graphing.php:634
893
  #: includes/admin/reporting/reports.php:55
894
  msgid "Earnings"
895
  msgstr ""
@@ -902,12 +864,12 @@ msgstr[0] ""
902
  msgstr[1] ""
903
 
904
  #: includes/admin/dashboard-widgets.php:80
905
- #: includes/admin/reporting/graphing.php:676 includes/class-edd-stats.php:89
906
  msgid "Last Month"
907
  msgstr ""
908
 
909
  #: includes/admin/dashboard-widgets.php:105
910
- #: includes/admin/reporting/graphing.php:670 includes/class-edd-stats.php:84
911
  msgid "Today"
912
  msgstr ""
913
 
@@ -917,7 +879,7 @@ msgstr ""
917
  #: includes/admin/reporting/export/class-batch-export-downloads.php:58
918
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:66
919
  #: includes/admin/reporting/graphing.php:334
920
- #: includes/admin/reporting/graphing.php:635
921
  #: includes/admin/reporting/logs.php:145
922
  msgid "Sales"
923
  msgstr ""
@@ -928,7 +890,7 @@ msgstr ""
928
 
929
  #: includes/admin/dashboard-widgets.php:138
930
  #: includes/admin/reporting/class-categories-reports-table.php:85
931
- #: includes/admin/tools.php:914
932
  msgid "Total Earnings"
933
  msgstr ""
934
 
@@ -957,7 +919,8 @@ msgid "Go Back"
957
  msgstr ""
958
 
959
  #: includes/admin/discounts/add-discount.php:27
960
- msgid "The name of this discount."
 
961
  msgstr ""
962
 
963
  #: includes/admin/discounts/add-discount.php:33
@@ -1071,9 +1034,10 @@ msgid "Expiration date"
1071
  msgstr ""
1072
 
1073
  #: includes/admin/discounts/add-discount.php:134
 
1074
  msgid ""
1075
  "Enter the expiration date for this discount code in the format of "
1076
- "mm/dd/yyyy. For no expiration, leave blank."
1077
  msgstr ""
1078
 
1079
  #: includes/admin/discounts/add-discount.php:140
@@ -1082,9 +1046,10 @@ msgid "Minimum Amount"
1082
  msgstr ""
1083
 
1084
  #: includes/admin/discounts/add-discount.php:144
 
1085
  msgid ""
1086
- "The minimum dollar amount that must be in the cart before this discount can "
1087
- "be used. Leave blank for no minimum."
1088
  msgstr ""
1089
 
1090
  #: includes/admin/discounts/add-discount.php:150
@@ -1114,8 +1079,8 @@ msgid "Add Discount Code"
1114
  msgstr ""
1115
 
1116
  #: includes/admin/discounts/class-discount-codes-table.php:127
1117
- #: includes/admin/payments/class-payments-table.php:249
1118
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:350
1119
  #: includes/admin/reporting/class-sales-logs-list-table.php:290
1120
  msgid "All"
1121
  msgstr ""
@@ -1204,13 +1169,8 @@ msgstr ""
1204
 
1205
  #: includes/admin/discounts/contextual-help.php:38
1206
  #: includes/admin/settings/contextual-help.php:42
1207
- #: includes/admin/settings/register-settings.php:1213
1208
- #: includes/admin/settings/register-settings.php:1268
1209
- #: includes/admin/settings/register-settings.php:1273
1210
- #: includes/admin/settings/register-settings.php:1277
1211
- #: includes/admin/settings/register-settings.php:1282
1212
- #: includes/admin/settings/register-settings.php:1285
1213
- #: includes/admin/tools.php:68
1214
  msgid "General"
1215
  msgstr ""
1216
 
@@ -1314,27 +1274,32 @@ msgid ""
1314
  msgstr ""
1315
 
1316
  #: includes/admin/discounts/discount-actions.php:30
1317
- #: includes/admin/discounts/discount-actions.php:226
1318
  msgid "You do not have permission to create discount codes"
1319
  msgstr ""
1320
 
1321
- #: includes/admin/discounts/discount-actions.php:112
1322
- #: includes/admin/discounts/discount-actions.php:201
1323
  msgid "You do not have permission to edit discount codes"
1324
  msgstr ""
1325
 
1326
- #: includes/admin/discounts/discount-actions.php:172
1327
- #: includes/admin/discounts/discount-actions.php:197
1328
- #: includes/admin/discounts/discount-actions.php:222
1329
  msgid "Trying to cheat or something?"
1330
  msgstr ""
1331
 
1332
- #: includes/admin/discounts/discount-actions.php:176
1333
  msgid "You do not have permission to delete discount codes"
1334
  msgstr ""
1335
 
 
 
 
 
 
1336
  #: includes/admin/discounts/discount-codes.php:36
1337
- #: includes/admin/payments/class-payments-table.php:192
1338
  #: includes/admin/reporting/logs.php:62 includes/admin/reporting/logs.php:122
1339
  msgid "Search"
1340
  msgstr ""
@@ -1347,22 +1312,6 @@ msgstr ""
1347
  msgid "Edit Discount"
1348
  msgstr ""
1349
 
1350
- #: includes/admin/discounts/edit-discount.php:41
1351
- msgid "The name of this discount"
1352
- msgstr ""
1353
-
1354
- #: includes/admin/discounts/edit-discount.php:149
1355
- msgid ""
1356
- "Enter the expiration date for this discount code in the format of "
1357
- "mm/dd/yyyy. For no expiration, leave blank"
1358
- msgstr ""
1359
-
1360
- #: includes/admin/discounts/edit-discount.php:169
1361
- msgid ""
1362
- "The minimum amount that must be purchased before this discount can be used. "
1363
- "Leave blank for no minimum."
1364
- msgstr ""
1365
-
1366
  #: includes/admin/discounts/edit-discount.php:182
1367
  msgid "The status of this discount code."
1368
  msgstr ""
@@ -1484,8 +1433,8 @@ msgstr ""
1484
 
1485
  #: includes/admin/downloads/dashboard-columns.php:34
1486
  #: includes/admin/downloads/dashboard-columns.php:286
1487
- #: includes/admin/downloads/metabox.php:456
1488
- #: includes/admin/payments/view-order-details.php:510
1489
  #: includes/admin/reporting/export/class-batch-export-downloads.php:52
1490
  #: templates/shortcode-receipt.php:130
1491
  msgid "Price"
@@ -1524,229 +1473,191 @@ msgstr ""
1524
  msgid "%1$s Stats"
1525
  msgstr ""
1526
 
1527
- #: includes/admin/downloads/metabox.php:47
1528
- msgid "Product Reviews"
1529
- msgstr ""
1530
-
1531
- #: includes/admin/downloads/metabox.php:307
1532
  msgid "Pricing Options:"
1533
  msgstr ""
1534
 
1535
- #: includes/admin/downloads/metabox.php:313
1536
  msgid "Enable variable pricing"
1537
  msgstr ""
1538
 
1539
- #: includes/admin/downloads/metabox.php:343
1540
  msgid ""
1541
  "Enable multi-option purchase mode. Allows multiple price options to be "
1542
  "added to your cart at once"
1543
  msgstr ""
1544
 
1545
- #: includes/admin/downloads/metabox.php:372
1546
- msgid "Add New Price"
1547
- msgstr ""
1548
-
1549
- #: includes/admin/downloads/metabox.php:426
1550
- msgid "Click and drag to re-order price options"
1551
- msgstr ""
1552
-
1553
- #: includes/admin/downloads/metabox.php:427
1554
- msgid "Price ID: %s"
1555
  msgstr ""
1556
 
1557
- #: includes/admin/downloads/metabox.php:433 includes/scripts.php:233
1558
- msgid "Show advanced settings"
1559
  msgstr ""
1560
 
1561
- #: includes/admin/downloads/metabox.php:436
1562
- msgid "Remove price option %s"
1563
  msgstr ""
1564
 
1565
  #: includes/admin/downloads/metabox.php:446
1566
- #: includes/admin/downloads/metabox.php:450
1567
- msgid "Option Name"
1568
- msgstr ""
1569
-
1570
- #: includes/admin/downloads/metabox.php:478 includes/download-functions.php:511
1571
- msgid "Default"
1572
  msgstr ""
1573
 
1574
- #: includes/admin/downloads/metabox.php:481
1575
- msgid "Set ID %s as default price"
1576
  msgstr ""
1577
 
1578
- #: includes/admin/downloads/metabox.php:546
1579
  msgid "Product Type Options:"
1580
  msgstr ""
1581
 
1582
- #: includes/admin/downloads/metabox.php:557
1583
  msgid "Select a product type"
1584
  msgstr ""
1585
 
1586
- #: includes/admin/downloads/metabox.php:558
1587
  msgid ""
1588
  "<strong>Product Type</strong>: Sell this item as a single product, or use "
1589
  "the Bundle type to sell a collection of products."
1590
  msgstr ""
1591
 
1592
- #: includes/admin/downloads/metabox.php:591
1593
- msgid "Bundled %s"
1594
- msgstr ""
1595
-
1596
- #: includes/admin/downloads/metabox.php:599
1597
- #: includes/admin/downloads/metabox.php:659
1598
- msgid "Click and drag to re-order bundled %s"
1599
- msgstr ""
1600
-
1601
- #: includes/admin/downloads/metabox.php:603
1602
- #: includes/admin/downloads/metabox.php:663
1603
- msgid "Select %s:"
1604
  msgstr ""
1605
 
1606
- #: includes/admin/downloads/metabox.php:617
1607
- #: includes/admin/downloads/metabox.php:676
1608
- msgid "Price assignment:"
1609
  msgstr ""
1610
 
1611
- #: includes/admin/downloads/metabox.php:642
1612
  msgid "Remove bundle option %s"
1613
  msgstr ""
1614
 
1615
- #: includes/admin/downloads/metabox.php:653
1616
- msgid "Bundled %s:"
1617
- msgstr ""
1618
-
1619
- #: includes/admin/downloads/metabox.php:698
1620
- msgid "Remove bundle option 1"
1621
  msgstr ""
1622
 
1623
- #: includes/admin/downloads/metabox.php:708
1624
- #: includes/admin/downloads/metabox.php:776
1625
  msgid "Add New File"
1626
  msgstr ""
1627
 
1628
- #: includes/admin/downloads/metabox.php:818
1629
- msgid "Click and drag to re-order files"
1630
- msgstr ""
1631
-
1632
- #: includes/admin/downloads/metabox.php:819
1633
- msgid "%1$s file ID: %2$s"
1634
- msgstr ""
1635
-
1636
- #: includes/admin/downloads/metabox.php:823
1637
- msgid "Remove file %s"
1638
  msgstr ""
1639
 
1640
- #: includes/admin/downloads/metabox.php:831
1641
- #: includes/admin/downloads/metabox.php:837
1642
  msgid "File Name"
1643
  msgstr ""
1644
 
1645
- #: includes/admin/downloads/metabox.php:843
1646
  msgid "File URL"
1647
  msgstr ""
1648
 
1649
- #: includes/admin/downloads/metabox.php:848
 
 
 
 
 
 
 
1650
  msgid "Upload or enter the file URL"
1651
  msgstr ""
1652
 
1653
- #: includes/admin/downloads/metabox.php:853
1654
  msgid "Insert File"
1655
  msgstr ""
1656
 
1657
- #: includes/admin/downloads/metabox.php:853
1658
  msgid "Insert"
1659
  msgstr ""
1660
 
1661
- #: includes/admin/downloads/metabox.php:853
1662
  msgid "Upload a File"
1663
  msgstr ""
1664
 
1665
- #: includes/admin/downloads/metabox.php:860
1666
- msgid "Price Assignment"
1667
  msgstr ""
1668
 
1669
- #: includes/admin/downloads/metabox.php:860
1670
- msgid ""
1671
- "<strong>Price Assignment</strong>: With variable pricing enabled, you can "
1672
- "choose to allow certain price variations access to specific files, or allow "
1673
- "all price variations to access a file."
1674
- msgstr ""
1675
-
1676
- #: includes/admin/downloads/metabox.php:905
1677
  msgid "Insert into %s"
1678
  msgstr ""
1679
 
1680
- #: includes/admin/downloads/metabox.php:931
1681
  msgid "File Download Limit:"
1682
  msgstr ""
1683
 
1684
- #: includes/admin/downloads/metabox.php:938
1685
  msgid "Leave blank for global setting or 0 for unlimited"
1686
  msgstr ""
1687
 
1688
- #: includes/admin/downloads/metabox.php:940
1689
  msgid ""
1690
  "<strong>File Download Limit</strong>: Limit the number of times a customer "
1691
  "who purchased this product can access their download links."
1692
  msgstr ""
1693
 
1694
- #: includes/admin/downloads/metabox.php:976
1695
  msgid "Ignore Tax:"
1696
  msgstr ""
1697
 
1698
- #: includes/admin/downloads/metabox.php:982
1699
  msgid "Mark this product as exclusive of tax"
1700
  msgstr ""
1701
 
1702
- #: includes/admin/downloads/metabox.php:1004
1703
  msgid "Item Quantities:"
1704
  msgstr ""
1705
 
1706
- #: includes/admin/downloads/metabox.php:1010
1707
  msgid "Disable quantity input for this product"
1708
  msgstr ""
1709
 
1710
- #: includes/admin/downloads/metabox.php:1012
1711
  msgid ""
1712
  "<strong>Item Quantities</strong>: if disabled, customers will not be "
1713
  "provided an option to change the number they wish to purchase."
1714
  msgstr ""
1715
 
1716
- #: includes/admin/downloads/metabox.php:1031
1717
- #: includes/admin/settings/register-settings.php:737
1718
- #: includes/admin/thickbox.php:59 includes/checkout/template.php:893
1719
- #: includes/shortcodes.php:49 includes/template-functions.php:78
1720
  msgid "Purchase"
1721
  msgstr ""
1722
 
1723
- #: includes/admin/downloads/metabox.php:1038
1724
  msgid "Purchase Shortcode:"
1725
  msgstr ""
1726
 
1727
- #: includes/admin/downloads/metabox.php:1039
1728
  msgid ""
1729
  "<strong>Purchse Shortcode</strong>: Use this shortcode to output a purchase "
1730
  "link for this product in the location of your choosing."
1731
  msgstr ""
1732
 
1733
- #: includes/admin/downloads/metabox.php:1060
1734
  msgid "Accounting Options:"
1735
  msgstr ""
1736
 
1737
- #: includes/admin/downloads/metabox.php:1068
1738
  msgid "Enter an SKU for this %s."
1739
  msgstr ""
1740
 
1741
- #: includes/admin/downloads/metabox.php:1087
1742
  msgid "Button Options:"
1743
  msgstr ""
1744
 
1745
- #: includes/admin/downloads/metabox.php:1094
1746
  msgid "Disable the automatic output of the purchase button"
1747
  msgstr ""
1748
 
1749
- #: includes/admin/downloads/metabox.php:1095
1750
  msgid ""
1751
  "<strong>Automatic Output</strong>: By default, the purchase buttons will be "
1752
  "displayed at the bottom of the download, when disabled you will need to use "
@@ -1754,23 +1665,23 @@ msgid ""
1754
  "where you prefer."
1755
  msgstr ""
1756
 
1757
- #: includes/admin/downloads/metabox.php:1105
1758
- #: includes/admin/settings/register-settings.php:751
1759
- #: includes/admin/thickbox.php:97
1760
  msgid "Add to Cart"
1761
  msgstr ""
1762
 
1763
- #: includes/admin/downloads/metabox.php:1106
1764
- #: includes/admin/settings/register-settings.php:758 includes/shortcodes.php:47
1765
- #: includes/template-functions.php:78
1766
  msgid "Buy Now"
1767
  msgstr ""
1768
 
1769
- #: includes/admin/downloads/metabox.php:1119
1770
  msgid "Purchase button behavior"
1771
  msgstr ""
1772
 
1773
- #: includes/admin/downloads/metabox.php:1121
1774
  msgid ""
1775
  "<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
1776
  "eCommerce flow. A Buy Now button bypasses most of the process, taking the "
@@ -1778,53 +1689,43 @@ msgid ""
1778
  "process of buying the product."
1779
  msgstr ""
1780
 
1781
- #: includes/admin/downloads/metabox.php:1123
1782
  msgid ""
1783
  "<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
1784
  "eCommerce flow. Buy Now buttons are only available for stores that have a "
1785
  "single supported gateway active and that do not use taxes."
1786
  msgstr ""
1787
 
1788
- #: includes/admin/downloads/metabox.php:1161
1789
  msgid ""
1790
  "Special notes or instructions for this product. These notes will be added "
1791
  "to the purchase receipt."
1792
  msgstr ""
1793
 
1794
- #: includes/admin/downloads/metabox.php:1188
1795
  msgid "Sales:"
1796
  msgstr ""
1797
 
1798
- #: includes/admin/downloads/metabox.php:1193
1799
  msgid "Earnings:"
1800
  msgstr ""
1801
 
1802
- #: includes/admin/downloads/metabox.php:1200
1803
  msgid "View File Download Log"
1804
  msgstr ""
1805
 
1806
- #: includes/admin/downloads/metabox.php:1234
1807
- msgid "Activate Reviews"
1808
- msgstr ""
1809
-
1810
- #: includes/admin/downloads/metabox.php:1247
1811
- msgid ""
1812
- "Would you like to enable reviews for this product? Check out our <a "
1813
- "target=\"_blank\" href=\"%s\">Product Reviews</a> extension."
1814
- msgstr ""
1815
-
1816
  #: includes/admin/import/class-batch-import-downloads.php:65
1817
  #: includes/admin/import/class-batch-import-payments.php:76
1818
  #: includes/admin/import/class-batch-import.php:159
1819
  msgid "You do not have permission to import data."
1820
  msgstr ""
1821
 
1822
- #: includes/admin/import/class-batch-import-payments.php:284
1823
  #: includes/admin/reporting/export/class-batch-export-payments.php:53
1824
  msgid "Products (Raw)"
1825
  msgstr ""
1826
 
1827
- #: includes/admin/import/class-batch-import-payments.php:602
1828
  msgid "payments"
1829
  msgstr ""
1830
 
@@ -1863,7 +1764,7 @@ msgstr ""
1863
  #: includes/admin/payments/actions.php:316
1864
  #: includes/admin/payments/actions.php:332
1865
  #: includes/admin/payments/actions.php:359
1866
- #: includes/admin/payments/actions.php:379 includes/emails/actions.php:53
1867
  msgid "You do not have permission to edit this payment record"
1868
  msgstr ""
1869
 
@@ -1879,123 +1780,110 @@ msgstr ""
1879
  msgid "Error Updating Payment"
1880
  msgstr ""
1881
 
1882
- #: includes/admin/payments/class-payments-table.php:142
1883
- msgid "All Gateways"
1884
- msgstr ""
1885
-
1886
- #: includes/admin/payments/class-payments-table.php:159
1887
  msgid "Start Date:"
1888
  msgstr ""
1889
 
1890
- #: includes/admin/payments/class-payments-table.php:163
1891
  msgid "End Date:"
1892
  msgstr ""
1893
 
1894
- #: includes/admin/payments/class-payments-table.php:183
1895
  #: includes/admin/reporting/logs.php:179
1896
  msgid "Apply"
1897
  msgstr ""
1898
 
1899
- #: includes/admin/payments/class-payments-table.php:189
1900
  msgid "Clear Filter"
1901
  msgstr ""
1902
 
1903
- #: includes/admin/payments/class-payments-table.php:250
1904
  msgid "Completed"
1905
  msgstr ""
1906
 
1907
- #: includes/admin/payments/class-payments-table.php:251
1908
- #: includes/payments/functions.php:749
1909
  msgid "Pending"
1910
  msgstr ""
1911
 
1912
- #: includes/admin/payments/class-payments-table.php:252
1913
- #: includes/payments/functions.php:755
1914
- msgid "Processing"
1915
- msgstr ""
1916
-
1917
- #: includes/admin/payments/class-payments-table.php:253
1918
- #: includes/payments/functions.php:751
1919
  msgid "Refunded"
1920
  msgstr ""
1921
 
1922
- #: includes/admin/payments/class-payments-table.php:254
1923
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:68
1924
- #: includes/payments/functions.php:754
1925
  msgid "Revoked"
1926
  msgstr ""
1927
 
1928
- #: includes/admin/payments/class-payments-table.php:255
1929
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:70
1930
- #: includes/payments/functions.php:752
1931
  msgid "Failed"
1932
  msgstr ""
1933
 
1934
- #: includes/admin/payments/class-payments-table.php:256
1935
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:69
1936
- #: includes/payments/functions.php:753
1937
  msgid "Abandoned"
1938
  msgstr ""
1939
 
1940
- #: includes/admin/payments/class-payments-table.php:274
1941
  #: templates/history-purchases.php:21
1942
  msgid "Details"
1943
  msgstr ""
1944
 
1945
- #: includes/admin/payments/class-payments-table.php:339
1946
  #: includes/admin/payments/payments-history.php:90
1947
  msgid "View Order Details"
1948
  msgstr ""
1949
 
1950
- #: includes/admin/payments/class-payments-table.php:370
1951
  msgid "Resend Purchase Receipt"
1952
  msgstr ""
1953
 
1954
- #: includes/admin/payments/class-payments-table.php:378
1955
  msgid "(unknown)"
1956
  msgstr ""
1957
 
1958
- #: includes/admin/payments/class-payments-table.php:431
1959
  msgid "(customer missing)"
1960
  msgstr ""
1961
 
1962
- #: includes/admin/payments/class-payments-table.php:446
1963
  msgid "Set To Completed"
1964
  msgstr ""
1965
 
1966
- #: includes/admin/payments/class-payments-table.php:447
1967
  msgid "Set To Pending"
1968
  msgstr ""
1969
 
1970
- #: includes/admin/payments/class-payments-table.php:448
1971
- msgid "Set To Processing"
1972
- msgstr ""
1973
-
1974
- #: includes/admin/payments/class-payments-table.php:449
1975
  msgid "Set To Refunded"
1976
  msgstr ""
1977
 
1978
- #: includes/admin/payments/class-payments-table.php:450
1979
  msgid "Set To Revoked"
1980
  msgstr ""
1981
 
1982
- #: includes/admin/payments/class-payments-table.php:451
1983
  msgid "Set To Failed"
1984
  msgstr ""
1985
 
1986
- #: includes/admin/payments/class-payments-table.php:452
1987
  msgid "Set To Abandoned"
1988
  msgstr ""
1989
 
1990
- #: includes/admin/payments/class-payments-table.php:453
1991
  msgid "Set To Preapproval"
1992
  msgstr ""
1993
 
1994
- #: includes/admin/payments/class-payments-table.php:454
1995
  msgid "Set To Cancelled"
1996
  msgstr ""
1997
 
1998
- #: includes/admin/payments/class-payments-table.php:455
1999
  msgid "Resend Email Receipts"
2000
  msgstr ""
2001
 
@@ -2192,7 +2080,7 @@ msgstr[0] ""
2192
  msgstr[1] ""
2193
 
2194
  #: includes/admin/payments/view-order-details.php:152
2195
- #: includes/admin/settings/register-settings.php:713
2196
  msgid "None"
2197
  msgstr ""
2198
 
@@ -2202,10 +2090,10 @@ msgid "Fees"
2202
  msgstr ""
2203
 
2204
  #: includes/admin/payments/view-order-details.php:175
2205
- #: includes/admin/payments/view-order-details.php:518
2206
  #: includes/admin/reporting/class-export-payments.php:75
2207
  #: includes/admin/reporting/export/class-batch-export-payments.php:56
2208
- #: includes/admin/tools.php:632 templates/checkout_cart.php:120
2209
  #: templates/shortcode-receipt.php:90
2210
  msgid "Tax"
2211
  msgstr ""
@@ -2279,7 +2167,7 @@ msgid ""
2279
  msgstr ""
2280
 
2281
  #: includes/admin/payments/view-order-details.php:308
2282
- #: includes/admin/reporting/reports.php:34 includes/class-edd-logging.php:73
2283
  msgid "Logs"
2284
  msgstr ""
2285
 
@@ -2295,105 +2183,89 @@ msgstr ""
2295
  msgid "View all purchases of customer"
2296
  msgstr ""
2297
 
2298
- #: includes/admin/payments/view-order-details.php:422
2299
- msgid "Deleted"
2300
- msgstr ""
2301
-
2302
- #: includes/admin/payments/view-order-details.php:424
2303
- msgid "%s deleted"
2304
- msgstr ""
2305
-
2306
- #: includes/admin/payments/view-order-details.php:487
2307
  msgid "Copy Download Link(s)"
2308
  msgstr ""
2309
 
2310
- #: includes/admin/payments/view-order-details.php:499
2311
  msgid "No %s included with this purchase"
2312
  msgstr ""
2313
 
2314
- #: includes/admin/payments/view-order-details.php:507
2315
- #: includes/admin/payments/view-order-details.php:587
2316
  msgid "Add New %s"
2317
  msgstr ""
2318
 
2319
- #: includes/admin/payments/view-order-details.php:512
2320
  msgid " & Quantity"
2321
  msgstr ""
2322
 
2323
- #: includes/admin/payments/view-order-details.php:626
2324
  msgid "Assign to another customer"
2325
  msgstr ""
2326
 
2327
- #: includes/admin/payments/view-order-details.php:628
2328
  msgid "New Customer"
2329
  msgstr ""
2330
 
2331
- #: includes/admin/payments/view-order-details.php:634
2332
  msgid "Select a customer"
2333
  msgstr ""
2334
 
2335
- #: includes/admin/payments/view-order-details.php:640
2336
- #: includes/class-edd-html-elements.php:247
2337
  msgid "Type to search all Customers"
2338
  msgstr ""
2339
 
2340
- #: includes/admin/payments/view-order-details.php:654
2341
  msgid "Click \"Save Payment\" to change the customer"
2342
  msgstr ""
2343
 
2344
- #: includes/admin/payments/view-order-details.php:674
2345
  msgid "Click \"Save Payment\" to create new customer"
2346
  msgstr ""
2347
 
2348
- #: includes/admin/payments/view-order-details.php:689
2349
- #: includes/checkout/template.php:347
2350
  msgid "Billing Address"
2351
  msgstr ""
2352
 
2353
- #: includes/admin/payments/view-order-details.php:699
2354
  msgid "Street Address Line 1:"
2355
  msgstr ""
2356
 
2357
- #: includes/admin/payments/view-order-details.php:703
2358
  msgid "Street Address Line 2:"
2359
  msgstr ""
2360
 
2361
- #: includes/admin/payments/view-order-details.php:732
2362
- #: includes/admin/settings/register-settings.php:322
2363
  msgid "Select a country"
2364
  msgstr ""
2365
 
2366
- #: includes/admin/payments/view-order-details.php:735
2367
- msgid "Type to search all Countries"
2368
- msgstr ""
2369
-
2370
- #: includes/admin/payments/view-order-details.php:753
2371
- #: includes/admin/settings/register-settings.php:330
2372
  msgid "Select a state"
2373
  msgstr ""
2374
 
2375
- #: includes/admin/payments/view-order-details.php:756
2376
- msgid "Type to search all States/Provinces"
2377
- msgstr ""
2378
-
2379
- #: includes/admin/payments/view-order-details.php:777
2380
  msgid "Payment Notes"
2381
  msgstr ""
2382
 
2383
- #: includes/admin/payments/view-order-details.php:792
2384
  msgid "No payment notes"
2385
  msgstr ""
2386
 
2387
- #: includes/admin/payments/view-order-details.php:798
2388
  msgid "Add Note"
2389
  msgstr ""
2390
 
2391
  #: includes/admin/plugins.php:27
 
2392
  msgid "General Settings"
2393
  msgstr ""
2394
 
2395
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:89
2396
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:146
2397
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:129
2398
  #: includes/admin/reporting/class-sales-logs-list-table.php:130
2399
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:40
@@ -2451,15 +2323,15 @@ msgstr ""
2451
  msgid "Monthly Earnings Avg"
2452
  msgstr ""
2453
 
2454
- #: includes/admin/reporting/class-categories-reports-table.php:223
2455
  msgid "Less than 1"
2456
  msgstr ""
2457
 
2458
- #: includes/admin/reporting/class-categories-reports-table.php:330
2459
  msgid "No sales for dates provided."
2460
  msgstr ""
2461
 
2462
- #: includes/admin/reporting/class-categories-reports-table.php:371
2463
  msgid "No earnings for dates provided."
2464
  msgstr ""
2465
 
@@ -2482,7 +2354,7 @@ msgstr ""
2482
  #: includes/admin/reporting/class-export-customers.php:66
2483
  #: includes/admin/reporting/class-export-payments.php:64
2484
  #: includes/admin/reporting/export/class-batch-export-payments.php:44
2485
- #: includes/admin/tools.php:506 includes/checkout/template.php:193
2486
  #: includes/checkout/template.php:199 templates/shortcode-profile-editor.php:38
2487
  msgid "First Name"
2488
  msgstr ""
@@ -2490,7 +2362,7 @@ msgstr ""
2490
  #: includes/admin/reporting/class-export-customers.php:67
2491
  #: includes/admin/reporting/class-export-payments.php:65
2492
  #: includes/admin/reporting/export/class-batch-export-payments.php:45
2493
- #: includes/admin/tools.php:515 includes/checkout/template.php:203
2494
  #: includes/checkout/template.php:209 templates/shortcode-profile-editor.php:43
2495
  msgid "Last Name"
2496
  msgstr ""
@@ -2513,11 +2385,11 @@ msgid "Downloaded by"
2513
  msgstr ""
2514
 
2515
  #: includes/admin/reporting/class-export-download-history.php:66
2516
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:151
2517
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:42
2518
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:44
2519
  #: includes/admin/reporting/export/class-batch-export-payments.php:64
2520
- #: includes/admin/tools.php:542
2521
  msgid "IP Address"
2522
  msgstr ""
2523
 
@@ -2527,14 +2399,14 @@ msgid "Product"
2527
  msgstr ""
2528
 
2529
  #: includes/admin/reporting/class-export-download-history.php:68
2530
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:150
2531
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:46
2532
  msgid "File"
2533
  msgstr ""
2534
 
2535
  #: includes/admin/reporting/class-export-payments.php:62
2536
  #: includes/admin/reporting/export/class-batch-export-payments.php:41
2537
- #: includes/admin/tools.php:578
2538
  msgid "Payment Number"
2539
  msgstr ""
2540
 
@@ -2555,14 +2427,14 @@ msgstr ""
2555
 
2556
  #: includes/admin/reporting/class-export-payments.php:70
2557
  #: includes/admin/reporting/export/class-batch-export-payments.php:50
2558
- #: includes/admin/settings/register-settings.php:2017
2559
- #: includes/admin/tools.php:713 templates/shortcode-profile-editor.php:162
2560
  msgid "Country"
2561
  msgstr ""
2562
 
2563
  #: includes/admin/reporting/class-export-payments.php:71
2564
  #: includes/admin/reporting/export/class-batch-export-payments.php:51
2565
- #: includes/admin/tools.php:704 includes/checkout/template.php:383
2566
  #: templates/shortcode-profile-editor.php:157
2567
  msgid "Zip / Postal Code"
2568
  msgstr ""
@@ -2579,31 +2451,31 @@ msgstr ""
2579
 
2580
  #: includes/admin/reporting/class-export-payments.php:77
2581
  #: includes/admin/reporting/export/class-batch-export-payments.php:58
2582
- #: includes/admin/tools.php:569 templates/shortcode-receipt.php:53
2583
  msgid "Payment Method"
2584
  msgstr ""
2585
 
2586
  #: includes/admin/reporting/class-export-payments.php:78
2587
  #: includes/admin/reporting/export/class-batch-export-payments.php:59
2588
- #: includes/admin/tools.php:650
2589
  msgid "Transaction ID"
2590
  msgstr ""
2591
 
2592
  #: includes/admin/reporting/class-export-payments.php:79
2593
  #: includes/admin/reporting/export/class-batch-export-payments.php:60
2594
- #: includes/admin/tools.php:596
2595
  msgid "Purchase Key"
2596
  msgstr ""
2597
 
2598
  #: includes/admin/reporting/class-export-payments.php:81
2599
  #: includes/admin/reporting/export/class-batch-export-payments.php:62
2600
  #: includes/admin/reporting/export/class-batch-export-sales.php:41
2601
- #: includes/admin/tools.php:659
2602
  msgid "User"
2603
  msgstr ""
2604
 
2605
  #: includes/admin/reporting/class-export-payments.php:192
2606
- #: includes/admin/reporting/export/class-batch-export-payments.php:229
2607
  msgid "guest"
2608
  msgstr ""
2609
 
@@ -2617,16 +2489,16 @@ msgstr ""
2617
  msgid "You do not have permission to export data."
2618
  msgstr ""
2619
 
2620
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:149
2621
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:130
2622
  #: includes/admin/reporting/class-sales-logs-list-table.php:134
2623
  #: includes/admin/reporting/export/class-batch-export-payments.php:40
2624
- #: includes/admin/reporting/export/class-batch-export-sales.php:45
2625
  msgid "Payment ID"
2626
  msgstr ""
2627
 
2628
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:79
2629
- #: includes/gateways/manual.php:73 includes/gateways/paypal-standard.php:191
2630
  msgid "Payment Error"
2631
  msgstr ""
2632
 
@@ -2656,7 +2528,7 @@ msgid "Pending / Failed Sales"
2656
  msgstr ""
2657
 
2658
  #: includes/admin/reporting/class-sales-logs-list-table.php:133
2659
- #: includes/admin/reporting/export/class-batch-export-sales.php:44
2660
  msgid "Item Amount"
2661
  msgstr ""
2662
 
@@ -2667,7 +2539,7 @@ msgid ""
2667
  msgstr ""
2668
 
2669
  #: includes/admin/reporting/contextual-help.php:48
2670
- #: includes/admin/reporting/reports.php:32 includes/admin/tools.php:941
2671
  msgid "Export"
2672
  msgstr ""
2673
 
@@ -2771,8 +2643,8 @@ msgid "Files"
2771
  msgstr ""
2772
 
2773
  #: includes/admin/reporting/export/class-batch-export-downloads.php:54
2774
- #: includes/admin/settings/register-settings.php:782
2775
- #: includes/admin/tools.php:896
2776
  msgid "File Download Limit"
2777
  msgstr ""
2778
 
@@ -2782,7 +2654,7 @@ msgstr ""
2782
 
2783
  #: includes/admin/reporting/export/class-batch-export-downloads.php:56
2784
  #: includes/emails/class-edd-email-tags.php:411
2785
- #: includes/emails/class-edd-email-tags.php:533
2786
  #: templates/shortcode-receipt.php:125
2787
  msgid "SKU"
2788
  msgstr ""
@@ -2812,8 +2684,7 @@ msgid "Gross Amount"
2812
  msgstr ""
2813
 
2814
  #: includes/admin/reporting/export/class-batch-export-payments.php:43
2815
- #: includes/admin/reporting/export/class-batch-export-sales.php:42
2816
- #: includes/admin/tools.php:524
2817
  msgid "Customer ID"
2818
  msgstr ""
2819
 
@@ -2822,20 +2693,15 @@ msgid "Products (Verbose)"
2822
  msgstr ""
2823
 
2824
  #: includes/admin/reporting/export/class-batch-export-payments.php:63
2825
- #: includes/admin/settings/register-settings.php:352
2826
- #: includes/admin/settings/register-settings.php:1269
2827
  msgid "Currency"
2828
  msgstr ""
2829
 
2830
  #: includes/admin/reporting/export/class-batch-export-payments.php:65
2831
- #: includes/admin/tools.php:551
2832
  msgid "Mode (Live|Test)"
2833
  msgstr ""
2834
 
2835
- #: includes/admin/reporting/export/class-batch-export-payments.php:67
2836
- msgid "Country Name"
2837
- msgstr ""
2838
-
2839
  #: includes/admin/reporting/export/export-functions.php:49
2840
  msgid "Export location or file not writable"
2841
  msgstr ""
@@ -2853,12 +2719,12 @@ msgid "Earnings Over Time"
2853
  msgstr ""
2854
 
2855
  #: includes/admin/reporting/graphing.php:361
2856
- #: includes/admin/reporting/graphing.php:651
2857
  msgid "Total earnings for period shown: "
2858
  msgstr ""
2859
 
2860
  #: includes/admin/reporting/graphing.php:369
2861
- #: includes/admin/reporting/graphing.php:652
2862
  msgid "Total sales for period shown: "
2863
  msgstr ""
2864
 
@@ -2874,84 +2740,84 @@ msgstr ""
2874
  msgid "Excludes sales tax."
2875
  msgstr ""
2876
 
2877
- #: includes/admin/reporting/graphing.php:641
2878
  msgid "Earnings Over Time for %s"
2879
  msgstr ""
2880
 
2881
- #: includes/admin/reporting/graphing.php:653
2882
  msgid "Average monthly earnings: %s"
2883
  msgstr ""
2884
 
2885
- #: includes/admin/reporting/graphing.php:654
2886
  msgid "Average monthly sales: %s"
2887
  msgstr ""
2888
 
2889
- #: includes/admin/reporting/graphing.php:671 includes/class-edd-stats.php:85
2890
  msgid "Yesterday"
2891
  msgstr ""
2892
 
2893
- #: includes/admin/reporting/graphing.php:672 includes/class-edd-stats.php:86
2894
  msgid "This Week"
2895
  msgstr ""
2896
 
2897
- #: includes/admin/reporting/graphing.php:673 includes/class-edd-stats.php:87
2898
  msgid "Last Week"
2899
  msgstr ""
2900
 
2901
- #: includes/admin/reporting/graphing.php:674
2902
  msgid "Last 30 Days"
2903
  msgstr ""
2904
 
2905
- #: includes/admin/reporting/graphing.php:675 includes/class-edd-stats.php:88
2906
  msgid "This Month"
2907
  msgstr ""
2908
 
2909
- #: includes/admin/reporting/graphing.php:677 includes/class-edd-stats.php:90
2910
  msgid "This Quarter"
2911
  msgstr ""
2912
 
2913
- #: includes/admin/reporting/graphing.php:678 includes/class-edd-stats.php:91
2914
  msgid "Last Quarter"
2915
  msgstr ""
2916
 
2917
- #: includes/admin/reporting/graphing.php:679 includes/class-edd-stats.php:92
2918
  msgid "This Year"
2919
  msgstr ""
2920
 
2921
- #: includes/admin/reporting/graphing.php:680 includes/class-edd-stats.php:93
2922
  msgid "Last Year"
2923
  msgstr ""
2924
 
2925
- #: includes/admin/reporting/graphing.php:681
2926
  msgid "Custom"
2927
  msgstr ""
2928
 
2929
- #: includes/admin/reporting/graphing.php:713
2930
  msgid "From"
2931
  msgstr ""
2932
 
2933
- #: includes/admin/reporting/graphing.php:729
2934
  msgid "To"
2935
  msgstr ""
2936
 
2937
- #: includes/admin/reporting/graphing.php:749
2938
  msgid "Exclude Taxes"
2939
  msgstr ""
2940
 
2941
- #: includes/admin/reporting/graphing.php:754
2942
  msgid "Filter"
2943
  msgstr ""
2944
 
2945
- #: includes/admin/reporting/graphing.php:974
2946
  msgid "Clicking this will clear the reports cache"
2947
  msgstr ""
2948
 
2949
- #: includes/admin/reporting/graphing.php:974
2950
  msgid "Refresh Reports"
2951
  msgstr ""
2952
 
2953
  #: includes/admin/reporting/logs.php:144
2954
- #: includes/admin/settings/register-settings.php:1295
2955
  msgid "File Downloads"
2956
  msgstr ""
2957
 
@@ -2981,7 +2847,7 @@ msgstr ""
2981
 
2982
  #: includes/admin/reporting/reports.php:59
2983
  #: includes/admin/settings/contextual-help.php:71
2984
- #: includes/admin/settings/register-settings.php:1217
2985
  msgid "Taxes"
2986
  msgstr ""
2987
 
@@ -3025,7 +2891,7 @@ msgid ""
3025
  "year."
3026
  msgstr ""
3027
 
3028
- #: includes/admin/reporting/reports.php:325 includes/admin/tools.php:169
3029
  msgid "Submit"
3030
  msgstr ""
3031
 
@@ -3123,8 +2989,8 @@ msgid ""
3123
  msgstr ""
3124
 
3125
  #: includes/admin/settings/contextual-help.php:48
3126
- #: includes/admin/settings/register-settings.php:420
3127
- #: includes/admin/settings/register-settings.php:1214
3128
  msgid "Payment Gateways"
3129
  msgstr ""
3130
 
@@ -3153,7 +3019,7 @@ msgid ""
3153
  msgstr ""
3154
 
3155
  #: includes/admin/settings/contextual-help.php:57
3156
- #: includes/admin/settings/register-settings.php:1215
3157
  msgid "Emails"
3158
  msgstr ""
3159
 
@@ -3173,7 +3039,7 @@ msgid ""
3173
  msgstr ""
3174
 
3175
  #: includes/admin/settings/contextual-help.php:65
3176
- #: includes/admin/settings/register-settings.php:1216
3177
  msgid "Styles"
3178
  msgstr ""
3179
 
@@ -3256,7 +3122,6 @@ msgid ""
3256
  msgstr ""
3257
 
3258
  #: includes/admin/settings/contextual-help.php:93
3259
- #: includes/admin/settings/register-settings.php:1292
3260
  msgid "Miscellaneous"
3261
  msgstr ""
3262
 
@@ -3270,15 +3135,12 @@ msgstr ""
3270
  msgid "A description of all the options are provided beside their input boxes."
3271
  msgstr ""
3272
 
3273
- #: includes/admin/settings/register-settings.php:254
3274
- msgid "Pages"
3275
- msgstr ""
3276
-
3277
- #: includes/admin/settings/register-settings.php:257
3278
  msgid "Page Settings"
3279
  msgstr ""
3280
 
3281
- #: includes/admin/settings/register-settings.php:258
3282
  msgid ""
3283
  "Easy Digital Downloads uses the pages below for handling the display of "
3284
  "checkout, purchase confirmation, purchase history, and purchase failures. "
@@ -3287,464 +3149,495 @@ msgid ""
3287
  "in the page content area."
3288
  msgstr ""
3289
 
3290
- #: includes/admin/settings/register-settings.php:262
3291
  msgid "Checkout Page"
3292
  msgstr ""
3293
 
3294
- #: includes/admin/settings/register-settings.php:263
3295
  msgid ""
3296
  "This is the checkout page where buyers will complete their purchases. The "
3297
  "[download_checkout] shortcode must be on this page."
3298
  msgstr ""
3299
 
3300
- #: includes/admin/settings/register-settings.php:267
3301
- #: includes/admin/settings/register-settings.php:276
3302
- #: includes/admin/settings/register-settings.php:285
3303
- #: includes/admin/settings/register-settings.php:294
3304
- #: includes/admin/settings/register-settings.php:305
3305
  msgid "Select a page"
3306
  msgstr ""
3307
 
3308
- #: includes/admin/settings/register-settings.php:271
3309
  msgid "Success Page"
3310
  msgstr ""
3311
 
3312
- #: includes/admin/settings/register-settings.php:272
3313
  msgid ""
3314
  "This is the page buyers are sent to after completing their purchases. The "
3315
  "[edd_receipt] shortcode should be on this page."
3316
  msgstr ""
3317
 
3318
- #: includes/admin/settings/register-settings.php:280
3319
  msgid "Failed Transaction Page"
3320
  msgstr ""
3321
 
3322
- #: includes/admin/settings/register-settings.php:281
3323
  msgid ""
3324
  "This is the page buyers are sent to if their transaction is cancelled or "
3325
  "fails."
3326
  msgstr ""
3327
 
3328
- #: includes/admin/settings/register-settings.php:289
3329
  msgid "Purchase History Page"
3330
  msgstr ""
3331
 
3332
- #: includes/admin/settings/register-settings.php:290
3333
  msgid ""
3334
  "This page shows a complete purchase history for the current user, including "
3335
  "download links. The [purchase_history] shortcode should be on this page."
3336
  msgstr ""
3337
 
3338
- #: includes/admin/settings/register-settings.php:298
3339
  msgid "Login Redirect Page"
3340
  msgstr ""
3341
 
3342
- #: includes/admin/settings/register-settings.php:300
3343
  msgid ""
3344
- "If a customer logs in using the [edd_login] shortcode, this is the page "
3345
- "they will be redirected to. Note, this can be overridden using the redirect "
3346
- "attribute in the shortcode like this: [edd_login redirect=\"%s\"]."
3347
  msgstr ""
3348
 
3349
- #: includes/admin/settings/register-settings.php:309
3350
  msgid "Store Location"
3351
  msgstr ""
3352
 
3353
- #: includes/admin/settings/register-settings.php:312
3354
  msgid "Store Location Settings"
3355
  msgstr ""
3356
 
3357
- #: includes/admin/settings/register-settings.php:313
3358
  msgid ""
3359
  "Easy Digital Downloads will use the following Country and State to pre-fill "
3360
  "fields at checkout. This will also pre-calculate any taxes defined if the "
3361
  "location below has taxes enabled."
3362
  msgstr ""
3363
 
3364
- #: includes/admin/settings/register-settings.php:317
3365
  msgid "Base Country"
3366
  msgstr ""
3367
 
3368
- #: includes/admin/settings/register-settings.php:318
3369
  msgid "Where does your store operate from?"
3370
  msgstr ""
3371
 
3372
- #: includes/admin/settings/register-settings.php:326
3373
  msgid "Base State / Province"
3374
  msgstr ""
3375
 
3376
- #: includes/admin/settings/register-settings.php:327
3377
  msgid "What state / province does your store operate from?"
3378
  msgstr ""
3379
 
3380
- #: includes/admin/settings/register-settings.php:335
3381
- msgid "Tracking"
3382
  msgstr ""
3383
 
3384
- #: includes/admin/settings/register-settings.php:341
3385
  msgid "Allow Usage Tracking?"
3386
  msgstr ""
3387
 
3388
- #: includes/admin/settings/register-settings.php:343
3389
  msgid ""
3390
  "Allow Easy Digital Downloads to anonymously track how this plugin is used "
3391
  "and help us make the plugin better. Opt-in to tracking and our newsletter "
3392
- "and immediately be emailed a discount to the EDD shop, valid towards the <a "
3393
- "href=\"%s\" target=\"_blank\">purchase of extensions</a>. No sensitive data "
3394
- "is tracked."
3395
  msgstr ""
3396
 
3397
- #: includes/admin/settings/register-settings.php:353
 
 
 
 
 
3398
  msgid ""
3399
  "Choose your currency. Note that some payment gateways have currency "
3400
  "restrictions."
3401
  msgstr ""
3402
 
3403
- #: includes/admin/settings/register-settings.php:360
3404
  msgid "Currency Position"
3405
  msgstr ""
3406
 
3407
- #: includes/admin/settings/register-settings.php:361
3408
  msgid "Choose the location of the currency sign."
3409
  msgstr ""
3410
 
3411
- #: includes/admin/settings/register-settings.php:364
3412
  msgid "Before - $10"
3413
  msgstr ""
3414
 
3415
- #: includes/admin/settings/register-settings.php:365
3416
  msgid "After - 10$"
3417
  msgstr ""
3418
 
3419
- #: includes/admin/settings/register-settings.php:370
3420
  msgid "Thousands Separator"
3421
  msgstr ""
3422
 
3423
- #: includes/admin/settings/register-settings.php:371
3424
- msgid "The symbol (usually , or .) to separate thousands."
3425
  msgstr ""
3426
 
3427
- #: includes/admin/settings/register-settings.php:378
3428
  msgid "Decimal Separator"
3429
  msgstr ""
3430
 
3431
- #: includes/admin/settings/register-settings.php:379
3432
- msgid "The symbol (usually , or .) to separate decimal points."
3433
- msgstr ""
3434
-
3435
- #: includes/admin/settings/register-settings.php:388
3436
- #: includes/admin/settings/register-settings.php:1270
3437
- msgid "API"
3438
  msgstr ""
3439
 
3440
- #: includes/admin/settings/register-settings.php:391
 
 
3441
  msgid "API Settings"
3442
  msgstr ""
3443
 
3444
- #: includes/admin/settings/register-settings.php:392
3445
  msgid ""
3446
  "The Easy Digital Downloads REST API provides access to store data through "
3447
  "our API endpoints. Enable this setting if you would like all user accounts "
3448
  "to be able to generate their own API keys."
3449
  msgstr ""
3450
 
3451
- #: includes/admin/settings/register-settings.php:396
3452
  msgid "Allow User Keys"
3453
  msgstr ""
3454
 
3455
- #: includes/admin/settings/register-settings.php:397
3456
  msgid ""
3457
  "Check this box to allow all users to generate API keys. Users with the "
3458
  "'manage_shop_settings' capability are always allowed to generate keys."
3459
  msgstr ""
3460
 
3461
- #: includes/admin/settings/register-settings.php:402
3462
  msgid ""
3463
  "Visit the <a href=\"%s\" target=\"_blank\">REST API documentation</a> for "
3464
  "further information."
3465
  msgstr ""
3466
 
3467
- #: includes/admin/settings/register-settings.php:414
 
 
 
 
 
3468
  msgid "Test Mode"
3469
  msgstr ""
3470
 
3471
- #: includes/admin/settings/register-settings.php:415
3472
  msgid ""
3473
  "While in test mode no live transactions are processed. To fully use test "
3474
  "mode, you must have a sandbox (test) account for the payment gateway you "
3475
  "are testing."
3476
  msgstr ""
3477
 
3478
- #: includes/admin/settings/register-settings.php:421
3479
  msgid "Choose the payment gateways you want to enable."
3480
  msgstr ""
3481
 
3482
- #: includes/admin/settings/register-settings.php:427
3483
  msgid "Default Gateway"
3484
  msgstr ""
3485
 
3486
- #: includes/admin/settings/register-settings.php:428
3487
  msgid "This gateway will be loaded automatically with the checkout page."
3488
  msgstr ""
3489
 
3490
- #: includes/admin/settings/register-settings.php:434
3491
  msgid "Accepted Payment Method Icons"
3492
  msgstr ""
3493
 
3494
- #: includes/admin/settings/register-settings.php:435
3495
- msgid "Display icons for the selected payment methods."
3496
  msgstr ""
3497
 
3498
- #: includes/admin/settings/register-settings.php:435
3499
  msgid ""
3500
  "You will also need to configure your gateway settings if you are accepting "
3501
- "credit cards."
 
 
 
 
 
3502
  msgstr ""
3503
 
3504
- #: includes/admin/settings/register-settings.php:455
3505
  msgid "Email Template"
3506
  msgstr ""
3507
 
3508
- #: includes/admin/settings/register-settings.php:456
3509
  msgid ""
3510
  "Choose a template. Click \"Save Changes\" then \"Preview Purchase Receipt\" "
3511
  "to see the new template."
3512
  msgstr ""
3513
 
3514
- #: includes/admin/settings/register-settings.php:462
3515
  msgid "Logo"
3516
  msgstr ""
3517
 
3518
- #: includes/admin/settings/register-settings.php:463
3519
  msgid ""
3520
  "Upload or choose a logo to be displayed at the top of the purchase receipt "
3521
  "emails. Displayed on HTML emails only."
3522
  msgstr ""
3523
 
3524
- #: includes/admin/settings/register-settings.php:468
 
 
 
 
 
3525
  msgid "From Name"
3526
  msgstr ""
3527
 
3528
- #: includes/admin/settings/register-settings.php:469
3529
  msgid ""
3530
  "The name purchase receipts are said to come from. This should probably be "
3531
  "your site or shop name."
3532
  msgstr ""
3533
 
3534
- #: includes/admin/settings/register-settings.php:475
3535
  msgid "From Email"
3536
  msgstr ""
3537
 
3538
- #: includes/admin/settings/register-settings.php:476
3539
  msgid ""
3540
  "Email to send purchase receipts from. This will act as the \"from\" and "
3541
  "\"reply-to\" address."
3542
  msgstr ""
3543
 
3544
- #: includes/admin/settings/register-settings.php:496
3545
  msgid "Purchase Email Subject"
3546
  msgstr ""
3547
 
3548
- #: includes/admin/settings/register-settings.php:497
3549
- msgid "Enter the subject line for the purchase receipt email."
3550
  msgstr ""
3551
 
3552
- #: includes/admin/settings/register-settings.php:499
3553
- #: includes/admin/settings/register-settings.php:506
3554
- #: includes/admin/settings/register-settings.php:510
3555
- #: includes/emails/functions.php:45 includes/emails/functions.php:49
3556
- #: includes/emails/functions.php:87 includes/emails/functions.php:91
3557
  #: includes/emails/template.php:141
3558
  msgid "Purchase Receipt"
3559
  msgstr ""
3560
 
3561
- #: includes/admin/settings/register-settings.php:503
3562
  msgid "Purchase Email Heading"
3563
  msgstr ""
3564
 
3565
- #: includes/admin/settings/register-settings.php:504
3566
- msgid "Enter the heading for the purchase receipt email."
3567
  msgstr ""
3568
 
3569
- #: includes/admin/settings/register-settings.php:511
3570
  msgid ""
3571
  "Enter the text that is sent as purchase receipt email to users after "
3572
  "completion of a successful purchase. HTML is accepted. Available template "
3573
  "tags:"
3574
  msgstr ""
3575
 
3576
- #: includes/admin/settings/register-settings.php:513
3577
  #: includes/emails/template.php:159
3578
  msgid "Dear"
3579
  msgstr ""
3580
 
3581
- #: includes/admin/settings/register-settings.php:513
3582
  #: includes/emails/template.php:160
3583
  msgid ""
3584
  "Thank you for your purchase. Please click on the link(s) below to download "
3585
  "your files."
3586
  msgstr ""
3587
 
3588
- #: includes/admin/settings/register-settings.php:519
 
 
 
 
3589
  msgid "Sale Notification Subject"
3590
  msgstr ""
3591
 
3592
- #: includes/admin/settings/register-settings.php:520
3593
- msgid "Enter the subject line for the sale notification email."
3594
  msgstr ""
3595
 
3596
- #: includes/admin/settings/register-settings.php:526
3597
  msgid "Sale Notification"
3598
  msgstr ""
3599
 
3600
- #: includes/admin/settings/register-settings.php:527
3601
  msgid ""
3602
  "Enter the text that is sent as sale notification email after completion of "
3603
  "a purchase. HTML is accepted. Available template tags:"
3604
  msgstr ""
3605
 
3606
- #: includes/admin/settings/register-settings.php:533
3607
  msgid "Sale Notification Emails"
3608
  msgstr ""
3609
 
3610
- #: includes/admin/settings/register-settings.php:534
3611
  msgid ""
3612
  "Enter the email address(es) that should receive a notification anytime a "
3613
- "sale is made, one per line."
3614
  msgstr ""
3615
 
3616
- #: includes/admin/settings/register-settings.php:540
3617
  msgid "Disable Admin Notifications"
3618
  msgstr ""
3619
 
3620
- #: includes/admin/settings/register-settings.php:541
3621
  msgid "Check this box if you do not want to receive sales notification emails."
3622
  msgstr ""
3623
 
3624
- #: includes/admin/settings/register-settings.php:553
 
 
 
 
 
3625
  msgid "Disable Styles"
3626
  msgstr ""
3627
 
3628
- #: includes/admin/settings/register-settings.php:554
3629
  msgid ""
3630
  "Check this to disable all included styling of buttons, checkout fields, and "
3631
  "all other elements."
3632
  msgstr ""
3633
 
3634
- #: includes/admin/settings/register-settings.php:556
3635
  msgid "Disabling Styles"
3636
  msgstr ""
3637
 
3638
- #: includes/admin/settings/register-settings.php:557
3639
  msgid ""
3640
  "If your theme has a complete custom CSS file for Easy Digital Downloads, "
3641
  "you may wish to disable our default styles. This is not recommended unless "
3642
- "you're sure your theme has a complete custom CSS."
3643
  msgstr ""
3644
 
3645
- #: includes/admin/settings/register-settings.php:561
3646
  msgid "Buttons"
3647
  msgstr ""
3648
 
3649
- #: includes/admin/settings/register-settings.php:562
3650
  msgid "Options for add to cart and purchase buttons"
3651
  msgstr ""
3652
 
3653
- #: includes/admin/settings/register-settings.php:567
3654
  msgid "Default Button Style"
3655
  msgstr ""
3656
 
3657
- #: includes/admin/settings/register-settings.php:568
3658
  msgid "Choose the style you want to use for the buttons."
3659
  msgstr ""
3660
 
3661
- #: includes/admin/settings/register-settings.php:574
3662
  msgid "Default Button Color"
3663
  msgstr ""
3664
 
3665
- #: includes/admin/settings/register-settings.php:575
3666
  msgid "Choose the color you want to use for the buttons."
3667
  msgstr ""
3668
 
3669
- #: includes/admin/settings/register-settings.php:588
 
 
 
 
 
3670
  msgid "Need help?"
3671
  msgstr ""
3672
 
3673
- #: includes/admin/settings/register-settings.php:589
3674
  msgid ""
3675
  "Visit the <a href=\"%s\" target=\"_blank\">Tax setup documentation</a> for "
3676
  "further information. If you need VAT support, there are options listed on "
3677
  "the documentation page."
3678
  msgstr ""
3679
 
3680
- #: includes/admin/settings/register-settings.php:594
3681
  msgid "Enable Taxes"
3682
  msgstr ""
3683
 
3684
- #: includes/admin/settings/register-settings.php:595
3685
  msgid "Check this to enable taxes on purchases."
3686
  msgstr ""
3687
 
3688
- #: includes/admin/settings/register-settings.php:597
3689
  msgid "Enabling Taxes"
3690
  msgstr ""
3691
 
3692
- #: includes/admin/settings/register-settings.php:598
3693
  msgid ""
3694
  "With taxes enabled, Easy Digital Downloads will use the rules below to "
3695
  "charge tax to customers. With taxes enabled, customers are required to "
3696
  "input their address on checkout so that taxes can be properly calculated."
3697
  msgstr ""
3698
 
3699
- #: includes/admin/settings/register-settings.php:602
3700
  msgid "Tax Rates"
3701
  msgstr ""
3702
 
3703
- #: includes/admin/settings/register-settings.php:603
3704
  msgid ""
3705
  "Add tax rates for specific regions. Enter a percentage, such as 6.5 for "
3706
  "6.5%."
3707
  msgstr ""
3708
 
3709
- #: includes/admin/settings/register-settings.php:608
3710
- #: includes/admin/settings/register-settings.php:612
3711
  msgid "Fallback Tax Rate"
3712
  msgstr ""
3713
 
3714
- #: includes/admin/settings/register-settings.php:609
3715
  msgid ""
3716
  "Customers not in a specific rate will be charged this tax rate. Enter a "
3717
  "percentage, such as 6.5 for 6.5%. "
3718
  msgstr ""
3719
 
3720
- #: includes/admin/settings/register-settings.php:613
3721
  msgid ""
3722
  "If the customer's address fails to meet the above tax rules, you can define "
3723
  "a `default` tax rate to be applied to all other customers. Enter a "
3724
  "percentage, such as 6.5 for 6.5%."
3725
  msgstr ""
3726
 
3727
- #: includes/admin/settings/register-settings.php:617
3728
  msgid "Prices entered with tax"
3729
  msgstr ""
3730
 
3731
- #: includes/admin/settings/register-settings.php:618
3732
  msgid "This option affects how you enter prices."
3733
  msgstr ""
3734
 
3735
- #: includes/admin/settings/register-settings.php:622
3736
  msgid "Yes, I will enter prices inclusive of tax"
3737
  msgstr ""
3738
 
3739
- #: includes/admin/settings/register-settings.php:623
3740
  msgid "No, I will enter prices exclusive of tax"
3741
  msgstr ""
3742
 
3743
- #: includes/admin/settings/register-settings.php:625
3744
  msgid "Prices Inclusive of Tax"
3745
  msgstr ""
3746
 
3747
- #: includes/admin/settings/register-settings.php:626
3748
  msgid ""
3749
  "When using prices inclusive of tax, you will be entering your prices as the "
3750
  "total amount you want a customer to pay for the download, including tax. "
@@ -3752,207 +3645,201 @@ msgid ""
3752
  "for the defined total price."
3753
  msgstr ""
3754
 
3755
- #: includes/admin/settings/register-settings.php:630
3756
  msgid "Display Tax Rate on Prices"
3757
  msgstr ""
3758
 
3759
- #: includes/admin/settings/register-settings.php:631
3760
  msgid "Some countries require a notice when product prices include tax."
3761
  msgstr ""
3762
 
3763
- #: includes/admin/settings/register-settings.php:636
3764
  msgid "Display during checkout"
3765
  msgstr ""
3766
 
3767
- #: includes/admin/settings/register-settings.php:637
3768
  msgid "Should prices on the checkout page be shown with or without tax?"
3769
  msgstr ""
3770
 
3771
- #: includes/admin/settings/register-settings.php:641
3772
  msgid "Including tax"
3773
  msgstr ""
3774
 
3775
- #: includes/admin/settings/register-settings.php:642
3776
  msgid "Excluding tax"
3777
  msgstr ""
3778
 
3779
- #: includes/admin/settings/register-settings.php:644
3780
  msgid "Taxes Displayed for Products on Checkout"
3781
  msgstr ""
3782
 
3783
- #: includes/admin/settings/register-settings.php:645
3784
  msgid ""
3785
  "This option will determine whether the product price displays with or "
3786
  "without tax on checkout."
3787
  msgstr ""
3788
 
3789
- #: includes/admin/settings/register-settings.php:663
3790
- #: includes/admin/settings/register-settings.php:666
 
 
 
 
 
3791
  msgid "Redirect to Checkout"
3792
  msgstr ""
3793
 
3794
- #: includes/admin/settings/register-settings.php:664
3795
  msgid "Immediately redirect to checkout after adding an item to the cart?"
3796
  msgstr ""
3797
 
3798
- #: includes/admin/settings/register-settings.php:667
3799
  msgid ""
3800
  "When enabled, once an item has been added to the cart, the customer will be "
3801
  "redirected directly to your checkout page. This is useful for stores that "
3802
  "sell single items."
3803
  msgstr ""
3804
 
3805
- #: includes/admin/settings/register-settings.php:671
3806
- msgid "Cart Item Quantities"
3807
- msgstr ""
3808
-
3809
- #: includes/admin/settings/register-settings.php:672
3810
- msgid ""
3811
- "Allow quantities to be adjusted when adding %s to the cart, and while "
3812
- "viewing the checkout cart."
3813
- msgstr ""
3814
-
3815
- #: includes/admin/settings/register-settings.php:677
3816
- msgid "Debug Mode"
3817
  msgstr ""
3818
 
3819
- #: includes/admin/settings/register-settings.php:678
3820
- msgid ""
3821
- "Check this box to enable debug mode. When enabled, debug messages will be "
3822
- "logged and shown in Downloads &rarr; Tools &rarr; Debug Log."
3823
  msgstr ""
3824
 
3825
- #: includes/admin/settings/register-settings.php:683
3826
  msgid "Remove Data on Uninstall?"
3827
  msgstr ""
3828
 
3829
- #: includes/admin/settings/register-settings.php:684
3830
  msgid ""
3831
  "Check this box if you would like EDD to completely remove all of its data "
3832
  "when the plugin is deleted."
3833
  msgstr ""
3834
 
3835
- #: includes/admin/settings/register-settings.php:691
 
 
 
 
 
3836
  msgid "Enforce SSL on Checkout"
3837
  msgstr ""
3838
 
3839
- #: includes/admin/settings/register-settings.php:692
3840
  msgid ""
3841
  "Check this to force users to be redirected to the secure checkout page. You "
3842
  "must have an SSL certificate installed to use this option."
3843
  msgstr ""
3844
 
3845
- #: includes/admin/settings/register-settings.php:697
3846
- #: includes/admin/settings/register-settings.php:700
3847
  msgid "Require Login"
3848
  msgstr ""
3849
 
3850
- #: includes/admin/settings/register-settings.php:698
3851
  msgid "Require that users be logged-in to purchase files."
3852
  msgstr ""
3853
 
3854
- #: includes/admin/settings/register-settings.php:701
3855
  msgid ""
3856
  "You can require that customers create and login to user accounts prior to "
3857
  "purchasing from your store by enabling this option. When unchecked, users "
3858
  "can purchase without being logged in by using their name and email address."
3859
  msgstr ""
3860
 
3861
- #: includes/admin/settings/register-settings.php:705
3862
  msgid "Show Register / Login Form?"
3863
  msgstr ""
3864
 
3865
- #: includes/admin/settings/register-settings.php:706
3866
  msgid ""
3867
  "Display the registration and login forms on the checkout page for "
3868
  "non-logged-in users."
3869
  msgstr ""
3870
 
3871
- #: includes/admin/settings/register-settings.php:710
3872
  msgid "Registration and Login Forms"
3873
  msgstr ""
3874
 
3875
- #: includes/admin/settings/register-settings.php:711
3876
  msgid "Registration Form Only"
3877
  msgstr ""
3878
 
3879
- #: includes/admin/settings/register-settings.php:712
3880
  msgid "Login Form Only"
3881
  msgstr ""
3882
 
3883
- #: includes/admin/settings/register-settings.php:718
3884
  msgid "Multiple Discounts"
3885
  msgstr ""
3886
 
3887
- #: includes/admin/settings/register-settings.php:719
3888
  msgid "Allow customers to use multiple discounts on the same purchase?"
3889
  msgstr ""
3890
 
3891
- #: includes/admin/settings/register-settings.php:724
3892
  msgid "Enable Cart Saving"
3893
  msgstr ""
3894
 
3895
- #: includes/admin/settings/register-settings.php:725
3896
  msgid "Check this to enable cart saving on the checkout."
3897
  msgstr ""
3898
 
3899
- #: includes/admin/settings/register-settings.php:727
3900
  msgid "Cart Saving"
3901
  msgstr ""
3902
 
3903
- #: includes/admin/settings/register-settings.php:728
3904
  msgid ""
3905
  "Cart saving allows shoppers to create a temporary link to their current "
3906
  "shopping cart so they can come back to it later, or share it with someone."
3907
  msgstr ""
3908
 
3909
- #: includes/admin/settings/register-settings.php:734
3910
- msgid "Complete Purchase Text"
3911
- msgstr ""
3912
-
3913
- #: includes/admin/settings/register-settings.php:735
3914
- msgid "The button label for completing a purchase."
3915
- msgstr ""
3916
-
3917
- #: includes/admin/settings/register-settings.php:741
3918
- msgid "Register Text"
3919
  msgstr ""
3920
 
3921
- #: includes/admin/settings/register-settings.php:742
3922
- msgid "The button label for completing a free purchase."
3923
  msgstr ""
3924
 
3925
- #: includes/admin/settings/register-settings.php:744
3926
- #: includes/checkout/template.php:896
3927
- msgid "Free Download"
3928
  msgstr ""
3929
 
3930
- #: includes/admin/settings/register-settings.php:748
3931
  msgid "Add to Cart Text"
3932
  msgstr ""
3933
 
3934
- #: includes/admin/settings/register-settings.php:749
3935
  msgid "Text shown on the Add to Cart Buttons."
3936
  msgstr ""
3937
 
3938
- #: includes/admin/settings/register-settings.php:755
3939
  msgid "Buy Now Text"
3940
  msgstr ""
3941
 
3942
- #: includes/admin/settings/register-settings.php:756
3943
  msgid "Text shown on the Buy Now Buttons."
3944
  msgstr ""
3945
 
3946
- #: includes/admin/settings/register-settings.php:764
3947
- #: includes/admin/settings/register-settings.php:767
 
 
 
 
3948
  msgid "Download Method"
3949
  msgstr ""
3950
 
3951
- #: includes/admin/settings/register-settings.php:765
3952
  msgid "Select the file download method. Note, not all methods work on all servers."
3953
  msgstr ""
3954
 
3955
- #: includes/admin/settings/register-settings.php:768
3956
  msgid ""
3957
  "Due to its consistency in multiple platforms and better file protection, "
3958
  "'forced' is the default method. Because Easy Digital Downloads uses PHP to "
@@ -3963,35 +3850,35 @@ msgid ""
3963
  "method can help resolve this."
3964
  msgstr ""
3965
 
3966
- #: includes/admin/settings/register-settings.php:770
3967
  msgid "Forced"
3968
  msgstr ""
3969
 
3970
- #: includes/admin/settings/register-settings.php:771
3971
  msgid "Redirect"
3972
  msgstr ""
3973
 
3974
- #: includes/admin/settings/register-settings.php:776
3975
  msgid "Symlink File Downloads?"
3976
  msgstr ""
3977
 
3978
- #: includes/admin/settings/register-settings.php:777
3979
  msgid ""
3980
  "Check this if you are delivering really large files or having problems with "
3981
  "file downloads completing."
3982
  msgstr ""
3983
 
3984
- #: includes/admin/settings/register-settings.php:783
3985
  msgid ""
3986
  "The maximum number of times files can be downloaded for purchases. Can be "
3987
  "overwritten for each %s."
3988
  msgstr ""
3989
 
3990
- #: includes/admin/settings/register-settings.php:786
3991
  msgid "File Download Limits"
3992
  msgstr ""
3993
 
3994
- #: includes/admin/settings/register-settings.php:787
3995
  msgid ""
3996
  "Set the global default for the number of times a customer can download "
3997
  "items they purchase. Using a value of 0 is unlimited. This can be defined "
@@ -3999,18 +3886,18 @@ msgid ""
3999
  "individual purchase."
4000
  msgstr ""
4001
 
4002
- #: includes/admin/settings/register-settings.php:791
4003
- #: includes/admin/settings/register-settings.php:793
4004
  msgid "Download Link Expiration"
4005
  msgstr ""
4006
 
4007
- #: includes/admin/settings/register-settings.php:792
4008
  msgid ""
4009
  "How long should download links be valid for? Default is 24 hours from the "
4010
  "time they are generated. Enter a time in hours."
4011
  msgstr ""
4012
 
4013
- #: includes/admin/settings/register-settings.php:794
4014
  msgid ""
4015
  "When a customer receives a link to their downloads via email, in their "
4016
  "receipt, or in their purchase history, the link will only be valid for the "
@@ -4019,303 +3906,288 @@ msgid ""
4019
  "customer."
4020
  msgstr ""
4021
 
4022
- #: includes/admin/settings/register-settings.php:802
4023
  msgid "Disable Redownload?"
4024
  msgstr ""
4025
 
4026
- #: includes/admin/settings/register-settings.php:803
4027
  msgid ""
4028
  "Check this if you do not want to allow users to redownload items from their "
4029
  "purchase history."
4030
  msgstr ""
4031
 
4032
- #: includes/admin/settings/register-settings.php:810
 
 
 
 
 
4033
  msgid "Enable SKU Entry"
4034
  msgstr ""
4035
 
4036
- #: includes/admin/settings/register-settings.php:811
4037
  msgid ""
4038
  "Check this box to allow entry of product SKUs. SKUs will be shown on "
4039
  "purchase receipt and exported purchase histories."
4040
  msgstr ""
4041
 
4042
- #: includes/admin/settings/register-settings.php:816
4043
  msgid "Sequential Order Numbers"
4044
  msgstr ""
4045
 
4046
- #: includes/admin/settings/register-settings.php:817
4047
  msgid "Check this box to enable sequential order numbers."
4048
  msgstr ""
4049
 
4050
- #: includes/admin/settings/register-settings.php:822
4051
  msgid "Sequential Starting Number"
4052
  msgstr ""
4053
 
4054
- #: includes/admin/settings/register-settings.php:823
4055
  msgid "The number at which the sequence should begin."
4056
  msgstr ""
4057
 
4058
- #: includes/admin/settings/register-settings.php:830
4059
  msgid "Sequential Number Prefix"
4060
  msgstr ""
4061
 
4062
- #: includes/admin/settings/register-settings.php:831
4063
  msgid "A prefix to prepend to all sequential order numbers."
4064
  msgstr ""
4065
 
4066
- #: includes/admin/settings/register-settings.php:836
4067
  msgid "Sequential Number Postfix"
4068
  msgstr ""
4069
 
4070
- #: includes/admin/settings/register-settings.php:837
4071
  msgid "A postfix to append to all sequential order numbers."
4072
  msgstr ""
4073
 
4074
- #: includes/admin/settings/register-settings.php:844
 
 
 
 
4075
  msgid "Agree to Terms"
4076
  msgstr ""
4077
 
4078
- #: includes/admin/settings/register-settings.php:845
4079
  msgid ""
4080
  "Check this to show an agree to terms on the checkout that users must agree "
4081
  "to before purchasing."
4082
  msgstr ""
4083
 
4084
- #: includes/admin/settings/register-settings.php:850
4085
  msgid "Agree to Terms Label"
4086
  msgstr ""
4087
 
4088
- #: includes/admin/settings/register-settings.php:851
4089
  msgid "Label shown next to the agree to terms check box."
4090
  msgstr ""
4091
 
4092
- #: includes/admin/settings/register-settings.php:857
4093
  msgid "Agreement Text"
4094
  msgstr ""
4095
 
4096
- #: includes/admin/settings/register-settings.php:858
4097
  msgid "If Agree to Terms is checked, enter the agreement terms here."
4098
  msgstr ""
4099
 
4100
- #: includes/admin/settings/register-settings.php:868
4101
  msgid "Buy Now Disabled"
4102
  msgstr ""
4103
 
4104
- #: includes/admin/settings/register-settings.php:869
4105
  msgid ""
4106
  "Buy Now buttons are only available for stores that have a single supported "
4107
  "gateway active and that do not use taxes."
4108
  msgstr ""
4109
 
4110
- #: includes/admin/settings/register-settings.php:967
4111
  msgid "Settings updated."
4112
  msgstr ""
4113
 
4114
- #: includes/admin/settings/register-settings.php:1107
4115
  msgid "Error setting default gateway. No gateways are enabled."
4116
  msgstr ""
4117
 
4118
- #: includes/admin/settings/register-settings.php:1120
4119
  msgid "%s could not be set as the default gateway. It must first be enabled."
4120
  msgstr ""
4121
 
4122
- #: includes/admin/settings/register-settings.php:1223
4123
  msgid "Licenses"
4124
  msgstr ""
4125
 
4126
- #: includes/admin/settings/register-settings.php:1226
4127
  msgid "Misc"
4128
  msgstr ""
4129
 
4130
- #: includes/admin/settings/register-settings.php:1274
4131
  #: includes/gateways/functions.php:25 includes/gateways/paypal-standard.php:33
4132
  msgid "PayPal Standard"
4133
  msgstr ""
4134
 
4135
- #: includes/admin/settings/register-settings.php:1278
4136
- msgid "Purchase Receipts"
4137
- msgstr ""
4138
-
4139
- #: includes/admin/settings/register-settings.php:1279
4140
  msgid "New Sale Notifications"
4141
  msgstr ""
4142
 
4143
- #: includes/admin/settings/register-settings.php:1288
4144
  msgid "Main"
4145
  msgstr ""
4146
 
4147
- #: includes/admin/settings/register-settings.php:1293 includes/install.php:92
4148
- #: includes/template-functions.php:191 templates/widget-cart-checkout.php:6
4149
- #: templates/widget-cart-empty.php:7
4150
- msgid "Checkout"
4151
- msgstr ""
4152
-
4153
- #: includes/admin/settings/register-settings.php:1294
4154
- msgid "Button Text"
4155
- msgstr ""
4156
-
4157
- #: includes/admin/settings/register-settings.php:1296
4158
- msgid "Accounting"
4159
- msgstr ""
4160
-
4161
- #: includes/admin/settings/register-settings.php:1297
4162
  msgid "Terms of Agreement"
4163
  msgstr ""
4164
 
4165
- #: includes/admin/settings/register-settings.php:1539
4166
- msgid ""
4167
- "Don't see what you need? More Payment Gateway options are available <a "
4168
- "href=\"%s\">here</a>."
4169
- msgstr ""
4170
-
4171
- #: includes/admin/settings/register-settings.php:1760
4172
  msgid "The callback function used for the %s setting is missing."
4173
  msgstr ""
4174
 
4175
- #: includes/admin/settings/register-settings.php:1918
4176
  msgid "Upload File"
4177
  msgstr ""
4178
 
4179
- #: includes/admin/settings/register-settings.php:2019
4180
  msgid "Country Wide"
4181
  msgstr ""
4182
 
4183
- #: includes/admin/settings/register-settings.php:2020
4184
  msgid "Rate"
4185
  msgstr ""
4186
 
4187
- #: includes/admin/settings/register-settings.php:2020
4188
  msgid ""
4189
  "<strong>Regional tax rates: </strong>When a customer enters an address on "
4190
  "checkout that matches the specified region for this tax rate, the cart tax "
4191
  "will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
4192
  msgstr ""
4193
 
4194
- #: includes/admin/settings/register-settings.php:2037
4195
- #: includes/admin/settings/register-settings.php:2082
4196
  msgid "Choose a country"
4197
  msgstr ""
4198
 
4199
- #: includes/admin/settings/register-settings.php:2052
4200
  msgid "Choose a state"
4201
  msgstr ""
4202
 
4203
- #: includes/admin/settings/register-settings.php:2064
4204
- #: includes/admin/settings/register-settings.php:2092
4205
  msgid "Apply to whole country"
4206
  msgstr ""
4207
 
4208
- #: includes/admin/settings/register-settings.php:2067
4209
- #: includes/admin/settings/register-settings.php:2095
4210
  msgid "Remove Rate"
4211
  msgstr ""
4212
 
4213
- #: includes/admin/settings/register-settings.php:2100
4214
  msgid "Add Tax Rate"
4215
  msgstr ""
4216
 
4217
- #: includes/admin/settings/register-settings.php:2153
4218
  msgid ""
4219
  "Your license key expired on %s. Please <a href=\"%s\" "
4220
  "target=\"_blank\">renew your license key</a>."
4221
  msgstr ""
4222
 
4223
- #: includes/admin/settings/register-settings.php:2166
4224
  msgid ""
4225
  "Your license key has been disabled. Please <a href=\"%s\" "
4226
  "target=\"_blank\">contact support</a> for more information."
4227
  msgstr ""
4228
 
4229
- #: includes/admin/settings/register-settings.php:2178
4230
  msgid ""
4231
  "Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
4232
  "page</a> and verify it."
4233
  msgstr ""
4234
 
4235
- #: includes/admin/settings/register-settings.php:2191
4236
  msgid ""
4237
  "Your %s is not active for this URL. Please <a href=\"%s\" "
4238
  "target=\"_blank\">visit your account page</a> to manage your license key "
4239
  "URLs."
4240
  msgstr ""
4241
 
4242
- #: includes/admin/settings/register-settings.php:2203
4243
  msgid "This appears to be an invalid license key for %s."
4244
  msgstr ""
4245
 
4246
- #: includes/admin/settings/register-settings.php:2212
4247
  msgid ""
4248
  "Your license key has reached its activation limit. <a href=\"%s\">View "
4249
  "possible upgrades</a> now."
4250
  msgstr ""
4251
 
4252
- #: includes/admin/settings/register-settings.php:2221
4253
  msgid ""
4254
  "The key you entered belongs to a bundle, please use the product specific "
4255
  "license key."
4256
  msgstr ""
4257
 
4258
- #: includes/admin/settings/register-settings.php:2229
4259
  msgid "unknown_error"
4260
  msgstr ""
4261
 
4262
- #: includes/admin/settings/register-settings.php:2230
4263
  msgid ""
4264
  "There was an error with this license key: %s. Please <a href=\"%s\">contact "
4265
  "our support team</a>."
4266
  msgstr ""
4267
 
4268
- #: includes/admin/settings/register-settings.php:2250
4269
  msgid "License key never expires."
4270
  msgstr ""
4271
 
4272
- #: includes/admin/settings/register-settings.php:2257
4273
  msgid ""
4274
  "Your license key expires soon! It expires on %s. <a href=\"%s\" "
4275
  "target=\"_blank\">Renew your license key</a>."
4276
  msgstr ""
4277
 
4278
- #: includes/admin/settings/register-settings.php:2267
4279
  msgid "Your license key expires on %s."
4280
  msgstr ""
4281
 
4282
- #: includes/admin/settings/register-settings.php:2285
4283
  msgid "To receive updates, please enter your valid %s license key."
4284
  msgstr ""
4285
 
4286
- #: includes/admin/settings/register-settings.php:2298
4287
  msgid "Deactivate License"
4288
  msgstr ""
4289
 
4290
- #: includes/admin/thickbox.php:29 includes/admin/thickbox.php:131
4291
  msgid "Insert %s"
4292
  msgstr ""
4293
 
4294
- #: includes/admin/thickbox.php:63
4295
  msgid "You must choose a download"
4296
  msgstr ""
4297
 
4298
- #: includes/admin/thickbox.php:89
4299
  msgid "Use the form below to insert the shortcode for purchasing a %s"
4300
  msgstr ""
4301
 
4302
- #: includes/admin/thickbox.php:96
4303
  msgid "Choose the button behavior"
4304
  msgstr ""
4305
 
4306
- #: includes/admin/thickbox.php:98
4307
  msgid "Direct Purchase Link"
4308
  msgstr ""
4309
 
4310
- #: includes/admin/thickbox.php:104
4311
  msgid "Choose a style"
4312
  msgstr ""
4313
 
4314
- #: includes/admin/thickbox.php:118
4315
  msgid "Choose a button color"
4316
  msgstr ""
4317
 
4318
- #: includes/admin/thickbox.php:128
4319
  msgid "Link text . . ."
4320
  msgstr ""
4321
 
@@ -4344,101 +4216,97 @@ msgstr ""
4344
  msgid "Customers, earnings, sales, discounts and logs successfully reset."
4345
  msgstr ""
4346
 
4347
- #: includes/admin/tools.php:30
4348
  msgid "Easy Digital Downloads Tools"
4349
  msgstr ""
4350
 
4351
- #: includes/admin/tools.php:72
4352
  msgid "Beta Versions"
4353
  msgstr ""
4354
 
4355
- #: includes/admin/tools.php:75
4356
  msgid "System Info"
4357
  msgstr ""
4358
 
4359
- #: includes/admin/tools.php:78 includes/admin/tools.php:1079
4360
- msgid "Debug Log"
4361
- msgstr ""
4362
-
4363
- #: includes/admin/tools.php:81
4364
  msgid "Import/Export"
4365
  msgstr ""
4366
 
4367
- #: includes/admin/tools.php:102
4368
  msgid "Banned Emails"
4369
  msgstr ""
4370
 
4371
- #: includes/admin/tools.php:104
4372
- msgid "Emails placed in the box below will not be allowed to make purchases."
 
 
4373
  msgstr ""
4374
 
4375
- #: includes/admin/tools.php:108
4376
- msgid ""
4377
- "Enter emails and/or domains (starting with \"@\") and/or TLDs (starting "
4378
- "with \".\") to disallow, one per line."
4379
  msgstr ""
4380
 
4381
- #: includes/admin/tools.php:113 includes/admin/tools.php:298
4382
  msgid "Save"
4383
  msgstr ""
4384
 
4385
- #: includes/admin/tools.php:142
4386
  msgid "Use these tools to recount / reset store stats."
4387
  msgstr ""
4388
 
4389
- #: includes/admin/tools.php:149 includes/scripts.php:90
4390
  msgid "Please select an option"
4391
  msgstr ""
4392
 
4393
- #: includes/admin/tools.php:150
4394
  msgid "Recount Store Earnings and Sales"
4395
  msgstr ""
4396
 
4397
- #: includes/admin/tools.php:151
4398
  msgid "Recount Earnings and Sales for a %s"
4399
  msgstr ""
4400
 
4401
- #: includes/admin/tools.php:152
4402
  msgid "Recount Earnings and Sales for All %s"
4403
  msgstr ""
4404
 
4405
- #: includes/admin/tools.php:155
4406
  msgid "Reset Store"
4407
  msgstr ""
4408
 
4409
- #: includes/admin/tools.php:174
4410
  msgid "Recalculates the total store earnings and sales."
4411
  msgstr ""
4412
 
4413
- #: includes/admin/tools.php:175
4414
  msgid "Recalculates the earnings and sales stats for a specific %s."
4415
  msgstr ""
4416
 
4417
- #: includes/admin/tools.php:176
4418
  msgid "Recalculates the earnings and sales stats for all %s."
4419
  msgstr ""
4420
 
4421
- #: includes/admin/tools.php:177
4422
  msgid "Recalculates the lifetime value and purchase counts for all customers."
4423
  msgstr ""
4424
 
4425
- #: includes/admin/tools.php:179
4426
  msgid ""
4427
  "<strong>Deletes</strong> all payment records, customers, and related log "
4428
  "entries."
4429
  msgstr ""
4430
 
4431
- #: includes/admin/tools.php:209 includes/admin/tools.php:217
4432
  msgid "Clear Incomplete Upgrade Notice"
4433
  msgstr ""
4434
 
4435
- #: includes/admin/tools.php:211
4436
  msgid ""
4437
  "Sometimes a database upgrade notice may not be cleared after an upgrade is "
4438
  "completed due to conflicts with other extensions or other minor issues."
4439
  msgstr ""
4440
 
4441
- #: includes/admin/tools.php:212
4442
  msgid ""
4443
  "If you're certain these upgrades have been completed, you can clear these "
4444
  "upgrade notices by clicking the button below. If you have any questions "
@@ -4446,18 +4314,18 @@ msgid ""
4446
  "we'll be happy to help."
4447
  msgstr ""
4448
 
4449
- #: includes/admin/tools.php:249
4450
  msgid ""
4451
  "These API keys allow you to use the <a href=\"%s\">EDD REST API</a> to "
4452
  "retrieve store data in JSON or XML for external applications or devices, "
4453
  "such as the <a href=\"%s\">EDD mobile app</a>."
4454
  msgstr ""
4455
 
4456
- #: includes/admin/tools.php:278
4457
  msgid "Enable Beta Versions"
4458
  msgstr ""
4459
 
4460
- #: includes/admin/tools.php:280
4461
  msgid ""
4462
  "Checking any of the below checkboxes will opt you in to receive pre-release "
4463
  "update notifications. You can opt-out at any time. Pre-release updates do "
@@ -4465,23 +4333,23 @@ msgid ""
4465
  "update notifications."
4466
  msgstr ""
4467
 
4468
- #: includes/admin/tools.php:290
4469
  msgid "Get updates for pre-release versions of %s"
4470
  msgstr ""
4471
 
4472
- #: includes/admin/tools.php:450
4473
  msgid "Import Payment History"
4474
  msgstr ""
4475
 
4476
- #: includes/admin/tools.php:452
4477
  msgid "Import a CSV file of payment records."
4478
  msgstr ""
4479
 
4480
- #: includes/admin/tools.php:462 includes/admin/tools.php:744
4481
  msgid "Import CSV"
4482
  msgstr ""
4483
 
4484
- #: includes/admin/tools.php:472
4485
  msgid ""
4486
  "Each column loaded from the CSV needs to be mapped to a payment field. "
4487
  "Select the column that should be mapped to each field below. Any columns "
@@ -4489,114 +4357,114 @@ msgid ""
4489
  "guide</a> for assistance with importing payment records."
4490
  msgstr ""
4491
 
4492
- #: includes/admin/tools.php:481
4493
  msgid "Payment Field"
4494
  msgstr ""
4495
 
4496
- #: includes/admin/tools.php:482 includes/admin/tools.php:764
4497
  msgid "CSV Column"
4498
  msgstr ""
4499
 
4500
- #: includes/admin/tools.php:483 includes/admin/tools.php:765
4501
  msgid "Data Preview"
4502
  msgstr ""
4503
 
4504
- #: includes/admin/tools.php:488
4505
  msgid "Currency Code"
4506
  msgstr ""
4507
 
4508
- #: includes/admin/tools.php:491 includes/admin/tools.php:500
4509
- #: includes/admin/tools.php:509 includes/admin/tools.php:518
4510
- #: includes/admin/tools.php:527 includes/admin/tools.php:536
4511
- #: includes/admin/tools.php:545 includes/admin/tools.php:554
4512
- #: includes/admin/tools.php:563 includes/admin/tools.php:572
4513
- #: includes/admin/tools.php:581 includes/admin/tools.php:590
4514
- #: includes/admin/tools.php:599 includes/admin/tools.php:608
4515
- #: includes/admin/tools.php:617 includes/admin/tools.php:626
4516
- #: includes/admin/tools.php:635 includes/admin/tools.php:644
4517
- #: includes/admin/tools.php:653 includes/admin/tools.php:662
4518
- #: includes/admin/tools.php:671 includes/admin/tools.php:680
4519
- #: includes/admin/tools.php:689 includes/admin/tools.php:698
4520
- #: includes/admin/tools.php:707 includes/admin/tools.php:716
4521
- #: includes/admin/tools.php:773 includes/admin/tools.php:782
4522
- #: includes/admin/tools.php:791 includes/admin/tools.php:800
4523
- #: includes/admin/tools.php:809 includes/admin/tools.php:818
4524
- #: includes/admin/tools.php:827 includes/admin/tools.php:836
4525
- #: includes/admin/tools.php:845 includes/admin/tools.php:854
4526
- #: includes/admin/tools.php:863 includes/admin/tools.php:872
4527
- #: includes/admin/tools.php:881 includes/admin/tools.php:890
4528
- #: includes/admin/tools.php:899 includes/admin/tools.php:908
4529
- #: includes/admin/tools.php:917
4530
  msgid "- Ignore this field -"
4531
  msgstr ""
4532
 
4533
- #: includes/admin/tools.php:494 includes/admin/tools.php:503
4534
- #: includes/admin/tools.php:512 includes/admin/tools.php:521
4535
- #: includes/admin/tools.php:530 includes/admin/tools.php:539
4536
- #: includes/admin/tools.php:548 includes/admin/tools.php:557
4537
- #: includes/admin/tools.php:566 includes/admin/tools.php:575
4538
- #: includes/admin/tools.php:584 includes/admin/tools.php:593
4539
- #: includes/admin/tools.php:602 includes/admin/tools.php:611
4540
- #: includes/admin/tools.php:620 includes/admin/tools.php:629
4541
- #: includes/admin/tools.php:638 includes/admin/tools.php:647
4542
- #: includes/admin/tools.php:656 includes/admin/tools.php:665
4543
- #: includes/admin/tools.php:674 includes/admin/tools.php:683
4544
- #: includes/admin/tools.php:692 includes/admin/tools.php:701
4545
- #: includes/admin/tools.php:710 includes/admin/tools.php:719
4546
- #: includes/admin/tools.php:776 includes/admin/tools.php:785
4547
- #: includes/admin/tools.php:794 includes/admin/tools.php:803
4548
- #: includes/admin/tools.php:812 includes/admin/tools.php:821
4549
- #: includes/admin/tools.php:830 includes/admin/tools.php:839
4550
- #: includes/admin/tools.php:848 includes/admin/tools.php:857
4551
- #: includes/admin/tools.php:866 includes/admin/tools.php:875
4552
- #: includes/admin/tools.php:884 includes/admin/tools.php:893
4553
- #: includes/admin/tools.php:902 includes/admin/tools.php:911
4554
- #: includes/admin/tools.php:920
4555
  msgid "- select field to preview data -"
4556
  msgstr ""
4557
 
4558
- #: includes/admin/tools.php:533
4559
  msgid "Discount Code(s)"
4560
  msgstr ""
4561
 
4562
- #: includes/admin/tools.php:560
4563
  msgid "Parent Payment ID"
4564
  msgstr ""
4565
 
4566
- #: includes/admin/tools.php:605
4567
  msgid "Purchased Product(s)"
4568
  msgstr ""
4569
 
4570
- #: includes/admin/tools.php:623 templates/checkout_cart.php:102
4571
  #: templates/shortcode-receipt.php:98
4572
  msgid "Subtotal"
4573
  msgstr ""
4574
 
4575
- #: includes/admin/tools.php:641 templates/checkout_cart.php:129
4576
  msgid "Total"
4577
  msgstr ""
4578
 
4579
- #: includes/admin/tools.php:668
4580
  msgid "Address Line 1"
4581
  msgstr ""
4582
 
4583
- #: includes/admin/tools.php:677
4584
  msgid "Address Line 2"
4585
  msgstr ""
4586
 
4587
- #: includes/admin/tools.php:724 includes/admin/tools.php:925
4588
  msgid "Process Import"
4589
  msgstr ""
4590
 
4591
- #: includes/admin/tools.php:732
4592
  msgid "Import Download Products"
4593
  msgstr ""
4594
 
4595
- #: includes/admin/tools.php:734
4596
  msgid "Import a CSV file of products."
4597
  msgstr ""
4598
 
4599
- #: includes/admin/tools.php:754
4600
  msgid ""
4601
  "Each column loaded from the CSV needs to be mapped to a Download product "
4602
  "field. Select the column that should be mapped to each field below. Any "
@@ -4605,135 +4473,114 @@ msgid ""
4605
  "products."
4606
  msgstr ""
4607
 
4608
- #: includes/admin/tools.php:763
4609
  msgid "Product Field"
4610
  msgstr ""
4611
 
4612
- #: includes/admin/tools.php:770
4613
  msgid "Product Author"
4614
  msgstr ""
4615
 
4616
- #: includes/admin/tools.php:779
4617
  msgid "Product Categories"
4618
  msgstr ""
4619
 
4620
- #: includes/admin/tools.php:788
4621
  msgid "Product Creation Date"
4622
  msgstr ""
4623
 
4624
- #: includes/admin/tools.php:797
4625
  msgid "Product Description"
4626
  msgstr ""
4627
 
4628
- #: includes/admin/tools.php:806
4629
  msgid "Product Excerpt"
4630
  msgstr ""
4631
 
4632
- #: includes/admin/tools.php:815
4633
  msgid "Product Image"
4634
  msgstr ""
4635
 
4636
- #: includes/admin/tools.php:824
4637
  msgid "Product Notes"
4638
  msgstr ""
4639
 
4640
- #: includes/admin/tools.php:833
4641
  msgid "Product Price(s)"
4642
  msgstr ""
4643
 
4644
- #: includes/admin/tools.php:842
4645
  msgid "Product SKU"
4646
  msgstr ""
4647
 
4648
- #: includes/admin/tools.php:851
4649
  msgid "Product Slug"
4650
  msgstr ""
4651
 
4652
- #: includes/admin/tools.php:860
4653
  msgid "Product Status"
4654
  msgstr ""
4655
 
4656
- #: includes/admin/tools.php:869
4657
  msgid "Product Tags"
4658
  msgstr ""
4659
 
4660
- #: includes/admin/tools.php:878
4661
  msgid "Product Title"
4662
  msgstr ""
4663
 
4664
- #: includes/admin/tools.php:887
4665
  msgid "Download Files"
4666
  msgstr ""
4667
 
4668
- #: includes/admin/tools.php:905
4669
  msgid "Sale Count"
4670
  msgstr ""
4671
 
4672
- #: includes/admin/tools.php:933
4673
  msgid "Export Settings"
4674
  msgstr ""
4675
 
4676
- #: includes/admin/tools.php:935
4677
  msgid ""
4678
  "Export the Easy Digital Downloads settings for this site as a .json file. "
4679
  "This allows you to easily import the configuration into another site."
4680
  msgstr ""
4681
 
4682
- #: includes/admin/tools.php:936
4683
  msgid ""
4684
  "To export shop data (purchases, customers, etc), visit the <a "
4685
  "href=\"%s\">Reports</a> page."
4686
  msgstr ""
4687
 
4688
- #: includes/admin/tools.php:948
4689
  msgid "Import Settings"
4690
  msgstr ""
4691
 
4692
- #: includes/admin/tools.php:950
4693
  msgid ""
4694
  "Import the Easy Digital Downloads settings from a .json file. This file can "
4695
  "be obtained by exporting the settings on another site using the form above."
4696
  msgstr ""
4697
 
4698
- #: includes/admin/tools.php:958
4699
  msgid "Import"
4700
  msgstr ""
4701
 
4702
- #: includes/admin/tools.php:1027
4703
  msgid "Please upload a valid .json file"
4704
  msgstr ""
4705
 
4706
- #: includes/admin/tools.php:1033
4707
  msgid "Please upload a file to import"
4708
  msgstr ""
4709
 
4710
- #: includes/admin/tools.php:1082
4711
- msgid ""
4712
- "Use this tool to help debug Easy Digital Downloads functionality. "
4713
- "Developers may use the <a "
4714
- "href=\"https://github.com/easydigitaldownloads/easy-digital-downloads/blob/"
4715
- "master/includes/class-edd-logging.php\">EDD_Logging class</a> to record "
4716
- "debug data."
4717
- msgstr ""
4718
-
4719
- #: includes/admin/tools.php:1087
4720
- msgid "Download Debug Log File"
4721
- msgstr ""
4722
-
4723
- #: includes/admin/tools.php:1088
4724
- msgid "Clear Log"
4725
- msgstr ""
4726
-
4727
- #: includes/admin/tools.php:1089
4728
- msgid "Copy Entire Log"
4729
- msgstr ""
4730
-
4731
  #: includes/admin/tracking.php:256
4732
  msgid ""
4733
  "Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and "
4734
- "our newsletter and immediately be emailed a discount to the EDD shop, valid "
4735
- "towards the <a href=\"%s\" target=\"_blank\">purchase of extensions</a>. No "
4736
- "sensitive data is tracked."
4737
  msgstr ""
4738
 
4739
  #: includes/admin/tracking.php:257
@@ -4848,131 +4695,131 @@ msgstr ""
4848
  msgid "Step %d of approximately %d running"
4849
  msgstr ""
4850
 
4851
- #: includes/ajax-functions.php:583 includes/ajax-functions.php:635
4852
  msgid "No results found"
4853
  msgstr ""
4854
 
4855
- #: includes/ajax-functions.php:684 includes/ajax-functions.php:776
4856
- #: includes/class-edd-html-elements.php:342
4857
  msgid "No users found"
4858
  msgstr ""
4859
 
4860
- #: includes/ajax-functions.php:726
4861
  msgid "All Prices"
4862
  msgstr ""
4863
 
4864
- #: includes/api/class-edd-api-v2.php:143 includes/api/class-edd-api.php:1064
4865
- #: includes/api/class-edd-api.php:1248 includes/api/class-edd-api.php:1430
4866
  msgid "Product %s not found!"
4867
  msgstr ""
4868
 
4869
- #: includes/api/class-edd-api-v2.php:218 includes/api/class-edd-api.php:1169
4870
- #: includes/api/class-edd-api.php:1265
4871
  msgid "The end date must be later than the start date!"
4872
  msgstr ""
4873
 
4874
- #: includes/api/class-edd-api-v2.php:319 includes/api/class-edd-api.php:1005
4875
  msgid "Customer %s not found!"
4876
  msgstr ""
4877
 
4878
- #: includes/api/class-edd-api-v2.php:324 includes/api/class-edd-api.php:1010
4879
  msgid "No customers found!"
4880
  msgstr ""
4881
 
4882
- #: includes/api/class-edd-api.php:465
4883
  msgid "You must specify both a token and API key!"
4884
  msgstr ""
4885
 
4886
- #: includes/api/class-edd-api.php:482
4887
  msgid "Your request could not be authenticated!"
4888
  msgstr ""
4889
 
4890
- #: includes/api/class-edd-api.php:500
4891
  msgid "Invalid API key!"
4892
  msgstr ""
4893
 
4894
- #: includes/api/class-edd-api.php:516
4895
  msgid "Invalid API version!"
4896
  msgstr ""
4897
 
4898
- #: includes/api/class-edd-api.php:690
4899
  msgid "Invalid query!"
4900
  msgstr ""
4901
 
4902
- #: includes/api/class-edd-api.php:1174 includes/api/class-edd-api.php:1270
4903
  msgid "Invalid or no date range specified!"
4904
  msgstr ""
4905
 
4906
- #: includes/api/class-edd-api.php:1576
4907
  msgid "No discounts found!"
4908
  msgstr ""
4909
 
4910
- #: includes/api/class-edd-api.php:1623
4911
  msgid "Discount %s not found!"
4912
  msgstr ""
4913
 
4914
- #: includes/api/class-edd-api.php:1696
4915
  msgid "No download logs found!"
4916
  msgstr ""
4917
 
4918
- #: includes/api/class-edd-api.php:1954 includes/user-functions.php:1040
4919
  msgid "Easy Digital Downloads API Keys"
4920
  msgstr ""
4921
 
4922
- #: includes/api/class-edd-api.php:1963 includes/user-functions.php:1045
4923
  msgid "Generate API Key"
4924
  msgstr ""
4925
 
4926
- #: includes/api/class-edd-api.php:1965 includes/user-functions.php:1047
4927
  msgid "Public key:"
4928
  msgstr ""
4929
 
4930
- #: includes/api/class-edd-api.php:1966 includes/user-functions.php:1048
4931
  msgid "Secret key:"
4932
  msgstr ""
4933
 
4934
- #: includes/api/class-edd-api.php:1967 includes/user-functions.php:1049
4935
  msgid "Token:"
4936
  msgstr ""
4937
 
4938
- #: includes/api/class-edd-api.php:1969 includes/user-functions.php:1051
4939
  msgid "Revoke API Keys"
4940
  msgstr ""
4941
 
4942
- #: includes/api/class-edd-api.php:1995
4943
  msgid "User ID Required"
4944
  msgstr ""
4945
 
4946
- #: includes/api/class-edd-api.php:2007 includes/api/class-edd-api.php:2009
4947
  msgid "You do not have permission to %s API keys for this user"
4948
  msgstr ""
4949
 
4950
- #: includes/cart/class-edd-cart.php:911
4951
  msgid "includes %s tax"
4952
  msgstr ""
4953
 
4954
- #: includes/cart/class-edd-cart.php:913
4955
  msgid "excludes %s tax"
4956
  msgstr ""
4957
 
4958
- #: includes/cart/class-edd-cart.php:1433 includes/cart/class-edd-cart.php:1496
4959
  #: templates/shortcode-profile-editor.php:22
4960
  msgid "Success"
4961
  msgstr ""
4962
 
4963
- #: includes/cart/class-edd-cart.php:1434
4964
  msgid "Cart saved successfully. You can restore your cart using this URL:"
4965
  msgstr ""
4966
 
4967
- #: includes/cart/class-edd-cart.php:1470 includes/cart/class-edd-cart.php:1484
4968
  msgid "Cart restoration failed. Invalid token."
4969
  msgstr ""
4970
 
4971
- #: includes/cart/class-edd-cart.php:1478 includes/cart/class-edd-cart.php:1487
4972
  msgid "The cart cannot be restored. Invalid token."
4973
  msgstr ""
4974
 
4975
- #: includes/cart/class-edd-cart.php:1496
4976
  msgid "Cart restored successfully."
4977
  msgstr ""
4978
 
@@ -5076,173 +4923,177 @@ msgstr ""
5076
  msgid "The date your credit card expires, typically on the front of the card."
5077
  msgstr ""
5078
 
5079
- #: includes/checkout/template.php:343
5080
  msgid "Billing Details"
5081
  msgstr ""
5082
 
5083
- #: includes/checkout/template.php:352
5084
  msgid "The primary billing address for your credit card."
5085
  msgstr ""
5086
 
5087
- #: includes/checkout/template.php:353
5088
  msgid "Address line 1"
5089
  msgstr ""
5090
 
5091
- #: includes/checkout/template.php:357
5092
  msgid "Billing Address Line 2 (optional)"
5093
  msgstr ""
5094
 
5095
- #: includes/checkout/template.php:362
5096
  msgid "The suite, apt no, PO box, etc, associated with your billing address."
5097
  msgstr ""
5098
 
5099
- #: includes/checkout/template.php:363
5100
  msgid "Address line 2"
5101
  msgstr ""
5102
 
5103
- #: includes/checkout/template.php:367
5104
  msgid "Billing City"
5105
  msgstr ""
5106
 
5107
- #: includes/checkout/template.php:372
5108
  msgid "The city for your billing address."
5109
  msgstr ""
5110
 
5111
- #: includes/checkout/template.php:377
5112
  msgid "Billing Zip / Postal Code"
5113
  msgstr ""
5114
 
5115
- #: includes/checkout/template.php:382
5116
  msgid "The zip or postal code for your billing address."
5117
  msgstr ""
5118
 
5119
- #: includes/checkout/template.php:387
5120
  msgid "Billing Country"
5121
  msgstr ""
5122
 
5123
- #: includes/checkout/template.php:392
5124
  msgid "The country for your billing address."
5125
  msgstr ""
5126
 
5127
- #: includes/checkout/template.php:411
5128
  msgid "Billing State / Province"
5129
  msgstr ""
5130
 
5131
- #: includes/checkout/template.php:416
5132
  msgid "The state or province for your billing address."
5133
  msgstr ""
5134
 
5135
- #: includes/checkout/template.php:474
5136
  msgid "Already have an account?"
5137
  msgstr ""
5138
 
5139
- #: includes/checkout/template.php:474 includes/checkout/template.php:576
5140
  msgid "Login"
5141
  msgstr ""
5142
 
5143
- #: includes/checkout/template.php:480
5144
  msgid "Create an account"
5145
  msgstr ""
5146
 
5147
- #: includes/checkout/template.php:480
5148
  msgid "(optional)"
5149
  msgstr ""
5150
 
5151
- #: includes/checkout/template.php:489
5152
  msgid "The username you will use to log into your account."
5153
  msgstr ""
5154
 
5155
- #: includes/checkout/template.php:494 includes/checkout/template.php:500
5156
- #: includes/checkout/template.php:565 templates/shortcode-login.php:19
5157
- #: templates/shortcode-register.php:30
5158
  msgid "Password"
5159
  msgstr ""
5160
 
5161
- #: includes/checkout/template.php:499
5162
  msgid "The password used to access your account."
5163
  msgstr ""
5164
 
5165
- #: includes/checkout/template.php:504
5166
  msgid "Password Again"
5167
  msgstr ""
5168
 
5169
- #: includes/checkout/template.php:509
5170
  msgid "Confirm your password."
5171
  msgstr ""
5172
 
5173
- #: includes/checkout/template.php:510
5174
  msgid "Confirm password"
5175
  msgstr ""
5176
 
5177
- #: includes/checkout/template.php:547
5178
  msgid "Need to create an account?"
5179
  msgstr ""
5180
 
5181
- #: includes/checkout/template.php:549 templates/shortcode-register.php:46
5182
  msgid "Register"
5183
  msgstr ""
5184
 
5185
- #: includes/checkout/template.php:549
5186
  msgid "or checkout as a guest."
5187
  msgstr ""
5188
 
5189
- #: includes/checkout/template.php:556 templates/shortcode-login.php:15
5190
  msgid "Username or Email"
5191
  msgstr ""
5192
 
5193
- #: includes/checkout/template.php:561
5194
  msgid "Your username or email address"
5195
  msgstr ""
5196
 
5197
- #: includes/checkout/template.php:570
5198
  msgid "Your password"
5199
  msgstr ""
5200
 
5201
- #: includes/checkout/template.php:605
5202
  msgid "Select Payment Method"
5203
  msgstr ""
5204
 
5205
- #: includes/checkout/template.php:741
5206
  msgid "Have a discount code?"
5207
  msgstr ""
5208
 
5209
- #: includes/checkout/template.php:745
5210
  msgid "Discount"
5211
  msgstr ""
5212
 
5213
- #: includes/checkout/template.php:747
5214
  msgid "Enter a coupon code if you have one."
5215
  msgstr ""
5216
 
5217
- #: includes/checkout/template.php:749 includes/process-purchase.php:350
5218
- #: includes/scripts.php:67
5219
  msgid "Enter discount"
5220
  msgstr ""
5221
 
5222
- #: includes/checkout/template.php:772
5223
  msgid "Agree to Terms?"
5224
  msgstr ""
5225
 
5226
- #: includes/checkout/template.php:785
5227
  msgid "Show Terms"
5228
  msgstr ""
5229
 
5230
- #: includes/checkout/template.php:786
5231
  msgid "Hide Terms"
5232
  msgstr ""
5233
 
5234
- #: includes/checkout/template.php:810
5235
  msgid "Purchase Total:"
5236
  msgstr ""
5237
 
5238
- #: includes/checkout/template.php:836
5239
  msgid "Go back"
5240
  msgstr ""
5241
 
5242
- #: includes/checkout/template.php:859
5243
  msgid "Next"
5244
  msgstr ""
5245
 
 
 
 
 
5246
  #: includes/class-edd-cache-helper.php:117
5247
  msgid ""
5248
  "In order for <strong>database caching</strong> to work with Easy Digital "
@@ -5343,7 +5194,7 @@ msgstr ""
5343
  msgid "ID: %d"
5344
  msgstr ""
5345
 
5346
- #: includes/class-edd-cli.php:194 includes/class-edd-cli.php:464
5347
  msgid "Status: %s"
5348
  msgstr ""
5349
 
@@ -5395,7 +5246,7 @@ msgstr ""
5395
  msgid "%d customers created in %d seconds"
5396
  msgstr ""
5397
 
5398
- #: includes/class-edd-cli.php:328 includes/class-edd-html-elements.php:265
5399
  msgid "No customers found"
5400
  msgstr ""
5401
 
@@ -5403,8 +5254,8 @@ msgstr ""
5403
  msgid "Customer User ID: %s"
5404
  msgstr ""
5405
 
5406
- #: includes/class-edd-cli.php:335 includes/user-functions.php:567
5407
- #: includes/user-functions.php:576
5408
  msgid "Username: %s"
5409
  msgstr ""
5410
 
@@ -5420,7 +5271,7 @@ msgstr ""
5420
  msgid "Last Name: %s"
5421
  msgstr ""
5422
 
5423
- #: includes/class-edd-cli.php:346 includes/class-edd-cli.php:391
5424
  msgid "Email: %s"
5425
  msgstr ""
5426
 
@@ -5436,128 +5287,128 @@ msgstr ""
5436
  msgid "Total Downloads: %s"
5437
  msgstr ""
5438
 
5439
- #: includes/class-edd-cli.php:384
5440
  msgid "No sales found"
5441
  msgstr ""
5442
 
5443
- #: includes/class-edd-cli.php:390
5444
  msgid "Purchase Key: %s"
5445
  msgstr ""
5446
 
5447
- #: includes/class-edd-cli.php:392
5448
  msgid "Date: %s"
5449
  msgstr ""
5450
 
5451
- #: includes/class-edd-cli.php:393
5452
  msgid "Subtotal: %s"
5453
  msgstr ""
5454
 
5455
- #: includes/class-edd-cli.php:394
5456
  msgid "Tax: %s"
5457
  msgstr ""
5458
 
5459
- #: includes/class-edd-cli.php:397
5460
  msgid "Fees:"
5461
  msgstr ""
5462
 
5463
- #: includes/class-edd-cli.php:400
5464
  msgid " Fee: %s - %s"
5465
  msgstr ""
5466
 
5467
- #: includes/class-edd-cli.php:404
5468
  msgid "Total: %s"
5469
  msgstr ""
5470
 
5471
- #: includes/class-edd-cli.php:406
5472
  msgid "Gateway: %s"
5473
  msgstr ""
5474
 
5475
- #: includes/class-edd-cli.php:409
5476
  msgid "Products:"
5477
  msgstr ""
5478
 
5479
- #: includes/class-edd-cli.php:413
5480
  msgid " Product: %s - %s"
5481
  msgstr ""
5482
 
5483
- #: includes/class-edd-cli.php:444 includes/class-edd-html-elements.php:403
5484
  #: includes/shortcodes.php:270
5485
  msgid "No discounts found"
5486
  msgstr ""
5487
 
5488
- #: includes/class-edd-cli.php:450
5489
  msgid "Name: %s"
5490
  msgstr ""
5491
 
5492
- #: includes/class-edd-cli.php:451
5493
  msgid "Code: %s"
5494
  msgstr ""
5495
 
5496
- #: includes/class-edd-cli.php:459
5497
  msgid "Amount: %s"
5498
  msgstr ""
5499
 
5500
- #: includes/class-edd-cli.php:460
5501
  msgid "Uses: %s"
5502
  msgstr ""
5503
 
5504
- #: includes/class-edd-cli.php:461
5505
  msgid "Max Uses: %s"
5506
  msgstr ""
5507
 
5508
- #: includes/class-edd-cli.php:461
5509
  msgid "Unlimited"
5510
  msgstr ""
5511
 
5512
- #: includes/class-edd-cli.php:462
5513
  msgid "Start Date: %s"
5514
  msgstr ""
5515
 
5516
- #: includes/class-edd-cli.php:462
5517
  msgid "No Start Date"
5518
  msgstr ""
5519
 
5520
- #: includes/class-edd-cli.php:463
5521
  msgid "Expiration Date: %s"
5522
  msgstr ""
5523
 
5524
- #: includes/class-edd-cli.php:463
5525
  msgid "No Expiration"
5526
  msgstr ""
5527
 
5528
- #: includes/class-edd-cli.php:469
5529
  msgid "Product Requirements:"
5530
  msgstr ""
5531
 
5532
- #: includes/class-edd-cli.php:472
5533
  msgid " Product: %s"
5534
  msgstr ""
5535
 
5536
- #: includes/class-edd-cli.php:478
5537
  msgid "Global Discount: %s"
5538
  msgstr ""
5539
 
5540
- #: includes/class-edd-cli.php:479
5541
  msgid "Single Use: %s"
5542
  msgstr ""
5543
 
5544
- #: includes/class-edd-cli.php:507
5545
  msgid "No action specified, did you mean"
5546
  msgstr ""
5547
 
5548
- #: includes/class-edd-cli.php:509
5549
  msgid "Invalid action specified, did you mean"
5550
  msgstr ""
5551
 
5552
- #: includes/class-edd-cli.php:566
5553
  msgid "Invalid status '%s', defaulting to 'complete'"
5554
  msgstr ""
5555
 
5556
- #: includes/class-edd-cli.php:604
5557
  msgid "Specified ID is not a product"
5558
  msgstr ""
5559
 
5560
- #: includes/class-edd-cli.php:722
5561
  msgid "Created %s payments"
5562
  msgstr ""
5563
 
@@ -5565,36 +5416,36 @@ msgstr ""
5565
  msgid "Once Weekly"
5566
  msgstr ""
5567
 
5568
- #: includes/class-edd-customer.php:201 includes/class-edd-discount.php:254
5569
  #: includes/class-edd-download.php:196
5570
  msgid "Can't get property %s"
5571
  msgstr ""
5572
 
5573
- #: includes/class-edd-discount.php:1511
5574
  msgid "This discount has reached its maximum usage."
5575
  msgstr ""
5576
 
5577
- #: includes/class-edd-discount.php:1545
5578
  msgid "Minimum order of %s not met."
5579
  msgstr ""
5580
 
5581
- #: includes/class-edd-discount.php:1633 includes/class-edd-discount.php:1662
5582
  msgid "The product requirements for this discount are not met."
5583
  msgstr ""
5584
 
5585
- #: includes/class-edd-discount.php:1680
5586
  msgid "This discount is not valid for the cart contents."
5587
  msgstr ""
5588
 
5589
- #: includes/class-edd-discount.php:1770
5590
  msgid "This discount has already been redeemed."
5591
  msgstr ""
5592
 
5593
- #: includes/class-edd-discount.php:1851
5594
  msgid "This discount is expired."
5595
  msgstr ""
5596
 
5597
- #: includes/class-edd-discount.php:1856
5598
  msgid "This discount is not active."
5599
  msgstr ""
5600
 
@@ -5602,35 +5453,27 @@ msgstr ""
5602
  msgid "New Download Product"
5603
  msgstr ""
5604
 
5605
- #: includes/class-edd-html-elements.php:44 includes/scripts.php:214
5606
  msgid "Choose a %s"
5607
  msgstr ""
5608
 
5609
- #: includes/class-edd-html-elements.php:47
5610
- msgid "Type to search all %s"
5611
- msgstr ""
5612
-
5613
- #: includes/class-edd-html-elements.php:243
5614
  msgid "Select a Customer"
5615
  msgstr ""
5616
 
5617
- #: includes/class-edd-html-elements.php:260
5618
  msgid "No customer attached"
5619
  msgstr ""
5620
 
5621
- #: includes/class-edd-html-elements.php:320
5622
  msgid "Select a User"
5623
  msgstr ""
5624
 
5625
- #: includes/class-edd-html-elements.php:324
5626
- msgid "Type to search all Users"
5627
- msgstr ""
5628
-
5629
- #: includes/class-edd-html-elements.php:411
5630
  msgid "Select a discount"
5631
  msgstr ""
5632
 
5633
- #: includes/class-edd-html-elements.php:788
5634
  msgid "Enter username"
5635
  msgstr ""
5636
 
@@ -5681,8 +5524,8 @@ msgstr ""
5681
 
5682
  #: includes/class-edd-register-meta.php:162
5683
  msgid ""
5684
- "Defines how this product's 'Purchase' button should behave, either add to "
5685
- "cart or buy now"
5686
  msgstr ""
5687
 
5688
  #: includes/class-edd-register-meta.php:177
@@ -5757,211 +5600,211 @@ msgstr ""
5757
  msgid "Improper date provided."
5758
  msgstr ""
5759
 
5760
- #: includes/country-functions.php:1604
5761
  msgid "A Coru&ntilde;a"
5762
  msgstr ""
5763
 
5764
- #: includes/country-functions.php:1605
5765
  msgid "Araba"
5766
  msgstr ""
5767
 
5768
- #: includes/country-functions.php:1606
5769
  msgid "Albacete"
5770
  msgstr ""
5771
 
5772
- #: includes/country-functions.php:1607
5773
  msgid "Alicante"
5774
  msgstr ""
5775
 
5776
- #: includes/country-functions.php:1608
5777
  msgid "Almer&iacute;a"
5778
  msgstr ""
5779
 
5780
- #: includes/country-functions.php:1609
5781
  msgid "Asturias"
5782
  msgstr ""
5783
 
5784
- #: includes/country-functions.php:1610
5785
  msgid "&Aacute;vila"
5786
  msgstr ""
5787
 
5788
- #: includes/country-functions.php:1611
5789
  msgid "Badajoz"
5790
  msgstr ""
5791
 
5792
- #: includes/country-functions.php:1612
5793
  msgid "Baleares"
5794
  msgstr ""
5795
 
5796
- #: includes/country-functions.php:1613
5797
  msgid "Barcelona"
5798
  msgstr ""
5799
 
5800
- #: includes/country-functions.php:1614
5801
  msgid "Burgos"
5802
  msgstr ""
5803
 
5804
- #: includes/country-functions.php:1615
5805
  msgid "C&aacute;ceres"
5806
  msgstr ""
5807
 
5808
- #: includes/country-functions.php:1616
5809
  msgid "C&aacute;diz"
5810
  msgstr ""
5811
 
5812
- #: includes/country-functions.php:1617
5813
  msgid "Cantabria"
5814
  msgstr ""
5815
 
5816
- #: includes/country-functions.php:1618
5817
  msgid "Castell&oacute;n"
5818
  msgstr ""
5819
 
5820
- #: includes/country-functions.php:1619
5821
  msgid "Ceuta"
5822
  msgstr ""
5823
 
5824
- #: includes/country-functions.php:1620
5825
  msgid "Ciudad Real"
5826
  msgstr ""
5827
 
5828
- #: includes/country-functions.php:1621
5829
  msgid "C&oacute;rdoba"
5830
  msgstr ""
5831
 
5832
- #: includes/country-functions.php:1622
5833
  msgid "Cuenca"
5834
  msgstr ""
5835
 
5836
- #: includes/country-functions.php:1623
5837
  msgid "Girona"
5838
  msgstr ""
5839
 
5840
- #: includes/country-functions.php:1624
5841
  msgid "Granada"
5842
  msgstr ""
5843
 
5844
- #: includes/country-functions.php:1625
5845
  msgid "Guadalajara"
5846
  msgstr ""
5847
 
5848
- #: includes/country-functions.php:1626
5849
  msgid "Gipuzkoa"
5850
  msgstr ""
5851
 
5852
- #: includes/country-functions.php:1627
5853
  msgid "Huelva"
5854
  msgstr ""
5855
 
5856
- #: includes/country-functions.php:1628
5857
  msgid "Huesca"
5858
  msgstr ""
5859
 
5860
- #: includes/country-functions.php:1629
5861
  msgid "Ja&eacute;n"
5862
  msgstr ""
5863
 
5864
- #: includes/country-functions.php:1630
5865
  msgid "La Rioja"
5866
  msgstr ""
5867
 
5868
- #: includes/country-functions.php:1631
5869
  msgid "Las Palmas"
5870
  msgstr ""
5871
 
5872
- #: includes/country-functions.php:1632
5873
  msgid "Le&oacute;n"
5874
  msgstr ""
5875
 
5876
- #: includes/country-functions.php:1633
5877
  msgid "Lleida"
5878
  msgstr ""
5879
 
5880
- #: includes/country-functions.php:1634
5881
  msgid "Lugo"
5882
  msgstr ""
5883
 
5884
- #: includes/country-functions.php:1635
5885
  msgid "Madrid"
5886
  msgstr ""
5887
 
5888
- #: includes/country-functions.php:1636
5889
  msgid "M&aacute;laga"
5890
  msgstr ""
5891
 
5892
- #: includes/country-functions.php:1637
5893
  msgid "Melilla"
5894
  msgstr ""
5895
 
5896
- #: includes/country-functions.php:1638
5897
  msgid "Murcia"
5898
  msgstr ""
5899
 
5900
- #: includes/country-functions.php:1639
5901
  msgid "Navarra"
5902
  msgstr ""
5903
 
5904
- #: includes/country-functions.php:1640
5905
  msgid "Ourense"
5906
  msgstr ""
5907
 
5908
- #: includes/country-functions.php:1641
5909
  msgid "Palencia"
5910
  msgstr ""
5911
 
5912
- #: includes/country-functions.php:1642
5913
  msgid "Pontevedra"
5914
  msgstr ""
5915
 
5916
- #: includes/country-functions.php:1643
5917
  msgid "Salamanca"
5918
  msgstr ""
5919
 
5920
- #: includes/country-functions.php:1644
5921
  msgid "Santa Cruz de Tenerife"
5922
  msgstr ""
5923
 
5924
- #: includes/country-functions.php:1645
5925
  msgid "Segovia"
5926
  msgstr ""
5927
 
5928
- #: includes/country-functions.php:1646
5929
  msgid "Sevilla"
5930
  msgstr ""
5931
 
5932
- #: includes/country-functions.php:1647
5933
  msgid "Soria"
5934
  msgstr ""
5935
 
5936
- #: includes/country-functions.php:1648
5937
  msgid "Tarragona"
5938
  msgstr ""
5939
 
5940
- #: includes/country-functions.php:1649
5941
  msgid "Teruel"
5942
  msgstr ""
5943
 
5944
- #: includes/country-functions.php:1650
5945
  msgid "Toledo"
5946
  msgstr ""
5947
 
5948
- #: includes/country-functions.php:1651
5949
  msgid "Valencia"
5950
  msgstr ""
5951
 
5952
- #: includes/country-functions.php:1652
5953
  msgid "Valladolid"
5954
  msgstr ""
5955
 
5956
- #: includes/country-functions.php:1653
5957
  msgid "Bizkaia"
5958
  msgstr ""
5959
 
5960
- #: includes/country-functions.php:1654
5961
  msgid "Zamora"
5962
  msgstr ""
5963
 
5964
- #: includes/country-functions.php:1655
5965
  msgid "Zaragoza"
5966
  msgstr ""
5967
 
@@ -6063,7 +5906,7 @@ msgid ""
6063
  "of a purchase. HTML is accepted. Available template tags:"
6064
  msgstr ""
6065
 
6066
- #: includes/deprecated-functions.php:517 includes/process-download.php:822
6067
  msgid "Sorry but you have hit your download limit for this file."
6068
  msgstr ""
6069
 
@@ -6088,33 +5931,33 @@ msgid "The buyer's IP Address"
6088
  msgstr ""
6089
 
6090
  #: includes/emails/class-edd-email-tags.php:407
6091
- #: includes/emails/class-edd-email-tags.php:529
6092
  #: templates/shortcode-receipt.php:128
6093
  msgid "Quantity"
6094
  msgstr ""
6095
 
6096
- #: includes/emails/class-edd-email-tags.php:466
6097
- #: templates/history-downloads.php:74 templates/shortcode-receipt.php:207
6098
  msgid "No downloadable files found."
6099
  msgstr ""
6100
 
6101
- #: includes/emails/class-edd-email-tags.php:857
6102
  msgid "%1$sView it in your browser %2$s"
6103
  msgstr ""
6104
 
6105
- #: includes/emails/class-edd-emails.php:174
6106
  msgid "Default Template"
6107
  msgstr ""
6108
 
6109
- #: includes/emails/class-edd-emails.php:175
6110
  msgid "No template, plain text only"
6111
  msgstr ""
6112
 
6113
- #: includes/emails/class-edd-emails.php:291
6114
  msgid "You cannot send email with EDD_Emails until init/admin_init has been reached"
6115
  msgstr ""
6116
 
6117
- #: includes/emails/class-edd-emails.php:318
6118
  msgid ""
6119
  "Email from Easy Digital Downloads failed to send.\n"
6120
  "Send time: %s\n"
@@ -6123,39 +5966,39 @@ msgid ""
6123
  "\n"
6124
  msgstr ""
6125
 
6126
- #: includes/emails/functions.php:136
6127
  msgid "New download purchase - Order #%1$s"
6128
  msgstr ""
6129
 
6130
- #: includes/emails/functions.php:154
6131
  msgid "New Sale!"
6132
  msgstr ""
6133
 
6134
- #: includes/emails/functions.php:199 includes/emails/template.php:212
6135
  msgid "Hello"
6136
  msgstr ""
6137
 
6138
- #: includes/emails/functions.php:199 includes/emails/template.php:212
6139
  msgid "A %s purchase has been made"
6140
  msgstr ""
6141
 
6142
- #: includes/emails/functions.php:200 includes/emails/template.php:213
6143
  msgid "%s sold:"
6144
  msgstr ""
6145
 
6146
- #: includes/emails/functions.php:202 includes/emails/template.php:215
6147
  msgid "Purchased by: "
6148
  msgstr ""
6149
 
6150
- #: includes/emails/functions.php:203 includes/emails/template.php:216
6151
  msgid "Amount: "
6152
  msgstr ""
6153
 
6154
- #: includes/emails/functions.php:204 includes/emails/template.php:217
6155
  msgid "Payment Method: "
6156
  msgstr ""
6157
 
6158
- #: includes/emails/functions.php:205 includes/emails/template.php:218
6159
  msgid "Thank you"
6160
  msgstr ""
6161
 
@@ -6183,11 +6026,11 @@ msgstr ""
6183
  msgid "Send Test Email"
6184
  msgstr ""
6185
 
6186
- #: includes/emails/template.php:243
6187
  msgid "Missing purchase key."
6188
  msgstr ""
6189
 
6190
- #: includes/emails/template.php:258
6191
  msgid "Receipt"
6192
  msgstr ""
6193
 
@@ -6195,140 +6038,140 @@ msgstr ""
6195
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
6196
  msgstr ""
6197
 
6198
- #: includes/gateways/amazon-payments.php:214
6199
  msgid "There is an error with the Amazon Payments configuration."
6200
  msgstr ""
6201
 
6202
- #: includes/gateways/amazon-payments.php:286
6203
- #: includes/gateways/amazon-payments.php:287
6204
  msgid "Amazon"
6205
  msgstr ""
6206
 
6207
- #: includes/gateways/amazon-payments.php:339
6208
  msgid "Amazon Payments"
6209
  msgstr ""
6210
 
6211
- #: includes/gateways/amazon-payments.php:357
6212
  msgid "Amazon Payments Settings"
6213
  msgstr ""
6214
 
6215
- #: includes/gateways/amazon-payments.php:362
6216
  msgid "Register with Amazon"
6217
  msgstr ""
6218
 
6219
- #: includes/gateways/amazon-payments.php:364
6220
  msgid "Connect Easy Digital Downloads to Amazon"
6221
  msgstr ""
6222
 
6223
- #: includes/gateways/amazon-payments.php:367
6224
  msgid "Once registration is complete, enter your API credentials below."
6225
  msgstr ""
6226
 
6227
- #: includes/gateways/amazon-payments.php:373
6228
  msgid "Seller ID"
6229
  msgstr ""
6230
 
6231
- #: includes/gateways/amazon-payments.php:374
6232
  msgid "Found in the Integration settings. Also called a Merchant ID"
6233
  msgstr ""
6234
 
6235
- #: includes/gateways/amazon-payments.php:380
6236
  msgid "MWS Access Key"
6237
  msgstr ""
6238
 
6239
- #: includes/gateways/amazon-payments.php:381
6240
- #: includes/gateways/amazon-payments.php:388
6241
  msgid "Found on Seller Central in the MWS Keys section"
6242
  msgstr ""
6243
 
6244
- #: includes/gateways/amazon-payments.php:387
6245
  msgid "MWS Secret Key"
6246
  msgstr ""
6247
 
6248
- #: includes/gateways/amazon-payments.php:394
6249
  msgid "Client ID"
6250
  msgstr ""
6251
 
6252
- #: includes/gateways/amazon-payments.php:395
6253
  msgid "The Amazon Client ID. Should look like `amzn1.application-oa2...`"
6254
  msgstr ""
6255
 
6256
- #: includes/gateways/amazon-payments.php:401
6257
  msgid "Amazon MWS Callback URL"
6258
  msgstr ""
6259
 
6260
- #: includes/gateways/amazon-payments.php:402
6261
  msgid ""
6262
  "The Return URL to provide in your MWS Application. Enter this under your "
6263
  "Login and Pay &rarr; Web Settings"
6264
  msgstr ""
6265
 
6266
- #: includes/gateways/amazon-payments.php:410
6267
  msgid "Amazon Merchant IPN URL"
6268
  msgstr ""
6269
 
6270
- #: includes/gateways/amazon-payments.php:411
6271
  msgid ""
6272
  "The IPN URL to provide in your MWS account. Enter this under your <a "
6273
  "href=\"%s\">Integration Settings</a>"
6274
  msgstr ""
6275
 
6276
- #: includes/gateways/amazon-payments.php:721
6277
  msgid "Currently logged into Amazon as"
6278
  msgstr ""
6279
 
6280
- #: includes/gateways/amazon-payments.php:722
6281
  msgid "Logout"
6282
  msgstr ""
6283
 
6284
- #: includes/gateways/amazon-payments.php:879
6285
- #: includes/gateways/amazon-payments.php:894
6286
  msgid "Missing Reference ID, please try again"
6287
  msgstr ""
6288
 
6289
- #: includes/gateways/amazon-payments.php:930
6290
  msgid ""
6291
  "Your payment could not be authorized, please try a different payment "
6292
  "method. Reason: %s"
6293
  msgstr ""
6294
 
6295
- #: includes/gateways/amazon-payments.php:977
6296
  msgid "There was an issue processing your payment. Amazon error: %s"
6297
  msgstr ""
6298
 
6299
- #: includes/gateways/amazon-payments.php:1113
6300
  msgid "Invalid Amazon seller ID"
6301
  msgstr ""
6302
 
6303
- #: includes/gateways/amazon-payments.php:1113
6304
- #: includes/gateways/amazon-payments.php:1167
6305
- #: includes/gateways/paypal-standard.php:439
6306
- #: includes/gateways/paypal-standard.php:446
6307
- #: includes/gateways/paypal-standard.php:535
6308
- #: includes/gateways/paypal-standard.php:545
6309
- #: includes/gateways/paypal-standard.php:605
6310
- #: includes/gateways/paypal-standard.php:614
6311
  msgid "IPN Error"
6312
  msgstr ""
6313
 
6314
- #: includes/gateways/amazon-payments.php:1137
6315
  msgid "Capture declined in Amazon"
6316
  msgstr ""
6317
 
6318
- #: includes/gateways/amazon-payments.php:1155
6319
- #: includes/gateways/amazon-payments.php:1243
6320
  msgid "Refund completed in Amazon. Refund ID: %s"
6321
  msgstr ""
6322
 
6323
- #: includes/gateways/amazon-payments.php:1236
6324
  msgid "Refund declined in Amazon. Refund ID: %s"
6325
  msgstr ""
6326
 
6327
- #: includes/gateways/amazon-payments.php:1249
6328
  msgid "Refund initiated in Amazon. Reference ID: %s"
6329
  msgstr ""
6330
 
6331
- #: includes/gateways/amazon-payments.php:1258
6332
  msgid "Refund request failed in Amazon."
6333
  msgstr ""
6334
 
@@ -6348,7 +6191,7 @@ msgstr ""
6348
  msgid "The requested price ID does not exist."
6349
  msgstr ""
6350
 
6351
- #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
6352
  msgid "Nonce verification has failed"
6353
  msgstr ""
6354
 
@@ -6371,138 +6214,126 @@ msgid "Enter your PayPal account's email"
6371
  msgstr ""
6372
 
6373
  #: includes/gateways/paypal-standard.php:63
6374
- msgid "PayPal Image URL"
6375
  msgstr ""
6376
 
6377
  #: includes/gateways/paypal-standard.php:64
6378
- msgid "Upload an image to display on the PayPal checkout page."
6379
  msgstr ""
6380
 
6381
  #: includes/gateways/paypal-standard.php:71
6382
  msgid ""
6383
- "Enter your PayPal Identity Token in order to enable Payment Data Transfer "
6384
- "(PDT). This allows payments to be verified without relying on the PayPal "
6385
- "IPN. See our <a href=\"%s\" target=\"_blank\">documentation</a> for further "
6386
  "information."
6387
  msgstr ""
6388
 
6389
  #: includes/gateways/paypal-standard.php:77
6390
- msgid "PayPal Identity Token"
6391
- msgstr ""
6392
-
6393
- #: includes/gateways/paypal-standard.php:84
6394
- msgid ""
6395
- "If you are unable to use Payment Data Transfer and payments are not getting "
6396
- "marked as complete, then check this box. This forces the site to use a "
6397
- "slightly less secure method of verifying purchases. See our <a href=\"%s\" "
6398
- "target=\"_blank\">FAQ</a> for further information."
6399
- msgstr ""
6400
-
6401
- #: includes/gateways/paypal-standard.php:90
6402
  msgid "Disable PayPal IPN Verification"
6403
  msgstr ""
6404
 
6405
- #: includes/gateways/paypal-standard.php:98
6406
  msgid "API Credentials"
6407
  msgstr ""
6408
 
6409
- #: includes/gateways/paypal-standard.php:101
6410
  msgid ""
6411
  "API credentials are necessary to process PayPal refunds from inside "
6412
  "WordPress. These can be obtained from <a href=\"%s\" target=\"_blank\">your "
6413
  "PayPal account</a>."
6414
  msgstr ""
6415
 
6416
- #: includes/gateways/paypal-standard.php:107
6417
  msgid "Live API Username"
6418
  msgstr ""
6419
 
6420
- #: includes/gateways/paypal-standard.php:108
6421
  msgid "Your PayPal live API username. "
6422
  msgstr ""
6423
 
6424
- #: includes/gateways/paypal-standard.php:114
6425
  msgid "Live API Password"
6426
  msgstr ""
6427
 
6428
- #: includes/gateways/paypal-standard.php:115
6429
  msgid "Your PayPal live API password."
6430
  msgstr ""
6431
 
6432
- #: includes/gateways/paypal-standard.php:121
6433
  msgid "Live API Signature"
6434
  msgstr ""
6435
 
6436
- #: includes/gateways/paypal-standard.php:122
6437
  msgid "Your PayPal live API signature."
6438
  msgstr ""
6439
 
6440
- #: includes/gateways/paypal-standard.php:128
6441
  msgid "Test API Username"
6442
  msgstr ""
6443
 
6444
- #: includes/gateways/paypal-standard.php:129
6445
  msgid "Your PayPal test API username."
6446
  msgstr ""
6447
 
6448
- #: includes/gateways/paypal-standard.php:135
6449
  msgid "Test API Password"
6450
  msgstr ""
6451
 
6452
- #: includes/gateways/paypal-standard.php:136
6453
  msgid "Your PayPal test API password."
6454
  msgstr ""
6455
 
6456
- #: includes/gateways/paypal-standard.php:142
6457
  msgid "Test API Signature"
6458
  msgstr ""
6459
 
6460
- #: includes/gateways/paypal-standard.php:143
6461
  msgid "Your PayPal test API signature."
6462
  msgstr ""
6463
 
6464
- #: includes/gateways/paypal-standard.php:191
6465
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6466
  msgstr ""
6467
 
6468
- #: includes/gateways/paypal-standard.php:439
6469
- #: includes/gateways/paypal-standard.php:446
6470
  msgid "Invalid IPN verification response. IPN data: %s"
6471
  msgstr ""
6472
 
6473
- #: includes/gateways/paypal-standard.php:535
6474
  msgid "Invalid business email in IPN response. IPN data: %s"
6475
  msgstr ""
6476
 
6477
- #: includes/gateways/paypal-standard.php:538
6478
  msgid "Payment failed due to invalid PayPal business email."
6479
  msgstr ""
6480
 
6481
- #: includes/gateways/paypal-standard.php:545
6482
  msgid "Invalid currency in IPN response. IPN data: %s"
6483
  msgstr ""
6484
 
6485
- #: includes/gateways/paypal-standard.php:548
6486
  msgid "Payment failed due to invalid currency in PayPal IPN."
6487
  msgstr ""
6488
 
6489
- #: includes/gateways/paypal-standard.php:605
6490
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6491
  msgstr ""
6492
 
6493
- #: includes/gateways/paypal-standard.php:608
6494
  msgid "Payment failed due to invalid amount in PayPal IPN."
6495
  msgstr ""
6496
 
6497
- #: includes/gateways/paypal-standard.php:614
6498
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6499
  msgstr ""
6500
 
6501
- #: includes/gateways/paypal-standard.php:616
6502
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6503
  msgstr ""
6504
 
6505
- #: includes/gateways/paypal-standard.php:622
6506
  #: tests/helpers/class-helper-payment.php:131
6507
  #: tests/helpers/class-helper-payment.php:234
6508
  #: tests/helpers/class-helper-payment.php:342
@@ -6513,82 +6344,87 @@ msgstr ""
6513
  msgid "PayPal Transaction ID: %s"
6514
  msgstr ""
6515
 
6516
- #: includes/gateways/paypal-standard.php:636
6517
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6518
  msgstr ""
6519
 
6520
- #: includes/gateways/paypal-standard.php:643
6521
  msgid ""
6522
  "Payment requires a confirmed customer address and must be accepted manually "
6523
  "through PayPal"
6524
  msgstr ""
6525
 
6526
- #: includes/gateways/paypal-standard.php:649
6527
  msgid ""
6528
  "Payment must be accepted manually through PayPal due to international "
6529
  "account regulations"
6530
  msgstr ""
6531
 
6532
- #: includes/gateways/paypal-standard.php:655
6533
  msgid ""
6534
  "Payment received in non-shop currency and must be accepted manually through "
6535
  "PayPal"
6536
  msgstr ""
6537
 
6538
- #: includes/gateways/paypal-standard.php:662
6539
  msgid ""
6540
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6541
  "violation of government regulations"
6542
  msgstr ""
6543
 
6544
- #: includes/gateways/paypal-standard.php:668
6545
  msgid "Payment was sent to non-confirmed or non-registered email address."
6546
  msgstr ""
6547
 
6548
- #: includes/gateways/paypal-standard.php:674
6549
  msgid "PayPal account must be upgraded before this payment can be accepted"
6550
  msgstr ""
6551
 
6552
- #: includes/gateways/paypal-standard.php:680
6553
  msgid ""
6554
  "PayPal account is not verified. Verify account in order to accept this "
6555
  "payment"
6556
  msgstr ""
6557
 
6558
- #: includes/gateways/paypal-standard.php:686
6559
  msgid ""
6560
  "Payment is pending for unknown reasons. Contact PayPal support for "
6561
  "assistance"
6562
  msgstr ""
6563
 
6564
- #: includes/gateways/paypal-standard.php:739
6565
  msgid "Partial PayPal refund processed: %s"
6566
  msgstr ""
6567
 
6568
- #: includes/gateways/paypal-standard.php:744
6569
  msgid "PayPal Payment #%s Refunded for reason: %s"
6570
  msgstr ""
6571
 
6572
- #: includes/gateways/paypal-standard.php:745
6573
  msgid "PayPal Refund Transaction ID: %s"
6574
  msgstr ""
6575
 
6576
- #: includes/gateways/paypal-standard.php:1004
6577
  msgid "Refund Payment in PayPal"
6578
  msgstr ""
6579
 
6580
- #: includes/gateways/paypal-standard.php:1153
6581
  msgid "PayPal refund failed for unknown reason."
6582
  msgstr ""
6583
 
6584
- #: includes/gateways/paypal-standard.php:1163
6585
  msgid "PayPal refund transaction ID: %s"
6586
  msgstr ""
6587
 
6588
- #: includes/gateways/paypal-standard.php:1167
6589
  msgid "PayPal refund failed: %s"
6590
  msgstr ""
6591
 
 
 
 
 
 
6592
  #: includes/install.php:111
6593
  msgid "Purchase Confirmation"
6594
  msgstr ""
@@ -6601,217 +6437,209 @@ msgstr ""
6601
  msgid "Purchase History"
6602
  msgstr ""
6603
 
6604
- #: includes/login-register.php:90
6605
  msgid "The password you entered is incorrect"
6606
  msgstr ""
6607
 
6608
- #: includes/login-register.php:93 includes/process-purchase.php:674
6609
  msgid "The username you entered does not exist"
6610
  msgstr ""
6611
 
6612
- #: includes/login-register.php:147 includes/login-register.php:155
6613
- #: includes/process-purchase.php:552
6614
  msgid "Invalid username"
6615
  msgstr ""
6616
 
6617
- #: includes/login-register.php:151 includes/process-purchase.php:545
6618
  msgid "Username already taken"
6619
  msgstr ""
6620
 
6621
- #: includes/login-register.php:159
6622
  msgid "Email address already taken"
6623
  msgstr ""
6624
 
6625
- #: includes/login-register.php:163 includes/process-purchase.php:492
6626
- #: includes/process-purchase.php:567 includes/process-purchase.php:707
6627
  msgid "Invalid email"
6628
  msgstr ""
6629
 
6630
- #: includes/login-register.php:167
6631
  msgid "Invalid payment email"
6632
  msgstr ""
6633
 
6634
- #: includes/login-register.php:171
6635
  msgid "Please enter a password"
6636
  msgstr ""
6637
 
6638
- #: includes/login-register.php:175
6639
  msgid "Passwords do not match"
6640
  msgstr ""
6641
 
6642
- #: includes/misc-functions.php:320 tests/tests-misc.php:75
6643
  msgid "US Dollars (&#36;)"
6644
  msgstr ""
6645
 
6646
- #: includes/misc-functions.php:321 tests/tests-misc.php:76
6647
  msgid "Euros (&euro;)"
6648
  msgstr ""
6649
 
6650
- #: includes/misc-functions.php:322 tests/tests-misc.php:77
6651
  msgid "Pound Sterling (&pound;)"
6652
  msgstr ""
6653
 
6654
- #: includes/misc-functions.php:323 tests/tests-misc.php:78
6655
  msgid "Australian Dollars (&#36;)"
6656
  msgstr ""
6657
 
6658
- #: includes/misc-functions.php:324 tests/tests-misc.php:79
6659
  msgid "Brazilian Real (R&#36;)"
6660
  msgstr ""
6661
 
6662
- #: includes/misc-functions.php:325 tests/tests-misc.php:80
6663
  msgid "Canadian Dollars (&#36;)"
6664
  msgstr ""
6665
 
6666
- #: includes/misc-functions.php:326 tests/tests-misc.php:81
6667
  msgid "Czech Koruna"
6668
  msgstr ""
6669
 
6670
- #: includes/misc-functions.php:327 tests/tests-misc.php:82
6671
  msgid "Danish Krone"
6672
  msgstr ""
6673
 
6674
- #: includes/misc-functions.php:328 tests/tests-misc.php:83
6675
  msgid "Hong Kong Dollar (&#36;)"
6676
  msgstr ""
6677
 
6678
- #: includes/misc-functions.php:329 tests/tests-misc.php:84
6679
  msgid "Hungarian Forint"
6680
  msgstr ""
6681
 
6682
- #: includes/misc-functions.php:330 tests/tests-misc.php:85
6683
  msgid "Israeli Shekel (&#8362;)"
6684
  msgstr ""
6685
 
6686
- #: includes/misc-functions.php:331 tests/tests-misc.php:86
6687
  msgid "Japanese Yen (&yen;)"
6688
  msgstr ""
6689
 
6690
- #: includes/misc-functions.php:332 tests/tests-misc.php:87
6691
  msgid "Malaysian Ringgits"
6692
  msgstr ""
6693
 
6694
- #: includes/misc-functions.php:333 tests/tests-misc.php:88
6695
  msgid "Mexican Peso (&#36;)"
6696
  msgstr ""
6697
 
6698
- #: includes/misc-functions.php:334 tests/tests-misc.php:89
6699
  msgid "New Zealand Dollar (&#36;)"
6700
  msgstr ""
6701
 
6702
- #: includes/misc-functions.php:335 tests/tests-misc.php:90
6703
  msgid "Norwegian Krone"
6704
  msgstr ""
6705
 
6706
- #: includes/misc-functions.php:336 tests/tests-misc.php:91
6707
  msgid "Philippine Pesos"
6708
  msgstr ""
6709
 
6710
- #: includes/misc-functions.php:337 tests/tests-misc.php:92
6711
  msgid "Polish Zloty"
6712
  msgstr ""
6713
 
6714
- #: includes/misc-functions.php:338 tests/tests-misc.php:93
6715
  msgid "Singapore Dollar (&#36;)"
6716
  msgstr ""
6717
 
6718
- #: includes/misc-functions.php:339 tests/tests-misc.php:94
6719
  msgid "Swedish Krona"
6720
  msgstr ""
6721
 
6722
- #: includes/misc-functions.php:340 tests/tests-misc.php:95
6723
  msgid "Swiss Franc"
6724
  msgstr ""
6725
 
6726
- #: includes/misc-functions.php:341 tests/tests-misc.php:96
6727
  msgid "Taiwan New Dollars"
6728
  msgstr ""
6729
 
6730
- #: includes/misc-functions.php:342 tests/tests-misc.php:97
6731
  msgid "Thai Baht (&#3647;)"
6732
  msgstr ""
6733
 
6734
- #: includes/misc-functions.php:343 tests/tests-misc.php:98
6735
  msgid "Indian Rupee (&#8377;)"
6736
  msgstr ""
6737
 
6738
- #: includes/misc-functions.php:344 tests/tests-misc.php:99
6739
  msgid "Turkish Lira (&#8378;)"
6740
  msgstr ""
6741
 
6742
- #: includes/misc-functions.php:345 tests/tests-misc.php:100
6743
  msgid "Iranian Rial (&#65020;)"
6744
  msgstr ""
6745
 
6746
- #: includes/misc-functions.php:346 tests/tests-misc.php:101
6747
  msgid "Russian Rubles"
6748
  msgstr ""
6749
 
6750
- #: includes/misc-functions.php:347 tests/tests-misc.php:102
6751
- msgid "Angolan Kwanza"
6752
- msgstr ""
6753
-
6754
- #: includes/misc-functions.php:536
6755
  msgid ""
6756
  "%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
6757
  "%2$s! Use %3$s instead."
6758
  msgstr ""
6759
 
6760
- #: includes/misc-functions.php:540
6761
  msgid ""
6762
  "%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
6763
  "%2$s with no alternative available."
6764
  msgstr ""
6765
 
6766
- #: includes/misc-functions.php:577
6767
  msgid ""
6768
  "The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
6769
  "Downloads version %3$s! Please use %4$s instead."
6770
  msgstr ""
6771
 
6772
- #: includes/misc-functions.php:581
6773
  msgid ""
6774
  "The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
6775
  "Downloads version %3$s with no alternative available."
6776
  msgstr ""
6777
 
6778
- #: includes/payments/actions.php:197
6779
- msgid "After payment actions processed."
6780
- msgstr ""
6781
-
6782
- #: includes/payments/actions.php:219
6783
  msgid "Status changed from %s to %s"
6784
  msgstr ""
6785
 
6786
- #: includes/payments/actions.php:443 includes/payments/actions.php:503
6787
  msgid "Error resuming payment."
6788
  msgstr ""
6789
 
6790
- #: includes/payments/actions.php:447
6791
  msgid "Payment recovery triggered URL"
6792
  msgstr ""
6793
 
6794
- #: includes/payments/actions.php:525 includes/payments/actions.php:559
6795
  msgid "To complete this payment, please login to your account."
6796
  msgstr ""
6797
 
6798
- #: includes/payments/actions.php:527
6799
  msgid "Lost Password"
6800
  msgstr ""
6801
 
6802
- #: includes/payments/actions.php:528 templates/shortcode-login.php:33
6803
  msgid "Lost Password?"
6804
  msgstr ""
6805
 
6806
- #: includes/payments/functions.php:172
6807
  msgid "Payment recovery processed"
6808
  msgstr ""
6809
 
6810
- #: includes/payments/functions.php:750
6811
  msgid "Complete"
6812
  msgstr ""
6813
 
6814
- #: includes/payments/functions.php:1582
6815
  msgid "EDD Bot"
6816
  msgstr ""
6817
 
@@ -7113,133 +6941,121 @@ msgid_plural "%1$s %3$s restored from the Trash."
7113
  msgstr[0] ""
7114
  msgstr[1] ""
7115
 
7116
- #: includes/process-download.php:146
7117
- msgid "Error downloading file. Please contact support."
7118
- msgstr ""
7119
-
7120
- #: includes/process-download.php:146
7121
- msgid "File download error"
7122
- msgstr ""
7123
-
7124
- #: includes/process-download.php:288
7125
  msgid "You do not have permission to download this file"
7126
  msgstr ""
7127
 
7128
- #: includes/process-download.php:289
7129
  msgid "Purchase Verification Failed"
7130
  msgstr ""
7131
 
7132
- #: includes/process-download.php:898
7133
  msgid "Invalid file"
7134
  msgstr ""
7135
 
7136
- #: includes/process-download.php:905
7137
  msgid "The requested file could not be found. Error 404."
7138
  msgstr ""
7139
 
7140
- #: includes/process-download.php:906
7141
  msgid "File not found"
7142
  msgstr ""
7143
 
7144
- #: includes/process-purchase.php:31 includes/scripts.php:88
7145
  msgid "Your cart is empty"
7146
  msgstr ""
7147
 
7148
- #: includes/process-purchase.php:198
7149
- msgid "The email address %s is already in use."
7150
- msgstr ""
7151
-
7152
- #: includes/process-purchase.php:317
7153
  msgid "The selected payment gateway is not enabled"
7154
  msgstr ""
7155
 
7156
- #: includes/process-purchase.php:377
7157
  msgid "One or more of the discounts you entered is invalid"
7158
  msgstr ""
7159
 
7160
- #: includes/process-purchase.php:394
7161
  msgid "You must agree to the terms of use"
7162
  msgstr ""
7163
 
7164
- #: includes/process-purchase.php:409
7165
  msgid "Please enter a valid email address"
7166
  msgstr ""
7167
 
7168
- #: includes/process-purchase.php:413
7169
  msgid "Please enter your first name"
7170
  msgstr ""
7171
 
7172
- #: includes/process-purchase.php:423
7173
  msgid "Please enter your zip / postal code"
7174
  msgstr ""
7175
 
7176
- #: includes/process-purchase.php:427
7177
  msgid "Please enter your billing city"
7178
  msgstr ""
7179
 
7180
- #: includes/process-purchase.php:431
7181
  msgid "Please select your billing country"
7182
  msgstr ""
7183
 
7184
- #: includes/process-purchase.php:435
7185
  msgid "Please enter billing state / province"
7186
  msgstr ""
7187
 
7188
- #: includes/process-purchase.php:497 includes/process-purchase.php:818
7189
  msgid "The user information is invalid"
7190
  msgstr ""
7191
 
7192
- #: includes/process-purchase.php:550
7193
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
7194
  msgstr ""
7195
 
7196
- #: includes/process-purchase.php:559
7197
  msgid "You must register or login to complete your purchase"
7198
  msgstr ""
7199
 
7200
- #: includes/process-purchase.php:572
7201
  msgid ""
7202
  "Email already used. Login or use a different email to complete your "
7203
  "purchase."
7204
  msgstr ""
7205
 
7206
- #: includes/process-purchase.php:580 includes/process-purchase.php:714
7207
  msgid "Enter an email"
7208
  msgstr ""
7209
 
7210
- #: includes/process-purchase.php:588
7211
  msgid "Passwords don't match"
7212
  msgstr ""
7213
 
7214
- #: includes/process-purchase.php:597 includes/process-purchase.php:670
7215
  msgid "Enter a password"
7216
  msgstr ""
7217
 
7218
- #: includes/process-purchase.php:600
7219
  msgid "Enter the password confirmation"
7220
  msgstr ""
7221
 
7222
- #: includes/process-purchase.php:624
7223
  msgid "You must login or register to complete your purchase"
7224
  msgstr ""
7225
 
7226
- #: includes/process-purchase.php:651
7227
  msgid "The password you entered is incorrect. %sReset Password%s"
7228
  msgstr ""
7229
 
7230
- #: includes/process-purchase.php:696
7231
  msgid "You must be logged into an account to purchase"
7232
  msgstr ""
7233
 
7234
- #: includes/process-purchase.php:882
7235
  msgid "The zip / postal code you entered for your billing address is invalid"
7236
  msgstr ""
7237
 
7238
- #: includes/process-purchase.php:1131
7239
  msgid "An internal error has occurred, please try again or contact support."
7240
  msgstr ""
7241
 
7242
- #: includes/process-purchase.php:1167
7243
  msgid "There was an error completing your purchase. Please try again."
7244
  msgstr ""
7245
 
@@ -7247,291 +7063,283 @@ msgstr ""
7247
  msgid "You do not have permission to view this file."
7248
  msgstr ""
7249
 
7250
- #: includes/scripts.php:65
7251
  msgid "Please select a payment method"
7252
  msgstr ""
7253
 
7254
- #: includes/scripts.php:66
7255
  msgid "Please enter a discount code"
7256
  msgstr ""
7257
 
7258
- #: includes/scripts.php:68
7259
  msgid "Discount Applied"
7260
  msgstr ""
7261
 
7262
- #: includes/scripts.php:69
7263
  msgid "Please enter an email address before applying a discount code"
7264
  msgstr ""
7265
 
7266
- #: includes/scripts.php:70
7267
  msgid "Please enter a username before applying a discount code"
7268
  msgstr ""
7269
 
7270
- #: includes/scripts.php:71
7271
  msgid "Please Wait..."
7272
  msgstr ""
7273
 
7274
- #: includes/scripts.php:87
7275
  msgid "You have already added this item to your cart"
7276
  msgstr ""
7277
 
7278
- #: includes/scripts.php:89 includes/template-functions.php:186
7279
  msgid "Loading"
7280
  msgstr ""
7281
 
7282
- #: includes/scripts.php:200
7283
  msgid "Add New Download"
7284
  msgstr ""
7285
 
7286
- #: includes/scripts.php:201
7287
  msgid "Use This File"
7288
  msgstr ""
7289
 
7290
- #: includes/scripts.php:202
7291
  msgid "Sorry, not available for variable priced products."
7292
  msgstr ""
7293
 
7294
- #: includes/scripts.php:203
7295
  msgid "Are you sure you wish to delete this payment?"
7296
  msgstr ""
7297
 
7298
- #: includes/scripts.php:204
7299
  msgid "Are you sure you wish to delete this note?"
7300
  msgstr ""
7301
 
7302
- #: includes/scripts.php:205
7303
  msgid "Are you sure you wish to delete this tax rate?"
7304
  msgstr ""
7305
 
7306
- #: includes/scripts.php:206
7307
  msgid "Are you sure you wish to revoke this API key?"
7308
  msgstr ""
7309
 
7310
- #: includes/scripts.php:207
7311
  msgid "Are you sure you wish to regenerate this API key?"
7312
  msgstr ""
7313
 
7314
- #: includes/scripts.php:208
7315
  msgid "Are you sure you wish to resend the purchase receipt?"
7316
  msgstr ""
7317
 
7318
- #: includes/scripts.php:209
7319
  msgid "Copy these links to your clipboard and give them to your customer"
7320
  msgstr ""
7321
 
7322
- #: includes/scripts.php:210
7323
  msgid "Are you sure you wish to delete this %s?"
7324
  msgstr ""
7325
 
7326
- #: includes/scripts.php:211
7327
  msgid "You must have at least one price"
7328
  msgstr ""
7329
 
7330
- #: includes/scripts.php:212
7331
  msgid "You must have at least one field"
7332
  msgstr ""
7333
 
7334
- #: includes/scripts.php:213
7335
  msgid "Payments must contain at least one item"
7336
  msgstr ""
7337
 
7338
- #: includes/scripts.php:215
7339
  msgid "Choose one or more %s"
7340
  msgstr ""
7341
 
7342
- #: includes/scripts.php:216
7343
  msgid "Item price must be numeric"
7344
  msgstr ""
7345
 
7346
- #: includes/scripts.php:217
7347
  msgid "Item tax must be numeric"
7348
  msgstr ""
7349
 
7350
- #: includes/scripts.php:218
7351
  msgid "Quantity must be numeric"
7352
  msgstr ""
7353
 
7354
- #: includes/scripts.php:227
7355
  msgid "Type to search %s"
7356
  msgstr ""
7357
 
7358
- #: includes/scripts.php:229
7359
  msgid "You must choose a method."
7360
  msgstr ""
7361
 
7362
- #: includes/scripts.php:230
7363
  msgid "Required fields not completed."
7364
  msgstr ""
7365
 
7366
- #: includes/scripts.php:231
7367
  msgid ""
7368
  "Are you sure you want to reset your store? This process is <strong><em>not "
7369
  "reversible</em></strong>. Please be sure you have a recent backup."
7370
  msgstr ""
7371
 
7372
- #: includes/scripts.php:232
7373
- msgid ""
7374
- "We are sorry but your browser is not compatible with this kind of file "
7375
- "upload. Please upgrade your browser."
7376
- msgstr ""
7377
-
7378
- #: includes/scripts.php:234
7379
- msgid "Hide advanced settings"
7380
- msgstr ""
7381
-
7382
- #: includes/scripts.php:245
7383
- msgid "Purchase Limit Settings"
7384
  msgstr ""
7385
 
7386
- #: includes/scripts.php:246
7387
- msgid "Simple Shipping Settings"
7388
  msgstr ""
7389
 
7390
- #: includes/scripts.php:247
7391
- msgid "Software Licensing Settings"
7392
  msgstr ""
7393
 
7394
- #: includes/scripts.php:248
7395
- msgid "Recurring Payments Settings"
 
 
7396
  msgstr ""
7397
 
7398
  #: includes/shortcodes.php:294
7399
  msgid "Purchase All Items"
7400
  msgstr ""
7401
 
7402
- #: includes/shortcodes.php:672
7403
  msgid "Sorry, trouble retrieving payment receipt."
7404
  msgstr ""
7405
 
7406
- #: includes/shortcodes.php:707
7407
  msgid "You must be logged in to view this payment receipt."
7408
  msgstr ""
7409
 
7410
- #: includes/shortcodes.php:719
7411
  msgid "Receipt could not be retrieved, your purchase session has expired."
7412
  msgstr ""
7413
 
7414
- #: includes/shortcodes.php:849
7415
  msgid "The passwords you entered do not match. Please try again."
7416
  msgstr ""
7417
 
7418
- #: includes/shortcodes.php:859
7419
  msgid "The email you entered is invalid. Please enter a valid email."
7420
  msgstr ""
7421
 
7422
- #: includes/shortcodes.php:864
7423
  msgid "The email you entered belongs to another user. Please use another."
7424
  msgstr ""
7425
 
7426
- #: includes/shortcodes.php:939
7427
  msgid "Error removing email address from profile. Please try again later."
7428
  msgstr ""
7429
 
7430
- #: includes/template-functions.php:143
7431
  msgid "Free"
7432
  msgstr ""
7433
 
7434
- #: includes/template-functions.php:200
7435
  msgid "Added to cart"
7436
  msgstr ""
7437
 
7438
- #: includes/template-functions.php:206
7439
  msgid "Includes %1$s&#37; tax"
7440
  msgstr ""
7441
 
7442
- #: includes/template-functions.php:208
7443
  msgid "Excluding %1$s&#37; tax"
7444
  msgstr ""
7445
 
7446
- #: includes/template-functions.php:493
7447
  msgid "White"
7448
  msgstr ""
7449
 
7450
- #: includes/template-functions.php:497
7451
  msgid "Gray"
7452
  msgstr ""
7453
 
7454
- #: includes/template-functions.php:501
7455
  msgid "Blue"
7456
  msgstr ""
7457
 
7458
- #: includes/template-functions.php:505
7459
  msgid "Red"
7460
  msgstr ""
7461
 
7462
- #: includes/template-functions.php:509
7463
  msgid "Green"
7464
  msgstr ""
7465
 
7466
- #: includes/template-functions.php:513
7467
  msgid "Yellow"
7468
  msgstr ""
7469
 
7470
- #: includes/template-functions.php:517
7471
  msgid "Orange"
7472
  msgstr ""
7473
 
7474
- #: includes/template-functions.php:521
7475
  msgid "Dark Gray"
7476
  msgstr ""
7477
 
7478
- #: includes/template-functions.php:525
7479
  msgid "Inherit"
7480
  msgstr ""
7481
 
7482
- #: includes/template-functions.php:543
7483
  msgid "Button"
7484
  msgstr ""
7485
 
7486
- #: includes/template-functions.php:544
7487
  msgid "Plain Text"
7488
  msgstr ""
7489
 
7490
- #: includes/user-functions.php:565
7491
  msgid "[%s] New User Registration"
7492
  msgstr ""
7493
 
7494
- #: includes/user-functions.php:566
7495
  msgid "New user registration"
7496
  msgstr ""
7497
 
7498
- #: includes/user-functions.php:568
7499
  msgid "E-mail: %s"
7500
  msgstr ""
7501
 
7502
- #: includes/user-functions.php:574
7503
  msgid "[%s] Your username and password"
7504
  msgstr ""
7505
 
7506
- #: includes/user-functions.php:575
7507
  msgid "Your account info"
7508
  msgstr ""
7509
 
7510
- #: includes/user-functions.php:579
7511
  msgid "Password entered at checkout"
7512
  msgstr ""
7513
 
7514
- #: includes/user-functions.php:581
7515
  msgid "Password entered at registration"
7516
  msgstr ""
7517
 
7518
- #: includes/user-functions.php:584
7519
  msgid "Password: %s"
7520
  msgstr ""
7521
 
7522
- #: includes/user-functions.php:588
7523
  msgid "Click here to log in"
7524
  msgstr ""
7525
 
7526
- #: includes/user-functions.php:592
7527
  msgid "To log in, visit: %s"
7528
  msgstr ""
7529
 
7530
- #: includes/user-functions.php:748 includes/user-functions.php:749
7531
  msgid "Verify your account"
7532
  msgstr ""
7533
 
7534
- #: includes/user-functions.php:751
7535
  msgid ""
7536
  "Hello %s,\n"
7537
  "\n"
@@ -7541,33 +7349,33 @@ msgid ""
7541
  "Link missing? Visit the following URL: %s"
7542
  msgstr ""
7543
 
7544
- #: includes/user-functions.php:876
7545
  msgid ""
7546
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
7547
  "here</a> to request a new verification URL."
7548
  msgstr ""
7549
 
7550
- #: includes/user-functions.php:909
7551
  msgid "You must be logged in to verify your account."
7552
  msgstr ""
7553
 
7554
- #: includes/user-functions.php:909 includes/user-functions.php:913
7555
  msgid "Notice"
7556
  msgstr ""
7557
 
7558
- #: includes/user-functions.php:913
7559
  msgid "Your account has already been verified."
7560
  msgstr ""
7561
 
7562
- #: includes/user-functions.php:958
7563
  msgid "Invalid verification token provided."
7564
  msgstr ""
7565
 
7566
- #: includes/user-functions.php:1063
7567
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
7568
  msgstr ""
7569
 
7570
- #: includes/user-functions.php:1070
7571
  msgid "Add to iOS App"
7572
  msgstr ""
7573
 
@@ -7640,7 +7448,7 @@ msgid "%s ID"
7640
  msgstr ""
7641
 
7642
  #: includes/widgets.php:407
7643
- msgid "Show %s Title"
7644
  msgstr ""
7645
 
7646
  #: includes/widgets.php:413
@@ -7709,6 +7517,10 @@ msgstr ""
7709
  msgid "Log In"
7710
  msgstr ""
7711
 
 
 
 
 
7712
  #: templates/shortcode-profile-editor.php:18
7713
  msgid "Saved cart"
7714
  msgstr ""
@@ -7765,6 +7577,10 @@ msgstr ""
7765
  msgid "Save Changes"
7766
  msgstr ""
7767
 
 
 
 
 
7768
  #: templates/shortcode-receipt.php:12
7769
  msgid "The specified receipt ID appears to be invalid"
7770
  msgstr ""
@@ -7785,15 +7601,15 @@ msgstr ""
7785
  msgid "Discount(s)"
7786
  msgstr ""
7787
 
7788
- #: templates/shortcode-receipt.php:198
7789
  msgid "No downloadable files found for this bundled item."
7790
  msgstr ""
7791
 
7792
- #: templates/shortcode-register.php:15
7793
  msgid "Register New Account"
7794
  msgstr ""
7795
 
7796
- #: templates/shortcode-register.php:35
7797
  msgid "Confirm Password"
7798
  msgstr ""
7799
 
@@ -7875,62 +7691,62 @@ msgctxt "payment details purchased item total - full screen"
7875
  msgid "%s Total"
7876
  msgstr ""
7877
 
7878
- #: includes/admin/payments/view-order-details.php:450
7879
  msgctxt "payment details purchased item price - mobile"
7880
  msgid "Price"
7881
  msgstr ""
7882
 
7883
- #: includes/admin/payments/view-order-details.php:452
7884
  msgctxt "payment details purchased item quantity - mobile"
7885
  msgid " & Quantity"
7886
  msgstr ""
7887
 
7888
- #: includes/admin/payments/view-order-details.php:467
7889
  msgctxt "payment details purchased item tax - mobile"
7890
  msgid "Tax"
7891
  msgstr ""
7892
 
7893
- #: includes/admin/payments/view-order-details.php:476
7894
  msgctxt "payment details purchased item total - mobile"
7895
  msgid "%s Total"
7896
  msgstr ""
7897
 
7898
- #: includes/admin/payments/view-order-details.php:530
7899
  msgctxt "payment details select item to add - mobile"
7900
  msgid "Select New %s To Add"
7901
  msgstr ""
7902
 
7903
- #: includes/admin/payments/view-order-details.php:542
7904
  msgctxt "payment details add item price - mobile"
7905
  msgid "Price"
7906
  msgstr ""
7907
 
7908
- #: includes/admin/payments/view-order-details.php:544
7909
  msgctxt "payment details add item quantity - mobile"
7910
  msgid " & Quantity"
7911
  msgstr ""
7912
 
7913
- #: includes/admin/payments/view-order-details.php:568
7914
  msgctxt "payment details add item tax - mobile"
7915
  msgid "Tax"
7916
  msgstr ""
7917
 
7918
- #: includes/admin/payments/view-order-details.php:710
7919
  msgctxt "Address City"
7920
  msgid "City:"
7921
  msgstr ""
7922
 
7923
- #: includes/admin/payments/view-order-details.php:715
7924
  msgctxt "Zip / Postal code of address"
7925
  msgid "Zip / Postal Code:"
7926
  msgstr ""
7927
 
7928
- #: includes/admin/payments/view-order-details.php:722
7929
  msgctxt "Address country"
7930
  msgid "Country:"
7931
  msgstr ""
7932
 
7933
- #: includes/admin/payments/view-order-details.php:741
7934
  msgctxt "State / province of address"
7935
  msgid "State / Province:"
7936
  msgstr ""
@@ -7940,37 +7756,37 @@ msgctxt "Date one to date two"
7940
  msgid "to"
7941
  msgstr ""
7942
 
7943
- #: includes/checkout/template.php:741
7944
  msgctxt "Entering a discount code"
7945
  msgid "Click to enter it"
7946
  msgstr ""
7947
 
7948
- #: includes/checkout/template.php:750
7949
  msgctxt "Apply discount at checkout"
7950
  msgid "Apply"
7951
  msgstr ""
7952
 
7953
- #: includes/class-edd-discount.php:1442
7954
  msgctxt "error shown when attempting to use a discount before its start date"
7955
  msgid "This discount is invalid."
7956
  msgstr ""
7957
 
7958
- #: includes/class-edd-discount.php:1819
7959
  msgctxt "error for when a discount is invalid based on its configuration"
7960
  msgid "This discount is invalid."
7961
  msgstr ""
7962
 
7963
- #: includes/class-edd-html-elements.php:439
7964
  msgctxt "plural: Example: \"All Categories\""
7965
  msgid "All %s"
7966
  msgstr ""
7967
 
7968
- #: includes/class-edd-html-elements.php:529
7969
  msgctxt "all dropdown items"
7970
  msgid "All"
7971
  msgstr ""
7972
 
7973
- #: includes/class-edd-html-elements.php:530
7974
  msgctxt "no dropdown items"
7975
  msgid "None"
7976
  msgstr ""
@@ -7980,7 +7796,7 @@ msgctxt "download post type name"
7980
  msgid "%2$s"
7981
  msgstr ""
7982
 
7983
- #: includes/shortcodes.php:625
7984
  msgctxt "download post type name"
7985
  msgid "No %s found"
7986
  msgstr ""
2
  # This file is distributed under the same license as the Easy Digital Downloads package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Easy Digital Downloads 2.7.8\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
+ "POT-Creation-Date: 2017-05-02 16:05:18+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
  "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: WP-Translations (http://wp-translations.org/)\n"
13
  "Language-Team: WP-Translations <wpt@wp-translations.org>\n"
14
+ "X-Generator: grunt-wp-i18n 0.5.0\n"
15
+ "X-Poedit-KeywordsList: "
16
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
18
  "Language: en_US\n"
19
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
  "X-Poedit-Country: United States\n"
21
  "X-Poedit-SourceCharset: UTF-8\n"
 
 
 
22
  "X-Poedit-Basepath: ../\n"
23
  "X-Poedit-SearchPath-0: .\n"
24
  "X-Poedit-Bookmarks: \n"
25
  "X-Textdomain-Support: yes\n"
 
26
 
27
  #: easy-digital-downloads.php:183 easy-digital-downloads.php:195
28
  msgid "Cheatin&#8217; huh?"
38
  "or %5$supdate now%6$s."
39
  msgstr ""
40
 
41
+ #: includes/EDD_SL_Plugin_Updater.php:396
42
  msgid "You do not have permission to install plugin updates"
43
  msgstr ""
44
 
45
+ #: includes/EDD_SL_Plugin_Updater.php:396
46
  #: includes/admin/customers/customer-actions.php:301
47
  #: includes/admin/customers/customer-actions.php:345
48
  #: includes/admin/customers/customer-actions.php:603
49
  #: includes/admin/discounts/discount-actions.php:30
50
+ #: includes/admin/discounts/discount-actions.php:110
51
+ #: includes/admin/discounts/discount-actions.php:170
52
+ #: includes/admin/discounts/discount-actions.php:174
53
+ #: includes/admin/discounts/discount-actions.php:195
54
+ #: includes/admin/discounts/discount-actions.php:199
55
+ #: includes/admin/discounts/discount-actions.php:220
56
  #: includes/admin/discounts/edit-discount.php:16
57
  #: includes/admin/downloads/dashboard-columns.php:171
58
  #: includes/admin/import/class-batch-import-downloads.php:65
78
  #: includes/admin/tools/class-edd-tools-recount-single-customer-stats.php:149
79
  #: includes/admin/tools/class-edd-tools-recount-store-earnings.php:154
80
  #: includes/admin/tools/class-edd-tools-reset-stats.php:180
81
+ #: includes/admin/tools.php:1021 includes/admin/tools.php:1027
82
  #: includes/admin/upgrades/upgrade-functions.php:205
83
  #: includes/admin/upgrades/upgrade-functions.php:521
84
  #: includes/admin/upgrades/upgrade-functions.php:603
87
  #: includes/admin/upgrades/upgrade-functions.php:885
88
  #: includes/admin/upgrades/upgrade-functions.php:1013
89
  #: includes/admin/upgrades/upgrade-functions.php:1098
90
+ #: includes/api/class-edd-api.php:1983 includes/api/class-edd-api.php:1988
91
+ #: includes/api/class-edd-api.php:2000 includes/api/class-edd-api.php:2002
92
+ #: includes/cart/class-edd-cart.php:1456 includes/cart/class-edd-cart.php:1470
93
  #: includes/class-edd-license-handler.php:307
94
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
95
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1248
96
+ #: includes/emails/actions.php:49 includes/emails/template.php:245
97
+ #: includes/error-tracking.php:36 includes/gateways/functions.php:221
98
+ #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:155
99
+ #: includes/process-download.php:284 includes/process-download.php:817
100
+ #: includes/query-filters.php:48 includes/user-functions.php:851
101
+ #: includes/user-functions.php:876 includes/user-functions.php:929
102
  msgid "Error"
103
  msgstr ""
104
 
105
+ #: includes/admin/add-ons.php:30
106
+ msgid "Extensions for Easy Digital Downloads"
 
 
 
 
107
  msgstr ""
108
 
109
+ #: includes/admin/add-ons.php:32 includes/admin/add-ons.php:58
110
+ msgid "Browse All Extensions"
111
  msgstr ""
112
 
113
+ #: includes/admin/add-ons.php:35
 
 
 
 
 
 
 
 
114
  msgid ""
115
+ "These extensions <em><strong>add functionality</strong></em> to your Easy "
116
+ "Digital Downloads powered store."
117
  msgstr ""
118
 
119
+ #: includes/admin/add-ons.php:92
120
  msgid ""
121
  "There was an error retrieving the extensions list from the server. Please "
122
  "try again later."
123
  msgstr ""
124
 
 
 
 
 
 
 
 
 
 
 
125
  #: includes/admin/admin-footer.php:27
126
  msgid ""
127
  "Thank you for using <a href=\"%1$s\" target=\"_blank\">Easy Digital "
128
+ "Downloads</a>! Please <a href=\"%2$s\" target=\"_blank\">rate us</a> on <a "
129
+ "href=\"%2$s\" target=\"_blank\">WordPress.org</a>"
130
  msgstr ""
131
 
132
  #: includes/admin/admin-pages.php:38
173
 
174
  #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
175
  #: includes/admin/settings/contextual-help.php:87
176
+ #: includes/admin/settings/register-settings.php:1238
177
  msgid "Extensions"
178
  msgstr ""
179
 
186
  msgid "API Key"
187
  msgstr ""
188
 
189
+ #: includes/admin/class-api-keys-table.php:53 includes/admin/tools.php:70
190
  msgid "API Keys"
191
  msgstr ""
192
 
203
  msgstr ""
204
 
205
  #: includes/admin/class-api-keys-table.php:176
206
+ #: includes/checkout/template.php:472 includes/checkout/template.php:478
207
+ #: templates/shortcode-register.php:18
208
  msgid "Username"
209
  msgstr ""
210
 
224
  msgid "Generate New API Keys"
225
  msgstr ""
226
 
227
+ #: includes/admin/class-edd-notices.php:48 includes/template-functions.php:54
228
  msgid ""
229
  "No checkout page has been configured. Visit <a href=\"%s\">Settings</a> to "
230
  "set one."
384
  msgstr ""
385
 
386
  #: includes/admin/customers/class-customer-table.php:72
387
+ #: includes/admin/payments/class-payments-table.php:227
388
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:146
389
  #: includes/admin/reporting/class-sales-logs-list-table.php:131
390
  msgid "Customer"
391
  msgstr ""
405
  #: includes/admin/customers/class-customer-table.php:161
406
  #: includes/admin/discounts/class-discount-codes-table.php:221
407
  #: includes/admin/discounts/class-discount-codes-table.php:289
408
+ #: includes/admin/payments/class-payments-table.php:323
409
+ #: includes/admin/payments/class-payments-table.php:395
410
+ #: includes/payments/functions.php:1561
411
  msgid "Delete"
412
  msgstr ""
413
 
420
  #: includes/admin/discounts/class-discount-codes-table.php:145
421
  #: includes/admin/discounts/edit-discount.php:37
422
  #: includes/admin/downloads/dashboard-columns.php:31
423
+ #: includes/admin/payments/view-order-details.php:648
424
  #: includes/admin/reporting/class-export-customers.php:76
425
  #: includes/admin/reporting/export/class-batch-export-customers.php:43
426
  #: includes/admin/reporting/export/class-batch-export-downloads.php:44
488
  msgstr ""
489
 
490
  #: includes/admin/customers/customer-actions.php:207
491
+ #: includes/user-functions.php:876
492
  msgid "Nonce verification failed."
493
  msgstr ""
494
 
508
  msgid "Email successfully added to customer."
509
  msgstr ""
510
 
 
 
 
 
 
 
 
 
 
511
  #: includes/admin/customers/customer-actions.php:301
512
  #: includes/admin/customers/customer-actions.php:345
513
  #: includes/admin/customers/customer-actions.php:603
514
  #: includes/admin/import/import-functions.php:31
515
  #: includes/admin/import/import-functions.php:113
516
  #: includes/admin/reporting/export/export-actions.php:23
517
+ #: includes/api/class-edd-api.php:1983
518
  #: includes/class-edd-license-handler.php:307
519
  msgid "Nonce verification failed"
520
  msgstr ""
521
 
 
 
 
 
 
522
  #: includes/admin/customers/customer-actions.php:395
523
  msgid "A note is required"
524
  msgstr ""
569
  msgstr ""
570
 
571
  #: includes/admin/customers/customers.php:116
572
+ #: includes/admin/payments/view-order-details.php:601
573
  msgid "Customer Details"
574
  msgstr ""
575
 
592
  #: includes/admin/customers/customers.php:242
593
  #: includes/admin/reporting/class-export-payments.php:68
594
  #: includes/admin/reporting/export/class-batch-export-payments.php:48
595
+ #: includes/admin/tools.php:684 includes/checkout/template.php:361
596
  #: templates/shortcode-profile-editor.php:152
597
  msgid "City"
598
  msgstr ""
599
 
600
  #: includes/admin/customers/customers.php:269
601
+ #: includes/admin/settings/register-settings.php:1971
602
+ #: includes/admin/tools.php:693 includes/checkout/template.php:423
603
  #: templates/shortcode-profile-editor.php:171
604
  msgid "State / Province"
605
  msgstr ""
626
 
627
  #: includes/admin/customers/customers.php:312
628
  #: includes/admin/reporting/class-export-payments.php:187
629
+ #: includes/admin/reporting/export/class-batch-export-payments.php:218
630
  msgid "none"
631
  msgstr ""
632
 
640
 
641
  #: includes/admin/customers/customers.php:328
642
  #: includes/admin/customers/customers.php:610
643
+ #: includes/admin/payments/view-order-details.php:639
644
+ #: includes/admin/payments/view-order-details.php:659
645
+ #: includes/admin/thickbox.php:131 includes/class-edd-html-elements.php:750
646
  msgid "Cancel"
647
  msgstr ""
648
 
667
  msgstr ""
668
 
669
  #: includes/admin/customers/customers.php:378
670
+ #: includes/admin/payments/class-payments-table.php:223
671
+ #: includes/admin/payments/view-order-details.php:652
672
  #: includes/admin/reporting/class-export-customers.php:68
673
  #: includes/admin/reporting/class-export-customers.php:79
674
  #: includes/admin/reporting/class-export-payments.php:63
675
  #: includes/admin/reporting/export/class-batch-export-customers.php:44
676
  #: includes/admin/reporting/export/class-batch-export-payments.php:42
677
+ #: includes/admin/tools.php:495 templates/shortcode-register.php:23
678
  msgid "Email"
679
  msgstr ""
680
 
681
  #: includes/admin/customers/customers.php:379
682
  #: includes/admin/customers/customers.php:438
683
  #: includes/admin/customers/customers.php:471
684
+ #: includes/admin/payments/view-order-details.php:510
685
+ #: includes/admin/payments/view-order-details.php:573
686
+ #: includes/admin/payments/view-order-details.php:636
687
+ #: includes/admin/payments/view-order-details.php:656
688
  #: templates/checkout_cart.php:13
689
  msgid "Actions"
690
  msgstr ""
695
  msgstr ""
696
 
697
  #: includes/admin/customers/customers.php:401
698
+ #: includes/admin/payments/view-order-details.php:478
699
+ #: includes/admin/settings/register-settings.php:1974 includes/scripts.php:217
 
 
 
 
700
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
701
  #: templates/shortcode-profile-editor.php:123
702
  msgid "Remove"
720
  msgstr ""
721
 
722
  #: includes/admin/customers/customers.php:434
723
+ #: includes/admin/downloads/metabox.php:348
724
+ #: includes/admin/downloads/metabox.php:669
725
+ #: includes/admin/payments/class-payments-table.php:222
726
  #: includes/admin/reporting/class-export-payments.php:61
727
  #: includes/admin/reporting/class-export.php:69
728
  #: includes/admin/reporting/export/class-batch-export-customers.php:42
735
  #: includes/admin/discounts/add-discount.php:56
736
  #: includes/admin/discounts/class-discount-codes-table.php:147
737
  #: includes/admin/discounts/edit-discount.php:70
738
+ #: includes/admin/payments/class-payments-table.php:225
739
  #: includes/admin/reporting/class-export-payments.php:74
740
  #: includes/admin/reporting/export/class-batch-export-payments.php:55
741
  #: templates/history-purchases.php:20
744
 
745
  #: includes/admin/customers/customers.php:436
746
  #: includes/admin/downloads/dashboard-columns.php:37
747
+ #: includes/admin/payments/class-payments-table.php:226
748
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:94
749
  #: includes/admin/reporting/class-export-download-history.php:64
750
  #: includes/admin/reporting/class-export-payments.php:80
751
  #: includes/admin/reporting/class-export.php:70
752
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:150
753
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:134
754
  #: includes/admin/reporting/class-sales-logs-list-table.php:135
755
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:47
756
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:42
757
  #: includes/admin/reporting/export/class-batch-export-payments.php:61
758
+ #: includes/admin/reporting/export/class-batch-export-sales.php:45
759
+ #: includes/admin/tools.php:585 templates/history-purchases.php:19
760
  #: templates/shortcode-receipt.php:59
761
  msgid "Date"
762
  msgstr ""
764
  #: includes/admin/customers/customers.php:437
765
  #: includes/admin/discounts/class-discount-codes-table.php:151
766
  #: includes/admin/discounts/edit-discount.php:175
767
+ #: includes/admin/payments/class-payments-table.php:228
768
  #: includes/admin/reporting/class-export-payments.php:82
769
  #: includes/admin/reporting/export/class-batch-export-downloads.php:49
770
  #: includes/admin/reporting/export/class-batch-export-payments.php:66
771
+ #: includes/admin/tools.php:612
772
  msgid "Status"
773
  msgstr ""
774
 
814
  msgid "Delete Customer"
815
  msgstr ""
816
 
817
+ #: includes/admin/customers/customers.php:638 includes/admin/tools.php:149
818
  msgid "Recount Customer Stats"
819
  msgstr ""
820
 
824
  "customer."
825
  msgstr ""
826
 
827
+ #: includes/admin/customers/customers.php:646 includes/admin/tools.php:136
828
  msgid "Recount Stats"
829
  msgstr ""
830
 
851
  #: includes/admin/reporting/class-download-reports-table.php:112
852
  #: includes/admin/reporting/export/class-batch-export-downloads.php:59
853
  #: includes/admin/reporting/graphing.php:333
854
+ #: includes/admin/reporting/graphing.php:633
855
  #: includes/admin/reporting/reports.php:55
856
  msgid "Earnings"
857
  msgstr ""
864
  msgstr[1] ""
865
 
866
  #: includes/admin/dashboard-widgets.php:80
867
+ #: includes/admin/reporting/graphing.php:675 includes/class-edd-stats.php:89
868
  msgid "Last Month"
869
  msgstr ""
870
 
871
  #: includes/admin/dashboard-widgets.php:105
872
+ #: includes/admin/reporting/graphing.php:669 includes/class-edd-stats.php:84
873
  msgid "Today"
874
  msgstr ""
875
 
879
  #: includes/admin/reporting/export/class-batch-export-downloads.php:58
880
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:66
881
  #: includes/admin/reporting/graphing.php:334
882
+ #: includes/admin/reporting/graphing.php:634
883
  #: includes/admin/reporting/logs.php:145
884
  msgid "Sales"
885
  msgstr ""
890
 
891
  #: includes/admin/dashboard-widgets.php:138
892
  #: includes/admin/reporting/class-categories-reports-table.php:85
893
+ #: includes/admin/tools.php:912
894
  msgid "Total Earnings"
895
  msgstr ""
896
 
919
  msgstr ""
920
 
921
  #: includes/admin/discounts/add-discount.php:27
922
+ #: includes/admin/discounts/edit-discount.php:41
923
+ msgid "The name of this discount"
924
  msgstr ""
925
 
926
  #: includes/admin/discounts/add-discount.php:33
1034
  msgstr ""
1035
 
1036
  #: includes/admin/discounts/add-discount.php:134
1037
+ #: includes/admin/discounts/edit-discount.php:149
1038
  msgid ""
1039
  "Enter the expiration date for this discount code in the format of "
1040
+ "mm/dd/yyyy. For no expiration, leave blank"
1041
  msgstr ""
1042
 
1043
  #: includes/admin/discounts/add-discount.php:140
1046
  msgstr ""
1047
 
1048
  #: includes/admin/discounts/add-discount.php:144
1049
+ #: includes/admin/discounts/edit-discount.php:169
1050
  msgid ""
1051
+ "The minimum amount that must be purchased before this discount can be used. "
1052
+ "Leave blank for no minimum."
1053
  msgstr ""
1054
 
1055
  #: includes/admin/discounts/add-discount.php:150
1079
  msgstr ""
1080
 
1081
  #: includes/admin/discounts/class-discount-codes-table.php:127
1082
+ #: includes/admin/payments/class-payments-table.php:200
1083
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:348
1084
  #: includes/admin/reporting/class-sales-logs-list-table.php:290
1085
  msgid "All"
1086
  msgstr ""
1169
 
1170
  #: includes/admin/discounts/contextual-help.php:38
1171
  #: includes/admin/settings/contextual-help.php:42
1172
+ #: includes/admin/settings/register-settings.php:1231
1173
+ #: includes/admin/tools.php:69
 
 
 
 
 
1174
  msgid "General"
1175
  msgstr ""
1176
 
1274
  msgstr ""
1275
 
1276
  #: includes/admin/discounts/discount-actions.php:30
1277
+ #: includes/admin/discounts/discount-actions.php:224
1278
  msgid "You do not have permission to create discount codes"
1279
  msgstr ""
1280
 
1281
+ #: includes/admin/discounts/discount-actions.php:110
1282
+ #: includes/admin/discounts/discount-actions.php:199
1283
  msgid "You do not have permission to edit discount codes"
1284
  msgstr ""
1285
 
1286
+ #: includes/admin/discounts/discount-actions.php:170
1287
+ #: includes/admin/discounts/discount-actions.php:195
1288
+ #: includes/admin/discounts/discount-actions.php:220
1289
  msgid "Trying to cheat or something?"
1290
  msgstr ""
1291
 
1292
+ #: includes/admin/discounts/discount-actions.php:174
1293
  msgid "You do not have permission to delete discount codes"
1294
  msgstr ""
1295
 
1296
+ #: includes/admin/discounts/discount-codes.php:33 includes/post-types.php:30
1297
+ #: includes/post-types.php:77 includes/post-types.php:107
1298
+ msgid "Add New"
1299
+ msgstr ""
1300
+
1301
  #: includes/admin/discounts/discount-codes.php:36
1302
+ #: includes/admin/payments/class-payments-table.php:144
1303
  #: includes/admin/reporting/logs.php:62 includes/admin/reporting/logs.php:122
1304
  msgid "Search"
1305
  msgstr ""
1312
  msgid "Edit Discount"
1313
  msgstr ""
1314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1315
  #: includes/admin/discounts/edit-discount.php:182
1316
  msgid "The status of this discount code."
1317
  msgstr ""
1433
 
1434
  #: includes/admin/downloads/dashboard-columns.php:34
1435
  #: includes/admin/downloads/dashboard-columns.php:286
1436
+ #: includes/admin/downloads/metabox.php:346
1437
+ #: includes/admin/payments/view-order-details.php:498
1438
  #: includes/admin/reporting/export/class-batch-export-downloads.php:52
1439
  #: templates/shortcode-receipt.php:130
1440
  msgid "Price"
1473
  msgid "%1$s Stats"
1474
  msgstr ""
1475
 
1476
+ #: includes/admin/downloads/metabox.php:302
 
 
 
 
1477
  msgid "Pricing Options:"
1478
  msgstr ""
1479
 
1480
+ #: includes/admin/downloads/metabox.php:308
1481
  msgid "Enable variable pricing"
1482
  msgstr ""
1483
 
1484
+ #: includes/admin/downloads/metabox.php:338
1485
  msgid ""
1486
  "Enable multi-option purchase mode. Allows multiple price options to be "
1487
  "added to your cart at once"
1488
  msgstr ""
1489
 
1490
+ #: includes/admin/downloads/metabox.php:345
1491
+ #: includes/admin/downloads/metabox.php:420
1492
+ msgid "Option Name"
 
 
 
 
 
 
 
1493
  msgstr ""
1494
 
1495
+ #: includes/admin/downloads/metabox.php:347 includes/download-functions.php:511
1496
+ msgid "Default"
1497
  msgstr ""
1498
 
1499
+ #: includes/admin/downloads/metabox.php:377
1500
+ msgid "Add New Price"
1501
  msgstr ""
1502
 
1503
  #: includes/admin/downloads/metabox.php:446
1504
+ msgid "Set ID %s as default price"
 
 
 
 
 
1505
  msgstr ""
1506
 
1507
+ #: includes/admin/downloads/metabox.php:457
1508
+ msgid "Remove price option %s"
1509
  msgstr ""
1510
 
1511
+ #: includes/admin/downloads/metabox.php:476
1512
  msgid "Product Type Options:"
1513
  msgstr ""
1514
 
1515
+ #: includes/admin/downloads/metabox.php:487
1516
  msgid "Select a product type"
1517
  msgstr ""
1518
 
1519
+ #: includes/admin/downloads/metabox.php:488
1520
  msgid ""
1521
  "<strong>Product Type</strong>: Sell this item as a single product, or use "
1522
  "the Bundle type to sell a collection of products."
1523
  msgstr ""
1524
 
1525
+ #: includes/admin/downloads/metabox.php:515
1526
+ msgid "Bundled %s:"
 
 
 
 
 
 
 
 
 
 
1527
  msgstr ""
1528
 
1529
+ #: includes/admin/downloads/metabox.php:517
1530
+ #: includes/admin/downloads/metabox.php:666
1531
+ msgid "Price Assignment"
1532
  msgstr ""
1533
 
1534
+ #: includes/admin/downloads/metabox.php:544
1535
  msgid "Remove bundle option %s"
1536
  msgstr ""
1537
 
1538
+ #: includes/admin/downloads/metabox.php:593
1539
+ msgid "Remove bundle option"
 
 
 
 
1540
  msgstr ""
1541
 
1542
+ #: includes/admin/downloads/metabox.php:621
1543
+ #: includes/admin/downloads/metabox.php:700
1544
  msgid "Add New File"
1545
  msgstr ""
1546
 
1547
+ #: includes/admin/downloads/metabox.php:653
1548
+ msgid "File Downloads:"
 
 
 
 
 
 
 
 
1549
  msgstr ""
1550
 
1551
+ #: includes/admin/downloads/metabox.php:663
1552
+ #: includes/admin/downloads/metabox.php:751
1553
  msgid "File Name"
1554
  msgstr ""
1555
 
1556
+ #: includes/admin/downloads/metabox.php:664
1557
  msgid "File URL"
1558
  msgstr ""
1559
 
1560
+ #: includes/admin/downloads/metabox.php:667
1561
+ msgid ""
1562
+ "<strong>Price Assignment</strong>: With variable pricing enabled, you can "
1563
+ "choose to allow certain price variations access to specific files, or allow "
1564
+ "all price variations to access a file."
1565
+ msgstr ""
1566
+
1567
+ #: includes/admin/downloads/metabox.php:761
1568
  msgid "Upload or enter the file URL"
1569
  msgstr ""
1570
 
1571
+ #: includes/admin/downloads/metabox.php:766
1572
  msgid "Insert File"
1573
  msgstr ""
1574
 
1575
+ #: includes/admin/downloads/metabox.php:766
1576
  msgid "Insert"
1577
  msgstr ""
1578
 
1579
+ #: includes/admin/downloads/metabox.php:766
1580
  msgid "Upload a File"
1581
  msgstr ""
1582
 
1583
+ #: includes/admin/downloads/metabox.php:798
1584
+ msgid "Remove file option %s"
1585
  msgstr ""
1586
 
1587
+ #: includes/admin/downloads/metabox.php:821
 
 
 
 
 
 
 
1588
  msgid "Insert into %s"
1589
  msgstr ""
1590
 
1591
+ #: includes/admin/downloads/metabox.php:847
1592
  msgid "File Download Limit:"
1593
  msgstr ""
1594
 
1595
+ #: includes/admin/downloads/metabox.php:854
1596
  msgid "Leave blank for global setting or 0 for unlimited"
1597
  msgstr ""
1598
 
1599
+ #: includes/admin/downloads/metabox.php:856
1600
  msgid ""
1601
  "<strong>File Download Limit</strong>: Limit the number of times a customer "
1602
  "who purchased this product can access their download links."
1603
  msgstr ""
1604
 
1605
+ #: includes/admin/downloads/metabox.php:878
1606
  msgid "Ignore Tax:"
1607
  msgstr ""
1608
 
1609
+ #: includes/admin/downloads/metabox.php:884
1610
  msgid "Mark this product as exclusive of tax"
1611
  msgstr ""
1612
 
1613
+ #: includes/admin/downloads/metabox.php:906
1614
  msgid "Item Quantities:"
1615
  msgstr ""
1616
 
1617
+ #: includes/admin/downloads/metabox.php:912
1618
  msgid "Disable quantity input for this product"
1619
  msgstr ""
1620
 
1621
+ #: includes/admin/downloads/metabox.php:914
1622
  msgid ""
1623
  "<strong>Item Quantities</strong>: if disabled, customers will not be "
1624
  "provided an option to change the number they wish to purchase."
1625
  msgstr ""
1626
 
1627
+ #: includes/admin/downloads/metabox.php:933
1628
+ #: includes/admin/settings/register-settings.php:764
1629
+ #: includes/admin/thickbox.php:58 includes/checkout/template.php:874
1630
+ #: includes/shortcodes.php:49 includes/template-functions.php:67
1631
  msgid "Purchase"
1632
  msgstr ""
1633
 
1634
+ #: includes/admin/downloads/metabox.php:940
1635
  msgid "Purchase Shortcode:"
1636
  msgstr ""
1637
 
1638
+ #: includes/admin/downloads/metabox.php:941
1639
  msgid ""
1640
  "<strong>Purchse Shortcode</strong>: Use this shortcode to output a purchase "
1641
  "link for this product in the location of your choosing."
1642
  msgstr ""
1643
 
1644
+ #: includes/admin/downloads/metabox.php:962
1645
  msgid "Accounting Options:"
1646
  msgstr ""
1647
 
1648
+ #: includes/admin/downloads/metabox.php:970
1649
  msgid "Enter an SKU for this %s."
1650
  msgstr ""
1651
 
1652
+ #: includes/admin/downloads/metabox.php:989
1653
  msgid "Button Options:"
1654
  msgstr ""
1655
 
1656
+ #: includes/admin/downloads/metabox.php:996
1657
  msgid "Disable the automatic output of the purchase button"
1658
  msgstr ""
1659
 
1660
+ #: includes/admin/downloads/metabox.php:997
1661
  msgid ""
1662
  "<strong>Automatic Output</strong>: By default, the purchase buttons will be "
1663
  "displayed at the bottom of the download, when disabled you will need to use "
1665
  "where you prefer."
1666
  msgstr ""
1667
 
1668
+ #: includes/admin/downloads/metabox.php:1007
1669
+ #: includes/admin/settings/register-settings.php:771
1670
+ #: includes/admin/thickbox.php:96
1671
  msgid "Add to Cart"
1672
  msgstr ""
1673
 
1674
+ #: includes/admin/downloads/metabox.php:1008
1675
+ #: includes/admin/settings/register-settings.php:778 includes/shortcodes.php:47
1676
+ #: includes/template-functions.php:67
1677
  msgid "Buy Now"
1678
  msgstr ""
1679
 
1680
+ #: includes/admin/downloads/metabox.php:1021
1681
  msgid "Purchase button behavior"
1682
  msgstr ""
1683
 
1684
+ #: includes/admin/downloads/metabox.php:1023
1685
  msgid ""
1686
  "<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
1687
  "eCommerce flow. A Buy Now button bypasses most of the process, taking the "
1689
  "process of buying the product."
1690
  msgstr ""
1691
 
1692
+ #: includes/admin/downloads/metabox.php:1025
1693
  msgid ""
1694
  "<strong>Button Behavior</strong>: Add to Cart buttons follow a traditional "
1695
  "eCommerce flow. Buy Now buttons are only available for stores that have a "
1696
  "single supported gateway active and that do not use taxes."
1697
  msgstr ""
1698
 
1699
+ #: includes/admin/downloads/metabox.php:1063
1700
  msgid ""
1701
  "Special notes or instructions for this product. These notes will be added "
1702
  "to the purchase receipt."
1703
  msgstr ""
1704
 
1705
+ #: includes/admin/downloads/metabox.php:1090
1706
  msgid "Sales:"
1707
  msgstr ""
1708
 
1709
+ #: includes/admin/downloads/metabox.php:1095
1710
  msgid "Earnings:"
1711
  msgstr ""
1712
 
1713
+ #: includes/admin/downloads/metabox.php:1102
1714
  msgid "View File Download Log"
1715
  msgstr ""
1716
 
 
 
 
 
 
 
 
 
 
 
1717
  #: includes/admin/import/class-batch-import-downloads.php:65
1718
  #: includes/admin/import/class-batch-import-payments.php:76
1719
  #: includes/admin/import/class-batch-import.php:159
1720
  msgid "You do not have permission to import data."
1721
  msgstr ""
1722
 
1723
+ #: includes/admin/import/class-batch-import-payments.php:279
1724
  #: includes/admin/reporting/export/class-batch-export-payments.php:53
1725
  msgid "Products (Raw)"
1726
  msgstr ""
1727
 
1728
+ #: includes/admin/import/class-batch-import-payments.php:590
1729
  msgid "payments"
1730
  msgstr ""
1731
 
1764
  #: includes/admin/payments/actions.php:316
1765
  #: includes/admin/payments/actions.php:332
1766
  #: includes/admin/payments/actions.php:359
1767
+ #: includes/admin/payments/actions.php:379 includes/emails/actions.php:49
1768
  msgid "You do not have permission to edit this payment record"
1769
  msgstr ""
1770
 
1780
  msgid "Error Updating Payment"
1781
  msgstr ""
1782
 
1783
+ #: includes/admin/payments/class-payments-table.php:131
 
 
 
 
1784
  msgid "Start Date:"
1785
  msgstr ""
1786
 
1787
+ #: includes/admin/payments/class-payments-table.php:133
1788
  msgid "End Date:"
1789
  msgstr ""
1790
 
1791
+ #: includes/admin/payments/class-payments-table.php:135
1792
  #: includes/admin/reporting/logs.php:179
1793
  msgid "Apply"
1794
  msgstr ""
1795
 
1796
+ #: includes/admin/payments/class-payments-table.php:141
1797
  msgid "Clear Filter"
1798
  msgstr ""
1799
 
1800
+ #: includes/admin/payments/class-payments-table.php:201
1801
  msgid "Completed"
1802
  msgstr ""
1803
 
1804
+ #: includes/admin/payments/class-payments-table.php:202
1805
+ #: includes/payments/functions.php:724
1806
  msgid "Pending"
1807
  msgstr ""
1808
 
1809
+ #: includes/admin/payments/class-payments-table.php:203
1810
+ #: includes/payments/functions.php:726
 
 
 
 
 
1811
  msgid "Refunded"
1812
  msgstr ""
1813
 
1814
+ #: includes/admin/payments/class-payments-table.php:204
1815
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:68
1816
+ #: includes/payments/functions.php:729
1817
  msgid "Revoked"
1818
  msgstr ""
1819
 
1820
+ #: includes/admin/payments/class-payments-table.php:205
1821
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:70
1822
+ #: includes/payments/functions.php:727
1823
  msgid "Failed"
1824
  msgstr ""
1825
 
1826
+ #: includes/admin/payments/class-payments-table.php:206
1827
  #: includes/admin/reporting/export/class-batch-export-earnings-report.php:69
1828
+ #: includes/payments/functions.php:728
1829
  msgid "Abandoned"
1830
  msgstr ""
1831
 
1832
+ #: includes/admin/payments/class-payments-table.php:224
1833
  #: templates/history-purchases.php:21
1834
  msgid "Details"
1835
  msgstr ""
1836
 
1837
+ #: includes/admin/payments/class-payments-table.php:289
1838
  #: includes/admin/payments/payments-history.php:90
1839
  msgid "View Order Details"
1840
  msgstr ""
1841
 
1842
+ #: includes/admin/payments/class-payments-table.php:320
1843
  msgid "Resend Purchase Receipt"
1844
  msgstr ""
1845
 
1846
+ #: includes/admin/payments/class-payments-table.php:328
1847
  msgid "(unknown)"
1848
  msgstr ""
1849
 
1850
+ #: includes/admin/payments/class-payments-table.php:381
1851
  msgid "(customer missing)"
1852
  msgstr ""
1853
 
1854
+ #: includes/admin/payments/class-payments-table.php:396
1855
  msgid "Set To Completed"
1856
  msgstr ""
1857
 
1858
+ #: includes/admin/payments/class-payments-table.php:397
1859
  msgid "Set To Pending"
1860
  msgstr ""
1861
 
1862
+ #: includes/admin/payments/class-payments-table.php:398
 
 
 
 
1863
  msgid "Set To Refunded"
1864
  msgstr ""
1865
 
1866
+ #: includes/admin/payments/class-payments-table.php:399
1867
  msgid "Set To Revoked"
1868
  msgstr ""
1869
 
1870
+ #: includes/admin/payments/class-payments-table.php:400
1871
  msgid "Set To Failed"
1872
  msgstr ""
1873
 
1874
+ #: includes/admin/payments/class-payments-table.php:401
1875
  msgid "Set To Abandoned"
1876
  msgstr ""
1877
 
1878
+ #: includes/admin/payments/class-payments-table.php:402
1879
  msgid "Set To Preapproval"
1880
  msgstr ""
1881
 
1882
+ #: includes/admin/payments/class-payments-table.php:403
1883
  msgid "Set To Cancelled"
1884
  msgstr ""
1885
 
1886
+ #: includes/admin/payments/class-payments-table.php:404
1887
  msgid "Resend Email Receipts"
1888
  msgstr ""
1889
 
2080
  msgstr[1] ""
2081
 
2082
  #: includes/admin/payments/view-order-details.php:152
2083
+ #: includes/admin/settings/register-settings.php:735
2084
  msgid "None"
2085
  msgstr ""
2086
 
2090
  msgstr ""
2091
 
2092
  #: includes/admin/payments/view-order-details.php:175
2093
+ #: includes/admin/payments/view-order-details.php:506
2094
  #: includes/admin/reporting/class-export-payments.php:75
2095
  #: includes/admin/reporting/export/class-batch-export-payments.php:56
2096
+ #: includes/admin/tools.php:630 templates/checkout_cart.php:120
2097
  #: templates/shortcode-receipt.php:90
2098
  msgid "Tax"
2099
  msgstr ""
2167
  msgstr ""
2168
 
2169
  #: includes/admin/payments/view-order-details.php:308
2170
+ #: includes/admin/reporting/reports.php:34 includes/class-edd-logging.php:48
2171
  msgid "Logs"
2172
  msgstr ""
2173
 
2183
  msgid "View all purchases of customer"
2184
  msgstr ""
2185
 
2186
+ #: includes/admin/payments/view-order-details.php:475
 
 
 
 
 
 
 
 
2187
  msgid "Copy Download Link(s)"
2188
  msgstr ""
2189
 
2190
+ #: includes/admin/payments/view-order-details.php:487
2191
  msgid "No %s included with this purchase"
2192
  msgstr ""
2193
 
2194
+ #: includes/admin/payments/view-order-details.php:495
2195
+ #: includes/admin/payments/view-order-details.php:575
2196
  msgid "Add New %s"
2197
  msgstr ""
2198
 
2199
+ #: includes/admin/payments/view-order-details.php:500
2200
  msgid " & Quantity"
2201
  msgstr ""
2202
 
2203
+ #: includes/admin/payments/view-order-details.php:614
2204
  msgid "Assign to another customer"
2205
  msgstr ""
2206
 
2207
+ #: includes/admin/payments/view-order-details.php:616
2208
  msgid "New Customer"
2209
  msgstr ""
2210
 
2211
+ #: includes/admin/payments/view-order-details.php:622
2212
  msgid "Select a customer"
2213
  msgstr ""
2214
 
2215
+ #: includes/admin/payments/view-order-details.php:628 includes/scripts.php:224
 
2216
  msgid "Type to search all Customers"
2217
  msgstr ""
2218
 
2219
+ #: includes/admin/payments/view-order-details.php:642
2220
  msgid "Click \"Save Payment\" to change the customer"
2221
  msgstr ""
2222
 
2223
+ #: includes/admin/payments/view-order-details.php:662
2224
  msgid "Click \"Save Payment\" to create new customer"
2225
  msgstr ""
2226
 
2227
+ #: includes/admin/payments/view-order-details.php:677
2228
+ #: includes/checkout/template.php:335
2229
  msgid "Billing Address"
2230
  msgstr ""
2231
 
2232
+ #: includes/admin/payments/view-order-details.php:687
2233
  msgid "Street Address Line 1:"
2234
  msgstr ""
2235
 
2236
+ #: includes/admin/payments/view-order-details.php:691
2237
  msgid "Street Address Line 2:"
2238
  msgstr ""
2239
 
2240
+ #: includes/admin/payments/view-order-details.php:720
2241
+ #: includes/admin/settings/register-settings.php:310
2242
  msgid "Select a country"
2243
  msgstr ""
2244
 
2245
+ #: includes/admin/payments/view-order-details.php:738
2246
+ #: includes/admin/settings/register-settings.php:318
 
 
 
 
2247
  msgid "Select a state"
2248
  msgstr ""
2249
 
2250
+ #: includes/admin/payments/view-order-details.php:759
 
 
 
 
2251
  msgid "Payment Notes"
2252
  msgstr ""
2253
 
2254
+ #: includes/admin/payments/view-order-details.php:774
2255
  msgid "No payment notes"
2256
  msgstr ""
2257
 
2258
+ #: includes/admin/payments/view-order-details.php:780
2259
  msgid "Add Note"
2260
  msgstr ""
2261
 
2262
  #: includes/admin/plugins.php:27
2263
+ #: includes/admin/settings/register-settings.php:1286
2264
  msgid "General Settings"
2265
  msgstr ""
2266
 
2267
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:89
2268
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:144
2269
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:129
2270
  #: includes/admin/reporting/class-sales-logs-list-table.php:130
2271
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:40
2323
  msgid "Monthly Earnings Avg"
2324
  msgstr ""
2325
 
2326
+ #: includes/admin/reporting/class-categories-reports-table.php:222
2327
  msgid "Less than 1"
2328
  msgstr ""
2329
 
2330
+ #: includes/admin/reporting/class-categories-reports-table.php:329
2331
  msgid "No sales for dates provided."
2332
  msgstr ""
2333
 
2334
+ #: includes/admin/reporting/class-categories-reports-table.php:370
2335
  msgid "No earnings for dates provided."
2336
  msgstr ""
2337
 
2354
  #: includes/admin/reporting/class-export-customers.php:66
2355
  #: includes/admin/reporting/class-export-payments.php:64
2356
  #: includes/admin/reporting/export/class-batch-export-payments.php:44
2357
+ #: includes/admin/tools.php:504 includes/checkout/template.php:193
2358
  #: includes/checkout/template.php:199 templates/shortcode-profile-editor.php:38
2359
  msgid "First Name"
2360
  msgstr ""
2362
  #: includes/admin/reporting/class-export-customers.php:67
2363
  #: includes/admin/reporting/class-export-payments.php:65
2364
  #: includes/admin/reporting/export/class-batch-export-payments.php:45
2365
+ #: includes/admin/tools.php:513 includes/checkout/template.php:203
2366
  #: includes/checkout/template.php:209 templates/shortcode-profile-editor.php:43
2367
  msgid "Last Name"
2368
  msgstr ""
2385
  msgstr ""
2386
 
2387
  #: includes/admin/reporting/class-export-download-history.php:66
2388
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:149
2389
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:42
2390
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:44
2391
  #: includes/admin/reporting/export/class-batch-export-payments.php:64
2392
+ #: includes/admin/tools.php:540
2393
  msgid "IP Address"
2394
  msgstr ""
2395
 
2399
  msgstr ""
2400
 
2401
  #: includes/admin/reporting/class-export-download-history.php:68
2402
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:148
2403
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:46
2404
  msgid "File"
2405
  msgstr ""
2406
 
2407
  #: includes/admin/reporting/class-export-payments.php:62
2408
  #: includes/admin/reporting/export/class-batch-export-payments.php:41
2409
+ #: includes/admin/tools.php:576
2410
  msgid "Payment Number"
2411
  msgstr ""
2412
 
2427
 
2428
  #: includes/admin/reporting/class-export-payments.php:70
2429
  #: includes/admin/reporting/export/class-batch-export-payments.php:50
2430
+ #: includes/admin/settings/register-settings.php:1970
2431
+ #: includes/admin/tools.php:711 templates/shortcode-profile-editor.php:162
2432
  msgid "Country"
2433
  msgstr ""
2434
 
2435
  #: includes/admin/reporting/class-export-payments.php:71
2436
  #: includes/admin/reporting/export/class-batch-export-payments.php:51
2437
+ #: includes/admin/tools.php:702 includes/checkout/template.php:371
2438
  #: templates/shortcode-profile-editor.php:157
2439
  msgid "Zip / Postal Code"
2440
  msgstr ""
2451
 
2452
  #: includes/admin/reporting/class-export-payments.php:77
2453
  #: includes/admin/reporting/export/class-batch-export-payments.php:58
2454
+ #: includes/admin/tools.php:567 templates/shortcode-receipt.php:53
2455
  msgid "Payment Method"
2456
  msgstr ""
2457
 
2458
  #: includes/admin/reporting/class-export-payments.php:78
2459
  #: includes/admin/reporting/export/class-batch-export-payments.php:59
2460
+ #: includes/admin/tools.php:648
2461
  msgid "Transaction ID"
2462
  msgstr ""
2463
 
2464
  #: includes/admin/reporting/class-export-payments.php:79
2465
  #: includes/admin/reporting/export/class-batch-export-payments.php:60
2466
+ #: includes/admin/tools.php:594
2467
  msgid "Purchase Key"
2468
  msgstr ""
2469
 
2470
  #: includes/admin/reporting/class-export-payments.php:81
2471
  #: includes/admin/reporting/export/class-batch-export-payments.php:62
2472
  #: includes/admin/reporting/export/class-batch-export-sales.php:41
2473
+ #: includes/admin/tools.php:657
2474
  msgid "User"
2475
  msgstr ""
2476
 
2477
  #: includes/admin/reporting/class-export-payments.php:192
2478
+ #: includes/admin/reporting/export/class-batch-export-payments.php:223
2479
  msgid "guest"
2480
  msgstr ""
2481
 
2489
  msgid "You do not have permission to export data."
2490
  msgstr ""
2491
 
2492
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:147
2493
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:130
2494
  #: includes/admin/reporting/class-sales-logs-list-table.php:134
2495
  #: includes/admin/reporting/export/class-batch-export-payments.php:40
2496
+ #: includes/admin/reporting/export/class-batch-export-sales.php:44
2497
  msgid "Payment ID"
2498
  msgstr ""
2499
 
2500
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:79
2501
+ #: includes/gateways/manual.php:73 includes/gateways/paypal-standard.php:178
2502
  msgid "Payment Error"
2503
  msgstr ""
2504
 
2528
  msgstr ""
2529
 
2530
  #: includes/admin/reporting/class-sales-logs-list-table.php:133
2531
+ #: includes/admin/reporting/export/class-batch-export-sales.php:43
2532
  msgid "Item Amount"
2533
  msgstr ""
2534
 
2539
  msgstr ""
2540
 
2541
  #: includes/admin/reporting/contextual-help.php:48
2542
+ #: includes/admin/reporting/reports.php:32 includes/admin/tools.php:939
2543
  msgid "Export"
2544
  msgstr ""
2545
 
2643
  msgstr ""
2644
 
2645
  #: includes/admin/reporting/export/class-batch-export-downloads.php:54
2646
+ #: includes/admin/settings/register-settings.php:807
2647
+ #: includes/admin/tools.php:894
2648
  msgid "File Download Limit"
2649
  msgstr ""
2650
 
2654
 
2655
  #: includes/admin/reporting/export/class-batch-export-downloads.php:56
2656
  #: includes/emails/class-edd-email-tags.php:411
2657
+ #: includes/emails/class-edd-email-tags.php:532
2658
  #: templates/shortcode-receipt.php:125
2659
  msgid "SKU"
2660
  msgstr ""
2684
  msgstr ""
2685
 
2686
  #: includes/admin/reporting/export/class-batch-export-payments.php:43
2687
+ #: includes/admin/tools.php:522
 
2688
  msgid "Customer ID"
2689
  msgstr ""
2690
 
2693
  msgstr ""
2694
 
2695
  #: includes/admin/reporting/export/class-batch-export-payments.php:63
2696
+ #: includes/admin/settings/register-settings.php:345
 
2697
  msgid "Currency"
2698
  msgstr ""
2699
 
2700
  #: includes/admin/reporting/export/class-batch-export-payments.php:65
2701
+ #: includes/admin/tools.php:549
2702
  msgid "Mode (Live|Test)"
2703
  msgstr ""
2704
 
 
 
 
 
2705
  #: includes/admin/reporting/export/export-functions.php:49
2706
  msgid "Export location or file not writable"
2707
  msgstr ""
2719
  msgstr ""
2720
 
2721
  #: includes/admin/reporting/graphing.php:361
2722
+ #: includes/admin/reporting/graphing.php:650
2723
  msgid "Total earnings for period shown: "
2724
  msgstr ""
2725
 
2726
  #: includes/admin/reporting/graphing.php:369
2727
+ #: includes/admin/reporting/graphing.php:651
2728
  msgid "Total sales for period shown: "
2729
  msgstr ""
2730
 
2740
  msgid "Excludes sales tax."
2741
  msgstr ""
2742
 
2743
+ #: includes/admin/reporting/graphing.php:640
2744
  msgid "Earnings Over Time for %s"
2745
  msgstr ""
2746
 
2747
+ #: includes/admin/reporting/graphing.php:652
2748
  msgid "Average monthly earnings: %s"
2749
  msgstr ""
2750
 
2751
+ #: includes/admin/reporting/graphing.php:653
2752
  msgid "Average monthly sales: %s"
2753
  msgstr ""
2754
 
2755
+ #: includes/admin/reporting/graphing.php:670 includes/class-edd-stats.php:85
2756
  msgid "Yesterday"
2757
  msgstr ""
2758
 
2759
+ #: includes/admin/reporting/graphing.php:671 includes/class-edd-stats.php:86
2760
  msgid "This Week"
2761
  msgstr ""
2762
 
2763
+ #: includes/admin/reporting/graphing.php:672 includes/class-edd-stats.php:87
2764
  msgid "Last Week"
2765
  msgstr ""
2766
 
2767
+ #: includes/admin/reporting/graphing.php:673
2768
  msgid "Last 30 Days"
2769
  msgstr ""
2770
 
2771
+ #: includes/admin/reporting/graphing.php:674 includes/class-edd-stats.php:88
2772
  msgid "This Month"
2773
  msgstr ""
2774
 
2775
+ #: includes/admin/reporting/graphing.php:676 includes/class-edd-stats.php:90
2776
  msgid "This Quarter"
2777
  msgstr ""
2778
 
2779
+ #: includes/admin/reporting/graphing.php:677 includes/class-edd-stats.php:91
2780
  msgid "Last Quarter"
2781
  msgstr ""
2782
 
2783
+ #: includes/admin/reporting/graphing.php:678 includes/class-edd-stats.php:92
2784
  msgid "This Year"
2785
  msgstr ""
2786
 
2787
+ #: includes/admin/reporting/graphing.php:679 includes/class-edd-stats.php:93
2788
  msgid "Last Year"
2789
  msgstr ""
2790
 
2791
+ #: includes/admin/reporting/graphing.php:680
2792
  msgid "Custom"
2793
  msgstr ""
2794
 
2795
+ #: includes/admin/reporting/graphing.php:712
2796
  msgid "From"
2797
  msgstr ""
2798
 
2799
+ #: includes/admin/reporting/graphing.php:728
2800
  msgid "To"
2801
  msgstr ""
2802
 
2803
+ #: includes/admin/reporting/graphing.php:748
2804
  msgid "Exclude Taxes"
2805
  msgstr ""
2806
 
2807
+ #: includes/admin/reporting/graphing.php:753
2808
  msgid "Filter"
2809
  msgstr ""
2810
 
2811
+ #: includes/admin/reporting/graphing.php:968
2812
  msgid "Clicking this will clear the reports cache"
2813
  msgstr ""
2814
 
2815
+ #: includes/admin/reporting/graphing.php:968
2816
  msgid "Refresh Reports"
2817
  msgstr ""
2818
 
2819
  #: includes/admin/reporting/logs.php:144
2820
+ #: includes/admin/settings/register-settings.php:1313
2821
  msgid "File Downloads"
2822
  msgstr ""
2823
 
2847
 
2848
  #: includes/admin/reporting/reports.php:59
2849
  #: includes/admin/settings/contextual-help.php:71
2850
+ #: includes/admin/settings/register-settings.php:1235
2851
  msgid "Taxes"
2852
  msgstr ""
2853
 
2891
  "year."
2892
  msgstr ""
2893
 
2894
+ #: includes/admin/reporting/reports.php:325 includes/admin/tools.php:165
2895
  msgid "Submit"
2896
  msgstr ""
2897
 
2989
  msgstr ""
2990
 
2991
  #: includes/admin/settings/contextual-help.php:48
2992
+ #: includes/admin/settings/register-settings.php:419
2993
+ #: includes/admin/settings/register-settings.php:1232
2994
  msgid "Payment Gateways"
2995
  msgstr ""
2996
 
3019
  msgstr ""
3020
 
3021
  #: includes/admin/settings/contextual-help.php:57
3022
+ #: includes/admin/settings/register-settings.php:1233
3023
  msgid "Emails"
3024
  msgstr ""
3025
 
3039
  msgstr ""
3040
 
3041
  #: includes/admin/settings/contextual-help.php:65
3042
+ #: includes/admin/settings/register-settings.php:1234
3043
  msgid "Styles"
3044
  msgstr ""
3045
 
3122
  msgstr ""
3123
 
3124
  #: includes/admin/settings/contextual-help.php:93
 
3125
  msgid "Miscellaneous"
3126
  msgstr ""
3127
 
3135
  msgid "A description of all the options are provided beside their input boxes."
3136
  msgstr ""
3137
 
3138
+ #: includes/admin/settings/register-settings.php:242
3139
+ #: includes/admin/settings/register-settings.php:245
 
 
 
3140
  msgid "Page Settings"
3141
  msgstr ""
3142
 
3143
+ #: includes/admin/settings/register-settings.php:246
3144
  msgid ""
3145
  "Easy Digital Downloads uses the pages below for handling the display of "
3146
  "checkout, purchase confirmation, purchase history, and purchase failures. "
3149
  "in the page content area."
3150
  msgstr ""
3151
 
3152
+ #: includes/admin/settings/register-settings.php:250
3153
  msgid "Checkout Page"
3154
  msgstr ""
3155
 
3156
+ #: includes/admin/settings/register-settings.php:251
3157
  msgid ""
3158
  "This is the checkout page where buyers will complete their purchases. The "
3159
  "[download_checkout] shortcode must be on this page."
3160
  msgstr ""
3161
 
3162
+ #: includes/admin/settings/register-settings.php:255
3163
+ #: includes/admin/settings/register-settings.php:264
3164
+ #: includes/admin/settings/register-settings.php:273
3165
+ #: includes/admin/settings/register-settings.php:282
3166
+ #: includes/admin/settings/register-settings.php:293
3167
  msgid "Select a page"
3168
  msgstr ""
3169
 
3170
+ #: includes/admin/settings/register-settings.php:259
3171
  msgid "Success Page"
3172
  msgstr ""
3173
 
3174
+ #: includes/admin/settings/register-settings.php:260
3175
  msgid ""
3176
  "This is the page buyers are sent to after completing their purchases. The "
3177
  "[edd_receipt] shortcode should be on this page."
3178
  msgstr ""
3179
 
3180
+ #: includes/admin/settings/register-settings.php:268
3181
  msgid "Failed Transaction Page"
3182
  msgstr ""
3183
 
3184
+ #: includes/admin/settings/register-settings.php:269
3185
  msgid ""
3186
  "This is the page buyers are sent to if their transaction is cancelled or "
3187
  "fails."
3188
  msgstr ""
3189
 
3190
+ #: includes/admin/settings/register-settings.php:277
3191
  msgid "Purchase History Page"
3192
  msgstr ""
3193
 
3194
+ #: includes/admin/settings/register-settings.php:278
3195
  msgid ""
3196
  "This page shows a complete purchase history for the current user, including "
3197
  "download links. The [purchase_history] shortcode should be on this page."
3198
  msgstr ""
3199
 
3200
+ #: includes/admin/settings/register-settings.php:286
3201
  msgid "Login Redirect Page"
3202
  msgstr ""
3203
 
3204
+ #: includes/admin/settings/register-settings.php:288
3205
  msgid ""
3206
+ "This is the page where buyers will be redirected by default once they log "
3207
+ "in. The [edd_login redirect=\"%s\"] shortcode with the redirect attribute "
3208
+ "can override this setting."
3209
  msgstr ""
3210
 
3211
+ #: includes/admin/settings/register-settings.php:297
3212
  msgid "Store Location"
3213
  msgstr ""
3214
 
3215
+ #: includes/admin/settings/register-settings.php:300
3216
  msgid "Store Location Settings"
3217
  msgstr ""
3218
 
3219
+ #: includes/admin/settings/register-settings.php:301
3220
  msgid ""
3221
  "Easy Digital Downloads will use the following Country and State to pre-fill "
3222
  "fields at checkout. This will also pre-calculate any taxes defined if the "
3223
  "location below has taxes enabled."
3224
  msgstr ""
3225
 
3226
+ #: includes/admin/settings/register-settings.php:305
3227
  msgid "Base Country"
3228
  msgstr ""
3229
 
3230
+ #: includes/admin/settings/register-settings.php:306
3231
  msgid "Where does your store operate from?"
3232
  msgstr ""
3233
 
3234
+ #: includes/admin/settings/register-settings.php:314
3235
  msgid "Base State / Province"
3236
  msgstr ""
3237
 
3238
+ #: includes/admin/settings/register-settings.php:315
3239
  msgid "What state / province does your store operate from?"
3240
  msgstr ""
3241
 
3242
+ #: includes/admin/settings/register-settings.php:322
3243
+ msgid "Tracking Settings"
3244
  msgstr ""
3245
 
3246
+ #: includes/admin/settings/register-settings.php:328
3247
  msgid "Allow Usage Tracking?"
3248
  msgstr ""
3249
 
3250
+ #: includes/admin/settings/register-settings.php:330
3251
  msgid ""
3252
  "Allow Easy Digital Downloads to anonymously track how this plugin is used "
3253
  "and help us make the plugin better. Opt-in to tracking and our newsletter "
3254
+ "and immediately be emailed a 20&#37; discount to the EDD shop, valid "
3255
+ "towards the <a href=\"%s\" target=\"_blank\">purchase of extensions</a>. No "
3256
+ "sensitive data is tracked."
3257
  msgstr ""
3258
 
3259
+ #: includes/admin/settings/register-settings.php:339
3260
+ #: includes/admin/settings/register-settings.php:1287
3261
+ msgid "Currency Settings"
3262
+ msgstr ""
3263
+
3264
+ #: includes/admin/settings/register-settings.php:346
3265
  msgid ""
3266
  "Choose your currency. Note that some payment gateways have currency "
3267
  "restrictions."
3268
  msgstr ""
3269
 
3270
+ #: includes/admin/settings/register-settings.php:353
3271
  msgid "Currency Position"
3272
  msgstr ""
3273
 
3274
+ #: includes/admin/settings/register-settings.php:354
3275
  msgid "Choose the location of the currency sign."
3276
  msgstr ""
3277
 
3278
+ #: includes/admin/settings/register-settings.php:357
3279
  msgid "Before - $10"
3280
  msgstr ""
3281
 
3282
+ #: includes/admin/settings/register-settings.php:358
3283
  msgid "After - 10$"
3284
  msgstr ""
3285
 
3286
+ #: includes/admin/settings/register-settings.php:363
3287
  msgid "Thousands Separator"
3288
  msgstr ""
3289
 
3290
+ #: includes/admin/settings/register-settings.php:364
3291
+ msgid "The symbol (usually , or .) to separate thousands"
3292
  msgstr ""
3293
 
3294
+ #: includes/admin/settings/register-settings.php:371
3295
  msgid "Decimal Separator"
3296
  msgstr ""
3297
 
3298
+ #: includes/admin/settings/register-settings.php:372
3299
+ msgid "The symbol (usually , or .) to separate decimal points"
 
 
 
 
 
3300
  msgstr ""
3301
 
3302
+ #: includes/admin/settings/register-settings.php:381
3303
+ #: includes/admin/settings/register-settings.php:384
3304
+ #: includes/admin/settings/register-settings.php:1288
3305
  msgid "API Settings"
3306
  msgstr ""
3307
 
3308
+ #: includes/admin/settings/register-settings.php:385
3309
  msgid ""
3310
  "The Easy Digital Downloads REST API provides access to store data through "
3311
  "our API endpoints. Enable this setting if you would like all user accounts "
3312
  "to be able to generate their own API keys."
3313
  msgstr ""
3314
 
3315
+ #: includes/admin/settings/register-settings.php:389
3316
  msgid "Allow User Keys"
3317
  msgstr ""
3318
 
3319
+ #: includes/admin/settings/register-settings.php:390
3320
  msgid ""
3321
  "Check this box to allow all users to generate API keys. Users with the "
3322
  "'manage_shop_settings' capability are always allowed to generate keys."
3323
  msgstr ""
3324
 
3325
+ #: includes/admin/settings/register-settings.php:395
3326
  msgid ""
3327
  "Visit the <a href=\"%s\" target=\"_blank\">REST API documentation</a> for "
3328
  "further information."
3329
  msgstr ""
3330
 
3331
+ #: includes/admin/settings/register-settings.php:407
3332
+ #: includes/admin/settings/register-settings.php:1291
3333
+ msgid "Gateway Settings"
3334
+ msgstr ""
3335
+
3336
+ #: includes/admin/settings/register-settings.php:413
3337
  msgid "Test Mode"
3338
  msgstr ""
3339
 
3340
+ #: includes/admin/settings/register-settings.php:414
3341
  msgid ""
3342
  "While in test mode no live transactions are processed. To fully use test "
3343
  "mode, you must have a sandbox (test) account for the payment gateway you "
3344
  "are testing."
3345
  msgstr ""
3346
 
3347
+ #: includes/admin/settings/register-settings.php:420
3348
  msgid "Choose the payment gateways you want to enable."
3349
  msgstr ""
3350
 
3351
+ #: includes/admin/settings/register-settings.php:426
3352
  msgid "Default Gateway"
3353
  msgstr ""
3354
 
3355
+ #: includes/admin/settings/register-settings.php:427
3356
  msgid "This gateway will be loaded automatically with the checkout page."
3357
  msgstr ""
3358
 
3359
+ #: includes/admin/settings/register-settings.php:433
3360
  msgid "Accepted Payment Method Icons"
3361
  msgstr ""
3362
 
3363
+ #: includes/admin/settings/register-settings.php:434
3364
+ msgid "Display icons for the selected payment methods"
3365
  msgstr ""
3366
 
3367
+ #: includes/admin/settings/register-settings.php:434
3368
  msgid ""
3369
  "You will also need to configure your gateway settings if you are accepting "
3370
+ "credit cards"
3371
+ msgstr ""
3372
+
3373
+ #: includes/admin/settings/register-settings.php:454
3374
+ #: includes/admin/settings/register-settings.php:1295
3375
+ msgid "Email Settings"
3376
  msgstr ""
3377
 
3378
+ #: includes/admin/settings/register-settings.php:459
3379
  msgid "Email Template"
3380
  msgstr ""
3381
 
3382
+ #: includes/admin/settings/register-settings.php:460
3383
  msgid ""
3384
  "Choose a template. Click \"Save Changes\" then \"Preview Purchase Receipt\" "
3385
  "to see the new template."
3386
  msgstr ""
3387
 
3388
+ #: includes/admin/settings/register-settings.php:466
3389
  msgid "Logo"
3390
  msgstr ""
3391
 
3392
+ #: includes/admin/settings/register-settings.php:467
3393
  msgid ""
3394
  "Upload or choose a logo to be displayed at the top of the purchase receipt "
3395
  "emails. Displayed on HTML emails only."
3396
  msgstr ""
3397
 
3398
+ #: includes/admin/settings/register-settings.php:480
3399
+ #: includes/admin/settings/register-settings.php:1296
3400
+ msgid "Purchase Receipts"
3401
+ msgstr ""
3402
+
3403
+ #: includes/admin/settings/register-settings.php:485
3404
  msgid "From Name"
3405
  msgstr ""
3406
 
3407
+ #: includes/admin/settings/register-settings.php:486
3408
  msgid ""
3409
  "The name purchase receipts are said to come from. This should probably be "
3410
  "your site or shop name."
3411
  msgstr ""
3412
 
3413
+ #: includes/admin/settings/register-settings.php:492
3414
  msgid "From Email"
3415
  msgstr ""
3416
 
3417
+ #: includes/admin/settings/register-settings.php:493
3418
  msgid ""
3419
  "Email to send purchase receipts from. This will act as the \"from\" and "
3420
  "\"reply-to\" address."
3421
  msgstr ""
3422
 
3423
+ #: includes/admin/settings/register-settings.php:499
3424
  msgid "Purchase Email Subject"
3425
  msgstr ""
3426
 
3427
+ #: includes/admin/settings/register-settings.php:500
3428
+ msgid "Enter the subject line for the purchase receipt email"
3429
  msgstr ""
3430
 
3431
+ #: includes/admin/settings/register-settings.php:502
3432
+ #: includes/admin/settings/register-settings.php:509
3433
+ #: includes/admin/settings/register-settings.php:513
3434
+ #: includes/emails/functions.php:40 includes/emails/functions.php:44
3435
+ #: includes/emails/functions.php:82 includes/emails/functions.php:86
3436
  #: includes/emails/template.php:141
3437
  msgid "Purchase Receipt"
3438
  msgstr ""
3439
 
3440
+ #: includes/admin/settings/register-settings.php:506
3441
  msgid "Purchase Email Heading"
3442
  msgstr ""
3443
 
3444
+ #: includes/admin/settings/register-settings.php:507
3445
+ msgid "Enter the heading for the purchase receipt email"
3446
  msgstr ""
3447
 
3448
+ #: includes/admin/settings/register-settings.php:514
3449
  msgid ""
3450
  "Enter the text that is sent as purchase receipt email to users after "
3451
  "completion of a successful purchase. HTML is accepted. Available template "
3452
  "tags:"
3453
  msgstr ""
3454
 
3455
+ #: includes/admin/settings/register-settings.php:516
3456
  #: includes/emails/template.php:159
3457
  msgid "Dear"
3458
  msgstr ""
3459
 
3460
+ #: includes/admin/settings/register-settings.php:516
3461
  #: includes/emails/template.php:160
3462
  msgid ""
3463
  "Thank you for your purchase. Please click on the link(s) below to download "
3464
  "your files."
3465
  msgstr ""
3466
 
3467
+ #: includes/admin/settings/register-settings.php:522
3468
+ msgid "Sale Notifications"
3469
+ msgstr ""
3470
+
3471
+ #: includes/admin/settings/register-settings.php:527
3472
  msgid "Sale Notification Subject"
3473
  msgstr ""
3474
 
3475
+ #: includes/admin/settings/register-settings.php:528
3476
+ msgid "Enter the subject line for the sale notification email"
3477
  msgstr ""
3478
 
3479
+ #: includes/admin/settings/register-settings.php:534
3480
  msgid "Sale Notification"
3481
  msgstr ""
3482
 
3483
+ #: includes/admin/settings/register-settings.php:535
3484
  msgid ""
3485
  "Enter the text that is sent as sale notification email after completion of "
3486
  "a purchase. HTML is accepted. Available template tags:"
3487
  msgstr ""
3488
 
3489
+ #: includes/admin/settings/register-settings.php:541
3490
  msgid "Sale Notification Emails"
3491
  msgstr ""
3492
 
3493
+ #: includes/admin/settings/register-settings.php:542
3494
  msgid ""
3495
  "Enter the email address(es) that should receive a notification anytime a "
3496
+ "sale is made, one per line"
3497
  msgstr ""
3498
 
3499
+ #: includes/admin/settings/register-settings.php:548
3500
  msgid "Disable Admin Notifications"
3501
  msgstr ""
3502
 
3503
+ #: includes/admin/settings/register-settings.php:549
3504
  msgid "Check this box if you do not want to receive sales notification emails."
3505
  msgstr ""
3506
 
3507
+ #: includes/admin/settings/register-settings.php:561
3508
+ #: includes/admin/settings/register-settings.php:1300
3509
+ msgid "Style Settings"
3510
+ msgstr ""
3511
+
3512
+ #: includes/admin/settings/register-settings.php:566
3513
  msgid "Disable Styles"
3514
  msgstr ""
3515
 
3516
+ #: includes/admin/settings/register-settings.php:567
3517
  msgid ""
3518
  "Check this to disable all included styling of buttons, checkout fields, and "
3519
  "all other elements."
3520
  msgstr ""
3521
 
3522
+ #: includes/admin/settings/register-settings.php:569
3523
  msgid "Disabling Styles"
3524
  msgstr ""
3525
 
3526
+ #: includes/admin/settings/register-settings.php:570
3527
  msgid ""
3528
  "If your theme has a complete custom CSS file for Easy Digital Downloads, "
3529
  "you may wish to disable our default styles. This is not recommended unless "
3530
+ "your sure your theme has a complete custom CSS."
3531
  msgstr ""
3532
 
3533
+ #: includes/admin/settings/register-settings.php:574
3534
  msgid "Buttons"
3535
  msgstr ""
3536
 
3537
+ #: includes/admin/settings/register-settings.php:575
3538
  msgid "Options for add to cart and purchase buttons"
3539
  msgstr ""
3540
 
3541
+ #: includes/admin/settings/register-settings.php:580
3542
  msgid "Default Button Style"
3543
  msgstr ""
3544
 
3545
+ #: includes/admin/settings/register-settings.php:581
3546
  msgid "Choose the style you want to use for the buttons."
3547
  msgstr ""
3548
 
3549
+ #: includes/admin/settings/register-settings.php:587
3550
  msgid "Default Button Color"
3551
  msgstr ""
3552
 
3553
+ #: includes/admin/settings/register-settings.php:588
3554
  msgid "Choose the color you want to use for the buttons."
3555
  msgstr ""
3556
 
3557
+ #: includes/admin/settings/register-settings.php:601
3558
+ #: includes/admin/settings/register-settings.php:1303
3559
+ msgid "Tax Settings"
3560
+ msgstr ""
3561
+
3562
+ #: includes/admin/settings/register-settings.php:606
3563
  msgid "Need help?"
3564
  msgstr ""
3565
 
3566
+ #: includes/admin/settings/register-settings.php:607
3567
  msgid ""
3568
  "Visit the <a href=\"%s\" target=\"_blank\">Tax setup documentation</a> for "
3569
  "further information. If you need VAT support, there are options listed on "
3570
  "the documentation page."
3571
  msgstr ""
3572
 
3573
+ #: includes/admin/settings/register-settings.php:612
3574
  msgid "Enable Taxes"
3575
  msgstr ""
3576
 
3577
+ #: includes/admin/settings/register-settings.php:613
3578
  msgid "Check this to enable taxes on purchases."
3579
  msgstr ""
3580
 
3581
+ #: includes/admin/settings/register-settings.php:615
3582
  msgid "Enabling Taxes"
3583
  msgstr ""
3584
 
3585
+ #: includes/admin/settings/register-settings.php:616
3586
  msgid ""
3587
  "With taxes enabled, Easy Digital Downloads will use the rules below to "
3588
  "charge tax to customers. With taxes enabled, customers are required to "
3589
  "input their address on checkout so that taxes can be properly calculated."
3590
  msgstr ""
3591
 
3592
+ #: includes/admin/settings/register-settings.php:620
3593
  msgid "Tax Rates"
3594
  msgstr ""
3595
 
3596
+ #: includes/admin/settings/register-settings.php:621
3597
  msgid ""
3598
  "Add tax rates for specific regions. Enter a percentage, such as 6.5 for "
3599
  "6.5%."
3600
  msgstr ""
3601
 
3602
+ #: includes/admin/settings/register-settings.php:626
3603
+ #: includes/admin/settings/register-settings.php:630
3604
  msgid "Fallback Tax Rate"
3605
  msgstr ""
3606
 
3607
+ #: includes/admin/settings/register-settings.php:627
3608
  msgid ""
3609
  "Customers not in a specific rate will be charged this tax rate. Enter a "
3610
  "percentage, such as 6.5 for 6.5%. "
3611
  msgstr ""
3612
 
3613
+ #: includes/admin/settings/register-settings.php:631
3614
  msgid ""
3615
  "If the customer's address fails to meet the above tax rules, you can define "
3616
  "a `default` tax rate to be applied to all other customers. Enter a "
3617
  "percentage, such as 6.5 for 6.5%."
3618
  msgstr ""
3619
 
3620
+ #: includes/admin/settings/register-settings.php:635
3621
  msgid "Prices entered with tax"
3622
  msgstr ""
3623
 
3624
+ #: includes/admin/settings/register-settings.php:636
3625
  msgid "This option affects how you enter prices."
3626
  msgstr ""
3627
 
3628
+ #: includes/admin/settings/register-settings.php:640
3629
  msgid "Yes, I will enter prices inclusive of tax"
3630
  msgstr ""
3631
 
3632
+ #: includes/admin/settings/register-settings.php:641
3633
  msgid "No, I will enter prices exclusive of tax"
3634
  msgstr ""
3635
 
3636
+ #: includes/admin/settings/register-settings.php:643
3637
  msgid "Prices Inclusive of Tax"
3638
  msgstr ""
3639
 
3640
+ #: includes/admin/settings/register-settings.php:644
3641
  msgid ""
3642
  "When using prices inclusive of tax, you will be entering your prices as the "
3643
  "total amount you want a customer to pay for the download, including tax. "
3645
  "for the defined total price."
3646
  msgstr ""
3647
 
3648
+ #: includes/admin/settings/register-settings.php:648
3649
  msgid "Display Tax Rate on Prices"
3650
  msgstr ""
3651
 
3652
+ #: includes/admin/settings/register-settings.php:649
3653
  msgid "Some countries require a notice when product prices include tax."
3654
  msgstr ""
3655
 
3656
+ #: includes/admin/settings/register-settings.php:654
3657
  msgid "Display during checkout"
3658
  msgstr ""
3659
 
3660
+ #: includes/admin/settings/register-settings.php:655
3661
  msgid "Should prices on the checkout page be shown with or without tax?"
3662
  msgstr ""
3663
 
3664
+ #: includes/admin/settings/register-settings.php:659
3665
  msgid "Including tax"
3666
  msgstr ""
3667
 
3668
+ #: includes/admin/settings/register-settings.php:660
3669
  msgid "Excluding tax"
3670
  msgstr ""
3671
 
3672
+ #: includes/admin/settings/register-settings.php:662
3673
  msgid "Taxes Displayed for Products on Checkout"
3674
  msgstr ""
3675
 
3676
+ #: includes/admin/settings/register-settings.php:663
3677
  msgid ""
3678
  "This option will determine whether the product price displays with or "
3679
  "without tax on checkout."
3680
  msgstr ""
3681
 
3682
+ #: includes/admin/settings/register-settings.php:681
3683
+ #: includes/admin/settings/register-settings.php:1310
3684
+ msgid "Misc Settings"
3685
+ msgstr ""
3686
+
3687
+ #: includes/admin/settings/register-settings.php:686
3688
+ #: includes/admin/settings/register-settings.php:689
3689
  msgid "Redirect to Checkout"
3690
  msgstr ""
3691
 
3692
+ #: includes/admin/settings/register-settings.php:687
3693
  msgid "Immediately redirect to checkout after adding an item to the cart?"
3694
  msgstr ""
3695
 
3696
+ #: includes/admin/settings/register-settings.php:690
3697
  msgid ""
3698
  "When enabled, once an item has been added to the cart, the customer will be "
3699
  "redirected directly to your checkout page. This is useful for stores that "
3700
  "sell single items."
3701
  msgstr ""
3702
 
3703
+ #: includes/admin/settings/register-settings.php:694
3704
+ msgid "Item Quantities"
 
 
 
 
 
 
 
 
 
 
3705
  msgstr ""
3706
 
3707
+ #: includes/admin/settings/register-settings.php:695
3708
+ msgid "Allow item quantities to be changed."
 
 
3709
  msgstr ""
3710
 
3711
+ #: includes/admin/settings/register-settings.php:700
3712
  msgid "Remove Data on Uninstall?"
3713
  msgstr ""
3714
 
3715
+ #: includes/admin/settings/register-settings.php:701
3716
  msgid ""
3717
  "Check this box if you would like EDD to completely remove all of its data "
3718
  "when the plugin is deleted."
3719
  msgstr ""
3720
 
3721
+ #: includes/admin/settings/register-settings.php:708
3722
+ #: includes/admin/settings/register-settings.php:1311
3723
+ msgid "Checkout Settings"
3724
+ msgstr ""
3725
+
3726
+ #: includes/admin/settings/register-settings.php:713
3727
  msgid "Enforce SSL on Checkout"
3728
  msgstr ""
3729
 
3730
+ #: includes/admin/settings/register-settings.php:714
3731
  msgid ""
3732
  "Check this to force users to be redirected to the secure checkout page. You "
3733
  "must have an SSL certificate installed to use this option."
3734
  msgstr ""
3735
 
3736
+ #: includes/admin/settings/register-settings.php:719
3737
+ #: includes/admin/settings/register-settings.php:722
3738
  msgid "Require Login"
3739
  msgstr ""
3740
 
3741
+ #: includes/admin/settings/register-settings.php:720
3742
  msgid "Require that users be logged-in to purchase files."
3743
  msgstr ""
3744
 
3745
+ #: includes/admin/settings/register-settings.php:723
3746
  msgid ""
3747
  "You can require that customers create and login to user accounts prior to "
3748
  "purchasing from your store by enabling this option. When unchecked, users "
3749
  "can purchase without being logged in by using their name and email address."
3750
  msgstr ""
3751
 
3752
+ #: includes/admin/settings/register-settings.php:727
3753
  msgid "Show Register / Login Form?"
3754
  msgstr ""
3755
 
3756
+ #: includes/admin/settings/register-settings.php:728
3757
  msgid ""
3758
  "Display the registration and login forms on the checkout page for "
3759
  "non-logged-in users."
3760
  msgstr ""
3761
 
3762
+ #: includes/admin/settings/register-settings.php:732
3763
  msgid "Registration and Login Forms"
3764
  msgstr ""
3765
 
3766
+ #: includes/admin/settings/register-settings.php:733
3767
  msgid "Registration Form Only"
3768
  msgstr ""
3769
 
3770
+ #: includes/admin/settings/register-settings.php:734
3771
  msgid "Login Form Only"
3772
  msgstr ""
3773
 
3774
+ #: includes/admin/settings/register-settings.php:740
3775
  msgid "Multiple Discounts"
3776
  msgstr ""
3777
 
3778
+ #: includes/admin/settings/register-settings.php:741
3779
  msgid "Allow customers to use multiple discounts on the same purchase?"
3780
  msgstr ""
3781
 
3782
+ #: includes/admin/settings/register-settings.php:746
3783
  msgid "Enable Cart Saving"
3784
  msgstr ""
3785
 
3786
+ #: includes/admin/settings/register-settings.php:747
3787
  msgid "Check this to enable cart saving on the checkout."
3788
  msgstr ""
3789
 
3790
+ #: includes/admin/settings/register-settings.php:749
3791
  msgid "Cart Saving"
3792
  msgstr ""
3793
 
3794
+ #: includes/admin/settings/register-settings.php:750
3795
  msgid ""
3796
  "Cart saving allows shoppers to create a temporary link to their current "
3797
  "shopping cart so they can come back to it later, or share it with someone."
3798
  msgstr ""
3799
 
3800
+ #: includes/admin/settings/register-settings.php:756
3801
+ #: includes/admin/settings/register-settings.php:1312
3802
+ msgid "Button Text"
 
 
 
 
 
 
 
3803
  msgstr ""
3804
 
3805
+ #: includes/admin/settings/register-settings.php:761
3806
+ msgid "Complete Purchase Text"
3807
  msgstr ""
3808
 
3809
+ #: includes/admin/settings/register-settings.php:762
3810
+ msgid "The button label for completing a purchase."
 
3811
  msgstr ""
3812
 
3813
+ #: includes/admin/settings/register-settings.php:768
3814
  msgid "Add to Cart Text"
3815
  msgstr ""
3816
 
3817
+ #: includes/admin/settings/register-settings.php:769
3818
  msgid "Text shown on the Add to Cart Buttons."
3819
  msgstr ""
3820
 
3821
+ #: includes/admin/settings/register-settings.php:775
3822
  msgid "Buy Now Text"
3823
  msgstr ""
3824
 
3825
+ #: includes/admin/settings/register-settings.php:776
3826
  msgid "Text shown on the Buy Now Buttons."
3827
  msgstr ""
3828
 
3829
+ #: includes/admin/settings/register-settings.php:784
3830
+ msgid "File Download Settings"
3831
+ msgstr ""
3832
+
3833
+ #: includes/admin/settings/register-settings.php:789
3834
+ #: includes/admin/settings/register-settings.php:792
3835
  msgid "Download Method"
3836
  msgstr ""
3837
 
3838
+ #: includes/admin/settings/register-settings.php:790
3839
  msgid "Select the file download method. Note, not all methods work on all servers."
3840
  msgstr ""
3841
 
3842
+ #: includes/admin/settings/register-settings.php:793
3843
  msgid ""
3844
  "Due to its consistency in multiple platforms and better file protection, "
3845
  "'forced' is the default method. Because Easy Digital Downloads uses PHP to "
3850
  "method can help resolve this."
3851
  msgstr ""
3852
 
3853
+ #: includes/admin/settings/register-settings.php:795
3854
  msgid "Forced"
3855
  msgstr ""
3856
 
3857
+ #: includes/admin/settings/register-settings.php:796
3858
  msgid "Redirect"
3859
  msgstr ""
3860
 
3861
+ #: includes/admin/settings/register-settings.php:801
3862
  msgid "Symlink File Downloads?"
3863
  msgstr ""
3864
 
3865
+ #: includes/admin/settings/register-settings.php:802
3866
  msgid ""
3867
  "Check this if you are delivering really large files or having problems with "
3868
  "file downloads completing."
3869
  msgstr ""
3870
 
3871
+ #: includes/admin/settings/register-settings.php:808
3872
  msgid ""
3873
  "The maximum number of times files can be downloaded for purchases. Can be "
3874
  "overwritten for each %s."
3875
  msgstr ""
3876
 
3877
+ #: includes/admin/settings/register-settings.php:811
3878
  msgid "File Download Limits"
3879
  msgstr ""
3880
 
3881
+ #: includes/admin/settings/register-settings.php:812
3882
  msgid ""
3883
  "Set the global default for the number of times a customer can download "
3884
  "items they purchase. Using a value of 0 is unlimited. This can be defined "
3886
  "individual purchase."
3887
  msgstr ""
3888
 
3889
+ #: includes/admin/settings/register-settings.php:816
3890
+ #: includes/admin/settings/register-settings.php:818
3891
  msgid "Download Link Expiration"
3892
  msgstr ""
3893
 
3894
+ #: includes/admin/settings/register-settings.php:817
3895
  msgid ""
3896
  "How long should download links be valid for? Default is 24 hours from the "
3897
  "time they are generated. Enter a time in hours."
3898
  msgstr ""
3899
 
3900
+ #: includes/admin/settings/register-settings.php:819
3901
  msgid ""
3902
  "When a customer receives a link to their downloads via email, in their "
3903
  "receipt, or in their purchase history, the link will only be valid for the "
3906
  "customer."
3907
  msgstr ""
3908
 
3909
+ #: includes/admin/settings/register-settings.php:827
3910
  msgid "Disable Redownload?"
3911
  msgstr ""
3912
 
3913
+ #: includes/admin/settings/register-settings.php:828
3914
  msgid ""
3915
  "Check this if you do not want to allow users to redownload items from their "
3916
  "purchase history."
3917
  msgstr ""
3918
 
3919
+ #: includes/admin/settings/register-settings.php:835
3920
+ #: includes/admin/settings/register-settings.php:1314
3921
+ msgid "Accounting Settings"
3922
+ msgstr ""
3923
+
3924
+ #: includes/admin/settings/register-settings.php:840
3925
  msgid "Enable SKU Entry"
3926
  msgstr ""
3927
 
3928
+ #: includes/admin/settings/register-settings.php:841
3929
  msgid ""
3930
  "Check this box to allow entry of product SKUs. SKUs will be shown on "
3931
  "purchase receipt and exported purchase histories."
3932
  msgstr ""
3933
 
3934
+ #: includes/admin/settings/register-settings.php:846
3935
  msgid "Sequential Order Numbers"
3936
  msgstr ""
3937
 
3938
+ #: includes/admin/settings/register-settings.php:847
3939
  msgid "Check this box to enable sequential order numbers."
3940
  msgstr ""
3941
 
3942
+ #: includes/admin/settings/register-settings.php:852
3943
  msgid "Sequential Starting Number"
3944
  msgstr ""
3945
 
3946
+ #: includes/admin/settings/register-settings.php:853
3947
  msgid "The number at which the sequence should begin."
3948
  msgstr ""
3949
 
3950
+ #: includes/admin/settings/register-settings.php:860
3951
  msgid "Sequential Number Prefix"
3952
  msgstr ""
3953
 
3954
+ #: includes/admin/settings/register-settings.php:861
3955
  msgid "A prefix to prepend to all sequential order numbers."
3956
  msgstr ""
3957
 
3958
+ #: includes/admin/settings/register-settings.php:866
3959
  msgid "Sequential Number Postfix"
3960
  msgstr ""
3961
 
3962
+ #: includes/admin/settings/register-settings.php:867
3963
  msgid "A postfix to append to all sequential order numbers."
3964
  msgstr ""
3965
 
3966
+ #: includes/admin/settings/register-settings.php:874
3967
+ msgid "Agreement Settings"
3968
+ msgstr ""
3969
+
3970
+ #: includes/admin/settings/register-settings.php:879
3971
  msgid "Agree to Terms"
3972
  msgstr ""
3973
 
3974
+ #: includes/admin/settings/register-settings.php:880
3975
  msgid ""
3976
  "Check this to show an agree to terms on the checkout that users must agree "
3977
  "to before purchasing."
3978
  msgstr ""
3979
 
3980
+ #: includes/admin/settings/register-settings.php:885
3981
  msgid "Agree to Terms Label"
3982
  msgstr ""
3983
 
3984
+ #: includes/admin/settings/register-settings.php:886
3985
  msgid "Label shown next to the agree to terms check box."
3986
  msgstr ""
3987
 
3988
+ #: includes/admin/settings/register-settings.php:892
3989
  msgid "Agreement Text"
3990
  msgstr ""
3991
 
3992
+ #: includes/admin/settings/register-settings.php:893
3993
  msgid "If Agree to Terms is checked, enter the agreement terms here."
3994
  msgstr ""
3995
 
3996
+ #: includes/admin/settings/register-settings.php:903
3997
  msgid "Buy Now Disabled"
3998
  msgstr ""
3999
 
4000
+ #: includes/admin/settings/register-settings.php:904
4001
  msgid ""
4002
  "Buy Now buttons are only available for stores that have a single supported "
4003
  "gateway active and that do not use taxes."
4004
  msgstr ""
4005
 
4006
+ #: includes/admin/settings/register-settings.php:996
4007
  msgid "Settings updated."
4008
  msgstr ""
4009
 
4010
+ #: includes/admin/settings/register-settings.php:1124
4011
  msgid "Error setting default gateway. No gateways are enabled."
4012
  msgstr ""
4013
 
4014
+ #: includes/admin/settings/register-settings.php:1137
4015
  msgid "%s could not be set as the default gateway. It must first be enabled."
4016
  msgstr ""
4017
 
4018
+ #: includes/admin/settings/register-settings.php:1241
4019
  msgid "Licenses"
4020
  msgstr ""
4021
 
4022
+ #: includes/admin/settings/register-settings.php:1244
4023
  msgid "Misc"
4024
  msgstr ""
4025
 
4026
+ #: includes/admin/settings/register-settings.php:1292
4027
  #: includes/gateways/functions.php:25 includes/gateways/paypal-standard.php:33
4028
  msgid "PayPal Standard"
4029
  msgstr ""
4030
 
4031
+ #: includes/admin/settings/register-settings.php:1297
 
 
 
 
4032
  msgid "New Sale Notifications"
4033
  msgstr ""
4034
 
4035
+ #: includes/admin/settings/register-settings.php:1306
4036
  msgid "Main"
4037
  msgstr ""
4038
 
4039
+ #: includes/admin/settings/register-settings.php:1315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4040
  msgid "Terms of Agreement"
4041
  msgstr ""
4042
 
4043
+ #: includes/admin/settings/register-settings.php:1731
 
 
 
 
 
 
4044
  msgid "The callback function used for the %s setting is missing."
4045
  msgstr ""
4046
 
4047
+ #: includes/admin/settings/register-settings.php:1871
4048
  msgid "Upload File"
4049
  msgstr ""
4050
 
4051
+ #: includes/admin/settings/register-settings.php:1972
4052
  msgid "Country Wide"
4053
  msgstr ""
4054
 
4055
+ #: includes/admin/settings/register-settings.php:1973
4056
  msgid "Rate"
4057
  msgstr ""
4058
 
4059
+ #: includes/admin/settings/register-settings.php:1973
4060
  msgid ""
4061
  "<strong>Regional tax rates: </strong>When a customer enters an address on "
4062
  "checkout that matches the specified region for this tax rate, the cart tax "
4063
  "will adjust automatically. Enter a percentage, such as 6.5 for 6.5%."
4064
  msgstr ""
4065
 
4066
+ #: includes/admin/settings/register-settings.php:1990
4067
+ #: includes/admin/settings/register-settings.php:2035
4068
  msgid "Choose a country"
4069
  msgstr ""
4070
 
4071
+ #: includes/admin/settings/register-settings.php:2005
4072
  msgid "Choose a state"
4073
  msgstr ""
4074
 
4075
+ #: includes/admin/settings/register-settings.php:2017
4076
+ #: includes/admin/settings/register-settings.php:2045
4077
  msgid "Apply to whole country"
4078
  msgstr ""
4079
 
4080
+ #: includes/admin/settings/register-settings.php:2020
4081
+ #: includes/admin/settings/register-settings.php:2048
4082
  msgid "Remove Rate"
4083
  msgstr ""
4084
 
4085
+ #: includes/admin/settings/register-settings.php:2053
4086
  msgid "Add Tax Rate"
4087
  msgstr ""
4088
 
4089
+ #: includes/admin/settings/register-settings.php:2106
4090
  msgid ""
4091
  "Your license key expired on %s. Please <a href=\"%s\" "
4092
  "target=\"_blank\">renew your license key</a>."
4093
  msgstr ""
4094
 
4095
+ #: includes/admin/settings/register-settings.php:2119
4096
  msgid ""
4097
  "Your license key has been disabled. Please <a href=\"%s\" "
4098
  "target=\"_blank\">contact support</a> for more information."
4099
  msgstr ""
4100
 
4101
+ #: includes/admin/settings/register-settings.php:2131
4102
  msgid ""
4103
  "Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
4104
  "page</a> and verify it."
4105
  msgstr ""
4106
 
4107
+ #: includes/admin/settings/register-settings.php:2144
4108
  msgid ""
4109
  "Your %s is not active for this URL. Please <a href=\"%s\" "
4110
  "target=\"_blank\">visit your account page</a> to manage your license key "
4111
  "URLs."
4112
  msgstr ""
4113
 
4114
+ #: includes/admin/settings/register-settings.php:2156
4115
  msgid "This appears to be an invalid license key for %s."
4116
  msgstr ""
4117
 
4118
+ #: includes/admin/settings/register-settings.php:2165
4119
  msgid ""
4120
  "Your license key has reached its activation limit. <a href=\"%s\">View "
4121
  "possible upgrades</a> now."
4122
  msgstr ""
4123
 
4124
+ #: includes/admin/settings/register-settings.php:2174
4125
  msgid ""
4126
  "The key you entered belongs to a bundle, please use the product specific "
4127
  "license key."
4128
  msgstr ""
4129
 
4130
+ #: includes/admin/settings/register-settings.php:2182
4131
  msgid "unknown_error"
4132
  msgstr ""
4133
 
4134
+ #: includes/admin/settings/register-settings.php:2183
4135
  msgid ""
4136
  "There was an error with this license key: %s. Please <a href=\"%s\">contact "
4137
  "our support team</a>."
4138
  msgstr ""
4139
 
4140
+ #: includes/admin/settings/register-settings.php:2203
4141
  msgid "License key never expires."
4142
  msgstr ""
4143
 
4144
+ #: includes/admin/settings/register-settings.php:2210
4145
  msgid ""
4146
  "Your license key expires soon! It expires on %s. <a href=\"%s\" "
4147
  "target=\"_blank\">Renew your license key</a>."
4148
  msgstr ""
4149
 
4150
+ #: includes/admin/settings/register-settings.php:2220
4151
  msgid "Your license key expires on %s."
4152
  msgstr ""
4153
 
4154
+ #: includes/admin/settings/register-settings.php:2238
4155
  msgid "To receive updates, please enter your valid %s license key."
4156
  msgstr ""
4157
 
4158
+ #: includes/admin/settings/register-settings.php:2251
4159
  msgid "Deactivate License"
4160
  msgstr ""
4161
 
4162
+ #: includes/admin/thickbox.php:29 includes/admin/thickbox.php:130
4163
  msgid "Insert %s"
4164
  msgstr ""
4165
 
4166
+ #: includes/admin/thickbox.php:62
4167
  msgid "You must choose a download"
4168
  msgstr ""
4169
 
4170
+ #: includes/admin/thickbox.php:88
4171
  msgid "Use the form below to insert the shortcode for purchasing a %s"
4172
  msgstr ""
4173
 
4174
+ #: includes/admin/thickbox.php:95
4175
  msgid "Choose the button behavior"
4176
  msgstr ""
4177
 
4178
+ #: includes/admin/thickbox.php:97
4179
  msgid "Direct Purchase Link"
4180
  msgstr ""
4181
 
4182
+ #: includes/admin/thickbox.php:103
4183
  msgid "Choose a style"
4184
  msgstr ""
4185
 
4186
+ #: includes/admin/thickbox.php:117
4187
  msgid "Choose a button color"
4188
  msgstr ""
4189
 
4190
+ #: includes/admin/thickbox.php:127
4191
  msgid "Link text . . ."
4192
  msgstr ""
4193
 
4216
  msgid "Customers, earnings, sales, discounts and logs successfully reset."
4217
  msgstr ""
4218
 
4219
+ #: includes/admin/tools.php:31
4220
  msgid "Easy Digital Downloads Tools"
4221
  msgstr ""
4222
 
4223
+ #: includes/admin/tools.php:73
4224
  msgid "Beta Versions"
4225
  msgstr ""
4226
 
4227
+ #: includes/admin/tools.php:76
4228
  msgid "System Info"
4229
  msgstr ""
4230
 
4231
+ #: includes/admin/tools.php:77
 
 
 
 
4232
  msgid "Import/Export"
4233
  msgstr ""
4234
 
4235
+ #: includes/admin/tools.php:98
4236
  msgid "Banned Emails"
4237
  msgstr ""
4238
 
4239
+ #: includes/admin/tools.php:100
4240
+ msgid ""
4241
+ "Emails placed in the box below will not be allowed to make purchases. To "
4242
+ "ban an entire domain, enter the domain starting with \"@\"."
4243
  msgstr ""
4244
 
4245
+ #: includes/admin/tools.php:104
4246
+ msgid "Enter emails and/or domains (starting with @) to disallow, one per line."
 
 
4247
  msgstr ""
4248
 
4249
+ #: includes/admin/tools.php:109 includes/admin/tools.php:294
4250
  msgid "Save"
4251
  msgstr ""
4252
 
4253
+ #: includes/admin/tools.php:138
4254
  msgid "Use these tools to recount / reset store stats."
4255
  msgstr ""
4256
 
4257
+ #: includes/admin/tools.php:145 includes/scripts.php:83
4258
  msgid "Please select an option"
4259
  msgstr ""
4260
 
4261
+ #: includes/admin/tools.php:146
4262
  msgid "Recount Store Earnings and Sales"
4263
  msgstr ""
4264
 
4265
+ #: includes/admin/tools.php:147
4266
  msgid "Recount Earnings and Sales for a %s"
4267
  msgstr ""
4268
 
4269
+ #: includes/admin/tools.php:148
4270
  msgid "Recount Earnings and Sales for All %s"
4271
  msgstr ""
4272
 
4273
+ #: includes/admin/tools.php:151
4274
  msgid "Reset Store"
4275
  msgstr ""
4276
 
4277
+ #: includes/admin/tools.php:170
4278
  msgid "Recalculates the total store earnings and sales."
4279
  msgstr ""
4280
 
4281
+ #: includes/admin/tools.php:171
4282
  msgid "Recalculates the earnings and sales stats for a specific %s."
4283
  msgstr ""
4284
 
4285
+ #: includes/admin/tools.php:172
4286
  msgid "Recalculates the earnings and sales stats for all %s."
4287
  msgstr ""
4288
 
4289
+ #: includes/admin/tools.php:173
4290
  msgid "Recalculates the lifetime value and purchase counts for all customers."
4291
  msgstr ""
4292
 
4293
+ #: includes/admin/tools.php:175
4294
  msgid ""
4295
  "<strong>Deletes</strong> all payment records, customers, and related log "
4296
  "entries."
4297
  msgstr ""
4298
 
4299
+ #: includes/admin/tools.php:205 includes/admin/tools.php:213
4300
  msgid "Clear Incomplete Upgrade Notice"
4301
  msgstr ""
4302
 
4303
+ #: includes/admin/tools.php:207
4304
  msgid ""
4305
  "Sometimes a database upgrade notice may not be cleared after an upgrade is "
4306
  "completed due to conflicts with other extensions or other minor issues."
4307
  msgstr ""
4308
 
4309
+ #: includes/admin/tools.php:208
4310
  msgid ""
4311
  "If you're certain these upgrades have been completed, you can clear these "
4312
  "upgrade notices by clicking the button below. If you have any questions "
4314
  "we'll be happy to help."
4315
  msgstr ""
4316
 
4317
+ #: includes/admin/tools.php:245
4318
  msgid ""
4319
  "These API keys allow you to use the <a href=\"%s\">EDD REST API</a> to "
4320
  "retrieve store data in JSON or XML for external applications or devices, "
4321
  "such as the <a href=\"%s\">EDD mobile app</a>."
4322
  msgstr ""
4323
 
4324
+ #: includes/admin/tools.php:274
4325
  msgid "Enable Beta Versions"
4326
  msgstr ""
4327
 
4328
+ #: includes/admin/tools.php:276
4329
  msgid ""
4330
  "Checking any of the below checkboxes will opt you in to receive pre-release "
4331
  "update notifications. You can opt-out at any time. Pre-release updates do "
4333
  "update notifications."
4334
  msgstr ""
4335
 
4336
+ #: includes/admin/tools.php:286
4337
  msgid "Get updates for pre-release versions of %s"
4338
  msgstr ""
4339
 
4340
+ #: includes/admin/tools.php:448
4341
  msgid "Import Payment History"
4342
  msgstr ""
4343
 
4344
+ #: includes/admin/tools.php:450
4345
  msgid "Import a CSV file of payment records."
4346
  msgstr ""
4347
 
4348
+ #: includes/admin/tools.php:460 includes/admin/tools.php:742
4349
  msgid "Import CSV"
4350
  msgstr ""
4351
 
4352
+ #: includes/admin/tools.php:470
4353
  msgid ""
4354
  "Each column loaded from the CSV needs to be mapped to a payment field. "
4355
  "Select the column that should be mapped to each field below. Any columns "
4357
  "guide</a> for assistance with importing payment records."
4358
  msgstr ""
4359
 
4360
+ #: includes/admin/tools.php:479
4361
  msgid "Payment Field"
4362
  msgstr ""
4363
 
4364
+ #: includes/admin/tools.php:480 includes/admin/tools.php:762
4365
  msgid "CSV Column"
4366
  msgstr ""
4367
 
4368
+ #: includes/admin/tools.php:481 includes/admin/tools.php:763
4369
  msgid "Data Preview"
4370
  msgstr ""
4371
 
4372
+ #: includes/admin/tools.php:486
4373
  msgid "Currency Code"
4374
  msgstr ""
4375
 
4376
+ #: includes/admin/tools.php:489 includes/admin/tools.php:498
4377
+ #: includes/admin/tools.php:507 includes/admin/tools.php:516
4378
+ #: includes/admin/tools.php:525 includes/admin/tools.php:534
4379
+ #: includes/admin/tools.php:543 includes/admin/tools.php:552
4380
+ #: includes/admin/tools.php:561 includes/admin/tools.php:570
4381
+ #: includes/admin/tools.php:579 includes/admin/tools.php:588
4382
+ #: includes/admin/tools.php:597 includes/admin/tools.php:606
4383
+ #: includes/admin/tools.php:615 includes/admin/tools.php:624
4384
+ #: includes/admin/tools.php:633 includes/admin/tools.php:642
4385
+ #: includes/admin/tools.php:651 includes/admin/tools.php:660
4386
+ #: includes/admin/tools.php:669 includes/admin/tools.php:678
4387
+ #: includes/admin/tools.php:687 includes/admin/tools.php:696
4388
+ #: includes/admin/tools.php:705 includes/admin/tools.php:714
4389
+ #: includes/admin/tools.php:771 includes/admin/tools.php:780
4390
+ #: includes/admin/tools.php:789 includes/admin/tools.php:798
4391
+ #: includes/admin/tools.php:807 includes/admin/tools.php:816
4392
+ #: includes/admin/tools.php:825 includes/admin/tools.php:834
4393
+ #: includes/admin/tools.php:843 includes/admin/tools.php:852
4394
+ #: includes/admin/tools.php:861 includes/admin/tools.php:870
4395
+ #: includes/admin/tools.php:879 includes/admin/tools.php:888
4396
+ #: includes/admin/tools.php:897 includes/admin/tools.php:906
4397
+ #: includes/admin/tools.php:915
4398
  msgid "- Ignore this field -"
4399
  msgstr ""
4400
 
4401
+ #: includes/admin/tools.php:492 includes/admin/tools.php:501
4402
+ #: includes/admin/tools.php:510 includes/admin/tools.php:519
4403
+ #: includes/admin/tools.php:528 includes/admin/tools.php:537
4404
+ #: includes/admin/tools.php:546 includes/admin/tools.php:555
4405
+ #: includes/admin/tools.php:564 includes/admin/tools.php:573
4406
+ #: includes/admin/tools.php:582 includes/admin/tools.php:591
4407
+ #: includes/admin/tools.php:600 includes/admin/tools.php:609
4408
+ #: includes/admin/tools.php:618 includes/admin/tools.php:627
4409
+ #: includes/admin/tools.php:636 includes/admin/tools.php:645
4410
+ #: includes/admin/tools.php:654 includes/admin/tools.php:663
4411
+ #: includes/admin/tools.php:672 includes/admin/tools.php:681
4412
+ #: includes/admin/tools.php:690 includes/admin/tools.php:699
4413
+ #: includes/admin/tools.php:708 includes/admin/tools.php:717
4414
+ #: includes/admin/tools.php:774 includes/admin/tools.php:783
4415
+ #: includes/admin/tools.php:792 includes/admin/tools.php:801
4416
+ #: includes/admin/tools.php:810 includes/admin/tools.php:819
4417
+ #: includes/admin/tools.php:828 includes/admin/tools.php:837
4418
+ #: includes/admin/tools.php:846 includes/admin/tools.php:855
4419
+ #: includes/admin/tools.php:864 includes/admin/tools.php:873
4420
+ #: includes/admin/tools.php:882 includes/admin/tools.php:891
4421
+ #: includes/admin/tools.php:900 includes/admin/tools.php:909
4422
+ #: includes/admin/tools.php:918
4423
  msgid "- select field to preview data -"
4424
  msgstr ""
4425
 
4426
+ #: includes/admin/tools.php:531
4427
  msgid "Discount Code(s)"
4428
  msgstr ""
4429
 
4430
+ #: includes/admin/tools.php:558
4431
  msgid "Parent Payment ID"
4432
  msgstr ""
4433
 
4434
+ #: includes/admin/tools.php:603
4435
  msgid "Purchased Product(s)"
4436
  msgstr ""
4437
 
4438
+ #: includes/admin/tools.php:621 templates/checkout_cart.php:102
4439
  #: templates/shortcode-receipt.php:98
4440
  msgid "Subtotal"
4441
  msgstr ""
4442
 
4443
+ #: includes/admin/tools.php:639 templates/checkout_cart.php:129
4444
  msgid "Total"
4445
  msgstr ""
4446
 
4447
+ #: includes/admin/tools.php:666
4448
  msgid "Address Line 1"
4449
  msgstr ""
4450
 
4451
+ #: includes/admin/tools.php:675
4452
  msgid "Address Line 2"
4453
  msgstr ""
4454
 
4455
+ #: includes/admin/tools.php:722 includes/admin/tools.php:923
4456
  msgid "Process Import"
4457
  msgstr ""
4458
 
4459
+ #: includes/admin/tools.php:730
4460
  msgid "Import Download Products"
4461
  msgstr ""
4462
 
4463
+ #: includes/admin/tools.php:732
4464
  msgid "Import a CSV file of products."
4465
  msgstr ""
4466
 
4467
+ #: includes/admin/tools.php:752
4468
  msgid ""
4469
  "Each column loaded from the CSV needs to be mapped to a Download product "
4470
  "field. Select the column that should be mapped to each field below. Any "
4473
  "products."
4474
  msgstr ""
4475
 
4476
+ #: includes/admin/tools.php:761
4477
  msgid "Product Field"
4478
  msgstr ""
4479
 
4480
+ #: includes/admin/tools.php:768
4481
  msgid "Product Author"
4482
  msgstr ""
4483
 
4484
+ #: includes/admin/tools.php:777
4485
  msgid "Product Categories"
4486
  msgstr ""
4487
 
4488
+ #: includes/admin/tools.php:786
4489
  msgid "Product Creation Date"
4490
  msgstr ""
4491
 
4492
+ #: includes/admin/tools.php:795
4493
  msgid "Product Description"
4494
  msgstr ""
4495
 
4496
+ #: includes/admin/tools.php:804
4497
  msgid "Product Excerpt"
4498
  msgstr ""
4499
 
4500
+ #: includes/admin/tools.php:813
4501
  msgid "Product Image"
4502
  msgstr ""
4503
 
4504
+ #: includes/admin/tools.php:822
4505
  msgid "Product Notes"
4506
  msgstr ""
4507
 
4508
+ #: includes/admin/tools.php:831
4509
  msgid "Product Price(s)"
4510
  msgstr ""
4511
 
4512
+ #: includes/admin/tools.php:840
4513
  msgid "Product SKU"
4514
  msgstr ""
4515
 
4516
+ #: includes/admin/tools.php:849
4517
  msgid "Product Slug"
4518
  msgstr ""
4519
 
4520
+ #: includes/admin/tools.php:858
4521
  msgid "Product Status"
4522
  msgstr ""
4523
 
4524
+ #: includes/admin/tools.php:867
4525
  msgid "Product Tags"
4526
  msgstr ""
4527
 
4528
+ #: includes/admin/tools.php:876
4529
  msgid "Product Title"
4530
  msgstr ""
4531
 
4532
+ #: includes/admin/tools.php:885
4533
  msgid "Download Files"
4534
  msgstr ""
4535
 
4536
+ #: includes/admin/tools.php:903
4537
  msgid "Sale Count"
4538
  msgstr ""
4539
 
4540
+ #: includes/admin/tools.php:931
4541
  msgid "Export Settings"
4542
  msgstr ""
4543
 
4544
+ #: includes/admin/tools.php:933
4545
  msgid ""
4546
  "Export the Easy Digital Downloads settings for this site as a .json file. "
4547
  "This allows you to easily import the configuration into another site."
4548
  msgstr ""
4549
 
4550
+ #: includes/admin/tools.php:934
4551
  msgid ""
4552
  "To export shop data (purchases, customers, etc), visit the <a "
4553
  "href=\"%s\">Reports</a> page."
4554
  msgstr ""
4555
 
4556
+ #: includes/admin/tools.php:946
4557
  msgid "Import Settings"
4558
  msgstr ""
4559
 
4560
+ #: includes/admin/tools.php:948
4561
  msgid ""
4562
  "Import the Easy Digital Downloads settings from a .json file. This file can "
4563
  "be obtained by exporting the settings on another site using the form above."
4564
  msgstr ""
4565
 
4566
+ #: includes/admin/tools.php:956
4567
  msgid "Import"
4568
  msgstr ""
4569
 
4570
+ #: includes/admin/tools.php:1021
4571
  msgid "Please upload a valid .json file"
4572
  msgstr ""
4573
 
4574
+ #: includes/admin/tools.php:1027
4575
  msgid "Please upload a file to import"
4576
  msgstr ""
4577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4578
  #: includes/admin/tracking.php:256
4579
  msgid ""
4580
  "Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and "
4581
+ "our newsletter and immediately be emailed a 20%s discount to the EDD shop, "
4582
+ "valid towards the <a href=\"%s\" target=\"_blank\">purchase of "
4583
+ "extensions</a>. No sensitive data is tracked."
4584
  msgstr ""
4585
 
4586
  #: includes/admin/tracking.php:257
4695
  msgid "Step %d of approximately %d running"
4696
  msgstr ""
4697
 
4698
+ #: includes/ajax-functions.php:564 includes/ajax-functions.php:616
4699
  msgid "No results found"
4700
  msgstr ""
4701
 
4702
+ #: includes/ajax-functions.php:665 includes/ajax-functions.php:757
4703
+ #: includes/class-edd-html-elements.php:289
4704
  msgid "No users found"
4705
  msgstr ""
4706
 
4707
+ #: includes/ajax-functions.php:707
4708
  msgid "All Prices"
4709
  msgstr ""
4710
 
4711
+ #: includes/api/class-edd-api-v2.php:143 includes/api/class-edd-api.php:1059
4712
+ #: includes/api/class-edd-api.php:1243 includes/api/class-edd-api.php:1425
4713
  msgid "Product %s not found!"
4714
  msgstr ""
4715
 
4716
+ #: includes/api/class-edd-api-v2.php:218 includes/api/class-edd-api.php:1164
4717
+ #: includes/api/class-edd-api.php:1260
4718
  msgid "The end date must be later than the start date!"
4719
  msgstr ""
4720
 
4721
+ #: includes/api/class-edd-api-v2.php:319 includes/api/class-edd-api.php:1000
4722
  msgid "Customer %s not found!"
4723
  msgstr ""
4724
 
4725
+ #: includes/api/class-edd-api-v2.php:324 includes/api/class-edd-api.php:1005
4726
  msgid "No customers found!"
4727
  msgstr ""
4728
 
4729
+ #: includes/api/class-edd-api.php:460
4730
  msgid "You must specify both a token and API key!"
4731
  msgstr ""
4732
 
4733
+ #: includes/api/class-edd-api.php:477
4734
  msgid "Your request could not be authenticated!"
4735
  msgstr ""
4736
 
4737
+ #: includes/api/class-edd-api.php:495
4738
  msgid "Invalid API key!"
4739
  msgstr ""
4740
 
4741
+ #: includes/api/class-edd-api.php:511
4742
  msgid "Invalid API version!"
4743
  msgstr ""
4744
 
4745
+ #: includes/api/class-edd-api.php:685
4746
  msgid "Invalid query!"
4747
  msgstr ""
4748
 
4749
+ #: includes/api/class-edd-api.php:1169 includes/api/class-edd-api.php:1265
4750
  msgid "Invalid or no date range specified!"
4751
  msgstr ""
4752
 
4753
+ #: includes/api/class-edd-api.php:1571
4754
  msgid "No discounts found!"
4755
  msgstr ""
4756
 
4757
+ #: includes/api/class-edd-api.php:1618
4758
  msgid "Discount %s not found!"
4759
  msgstr ""
4760
 
4761
+ #: includes/api/class-edd-api.php:1691
4762
  msgid "No download logs found!"
4763
  msgstr ""
4764
 
4765
+ #: includes/api/class-edd-api.php:1947 includes/user-functions.php:1011
4766
  msgid "Easy Digital Downloads API Keys"
4767
  msgstr ""
4768
 
4769
+ #: includes/api/class-edd-api.php:1956 includes/user-functions.php:1016
4770
  msgid "Generate API Key"
4771
  msgstr ""
4772
 
4773
+ #: includes/api/class-edd-api.php:1958 includes/user-functions.php:1018
4774
  msgid "Public key:"
4775
  msgstr ""
4776
 
4777
+ #: includes/api/class-edd-api.php:1959 includes/user-functions.php:1019
4778
  msgid "Secret key:"
4779
  msgstr ""
4780
 
4781
+ #: includes/api/class-edd-api.php:1960 includes/user-functions.php:1020
4782
  msgid "Token:"
4783
  msgstr ""
4784
 
4785
+ #: includes/api/class-edd-api.php:1962 includes/user-functions.php:1022
4786
  msgid "Revoke API Keys"
4787
  msgstr ""
4788
 
4789
+ #: includes/api/class-edd-api.php:1988
4790
  msgid "User ID Required"
4791
  msgstr ""
4792
 
4793
+ #: includes/api/class-edd-api.php:2000 includes/api/class-edd-api.php:2002
4794
  msgid "You do not have permission to %s API keys for this user"
4795
  msgstr ""
4796
 
4797
+ #: includes/cart/class-edd-cart.php:902
4798
  msgid "includes %s tax"
4799
  msgstr ""
4800
 
4801
+ #: includes/cart/class-edd-cart.php:904
4802
  msgid "excludes %s tax"
4803
  msgstr ""
4804
 
4805
+ #: includes/cart/class-edd-cart.php:1419 includes/cart/class-edd-cart.php:1482
4806
  #: templates/shortcode-profile-editor.php:22
4807
  msgid "Success"
4808
  msgstr ""
4809
 
4810
+ #: includes/cart/class-edd-cart.php:1420
4811
  msgid "Cart saved successfully. You can restore your cart using this URL:"
4812
  msgstr ""
4813
 
4814
+ #: includes/cart/class-edd-cart.php:1456 includes/cart/class-edd-cart.php:1470
4815
  msgid "Cart restoration failed. Invalid token."
4816
  msgstr ""
4817
 
4818
+ #: includes/cart/class-edd-cart.php:1464 includes/cart/class-edd-cart.php:1473
4819
  msgid "The cart cannot be restored. Invalid token."
4820
  msgstr ""
4821
 
4822
+ #: includes/cart/class-edd-cart.php:1482
4823
  msgid "Cart restored successfully."
4824
  msgstr ""
4825
 
4923
  msgid "The date your credit card expires, typically on the front of the card."
4924
  msgstr ""
4925
 
4926
+ #: includes/checkout/template.php:331
4927
  msgid "Billing Details"
4928
  msgstr ""
4929
 
4930
+ #: includes/checkout/template.php:340
4931
  msgid "The primary billing address for your credit card."
4932
  msgstr ""
4933
 
4934
+ #: includes/checkout/template.php:341
4935
  msgid "Address line 1"
4936
  msgstr ""
4937
 
4938
+ #: includes/checkout/template.php:345
4939
  msgid "Billing Address Line 2 (optional)"
4940
  msgstr ""
4941
 
4942
+ #: includes/checkout/template.php:350
4943
  msgid "The suite, apt no, PO box, etc, associated with your billing address."
4944
  msgstr ""
4945
 
4946
+ #: includes/checkout/template.php:351
4947
  msgid "Address line 2"
4948
  msgstr ""
4949
 
4950
+ #: includes/checkout/template.php:355
4951
  msgid "Billing City"
4952
  msgstr ""
4953
 
4954
+ #: includes/checkout/template.php:360
4955
  msgid "The city for your billing address."
4956
  msgstr ""
4957
 
4958
+ #: includes/checkout/template.php:365
4959
  msgid "Billing Zip / Postal Code"
4960
  msgstr ""
4961
 
4962
+ #: includes/checkout/template.php:370
4963
  msgid "The zip or postal code for your billing address."
4964
  msgstr ""
4965
 
4966
+ #: includes/checkout/template.php:375
4967
  msgid "Billing Country"
4968
  msgstr ""
4969
 
4970
+ #: includes/checkout/template.php:380
4971
  msgid "The country for your billing address."
4972
  msgstr ""
4973
 
4974
+ #: includes/checkout/template.php:399
4975
  msgid "Billing State / Province"
4976
  msgstr ""
4977
 
4978
+ #: includes/checkout/template.php:404
4979
  msgid "The state or province for your billing address."
4980
  msgstr ""
4981
 
4982
+ #: includes/checkout/template.php:462
4983
  msgid "Already have an account?"
4984
  msgstr ""
4985
 
4986
+ #: includes/checkout/template.php:462 includes/checkout/template.php:564
4987
  msgid "Login"
4988
  msgstr ""
4989
 
4990
+ #: includes/checkout/template.php:468
4991
  msgid "Create an account"
4992
  msgstr ""
4993
 
4994
+ #: includes/checkout/template.php:468
4995
  msgid "(optional)"
4996
  msgstr ""
4997
 
4998
+ #: includes/checkout/template.php:477
4999
  msgid "The username you will use to log into your account."
5000
  msgstr ""
5001
 
5002
+ #: includes/checkout/template.php:482 includes/checkout/template.php:488
5003
+ #: includes/checkout/template.php:553 templates/shortcode-login.php:19
5004
+ #: templates/shortcode-register.php:28
5005
  msgid "Password"
5006
  msgstr ""
5007
 
5008
+ #: includes/checkout/template.php:487
5009
  msgid "The password used to access your account."
5010
  msgstr ""
5011
 
5012
+ #: includes/checkout/template.php:492
5013
  msgid "Password Again"
5014
  msgstr ""
5015
 
5016
+ #: includes/checkout/template.php:497
5017
  msgid "Confirm your password."
5018
  msgstr ""
5019
 
5020
+ #: includes/checkout/template.php:498
5021
  msgid "Confirm password"
5022
  msgstr ""
5023
 
5024
+ #: includes/checkout/template.php:535
5025
  msgid "Need to create an account?"
5026
  msgstr ""
5027
 
5028
+ #: includes/checkout/template.php:537 templates/shortcode-register.php:44
5029
  msgid "Register"
5030
  msgstr ""
5031
 
5032
+ #: includes/checkout/template.php:537
5033
  msgid "or checkout as a guest."
5034
  msgstr ""
5035
 
5036
+ #: includes/checkout/template.php:544 templates/shortcode-login.php:15
5037
  msgid "Username or Email"
5038
  msgstr ""
5039
 
5040
+ #: includes/checkout/template.php:549
5041
  msgid "Your username or email address"
5042
  msgstr ""
5043
 
5044
+ #: includes/checkout/template.php:558
5045
  msgid "Your password"
5046
  msgstr ""
5047
 
5048
+ #: includes/checkout/template.php:593
5049
  msgid "Select Payment Method"
5050
  msgstr ""
5051
 
5052
+ #: includes/checkout/template.php:729
5053
  msgid "Have a discount code?"
5054
  msgstr ""
5055
 
5056
+ #: includes/checkout/template.php:733
5057
  msgid "Discount"
5058
  msgstr ""
5059
 
5060
+ #: includes/checkout/template.php:735
5061
  msgid "Enter a coupon code if you have one."
5062
  msgstr ""
5063
 
5064
+ #: includes/checkout/template.php:736 includes/process-purchase.php:322
5065
+ #: includes/scripts.php:60
5066
  msgid "Enter discount"
5067
  msgstr ""
5068
 
5069
+ #: includes/checkout/template.php:758
5070
  msgid "Agree to Terms?"
5071
  msgstr ""
5072
 
5073
+ #: includes/checkout/template.php:769
5074
  msgid "Show Terms"
5075
  msgstr ""
5076
 
5077
+ #: includes/checkout/template.php:770
5078
  msgid "Hide Terms"
5079
  msgstr ""
5080
 
5081
+ #: includes/checkout/template.php:791
5082
  msgid "Purchase Total:"
5083
  msgstr ""
5084
 
5085
+ #: includes/checkout/template.php:817
5086
  msgid "Go back"
5087
  msgstr ""
5088
 
5089
+ #: includes/checkout/template.php:840
5090
  msgid "Next"
5091
  msgstr ""
5092
 
5093
+ #: includes/checkout/template.php:876
5094
+ msgid "Free Download"
5095
+ msgstr ""
5096
+
5097
  #: includes/class-edd-cache-helper.php:117
5098
  msgid ""
5099
  "In order for <strong>database caching</strong> to work with Easy Digital "
5194
  msgid "ID: %d"
5195
  msgstr ""
5196
 
5197
+ #: includes/class-edd-cli.php:194 includes/class-edd-cli.php:456
5198
  msgid "Status: %s"
5199
  msgstr ""
5200
 
5246
  msgid "%d customers created in %d seconds"
5247
  msgstr ""
5248
 
5249
+ #: includes/class-edd-cli.php:328 includes/class-edd-html-elements.php:215
5250
  msgid "No customers found"
5251
  msgstr ""
5252
 
5254
  msgid "Customer User ID: %s"
5255
  msgstr ""
5256
 
5257
+ #: includes/class-edd-cli.php:335 includes/user-functions.php:538
5258
+ #: includes/user-functions.php:547
5259
  msgid "Username: %s"
5260
  msgstr ""
5261
 
5271
  msgid "Last Name: %s"
5272
  msgstr ""
5273
 
5274
+ #: includes/class-edd-cli.php:346 includes/class-edd-cli.php:383
5275
  msgid "Email: %s"
5276
  msgstr ""
5277
 
5287
  msgid "Total Downloads: %s"
5288
  msgstr ""
5289
 
5290
+ #: includes/class-edd-cli.php:376
5291
  msgid "No sales found"
5292
  msgstr ""
5293
 
5294
+ #: includes/class-edd-cli.php:382
5295
  msgid "Purchase Key: %s"
5296
  msgstr ""
5297
 
5298
+ #: includes/class-edd-cli.php:384
5299
  msgid "Date: %s"
5300
  msgstr ""
5301
 
5302
+ #: includes/class-edd-cli.php:385
5303
  msgid "Subtotal: %s"
5304
  msgstr ""
5305
 
5306
+ #: includes/class-edd-cli.php:386
5307
  msgid "Tax: %s"
5308
  msgstr ""
5309
 
5310
+ #: includes/class-edd-cli.php:389
5311
  msgid "Fees:"
5312
  msgstr ""
5313
 
5314
+ #: includes/class-edd-cli.php:392
5315
  msgid " Fee: %s - %s"
5316
  msgstr ""
5317
 
5318
+ #: includes/class-edd-cli.php:396
5319
  msgid "Total: %s"
5320
  msgstr ""
5321
 
5322
+ #: includes/class-edd-cli.php:398
5323
  msgid "Gateway: %s"
5324
  msgstr ""
5325
 
5326
+ #: includes/class-edd-cli.php:401
5327
  msgid "Products:"
5328
  msgstr ""
5329
 
5330
+ #: includes/class-edd-cli.php:405
5331
  msgid " Product: %s - %s"
5332
  msgstr ""
5333
 
5334
+ #: includes/class-edd-cli.php:436 includes/class-edd-html-elements.php:350
5335
  #: includes/shortcodes.php:270
5336
  msgid "No discounts found"
5337
  msgstr ""
5338
 
5339
+ #: includes/class-edd-cli.php:442
5340
  msgid "Name: %s"
5341
  msgstr ""
5342
 
5343
+ #: includes/class-edd-cli.php:443
5344
  msgid "Code: %s"
5345
  msgstr ""
5346
 
5347
+ #: includes/class-edd-cli.php:451
5348
  msgid "Amount: %s"
5349
  msgstr ""
5350
 
5351
+ #: includes/class-edd-cli.php:452
5352
  msgid "Uses: %s"
5353
  msgstr ""
5354
 
5355
+ #: includes/class-edd-cli.php:453
5356
  msgid "Max Uses: %s"
5357
  msgstr ""
5358
 
5359
+ #: includes/class-edd-cli.php:453
5360
  msgid "Unlimited"
5361
  msgstr ""
5362
 
5363
+ #: includes/class-edd-cli.php:454
5364
  msgid "Start Date: %s"
5365
  msgstr ""
5366
 
5367
+ #: includes/class-edd-cli.php:454
5368
  msgid "No Start Date"
5369
  msgstr ""
5370
 
5371
+ #: includes/class-edd-cli.php:455
5372
  msgid "Expiration Date: %s"
5373
  msgstr ""
5374
 
5375
+ #: includes/class-edd-cli.php:455
5376
  msgid "No Expiration"
5377
  msgstr ""
5378
 
5379
+ #: includes/class-edd-cli.php:461
5380
  msgid "Product Requirements:"
5381
  msgstr ""
5382
 
5383
+ #: includes/class-edd-cli.php:464
5384
  msgid " Product: %s"
5385
  msgstr ""
5386
 
5387
+ #: includes/class-edd-cli.php:470
5388
  msgid "Global Discount: %s"
5389
  msgstr ""
5390
 
5391
+ #: includes/class-edd-cli.php:471
5392
  msgid "Single Use: %s"
5393
  msgstr ""
5394
 
5395
+ #: includes/class-edd-cli.php:499
5396
  msgid "No action specified, did you mean"
5397
  msgstr ""
5398
 
5399
+ #: includes/class-edd-cli.php:501
5400
  msgid "Invalid action specified, did you mean"
5401
  msgstr ""
5402
 
5403
+ #: includes/class-edd-cli.php:558
5404
  msgid "Invalid status '%s', defaulting to 'complete'"
5405
  msgstr ""
5406
 
5407
+ #: includes/class-edd-cli.php:594
5408
  msgid "Specified ID is not a product"
5409
  msgstr ""
5410
 
5411
+ #: includes/class-edd-cli.php:703
5412
  msgid "Created %s payments"
5413
  msgstr ""
5414
 
5416
  msgid "Once Weekly"
5417
  msgstr ""
5418
 
5419
+ #: includes/class-edd-customer.php:185 includes/class-edd-discount.php:254
5420
  #: includes/class-edd-download.php:196
5421
  msgid "Can't get property %s"
5422
  msgstr ""
5423
 
5424
+ #: includes/class-edd-discount.php:1502
5425
  msgid "This discount has reached its maximum usage."
5426
  msgstr ""
5427
 
5428
+ #: includes/class-edd-discount.php:1536
5429
  msgid "Minimum order of %s not met."
5430
  msgstr ""
5431
 
5432
+ #: includes/class-edd-discount.php:1626 includes/class-edd-discount.php:1655
5433
  msgid "The product requirements for this discount are not met."
5434
  msgstr ""
5435
 
5436
+ #: includes/class-edd-discount.php:1671
5437
  msgid "This discount is not valid for the cart contents."
5438
  msgstr ""
5439
 
5440
+ #: includes/class-edd-discount.php:1763
5441
  msgid "This discount has already been redeemed."
5442
  msgstr ""
5443
 
5444
+ #: includes/class-edd-discount.php:1844
5445
  msgid "This discount is expired."
5446
  msgstr ""
5447
 
5448
+ #: includes/class-edd-discount.php:1849
5449
  msgid "This discount is not active."
5450
  msgstr ""
5451
 
5453
  msgid "New Download Product"
5454
  msgstr ""
5455
 
5456
+ #: includes/class-edd-html-elements.php:44 includes/scripts.php:207
5457
  msgid "Choose a %s"
5458
  msgstr ""
5459
 
5460
+ #: includes/class-edd-html-elements.php:196
 
 
 
 
5461
  msgid "Select a Customer"
5462
  msgstr ""
5463
 
5464
+ #: includes/class-edd-html-elements.php:210
5465
  msgid "No customer attached"
5466
  msgstr ""
5467
 
5468
+ #: includes/class-edd-html-elements.php:270
5469
  msgid "Select a User"
5470
  msgstr ""
5471
 
5472
+ #: includes/class-edd-html-elements.php:358
 
 
 
 
5473
  msgid "Select a discount"
5474
  msgstr ""
5475
 
5476
+ #: includes/class-edd-html-elements.php:735
5477
  msgid "Enter username"
5478
  msgstr ""
5479
 
5524
 
5525
  #: includes/class-edd-register-meta.php:162
5526
  msgid ""
5527
+ "Defines how this products `Purchase` button should behave, either add to "
5528
+ "cart or buy now."
5529
  msgstr ""
5530
 
5531
  #: includes/class-edd-register-meta.php:177
5600
  msgid "Improper date provided."
5601
  msgstr ""
5602
 
5603
+ #: includes/country-functions.php:1569
5604
  msgid "A Coru&ntilde;a"
5605
  msgstr ""
5606
 
5607
+ #: includes/country-functions.php:1570
5608
  msgid "Araba"
5609
  msgstr ""
5610
 
5611
+ #: includes/country-functions.php:1571
5612
  msgid "Albacete"
5613
  msgstr ""
5614
 
5615
+ #: includes/country-functions.php:1572
5616
  msgid "Alicante"
5617
  msgstr ""
5618
 
5619
+ #: includes/country-functions.php:1573
5620
  msgid "Almer&iacute;a"
5621
  msgstr ""
5622
 
5623
+ #: includes/country-functions.php:1574
5624
  msgid "Asturias"
5625
  msgstr ""
5626
 
5627
+ #: includes/country-functions.php:1575
5628
  msgid "&Aacute;vila"
5629
  msgstr ""
5630
 
5631
+ #: includes/country-functions.php:1576
5632
  msgid "Badajoz"
5633
  msgstr ""
5634
 
5635
+ #: includes/country-functions.php:1577
5636
  msgid "Baleares"
5637
  msgstr ""
5638
 
5639
+ #: includes/country-functions.php:1578
5640
  msgid "Barcelona"
5641
  msgstr ""
5642
 
5643
+ #: includes/country-functions.php:1579
5644
  msgid "Burgos"
5645
  msgstr ""
5646
 
5647
+ #: includes/country-functions.php:1580
5648
  msgid "C&aacute;ceres"
5649
  msgstr ""
5650
 
5651
+ #: includes/country-functions.php:1581
5652
  msgid "C&aacute;diz"
5653
  msgstr ""
5654
 
5655
+ #: includes/country-functions.php:1582
5656
  msgid "Cantabria"
5657
  msgstr ""
5658
 
5659
+ #: includes/country-functions.php:1583
5660
  msgid "Castell&oacute;n"
5661
  msgstr ""
5662
 
5663
+ #: includes/country-functions.php:1584
5664
  msgid "Ceuta"
5665
  msgstr ""
5666
 
5667
+ #: includes/country-functions.php:1585
5668
  msgid "Ciudad Real"
5669
  msgstr ""
5670
 
5671
+ #: includes/country-functions.php:1586
5672
  msgid "C&oacute;rdoba"
5673
  msgstr ""
5674
 
5675
+ #: includes/country-functions.php:1587
5676
  msgid "Cuenca"
5677
  msgstr ""
5678
 
5679
+ #: includes/country-functions.php:1588
5680
  msgid "Girona"
5681
  msgstr ""
5682
 
5683
+ #: includes/country-functions.php:1589
5684
  msgid "Granada"
5685
  msgstr ""
5686
 
5687
+ #: includes/country-functions.php:1590
5688
  msgid "Guadalajara"
5689
  msgstr ""
5690
 
5691
+ #: includes/country-functions.php:1591
5692
  msgid "Gipuzkoa"
5693
  msgstr ""
5694
 
5695
+ #: includes/country-functions.php:1592
5696
  msgid "Huelva"
5697
  msgstr ""
5698
 
5699
+ #: includes/country-functions.php:1593
5700
  msgid "Huesca"
5701
  msgstr ""
5702
 
5703
+ #: includes/country-functions.php:1594
5704
  msgid "Ja&eacute;n"
5705
  msgstr ""
5706
 
5707
+ #: includes/country-functions.php:1595
5708
  msgid "La Rioja"
5709
  msgstr ""
5710
 
5711
+ #: includes/country-functions.php:1596
5712
  msgid "Las Palmas"
5713
  msgstr ""
5714
 
5715
+ #: includes/country-functions.php:1597
5716
  msgid "Le&oacute;n"
5717
  msgstr ""
5718
 
5719
+ #: includes/country-functions.php:1598
5720
  msgid "Lleida"
5721
  msgstr ""
5722
 
5723
+ #: includes/country-functions.php:1599
5724
  msgid "Lugo"
5725
  msgstr ""
5726
 
5727
+ #: includes/country-functions.php:1600
5728
  msgid "Madrid"
5729
  msgstr ""
5730
 
5731
+ #: includes/country-functions.php:1601
5732
  msgid "M&aacute;laga"
5733
  msgstr ""
5734
 
5735
+ #: includes/country-functions.php:1602
5736
  msgid "Melilla"
5737
  msgstr ""
5738
 
5739
+ #: includes/country-functions.php:1603
5740
  msgid "Murcia"
5741
  msgstr ""
5742
 
5743
+ #: includes/country-functions.php:1604
5744
  msgid "Navarra"
5745
  msgstr ""
5746
 
5747
+ #: includes/country-functions.php:1605
5748
  msgid "Ourense"
5749
  msgstr ""
5750
 
5751
+ #: includes/country-functions.php:1606
5752
  msgid "Palencia"
5753
  msgstr ""
5754
 
5755
+ #: includes/country-functions.php:1607
5756
  msgid "Pontevedra"
5757
  msgstr ""
5758
 
5759
+ #: includes/country-functions.php:1608
5760
  msgid "Salamanca"
5761
  msgstr ""
5762
 
5763
+ #: includes/country-functions.php:1609
5764
  msgid "Santa Cruz de Tenerife"
5765
  msgstr ""
5766
 
5767
+ #: includes/country-functions.php:1610
5768
  msgid "Segovia"
5769
  msgstr ""
5770
 
5771
+ #: includes/country-functions.php:1611
5772
  msgid "Sevilla"
5773
  msgstr ""
5774
 
5775
+ #: includes/country-functions.php:1612
5776
  msgid "Soria"
5777
  msgstr ""
5778
 
5779
+ #: includes/country-functions.php:1613
5780
  msgid "Tarragona"
5781
  msgstr ""
5782
 
5783
+ #: includes/country-functions.php:1614
5784
  msgid "Teruel"
5785
  msgstr ""
5786
 
5787
+ #: includes/country-functions.php:1615
5788
  msgid "Toledo"
5789
  msgstr ""
5790
 
5791
+ #: includes/country-functions.php:1616
5792
  msgid "Valencia"
5793
  msgstr ""
5794
 
5795
+ #: includes/country-functions.php:1617
5796
  msgid "Valladolid"
5797
  msgstr ""
5798
 
5799
+ #: includes/country-functions.php:1618
5800
  msgid "Bizkaia"
5801
  msgstr ""
5802
 
5803
+ #: includes/country-functions.php:1619
5804
  msgid "Zamora"
5805
  msgstr ""
5806
 
5807
+ #: includes/country-functions.php:1620
5808
  msgid "Zaragoza"
5809
  msgstr ""
5810
 
5906
  "of a purchase. HTML is accepted. Available template tags:"
5907
  msgstr ""
5908
 
5909
+ #: includes/deprecated-functions.php:517 includes/process-download.php:817
5910
  msgid "Sorry but you have hit your download limit for this file."
5911
  msgstr ""
5912
 
5931
  msgstr ""
5932
 
5933
  #: includes/emails/class-edd-email-tags.php:407
5934
+ #: includes/emails/class-edd-email-tags.php:528
5935
  #: templates/shortcode-receipt.php:128
5936
  msgid "Quantity"
5937
  msgstr ""
5938
 
5939
+ #: includes/emails/class-edd-email-tags.php:465
5940
+ #: templates/history-downloads.php:74 templates/shortcode-receipt.php:205
5941
  msgid "No downloadable files found."
5942
  msgstr ""
5943
 
5944
+ #: includes/emails/class-edd-email-tags.php:856
5945
  msgid "%1$sView it in your browser %2$s"
5946
  msgstr ""
5947
 
5948
+ #: includes/emails/class-edd-emails.php:170
5949
  msgid "Default Template"
5950
  msgstr ""
5951
 
5952
+ #: includes/emails/class-edd-emails.php:171
5953
  msgid "No template, plain text only"
5954
  msgstr ""
5955
 
5956
+ #: includes/emails/class-edd-emails.php:287
5957
  msgid "You cannot send email with EDD_Emails until init/admin_init has been reached"
5958
  msgstr ""
5959
 
5960
+ #: includes/emails/class-edd-emails.php:314
5961
  msgid ""
5962
  "Email from Easy Digital Downloads failed to send.\n"
5963
  "Send time: %s\n"
5966
  "\n"
5967
  msgstr ""
5968
 
5969
+ #: includes/emails/functions.php:131
5970
  msgid "New download purchase - Order #%1$s"
5971
  msgstr ""
5972
 
5973
+ #: includes/emails/functions.php:149
5974
  msgid "New Sale!"
5975
  msgstr ""
5976
 
5977
+ #: includes/emails/functions.php:194 includes/emails/template.php:214
5978
  msgid "Hello"
5979
  msgstr ""
5980
 
5981
+ #: includes/emails/functions.php:194 includes/emails/template.php:214
5982
  msgid "A %s purchase has been made"
5983
  msgstr ""
5984
 
5985
+ #: includes/emails/functions.php:195 includes/emails/template.php:215
5986
  msgid "%s sold:"
5987
  msgstr ""
5988
 
5989
+ #: includes/emails/functions.php:197 includes/emails/template.php:217
5990
  msgid "Purchased by: "
5991
  msgstr ""
5992
 
5993
+ #: includes/emails/functions.php:198 includes/emails/template.php:218
5994
  msgid "Amount: "
5995
  msgstr ""
5996
 
5997
+ #: includes/emails/functions.php:199 includes/emails/template.php:219
5998
  msgid "Payment Method: "
5999
  msgstr ""
6000
 
6001
+ #: includes/emails/functions.php:200 includes/emails/template.php:220
6002
  msgid "Thank you"
6003
  msgstr ""
6004
 
6026
  msgid "Send Test Email"
6027
  msgstr ""
6028
 
6029
+ #: includes/emails/template.php:245
6030
  msgid "Missing purchase key."
6031
  msgstr ""
6032
 
6033
+ #: includes/emails/template.php:260
6034
  msgid "Receipt"
6035
  msgstr ""
6036
 
6038
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
6039
  msgstr ""
6040
 
6041
+ #: includes/gateways/amazon-payments.php:211
6042
  msgid "There is an error with the Amazon Payments configuration."
6043
  msgstr ""
6044
 
6045
+ #: includes/gateways/amazon-payments.php:283
6046
+ #: includes/gateways/amazon-payments.php:284
6047
  msgid "Amazon"
6048
  msgstr ""
6049
 
6050
+ #: includes/gateways/amazon-payments.php:336
6051
  msgid "Amazon Payments"
6052
  msgstr ""
6053
 
6054
+ #: includes/gateways/amazon-payments.php:354
6055
  msgid "Amazon Payments Settings"
6056
  msgstr ""
6057
 
6058
+ #: includes/gateways/amazon-payments.php:359
6059
  msgid "Register with Amazon"
6060
  msgstr ""
6061
 
6062
+ #: includes/gateways/amazon-payments.php:361
6063
  msgid "Connect Easy Digital Downloads to Amazon"
6064
  msgstr ""
6065
 
6066
+ #: includes/gateways/amazon-payments.php:364
6067
  msgid "Once registration is complete, enter your API credentials below."
6068
  msgstr ""
6069
 
6070
+ #: includes/gateways/amazon-payments.php:370
6071
  msgid "Seller ID"
6072
  msgstr ""
6073
 
6074
+ #: includes/gateways/amazon-payments.php:371
6075
  msgid "Found in the Integration settings. Also called a Merchant ID"
6076
  msgstr ""
6077
 
6078
+ #: includes/gateways/amazon-payments.php:377
6079
  msgid "MWS Access Key"
6080
  msgstr ""
6081
 
6082
+ #: includes/gateways/amazon-payments.php:378
6083
+ #: includes/gateways/amazon-payments.php:385
6084
  msgid "Found on Seller Central in the MWS Keys section"
6085
  msgstr ""
6086
 
6087
+ #: includes/gateways/amazon-payments.php:384
6088
  msgid "MWS Secret Key"
6089
  msgstr ""
6090
 
6091
+ #: includes/gateways/amazon-payments.php:391
6092
  msgid "Client ID"
6093
  msgstr ""
6094
 
6095
+ #: includes/gateways/amazon-payments.php:392
6096
  msgid "The Amazon Client ID. Should look like `amzn1.application-oa2...`"
6097
  msgstr ""
6098
 
6099
+ #: includes/gateways/amazon-payments.php:398
6100
  msgid "Amazon MWS Callback URL"
6101
  msgstr ""
6102
 
6103
+ #: includes/gateways/amazon-payments.php:399
6104
  msgid ""
6105
  "The Return URL to provide in your MWS Application. Enter this under your "
6106
  "Login and Pay &rarr; Web Settings"
6107
  msgstr ""
6108
 
6109
+ #: includes/gateways/amazon-payments.php:407
6110
  msgid "Amazon Merchant IPN URL"
6111
  msgstr ""
6112
 
6113
+ #: includes/gateways/amazon-payments.php:408
6114
  msgid ""
6115
  "The IPN URL to provide in your MWS account. Enter this under your <a "
6116
  "href=\"%s\">Integration Settings</a>"
6117
  msgstr ""
6118
 
6119
+ #: includes/gateways/amazon-payments.php:718
6120
  msgid "Currently logged into Amazon as"
6121
  msgstr ""
6122
 
6123
+ #: includes/gateways/amazon-payments.php:719
6124
  msgid "Logout"
6125
  msgstr ""
6126
 
6127
+ #: includes/gateways/amazon-payments.php:876
6128
+ #: includes/gateways/amazon-payments.php:891
6129
  msgid "Missing Reference ID, please try again"
6130
  msgstr ""
6131
 
6132
+ #: includes/gateways/amazon-payments.php:927
6133
  msgid ""
6134
  "Your payment could not be authorized, please try a different payment "
6135
  "method. Reason: %s"
6136
  msgstr ""
6137
 
6138
+ #: includes/gateways/amazon-payments.php:974
6139
  msgid "There was an issue processing your payment. Amazon error: %s"
6140
  msgstr ""
6141
 
6142
+ #: includes/gateways/amazon-payments.php:1110
6143
  msgid "Invalid Amazon seller ID"
6144
  msgstr ""
6145
 
6146
+ #: includes/gateways/amazon-payments.php:1110
6147
+ #: includes/gateways/amazon-payments.php:1164
6148
+ #: includes/gateways/paypal-standard.php:404
6149
+ #: includes/gateways/paypal-standard.php:410
6150
+ #: includes/gateways/paypal-standard.php:484
6151
+ #: includes/gateways/paypal-standard.php:493
6152
+ #: includes/gateways/paypal-standard.php:552
6153
+ #: includes/gateways/paypal-standard.php:559
6154
  msgid "IPN Error"
6155
  msgstr ""
6156
 
6157
+ #: includes/gateways/amazon-payments.php:1134
6158
  msgid "Capture declined in Amazon"
6159
  msgstr ""
6160
 
6161
+ #: includes/gateways/amazon-payments.php:1152
6162
+ #: includes/gateways/amazon-payments.php:1240
6163
  msgid "Refund completed in Amazon. Refund ID: %s"
6164
  msgstr ""
6165
 
6166
+ #: includes/gateways/amazon-payments.php:1233
6167
  msgid "Refund declined in Amazon. Refund ID: %s"
6168
  msgstr ""
6169
 
6170
+ #: includes/gateways/amazon-payments.php:1246
6171
  msgid "Refund initiated in Amazon. Reference ID: %s"
6172
  msgstr ""
6173
 
6174
+ #: includes/gateways/amazon-payments.php:1255
6175
  msgid "Refund request failed in Amazon."
6176
  msgstr ""
6177
 
6191
  msgid "The requested price ID does not exist."
6192
  msgstr ""
6193
 
6194
+ #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:155
6195
  msgid "Nonce verification has failed"
6196
  msgstr ""
6197
 
6214
  msgstr ""
6215
 
6216
  #: includes/gateways/paypal-standard.php:63
6217
+ msgid "PayPal Page Style"
6218
  msgstr ""
6219
 
6220
  #: includes/gateways/paypal-standard.php:64
6221
+ msgid "Enter the name of the page style to use, or leave blank for default"
6222
  msgstr ""
6223
 
6224
  #: includes/gateways/paypal-standard.php:71
6225
  msgid ""
6226
+ "If payments are not getting marked as complete, then check this box. This "
6227
+ "forces the site to use a slightly less secure method of verifying "
6228
+ "purchases. See our <a href=\"%s\" target=\"_blank\">FAQ</a> for further "
6229
  "information."
6230
  msgstr ""
6231
 
6232
  #: includes/gateways/paypal-standard.php:77
 
 
 
 
 
 
 
 
 
 
 
 
6233
  msgid "Disable PayPal IPN Verification"
6234
  msgstr ""
6235
 
6236
+ #: includes/gateways/paypal-standard.php:85
6237
  msgid "API Credentials"
6238
  msgstr ""
6239
 
6240
+ #: includes/gateways/paypal-standard.php:88
6241
  msgid ""
6242
  "API credentials are necessary to process PayPal refunds from inside "
6243
  "WordPress. These can be obtained from <a href=\"%s\" target=\"_blank\">your "
6244
  "PayPal account</a>."
6245
  msgstr ""
6246
 
6247
+ #: includes/gateways/paypal-standard.php:94
6248
  msgid "Live API Username"
6249
  msgstr ""
6250
 
6251
+ #: includes/gateways/paypal-standard.php:95
6252
  msgid "Your PayPal live API username. "
6253
  msgstr ""
6254
 
6255
+ #: includes/gateways/paypal-standard.php:101
6256
  msgid "Live API Password"
6257
  msgstr ""
6258
 
6259
+ #: includes/gateways/paypal-standard.php:102
6260
  msgid "Your PayPal live API password."
6261
  msgstr ""
6262
 
6263
+ #: includes/gateways/paypal-standard.php:108
6264
  msgid "Live API Signature"
6265
  msgstr ""
6266
 
6267
+ #: includes/gateways/paypal-standard.php:109
6268
  msgid "Your PayPal live API signature."
6269
  msgstr ""
6270
 
6271
+ #: includes/gateways/paypal-standard.php:115
6272
  msgid "Test API Username"
6273
  msgstr ""
6274
 
6275
+ #: includes/gateways/paypal-standard.php:116
6276
  msgid "Your PayPal test API username."
6277
  msgstr ""
6278
 
6279
+ #: includes/gateways/paypal-standard.php:122
6280
  msgid "Test API Password"
6281
  msgstr ""
6282
 
6283
+ #: includes/gateways/paypal-standard.php:123
6284
  msgid "Your PayPal test API password."
6285
  msgstr ""
6286
 
6287
+ #: includes/gateways/paypal-standard.php:129
6288
  msgid "Test API Signature"
6289
  msgstr ""
6290
 
6291
+ #: includes/gateways/paypal-standard.php:130
6292
  msgid "Your PayPal test API signature."
6293
  msgstr ""
6294
 
6295
+ #: includes/gateways/paypal-standard.php:178
6296
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6297
  msgstr ""
6298
 
6299
+ #: includes/gateways/paypal-standard.php:404
6300
+ #: includes/gateways/paypal-standard.php:410
6301
  msgid "Invalid IPN verification response. IPN data: %s"
6302
  msgstr ""
6303
 
6304
+ #: includes/gateways/paypal-standard.php:484
6305
  msgid "Invalid business email in IPN response. IPN data: %s"
6306
  msgstr ""
6307
 
6308
+ #: includes/gateways/paypal-standard.php:486
6309
  msgid "Payment failed due to invalid PayPal business email."
6310
  msgstr ""
6311
 
6312
+ #: includes/gateways/paypal-standard.php:493
6313
  msgid "Invalid currency in IPN response. IPN data: %s"
6314
  msgstr ""
6315
 
6316
+ #: includes/gateways/paypal-standard.php:495
6317
  msgid "Payment failed due to invalid currency in PayPal IPN."
6318
  msgstr ""
6319
 
6320
+ #: includes/gateways/paypal-standard.php:552
6321
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6322
  msgstr ""
6323
 
6324
+ #: includes/gateways/paypal-standard.php:554
6325
  msgid "Payment failed due to invalid amount in PayPal IPN."
6326
  msgstr ""
6327
 
6328
+ #: includes/gateways/paypal-standard.php:559
6329
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6330
  msgstr ""
6331
 
6332
+ #: includes/gateways/paypal-standard.php:561
6333
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6334
  msgstr ""
6335
 
6336
+ #: includes/gateways/paypal-standard.php:567
6337
  #: tests/helpers/class-helper-payment.php:131
6338
  #: tests/helpers/class-helper-payment.php:234
6339
  #: tests/helpers/class-helper-payment.php:342
6344
  msgid "PayPal Transaction ID: %s"
6345
  msgstr ""
6346
 
6347
+ #: includes/gateways/paypal-standard.php:581
6348
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6349
  msgstr ""
6350
 
6351
+ #: includes/gateways/paypal-standard.php:588
6352
  msgid ""
6353
  "Payment requires a confirmed customer address and must be accepted manually "
6354
  "through PayPal"
6355
  msgstr ""
6356
 
6357
+ #: includes/gateways/paypal-standard.php:594
6358
  msgid ""
6359
  "Payment must be accepted manually through PayPal due to international "
6360
  "account regulations"
6361
  msgstr ""
6362
 
6363
+ #: includes/gateways/paypal-standard.php:600
6364
  msgid ""
6365
  "Payment received in non-shop currency and must be accepted manually through "
6366
  "PayPal"
6367
  msgstr ""
6368
 
6369
+ #: includes/gateways/paypal-standard.php:607
6370
  msgid ""
6371
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6372
  "violation of government regulations"
6373
  msgstr ""
6374
 
6375
+ #: includes/gateways/paypal-standard.php:613
6376
  msgid "Payment was sent to non-confirmed or non-registered email address."
6377
  msgstr ""
6378
 
6379
+ #: includes/gateways/paypal-standard.php:619
6380
  msgid "PayPal account must be upgraded before this payment can be accepted"
6381
  msgstr ""
6382
 
6383
+ #: includes/gateways/paypal-standard.php:625
6384
  msgid ""
6385
  "PayPal account is not verified. Verify account in order to accept this "
6386
  "payment"
6387
  msgstr ""
6388
 
6389
+ #: includes/gateways/paypal-standard.php:631
6390
  msgid ""
6391
  "Payment is pending for unknown reasons. Contact PayPal support for "
6392
  "assistance"
6393
  msgstr ""
6394
 
6395
+ #: includes/gateways/paypal-standard.php:672
6396
  msgid "Partial PayPal refund processed: %s"
6397
  msgstr ""
6398
 
6399
+ #: includes/gateways/paypal-standard.php:677
6400
  msgid "PayPal Payment #%s Refunded for reason: %s"
6401
  msgstr ""
6402
 
6403
+ #: includes/gateways/paypal-standard.php:678
6404
  msgid "PayPal Refund Transaction ID: %s"
6405
  msgstr ""
6406
 
6407
+ #: includes/gateways/paypal-standard.php:853
6408
  msgid "Refund Payment in PayPal"
6409
  msgstr ""
6410
 
6411
+ #: includes/gateways/paypal-standard.php:1002
6412
  msgid "PayPal refund failed for unknown reason."
6413
  msgstr ""
6414
 
6415
+ #: includes/gateways/paypal-standard.php:1012
6416
  msgid "PayPal refund transaction ID: %s"
6417
  msgstr ""
6418
 
6419
+ #: includes/gateways/paypal-standard.php:1016
6420
  msgid "PayPal refund failed: %s"
6421
  msgstr ""
6422
 
6423
+ #: includes/install.php:92 includes/template-functions.php:182
6424
+ #: templates/widget-cart-checkout.php:6 templates/widget-cart-empty.php:7
6425
+ msgid "Checkout"
6426
+ msgstr ""
6427
+
6428
  #: includes/install.php:111
6429
  msgid "Purchase Confirmation"
6430
  msgstr ""
6437
  msgid "Purchase History"
6438
  msgstr ""
6439
 
6440
+ #: includes/login-register.php:92
6441
  msgid "The password you entered is incorrect"
6442
  msgstr ""
6443
 
6444
+ #: includes/login-register.php:95 includes/process-purchase.php:646
6445
  msgid "The username you entered does not exist"
6446
  msgstr ""
6447
 
6448
+ #: includes/login-register.php:149 includes/login-register.php:157
6449
+ #: includes/process-purchase.php:524
6450
  msgid "Invalid username"
6451
  msgstr ""
6452
 
6453
+ #: includes/login-register.php:153 includes/process-purchase.php:517
6454
  msgid "Username already taken"
6455
  msgstr ""
6456
 
6457
+ #: includes/login-register.php:161
6458
  msgid "Email address already taken"
6459
  msgstr ""
6460
 
6461
+ #: includes/login-register.php:165 includes/process-purchase.php:464
6462
+ #: includes/process-purchase.php:539 includes/process-purchase.php:679
6463
  msgid "Invalid email"
6464
  msgstr ""
6465
 
6466
+ #: includes/login-register.php:169
6467
  msgid "Invalid payment email"
6468
  msgstr ""
6469
 
6470
+ #: includes/login-register.php:173
6471
  msgid "Please enter a password"
6472
  msgstr ""
6473
 
6474
+ #: includes/login-register.php:177
6475
  msgid "Passwords do not match"
6476
  msgstr ""
6477
 
6478
+ #: includes/misc-functions.php:304 tests/tests-misc.php:62
6479
  msgid "US Dollars (&#36;)"
6480
  msgstr ""
6481
 
6482
+ #: includes/misc-functions.php:305 tests/tests-misc.php:63
6483
  msgid "Euros (&euro;)"
6484
  msgstr ""
6485
 
6486
+ #: includes/misc-functions.php:306 tests/tests-misc.php:64
6487
  msgid "Pound Sterling (&pound;)"
6488
  msgstr ""
6489
 
6490
+ #: includes/misc-functions.php:307 tests/tests-misc.php:65
6491
  msgid "Australian Dollars (&#36;)"
6492
  msgstr ""
6493
 
6494
+ #: includes/misc-functions.php:308 tests/tests-misc.php:66
6495
  msgid "Brazilian Real (R&#36;)"
6496
  msgstr ""
6497
 
6498
+ #: includes/misc-functions.php:309 tests/tests-misc.php:67
6499
  msgid "Canadian Dollars (&#36;)"
6500
  msgstr ""
6501
 
6502
+ #: includes/misc-functions.php:310 tests/tests-misc.php:68
6503
  msgid "Czech Koruna"
6504
  msgstr ""
6505
 
6506
+ #: includes/misc-functions.php:311 tests/tests-misc.php:69
6507
  msgid "Danish Krone"
6508
  msgstr ""
6509
 
6510
+ #: includes/misc-functions.php:312 tests/tests-misc.php:70
6511
  msgid "Hong Kong Dollar (&#36;)"
6512
  msgstr ""
6513
 
6514
+ #: includes/misc-functions.php:313 tests/tests-misc.php:71
6515
  msgid "Hungarian Forint"
6516
  msgstr ""
6517
 
6518
+ #: includes/misc-functions.php:314 tests/tests-misc.php:72
6519
  msgid "Israeli Shekel (&#8362;)"
6520
  msgstr ""
6521
 
6522
+ #: includes/misc-functions.php:315 tests/tests-misc.php:73
6523
  msgid "Japanese Yen (&yen;)"
6524
  msgstr ""
6525
 
6526
+ #: includes/misc-functions.php:316 tests/tests-misc.php:74
6527
  msgid "Malaysian Ringgits"
6528
  msgstr ""
6529
 
6530
+ #: includes/misc-functions.php:317 tests/tests-misc.php:75
6531
  msgid "Mexican Peso (&#36;)"
6532
  msgstr ""
6533
 
6534
+ #: includes/misc-functions.php:318 tests/tests-misc.php:76
6535
  msgid "New Zealand Dollar (&#36;)"
6536
  msgstr ""
6537
 
6538
+ #: includes/misc-functions.php:319 tests/tests-misc.php:77
6539
  msgid "Norwegian Krone"
6540
  msgstr ""
6541
 
6542
+ #: includes/misc-functions.php:320 tests/tests-misc.php:78
6543
  msgid "Philippine Pesos"
6544
  msgstr ""
6545
 
6546
+ #: includes/misc-functions.php:321 tests/tests-misc.php:79
6547
  msgid "Polish Zloty"
6548
  msgstr ""
6549
 
6550
+ #: includes/misc-functions.php:322 tests/tests-misc.php:80
6551
  msgid "Singapore Dollar (&#36;)"
6552
  msgstr ""
6553
 
6554
+ #: includes/misc-functions.php:323 tests/tests-misc.php:81
6555
  msgid "Swedish Krona"
6556
  msgstr ""
6557
 
6558
+ #: includes/misc-functions.php:324 tests/tests-misc.php:82
6559
  msgid "Swiss Franc"
6560
  msgstr ""
6561
 
6562
+ #: includes/misc-functions.php:325 tests/tests-misc.php:83
6563
  msgid "Taiwan New Dollars"
6564
  msgstr ""
6565
 
6566
+ #: includes/misc-functions.php:326 tests/tests-misc.php:84
6567
  msgid "Thai Baht (&#3647;)"
6568
  msgstr ""
6569
 
6570
+ #: includes/misc-functions.php:327 tests/tests-misc.php:85
6571
  msgid "Indian Rupee (&#8377;)"
6572
  msgstr ""
6573
 
6574
+ #: includes/misc-functions.php:328 tests/tests-misc.php:86
6575
  msgid "Turkish Lira (&#8378;)"
6576
  msgstr ""
6577
 
6578
+ #: includes/misc-functions.php:329 tests/tests-misc.php:87
6579
  msgid "Iranian Rial (&#65020;)"
6580
  msgstr ""
6581
 
6582
+ #: includes/misc-functions.php:330 tests/tests-misc.php:88
6583
  msgid "Russian Rubles"
6584
  msgstr ""
6585
 
6586
+ #: includes/misc-functions.php:516
 
 
 
 
6587
  msgid ""
6588
  "%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
6589
  "%2$s! Use %3$s instead."
6590
  msgstr ""
6591
 
6592
+ #: includes/misc-functions.php:520
6593
  msgid ""
6594
  "%1$s is <strong>deprecated</strong> since Easy Digital Downloads version "
6595
  "%2$s with no alternative available."
6596
  msgstr ""
6597
 
6598
+ #: includes/misc-functions.php:557
6599
  msgid ""
6600
  "The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
6601
  "Downloads version %3$s! Please use %4$s instead."
6602
  msgstr ""
6603
 
6604
+ #: includes/misc-functions.php:561
6605
  msgid ""
6606
  "The %1$s argument of %2$s is <strong>deprecated</strong> since Easy Digital "
6607
  "Downloads version %3$s with no alternative available."
6608
  msgstr ""
6609
 
6610
+ #: includes/payments/actions.php:150
 
 
 
 
6611
  msgid "Status changed from %s to %s"
6612
  msgstr ""
6613
 
6614
+ #: includes/payments/actions.php:374 includes/payments/actions.php:434
6615
  msgid "Error resuming payment."
6616
  msgstr ""
6617
 
6618
+ #: includes/payments/actions.php:378
6619
  msgid "Payment recovery triggered URL"
6620
  msgstr ""
6621
 
6622
+ #: includes/payments/actions.php:455 includes/payments/actions.php:486
6623
  msgid "To complete this payment, please login to your account."
6624
  msgstr ""
6625
 
6626
+ #: includes/payments/actions.php:457
6627
  msgid "Lost Password"
6628
  msgstr ""
6629
 
6630
+ #: includes/payments/actions.php:458 templates/shortcode-login.php:33
6631
  msgid "Lost Password?"
6632
  msgstr ""
6633
 
6634
+ #: includes/payments/functions.php:173
6635
  msgid "Payment recovery processed"
6636
  msgstr ""
6637
 
6638
+ #: includes/payments/functions.php:725
6639
  msgid "Complete"
6640
  msgstr ""
6641
 
6642
+ #: includes/payments/functions.php:1546
6643
  msgid "EDD Bot"
6644
  msgstr ""
6645
 
6941
  msgstr[0] ""
6942
  msgstr[1] ""
6943
 
6944
+ #: includes/process-download.php:283
 
 
 
 
 
 
 
 
6945
  msgid "You do not have permission to download this file"
6946
  msgstr ""
6947
 
6948
+ #: includes/process-download.php:284
6949
  msgid "Purchase Verification Failed"
6950
  msgstr ""
6951
 
6952
+ #: includes/process-download.php:893
6953
  msgid "Invalid file"
6954
  msgstr ""
6955
 
6956
+ #: includes/process-download.php:900
6957
  msgid "The requested file could not be found. Error 404."
6958
  msgstr ""
6959
 
6960
+ #: includes/process-download.php:901
6961
  msgid "File not found"
6962
  msgstr ""
6963
 
6964
+ #: includes/process-purchase.php:31 includes/scripts.php:81
6965
  msgid "Your cart is empty"
6966
  msgstr ""
6967
 
6968
+ #: includes/process-purchase.php:289
 
 
 
 
6969
  msgid "The selected payment gateway is not enabled"
6970
  msgstr ""
6971
 
6972
+ #: includes/process-purchase.php:349
6973
  msgid "One or more of the discounts you entered is invalid"
6974
  msgstr ""
6975
 
6976
+ #: includes/process-purchase.php:366
6977
  msgid "You must agree to the terms of use"
6978
  msgstr ""
6979
 
6980
+ #: includes/process-purchase.php:381
6981
  msgid "Please enter a valid email address"
6982
  msgstr ""
6983
 
6984
+ #: includes/process-purchase.php:385
6985
  msgid "Please enter your first name"
6986
  msgstr ""
6987
 
6988
+ #: includes/process-purchase.php:395
6989
  msgid "Please enter your zip / postal code"
6990
  msgstr ""
6991
 
6992
+ #: includes/process-purchase.php:399
6993
  msgid "Please enter your billing city"
6994
  msgstr ""
6995
 
6996
+ #: includes/process-purchase.php:403
6997
  msgid "Please select your billing country"
6998
  msgstr ""
6999
 
7000
+ #: includes/process-purchase.php:407
7001
  msgid "Please enter billing state / province"
7002
  msgstr ""
7003
 
7004
+ #: includes/process-purchase.php:469 includes/process-purchase.php:790
7005
  msgid "The user information is invalid"
7006
  msgstr ""
7007
 
7008
+ #: includes/process-purchase.php:522
7009
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
7010
  msgstr ""
7011
 
7012
+ #: includes/process-purchase.php:531
7013
  msgid "You must register or login to complete your purchase"
7014
  msgstr ""
7015
 
7016
+ #: includes/process-purchase.php:544
7017
  msgid ""
7018
  "Email already used. Login or use a different email to complete your "
7019
  "purchase."
7020
  msgstr ""
7021
 
7022
+ #: includes/process-purchase.php:552 includes/process-purchase.php:686
7023
  msgid "Enter an email"
7024
  msgstr ""
7025
 
7026
+ #: includes/process-purchase.php:560
7027
  msgid "Passwords don't match"
7028
  msgstr ""
7029
 
7030
+ #: includes/process-purchase.php:569 includes/process-purchase.php:642
7031
  msgid "Enter a password"
7032
  msgstr ""
7033
 
7034
+ #: includes/process-purchase.php:572
7035
  msgid "Enter the password confirmation"
7036
  msgstr ""
7037
 
7038
+ #: includes/process-purchase.php:596
7039
  msgid "You must login or register to complete your purchase"
7040
  msgstr ""
7041
 
7042
+ #: includes/process-purchase.php:623
7043
  msgid "The password you entered is incorrect. %sReset Password%s"
7044
  msgstr ""
7045
 
7046
+ #: includes/process-purchase.php:668
7047
  msgid "You must be logged into an account to purchase"
7048
  msgstr ""
7049
 
7050
+ #: includes/process-purchase.php:854
7051
  msgid "The zip / postal code you entered for your billing address is invalid"
7052
  msgstr ""
7053
 
7054
+ #: includes/process-purchase.php:1116
7055
  msgid "An internal error has occurred, please try again or contact support."
7056
  msgstr ""
7057
 
7058
+ #: includes/process-purchase.php:1149
7059
  msgid "There was an error completing your purchase. Please try again."
7060
  msgstr ""
7061
 
7063
  msgid "You do not have permission to view this file."
7064
  msgstr ""
7065
 
7066
+ #: includes/scripts.php:58
7067
  msgid "Please select a payment method"
7068
  msgstr ""
7069
 
7070
+ #: includes/scripts.php:59
7071
  msgid "Please enter a discount code"
7072
  msgstr ""
7073
 
7074
+ #: includes/scripts.php:61
7075
  msgid "Discount Applied"
7076
  msgstr ""
7077
 
7078
+ #: includes/scripts.php:62
7079
  msgid "Please enter an email address before applying a discount code"
7080
  msgstr ""
7081
 
7082
+ #: includes/scripts.php:63
7083
  msgid "Please enter a username before applying a discount code"
7084
  msgstr ""
7085
 
7086
+ #: includes/scripts.php:64
7087
  msgid "Please Wait..."
7088
  msgstr ""
7089
 
7090
+ #: includes/scripts.php:80
7091
  msgid "You have already added this item to your cart"
7092
  msgstr ""
7093
 
7094
+ #: includes/scripts.php:82 includes/template-functions.php:177
7095
  msgid "Loading"
7096
  msgstr ""
7097
 
7098
+ #: includes/scripts.php:193
7099
  msgid "Add New Download"
7100
  msgstr ""
7101
 
7102
+ #: includes/scripts.php:194
7103
  msgid "Use This File"
7104
  msgstr ""
7105
 
7106
+ #: includes/scripts.php:195
7107
  msgid "Sorry, not available for variable priced products."
7108
  msgstr ""
7109
 
7110
+ #: includes/scripts.php:196
7111
  msgid "Are you sure you wish to delete this payment?"
7112
  msgstr ""
7113
 
7114
+ #: includes/scripts.php:197
7115
  msgid "Are you sure you wish to delete this note?"
7116
  msgstr ""
7117
 
7118
+ #: includes/scripts.php:198
7119
  msgid "Are you sure you wish to delete this tax rate?"
7120
  msgstr ""
7121
 
7122
+ #: includes/scripts.php:199
7123
  msgid "Are you sure you wish to revoke this API key?"
7124
  msgstr ""
7125
 
7126
+ #: includes/scripts.php:200
7127
  msgid "Are you sure you wish to regenerate this API key?"
7128
  msgstr ""
7129
 
7130
+ #: includes/scripts.php:201
7131
  msgid "Are you sure you wish to resend the purchase receipt?"
7132
  msgstr ""
7133
 
7134
+ #: includes/scripts.php:202
7135
  msgid "Copy these links to your clipboard and give them to your customer"
7136
  msgstr ""
7137
 
7138
+ #: includes/scripts.php:203
7139
  msgid "Are you sure you wish to delete this %s?"
7140
  msgstr ""
7141
 
7142
+ #: includes/scripts.php:204
7143
  msgid "You must have at least one price"
7144
  msgstr ""
7145
 
7146
+ #: includes/scripts.php:205
7147
  msgid "You must have at least one field"
7148
  msgstr ""
7149
 
7150
+ #: includes/scripts.php:206
7151
  msgid "Payments must contain at least one item"
7152
  msgstr ""
7153
 
7154
+ #: includes/scripts.php:208
7155
  msgid "Choose one or more %s"
7156
  msgstr ""
7157
 
7158
+ #: includes/scripts.php:209
7159
  msgid "Item price must be numeric"
7160
  msgstr ""
7161
 
7162
+ #: includes/scripts.php:210
7163
  msgid "Item tax must be numeric"
7164
  msgstr ""
7165
 
7166
+ #: includes/scripts.php:211
7167
  msgid "Quantity must be numeric"
7168
  msgstr ""
7169
 
7170
+ #: includes/scripts.php:218
7171
  msgid "Type to search %s"
7172
  msgstr ""
7173
 
7174
+ #: includes/scripts.php:220
7175
  msgid "You must choose a method."
7176
  msgstr ""
7177
 
7178
+ #: includes/scripts.php:221
7179
  msgid "Required fields not completed."
7180
  msgstr ""
7181
 
7182
+ #: includes/scripts.php:222
7183
  msgid ""
7184
  "Are you sure you want to reset your store? This process is <strong><em>not "
7185
  "reversible</em></strong>. Please be sure you have a recent backup."
7186
  msgstr ""
7187
 
7188
+ #: includes/scripts.php:223
7189
+ msgid "Type to search all %s"
 
 
 
 
 
 
 
 
 
 
7190
  msgstr ""
7191
 
7192
+ #: includes/scripts.php:225
7193
+ msgid "Type to search all Countries"
7194
  msgstr ""
7195
 
7196
+ #: includes/scripts.php:226
7197
+ msgid "Type to search all States/Provinces"
7198
  msgstr ""
7199
 
7200
+ #: includes/scripts.php:227
7201
+ msgid ""
7202
+ "We are sorry but your browser is not compatible with this kind of file "
7203
+ "upload. Please upgrade your browser."
7204
  msgstr ""
7205
 
7206
  #: includes/shortcodes.php:294
7207
  msgid "Purchase All Items"
7208
  msgstr ""
7209
 
7210
+ #: includes/shortcodes.php:710
7211
  msgid "Sorry, trouble retrieving payment receipt."
7212
  msgstr ""
7213
 
7214
+ #: includes/shortcodes.php:745
7215
  msgid "You must be logged in to view this payment receipt."
7216
  msgstr ""
7217
 
7218
+ #: includes/shortcodes.php:757
7219
  msgid "Receipt could not be retrieved, your purchase session has expired."
7220
  msgstr ""
7221
 
7222
+ #: includes/shortcodes.php:887
7223
  msgid "The passwords you entered do not match. Please try again."
7224
  msgstr ""
7225
 
7226
+ #: includes/shortcodes.php:897
7227
  msgid "The email you entered is invalid. Please enter a valid email."
7228
  msgstr ""
7229
 
7230
+ #: includes/shortcodes.php:902
7231
  msgid "The email you entered belongs to another user. Please use another."
7232
  msgstr ""
7233
 
7234
+ #: includes/shortcodes.php:977
7235
  msgid "Error removing email address from profile. Please try again later."
7236
  msgstr ""
7237
 
7238
+ #: includes/template-functions.php:134
7239
  msgid "Free"
7240
  msgstr ""
7241
 
7242
+ #: includes/template-functions.php:191
7243
  msgid "Added to cart"
7244
  msgstr ""
7245
 
7246
+ #: includes/template-functions.php:197
7247
  msgid "Includes %1$s&#37; tax"
7248
  msgstr ""
7249
 
7250
+ #: includes/template-functions.php:199
7251
  msgid "Excluding %1$s&#37; tax"
7252
  msgstr ""
7253
 
7254
+ #: includes/template-functions.php:477
7255
  msgid "White"
7256
  msgstr ""
7257
 
7258
+ #: includes/template-functions.php:481
7259
  msgid "Gray"
7260
  msgstr ""
7261
 
7262
+ #: includes/template-functions.php:485
7263
  msgid "Blue"
7264
  msgstr ""
7265
 
7266
+ #: includes/template-functions.php:489
7267
  msgid "Red"
7268
  msgstr ""
7269
 
7270
+ #: includes/template-functions.php:493
7271
  msgid "Green"
7272
  msgstr ""
7273
 
7274
+ #: includes/template-functions.php:497
7275
  msgid "Yellow"
7276
  msgstr ""
7277
 
7278
+ #: includes/template-functions.php:501
7279
  msgid "Orange"
7280
  msgstr ""
7281
 
7282
+ #: includes/template-functions.php:505
7283
  msgid "Dark Gray"
7284
  msgstr ""
7285
 
7286
+ #: includes/template-functions.php:509
7287
  msgid "Inherit"
7288
  msgstr ""
7289
 
7290
+ #: includes/template-functions.php:527
7291
  msgid "Button"
7292
  msgstr ""
7293
 
7294
+ #: includes/template-functions.php:528
7295
  msgid "Plain Text"
7296
  msgstr ""
7297
 
7298
+ #: includes/user-functions.php:536
7299
  msgid "[%s] New User Registration"
7300
  msgstr ""
7301
 
7302
+ #: includes/user-functions.php:537
7303
  msgid "New user registration"
7304
  msgstr ""
7305
 
7306
+ #: includes/user-functions.php:539
7307
  msgid "E-mail: %s"
7308
  msgstr ""
7309
 
7310
+ #: includes/user-functions.php:545
7311
  msgid "[%s] Your username and password"
7312
  msgstr ""
7313
 
7314
+ #: includes/user-functions.php:546
7315
  msgid "Your account info"
7316
  msgstr ""
7317
 
7318
+ #: includes/user-functions.php:550
7319
  msgid "Password entered at checkout"
7320
  msgstr ""
7321
 
7322
+ #: includes/user-functions.php:552
7323
  msgid "Password entered at registration"
7324
  msgstr ""
7325
 
7326
+ #: includes/user-functions.php:555
7327
  msgid "Password: %s"
7328
  msgstr ""
7329
 
7330
+ #: includes/user-functions.php:559
7331
  msgid "Click here to log in"
7332
  msgstr ""
7333
 
7334
+ #: includes/user-functions.php:563
7335
  msgid "To log in, visit: %s"
7336
  msgstr ""
7337
 
7338
+ #: includes/user-functions.php:719 includes/user-functions.php:720
7339
  msgid "Verify your account"
7340
  msgstr ""
7341
 
7342
+ #: includes/user-functions.php:722
7343
  msgid ""
7344
  "Hello %s,\n"
7345
  "\n"
7349
  "Link missing? Visit the following URL: %s"
7350
  msgstr ""
7351
 
7352
+ #: includes/user-functions.php:847
7353
  msgid ""
7354
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
7355
  "here</a> to request a new verification URL."
7356
  msgstr ""
7357
 
7358
+ #: includes/user-functions.php:880
7359
  msgid "You must be logged in to verify your account."
7360
  msgstr ""
7361
 
7362
+ #: includes/user-functions.php:880 includes/user-functions.php:884
7363
  msgid "Notice"
7364
  msgstr ""
7365
 
7366
+ #: includes/user-functions.php:884
7367
  msgid "Your account has already been verified."
7368
  msgstr ""
7369
 
7370
+ #: includes/user-functions.php:929
7371
  msgid "Invalid verification token provided."
7372
  msgstr ""
7373
 
7374
+ #: includes/user-functions.php:1034
7375
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
7376
  msgstr ""
7377
 
7378
+ #: includes/user-functions.php:1041
7379
  msgid "Add to iOS App"
7380
  msgstr ""
7381
 
7448
  msgstr ""
7449
 
7450
  #: includes/widgets.php:407
7451
+ msgid "Show Title"
7452
  msgstr ""
7453
 
7454
  #: includes/widgets.php:413
7517
  msgid "Log In"
7518
  msgstr ""
7519
 
7520
+ #: templates/shortcode-login.php:40
7521
+ msgid "You are already logged in"
7522
+ msgstr ""
7523
+
7524
  #: templates/shortcode-profile-editor.php:18
7525
  msgid "Saved cart"
7526
  msgstr ""
7577
  msgid "Save Changes"
7578
  msgstr ""
7579
 
7580
+ #: templates/shortcode-profile-editor.php:233
7581
+ msgid "You need to login to edit your profile."
7582
+ msgstr ""
7583
+
7584
  #: templates/shortcode-receipt.php:12
7585
  msgid "The specified receipt ID appears to be invalid"
7586
  msgstr ""
7601
  msgid "Discount(s)"
7602
  msgstr ""
7603
 
7604
+ #: templates/shortcode-receipt.php:196
7605
  msgid "No downloadable files found for this bundled item."
7606
  msgstr ""
7607
 
7608
+ #: templates/shortcode-register.php:13
7609
  msgid "Register New Account"
7610
  msgstr ""
7611
 
7612
+ #: templates/shortcode-register.php:33
7613
  msgid "Confirm Password"
7614
  msgstr ""
7615
 
7691
  msgid "%s Total"
7692
  msgstr ""
7693
 
7694
+ #: includes/admin/payments/view-order-details.php:438
7695
  msgctxt "payment details purchased item price - mobile"
7696
  msgid "Price"
7697
  msgstr ""
7698
 
7699
+ #: includes/admin/payments/view-order-details.php:440
7700
  msgctxt "payment details purchased item quantity - mobile"
7701
  msgid " & Quantity"
7702
  msgstr ""
7703
 
7704
+ #: includes/admin/payments/view-order-details.php:455
7705
  msgctxt "payment details purchased item tax - mobile"
7706
  msgid "Tax"
7707
  msgstr ""
7708
 
7709
+ #: includes/admin/payments/view-order-details.php:464
7710
  msgctxt "payment details purchased item total - mobile"
7711
  msgid "%s Total"
7712
  msgstr ""
7713
 
7714
+ #: includes/admin/payments/view-order-details.php:518
7715
  msgctxt "payment details select item to add - mobile"
7716
  msgid "Select New %s To Add"
7717
  msgstr ""
7718
 
7719
+ #: includes/admin/payments/view-order-details.php:530
7720
  msgctxt "payment details add item price - mobile"
7721
  msgid "Price"
7722
  msgstr ""
7723
 
7724
+ #: includes/admin/payments/view-order-details.php:532
7725
  msgctxt "payment details add item quantity - mobile"
7726
  msgid " & Quantity"
7727
  msgstr ""
7728
 
7729
+ #: includes/admin/payments/view-order-details.php:556
7730
  msgctxt "payment details add item tax - mobile"
7731
  msgid "Tax"
7732
  msgstr ""
7733
 
7734
+ #: includes/admin/payments/view-order-details.php:698
7735
  msgctxt "Address City"
7736
  msgid "City:"
7737
  msgstr ""
7738
 
7739
+ #: includes/admin/payments/view-order-details.php:703
7740
  msgctxt "Zip / Postal code of address"
7741
  msgid "Zip / Postal Code:"
7742
  msgstr ""
7743
 
7744
+ #: includes/admin/payments/view-order-details.php:710
7745
  msgctxt "Address country"
7746
  msgid "Country:"
7747
  msgstr ""
7748
 
7749
+ #: includes/admin/payments/view-order-details.php:726
7750
  msgctxt "State / province of address"
7751
  msgid "State / Province:"
7752
  msgstr ""
7756
  msgid "to"
7757
  msgstr ""
7758
 
7759
+ #: includes/checkout/template.php:729
7760
  msgctxt "Entering a discount code"
7761
  msgid "Click to enter it"
7762
  msgstr ""
7763
 
7764
+ #: includes/checkout/template.php:737
7765
  msgctxt "Apply discount at checkout"
7766
  msgid "Apply"
7767
  msgstr ""
7768
 
7769
+ #: includes/class-edd-discount.php:1433
7770
  msgctxt "error shown when attempting to use a discount before its start date"
7771
  msgid "This discount is invalid."
7772
  msgstr ""
7773
 
7774
+ #: includes/class-edd-discount.php:1812
7775
  msgctxt "error for when a discount is invalid based on its configuration"
7776
  msgid "This discount is invalid."
7777
  msgstr ""
7778
 
7779
+ #: includes/class-edd-html-elements.php:386
7780
  msgctxt "plural: Example: \"All Categories\""
7781
  msgid "All %s"
7782
  msgstr ""
7783
 
7784
+ #: includes/class-edd-html-elements.php:476
7785
  msgctxt "all dropdown items"
7786
  msgid "All"
7787
  msgstr ""
7788
 
7789
+ #: includes/class-edd-html-elements.php:477
7790
  msgctxt "no dropdown items"
7791
  msgid "None"
7792
  msgstr ""
7796
  msgid "%2$s"
7797
  msgstr ""
7798
 
7799
+ #: includes/shortcodes.php:663
7800
  msgctxt "download post type name"
7801
  msgid "No %s found"
7802
  msgstr ""
readme.txt CHANGED
@@ -4,9 +4,9 @@ Plugin URI: https://easydigitaldownloads.com
4
  Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip, brashrebel
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
- Requires at least: 4.4
8
- Tested up to: 4.9.1
9
- Stable Tag: 2.8.15
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
@@ -17,7 +17,7 @@ Easy Digital Downloads is a complete eCommerce solution for selling digital prod
17
 
18
  = Sell effortlessly =
19
 
20
- Whether it is software, documents, photos, ebooks, songs, graphics, or any other type of media file, Easy Digital Downloads provides a complete system for effortlessly selling your digital products.
21
 
22
  = Localized for your language =
23
 
@@ -42,10 +42,15 @@ Payment gateways supported through free or premium extension:
42
  * Braintree
43
  * Authorize.net
44
  * 2Checkout
 
45
  * SOFORT Banking
 
46
  * BitPay
47
  * Coinbase
 
48
  * Payza
 
 
49
 
50
  See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
51
 
@@ -71,7 +76,7 @@ These are just a few of the extensions we offer to help super-charge your digita
71
 
72
  = Built with developers in mind =
73
 
74
- Extensible, adaptable, and open source -- Easy Digital Downloads is created with developers in mind. Contribute on [GitHub](https://github.com/easydigitaldownloads/easy-digital-downloads).
75
 
76
  == Installation ==
77
 
@@ -156,6 +161,7 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
156
  * [Check](https://easydigitaldownloads.com/downloads/check-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=check-payment-gateway&utm_campaign=readme)
157
  * [Braintree](https://easydigitaldownloads.com/downloads/braintree-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=braintree-gateway&utm_campaign=readme)
158
  * [PayPal Payments Advanced](https://easydigitaldownloads.com/downloads/paypal-payments-advanced/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-payments-advanced&utm_campaign=readme)
 
159
  * [ClickBank](https://easydigitaldownloads.com/downloads/edd-clickbank-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=clickbank&utm_campaign=readme)
160
  * [Wallet](https://easydigitaldownloads.com/downloads/wallet/?utm_source=gateway&utm_medium=faq_tab&utm_content=wallet&utm_campaign=readme)
161
  * [BitPay](https://easydigitaldownloads.com/downloads/bitpay-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=bitpay-payment-gateway&utm_campaign=readme)
@@ -163,14 +169,31 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
163
  * [SOFORT Banking](https://easydigitaldownloads.com/downloads/sofort-banking-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=sofort-banking-gateway&utm_campaign=readme)
164
  * [PayU India](https://easydigitaldownloads.com/downloads/payu-india-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payu-india-payment-gateway&utm_campaign=readme)
165
  * [Payza](https://easydigitaldownloads.com/downloads/payza-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payza-payment-gateway&utm_campaign=readme)
 
 
166
  * [PayPlug](https://easydigitaldownloads.com/downloads/payplug-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payplug-gateway&utm_campaign=readme)
167
  * [GoCardless](https://easydigitaldownloads.com/downloads/gocardless-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=gocardless-payment-gateway&utm_campaign=readme)
 
168
  * [Zombaio](https://easydigitaldownloads.com/downloads/zombaio-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=zombaio-payment-gateway&utm_campaign=readme)
 
169
  * [Realex](https://easydigitaldownloads.com/downloads/realex-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=realex-gateway&utm_campaign=readme)
170
  * [CyberSource](https://easydigitaldownloads.com/downloads/cybersource-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=cybersource-gateway&utm_campaign=readme)
 
171
  * [Paylane](https://easydigitaldownloads.com/downloads/paylane-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=paylane-payment-gateway&utm_campaign=readme)
172
  * [ePay](https://easydigitaldownloads.com/downloads/epay-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=epay-payment-gateway&utm_campaign=readme)
173
  * [Netbanx](https://easydigitaldownloads.com/downloads/netbanx-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=netbanx-payment-gateway&utm_campaign=readme)
 
 
 
 
 
 
 
 
 
 
 
 
174
  * [Realex](https://easydigitaldownloads.com/downloads/realex-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=realex-gateway&utm_campaign=readme)
175
  * [PayTrace](https://easydigitaldownloads.com/downloads/paytrace/?utm_source=gateway&utm_medium=faq_tab&utm_content=paytrace&utm_campaign=readme)
176
  * [iPay88](https://easydigitaldownloads.com/downloads/ipay88-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=ipay88-gateway&utm_campaign=readme)
@@ -190,211 +213,6 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
190
 
191
  == Changelog ==
192
 
193
- = 2.8.15, December 13, 2017 =
194
- * Fix: Getting files of variable priced bundles products did not always respect variable price ID.
195
- * Tweak: Added found payments to the hooks before and after the purchase history shortcode.
196
-
197
- = 2.8.14, November 28, 2017 =
198
- * Fix: Sales exports did not always include all payments from the last day of the range selected.
199
- * Fix: Negative item fees can apply to same item multiple times if it's the same product.
200
- * Fix: Campaign strings on Integrations were not consistent.
201
- * Fix: Warning when converting dates to timestamps in EDD_Stats::convert_date()
202
-
203
- = 2.8.13, November 20, 2017 =
204
- * Fix: Cart details incorrectly reported item quantity as 0 in some cases.
205
- * Fix: Prevent an edge case around adding past purchases to new users.
206
- * Fix: Searching by custom order number only worked if a suffix or prefix is included.
207
- * Fix: Corrected some translation issues.
208
- * New: Allow filtering of the PayPal IPN data.
209
- * New: Add support for Payment Data Transport (PDT) in PayPal Standard.
210
- * Tweak: Removed MercadoPago from list of extensions in readme.
211
- * Tweak: Added a colon that was missing on taxes & subtotal of the purchase confirmation.
212
- * Tweak: Add debug logging to PayPal IPN capturing.
213
-
214
-
215
- = 2.8.12, November 10, 2017 =
216
- * Fix: Reverted some of the performance improvements due to edge case errors.
217
- * Fix: Corrected a misspelled function edd_render_dowwn_tax_options.
218
- * Fix: Invalid translation line while processing purchase.
219
- * Fix: Improved the verbiage of the discount code amount description.
220
-
221
- = 2.8.11, November 9, 2017 =
222
- * Fix: Incorrect discount errors could be shown at checkout.
223
- * Fix: Improved the performance of the EDD_Customer class.
224
- * Fix: Improved the new Debug Log View usability.
225
- * Fix: Corrected an issue with edd_user_pending_verification() when logged in as an admin.
226
- * Fix: Custom date ranges for detailed product earnings break on multi-month views.
227
- * Fix: Discount validation errors could occur when recovering pending payment.
228
- * Fix: The product notes div was being rendered when no product notes added to download.
229
- * New: Added a filter for edd_get_errors().
230
- * New: Added link to ipinfo.io for the IP address on a file download log.
231
- * Tweak: Removed an unused display_price argument in edd_get_purchase_link().
232
- * Tweak: Update library for array2xml.php.
233
- * Tweak: Added filters to allow modfiying the payment list table gateway filter selector.
234
-
235
- = 2.8.10, October 20, 2017 =
236
-
237
- * Fix: Incorrect URL for `Add New` button.
238
- * Fix: Incorrectly called function on EDD_Payment::get_discounted_amount.
239
-
240
- = 2.8.9, October 19, 2017 =
241
-
242
- * Fix: Errors when trying to download some local files on Windows servers.
243
- * Fix: "Recount" Progress Bar was invisible.
244
- * Tweak: Added $price_id to the edd_purchase_receipt_after_files action.
245
- * Tweak: Improve visibility of Apps & Integrations.
246
- * Tweak: Corrected some spelling errors.
247
-
248
- = 2.8.8, October 5, 2017 =
249
-
250
- * Fix: A fatal error was triggered during the payment export.
251
- * New: Added more parameters to the edd_requested_file_name filter.
252
-
253
- = 2.8.7, October 2, 2017 =
254
-
255
- * IMPORTANT: Product dropdown was losing selections when using variable pricing. Please verify any variable priced bundles you may have configured.
256
- * Fix: File download errors could occur if the stream type was no longer registered.
257
- * Fix: The 'No checkout page configured' error is now limited to once display per page.
258
- * Fix: Calls to EDD_Customer->update_meta could throw a notice if called to early in the WordPress load process.
259
- * Fix: The edd_get_users_purchased_products function did not respect the status argument passed in.
260
- * Fix: The base state/province displayed empty when no pre-populated state or province data was available.
261
- * Fix: Performance improvements to edd_get_discounts.
262
- * Fix: Newly registered user's ID was not set on pre-existing payments.
263
- * Fix: During purchase, the customer name was set to email if last name was empty.
264
- * Fix: Corrected many non-numeric value and data handling issues in PHP 7.1.
265
- * Fix: Corrected an issue with Chosen placeholders.
266
- * New: Added the EDD_Logging class, to allow for easier debugging by developers.
267
- * New: The country name has been added to the payment export.
268
- * New: Added a discounts_total property to the EDD_Payment class.
269
- * New: Hyphens are now allowed in discount codes.
270
- * New: The Customer ID is now included in the sales report.
271
- * Tweak: Added better responsiveness in WordPress admin.
272
- * Tweak: Fixed a typo in the docs for the payments create CLI command.
273
- * Tweak: Wrapped discount fields in <span> tags.
274
- * Tweak: Fixed CSS targeting on edd_repeatable_thumbnail_size_field selector.
275
-
276
- = 2.8.6, September 11, 2017 =
277
-
278
- * Fix: Amazon Payments could cause Javascript error on checkout.
279
- * Fix: edd_delete_option() helper function failed to fully remove option.
280
- * Fix: It was possible to create a discount using edd_store_discount() without specifying a discount code.
281
- * Fix: User Address information could be stored with boolean 'false' instead of an empty string.
282
- * New: Made URLs included in payment notes clickable links.
283
- * New: Added filter edd_load_scripts_in_footer to allow programmatic modifications of where frontend scripts are loaded.
284
-
285
- = 2.8.5, September 7, 2017 =
286
-
287
- * Fix: The Product Dropdown helper function included products in the trash.
288
- * Fix: Deleted products could not be removed from payments.
289
- * Fix: Incorrect cookie name was being used for the 'rememberme' option.
290
- * Fix: Incorrect pagination was being used when viewing sales logs.
291
- * Fix: Possible issue parsing headers when accessing via WP Rest API.
292
- * Fix: Improved security of EDD_Session.
293
- * New: Added a filter to the "Agree to Terms" markup.
294
- * New: Added support for Angola (country, municipalities, and currency).
295
- * New: Increased the width of the discount amount field when adding or editing discounts.
296
- * New: Added ability to filter sales by email address in WP-CLI.
297
- * Tweak: Updated form styling for login and register forms.
298
- * Tweak: Removed clearing divs from the [downloads] shortcode.
299
- * Tweak: Added inline docs for edd_payment_meta filter.
300
- * Tweak: Ensure EDD_Cart:get_discounts() return type is consistent.
301
-
302
- = 2.8.4, August 16, 2017 =
303
-
304
- * Fix: Minor improvements to edd_get_customer_address() function.
305
- * Fix: Negative product fees were not properly affecting subtotal used for tax calculations.
306
- * Fix: Editing item price on a payment caused incorrect calculations when item price contained thousands separators.
307
- * Fix: Download History shortcode was incorrectly using get_the_title instead of the supplied name.
308
- * Fix: Resuming payment for guest payments while logged out could incorrectly prompt the user to login.
309
- * Tweak: Download Details widget edit form used generic 'Show Title' instead of 'Show Download Title'.
310
- * Tweak: Product Notes metabox field wasn't full width.
311
-
312
- = 2.8.3, August 9, 2017 =
313
-
314
- * Fix: Update HTML5 pattern on card field to account for whitespace.
315
- * Fix: Don't enqueue jQuery.payment by default, allow gateways to enqueue when supported.
316
-
317
- = 2.8.2, August 8, 2017 =
318
-
319
- * New: Spaces are now auto-formatted into credit card number fields.
320
- * Tweak: Decoupled API Authentication with $wp_query.
321
- * Tweak: Quantities no longer show on the cart widget when they are disabled.
322
- * Tweak: Renamed 'Item Quantities' setting to 'Cart Item Quantities' to remove confusion of its purpose.
323
- * Tweak: Improvements to the consistency of settings descriptions.
324
- * Tweak: Added search_columns argument to the EDD_Customer_Query class.
325
- * Fix: Discounts with multiple exclusions could be applied to excluded products.
326
- * Fix: Customer query pagination did not work correctly.
327
- * Fix: Removed custom widths on the primary column of list table.
328
- * Fix: 'Processing' status in Payments list table shows empty brackets when no processing payments.
329
- * Fix: Billing fields were unnecessarily validated when cart total was $0.
330
- * Fix: WPLANG is deprecated, use get_locale() instead.
331
- * Fix: Prevent duplicate queries when edd_get_purchase_id_by_key() is called more than once for the same payment key.
332
- * Fix: Prevent plain text purchase links from looking like buttons still.
333
-
334
- = 2.8.1, July 27, 2017 =
335
-
336
- * New: Include "processing" as payment status in the list table.
337
- * Fix: Revert adjusting purchase amount when quantity changes.
338
- * Fix: Variable pricing bundle purchases gave access to incorrect product files.
339
- * Tweak: Update to 1.6.14 of the Plugin Updater.
340
-
341
- = 2.8, July 25, 2017 =
342
-
343
- * New: Design of repeatable rows, including variable prices and download files, has been redesigned to better accommodate more options and smaller screen sizes
344
- * New: Variable price IDs now supported in payment import and export
345
- * New: add_meta() and delete_meta() methods added to EDD_Payment
346
- * New: Position of errors on checkout can now be changed through edd_global_checkout_script_vars filter
347
- * New: edd_after_payment_actions action now fired through WP Cron after payment is completed
348
- * New: EDD_Customer_Query class introduced
349
- * New: Added support for PayPal Image URL setting
350
- * New: Added support for filtering Payment History by used payment gateway
351
- * New: Added shortcode-download.php template file
352
- * Tweak: Use document.body in scripts where possible, for performance
353
- * Tweak: Minimum WordPress version now set to 4.4
354
- * Tweak: edd-ajax.js and edd-ajax.min.js now loaded in wp_footer
355
- * Tweak: Improved performance of EDD_Customer by avoiding duplicate query to get notes
356
- * Tweak: Banned Emails option now supports blocking addresses with just a TLD
357
- * Tweak: Added new actions to template files to allow content to be more easily added to log in and registration forms
358
- * Tweak: Chosen dropdown field of EDD_HTML_Elements now supports "multiple" parameter
359
- * Tweak: Added a link to gateways extension category on gateway settings page to make gateways more easily discoverable
360
- * Tweak: Updated the EDD add-on updater class to version 1.6.13
361
- * Tweak: Added new edd_log_file_download_download_files filter and edd_log_file_download_file_id filter to get_logs() method of the file download list table
362
- * Tweak: Empty categories now shown on Earnings by Category report
363
- * Tweak: EDD_Customer object added to completed payment actions
364
- * Tweak: Current customer instance added to all hooks and filters in EDD_Customer
365
- * Tweak: Download link expiration time now shown on System Info
366
- * Tweak: Added edd_checkout_billing_details_address filter to customer billing details on checkout
367
- * Tweak: Purchase button amounts now automatically update as quantity input is changed
368
- * Tweak: Customer records now updated with information entered on checkout
369
- * Tweak: Improved translation flexibility of Complete Purchase button text
370
- * Tweak: Added new edd_price_option_output filter to function that displays variable prices
371
- * Tweak: Notes and price IDs now escaped on purchase receipt display
372
- * Tweak: Improved description of login redirect page setting
373
- * Tweak: Avoid hard-coding "striped" class on list tables
374
- * Tweak: A link to Product Reviews extension has been added to product edit screen when Reviews plugin is not installed
375
- * Tweak: Account for multiple reverse proxy IPs in $_SERVER['HTTP_X_FORWARDED_FOR']
376
- * Tweak: Update phpunit dependency to latest of 3.7 branch
377
- * Fix: Price ID not properly set when generating payment records with WP CLI
378
- * Fix: Credit card name field validated as true when card number was entered
379
- * Fix: Detect and correct invalid email addresses in From Address settings for purchase receipts and email notifications
380
- * Fix: Sales export includes incorrect items
381
- * Fix: Invalid SQL query due to extraneous curly brace
382
- * Fix: Fatal error due to undefined function edd_extension_has_beta_support()
383
- * Fix: Some admin screens not properly responsive for small screens
384
- * Fix: misc-functions.php file loaded twice
385
- * Fix: Corrupt file downloads due to non-binary setting passed to fopen()
386
- * Fix: _canonical_import_id not deleted after payment import
387
- * Fix: All products could be deleted on a payment
388
- * Fix: 100% discount codes do not remove tax from tax-inclusive items
389
- * Fix: Item tax not shown on payment screen when price contains commas
390
- * Fix: Tax rates not included in settings import/export
391
- * Fix: get_payments() method of EDD_Payments_Query affects global $post
392
- * Fix: Customer record not properly linked to existing user record
393
- * Fix: State / province field of customer address not saved properly
394
- * Fix: Download links still shown on purchase confirmation when Disable Redownload is enabled
395
- * Fix: select() method of EDD_HTML_Elements always uses "Downloads" as search placeholder
396
- * Fix: Product Dropdown not always showing the selected item when large number of downloads exist
397
-
398
  = 2.7.11, June 21, 2017 =
399
 
400
  * Fix: Amazon Payments had errors being displayed at incorrect times.
@@ -420,7 +238,7 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
420
  * Fix: Use once per customer option on discount codes does not respect case sensitivity
421
  * Fix: Date filters on payment history not working properly
422
  * Fix: Tax rates of less than 1 calculates an incorrect total
423
- * Fix: edd_unset_cart_discount() is case sensitive when it should not be
424
  * Fix: PHP 7 compatibility flags due to safe_mode checks
425
  * Fix: Download files not imported properly when file URL/path begins with a forward slash
426
  * Fix: Pending verification message shown multiple times if the page contains multiple shortcodes
@@ -646,7 +464,7 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
646
  * New: Allow exporting the file download history of a specific product.
647
  * New: Add action after discount is added to the cart.
648
  * New: Add action hook called "edd_payment_saved" for when EDD_Payment::save() is run.
649
- * New: Add "author" parameter support to [downloads] shortcode with support for username or ID.
650
  * Tweak: Correct branding of necessary assets.
651
  * Tweak: Block self-pings in tracking check-ins.
652
  * Tweak: Update author and author URI to Easy Digital Downloads.
@@ -1003,7 +821,7 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
1003
 
1004
  * New: Added refund() method to EDD_Payment class
1005
  * New: Added filters to enable/disable product and customer stat adjustments during refunds
1006
- * New: Added new hooks to EDD_Payment class that run before payment is setup
1007
  * Tweak: Improved taxonomy labels for categories and tags
1008
  * Tweak: Automatically flush permalinks when a 404 is detected on EDD archive pages
1009
  * Tweak: Add proper 403 headers to REST API
4
  Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip, brashrebel
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
+ Requires at least: 4.0
8
+ Tested up to: 4.8
9
+ Stable Tag: 2.7.12
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
17
 
18
  = Sell effortlessly =
19
 
20
+ Whether it is software, documents, photos, ebooks, songs, graphics, or any other type of media file, Easy Digtal Downloads provides a complete system for effortlessly selling your digital products.
21
 
22
  = Localized for your language =
23
 
42
  * Braintree
43
  * Authorize.net
44
  * 2Checkout
45
+ * Recurly
46
  * SOFORT Banking
47
+ * NETbilling
48
  * BitPay
49
  * Coinbase
50
+ * Moneybookers / Skrill
51
  * Payza
52
+ * MercadoPago
53
+ * PagSeguro
54
 
55
  See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
56
 
76
 
77
  = Built with developers in mind =
78
 
79
+ Extendable, adaptable, and open source -- Easy Digital Downloads is created with developers in mind. Contribute on [GitHub](https://github.com/easydigitaldownloads/easy-digital-downloads).
80
 
81
  == Installation ==
82
 
161
  * [Check](https://easydigitaldownloads.com/downloads/check-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=check-payment-gateway&utm_campaign=readme)
162
  * [Braintree](https://easydigitaldownloads.com/downloads/braintree-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=braintree-gateway&utm_campaign=readme)
163
  * [PayPal Payments Advanced](https://easydigitaldownloads.com/downloads/paypal-payments-advanced/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-payments-advanced&utm_campaign=readme)
164
+ * [PagSeguro](https://easydigitaldownloads.com/downloads/pagseguro-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=pagseguro-payment-gateway&utm_campaign=readme)
165
  * [ClickBank](https://easydigitaldownloads.com/downloads/edd-clickbank-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=clickbank&utm_campaign=readme)
166
  * [Wallet](https://easydigitaldownloads.com/downloads/wallet/?utm_source=gateway&utm_medium=faq_tab&utm_content=wallet&utm_campaign=readme)
167
  * [BitPay](https://easydigitaldownloads.com/downloads/bitpay-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=bitpay-payment-gateway&utm_campaign=readme)
169
  * [SOFORT Banking](https://easydigitaldownloads.com/downloads/sofort-banking-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=sofort-banking-gateway&utm_campaign=readme)
170
  * [PayU India](https://easydigitaldownloads.com/downloads/payu-india-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payu-india-payment-gateway&utm_campaign=readme)
171
  * [Payza](https://easydigitaldownloads.com/downloads/payza-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payza-payment-gateway&utm_campaign=readme)
172
+ * [MercadoPago](https://easydigitaldownloads.com/downloads/mercadopago/?utm_source=gateway&utm_medium=faq_tab&utm_content=mercadopago&utm_campaign=readme)
173
+ * [First Data](https://easydigitaldownloads.com/downloads/first-data-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=first-data-payment-gateway&utm_campaign=readme)
174
  * [PayPlug](https://easydigitaldownloads.com/downloads/payplug-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payplug-gateway&utm_campaign=readme)
175
  * [GoCardless](https://easydigitaldownloads.com/downloads/gocardless-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=gocardless-payment-gateway&utm_campaign=readme)
176
+ * [Dwolla](https://easydigitaldownloads.com/downloads/dwolla/?utm_source=gateway&utm_medium=faq_tab&utm_content=dwolla&utm_campaign=readme)
177
  * [Zombaio](https://easydigitaldownloads.com/downloads/zombaio-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=zombaio-payment-gateway&utm_campaign=readme)
178
+ * [Recurly](https://easydigitaldownloads.com/downloads/recurly-com-checkout/?utm_source=gateway&utm_medium=faq_tab&utm_content=recurly-com-checkout&utm_campaign=readme)
179
  * [Realex](https://easydigitaldownloads.com/downloads/realex-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=realex-gateway&utm_campaign=readme)
180
  * [CyberSource](https://easydigitaldownloads.com/downloads/cybersource-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=cybersource-gateway&utm_campaign=readme)
181
+ * [NETbilling](https://easydigitaldownloads.com/downloads/netbilling-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=netbilling-gateway&utm_campaign=readme)
182
  * [Paylane](https://easydigitaldownloads.com/downloads/paylane-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=paylane-payment-gateway&utm_campaign=readme)
183
  * [ePay](https://easydigitaldownloads.com/downloads/epay-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=epay-payment-gateway&utm_campaign=readme)
184
  * [Netbanx](https://easydigitaldownloads.com/downloads/netbanx-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=netbanx-payment-gateway&utm_campaign=readme)
185
+ * [NoChex](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
186
+ * [Network Merchants](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
187
+ * [Direct One](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
188
+ * [Moneris Solutions](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
189
+ * [My Virtual Merchant](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
190
+ * [NAB](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
191
+ * [eWay](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
192
+ * [Beanstream](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
193
+ * [Quickbooks](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
194
+ * [PayFast](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
195
+ * [WorldPay](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
196
+ * [Payment Express](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=gateway&utm_medium=faq_tab&utm_content=nochex-gateway&utm_campaign=readme#gateways)
197
  * [Realex](https://easydigitaldownloads.com/downloads/realex-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=realex-gateway&utm_campaign=readme)
198
  * [PayTrace](https://easydigitaldownloads.com/downloads/paytrace/?utm_source=gateway&utm_medium=faq_tab&utm_content=paytrace&utm_campaign=readme)
199
  * [iPay88](https://easydigitaldownloads.com/downloads/ipay88-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=ipay88-gateway&utm_campaign=readme)
213
 
214
  == Changelog ==
215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  = 2.7.11, June 21, 2017 =
217
 
218
  * Fix: Amazon Payments had errors being displayed at incorrect times.
238
  * Fix: Use once per customer option on discount codes does not respect case sensitivity
239
  * Fix: Date filters on payment history not working properly
240
  * Fix: Tax rates of less than 1 calculates an incorrect total
241
+ * Fix: edd_unset_cart_discount() is case senstive when it should not be
242
  * Fix: PHP 7 compatibility flags due to safe_mode checks
243
  * Fix: Download files not imported properly when file URL/path begins with a forward slash
244
  * Fix: Pending verification message shown multiple times if the page contains multiple shortcodes
464
  * New: Allow exporting the file download history of a specific product.
465
  * New: Add action after discount is added to the cart.
466
  * New: Add action hook called "edd_payment_saved" for when EDD_Payment::save() is run.
467
+ * New: Add "author" paramater support to [downloads] shortcode with support for username or ID.
468
  * Tweak: Correct branding of necessary assets.
469
  * Tweak: Block self-pings in tracking check-ins.
470
  * Tweak: Update author and author URI to Easy Digital Downloads.
821
 
822
  * New: Added refund() method to EDD_Payment class
823
  * New: Added filters to enable/disable product and customer stat adjustments during refunds
824
+ * New: Addded new hooks to EDD_Payment class that run before payment is setup
825
  * Tweak: Improved taxonomy labels for categories and tags
826
  * Tweak: Automatically flush permalinks when a 404 is detected on EDD archive pages
827
  * Tweak: Add proper 403 headers to REST API
templates/edd.css CHANGED
@@ -680,29 +680,15 @@ table#edd_purchase_receipt_products .edd_bundled_product_name {
680
 
681
  /* =Registration / login Form
682
  -------------------------------------------------------------- */
683
- #edd_register_form legend,
684
- #edd_login_form legend {
685
- font-size: 120%;
686
- margin-bottom: 1em;
687
- }
688
-
689
- #edd_register_form fieldset,
690
- #edd_login_form fieldset {
691
- border: none;
692
- }
693
-
694
  #edd_register_form .edd-input,
695
- #edd_login_form .edd-input {
696
- -webkit-box-sizing: border-box;
697
- -moz-box-sizing: border-box;
698
- box-sizing: border-box;
699
- }
700
-
701
  #edd_register_form label,
702
  #edd_login_form label {
703
- cursor: pointer;
 
704
  }
705
 
 
706
  /* =Profile Form
707
  -------------------------------------------------------------- */
708
  #edd_profile_editor_form p {
@@ -821,6 +807,13 @@ input[type="submit"].edd-submit:focus {
821
  outline: 5px auto -webkit-focus-ring-color;
822
  outline-offset: -2px;
823
  }
 
 
 
 
 
 
 
824
  .edd-submit.button:active {
825
  background-image: none;
826
  outline: 0;
@@ -829,10 +822,6 @@ input[type="submit"].edd-submit:focus {
829
  }
830
  .edd-submit.plain {
831
  padding: 0;
832
- border: none;
833
- -webkit-border-radius: 0;
834
- -moz-border-radius: 0;
835
- border-radius: 0;
836
  }
837
 
838
  /** Gray (Default) */
@@ -981,11 +970,6 @@ input[type="submit"].edd-submit:focus {
981
 
982
  /* =Downloads Shortcode
983
  -------------------------------------------------------------- */
984
- .edd_downloads_list:after {
985
- content: "";
986
- display: table;
987
- clear: both;
988
- }
989
  .edd_download {
990
  float: left;
991
  }
@@ -1000,22 +984,13 @@ input[type="submit"].edd-submit:focus {
1000
  padding: 0 8px 8px;
1001
  margin: 0 0 10px;
1002
  }
1003
- .edd_download_columns_2 .edd_download:nth-child(2n+1),
1004
- .edd_download_columns_3 .edd_download:nth-child(3n+1),
1005
- .edd_download_columns_4 .edd_download:nth-child(4n+1),
1006
- .edd_download_columns_5 .edd_download:nth-child(5n+1),
1007
- .edd_download_columns_6 .edd_download:nth-child(6n+1) {
1008
- clear: left;
1009
- }
1010
  .edd_download_image {
1011
  max-width: 100%;
1012
  }
1013
  .edd_download .edd_price {
1014
  margin-bottom: 10px;
1015
  }
1016
- #edd_download_pagination {
1017
- clear: both;
1018
- }
1019
 
1020
  /* =Misc styles
1021
  -------------------------------------------------------------- */
680
 
681
  /* =Registration / login Form
682
  -------------------------------------------------------------- */
 
 
 
 
 
 
 
 
 
 
 
683
  #edd_register_form .edd-input,
684
+ #edd_login_form .edd-input,
 
 
 
 
 
685
  #edd_register_form label,
686
  #edd_login_form label {
687
+ display: inline-block;
688
+ width: 200px;
689
  }
690
 
691
+
692
  /* =Profile Form
693
  -------------------------------------------------------------- */
694
  #edd_profile_editor_form p {
807
  outline: 5px auto -webkit-focus-ring-color;
808
  outline-offset: -2px;
809
  }
810
+ input[type="submit"].edd-submit:hover,
811
+ input[type="submit"].edd-submit:focus,
812
+ .edd-submit.button:hover,
813
+ .edd-submit.button:focus {
814
+ color: #333333;
815
+ text-decoration: none;
816
+ }
817
  .edd-submit.button:active {
818
  background-image: none;
819
  outline: 0;
822
  }
823
  .edd-submit.plain {
824
  padding: 0;
 
 
 
 
825
  }
826
 
827
  /** Gray (Default) */
970
 
971
  /* =Downloads Shortcode
972
  -------------------------------------------------------------- */
 
 
 
 
 
973
  .edd_download {
974
  float: left;
975
  }
984
  padding: 0 8px 8px;
985
  margin: 0 0 10px;
986
  }
 
 
 
 
 
 
 
987
  .edd_download_image {
988
  max-width: 100%;
989
  }
990
  .edd_download .edd_price {
991
  margin-bottom: 10px;
992
  }
993
+
 
 
994
 
995
  /* =Misc styles
996
  -------------------------------------------------------------- */
templates/edd.min.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";#edd_checkout_form_wrap label:after,.edd_clearfix:after{visibility:hidden;float:none;text-indent:-9999px;content:".";clear:both}#edd_login_form label,#edd_register_form label,.edd-amazon-logout a,input.edd_submit_plain{cursor:pointer}.edd-icon{display:inline-block;fill:currentColor;position:relative;top:-.0625em;vertical-align:middle;width:1em;height:1em}.edd-icon-lock{top:-.125rem}.edd-icon-spin{display:inline-block;-moz-animation:edd-icon-spin 2s infinite linear;-o-animation:edd-icon-spin 2s infinite linear;-webkit-animation:edd-icon-spin 2s infinite linear;animation:edd-icon-spin 2s infinite linear}@-moz-keyframes edd-icon-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes edd-icon-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes edd-icon-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes edd-icon-spin{0%{-ms-transform:rotate(0)}100%{-ms-transform:rotate(359deg)}}@keyframes edd-icon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.edd_clearfix:after{display:block}#edd_checkout_cart{text-align:left;width:100%;border:none;margin:0 0 21px;table-layout:auto}#edd_checkout_cart td,#edd_checkout_cart th{text-align:left;border:1px solid #eee;color:#666;padding:.5em 1.387em}#edd_checkout_cart .edd_cart_header_row th{background:#fafafa;padding:1.387em}#edd_checkout_cart .edd_cart_discount_row th,#edd_checkout_cart .edd_cart_tax_row th{background:0 0}#edd_checkout_cart th{font-weight:700}#edd_checkout_cart td{line-height:25px;vertical-align:middle;background:#fff}#edd_checkout_cart td.edd_cart_actions,#edd_checkout_cart td:last-child,#edd_checkout_cart th.edd_cart_actions,#edd_checkout_cart th.edd_cart_total,#edd_checkout_cart th:last-child{text-align:right}#edd_checkout_cart td img{float:left;margin:0 8px 0 0;background:0 0;padding:0;border:none}#edd_checkout_cart input.edd-item-quantity{width:3em;padding:2px}#edd_checkout_cart .edd_discount{display:inline-block;margin-left:5px}.edd_discount_remove{display:inline-block;width:10px;height:11px;background:url(images/xit.gif) no-repeat;position:relative;top:3px}.edd_discount_remove:hover{background-position:-10px 0}#edd_checkout_cart br{display:none}#edd_checkout_cart a.edd-cart-saving-button{font-weight:400;text-decoration:none}#edd_checkout_form_wrap legend{display:block;font-size:120%;line-height:1;font-weight:700;width:100%;margin:0 0 21px;padding:0}#edd_checkout_form_wrap label{font-weight:700;display:block;position:relative;line-height:100%;font-size:95%;margin:0 0 5px}#edd_checkout_form_wrap label:after{display:block;height:0}#edd_checkout_form_wrap span.edd-description{color:#666;font-size:80%;display:block;margin:0 0 5px}#edd_checkout_form_wrap input.edd-input,#edd_checkout_form_wrap textarea.edd-input{display:inline-block;width:70%}#edd_checkout_form_wrap select.edd-select{display:block;width:60%}#edd_checkout_form_wrap select.edd-select.edd-select-small{display:inline;width:auto}#edd_checkout_form_wrap input.edd-input.error,#edd_checkout_form_wrap textarea.edd-input.error{border-color:#c4554e}#edd_checkout_form_wrap>p{margin:0 0 21px}#edd_checkout_form_wrap span.edd-required-indicator{color:#b94a48;display:inline}#edd_checkout_form_wrap input[type=text],#edd_checkout_form_wrap input[type=email],#edd_checkout_form_wrap input[type=password],#edd_checkout_form_wrap input[type=tel],#edd_checkout_form_wrap textarea{padding:4px 6px}#edd_checkout_form_wrap input[type=radio]{border:none;margin-right:5px}#edd_checkout_form_wrap input[type=checkbox]{display:inline-block;margin:0 5px 0 0}#edd_checkout_form_wrap input[type=checkbox]+label,#edd_checkout_form_wrap input[type=checkbox]+label:after{display:inline}#edd_checkout_form_wrap .edd-payment-icons{height:32px;display:block;margin:0 0 8px}#edd_checkout_form_wrap .edd-payment-icons img.payment-icon{max-height:32px;width:auto;margin:0 3px 0 0;float:left;background:0 0;padding:0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#edd_checkout_form_wrap #edd-payment-mode-wrap label{display:inline-block;margin:0 20px 0 0}#edd_checkout_form_wrap #edd-payment-mode-wrap .edd-payment-mode-label{font-weight:700;display:inline-block;position:relative;margin-bottom:5px}#edd_checkout_form_wrap fieldset{border:1px solid #eee;padding:1.387em;margin:0 0 21px}#edd_checkout_form_wrap #edd_discount_code,#edd_checkout_form_wrap #edd_purchase_submit,#edd_checkout_form_wrap #edd_register_account_fields{padding:0;border:none}#edd_checkout_form_wrap fieldset fieldset{margin:0;border:none;padding:0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount,#edd_checkout_form_wrap .edd-cart-adjustment{background:#fafafa;color:#666;padding:.5em 1.387em}#edd_checkout_form_wrap #edd-discount-code-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount{border:1px solid #eee}#edd_checkout_form_wrap .edd-cart-adjustment{padding:1.387em}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-input,#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{display:inline-block}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{padding:3px 12px;margin-bottom:2px}#edd_checkout_form_wrap #edd_purchase_final_total p,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_login_password,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_register_password{margin:0}#edd_checkout_form_wrap #edd-discount-error-wrap{width:100%;display:inline-block;margin:1em 0 0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap{margin:-1.387em -1.387em 21px;border-left:none;border-right:none;border-top:none}#edd_checkout_form_wrap #edd_payment_mode_select,#edd_checkout_form_wrap fieldset#edd_register_fields #edd_checkout_user_info{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_account_fields legend{padding-top:11px}#edd_checkout_form_wrap fieldset#edd_cc_fields{border:1px solid #f0f0f0;background:#f9f9f9;position:relative}#edd_checkout_form_wrap fieldset#edd_cc_fields legend{border:none;padding:0}#edd_checkout_form_wrap fieldset p:last-child{margin-bottom:0}#edd_checkout_form_wrap fieldset#edd_cc_fields #edd-card-number-wrap{margin-top:5px}#edd_checkout_form_wrap #edd_purchase_final_total{margin:21px 0}#edd_secure_site_wrapper{padding:4px 4px 4px 0;font-weight:700}#edd_checkout_form_wrap input.edd-input.card-number.valid{background-image:url(images/tick.png);background-repeat:no-repeat;background-position:98% 50%}#edd_checkout_form_wrap span.exp-divider{display:inline}#edd_checkout_form_wrap span.card-type{position:absolute;top:-2px;right:0;width:43px;height:32px;background-size:43px 32px!important}#edd_checkout_form_wrap span.card-type.off{display:none}#edd_checkout_form_wrap span.card-type.visa{background:url(images/icons/visa.png) no-repeat}#edd_checkout_form_wrap span.card-type.mastercard{background:url(images/icons/mastercard.png) no-repeat}#edd_checkout_form_wrap span.card-type.discover{background:url(images/icons/discover.png) no-repeat}#edd_checkout_form_wrap span.card-type.amex{background:url(images/icons/americanexpress.png) no-repeat}#edd_checkout_form_wrap .edd-cart-ajax{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.edd-amazon-profile-wrapper{font-size:12px}.edd-amazon-profile-name{font-weight:600}.edd-amazon-logout{font-size:10px;line-height:12px}#edd-amazon-address-box,#edd-amazon-wallet-box{height:228px;width:350px}#edd-amazon-address-box{margin-bottom:15px}@media only screen and (min-width:768px){#edd-amazon-address-box,#edd-amazon-wallet-box{width:100%;height:228px}}.edd_purchase_submit_wrapper{position:relative}.edd_purchase_submit_wrapper a.edd-add-to-cart{text-decoration:none;display:none;position:relative;overflow:hidden}.edd_purchase_submit_wrapper a.edd-add-to-cart.edd-has-js{display:inline-block}.edd_purchase_submit_wrapper .edd-cart-ajax{display:none;position:relative;left:-35px}.edd-submit.button.edd-ajax-loading{padding-right:30px}.edd-add-to-cart .edd-add-to-cart-label{opacity:1;filter:alpha(opacity=100)}.edd-loading,.edd-loading:after{border-radius:50%;display:block;width:1.5em;height:1.5em}.edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:.2em solid rgba(255,255,255,.2);border-right:.2em solid rgba(255,255,255,.2);border-bottom:.2em solid rgba(255,255,255,.2);border-left:.2em solid #fff;font-size:.75em;position:absolute;left:calc(50% - .75em);top:calc(50% - .75em);opacity:0;filter:alpha(opacity=0);-ms-transform:translateZ(0);transform:translateZ(0)}.edd-discount-loader.edd-loading,.edd-loading-ajax.edd-loading,a.edd-add-to-cart.white .edd-loading{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#000}.edd-loading-ajax.edd-loading{display:inline-block;position:relative;top:0;left:.25em;vertical-align:middle;opacity:1}#edd_checkout_form_wrap .edd-cart-adjustment .edd-apply-discount.edd-submit{display:inline-block}.edd-discount-loader.edd-loading{display:inline-block;position:relative;left:auto;vertical-align:middle;width:1.25em;height:1.25em}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.edd-loading,a.edd-add-to-cart .edd-add-to-cart-label{-webkit-transition:.1s opacity!important;-moz-transition:.1s opacity!important;-ms-transition:.1s opacity!important;-o-transition:.1s opacity!important;transition:.1s opacity!important}.edd-add-to-cart[data-edd-loading] .edd-add-to-cart-label{opacity:0;filter:alpha(opacity=0)}.edd-add-to-cart[data-edd-loading] .edd-loading,.edd-discount-loader.edd-loading{opacity:1;filter:alpha(opacity=100)}.edd-cart-added-alert{color:#567622;display:block;position:absolute}.edd-cart-ajax,body.edd_receipt_page:before{position:relative}.edd_form input.edd-input.required,.edd_form select.edd-select.required{color:#000}body.edd_receipt_page{background-color:#fff;color:#141412;margin:0;font-family:Helvetica,sans-serif;font-size:12px}#edd_user_history .edd_purchase_status.cancelled,#edd_user_history .edd_purchase_status.failed,#edd_user_history .edd_purchase_status.pending,#edd_user_history .edd_purchase_status.revoked,table#edd_purchase_receipt .edd_receipt_payment_status.cancelled,table#edd_purchase_receipt .edd_receipt_payment_status.failed,table#edd_purchase_receipt .edd_receipt_payment_status.pending,table#edd_purchase_receipt .edd_receipt_payment_status.revoked{color:#f73f2e}body.edd_receipt_page #edd_receipt_wrapper{width:660px;margin:0 auto;padding:50px 0}body.edd_receipt_page table{display:table;width:100%;border-bottom:1px solid #ededed;border-collapse:collapse;border-spacing:0;font-size:14px;line-height:2;margin:0 0 20px}body.edd_receipt_page td,body.edd_receipt_page th{display:table-cell;text-align:left;border-top:1px solid #ededed;padding:6px 10px;font-weight:400}body.edd_receipt_page th{font-weight:700;text-transform:uppercase}body.edd_receipt_page h3{font-size:22px;margin:40px 0 5px;clear:both;display:block;font-weight:700}body.edd_receipt_page li{list-style:none}table#edd_purchase_receipt,table#edd_purchase_receipt_products{width:100%}table#edd_purchase_receipt td,table#edd_purchase_receipt th,table#edd_purchase_receipt_products td,table#edd_purchase_receipt_products th{text-align:left}table#edd_purchase_receipt_products li{list-style:none;margin:0 0 8px 10px}table#edd_purchase_receipt ul,table#edd_purchase_receipt_products ul.edd_purchase_receipt_files{margin:0;padding:0}table#edd_purchase_receipt li.edd_download_file{list-style:none;margin:0 0 8px}table#edd_purchase_receipt_products .edd_purchase_receipt_product_notes{font-style:italic}table#edd_purchase_receipt_products .edd_purchase_receipt_product_name{font-weight:700}table#edd_purchase_receipt_products .edd_bundled_product_name{font-style:italic;font-weight:700}#edd_user_history{text-align:left;width:100%;border-top:1px solid #f0f0f0;border-bottom:none}#edd_user_history td,#edd_user_history th{text-align:left;padding:3px 5px;border-bottom:1px solid #f0f0f0;border-top:none}#edd_user_history th{font-weight:700;background:#f5f5f5}#edd_user_history td{line-height:25px;vertical-align:middle}#edd_login_form legend,#edd_register_form legend{font-size:120%;margin-bottom:1em}#edd_login_form fieldset,#edd_register_form fieldset{border:none}#edd_login_form .edd-input,#edd_register_form .edd-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#edd_profile_editor_form p{margin-bottom:8px}#edd_profile_editor_form label{display:inline-block}#edd_profile_editor_form .edd-profile-emails{list-style-type:none;display:inline-table;margin-left:0;margin-bottom:0}#edd_profile_editor_form .edd-profile-email{width:auto}#edd_profile_editor_form .edd-profile-email .actions{display:none}#edd_profile_editor_form .edd-profile-email:hover>span{display:inline-block}.edd_added_to_cart_alert{padding:5px;font-size:14px;border:1px solid #046a9e;background:#9ecce2;color:#333;margin:8px 0}.edd_added_to_cart_alert a.edd_alert_checkout_link{color:#000!important}input.edd_submit_plain{background:0 0!important;border:none!important;padding:0!important;display:inline}.single-download .edd_download_purchase_form{margin-bottom:1.387em}.edd_download_purchase_form .edd_download_quantity_wrapper{margin:0 0 .5em}.edd_download_purchase_form .edd_download_quantity_wrapper .edd-item-quantity{width:75px}.edd_download_purchase_form .edd_price_options{margin:0 0 15px}.edd_download_purchase_form .edd_price_options ul{margin:0;padding:0;list-style:none}.edd_download_purchase_form .edd_price_options li{display:block;padding:0;margin:0}.edd_download_purchase_form .edd_price_options span{display:inline;padding:0;margin:0}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper{padding-left:18px}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper *{font-size:80%}.edd_download_purchase_form .edd_price_options input.edd-item-quantity{display:inline;width:50px;max-width:90%}#edd-purchase-button,.edd-submit,input[type=submit].edd-submit{display:inline-block;padding:6px 12px;margin:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.edd-submit.button:focus,input[type=submit].edd-submit:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.edd-submit.button:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.edd-submit.plain{padding:0;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.edd-submit.button,.edd-submit.button.gray,.edd-submit.button:visited{color:#333;background:#f0f0f0;border-color:#ccc}.edd-submit.button.gray:active,.edd-submit.button.gray:focus,.edd-submit.button.gray:hover,.edd-submit.button:active,.edd-submit.button:focus,.edd-submit.button:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.gray:active{background-image:none}.edd-submit.button.white{color:#333;background:#fff;border-color:#ccc}.edd-submit.button.white:active,.edd-submit.button.white:focus,.edd-submit.button.white:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.white:active{background-image:none}.edd-submit.button.blue{color:#fff;background:#428bca;border-color:#357ebd}.edd-submit.button.blue.active,.edd-submit.button.blue:focus,.edd-submit.button.blue:hover{color:#fff;background:#3276b1;border-color:#285e8e}.edd-submit.button.blue.active{background-image:none}.edd-submit.button.red{color:#fff;background:#d9534f;border-color:#d43f3a}.edd-submit.button.red:active,.edd-submit.button.red:focus,.edd-submit.button.red:hover{color:#fff;background:#d2322d;border-color:#ac2925}.edd-submit.button.red:active{background-image:none}.edd-submit.button.green{color:#fff;background:#5cb85c;border-color:#4cae4c}.edd-submit.button.green:active,.edd-submit.button.green:focus,.edd-submit.button.green:hover{color:#fff;background:#47a447;border-color:#398439}.edd-submit.button.green:active{background-image:none}.edd-submit.button.yellow{color:#fff;background:#f0ad4e;border-color:#eea236}.edd-submit.button.yellow:active,.edd-submit.button.yellow:focus,.edd-submit.button.yellow:hover{color:#fff;background:#ed9c28;border-color:#d58512}.edd-submit.button.yellow:active{background-image:none}.edd-submit.button.orange{color:#fff;background:#ed9c28;border-color:#e3921e}.edd-submit.button.orange:active,.edd-submit.button.orange:focus,.edd-submit.button.orange:hover{color:#fff;background:#e59016;border-color:#d58512}.edd-submit.button.orange:active{background-image:none}.edd-submit.button.dark-gray{color:#fff;background:#363636;border-color:#222}.edd-submit.button.dark-gray:active,.edd-submit.button.dark-gray:focus,.edd-submit.button.dark-gray:hover{color:#fff;background:#333;border-color:#adadad}.edd-submit.button.dark-gray:active{background-image:none}.edd_downloads_list:after{content:"";display:table;clear:both}.edd_download{float:left}.edd_download_columns_1 .edd_download{width:100%}.edd_download_columns_2 .edd_download{width:50%}.edd_download_columns_0 .edd_download,.edd_download_columns_3 .edd_download{width:33%}.edd_download_columns_4 .edd_download{width:25%}.edd_download_columns_5 .edd_download{width:20%}.edd_download_columns_6 .edd_download{width:16.6%}.edd_download_inner{padding:0 8px 8px;margin:0 0 10px}.edd_download_columns_2 .edd_download:nth-child(2n+1),.edd_download_columns_3 .edd_download:nth-child(3n+1),.edd_download_columns_4 .edd_download:nth-child(4n+1),.edd_download_columns_5 .edd_download:nth-child(5n+1),.edd_download_columns_6 .edd_download:nth-child(6n+1){clear:left}.edd_download_image{max-width:100%}.edd_download .edd_price{margin-bottom:10px}#edd_download_pagination{clear:both}.edd-hide-on-empty.cart-empty{display:none}edd-hide-on-empty.cart-not.empty{display:block}.edd-cart-ajax{margin:0 8px 0 4px;top:2px;background:0 0;border:none;padding:0}.edd-cart-number-of-items{font-style:italic;color:grey}.edd-cart-meta.edd_subtotal{font-weight:700;font-style:italic}.edd-cart-meta.edd_cart_tax{font-size:1em;font-style:italic}.edd-cart-meta.edd_cart_tax::before{font-style:normal}.edd-cart-meta.edd_total{font-weight:700}.edd-cart-meta{padding:2px 5px}.edd-cart-meta.edd_subtotal,.edd-cart-meta.edd_total{background-color:#f9f9f9}.edd_errors:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #E6DB55;margin:0 0 21px;background:#FFFFE0;color:#333}.edd_error{padding:10px}p.edd_error{margin:0!important}.edd_success:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #b3ce89;margin:20px 0;background:#d5eab3;color:#567622;padding:6px 8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}.edd-alert{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;margin-bottom:20px;padding:10px;border:1px solid transparent;vertical-align:middle}.edd-alert p{padding:0}.edd-alert p:not(:last-child){margin-bottom:5px}.edd-alert p:last-child{margin-bottom:0}.edd-alert-error{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.edd-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.edd-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.edd-alert-warn{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}
1
+ @charset "UTF-8";#edd_checkout_form_wrap label:after,.edd_clearfix:after{visibility:hidden;float:none;text-indent:-9999px;content:".";clear:both}.edd-icon{display:inline-block;fill:currentColor;position:relative;top:-.0625em;vertical-align:middle;width:1em;height:1em}.edd-icon-lock{top:-.125rem}.edd-icon-spin{display:inline-block;-moz-animation:edd-icon-spin 2s infinite linear;-o-animation:edd-icon-spin 2s infinite linear;-webkit-animation:edd-icon-spin 2s infinite linear;animation:edd-icon-spin 2s infinite linear}@-moz-keyframes edd-icon-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes edd-icon-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes edd-icon-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes edd-icon-spin{0%{-ms-transform:rotate(0)}100%{-ms-transform:rotate(359deg)}}@keyframes edd-icon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.edd_clearfix:after{display:block}#edd_checkout_cart{text-align:left;width:100%;border:none;margin:0 0 21px;table-layout:auto}#edd_checkout_cart td,#edd_checkout_cart th{text-align:left;border:1px solid #eee;color:#666;padding:.5em 1.387em}#edd_checkout_cart .edd_cart_header_row th{background:#fafafa;padding:1.387em}#edd_checkout_cart .edd_cart_discount_row th,#edd_checkout_cart .edd_cart_tax_row th{background:0 0}#edd_checkout_cart th{font-weight:700}#edd_checkout_cart td{line-height:25px;vertical-align:middle;background:#fff}#edd_checkout_cart td.edd_cart_actions,#edd_checkout_cart td:last-child,#edd_checkout_cart th.edd_cart_actions,#edd_checkout_cart th.edd_cart_total,#edd_checkout_cart th:last-child{text-align:right}#edd_checkout_cart td img{float:left;margin:0 8px 0 0;background:0 0;padding:0;border:none}#edd_checkout_cart input.edd-item-quantity{width:3em;padding:2px}#edd_checkout_cart .edd_discount{display:inline-block;margin-left:5px}.edd_discount_remove{display:inline-block;width:10px;height:11px;background:url(images/xit.gif) no-repeat;position:relative;top:3px}.edd_discount_remove:hover{background-position:-10px 0}#edd_checkout_cart br{display:none}#edd_checkout_cart a.edd-cart-saving-button{font-weight:400;text-decoration:none}#edd_checkout_form_wrap legend{display:block;font-size:120%;line-height:1;font-weight:700;width:100%;margin:0 0 21px;padding:0}#edd_checkout_form_wrap label{font-weight:700;display:block;position:relative;line-height:100%;font-size:95%;margin:0 0 5px}#edd_checkout_form_wrap label:after{display:block;height:0}#edd_checkout_form_wrap span.edd-description{color:#666;font-size:80%;display:block;margin:0 0 5px}#edd_checkout_form_wrap input.edd-input,#edd_checkout_form_wrap textarea.edd-input{display:inline-block;width:70%}#edd_checkout_form_wrap select.edd-select{display:block;width:60%}#edd_checkout_form_wrap select.edd-select.edd-select-small{display:inline;width:auto}#edd_checkout_form_wrap input.edd-input.error,#edd_checkout_form_wrap textarea.edd-input.error{border-color:#c4554e}#edd_checkout_form_wrap>p{margin:0 0 21px}#edd_checkout_form_wrap span.edd-required-indicator{color:#b94a48;display:inline}#edd_checkout_form_wrap input[type=text],#edd_checkout_form_wrap input[type=email],#edd_checkout_form_wrap input[type=password],#edd_checkout_form_wrap input[type=tel],#edd_checkout_form_wrap textarea{padding:4px 6px}#edd_checkout_form_wrap input[type=radio]{border:none;margin-right:5px}#edd_checkout_form_wrap input[type=checkbox]{display:inline-block;margin:0 5px 0 0}#edd_checkout_form_wrap input[type=checkbox]+label,#edd_checkout_form_wrap input[type=checkbox]+label:after{display:inline}#edd_checkout_form_wrap .edd-payment-icons{height:32px;display:block;margin:0 0 8px}#edd_checkout_form_wrap .edd-payment-icons img.payment-icon{max-height:32px;width:auto;margin:0 3px 0 0;float:left;background:0 0;padding:0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#edd_checkout_form_wrap #edd-payment-mode-wrap label{display:inline-block;margin:0 20px 0 0}#edd_checkout_form_wrap #edd-payment-mode-wrap .edd-payment-mode-label{font-weight:700;display:inline-block;position:relative;margin-bottom:5px}#edd_checkout_form_wrap fieldset{border:1px solid #eee;padding:1.387em;margin:0 0 21px}#edd_checkout_form_wrap #edd_discount_code,#edd_checkout_form_wrap #edd_purchase_submit,#edd_checkout_form_wrap #edd_register_account_fields{padding:0;border:none}#edd_checkout_form_wrap fieldset fieldset{margin:0;border:none;padding:0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount,#edd_checkout_form_wrap .edd-cart-adjustment{background:#fafafa;color:#666;padding:.5em 1.387em}#edd_checkout_form_wrap #edd-discount-code-wrap,#edd_checkout_form_wrap #edd_final_total_wrap,#edd_checkout_form_wrap #edd_show_discount{border:1px solid #eee}#edd_checkout_form_wrap .edd-cart-adjustment{padding:1.387em}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-input,#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{display:inline-block}#edd_checkout_form_wrap .edd-cart-adjustment input.edd-submit{padding:3px 12px;margin-bottom:2px}#edd_checkout_form_wrap #edd_purchase_final_total p,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_login_password,#edd_checkout_form_wrap fieldset#edd_register_account_fields p.edd_register_password{margin:0}#edd_checkout_form_wrap #edd-discount-error-wrap{width:100%;display:inline-block;margin:1em 0 0}#edd_checkout_form_wrap #edd-login-account-wrap,#edd_checkout_form_wrap #edd-new-account-wrap{margin:-1.387em -1.387em 21px;border-left:none;border-right:none;border-top:none}#edd_checkout_form_wrap #edd_payment_mode_select,#edd_checkout_form_wrap fieldset#edd_register_fields #edd_checkout_user_info{margin-bottom:21px}#edd_checkout_form_wrap fieldset#edd_register_account_fields legend{padding-top:11px}#edd_checkout_form_wrap fieldset#edd_cc_fields{border:1px solid #f0f0f0;background:#f9f9f9;position:relative}#edd_checkout_form_wrap fieldset#edd_cc_fields legend{border:none;padding:0}#edd_checkout_form_wrap fieldset p:last-child{margin-bottom:0}#edd_checkout_form_wrap fieldset#edd_cc_fields #edd-card-number-wrap{margin-top:5px}#edd_checkout_form_wrap #edd_purchase_final_total{margin:21px 0}#edd_secure_site_wrapper{padding:4px 4px 4px 0;font-weight:700}#edd_checkout_form_wrap input.edd-input.card-number.valid{background-image:url(images/tick.png);background-repeat:no-repeat;background-position:98% 50%}#edd_checkout_form_wrap span.exp-divider{display:inline}#edd_checkout_form_wrap span.card-type{position:absolute;top:-2px;right:0;width:43px;height:32px;background-size:43px 32px!important}#edd_checkout_form_wrap span.card-type.off{display:none}#edd_checkout_form_wrap span.card-type.visa{background:url(images/icons/visa.png) no-repeat}#edd_checkout_form_wrap span.card-type.mastercard{background:url(images/icons/mastercard.png) no-repeat}#edd_checkout_form_wrap span.card-type.discover{background:url(images/icons/discover.png) no-repeat}#edd_checkout_form_wrap span.card-type.amex{background:url(images/icons/americanexpress.png) no-repeat}#edd_checkout_form_wrap .edd-cart-ajax{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.edd-amazon-profile-wrapper{font-size:12px}.edd-amazon-profile-name{font-weight:600}.edd-amazon-logout{font-size:10px;line-height:12px}.edd-amazon-logout a{cursor:pointer}#edd-amazon-address-box,#edd-amazon-wallet-box{height:228px;width:350px}#edd-amazon-address-box{margin-bottom:15px}@media only screen and (min-width:768px){#edd-amazon-address-box,#edd-amazon-wallet-box{width:100%;height:228px}}.edd_purchase_submit_wrapper{position:relative}.edd_purchase_submit_wrapper a.edd-add-to-cart{text-decoration:none;display:none;position:relative;overflow:hidden}.edd_purchase_submit_wrapper a.edd-add-to-cart.edd-has-js{display:inline-block}.edd_purchase_submit_wrapper .edd-cart-ajax{display:none;position:relative;left:-35px}.edd-submit.button.edd-ajax-loading{padding-right:30px}.edd-add-to-cart .edd-add-to-cart-label{opacity:1;filter:alpha(opacity=100)}.edd-loading,.edd-loading:after{border-radius:50%;display:block;width:1.5em;height:1.5em}.edd-loading{-webkit-animation:edd-spinning 1.1s infinite linear;animation:edd-spinning 1.1s infinite linear;border-top:.2em solid rgba(255,255,255,.2);border-right:.2em solid rgba(255,255,255,.2);border-bottom:.2em solid rgba(255,255,255,.2);border-left:.2em solid #fff;font-size:.75em;position:absolute;left:calc(50% - .75em);top:calc(50% - .75em);opacity:0;filter:alpha(opacity=0);-ms-transform:translateZ(0);transform:translateZ(0)}.edd-discount-loader.edd-loading,.edd-loading-ajax.edd-loading,a.edd-add-to-cart.white .edd-loading{border-top-color:rgba(0,0,0,.2);border-right-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);border-left-color:#000}.edd-loading-ajax.edd-loading{display:inline-block;position:relative;top:0;left:.25em;vertical-align:middle;opacity:1}#edd_checkout_form_wrap .edd-cart-adjustment .edd-apply-discount.edd-submit{display:inline-block}.edd-discount-loader.edd-loading{display:inline-block;position:relative;left:auto;vertical-align:middle;width:1.25em;height:1.25em}@-webkit-keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes edd-spinning{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.edd-loading,a.edd-add-to-cart .edd-add-to-cart-label{-webkit-transition:.1s opacity!important;-moz-transition:.1s opacity!important;-ms-transition:.1s opacity!important;-o-transition:.1s opacity!important;transition:.1s opacity!important}.edd-add-to-cart[data-edd-loading] .edd-add-to-cart-label{opacity:0;filter:alpha(opacity=0)}.edd-add-to-cart[data-edd-loading] .edd-loading,.edd-discount-loader.edd-loading{opacity:1;filter:alpha(opacity=100)}.edd-cart-added-alert{color:#567622;display:block;position:absolute}.edd-cart-ajax,body.edd_receipt_page:before{position:relative}.edd_form input.edd-input.required,.edd_form select.edd-select.required{color:#000}body.edd_receipt_page{background-color:#fff;color:#141412;margin:0;font-family:Helvetica,sans-serif;font-size:12px}#edd_user_history .edd_purchase_status.cancelled,#edd_user_history .edd_purchase_status.failed,#edd_user_history .edd_purchase_status.pending,#edd_user_history .edd_purchase_status.revoked,table#edd_purchase_receipt .edd_receipt_payment_status.cancelled,table#edd_purchase_receipt .edd_receipt_payment_status.failed,table#edd_purchase_receipt .edd_receipt_payment_status.pending,table#edd_purchase_receipt .edd_receipt_payment_status.revoked{color:#f73f2e}body.edd_receipt_page #edd_receipt_wrapper{width:660px;margin:0 auto;padding:50px 0}body.edd_receipt_page table{display:table;width:100%;border-bottom:1px solid #ededed;border-collapse:collapse;border-spacing:0;font-size:14px;line-height:2;margin:0 0 20px}body.edd_receipt_page td,body.edd_receipt_page th{display:table-cell;text-align:left;border-top:1px solid #ededed;padding:6px 10px;font-weight:400}body.edd_receipt_page th{font-weight:700;text-transform:uppercase}body.edd_receipt_page h3{font-size:22px;margin:40px 0 5px;clear:both;display:block;font-weight:700}body.edd_receipt_page li{list-style:none}table#edd_purchase_receipt,table#edd_purchase_receipt_products{width:100%}table#edd_purchase_receipt td,table#edd_purchase_receipt th,table#edd_purchase_receipt_products td,table#edd_purchase_receipt_products th{text-align:left}table#edd_purchase_receipt_products li{list-style:none;margin:0 0 8px 10px}table#edd_purchase_receipt ul,table#edd_purchase_receipt_products ul.edd_purchase_receipt_files{margin:0;padding:0}table#edd_purchase_receipt li.edd_download_file{list-style:none;margin:0 0 8px}table#edd_purchase_receipt_products .edd_purchase_receipt_product_notes{font-style:italic}table#edd_purchase_receipt_products .edd_purchase_receipt_product_name{font-weight:700}table#edd_purchase_receipt_products .edd_bundled_product_name{font-style:italic;font-weight:700}#edd_user_history{text-align:left;width:100%;border-top:1px solid #f0f0f0;border-bottom:none}#edd_user_history td,#edd_user_history th{text-align:left;padding:3px 5px;border-bottom:1px solid #f0f0f0;border-top:none}#edd_user_history th{font-weight:700;background:#f5f5f5}#edd_user_history td{line-height:25px;vertical-align:middle}#edd_login_form .edd-input,#edd_login_form label,#edd_register_form .edd-input,#edd_register_form label{display:inline-block;width:200px}#edd_profile_editor_form p{margin-bottom:8px}#edd_profile_editor_form label{display:inline-block}#edd_profile_editor_form .edd-profile-emails{list-style-type:none;display:inline-table;margin-left:0;margin-bottom:0}#edd_profile_editor_form .edd-profile-email{width:auto}#edd_profile_editor_form .edd-profile-email .actions{display:none}#edd_profile_editor_form .edd-profile-email:hover>span{display:inline-block}.edd_added_to_cart_alert{padding:5px;font-size:14px;border:1px solid #046a9e;background:#9ecce2;color:#333;margin:8px 0}.edd_added_to_cart_alert a.edd_alert_checkout_link{color:#000!important}input.edd_submit_plain{background:0 0!important;border:none!important;padding:0!important;display:inline;cursor:pointer}.single-download .edd_download_purchase_form{margin-bottom:1.387em}.edd_download_purchase_form .edd_download_quantity_wrapper{margin:0 0 .5em}.edd_download_purchase_form .edd_download_quantity_wrapper .edd-item-quantity{width:75px}.edd_download_purchase_form .edd_price_options{margin:0 0 15px}.edd_download_purchase_form .edd_price_options ul{margin:0;padding:0;list-style:none}.edd_download_purchase_form .edd_price_options li{display:block;padding:0;margin:0}.edd_download_purchase_form .edd_price_options span{display:inline;padding:0;margin:0}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper{padding-left:18px}.edd_download_purchase_form .edd_price_options .edd_download_quantity_wrapper *{font-size:80%}.edd_download_purchase_form .edd_price_options input.edd-item-quantity{display:inline;width:50px;max-width:90%}#edd-purchase-button,.edd-submit,input[type=submit].edd-submit{display:inline-block;padding:6px 12px;margin:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.edd-submit.button:focus,input[type=submit].edd-submit:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.edd-submit.button:focus,.edd-submit.button:hover,input[type=submit].edd-submit:focus,input[type=submit].edd-submit:hover{color:#333;text-decoration:none}.edd-submit.button:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.edd-submit.plain{padding:0}.edd-submit.button,.edd-submit.button.gray,.edd-submit.button:visited{color:#333;background:#f0f0f0;border-color:#ccc}.edd-submit.button.gray:active,.edd-submit.button.gray:focus,.edd-submit.button.gray:hover,.edd-submit.button:active,.edd-submit.button:focus,.edd-submit.button:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.gray:active{background-image:none}.edd-submit.button.white{color:#333;background:#fff;border-color:#ccc}.edd-submit.button.white:active,.edd-submit.button.white:focus,.edd-submit.button.white:hover{color:#333;background:#ebebeb;border-color:#adadad}.edd-submit.button.white:active{background-image:none}.edd-submit.button.blue{color:#fff;background:#428bca;border-color:#357ebd}.edd-submit.button.blue.active,.edd-submit.button.blue:focus,.edd-submit.button.blue:hover{color:#fff;background:#3276b1;border-color:#285e8e}.edd-submit.button.blue.active{background-image:none}.edd-submit.button.red{color:#fff;background:#d9534f;border-color:#d43f3a}.edd-submit.button.red:active,.edd-submit.button.red:focus,.edd-submit.button.red:hover{color:#fff;background:#d2322d;border-color:#ac2925}.edd-submit.button.red:active{background-image:none}.edd-submit.button.green{color:#fff;background:#5cb85c;border-color:#4cae4c}.edd-submit.button.green:active,.edd-submit.button.green:focus,.edd-submit.button.green:hover{color:#fff;background:#47a447;border-color:#398439}.edd-submit.button.green:active{background-image:none}.edd-submit.button.yellow{color:#fff;background:#f0ad4e;border-color:#eea236}.edd-submit.button.yellow:active,.edd-submit.button.yellow:focus,.edd-submit.button.yellow:hover{color:#fff;background:#ed9c28;border-color:#d58512}.edd-submit.button.yellow:active{background-image:none}.edd-submit.button.orange{color:#fff;background:#ed9c28;border-color:#e3921e}.edd-submit.button.orange:active,.edd-submit.button.orange:focus,.edd-submit.button.orange:hover{color:#fff;background:#e59016;border-color:#d58512}.edd-submit.button.orange:active{background-image:none}.edd-submit.button.dark-gray{color:#fff;background:#363636;border-color:#222}.edd-submit.button.dark-gray:active,.edd-submit.button.dark-gray:focus,.edd-submit.button.dark-gray:hover{color:#fff;background:#333;border-color:#adadad}.edd-submit.button.dark-gray:active{background-image:none}.edd_download{float:left}.edd_download_columns_1 .edd_download{width:100%}.edd_download_columns_2 .edd_download{width:50%}.edd_download_columns_0 .edd_download,.edd_download_columns_3 .edd_download{width:33%}.edd_download_columns_4 .edd_download{width:25%}.edd_download_columns_5 .edd_download{width:20%}.edd_download_columns_6 .edd_download{width:16.6%}.edd_download_inner{padding:0 8px 8px;margin:0 0 10px}.edd_download_image{max-width:100%}.edd_download .edd_price{margin-bottom:10px}.edd-hide-on-empty.cart-empty{display:none}edd-hide-on-empty.cart-not.empty{display:block}.edd-cart-ajax{margin:0 8px 0 4px;top:2px;background:0 0;border:none;padding:0}.edd-cart-number-of-items{font-style:italic;color:grey}.edd-cart-meta.edd_subtotal{font-weight:700;font-style:italic}.edd-cart-meta.edd_cart_tax{font-size:1em;font-style:italic}.edd-cart-meta.edd_cart_tax::before{font-style:normal}.edd-cart-meta.edd_total{font-weight:700}.edd-cart-meta{padding:2px 5px}.edd-cart-meta.edd_subtotal,.edd-cart-meta.edd_total{background-color:#f9f9f9}.edd_errors:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #E6DB55;margin:0 0 21px;background:#FFFFE0;color:#333}.edd_error{padding:10px}p.edd_error{margin:0!important}.edd_success:not(.edd-alert){-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #b3ce89;margin:20px 0;background:#d5eab3;color:#567622;padding:6px 8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}.edd-alert{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;margin-bottom:20px;padding:10px;border:1px solid transparent;vertical-align:middle}.edd-alert p{padding:0}.edd-alert p:not(:last-child){margin-bottom:5px}.edd-alert p:last-child{margin-bottom:0}.edd-alert-error{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.edd-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.edd-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.edd-alert-warn{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}
templates/history-downloads.php CHANGED
@@ -37,7 +37,7 @@ if ( $purchases ) :
37
  <?php
38
  $price_id = edd_get_cart_item_price_id( $download );
39
  $download_files = edd_get_download_files( $download['id'], $price_id );
40
- $name = $download['name'];
41
 
42
  // Retrieve and append the price option name
43
  if ( ! empty( $price_id ) && 0 !== $price_id ) {
37
  <?php
38
  $price_id = edd_get_cart_item_price_id( $download );
39
  $download_files = edd_get_download_files( $download['id'], $price_id );
40
+ $name = get_the_title( $download['id'] );
41
 
42
  // Retrieve and append the price option name
43
  if ( ! empty( $price_id ) && 0 !== $price_id ) {
templates/history-purchases.php CHANGED
@@ -10,7 +10,7 @@ endif;
10
  if ( is_user_logged_in() ):
11
  $payments = edd_get_users_purchases( get_current_user_id(), 20, true, 'any' );
12
  if ( $payments ) :
13
- do_action( 'edd_before_purchase_history', $payments ); ?>
14
  <table id="edd_user_history" class="edd-table">
15
  <thead>
16
  <tr class="edd_purchase_row">
@@ -56,7 +56,7 @@ if ( is_user_logged_in() ):
56
  ) );
57
  ?>
58
  </div>
59
- <?php do_action( 'edd_after_purchase_history', $payments ); ?>
60
  <?php wp_reset_postdata(); ?>
61
  <?php else : ?>
62
  <p class="edd-no-purchases"><?php _e('You have not made any purchases','easy-digital-downloads' ); ?></p>
10
  if ( is_user_logged_in() ):
11
  $payments = edd_get_users_purchases( get_current_user_id(), 20, true, 'any' );
12
  if ( $payments ) :
13
+ do_action( 'edd_before_purchase_history' ); ?>
14
  <table id="edd_user_history" class="edd-table">
15
  <thead>
16
  <tr class="edd_purchase_row">
56
  ) );
57
  ?>
58
  </div>
59
+ <?php do_action( 'edd_after_purchase_history' ); ?>
60
  <?php wp_reset_postdata(); ?>
61
  <?php else : ?>
62
  <p class="edd-no-purchases"><?php _e('You have not made any purchases','easy-digital-downloads' ); ?></p>
templates/shortcode-download.php DELETED
@@ -1,56 +0,0 @@
1
- <?php
2
- /**
3
- * A single download inside of the [downloads] shortcode.
4
- *
5
- * @since 2.8.0
6
- *
7
- * @package EDD
8
- * @category Template
9
- * @author Easy Digital Downloads
10
- * @version 1.0.0
11
- */
12
-
13
- global $edd_download_shortcode_item_atts, $edd_download_shortcode_item_i;
14
- ?>
15
-
16
- <?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
17
-
18
- <div <?php echo $schema; ?>class="<?php echo esc_attr( apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $edd_download_shortcode_item_atts, $edd_download_shortcode_item_i ) ); ?>" id="edd_download_<?php the_ID(); ?>">
19
-
20
- <div class="<?php echo esc_attr( apply_filters( 'edd_download_inner_class', 'edd_download_inner', get_the_ID(), $edd_download_shortcode_item_atts, $edd_download_shortcode_item_i ) ); ?>">
21
-
22
- <?php
23
- do_action( 'edd_download_before' );
24
-
25
- if ( 'false' !== $edd_download_shortcode_item_atts['thumbnails'] ) :
26
- edd_get_template_part( 'shortcode', 'content-image' );
27
- do_action( 'edd_download_after_thumbnail' );
28
- endif;
29
-
30
- edd_get_template_part( 'shortcode', 'content-title' );
31
-
32
- do_action( 'edd_download_after_title' );
33
-
34
- if ( 'yes' === $edd_download_shortcode_item_atts['excerpt'] && 'yes' !== $edd_download_shortcode_item_atts['full_content'] ) :
35
- edd_get_template_part( 'shortcode', 'content-excerpt' );
36
- do_action( 'edd_download_after_content' );
37
- elseif ( 'yes' === $edd_download_shortcode_item_atts['full_content'] ) :
38
- edd_get_template_part( 'shortcode', 'content-full' );
39
- do_action( 'edd_download_after_content' );
40
- endif;
41
-
42
- if ( 'yes' === $edd_download_shortcode_item_atts['price'] ) :
43
- edd_get_template_part( 'shortcode', 'content-price' );
44
- do_action( 'edd_download_after_price' );
45
- endif;
46
-
47
- if ( 'yes' === $edd_download_shortcode_item_atts['buy_button'] ) :
48
- edd_get_template_part( 'shortcode', 'content-cart-button' );
49
- endif;
50
-
51
- do_action( 'edd_download_after' );
52
- ?>
53
-
54
- </div>
55
-
56
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/shortcode-login.php CHANGED
@@ -26,7 +26,7 @@ if ( ! is_user_logged_in() ) :
26
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( $edd_login_redirect ); ?>"/>
27
  <input type="hidden" name="edd_login_nonce" value="<?php echo wp_create_nonce( 'edd-login-nonce' ); ?>"/>
28
  <input type="hidden" name="edd_action" value="user_login"/>
29
- <input id="edd_login_submit" type="submit" class="edd-submit" value="<?php _e( 'Log In', 'easy-digital-downloads' ); ?>"/>
30
  </p>
31
  <p class="edd-lost-password">
32
  <a href="<?php echo wp_lostpassword_url(); ?>">
@@ -37,7 +37,5 @@ if ( ! is_user_logged_in() ) :
37
  </fieldset>
38
  </form>
39
  <?php else : ?>
40
-
41
- <?php do_action( 'edd_login_form_logged_in' ); ?>
42
-
43
  <?php endif; ?>
26
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( $edd_login_redirect ); ?>"/>
27
  <input type="hidden" name="edd_login_nonce" value="<?php echo wp_create_nonce( 'edd-login-nonce' ); ?>"/>
28
  <input type="hidden" name="edd_action" value="user_login"/>
29
+ <input id="edd_login_submit" type="submit" class="edd_submit edd-submit" value="<?php _e( 'Log In', 'easy-digital-downloads' ); ?>"/>
30
  </p>
31
  <p class="edd-lost-password">
32
  <a href="<?php echo wp_lostpassword_url(); ?>">
37
  </fieldset>
38
  </form>
39
  <?php else : ?>
40
+ <p class="edd-logged-in"><?php _e( 'You are already logged in', 'easy-digital-downloads' ); ?></p>
 
 
41
  <?php endif; ?>
templates/shortcode-profile-editor.php CHANGED
@@ -11,7 +11,7 @@ if ( is_user_logged_in() ):
11
  $display_name = $current_user->display_name;
12
  $address = edd_get_customer_address( $user_id );
13
  $states = edd_get_shop_states( $address['country'] );
14
- $state = $address['state'];
15
 
16
  if ( edd_is_cart_saved() ): ?>
17
  <?php $restore_url = add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => edd_get_cart_token() ), edd_get_checkout_uri() ); ?>
@@ -199,7 +199,7 @@ if ( is_user_logged_in() ):
199
  <input name="edd_new_user_pass1" id="edd_new_user_pass1" class="password edd-input" type="password"/>
200
  </p>
201
 
202
- <p id="edd_profile_confirm_password_wrap">
203
  <label for="edd_user_pass"><?php _e( 'Re-enter Password', 'easy-digital-downloads' ); ?></label>
204
  <input name="edd_new_user_pass2" id="edd_new_user_pass2" class="password edd-input" type="password"/>
205
  <?php do_action( 'edd_profile_editor_password' ); ?>
@@ -230,5 +230,6 @@ if ( is_user_logged_in() ):
230
 
231
  <?php
232
  else:
233
- do_action( 'edd_profile_editor_logged_out' );
 
234
  endif;
11
  $display_name = $current_user->display_name;
12
  $address = edd_get_customer_address( $user_id );
13
  $states = edd_get_shop_states( $address['country'] );
14
+ $state = ( ! empty( $address['state'] ) ) ? $address['state'] : '';
15
 
16
  if ( edd_is_cart_saved() ): ?>
17
  <?php $restore_url = add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => edd_get_cart_token() ), edd_get_checkout_uri() ); ?>
199
  <input name="edd_new_user_pass1" id="edd_new_user_pass1" class="password edd-input" type="password"/>
200
  </p>
201
 
202
+ <p id="edd_profile_billing_address_wrap">
203
  <label for="edd_user_pass"><?php _e( 'Re-enter Password', 'easy-digital-downloads' ); ?></label>
204
  <input name="edd_new_user_pass2" id="edd_new_user_pass2" class="password edd-input" type="password"/>
205
  <?php do_action( 'edd_profile_editor_password' ); ?>
230
 
231
  <?php
232
  else:
233
+ echo '<p>' . __( 'You need to login to edit your profile.', 'easy-digital-downloads' ) . '</p>';
234
+ echo edd_login_form();
235
  endif;
templates/shortcode-receipt.php CHANGED
@@ -87,7 +87,7 @@ $status = edd_get_payment_status( $payment, true );
87
 
88
  <?php if( edd_use_taxes() ) : ?>
89
  <tr>
90
- <td><strong><?php _e( 'Tax', 'easy-digital-downloads' ); ?>:</strong></td>
91
  <td><?php echo edd_payment_tax( $payment->ID ); ?></td>
92
  </tr>
93
  <?php endif; ?>
@@ -95,7 +95,7 @@ $status = edd_get_payment_status( $payment, true );
95
  <?php if ( filter_var( $edd_receipt_args['price'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
96
 
97
  <tr>
98
- <td><strong><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?>:</strong></td>
99
  <td>
100
  <?php echo edd_payment_subtotal( $payment->ID ); ?>
101
  </td>
@@ -149,14 +149,12 @@ $status = edd_get_payment_status( $payment, true );
149
  <div class="edd_purchase_receipt_product_name">
150
  <?php echo esc_html( $item['name'] ); ?>
151
  <?php if ( edd_has_variable_prices( $item['id'] ) && ! is_null( $price_id ) ) : ?>
152
- <span class="edd_purchase_receipt_price_name">&nbsp;&ndash;&nbsp;<?php echo esc_html( edd_get_price_option_name( $item['id'], $price_id, $payment->ID ) ); ?></span>
153
  <?php endif; ?>
154
  </div>
155
 
156
- <?php
157
- $notes = edd_get_product_notes( $item['id'] );
158
- if ( $edd_receipt_args['notes'] && ! empty( $notes ) ) : ?>
159
- <div class="edd_purchase_receipt_product_notes"><?php echo wp_kses_post( wpautop( $notes ) ); ?></div>
160
  <?php endif; ?>
161
 
162
  <?php
@@ -211,7 +209,7 @@ $status = edd_get_payment_status( $payment, true );
211
 
212
  <?php
213
  // Allow extensions to extend the product cell
214
- do_action( 'edd_purchase_receipt_after_files', $item['id'], $payment->ID, $meta, $price_id );
215
  ?>
216
  </td>
217
  <?php if ( edd_use_skus() ) : ?>
87
 
88
  <?php if( edd_use_taxes() ) : ?>
89
  <tr>
90
+ <td><strong><?php _e( 'Tax', 'easy-digital-downloads' ); ?></strong></td>
91
  <td><?php echo edd_payment_tax( $payment->ID ); ?></td>
92
  </tr>
93
  <?php endif; ?>
95
  <?php if ( filter_var( $edd_receipt_args['price'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
96
 
97
  <tr>
98
+ <td><strong><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?></strong></td>
99
  <td>
100
  <?php echo edd_payment_subtotal( $payment->ID ); ?>
101
  </td>
149
  <div class="edd_purchase_receipt_product_name">
150
  <?php echo esc_html( $item['name'] ); ?>
151
  <?php if ( edd_has_variable_prices( $item['id'] ) && ! is_null( $price_id ) ) : ?>
152
+ <span class="edd_purchase_receipt_price_name">&nbsp;&ndash;&nbsp;<?php echo edd_get_price_option_name( $item['id'], $price_id, $payment->ID ); ?></span>
153
  <?php endif; ?>
154
  </div>
155
 
156
+ <?php if ( $edd_receipt_args['notes'] ) : ?>
157
+ <div class="edd_purchase_receipt_product_notes"><?php echo wpautop( edd_get_product_notes( $item['id'] ) ); ?></div>
 
 
158
  <?php endif; ?>
159
 
160
  <?php
209
 
210
  <?php
211
  // Allow extensions to extend the product cell
212
+ do_action( 'edd_purchase_receipt_after_files', $item['id'], $payment->ID, $meta );
213
  ?>
214
  </td>
215
  <?php if ( edd_use_skus() ) : ?>
templates/shortcode-register.php CHANGED
@@ -6,8 +6,6 @@ global $edd_register_redirect;
6
 
7
  do_action( 'edd_print_errors' ); ?>
8
 
9
- <?php if ( ! is_user_logged_in() ) : ?>
10
-
11
  <form id="edd_register_form" class="edd_form" action="" method="post">
12
  <?php do_action( 'edd_register_form_fields_top' ); ?>
13
 
@@ -43,7 +41,7 @@ do_action( 'edd_print_errors' ); ?>
43
  <input type="hidden" name="edd_honeypot" value="" />
44
  <input type="hidden" name="edd_action" value="user_register" />
45
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( $edd_register_redirect ); ?>"/>
46
- <input class="edd-submit" name="edd_register_submit" type="submit" value="<?php esc_attr_e( 'Register', 'easy-digital-downloads' ); ?>" />
47
  </p>
48
 
49
  <?php do_action( 'edd_register_form_fields_after' ); ?>
@@ -51,9 +49,3 @@ do_action( 'edd_print_errors' ); ?>
51
 
52
  <?php do_action( 'edd_register_form_fields_bottom' ); ?>
53
  </form>
54
-
55
- <?php else : ?>
56
-
57
- <?php do_action( 'edd_register_form_logged_in' ); ?>
58
-
59
- <?php endif; ?>
6
 
7
  do_action( 'edd_print_errors' ); ?>
8
 
 
 
9
  <form id="edd_register_form" class="edd_form" action="" method="post">
10
  <?php do_action( 'edd_register_form_fields_top' ); ?>
11
 
41
  <input type="hidden" name="edd_honeypot" value="" />
42
  <input type="hidden" name="edd_action" value="user_register" />
43
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( $edd_register_redirect ); ?>"/>
44
+ <input class="button" name="edd_register_submit" type="submit" value="<?php esc_attr_e( 'Register', 'easy-digital-downloads' ); ?>" />
45
  </p>
46
 
47
  <?php do_action( 'edd_register_form_fields_after' ); ?>
49
 
50
  <?php do_action( 'edd_register_form_fields_bottom' ); ?>
51
  </form>
 
 
 
 
 
 
templates/widget-cart-item.php CHANGED
@@ -1,5 +1,5 @@
1
  <li class="edd-cart-item">
2
  <span class="edd-cart-item-title">{item_title}</span>
3
- <span class="edd-cart-item-separator">-</span>&nbsp;<?php echo edd_item_quantities_enabled() ? '<span class="edd-cart-item-quantity">{item_quantity}&nbsp;@&nbsp;</span>' : ''; ?><span class="edd-cart-item-price">{item_amount}</span>&nbsp;<span class="edd-cart-item-separator">-</span>
4
  <a href="{remove_url}" data-cart-item="{cart_item_id}" data-download-id="{item_id}" data-action="edd_remove_from_cart" class="edd-remove-from-cart"><?php _e( 'remove', 'easy-digital-downloads' ); ?></a>
5
  </li>
1
  <li class="edd-cart-item">
2
  <span class="edd-cart-item-title">{item_title}</span>
3
+ <span class="edd-cart-item-separator">-</span><span class="edd-cart-item-quantity">&nbsp;{item_quantity}&nbsp;@&nbsp;</span><span class="edd-cart-item-price">&nbsp;{item_amount}&nbsp;</span><span class="edd-cart-item-separator">-</span>
4
  <a href="{remove_url}" data-cart-item="{cart_item_id}" data-download-id="{item_id}" data-action="edd_remove_from_cart" class="edd-remove-from-cart"><?php _e( 'remove', 'easy-digital-downloads' ); ?></a>
5
  </li>