Easy Digital Downloads - Version 2.11.7

Version Description

Download this release

Release Info

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

Code changes from version 2.11.6 to 2.11.7

Files changed (95) hide show
  1. easy-digital-downloads.php +3 -3
  2. includes/admin/add-ons.php +1 -1
  3. includes/admin/admin-actions.php +1 -1
  4. includes/admin/class-api-keys-table.php +1 -1
  5. includes/admin/class-edd-notices.php +4 -4
  6. includes/admin/customers/class-customer-table.php +40 -12
  7. includes/admin/customers/customer-actions.php +37 -10
  8. includes/admin/customers/customers.php +105 -61
  9. includes/admin/dashboard-widgets.php +17 -7
  10. includes/admin/discounts/add-discount.php +1 -1
  11. includes/admin/discounts/class-discount-codes-table.php +8 -8
  12. includes/admin/discounts/discount-actions.php +14 -9
  13. includes/admin/discounts/discount-codes.php +1 -1
  14. includes/admin/discounts/edit-discount.php +2 -2
  15. includes/admin/downloads/dashboard-columns.php +3 -3
  16. includes/admin/downloads/metabox.php +12 -12
  17. includes/admin/extensions/class-extensions-api.php +1 -1
  18. includes/admin/import/import-functions.php +1 -1
  19. includes/admin/payments/actions.php +13 -3
  20. includes/admin/payments/class-payments-table.php +58 -19
  21. includes/admin/payments/payments-history.php +14 -6
  22. includes/admin/payments/view-order-details.php +72 -42
  23. includes/admin/plugins.php +11 -9
  24. includes/admin/reporting/class-download-reports-table.php +1 -1
  25. includes/admin/reporting/class-file-downloads-logs-list-table.php +13 -9
  26. includes/admin/reporting/class-sales-logs-list-table.php +4 -4
  27. includes/admin/reporting/export/export-functions.php +4 -3
  28. includes/admin/reporting/graphing.php +18 -7
  29. includes/admin/reporting/logs.php +4 -4
  30. includes/admin/reporting/reports.php +17 -11
  31. includes/admin/settings/display-settings.php +2 -2
  32. includes/admin/settings/register-settings.php +9 -9
  33. includes/admin/thickbox.php +3 -3
  34. includes/admin/tools.php +20 -19
  35. includes/admin/tracking.php +4 -3
  36. includes/admin/upgrades/upgrade-functions.php +54 -36
  37. includes/ajax-functions.php +2 -2
  38. includes/api/class-edd-api.php +16 -4
  39. includes/cart/actions.php +16 -9
  40. includes/cart/class-edd-cart.php +12 -11
  41. includes/cart/functions.php +2 -10
  42. includes/cart/template.php +6 -5
  43. includes/checkout/functions.php +5 -4
  44. includes/checkout/template.php +25 -22
  45. includes/class-edd-cache-helper.php +1 -1
  46. includes/class-edd-discount.php +11 -1
  47. includes/class-edd-license-handler.php +1 -1
  48. includes/deprecated-functions.php +1 -1
  49. includes/discount-functions.php +6 -5
  50. includes/emails/actions.php +2 -1
  51. includes/emails/template.php +1 -1
  52. includes/gateways/actions.php +3 -2
  53. includes/gateways/amazon-payments.php +3 -2
  54. includes/gateways/paypal-standard.php +6 -6
  55. includes/gateways/paypal/scripts.php +1 -1
  56. includes/gateways/stripe/includes/admin/admin-filters.php +2 -2
  57. includes/gateways/stripe/includes/admin/settings.php +1 -1
  58. includes/gateways/stripe/includes/admin/settings/stripe-connect.php +1 -1
  59. includes/gateways/stripe/includes/admin/upgrade-functions.php +4 -4
  60. includes/gateways/stripe/includes/template-functions.php +19 -17
  61. includes/gateways/stripe/vendor/autoload.php +5 -0
  62. includes/gateways/stripe/vendor/composer/ClassLoader.php +142 -15
  63. includes/gateways/stripe/vendor/composer/InstalledVersions.php +21 -6
  64. includes/gateways/stripe/vendor/composer/LICENSE +2 -0
  65. includes/gateways/stripe/vendor/composer/autoload_classmap.php +2 -1
  66. includes/gateways/stripe/vendor/composer/autoload_namespaces.php +1 -1
  67. includes/gateways/stripe/vendor/composer/autoload_psr4.php +1 -1
  68. includes/gateways/stripe/vendor/composer/autoload_real.php +5 -22
  69. includes/gateways/stripe/vendor/composer/autoload_static.php +5 -0
  70. includes/gateways/stripe/vendor/composer/installed.json +219 -213
  71. includes/gateways/stripe/vendor/composer/installed.php +5 -5
  72. includes/login-register.php +4 -4
  73. includes/payments/actions.php +5 -4
  74. includes/payments/class-edd-payment.php +1 -1
  75. includes/payments/functions.php +3 -3
  76. includes/post-types.php +1 -1
  77. includes/process-purchase.php +7 -4
  78. includes/query-filters.php +2 -1
  79. includes/scripts.php +2 -2
  80. includes/shortcodes.php +4 -4
  81. includes/template-functions.php +2 -2
  82. includes/user-functions.php +12 -9
  83. includes/widgets.php +6 -6
  84. languages/easy-digital-downloads.pot +411 -411
  85. readme.txt +80 -4
  86. templates/account-pending.php +2 -2
  87. templates/checkout_cart.php +9 -9
  88. templates/history-purchases.php +3 -3
  89. templates/payment-processing.php +2 -2
  90. templates/shortcode-login.php +1 -1
  91. templates/shortcode-profile-editor.php +6 -6
  92. templates/widget-cart-checkout.php +1 -1
  93. templates/widget-cart-empty.php +1 -1
  94. templates/widget-cart-item.php +1 -1
  95. templates/widget-cart.php +1 -1
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.11.6
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
@@ -25,7 +25,7 @@
25
  * @package EDD
26
  * @category Core
27
  * @author Easy Digital Downloads
28
- * @version 2.11.6
29
  */
30
 
31
  // Exit if accessed directly.
@@ -231,7 +231,7 @@ final class Easy_Digital_Downloads {
231
 
232
  // Plugin version.
233
  if ( ! defined( 'EDD_VERSION' ) ) {
234
- define( 'EDD_VERSION', '2.11.6' );
235
  }
236
 
237
  // Plugin Folder Path.
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.11.7
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
25
  * @package EDD
26
  * @category Core
27
  * @author Easy Digital Downloads
28
+ * @version 2.11.7
29
  */
30
 
31
  // Exit if accessed directly.
231
 
232
  // Plugin version.
233
  if ( ! defined( 'EDD_VERSION' ) ) {
234
+ define( 'EDD_VERSION', '2.11.7' );
235
  }
236
 
237
  // Plugin Folder Path.
includes/admin/add-ons.php CHANGED
@@ -32,7 +32,7 @@ function edd_add_ons_page() {
32
  <h1>
33
  <?php _e( 'Apps and Integrations for Easy Digital Downloads', 'easy-digital-downloads' ); ?>
34
  <span>
35
- &nbsp;&nbsp;<a href="https://easydigitaldownloads.com/downloads/?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>
36
  </span>
37
  </h1>
38
  <p><?php _e( 'These <em><strong>add functionality</strong></em> to your Easy Digital Downloads powered store.', 'easy-digital-downloads' ); ?></p>
32
  <h1>
33
  <?php _e( 'Apps and Integrations for Easy Digital Downloads', 'easy-digital-downloads' ); ?>
34
  <span>
35
+ &nbsp;&nbsp;<a href="https://easydigitaldownloads.com/downloads/?utm_source=plugin-addons-page&utm_medium=plugin&utm_campaign=<?php echo esc_attr( $campaign ); ?>&utm_content=All%20Extensions" class="button-primary" target="_blank"><?php _e( 'Browse All Integrations', 'easy-digital-downloads' ); ?></a>
36
  </span>
37
  </h1>
38
  <p><?php _e( 'These <em><strong>add functionality</strong></em> to your Easy Digital Downloads powered store.', 'easy-digital-downloads' ); ?></p>
includes/admin/admin-actions.php CHANGED
@@ -78,7 +78,7 @@ function edd_display_product_tabs() {
78
  }
79
  ?>
80
 
81
- <a href="<?php echo admin_url( 'post-new.php?post_type=download' ); ?>" class="page-title-action">
82
  <?php _e( 'Add New', 'easy-digital-downloads' ); // No text domain so it just follows what WP Core does ?>
83
  </a>
84
  </h2>
78
  }
79
  ?>
80
 
81
+ <a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=download' ) ); ?>" class="page-title-action">
82
  <?php _e( 'Add New', 'easy-digital-downloads' ); // No text domain so it just follows what WP Core does ?>
83
  </a>
84
  </h2>
includes/admin/class-api-keys-table.php CHANGED
@@ -255,7 +255,7 @@ class EDD_API_Keys_Table extends WP_List_Table {
255
  foreach( $users as $user ) {
256
  $keys[$user->ID]['id'] = $user->ID;
257
  $keys[$user->ID]['email'] = $user->user_email;
258
- $keys[$user->ID]['user'] = '<a href="' . add_query_arg( 'user_id', $user->ID, 'user-edit.php' ) . '"><strong>' . $user->user_login . '</strong></a>';
259
 
260
  $keys[$user->ID]['key'] = EDD()->api->get_user_public_key( $user->ID );
261
  $keys[$user->ID]['secret'] = EDD()->api->get_user_secret_key( $user->ID );
255
  foreach( $users as $user ) {
256
  $keys[$user->ID]['id'] = $user->ID;
257
  $keys[$user->ID]['email'] = $user->user_email;
258
+ $keys[$user->ID]['user'] = '<a href="' . esc_url( add_query_arg( 'user_id', urlencode( $user->ID ), 'user-edit.php' ) ) . '"><strong>' . esc_html( $user->user_login ) . '</strong></a>';
259
 
260
  $keys[$user->ID]['key'] = EDD()->api->get_user_public_key( $user->ID );
261
  $keys[$user->ID]['secret'] = EDD()->api->get_user_secret_key( $user->ID );
includes/admin/class-edd-notices.php CHANGED
@@ -46,7 +46,7 @@ class EDD_Notices {
46
  ob_start();
47
  ?>
48
  <div class="error">
49
- <p><?php printf( __( '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' ) ); ?></p>
50
  <p><a href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'dismiss_notices', 'edd_notice' => 'set_checkout' ) ) ); ?>"><?php _e( 'Dismiss Notice', 'easy-digital-downloads' ); ?></a></p>
51
  </div>
52
  <?php
@@ -54,7 +54,7 @@ class EDD_Notices {
54
  }
55
 
56
  if ( isset( $_GET['page'] ) && 'edd-payment-history' == $_GET['page'] && current_user_can( 'view_shop_reports' ) && edd_is_test_mode() ) {
57
- $notices['updated']['edd-payment-history-test-mode'] = sprintf( __( 'Note: Test Mode is enabled. While in test mode no live transactions are processed. <a href="%s">Settings</a>.', 'easy-digital-downloads' ), admin_url( 'edit.php?post_type=download&page=edd-settings&tab=gateways' ) );
58
  }
59
 
60
  $show_nginx_notice = apply_filters( 'edd_show_nginx_redirect_notice', true );
@@ -97,7 +97,7 @@ class EDD_Notices {
97
  ob_start();
98
  ?>
99
  <div class="error">
100
- <p><?php printf( __( 'Easy Digital Downloads 2.5 contains a <a href="%s">built in recount tool</a>. Please <a href="%s">deactivate the Easy Digital Downloads - Recount Earnings plugin</a>', 'easy-digital-downloads' ), admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ), admin_url( 'plugins.php' ) ); ?></p>
101
  </div>
102
  <?php
103
  echo ob_get_clean();
@@ -378,7 +378,7 @@ class EDD_Notices {
378
  function dismiss_notices() {
379
  if( isset( $_GET['edd_notice'] ) ) {
380
  update_user_meta( get_current_user_id(), '_edd_' . $_GET['edd_notice'] . '_dismissed', 1 );
381
- wp_redirect( remove_query_arg( array( 'edd_action', 'edd_notice' ) ) );
382
  exit;
383
  }
384
  }
46
  ob_start();
47
  ?>
48
  <div class="error">
49
+ <p><?php printf( __( 'No checkout page has been configured. Visit <a href="%s">Settings</a> to set one.', 'easy-digital-downloads' ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings' ) ) ); ?></p>
50
  <p><a href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'dismiss_notices', 'edd_notice' => 'set_checkout' ) ) ); ?>"><?php _e( 'Dismiss Notice', 'easy-digital-downloads' ); ?></a></p>
51
  </div>
52
  <?php
54
  }
55
 
56
  if ( isset( $_GET['page'] ) && 'edd-payment-history' == $_GET['page'] && current_user_can( 'view_shop_reports' ) && edd_is_test_mode() ) {
57
+ $notices['updated']['edd-payment-history-test-mode'] = sprintf( __( 'Note: Test Mode is enabled. While in test mode no live transactions are processed. <a href="%s">Settings</a>.', 'easy-digital-downloads' ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=gateways' ) ) );
58
  }
59
 
60
  $show_nginx_notice = apply_filters( 'edd_show_nginx_redirect_notice', true );
97
  ob_start();
98
  ?>
99
  <div class="error">
100
+ <p><?php printf( __( 'Easy Digital Downloads 2.5 contains a <a href="%s">built in recount tool</a>. Please <a href="%s">deactivate the Easy Digital Downloads - Recount Earnings plugin</a>', 'easy-digital-downloads' ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ) ), esc_url( admin_url( 'plugins.php' ) ) ); ?></p>
101
  </div>
102
  <?php
103
  echo ob_get_clean();
378
  function dismiss_notices() {
379
  if( isset( $_GET['edd_notice'] ) ) {
380
  update_user_meta( get_current_user_id(), '_edd_' . $_GET['edd_notice'] . '_dismissed', 1 );
381
+ wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'edd_action', 'edd_notice' ) ) ) );
382
  exit;
383
  }
384
  }
includes/admin/customers/class-customer-table.php CHANGED
@@ -95,8 +95,8 @@ class EDD_Customer_Reports_Table extends WP_List_Table {
95
  echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
96
  ?>
97
  <p class="search-box">
98
- <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
99
- <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
100
  <?php submit_button( $text, 'button', false, false, array('ID' => 'search-submit') ); ?>
101
  </p>
102
  <?php
@@ -129,7 +129,7 @@ class EDD_Customer_Reports_Table extends WP_List_Table {
129
 
130
  case 'num_purchases' :
131
  $value = '<a href="' .
132
- admin_url( '/edit.php?post_type=download&page=edd-payment-history&user=' . urlencode( $item['email'] )
133
  ) . '">' . esc_html( $item['num_purchases'] ) . '</a>';
134
  break;
135
 
@@ -149,15 +149,44 @@ class EDD_Customer_Reports_Table extends WP_List_Table {
149
  }
150
 
151
  public function column_name( $item ) {
152
- $name = '#' . $item['id'] . ' ';
153
- $name .= ! empty( $item['name'] ) ? $item['name'] : '<em>' . __( 'Unnamed Customer','easy-digital-downloads' ) . '</em>';
154
- $user = ! empty( $item['user_id'] ) ? $item['user_id'] : $item['email'];
155
- $customer = new EDD_Customer( $item['id'] );
156
- $view_url = admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $item['id'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  $actions = array(
158
- 'view' => '<a href="' . $view_url . '">' . __( 'View', 'easy-digital-downloads' ) . '</a>',
159
- 'logs' => '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs&customer=' . $customer->id ) . '">' . __( 'Download log', 'easy-digital-downloads' ) . '</a>',
160
- 'delete' => '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-customers&view=delete&id=' . $item['id'] ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>'
161
  );
162
 
163
  $pending = edd_user_pending_verification( $customer->user_id ) ? ' <em>' . __( '(Pending Verification)', 'easy-digital-downloads' ) . '</em>' : '';
@@ -238,7 +267,6 @@ class EDD_Customer_Reports_Table extends WP_List_Table {
238
  * @return array $reports_data All the data for customer reports
239
  */
240
  public function reports_data() {
241
- global $wpdb;
242
 
243
  $data = array();
244
  $paged = $this->get_paged();
95
  echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
96
  ?>
97
  <p class="search-box">
98
+ <label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php echo esc_html( $text ); ?>:</label>
99
+ <input type="search" id="<?php echo esc_attr( $input_id ); ?>" name="s" value="<?php _admin_search_query(); ?>" />
100
  <?php submit_button( $text, 'button', false, false, array('ID' => 'search-submit') ); ?>
101
  </p>
102
  <?php
129
 
130
  case 'num_purchases' :
131
  $value = '<a href="' .
132
+ esc_url( admin_url( '/edit.php?post_type=download&page=edd-payment-history&user=' . urlencode( $item['email'] ) )
133
  ) . '">' . esc_html( $item['num_purchases'] ) . '</a>';
134
  break;
135
 
149
  }
150
 
151
  public function column_name( $item ) {
152
+ $name = '#' . $item['id'] . ' ';
153
+ $name .= ! empty( $item['name'] ) ? esc_html( $item['name'] ) : '<em>' . __( 'Unnamed Customer','easy-digital-downloads' ) . '</em>';
154
+ $customer = new EDD_Customer( $item['id'] );
155
+ $base_url = add_query_arg(
156
+ array(
157
+ 'post_type' => 'download',
158
+ ),
159
+ admin_url( 'edit.php' )
160
+ );
161
+ $view_url = add_query_arg(
162
+ array(
163
+ 'page' => 'edd-customers',
164
+ 'view' => 'overview',
165
+ 'id' => absint( $customer->id ),
166
+ ),
167
+ $base_url
168
+ );
169
+ $logs_url = add_query_arg(
170
+ array(
171
+ 'page' => 'edd-reports',
172
+ 'tab' => 'logs',
173
+ 'customer' => absint( $customer->id ),
174
+ ),
175
+ $base_url
176
+ );
177
+ $delete_url = add_query_arg(
178
+ array(
179
+ 'page' => 'edd-customers',
180
+ 'view' => 'delete',
181
+ 'id' => absint( $item['id'] ),
182
+ ),
183
+ $base_url
184
+ );
185
+
186
  $actions = array(
187
+ 'view' => '<a href="' . esc_url( $view_url ) . '">' . __( 'View', 'easy-digital-downloads' ) . '</a>',
188
+ 'logs' => '<a href="' . esc_url( $logs_url ) . '">' . __( 'Download log', 'easy-digital-downloads' ) . '</a>',
189
+ 'delete' => '<a href="' . esc_url( $delete_url ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>'
190
  );
191
 
192
  $pending = edd_user_pending_verification( $customer->user_id ) ? ' <em>' . __( '(Pending Verification)', 'easy-digital-downloads' ) . '</em>' : '';
267
  * @return array $reports_data All the data for customer reports
268
  */
269
  public function reports_data() {
 
270
 
271
  $data = array();
272
  $paged = $this->get_paged();
includes/admin/customers/customer-actions.php CHANGED
@@ -302,9 +302,18 @@ function edd_remove_customer_email() {
302
  }
303
 
304
  $customer = new EDD_Customer( $_GET['id'] );
 
 
 
 
 
 
 
 
 
305
  if ( $customer->remove_email( $_GET['email'] ) ) {
306
 
307
- $url = add_query_arg( 'edd-message', 'email-removed', admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ) );
308
 
309
  $user = wp_get_current_user();
310
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
@@ -312,10 +321,10 @@ function edd_remove_customer_email() {
312
  $customer->add_note( $customer_note );
313
 
314
  } else {
315
- $url = add_query_arg( 'edd-message', 'email-remove-failed', admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ) );
316
  }
317
 
318
- wp_safe_redirect( $url );
319
  exit;
320
  }
321
  add_action( 'edd_customer-remove-email', 'edd_remove_customer_email', 10 );
@@ -346,9 +355,18 @@ function edd_set_customer_primary_email() {
346
  }
347
 
348
  $customer = new EDD_Customer( $_GET['id'] );
 
 
 
 
 
 
 
 
 
349
  if ( $customer->set_primary_email( $_GET['email'] ) ) {
350
 
351
- $url = add_query_arg( 'edd-message', 'primary-email-updated', admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ) );
352
 
353
  $user = wp_get_current_user();
354
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
@@ -356,10 +374,10 @@ function edd_set_customer_primary_email() {
356
  $customer->add_note( $customer_note );
357
 
358
  } else {
359
- $url = add_query_arg( 'edd-message', 'primary-email-failed', admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ) );
360
  }
361
 
362
- wp_safe_redirect( $url );
363
  exit;
364
  }
365
  add_action( 'edd_customer-primary-email', 'edd_set_customer_primary_email', 10 );
@@ -464,7 +482,7 @@ function edd_customer_delete( $args ) {
464
  }
465
 
466
  if ( edd_get_errors() ) {
467
- wp_redirect( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer_id ) );
468
  exit;
469
  }
470
 
@@ -513,7 +531,7 @@ function edd_customer_delete( $args ) {
513
 
514
  }
515
 
516
- wp_redirect( $redirect );
517
  exit;
518
 
519
  }
@@ -606,9 +624,18 @@ function edd_process_admin_user_verification() {
606
  $customer = new EDD_Customer( $_GET['id'] );
607
  edd_set_user_to_verified( $customer->user_id );
608
 
609
- $url = add_query_arg( 'edd-message', 'user-verified', admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ) );
 
 
 
 
 
 
 
 
 
610
 
611
- wp_safe_redirect( $url );
612
  exit;
613
 
614
  }
302
  }
303
 
304
  $customer = new EDD_Customer( $_GET['id'] );
305
+ $url = add_query_arg(
306
+ array(
307
+ 'post_type' => 'download',
308
+ 'page' => 'edd-customers',
309
+ 'view' => 'overview',
310
+ 'id' => urlencode( $customer->id ),
311
+ ),
312
+ admin_url( 'edit.php' )
313
+ );
314
  if ( $customer->remove_email( $_GET['email'] ) ) {
315
 
316
+ $url = add_query_arg( 'edd-message', 'email-removed', $url );
317
 
318
  $user = wp_get_current_user();
319
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
321
  $customer->add_note( $customer_note );
322
 
323
  } else {
324
+ $url = add_query_arg( 'edd-message', 'email-remove-failed', $url );
325
  }
326
 
327
+ wp_safe_redirect( esc_url_raw( $url ) );
328
  exit;
329
  }
330
  add_action( 'edd_customer-remove-email', 'edd_remove_customer_email', 10 );
355
  }
356
 
357
  $customer = new EDD_Customer( $_GET['id'] );
358
+ $url = add_query_arg(
359
+ array(
360
+ 'post_type' => 'download',
361
+ 'page' => 'edd-customers',
362
+ 'view' => 'overview',
363
+ 'id' => urlencode( $customer->id ),
364
+ ),
365
+ admin_url( 'edit.php' )
366
+ );
367
  if ( $customer->set_primary_email( $_GET['email'] ) ) {
368
 
369
+ $url = add_query_arg( 'edd-message', 'primary-email-updated', $url );
370
 
371
  $user = wp_get_current_user();
372
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
374
  $customer->add_note( $customer_note );
375
 
376
  } else {
377
+ $url = add_query_arg( 'edd-message', 'primary-email-failed', $url );
378
  }
379
 
380
+ wp_safe_redirect( esc_url_raw( $url ) );
381
  exit;
382
  }
383
  add_action( 'edd_customer-primary-email', 'edd_set_customer_primary_email', 10 );
482
  }
483
 
484
  if ( edd_get_errors() ) {
485
+ wp_safe_redirect( esc_url_raw( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . urlencode( $customer_id ) ) ) );
486
  exit;
487
  }
488
 
531
 
532
  }
533
 
534
+ wp_safe_redirect( esc_url_raw( $redirect ) );
535
  exit;
536
 
537
  }
624
  $customer = new EDD_Customer( $_GET['id'] );
625
  edd_set_user_to_verified( $customer->user_id );
626
 
627
+ $url = add_query_arg(
628
+ array(
629
+ 'post_type' => 'download',
630
+ 'page' => 'edd-customers',
631
+ 'view' => 'overview',
632
+ 'id' => urlencode( $customer->id ),
633
+ 'edd-message' => 'user-verified',
634
+ ),
635
+ admin_url( 'edit.php' )
636
+ );
637
 
638
+ wp_safe_redirect( esc_url_raw( $url ) );
639
  exit;
640
 
641
  }
includes/admin/customers/customers.php CHANGED
@@ -60,9 +60,9 @@ function edd_customers_list() {
60
  $customers_table->prepare_items();
61
  ?>
62
  <div class="wrap">
63
- <h1><?php _e( 'Customers', 'easy-digital-downloads' ); ?></h1>
64
  <?php do_action( 'edd_customers_table_top' ); ?>
65
- <form id="edd-customers-filter" method="get" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-customers' ); ?>">
66
  <?php
67
  $customers_table->search_box( __( 'Search Customers', 'easy-digital-downloads' ), 'edd-customers' );
68
  $customers_table->display();
@@ -144,8 +144,20 @@ function edd_render_customer_view( $view, $callbacks ) {
144
  $aria_label = ' aria-label="' . $tab_title . '"';
145
  ?>
146
 
147
- <?php if ( ! $active ) : ?>
148
- <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=' . $key . '&id=' . $customer->id . '#wpbody-content' ) ); ?>"<?php echo $aria_label; ?>>
 
 
 
 
 
 
 
 
 
 
 
 
149
  <?php endif; ?>
150
 
151
  <span class="edd-item-tab-label-wrap"<?php echo $active ? $aria_label : ''; ?>>
@@ -193,7 +205,7 @@ function edd_customers_view( $customer ) {
193
 
194
  <div class="info-wrapper customer-section">
195
 
196
- <form id="edit-customer-info" method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ); ?>">
197
 
198
  <div class="edd-item-info customer-info">
199
 
@@ -206,7 +218,7 @@ function edd_customers_view( $customer ) {
206
  </div>
207
 
208
  <div class="customer-id right">
209
- #<?php echo $customer->id; ?>
210
  </div>
211
 
212
  <div class="customer-address-wrapper right">
@@ -228,18 +240,18 @@ function edd_customers_view( $customer ) {
228
 
229
  <strong><?php _e( 'Customer Address', 'easy-digital-downloads' ); ?></strong>
230
  <span class="customer-address info-item editable">
231
- <span class="info-item" data-key="line1"><?php echo $address['line1']; ?></span>
232
- <span class="info-item" data-key="line2"><?php echo $address['line2']; ?></span>
233
- <span class="info-item" data-key="city"><?php echo $address['city']; ?></span>
234
- <span class="info-item" data-key="state"><?php echo edd_get_state_name( $address['country'], $address['state'] ); ?></span>
235
- <span class="info-item" data-key="country"><?php echo edd_get_country_name( $address['country'] ); ?></span>
236
- <span class="info-item" data-key="zip"><?php echo $address['zip']; ?></span>
237
  </span>
238
 
239
  <span class="customer-address info-item edit-item">
240
- <input class="info-item" type="text" data-key="line1" name="customerinfo[line1]" placeholder="<?php _e( 'Address 1', 'easy-digital-downloads' ); ?>" value="<?php echo $address['line1']; ?>" />
241
- <input class="info-item" type="text" data-key="line2" name="customerinfo[line2]" placeholder="<?php _e( 'Address 2', 'easy-digital-downloads' ); ?>" value="<?php echo $address['line2']; ?>" />
242
- <input class="info-item" type="text" data-key="city" name="customerinfo[city]" placeholder="<?php _e( 'City', 'easy-digital-downloads' ); ?>" value="<?php echo $address['city']; ?>" />
243
  <select data-key="country" name="customerinfo[country]" id="billing_country" class="billing_country edd-select edit-item" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>">
244
  <?php
245
 
@@ -247,7 +259,7 @@ function edd_customers_view( $customer ) {
247
 
248
  $countries = edd_get_country_list();
249
  foreach( $countries as $country_code => $country ) {
250
- echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . $country . '</option>';
251
  }
252
  ?>
253
  </select>
@@ -261,14 +273,14 @@ function edd_customers_view( $customer ) {
261
  <select data-key="state" name="customerinfo[state]" id="card_state" class="card_state edd-select info-item">
262
  <?php
263
  foreach( $states as $state_code => $state ) {
264
- echo '<option value="' . $state_code . '"' . selected( $state_code, $selected_state, false ) . '>' . $state . '</option>';
265
  }
266
  ?>
267
  </select>
268
  <?php else : ?>
269
- <input type="text" data-key="state" name="customerinfo[state]" id="card_state" class="card_state edd-input info-item" placeholder="<?php _e( 'State / Province', 'easy-digital-downloads' ); ?>" value="<?php echo $address['state']; ?>"/>
270
  <?php endif; ?>
271
- <input class="info-item" type="text" data-key="zip" name="customerinfo[zip]" placeholder="<?php _e( 'Postal', 'easy-digital-downloads' ); ?>" value="<?php echo $address['zip']; ?>" />
272
  </span>
273
  <?php endif; ?>
274
  </div>
@@ -276,9 +288,9 @@ function edd_customers_view( $customer ) {
276
  <div class="customer-main-wrapper left">
277
 
278
  <span class="customer-name info-item edit-item"><input size="15" data-key="name" name="customerinfo[name]" type="text" value="<?php echo esc_attr( $customer->name ); ?>" placeholder="<?php _e( 'Customer Name', 'easy-digital-downloads' ); ?>" /></span>
279
- <span class="customer-name info-item editable"><span data-key="name"><?php echo $customer->name; ?></span></span>
280
- <span class="customer-name info-item edit-item"><input size="20" data-key="email" name="customerinfo[email]" type="text" value="<?php echo $customer->email; ?>" placeholder="<?php _e( 'Customer Email', 'easy-digital-downloads' ); ?>" /></span>
281
- <span class="customer-email info-item editable" data-key="email"><?php echo $customer->email; ?></span>
282
  <span class="customer-since info-item">
283
  <?php
284
  printf(
@@ -306,13 +318,13 @@ function edd_customers_view( $customer ) {
306
 
307
  echo EDD()->html->ajax_user_search( $user_args );
308
  ?>
309
- <input type="hidden" name="customerinfo[user_id]" data-key="user_id" value="<?php echo $customer->user_id; ?>" />
310
  </span>
311
 
312
  <span class="customer-user-id info-item editable">
313
  <?php _e( 'User ID', 'easy-digital-downloads' ); ?>:&nbsp;
314
  <?php if( intval( $customer->user_id ) > 0 ) : ?>
315
- <span data-key="user_id"><a href="<?php echo admin_url( 'user-edit.php?user_id=' . $customer->user_id ); ?>"><?php echo $customer->user_id; ?></a></span>
316
  <?php else : ?>
317
  <span data-key="user_id"><?php _e( 'none', 'easy-digital-downloads' ); ?></span>
318
  <?php endif; ?>
@@ -326,7 +338,7 @@ function edd_customers_view( $customer ) {
326
  </div>
327
 
328
  <span id="customer-edit-actions" class="edit-item">
329
- <input type="hidden" data-key="id" name="customerinfo[id]" value="<?php echo $customer->id; ?>" />
330
  <?php wp_nonce_field( 'edit-customer', '_wpnonce', false, true ); ?>
331
  <input type="hidden" name="edd_action" value="edit-customer" />
332
  <input type="submit" id="edd-edit-customer-save" class="button-secondary" value="<?php _e( 'Update Customer', 'easy-digital-downloads' ); ?>" />
@@ -341,7 +353,7 @@ function edd_customers_view( $customer ) {
341
  <div id="edd-item-stats-wrapper" class="customer-stats-wrapper customer-section">
342
  <ul>
343
  <li>
344
- <a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history&customer=' . $customer->id ); ?>">
345
  <span class="dashicons dashicons-cart"></span>
346
  <?php printf( _n( '%d Completed Sale', '%d Completed Sales', $customer->purchase_count, 'easy-digital-downloads' ), $customer->purchase_count ); ?>
347
  </a>
@@ -387,9 +399,9 @@ function edd_customers_view( $customer ) {
387
  <tbody>
388
  <?php if ( ! empty( $all_emails ) ) : ?>
389
  <?php foreach ( $all_emails as $key => $email ) : ?>
390
- <tr data-key="<?php echo $key; ?>">
391
  <td>
392
- <?php echo $email; ?>
393
  <?php if ( 'primary' === $key ) : ?>
394
  <span class="dashicons dashicons-star-filled primary-email-icon"></span>
395
  <?php endif; ?>
@@ -401,9 +413,9 @@ function edd_customers_view( $customer ) {
401
  $promote_url = wp_nonce_url( add_query_arg( array( 'email' => rawurlencode( $email ), 'edd_action' => 'customer-primary-email'), $base_url ), 'edd-set-customer-primary-email' );
402
  $remove_url = wp_nonce_url( add_query_arg( array( 'email' => rawurlencode( $email ), 'edd_action' => 'customer-remove-email'), $base_url ), 'edd-remove-customer-email' );
403
  ?>
404
- <a href="<?php echo $promote_url; ?>"><?php _e( 'Make Primary', 'easy-digital-downloads' ); ?></a>
405
  &nbsp;|&nbsp;
406
- <a href="<?php echo $remove_url; ?>" class="delete"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
407
  <?php endif; ?>
408
  </td>
409
  </tr>
@@ -411,7 +423,7 @@ function edd_customers_view( $customer ) {
411
  <tr class="add-customer-email-row">
412
  <td colspan="2" class="add-customer-email-td">
413
  <div class="add-customer-email-wrapper">
414
- <input type="hidden" name="customer-id" value="<?php echo $customer->id; ?>" />
415
  <?php wp_nonce_field( 'edd-add-customer-email', 'add_email_nonce', false, true ); ?>
416
  <input type="email" name="additional-email" value="" placeholder="<?php _e( 'Email Address', 'easy-digital-downloads' ); ?>" />&nbsp;
417
  <input type="checkbox" name="make-additional-primary" value="1" id="make-additional-primary" />&nbsp;<label for="make-additional-primary"><?php _e( 'Make Primary', 'easy-digital-downloads' ); ?></label>
@@ -445,14 +457,24 @@ function edd_customers_view( $customer ) {
445
  </thead>
446
  <tbody>
447
  <?php if ( ! empty( $payments ) ) : ?>
448
- <?php foreach ( $payments as $payment ) : ?>
 
 
 
 
 
 
 
 
 
 
449
  <tr>
450
- <td><?php echo $payment->ID; ?></td>
451
- <td><?php echo edd_payment_amount( $payment->ID ); ?></td>
452
- <td><?php echo date_i18n( get_option( 'date_format' ), strtotime( $payment->post_date ) ); ?></td>
453
- <td><?php echo edd_get_payment_status( $payment, true ); ?></td>
454
  <td>
455
- <a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $payment->ID ); ?>">
456
  <?php _e( 'View Details', 'easy-digital-downloads' ); ?>
457
  </a>
458
  <?php do_action( 'edd_customer_recent_purchases_actions', $customer, $payment ); ?>
@@ -478,18 +500,28 @@ function edd_customers_view( $customer ) {
478
  </thead>
479
  <tbody>
480
  <?php if ( ! empty( $downloads ) ) : ?>
481
- <?php foreach ( $downloads as $download ) : ?>
 
 
 
 
 
 
 
 
 
 
482
  <tr>
483
- <td><?php echo $download->post_title; ?></td>
484
  <td>
485
- <a href="<?php echo esc_url( admin_url( 'post.php?action=edit&post=' . $download->ID ) ); ?>">
486
- <?php printf( __( 'View %s', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>
487
  </a>
488
  </td>
489
  </tr>
490
  <?php endforeach; ?>
491
  <?php else: ?>
492
- <tr><td colspan="2"><?php printf( __( 'No %s Found', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></td></tr>
493
  <?php endif; ?>
494
  </tbody>
495
  </table>
@@ -523,7 +555,7 @@ function edd_customer_notes_view( $customer ) {
523
 
524
  <div id="edd-item-notes-wrapper">
525
  <div class="edd-item-notes-header">
526
- <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo $customer->name; ?></span>
527
  </div>
528
  <?php
529
  $show_agree_to_terms = edd_get_option( 'show_agree_to_terms', false );
@@ -537,7 +569,7 @@ function edd_customer_notes_view( $customer ) {
537
  'post__in' => explode( ',', $customer->payment_ids ),
538
  'orderby' => 'date',
539
  'posts_per_page' => 1
540
- ));
541
 
542
  $last_payment_date = '';
543
 
@@ -566,16 +598,16 @@ function edd_customer_notes_view( $customer ) {
566
  <span class="customer-terms-agreement-date info-item">
567
  <?php _e( 'Last Agreed to Terms', 'easy-digital-downloads' ); ?>:
568
  <?php if ( ! empty( $agreement_timestamp ) ) : ?>
569
- <?php echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $agreement_timestamp ); ?>
570
  <?php if ( ! empty( $agreement_timestamps ) ) : ?>
571
- <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $agreement_timestamps as $timestamp ) { echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ); } ?>"></span>
572
  <?php endif; ?>
573
  <?php else: ?>
574
  <?php
575
  if ( empty( $last_payment_date ) ) {
576
  _e( 'No date found.', 'easy-digital-downloads' );
577
  } else {
578
- echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date );
579
  ?>
580
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to agreement dates being logged, this is the date of their last purchase. If your site was displaying the agreement checkbox at that time, this is our best estimate as to when they last agreed to your terms.', 'easy-digital-downloads' ); ?>"></span>
581
  <?php
@@ -587,16 +619,16 @@ function edd_customer_notes_view( $customer ) {
587
  <span class="customer-privacy-policy-date info-item">
588
  <?php _e( 'Last Agreed to Privacy Policy', 'easy-digital-downloads' ); ?>:
589
  <?php if ( ! empty( $privacy_timestamp ) ) : ?>
590
- <?php echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $privacy_timestamp ); ?>
591
  <?php if ( ! empty( $privacy_timestamps ) ) : ?>
592
- <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $privacy_timestamps as $timestamp ) { echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ); } ?>"></span>
593
  <?php endif; ?>
594
  <?php else: ?>
595
  <?php
596
  if ( empty( $last_payment_date ) ) {
597
  _e( 'No date found.', 'easy-digital-downloads' );
598
  } else {
599
- echo date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date );
600
  ?>
601
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to privacy policy dates being logged, this is the date of their last purchase. If your site was displaying the privacy policy checkbox at that time, this is our best estimate as to when they last agreed to your privacy policy.', 'easy-digital-downloads' ); ?>"></span>
602
  <?php
@@ -609,10 +641,10 @@ function edd_customer_notes_view( $customer ) {
609
 
610
  <?php if ( 1 == $paged ) : ?>
611
  <div style="display: block; margin-bottom: 35px;">
612
- <form id="edd-add-customer-note" method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-customers&view=notes&id=' . $customer->id ); ?>">
613
  <textarea id="customer-note" name="customer_note" class="customer-note-input" rows="10"></textarea>
614
  <br />
615
- <input type="hidden" id="customer-id" name="customer_id" value="<?php echo $customer->id; ?>" />
616
  <input type="hidden" name="edd_action" value="add-customer-note" />
617
  <?php wp_nonce_field( 'add-customer-note', 'add_customer_note_nonce', true, true ); ?>
618
  <input id="add-customer-note" class="right button-primary" type="submit" value="<?php esc_attr_e( 'Add Note', 'easy-digital-downloads' ); ?>" />
@@ -664,10 +696,10 @@ function edd_customers_delete_view( $customer ) {
664
 
665
  <div class="info-wrapper customer-section">
666
 
667
- <form id="delete-customer" method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-customers&view=delete&id=' . $customer->id ); ?>">
668
 
669
  <div class="edd-item-notes-header">
670
- <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo $customer->name; ?></span>
671
  </div>
672
 
673
 
@@ -688,11 +720,11 @@ function edd_customers_delete_view( $customer ) {
688
  </span>
689
 
690
  <span id="customer-edit-actions">
691
- <input type="hidden" name="customer_id" value="<?php echo $customer->id; ?>" />
692
  <?php wp_nonce_field( 'delete-customer', '_wpnonce', false, true ); ?>
693
  <input type="hidden" name="edd_action" value="delete-customer" />
694
  <input type="submit" disabled="disabled" id="edd-delete-customer" class="button-primary" value="<?php _e( 'Delete Customer', 'easy-digital-downloads' ); ?>" />
695
- <a id="edd-delete-customer-cancel" href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ); ?>" class="delete"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
696
  </span>
697
 
698
  </div>
@@ -715,7 +747,7 @@ function edd_customer_tools_view( $customer ) {
715
  <div class="info-wrapper customer-section">
716
 
717
  <div class="customer-notes-header">
718
- <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo $customer->name; ?></span>
719
  </div>
720
  <h3><?php _e( 'Tools', 'easy-digital-downloads' ); ?></h3>
721
 
@@ -727,7 +759,7 @@ function edd_customer_tools_view( $customer ) {
727
  <?php wp_nonce_field( 'edd_ajax_export', 'edd_ajax_export' ); ?>
728
 
729
  <input type="hidden" name="edd-export-class" data-type="recount-single-customer-stats" value="EDD_Tools_Recount_Single_Customer_Stats" />
730
- <input type="hidden" name="customer_id" value="<?php echo $customer->id; ?>" />
731
  <input type="submit" id="recount-stats-submit" value="<?php _e( 'Recount Stats', 'easy-digital-downloads' ); ?>" class="button-secondary"/>
732
  <span class="spinner"></span>
733
 
@@ -755,12 +787,24 @@ function edd_verify_customer_notice( $customer ) {
755
  return;
756
  }
757
 
758
- $url = wp_nonce_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&edd_action=verify_user_admin&id=' . $customer->id ), 'edd-verify-user' );
 
 
 
 
 
 
 
 
 
 
 
 
759
 
760
  echo '<div class="update error"><p>';
761
- _e( 'This customer\'s user account is pending verification.', 'easy-digital-downloads' );
762
  echo ' ';
763
- echo '<a href="' . $url . '">' . __( 'Verify account.', 'easy-digital-downloads' ) . '</a>';
764
  echo "\n\n";
765
 
766
  echo '</p></div>';
60
  $customers_table->prepare_items();
61
  ?>
62
  <div class="wrap">
63
+ <h1><?php esc_html_e( 'Customers', 'easy-digital-downloads' ); ?></h1>
64
  <?php do_action( 'edd_customers_table_top' ); ?>
65
+ <form id="edd-customers-filter" method="get" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers' ) ); ?>">
66
  <?php
67
  $customers_table->search_box( __( 'Search Customers', 'easy-digital-downloads' ), 'edd-customers' );
68
  $customers_table->display();
144
  $aria_label = ' aria-label="' . $tab_title . '"';
145
  ?>
146
 
147
+ <?php if ( ! $active ) :
148
+
149
+ $url = add_query_arg(
150
+ array(
151
+ 'post_type' => 'download',
152
+ 'page' => 'edd-customers',
153
+ 'view' => sanitize_key( $key ),
154
+ 'id' => absint( $customer->id )
155
+ ),
156
+ admin_url( 'edit.php' )
157
+ );
158
+
159
+ ?>
160
+ <a href="<?php echo esc_url( $url ); ?>#wpbody-content"<?php echo $aria_label; ?>>
161
  <?php endif; ?>
162
 
163
  <span class="edd-item-tab-label-wrap"<?php echo $active ? $aria_label : ''; ?>>
205
 
206
  <div class="info-wrapper customer-section">
207
 
208
+ <form id="edit-customer-info" method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . absint( $customer->id ) ) ); ?>">
209
 
210
  <div class="edd-item-info customer-info">
211
 
218
  </div>
219
 
220
  <div class="customer-id right">
221
+ #<?php echo esc_html( $customer->id ); ?>
222
  </div>
223
 
224
  <div class="customer-address-wrapper right">
240
 
241
  <strong><?php _e( 'Customer Address', 'easy-digital-downloads' ); ?></strong>
242
  <span class="customer-address info-item editable">
243
+ <span class="info-item" data-key="line1"><?php echo esc_html( $address['line1'] ); ?></span>
244
+ <span class="info-item" data-key="line2"><?php echo esc_html( $address['line2'] ); ?></span>
245
+ <span class="info-item" data-key="city"><?php echo esc_html( $address['city'] ); ?></span>
246
+ <span class="info-item" data-key="state"><?php echo esc_html( edd_get_state_name( $address['country'], $address['state'] ) ); ?></span>
247
+ <span class="info-item" data-key="country"><?php echo esc_html( edd_get_country_name( $address['country'] ) ); ?></span>
248
+ <span class="info-item" data-key="zip"><?php echo esc_html( $address['zip'] ); ?></span>
249
  </span>
250
 
251
  <span class="customer-address info-item edit-item">
252
+ <input class="info-item" type="text" data-key="line1" name="customerinfo[line1]" placeholder="<?php _e( 'Address 1', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $address['line1'] ); ?>" />
253
+ <input class="info-item" type="text" data-key="line2" name="customerinfo[line2]" placeholder="<?php _e( 'Address 2', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $address['line2'] ); ?>" />
254
+ <input class="info-item" type="text" data-key="city" name="customerinfo[city]" placeholder="<?php _e( 'City', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $address['city'] ); ?>" />
255
  <select data-key="country" name="customerinfo[country]" id="billing_country" class="billing_country edd-select edit-item" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>">
256
  <?php
257
 
259
 
260
  $countries = edd_get_country_list();
261
  foreach( $countries as $country_code => $country ) {
262
+ echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . esc_html( $country ) . '</option>';
263
  }
264
  ?>
265
  </select>
273
  <select data-key="state" name="customerinfo[state]" id="card_state" class="card_state edd-select info-item">
274
  <?php
275
  foreach( $states as $state_code => $state ) {
276
+ echo '<option value="' . esc_attr( $state_code ) . '"' . selected( $state_code, $selected_state, false ) . '>' . esc_html( $state ) . '</option>';
277
  }
278
  ?>
279
  </select>
280
  <?php else : ?>
281
+ <input type="text" data-key="state" name="customerinfo[state]" id="card_state" class="card_state edd-input info-item" placeholder="<?php _e( 'State / Province', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $address['state'] ); ?>"/>
282
  <?php endif; ?>
283
+ <input class="info-item" type="text" data-key="zip" name="customerinfo[zip]" placeholder="<?php _e( 'Postal', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $address['zip'] ); ?>" />
284
  </span>
285
  <?php endif; ?>
286
  </div>
288
  <div class="customer-main-wrapper left">
289
 
290
  <span class="customer-name info-item edit-item"><input size="15" data-key="name" name="customerinfo[name]" type="text" value="<?php echo esc_attr( $customer->name ); ?>" placeholder="<?php _e( 'Customer Name', 'easy-digital-downloads' ); ?>" /></span>
291
+ <span class="customer-name info-item editable"><span data-key="name"><?php echo esc_html( $customer->name ); ?></span></span>
292
+ <span class="customer-name info-item edit-item"><input size="20" data-key="email" name="customerinfo[email]" type="text" value="<?php echo esc_attr( $customer->email ); ?>" placeholder="<?php _e( 'Customer Email', 'easy-digital-downloads' ); ?>" /></span>
293
+ <span class="customer-email info-item editable" data-key="email"><?php echo esc_html( $customer->email ); ?></span>
294
  <span class="customer-since info-item">
295
  <?php
296
  printf(
318
 
319
  echo EDD()->html->ajax_user_search( $user_args );
320
  ?>
321
+ <input type="hidden" name="customerinfo[user_id]" data-key="user_id" value="<?php echo esc_attr( $customer->user_id ); ?>" />
322
  </span>
323
 
324
  <span class="customer-user-id info-item editable">
325
  <?php _e( 'User ID', 'easy-digital-downloads' ); ?>:&nbsp;
326
  <?php if( intval( $customer->user_id ) > 0 ) : ?>
327
+ <span data-key="user_id"><a href="<?php echo esc_url( admin_url( 'user-edit.php?user_id=' . urlencode( $customer->user_id ) ) ); ?>"><?php echo esc_html( $customer->user_id ); ?></a></span>
328
  <?php else : ?>
329
  <span data-key="user_id"><?php _e( 'none', 'easy-digital-downloads' ); ?></span>
330
  <?php endif; ?>
338
  </div>
339
 
340
  <span id="customer-edit-actions" class="edit-item">
341
+ <input type="hidden" data-key="id" name="customerinfo[id]" value="<?php echo esc_attr( $customer->id ); ?>" />
342
  <?php wp_nonce_field( 'edit-customer', '_wpnonce', false, true ); ?>
343
  <input type="hidden" name="edd_action" value="edit-customer" />
344
  <input type="submit" id="edd-edit-customer-save" class="button-secondary" value="<?php _e( 'Update Customer', 'easy-digital-downloads' ); ?>" />
353
  <div id="edd-item-stats-wrapper" class="customer-stats-wrapper customer-section">
354
  <ul>
355
  <li>
356
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history&customer=' . urlencode( $customer->id ) ) ); ?>">
357
  <span class="dashicons dashicons-cart"></span>
358
  <?php printf( _n( '%d Completed Sale', '%d Completed Sales', $customer->purchase_count, 'easy-digital-downloads' ), $customer->purchase_count ); ?>
359
  </a>
399
  <tbody>
400
  <?php if ( ! empty( $all_emails ) ) : ?>
401
  <?php foreach ( $all_emails as $key => $email ) : ?>
402
+ <tr data-key="<?php echo esc_attr( $key ); ?>">
403
  <td>
404
+ <?php echo esc_html( $email ); ?>
405
  <?php if ( 'primary' === $key ) : ?>
406
  <span class="dashicons dashicons-star-filled primary-email-icon"></span>
407
  <?php endif; ?>
413
  $promote_url = wp_nonce_url( add_query_arg( array( 'email' => rawurlencode( $email ), 'edd_action' => 'customer-primary-email'), $base_url ), 'edd-set-customer-primary-email' );
414
  $remove_url = wp_nonce_url( add_query_arg( array( 'email' => rawurlencode( $email ), 'edd_action' => 'customer-remove-email'), $base_url ), 'edd-remove-customer-email' );
415
  ?>
416
+ <a href="<?php echo esc_url( $promote_url ); ?>"><?php _e( 'Make Primary', 'easy-digital-downloads' ); ?></a>
417
  &nbsp;|&nbsp;
418
+ <a href="<?php echo esc_url( $remove_url ); ?>" class="delete"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
419
  <?php endif; ?>
420
  </td>
421
  </tr>
423
  <tr class="add-customer-email-row">
424
  <td colspan="2" class="add-customer-email-td">
425
  <div class="add-customer-email-wrapper">
426
+ <input type="hidden" name="customer-id" value="<?php echo esc_attr( $customer->id ); ?>" />
427
  <?php wp_nonce_field( 'edd-add-customer-email', 'add_email_nonce', false, true ); ?>
428
  <input type="email" name="additional-email" value="" placeholder="<?php _e( 'Email Address', 'easy-digital-downloads' ); ?>" />&nbsp;
429
  <input type="checkbox" name="make-additional-primary" value="1" id="make-additional-primary" />&nbsp;<label for="make-additional-primary"><?php _e( 'Make Primary', 'easy-digital-downloads' ); ?></label>
457
  </thead>
458
  <tbody>
459
  <?php if ( ! empty( $payments ) ) : ?>
460
+ <?php foreach ( $payments as $payment ) :
461
+ $url = add_query_arg(
462
+ array(
463
+ 'post_type' => 'download',
464
+ 'page' => 'edd-payment-history',
465
+ 'view' => 'view-order-details',
466
+ 'id' => urlencode( $payment->ID )
467
+ ),
468
+ admin_url( 'edit.php' )
469
+ );
470
+ ?>
471
  <tr>
472
+ <td><?php echo esc_html( $payment->ID ); ?></td>
473
+ <td><?php echo esc_html( edd_payment_amount( $payment->ID ) ); ?></td>
474
+ <td><?php echo esc_html( date_i18n( get_option( 'date_format' ), strtotime( $payment->post_date ) ) ); ?></td>
475
+ <td><?php echo esc_html( edd_get_payment_status( $payment, true ) ); ?></td>
476
  <td>
477
+ <a href="<?php echo esc_url( $url ); ?>">
478
  <?php _e( 'View Details', 'easy-digital-downloads' ); ?>
479
  </a>
480
  <?php do_action( 'edd_customer_recent_purchases_actions', $customer, $payment ); ?>
500
  </thead>
501
  <tbody>
502
  <?php if ( ! empty( $downloads ) ) : ?>
503
+ <?php foreach ( $downloads as $download ) :
504
+
505
+ $url = add_query_arg(
506
+ array(
507
+ 'action' => 'edit',
508
+ 'post' => absint( $download->ID )
509
+ ),
510
+ admin_url( 'post.php' )
511
+ );
512
+
513
+ ?>
514
  <tr>
515
+ <td><?php echo esc_html( $download->post_title ); ?></td>
516
  <td>
517
+ <a href="<?php echo esc_url( $url ); ?>">
518
+ <?php echo esc_html( sprintf( __( 'View %s', 'easy-digital-downloads' ), edd_get_label_singular() ) ); ?>
519
  </a>
520
  </td>
521
  </tr>
522
  <?php endforeach; ?>
523
  <?php else: ?>
524
+ <tr><td colspan="2"><?php echo esc_html( sprintf( __( 'No %s Found', 'easy-digital-downloads' ), edd_get_label_plural() ) ); ?></td></tr>
525
  <?php endif; ?>
526
  </tbody>
527
  </table>
555
 
556
  <div id="edd-item-notes-wrapper">
557
  <div class="edd-item-notes-header">
558
+ <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo esc_html( $customer->name ); ?></span>
559
  </div>
560
  <?php
561
  $show_agree_to_terms = edd_get_option( 'show_agree_to_terms', false );
569
  'post__in' => explode( ',', $customer->payment_ids ),
570
  'orderby' => 'date',
571
  'posts_per_page' => 1
572
+ ) );
573
 
574
  $last_payment_date = '';
575
 
598
  <span class="customer-terms-agreement-date info-item">
599
  <?php _e( 'Last Agreed to Terms', 'easy-digital-downloads' ); ?>:
600
  <?php if ( ! empty( $agreement_timestamp ) ) : ?>
601
+ <?php echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $agreement_timestamp ) ); ?>
602
  <?php if ( ! empty( $agreement_timestamps ) ) : ?>
603
+ <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $agreement_timestamps as $timestamp ) { echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ) ); } ?>"></span>
604
  <?php endif; ?>
605
  <?php else: ?>
606
  <?php
607
  if ( empty( $last_payment_date ) ) {
608
  _e( 'No date found.', 'easy-digital-downloads' );
609
  } else {
610
+ echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date ) );
611
  ?>
612
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to agreement dates being logged, this is the date of their last purchase. If your site was displaying the agreement checkbox at that time, this is our best estimate as to when they last agreed to your terms.', 'easy-digital-downloads' ); ?>"></span>
613
  <?php
619
  <span class="customer-privacy-policy-date info-item">
620
  <?php _e( 'Last Agreed to Privacy Policy', 'easy-digital-downloads' ); ?>:
621
  <?php if ( ! empty( $privacy_timestamp ) ) : ?>
622
+ <?php echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $privacy_timestamp ) ); ?>
623
  <?php if ( ! empty( $privacy_timestamps ) ) : ?>
624
+ <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Previous Agreement Dates', 'easy-digital-downloads' ); ?></strong><br /><?php foreach ( $privacy_timestamps as $timestamp ) { echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $timestamp ) ); } ?>"></span>
625
  <?php endif; ?>
626
  <?php else: ?>
627
  <?php
628
  if ( empty( $last_payment_date ) ) {
629
  _e( 'No date found.', 'easy-digital-downloads' );
630
  } else {
631
+ echo esc_html( date_i18n( get_option( 'date_format' ) . ' H:i:s', $last_payment_date ) );
632
  ?>
633
  <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<strong><?php _e( 'Estimated Privacy Policy Date', 'easy-digital-downloads' ); ?></strong><br /><?php _e( 'This customer made a purchase prior to privacy policy dates being logged, this is the date of their last purchase. If your site was displaying the privacy policy checkbox at that time, this is our best estimate as to when they last agreed to your privacy policy.', 'easy-digital-downloads' ); ?>"></span>
634
  <?php
641
 
642
  <?php if ( 1 == $paged ) : ?>
643
  <div style="display: block; margin-bottom: 35px;">
644
+ <form id="edd-add-customer-note" method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=notes&id=' . absint( $customer->id ) ) ); ?>">
645
  <textarea id="customer-note" name="customer_note" class="customer-note-input" rows="10"></textarea>
646
  <br />
647
+ <input type="hidden" id="customer-id" name="customer_id" value="<?php echo absint( $customer->id ); ?>" />
648
  <input type="hidden" name="edd_action" value="add-customer-note" />
649
  <?php wp_nonce_field( 'add-customer-note', 'add_customer_note_nonce', true, true ); ?>
650
  <input id="add-customer-note" class="right button-primary" type="submit" value="<?php esc_attr_e( 'Add Note', 'easy-digital-downloads' ); ?>" />
696
 
697
  <div class="info-wrapper customer-section">
698
 
699
+ <form id="delete-customer" method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=delete&id=' . absint( $customer->id ) ) ); ?>">
700
 
701
  <div class="edd-item-notes-header">
702
+ <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo esc_html( $customer->name ); ?></span>
703
  </div>
704
 
705
 
720
  </span>
721
 
722
  <span id="customer-edit-actions">
723
+ <input type="hidden" name="customer_id" value="<?php echo esc_attr( $customer->id ); ?>" />
724
  <?php wp_nonce_field( 'delete-customer', '_wpnonce', false, true ); ?>
725
  <input type="hidden" name="edd_action" value="delete-customer" />
726
  <input type="submit" disabled="disabled" id="edd-delete-customer" class="button-primary" value="<?php _e( 'Delete Customer', 'easy-digital-downloads' ); ?>" />
727
+ <a id="edd-delete-customer-cancel" href="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . urlencode( $customer->id ) ) ); ?>" class="delete"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
728
  </span>
729
 
730
  </div>
747
  <div class="info-wrapper customer-section">
748
 
749
  <div class="customer-notes-header">
750
+ <?php echo get_avatar( $customer->email, 30 ); ?> <span><?php echo esc_html( $customer->name ); ?></span>
751
  </div>
752
  <h3><?php _e( 'Tools', 'easy-digital-downloads' ); ?></h3>
753
 
759
  <?php wp_nonce_field( 'edd_ajax_export', 'edd_ajax_export' ); ?>
760
 
761
  <input type="hidden" name="edd-export-class" data-type="recount-single-customer-stats" value="EDD_Tools_Recount_Single_Customer_Stats" />
762
+ <input type="hidden" name="customer_id" value="<?php echo esc_attr( $customer->id ); ?>" />
763
  <input type="submit" id="recount-stats-submit" value="<?php _e( 'Recount Stats', 'easy-digital-downloads' ); ?>" class="button-secondary"/>
764
  <span class="spinner"></span>
765
 
787
  return;
788
  }
789
 
790
+ $url = wp_nonce_url(
791
+ add_query_arg(
792
+ array(
793
+ 'post_type' => 'download',
794
+ 'page' => 'edd-customers',
795
+ 'view' => 'overview',
796
+ 'edd_action' => 'verify_user_admin',
797
+ 'id' => absint( $customer->id ),
798
+ ),
799
+ admin_url( 'edit.php' )
800
+ ),
801
+ 'edd-verify-user'
802
+ );
803
 
804
  echo '<div class="update error"><p>';
805
+ esc_html_e( 'This customer\'s user account is pending verification.', 'easy-digital-downloads' );
806
  echo ' ';
807
+ echo '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Verify account.', 'easy-digital-downloads' ) . '</a>';
808
  echo "\n\n";
809
 
810
  echo '</p></div>';
includes/admin/dashboard-widgets.php CHANGED
@@ -172,28 +172,38 @@ function edd_load_dashboard_sales_widget( ) {
172
  <tr>
173
  <td colspan="2">
174
  <?php _e( 'Recent Purchases', 'easy-digital-downloads' ); ?>
175
- <a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history' ); ?>">&nbsp;&ndash;&nbsp;<?php _e( 'View All', 'easy-digital-downloads' ); ?></a>
176
  </td>
177
  </tr>
178
  </thead>
179
  <tbody>
180
  <?php
181
- foreach ( $payments as $payment ) { ?>
 
 
 
 
 
 
 
 
 
 
182
  <tr>
183
  <td class="edd_order_label">
184
- <a href="<?php echo add_query_arg( 'id', $payment->ID, admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details' ) ); ?>">
185
- <?php echo get_the_title( $payment->ID ) ?>
186
- &mdash; <?php echo $payment->email ?>
187
  </a>
188
  <?php if ( ! empty( $payment->user_id ) && ( $payment->user_id > 0 ) ) {
189
  $user = get_user_by( 'id', $payment->user_id );
190
  if ( $user ) {
191
- echo "(" . $user->data->user_login . ")";
192
  }
193
  } ?>
194
  </td>
195
  <td class="edd_order_price">
196
- <a href="<?php echo add_query_arg( 'id', $payment->ID, admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details' ) ); ?>">
197
  <span class="edd_price_label"><?php echo edd_currency_filter( edd_format_amount( $payment->total ), edd_get_payment_currency_code( $payment->ID ) ); ?></span>
198
  </a>
199
  </td>
172
  <tr>
173
  <td colspan="2">
174
  <?php _e( 'Recent Purchases', 'easy-digital-downloads' ); ?>
175
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ); ?>">&nbsp;&ndash;&nbsp;<?php esc_html_e( 'View All', 'easy-digital-downloads' ); ?></a>
176
  </td>
177
  </tr>
178
  </thead>
179
  <tbody>
180
  <?php
181
+ foreach ( $payments as $payment ) {
182
+ $payment_url = add_query_arg(
183
+ array(
184
+ 'post_type' => 'download',
185
+ 'page' => 'edd-payment-history',
186
+ 'view' => 'view-order-details',
187
+ 'id' => urlencode( $payment->ID ),
188
+ ),
189
+ admin_url( 'edit.php' )
190
+ );
191
+ ?>
192
  <tr>
193
  <td class="edd_order_label">
194
+ <a href="<?php echo esc_url( $payment_url ); ?>">
195
+ <?php echo esc_html( get_the_title( $payment->ID ) ); ?>
196
+ &mdash; <?php echo esc_html( $payment->email ); ?>
197
  </a>
198
  <?php if ( ! empty( $payment->user_id ) && ( $payment->user_id > 0 ) ) {
199
  $user = get_user_by( 'id', $payment->user_id );
200
  if ( $user ) {
201
+ echo "(" . esc_html( $user->data->user_login ) . ")";
202
  }
203
  } ?>
204
  </td>
205
  <td class="edd_order_price">
206
+ <a href="<?php echo esc_url( $payment_url ); ?>">
207
  <span class="edd_price_label"><?php echo edd_currency_filter( edd_format_amount( $payment->total ), edd_get_payment_currency_code( $payment->ID ) ); ?></span>
208
  </a>
209
  </td>
includes/admin/discounts/add-discount.php CHANGED
@@ -179,7 +179,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
179
  <p class="submit">
180
  <input type="hidden" name="edd-action" value="add_discount"/>
181
  <input type="hidden" name="edd-redirect" value="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-discounts' ) ); ?>"/>
182
- <input type="hidden" name="edd-discount-nonce" value="<?php echo wp_create_nonce( 'edd_discount_nonce' ); ?>"/>
183
  <input type="submit" value="<?php _e( 'Add Discount Code', 'easy-digital-downloads' ); ?>" class="button-primary"/>
184
  </p>
185
  </form>
179
  <p class="submit">
180
  <input type="hidden" name="edd-action" value="add_discount"/>
181
  <input type="hidden" name="edd-redirect" value="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-discounts' ) ); ?>"/>
182
+ <input type="hidden" name="edd-discount-nonce" value="<?php echo esc_attr( wp_create_nonce( 'edd_discount_nonce' ) ); ?>"/>
183
  <input type="submit" value="<?php _e( 'Add Discount Code', 'easy-digital-downloads' ); ?>" class="button-primary"/>
184
  </p>
185
  </form>
includes/admin/discounts/class-discount-codes-table.php CHANGED
@@ -122,9 +122,9 @@ class EDD_Discount_Codes_Table extends WP_List_Table {
122
  $inactive_count = '&nbsp;<span class="count">(' . $this->inactive_count . ')</span>';
123
 
124
  $views = array(
125
- 'all' => sprintf( '<a href="%s"%s>%s</a>', remove_query_arg( 'status', $base ), $current === 'all' || $current == '' ? ' class="current"' : '', __('All', 'easy-digital-downloads') . $total_count ),
126
- 'active' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( 'status', 'active', $base ), $current === 'active' ? ' class="current"' : '', __('Active', 'easy-digital-downloads') . $active_count ),
127
- 'inactive' => sprintf( '<a href="%s"%s>%s</a>', add_query_arg( 'status', 'inactive', $base ), $current === 'inactive' ? ' class="current"' : '', __('Inactive', 'easy-digital-downloads') . $inactive_count ),
128
  );
129
 
130
  return $views;
@@ -204,15 +204,15 @@ class EDD_Discount_Codes_Table extends WP_List_Table {
204
  $discount = get_post( $item['ID'] );
205
  $row_actions = array();
206
 
207
- $row_actions['edit'] = '<a href="' . add_query_arg( array( 'edd-action' => 'edit_discount', 'discount' => $discount->ID ) ) . '">' . __( 'Edit', 'easy-digital-downloads' ) . '</a>';
208
 
209
  if( strtolower( $item['status'] ) == 'active' ) {
210
- $row_actions['deactivate'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'deactivate_discount', 'discount' => $discount->ID ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Deactivate', 'easy-digital-downloads' ) . '</a>';
211
  } elseif( strtolower( $item['status'] ) == 'inactive' ) {
212
- $row_actions['activate'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'activate_discount', 'discount' => $discount->ID ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Activate', 'easy-digital-downloads' ) . '</a>';
213
  }
214
 
215
- $row_actions['delete'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_discount', 'discount' => $discount->ID ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
216
 
217
  $row_actions = apply_filters( 'edd_discount_row_actions', $row_actions, $discount );
218
 
@@ -230,7 +230,7 @@ class EDD_Discount_Codes_Table extends WP_List_Table {
230
  return sprintf(
231
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
232
  /*$1%s*/ 'discount',
233
- /*$2%s*/ $item['ID']
234
  );
235
  }
236
 
122
  $inactive_count = '&nbsp;<span class="count">(' . $this->inactive_count . ')</span>';
123
 
124
  $views = array(
125
+ 'all' => sprintf( '<a href="%s"%s>%s</a>', esc_url( remove_query_arg( 'status', $base ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __('All', 'easy-digital-downloads') . $total_count ),
126
+ 'active' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( 'status', 'active', $base ) ), $current === 'active' ? ' class="current"' : '', __('Active', 'easy-digital-downloads') . $active_count ),
127
+ 'inactive' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( 'status', 'inactive', $base ) ), $current === 'inactive' ? ' class="current"' : '', __('Inactive', 'easy-digital-downloads') . $inactive_count ),
128
  );
129
 
130
  return $views;
204
  $discount = get_post( $item['ID'] );
205
  $row_actions = array();
206
 
207
+ $row_actions['edit'] = '<a href="' . esc_url( add_query_arg( array( 'edd-action' => 'edit_discount', 'discount' => urlencode( $discount->ID ) ) ) ) . '">' . __( 'Edit', 'easy-digital-downloads' ) . '</a>';
208
 
209
  if( strtolower( $item['status'] ) == 'active' ) {
210
+ $row_actions['deactivate'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'deactivate_discount', 'discount' => urlencode( $discount->ID ) ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Deactivate', 'easy-digital-downloads' ) . '</a>';
211
  } elseif( strtolower( $item['status'] ) == 'inactive' ) {
212
+ $row_actions['activate'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'activate_discount', 'discount' => urlencode( $discount->ID ) ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Activate', 'easy-digital-downloads' ) . '</a>';
213
  }
214
 
215
+ $row_actions['delete'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_discount', 'discount' => urlencode( $discount->ID ) ) ), 'edd_discount_nonce' ) ) . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
216
 
217
  $row_actions = apply_filters( 'edd_discount_row_actions', $row_actions, $discount );
218
 
230
  return sprintf(
231
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
232
  /*$1%s*/ 'discount',
233
+ /*$2%s*/ absint( $item['ID'] )
234
  );
235
  }
236
 
includes/admin/discounts/discount-actions.php CHANGED
@@ -34,19 +34,19 @@ function edd_add_discount( $data ) {
34
  $posted = array();
35
 
36
  if ( empty( $data['name'] ) || empty( $data['code'] ) || empty( $data['type'] ) || empty( $data['amount'] ) ) {
37
- wp_redirect( add_query_arg( 'edd-message', 'discount_validation_failed' ) );
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
  }
47
 
48
  if ( ! is_numeric( $data['amount'] ) ) {
49
- wp_redirect( add_query_arg( 'edd-message', 'discount_invalid_amount' ) );
50
  edd_die();
51
  }
52
 
@@ -83,17 +83,20 @@ function edd_add_discount( $data ) {
83
 
84
  if ( edd_store_discount( $posted ) ) {
85
 
86
- wp_redirect( add_query_arg( 'edd_discount_added', '1', $data['edd-redirect'] ) ); edd_die();
 
87
 
88
  } else {
89
 
90
- wp_redirect( add_query_arg( 'edd-message', 'discount_add_failed', $data['edd-redirect'] ) ); edd_die();
 
91
 
92
  }
93
 
94
  } else {
95
 
96
- wp_redirect( add_query_arg( 'edd-message', 'discount_exists', $data['edd-redirect'] ) ); edd_die();
 
97
 
98
  }
99
 
@@ -118,7 +121,7 @@ function edd_edit_discount( $data ) {
118
  }
119
 
120
  if ( empty( $data['amount'] ) || ! is_numeric( $data['amount'] ) ) {
121
- wp_redirect( add_query_arg( 'edd-message', 'discount_invalid_amount' ) );
122
  edd_die();
123
  }
124
 
@@ -156,11 +159,13 @@ function edd_edit_discount( $data ) {
156
 
157
  if ( edd_store_discount( $discount, $data['discount-id'] ) ) {
158
 
159
- wp_redirect( add_query_arg( 'edd_discount_updated', '1', $data['edd-redirect'] ) ); edd_die();
 
160
 
161
  } else {
162
 
163
- wp_redirect( add_query_arg( 'edd-message', 'discount_update_failed', $data['edd-redirect'] ) ); edd_die();
 
164
 
165
  }
166
 
34
  $posted = array();
35
 
36
  if ( empty( $data['name'] ) || empty( $data['code'] ) || empty( $data['type'] ) || empty( $data['amount'] ) ) {
37
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_validation_failed' ) ) );
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_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_invalid_code' ) ) );
45
  edd_die();
46
  }
47
 
48
  if ( ! is_numeric( $data['amount'] ) ) {
49
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_invalid_amount' ) ) );
50
  edd_die();
51
  }
52
 
83
 
84
  if ( edd_store_discount( $posted ) ) {
85
 
86
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd_discount_added', '1', $data['edd-redirect'] ) ) );
87
+ edd_die();
88
 
89
  } else {
90
 
91
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_add_failed', $data['edd-redirect'] ) ) );
92
+ edd_die();
93
 
94
  }
95
 
96
  } else {
97
 
98
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_exists', $data['edd-redirect'] ) ) );
99
+ edd_die();
100
 
101
  }
102
 
121
  }
122
 
123
  if ( empty( $data['amount'] ) || ! is_numeric( $data['amount'] ) ) {
124
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_invalid_amount' ) ) );
125
  edd_die();
126
  }
127
 
159
 
160
  if ( edd_store_discount( $discount, $data['discount-id'] ) ) {
161
 
162
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd_discount_updated', '1', $data['edd-redirect'] ) ) );
163
+ edd_die();
164
 
165
  } else {
166
 
167
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'discount_update_failed', $data['edd-redirect'] ) ) );
168
+ edd_die();
169
 
170
  }
171
 
includes/admin/discounts/discount-codes.php CHANGED
@@ -32,7 +32,7 @@ function edd_discounts_page() {
32
  <div class="wrap">
33
  <h1><?php _e( 'Discount Codes', 'easy-digital-downloads' ); ?><a href="<?php echo esc_url( add_query_arg( array( 'edd-action' => 'add_discount' ) ) ); ?>" class="add-new-h2"><?php _e( 'Add New', 'easy-digital-downloads' ); ?></a></h1>
34
  <?php do_action( 'edd_discounts_page_top' ); ?>
35
- <form id="edd-discounts-filter" method="get" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-discounts' ); ?>">
36
  <?php $discount_codes_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-discounts' ); ?>
37
 
38
  <input type="hidden" name="post_type" value="download" />
32
  <div class="wrap">
33
  <h1><?php _e( 'Discount Codes', 'easy-digital-downloads' ); ?><a href="<?php echo esc_url( add_query_arg( array( 'edd-action' => 'add_discount' ) ) ); ?>" class="add-new-h2"><?php _e( 'Add New', 'easy-digital-downloads' ); ?></a></h1>
34
  <?php do_action( 'edd_discounts_page_top' ); ?>
35
+ <form id="edd-discounts-filter" method="get" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-discounts' ) ); ?>">
36
  <?php $discount_codes_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-discounts' ); ?>
37
 
38
  <input type="hidden" name="post_type" value="download" />
includes/admin/discounts/edit-discount.php CHANGED
@@ -207,8 +207,8 @@ $condition_display = empty( $product_reqs ) ? ' style="display:none;"' : '';
207
  <p class="submit">
208
  <input type="hidden" name="edd-action" value="edit_discount"/>
209
  <input type="hidden" name="discount-id" value="<?php echo absint( $_GET['discount'] ); ?>"/>
210
- <input type="hidden" name="edd-redirect" value="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-discounts&edd-action=edit_discount&discount=' . $discount_id ) ); ?>"/>
211
- <input type="hidden" name="edd-discount-nonce" value="<?php echo wp_create_nonce( 'edd_discount_nonce' ); ?>"/>
212
  <input type="submit" value="<?php _e( 'Update Discount Code', 'easy-digital-downloads' ); ?>" class="button-primary"/>
213
  </p>
214
  </form>
207
  <p class="submit">
208
  <input type="hidden" name="edd-action" value="edit_discount"/>
209
  <input type="hidden" name="discount-id" value="<?php echo absint( $_GET['discount'] ); ?>"/>
210
+ <input type="hidden" name="edd-redirect" value="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-discounts&edd-action=edit_discount&discount=' . absint( $discount_id ) ) ); ?>"/>
211
+ <input type="hidden" name="edd-discount-nonce" value="<?php echo esc_attr( wp_create_nonce( 'edd_discount_nonce' ) ); ?>"/>
212
  <input type="submit" value="<?php _e( 'Update Discount Code', 'easy-digital-downloads' ); ?>" class="button-primary"/>
213
  </p>
214
  </form>
includes/admin/downloads/dashboard-columns.php CHANGED
@@ -63,12 +63,12 @@ function edd_render_download_columns( $column_name, $post_id ) {
63
  echo edd_price_range( $post_id );
64
  } else {
65
  echo edd_price( $post_id, false );
66
- echo '<input type="hidden" class="downloadprice-' . $post_id . '" value="' . edd_get_download_price( $post_id ) . '" />';
67
  }
68
  break;
69
  case 'sales':
70
  if ( current_user_can( 'view_product_stats', $post_id ) ) {
71
- echo '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs&view=sales&download=' . $post_id ) ) . '">';
72
  echo edd_get_download_sales_stats( $post_id );
73
  echo '</a>';
74
  } else {
@@ -77,7 +77,7 @@ function edd_render_download_columns( $column_name, $post_id ) {
77
  break;
78
  case 'earnings':
79
  if ( current_user_can( 'view_product_stats', $post_id ) ) {
80
- echo '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . $post_id ) ) . '">';
81
  echo edd_currency_filter( edd_format_amount( edd_get_download_earnings_stats( $post_id ) ) );
82
  echo '</a>';
83
  } else {
63
  echo edd_price_range( $post_id );
64
  } else {
65
  echo edd_price( $post_id, false );
66
+ echo '<input type="hidden" class="downloadprice-' . absint( $post_id ) . '" value="' . esc_attr( edd_get_download_price( $post_id ) ) . '" />';
67
  }
68
  break;
69
  case 'sales':
70
  if ( current_user_can( 'view_product_stats', $post_id ) ) {
71
+ echo '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs&view=sales&download=' . absint( $post_id ) ) ) . '">';
72
  echo edd_get_download_sales_stats( $post_id );
73
  echo '</a>';
74
  } else {
77
  break;
78
  case 'earnings':
79
  if ( current_user_can( 'view_product_stats', $post_id ) ) {
80
+ echo '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . absint( $post_id ) ) ) . '">';
81
  echo edd_currency_filter( edd_format_amount( edd_get_download_earnings_stats( $post_id ) ) );
82
  echo '</a>';
83
  } else {
includes/admin/downloads/metabox.php CHANGED
@@ -430,8 +430,8 @@ function edd_render_price_row( $key, $args, $post_id, $index ) {
430
  ?>
431
  <div class="edd-repeatable-row-header edd-draghandle-anchor">
432
  <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order price options', 'easy-digital-downloads' ); ?>">
433
- <?php printf( __( 'Price ID: %s', 'easy-digital-downloads' ), '<span class="edd_price_id">' . $key . '</span>' ); ?>
434
- <input type="hidden" name="edd_variable_prices[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
435
  </span>
436
  <?php
437
  $actions = array();
@@ -439,7 +439,7 @@ function edd_render_price_row( $key, $args, $post_id, $index ) {
439
  $actions['show_advanced'] = '<a href="#" class="toggle-custom-price-option-section">' . __( 'Show advanced settings', 'easy-digital-downloads' ) . '</a>';
440
  }
441
 
442
- $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>';
443
  ?>
444
  <span class="edd-repeatable-row-actions">
445
  <?php echo implode( '&nbsp;&#124;&nbsp;', $actions ); ?>
@@ -452,7 +452,7 @@ function edd_render_price_row( $key, $args, $post_id, $index ) {
452
  <span class="edd-repeatable-row-setting-label"><?php _e( 'Option Name', 'easy-digital-downloads' ); ?></span>
453
  <?php echo EDD()->html->text( array(
454
  'name' => 'edd_variable_prices[' . $key . '][name]',
455
- 'value' => esc_attr( $args['name'] ),
456
  'placeholder' => __( 'Option Name', 'easy-digital-downloads' ),
457
  'class' => 'edd_variable_prices_name large-text'
458
  ) ); ?>
@@ -483,7 +483,7 @@ function edd_render_price_row( $key, $args, $post_id, $index ) {
483
  <div class="edd_repeatable_default edd_repeatable_default_wrapper">
484
  <span class="edd-repeatable-row-setting-label"><?php _e( 'Default', 'easy-digital-downloads' ); ?></span>
485
  <label class="edd-default-price">
486
- <input type="radio" <?php checked( $default_price_id, $key, true ); ?> class="edd_repeatable_default_input" name="_edd_default_price_id" value="<?php echo $key; ?>" />
487
  <span class="screen-reader-text"><?php printf( __( 'Set ID %s as default price', 'easy-digital-downloads' ), $key ); ?></span>
488
  </label>
489
  </div>
@@ -603,7 +603,7 @@ function edd_render_products_field( $post_id ) {
603
  <div class="edd-bundled-product-row<?php echo $variable_class; ?>">
604
  <div class="edd-bundled-product-item-reorder">
605
  <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>
606
- <input type="hidden" name="edd_bundled_products[<?php echo $index; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
607
  </div>
608
  <div class="edd-bundled-product-item">
609
  <span class="edd-repeatable-row-setting-label"><?php printf( __( 'Select %s:', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></span>
@@ -703,7 +703,7 @@ function edd_render_products_field( $post_id ) {
703
  ?>
704
  </div>
705
  <span class="edd-bundled-product-actions">
706
- <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>
707
  </span>
708
  <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
709
  </div>
@@ -825,7 +825,7 @@ function edd_render_file_row( $key, $args, $post_id, $index ) {
825
  <div class="edd-repeatable-row-header edd-draghandle-anchor">
826
  <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order files', 'easy-digital-downloads' ); ?>">
827
  <?php printf( __( '%1$s file ID: %2$s', 'easy-digital-downloads' ), edd_get_label_singular(), '<span class="edd_file_id">' . $key . '</span>' ); ?>
828
- <input type="hidden" name="edd_download_files[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo $index; ?>"/>
829
  </span>
830
  <span class="edd-repeatable-row-actions">
831
  <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>
@@ -1194,18 +1194,18 @@ function edd_render_stats_meta_box() {
1194
 
1195
  <p class="product-sales-stats">
1196
  <span class="label"><?php _e( 'Sales:', 'easy-digital-downloads' ); ?></span>
1197
- <span><a href="<?php echo admin_url( '/edit.php?page=edd-reports&view=sales&post_type=download&tab=logs&download=' . $post->ID ); ?>"><?php echo $sales; ?></a></span>
1198
  </p>
1199
 
1200
  <p class="product-earnings-stats">
1201
  <span class="label"><?php _e( 'Earnings:', 'easy-digital-downloads' ); ?></span>
1202
- <span><a href="<?php echo admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . $post->ID ); ?>"><?php echo edd_currency_filter( edd_format_amount( $earnings ) ); ?></a></span>
1203
  </p>
1204
 
1205
  <hr />
1206
 
1207
  <p class="file-download-log">
1208
- <span><a href="<?php echo admin_url( 'edit.php?page=edd-reports&view=file_downloads&post_type=download&tab=logs&download=' . $post->ID ); ?>"><?php _e( 'View File Download Log', 'easy-digital-downloads' ); ?></a></span><br/>
1209
  </p>
1210
  <?php
1211
  do_action('edd_stats_meta_box');
@@ -1232,7 +1232,7 @@ function edd_render_promo_metabox() {
1232
  <p>
1233
  <?php
1234
  // Translators: The %s represents the link to the pricing page on the Easy Digital Downloads website.
1235
- echo wp_kses_post( sprintf( __( 'Save 25&#37; on all Easy Digital Downloads purchases <strong>this week</strong>, including renewals and upgrades! Sale ends 23:59 PM December 6th CST. <a target="_blank" href="%s">Don\'t miss out</a>!', 'easy-digital-downloads' ), $url ) );
1236
  ?>
1237
  </p>
1238
  <?php
430
  ?>
431
  <div class="edd-repeatable-row-header edd-draghandle-anchor">
432
  <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order price options', 'easy-digital-downloads' ); ?>">
433
+ <?php printf( __( 'Price ID: %s', 'easy-digital-downloads' ), '<span class="edd_price_id">' . esc_html( $key ) . '</span>' ); ?>
434
+ <input type="hidden" name="edd_variable_prices[<?php echo esc_attr( $key ); ?>][index]" class="edd_repeatable_index" value="<?php echo esc_attr( $index ); ?>"/>
435
  </span>
436
  <?php
437
  $actions = array();
439
  $actions['show_advanced'] = '<a href="#" class="toggle-custom-price-option-section">' . __( 'Show advanced settings', 'easy-digital-downloads' ) . '</a>';
440
  }
441
 
442
+ $actions['remove'] = '<a class="edd-remove-row edd-delete" data-type="price">' . sprintf( __( 'Remove', 'easy-digital-downloads' ), esc_html( $key ) ) . '<span class="screen-reader-text">' . sprintf( __( 'Remove price option %s', 'easy-digital-downloads' ), esc_html( $key ) ) . '</span></a>';
443
  ?>
444
  <span class="edd-repeatable-row-actions">
445
  <?php echo implode( '&nbsp;&#124;&nbsp;', $actions ); ?>
452
  <span class="edd-repeatable-row-setting-label"><?php _e( 'Option Name', 'easy-digital-downloads' ); ?></span>
453
  <?php echo EDD()->html->text( array(
454
  'name' => 'edd_variable_prices[' . $key . '][name]',
455
+ 'value' => $args['name'],
456
  'placeholder' => __( 'Option Name', 'easy-digital-downloads' ),
457
  'class' => 'edd_variable_prices_name large-text'
458
  ) ); ?>
483
  <div class="edd_repeatable_default edd_repeatable_default_wrapper">
484
  <span class="edd-repeatable-row-setting-label"><?php _e( 'Default', 'easy-digital-downloads' ); ?></span>
485
  <label class="edd-default-price">
486
+ <input type="radio" <?php checked( $default_price_id, $key, true ); ?> class="edd_repeatable_default_input" name="_edd_default_price_id" value="<?php echo esc_attr( $key ); ?>" />
487
  <span class="screen-reader-text"><?php printf( __( 'Set ID %s as default price', 'easy-digital-downloads' ), $key ); ?></span>
488
  </label>
489
  </div>
603
  <div class="edd-bundled-product-row<?php echo $variable_class; ?>">
604
  <div class="edd-bundled-product-item-reorder">
605
  <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>
606
+ <input type="hidden" name="edd_bundled_products[<?php echo $index; ?>][index]" class="edd_repeatable_index" value="<?php echo esc_attr( $index ); ?>"/>
607
  </div>
608
  <div class="edd-bundled-product-item">
609
  <span class="edd-repeatable-row-setting-label"><?php printf( __( 'Select %s:', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></span>
703
  ?>
704
  </div>
705
  <span class="edd-bundled-product-actions">
706
+ <a class="edd-remove-row edd-delete" data-type="file" ><?php printf( __( 'Remove', 'easy-digital-downloads' ) ); ?><span class="screen-reader-text"><?php _e( 'Remove bundle option 1', 'easy-digital-downloads' ); ?></span></a>
707
  </span>
708
  <?php do_action( 'edd_download_products_table_row', $post_id ); ?>
709
  </div>
825
  <div class="edd-repeatable-row-header edd-draghandle-anchor">
826
  <span class="edd-repeatable-row-title" title="<?php _e( 'Click and drag to re-order files', 'easy-digital-downloads' ); ?>">
827
  <?php printf( __( '%1$s file ID: %2$s', 'easy-digital-downloads' ), edd_get_label_singular(), '<span class="edd_file_id">' . $key . '</span>' ); ?>
828
+ <input type="hidden" name="edd_download_files[<?php echo $key; ?>][index]" class="edd_repeatable_index" value="<?php echo esc_attr( $index ); ?>"/>
829
  </span>
830
  <span class="edd-repeatable-row-actions">
831
  <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>
1194
 
1195
  <p class="product-sales-stats">
1196
  <span class="label"><?php _e( 'Sales:', 'easy-digital-downloads' ); ?></span>
1197
+ <span><a href="<?php echo esc_url( admin_url( '/edit.php?page=edd-reports&view=sales&post_type=download&tab=logs&download=' . urlencode( $post->ID ) ) ); ?>"><?php echo $sales; ?></a></span>
1198
  </p>
1199
 
1200
  <p class="product-earnings-stats">
1201
  <span class="label"><?php _e( 'Earnings:', 'easy-digital-downloads' ); ?></span>
1202
+ <span><a href="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . urlencode( $post->ID ) ) ); ?>"><?php echo edd_currency_filter( edd_format_amount( $earnings ) ); ?></a></span>
1203
  </p>
1204
 
1205
  <hr />
1206
 
1207
  <p class="file-download-log">
1208
+ <span><a href="<?php echo esc_url( admin_url( 'edit.php?page=edd-reports&view=file_downloads&post_type=download&tab=logs&download=' . urlencode( $post->ID ) ) ); ?>"><?php _e( 'View File Download Log', 'easy-digital-downloads' ); ?></a></span><br/>
1209
  </p>
1210
  <?php
1211
  do_action('edd_stats_meta_box');
1232
  <p>
1233
  <?php
1234
  // Translators: The %s represents the link to the pricing page on the Easy Digital Downloads website.
1235
+ echo wp_kses_post( sprintf( __( 'Save 25&#37; on all Easy Digital Downloads purchases <strong>this week</strong>, including renewals and upgrades! Sale ends 23:59 PM December 6th CST. <a target="_blank" href="%s">Don\'t miss out</a>!', 'easy-digital-downloads' ), esc_url( $url ) ) );
1236
  ?>
1237
  </p>
1238
  <?php
includes/admin/extensions/class-extensions-api.php CHANGED
@@ -110,7 +110,7 @@ class ExtensionsAPI {
110
  $this->get_products_url()
111
  );
112
  $request = wp_remote_get(
113
- $url,
114
  array(
115
  'timeout' => 15,
116
  'sslverify' => true,
110
  $this->get_products_url()
111
  );
112
  $request = wp_remote_get(
113
+ esc_url_raw( $url ),
114
  array(
115
  'timeout' => 15,
116
  'sslverify' => true,
includes/admin/import/import-functions.php CHANGED
@@ -164,7 +164,7 @@ function edd_do_ajax_import() {
164
  'step' => 'done',
165
  'message' => sprintf(
166
  __( 'Import complete! <a href="%s">View imported %s</a>.', 'easy-digital-downloads' ),
167
- $import->get_list_table_url(),
168
  $import->get_import_type_label()
169
  )
170
  ) );
164
  'step' => 'done',
165
  'message' => sprintf(
166
  __( 'Import complete! <a href="%s">View imported %s</a>.', 'easy-digital-downloads' ),
167
+ esc_url( $import->get_list_table_url() ),
168
  $import->get_import_type_label()
169
  )
170
  ) );
includes/admin/payments/actions.php CHANGED
@@ -297,7 +297,17 @@ function edd_update_payment_details( $data ) {
297
 
298
  do_action( 'edd_updated_edited_purchase', $payment_id );
299
 
300
- wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&edd-message=payment-updated&id=' . $payment_id ) );
 
 
 
 
 
 
 
 
 
 
301
  exit;
302
  }
303
  add_action( 'edd_update_payment_details', 'edd_update_payment_details' );
@@ -319,7 +329,7 @@ function edd_trigger_purchase_delete( $data ) {
319
  }
320
 
321
  edd_delete_purchase( $payment_id );
322
- wp_redirect( admin_url( '/edit.php?post_type=download&page=edd-payment-history&edd-message=payment_deleted' ) );
323
  edd_die();
324
  }
325
  }
@@ -371,7 +381,7 @@ function edd_trigger_payment_note_deletion( $data ) {
371
 
372
  edd_delete_payment_note( $data['note_id'], $data['payment_id'] );
373
 
374
- wp_redirect( $edit_order_url );
375
  }
376
  add_action( 'edd_delete_payment_note', 'edd_trigger_payment_note_deletion' );
377
 
297
 
298
  do_action( 'edd_updated_edited_purchase', $payment_id );
299
 
300
+ $url = add_query_arg(
301
+ array(
302
+ 'post_type' => 'download',
303
+ 'page' => 'edd-payment-history',
304
+ 'view' => 'view-order-details',
305
+ 'edd-message' => 'payment-updated',
306
+ 'id' => urlencode( $payment_id ),
307
+ ),
308
+ admin_url( 'edit.php' )
309
+ );
310
+ wp_safe_redirect( esc_url_raw( $url ) );
311
  exit;
312
  }
313
  add_action( 'edd_update_payment_details', 'edd_update_payment_details' );
329
  }
330
 
331
  edd_delete_purchase( $payment_id );
332
+ wp_safe_redirect( esc_url_raw( admin_url( '/edit.php?post_type=download&page=edd-payment-history&edd-message=payment_deleted' ) ) );
333
  edd_die();
334
  }
335
  }
381
 
382
  edd_delete_payment_note( $data['note_id'], $data['payment_id'] );
383
 
384
+ wp_safe_redirect( esc_url_raw( $edit_order_url ) );
385
  }
386
  add_action( 'edd_delete_payment_note', 'edd_trigger_payment_note_deletion' );
387
 
includes/admin/payments/class-payments-table.php CHANGED
@@ -186,7 +186,7 @@ class EDD_Payment_History_Table extends WP_List_Table {
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' ); ?>
192
  <?php $this->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-payments' ); ?>
@@ -243,15 +243,16 @@ class EDD_Payment_History_Table extends WP_List_Table {
243
  $abandoned_count = '&nbsp;<span class="count">(' . $this->abandoned_count . ')</span>';
244
  $revoked_count = '&nbsp;<span class="count">(' . $this->revoked_count . ')</span>';
245
 
 
246
  $views = array(
247
- '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 ),
248
- '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 ),
249
- '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 ),
250
- '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 ),
251
- '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 ),
252
- '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 ),
253
- '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 ),
254
- '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 ),
255
  );
256
 
257
  return apply_filters( 'edd_payments_table_views', $views );
@@ -331,7 +332,16 @@ class EDD_Payment_History_Table extends WP_List_Table {
331
  $value = edd_get_payment_status( $payment, true );
332
  break;
333
  case 'details' :
334
- $value = '<a href="' . add_query_arg( 'id', $payment->ID, admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details' ) ) . '">' . __( 'View Order Details', 'easy-digital-downloads' ) . '</a>';
 
 
 
 
 
 
 
 
 
335
  break;
336
  default:
337
  $value = isset( $payment->$column_name ) ? $payment->$column_name : '';
@@ -355,16 +365,29 @@ class EDD_Payment_History_Table extends WP_List_Table {
355
  $email = edd_get_payment_user_email( $payment->ID );
356
 
357
  // Add search term string back to base URL
358
- $search_terms = ( isset( $_GET['s'] ) ? trim( $_GET['s'] ) : '' );
359
  if ( ! empty( $search_terms ) ) {
360
- $this->base_url = add_query_arg( 's', $search_terms, $this->base_url );
 
 
 
 
 
361
  }
362
 
 
 
 
 
 
 
 
 
363
  if ( edd_is_payment_complete( $payment->ID ) && ! empty( $email ) ) {
364
- $row_actions['email_links'] = '<a href="' . add_query_arg( array( 'edd-action' => 'email_links', 'purchase_id' => $payment->ID ), $this->base_url ) . '">' . __( 'Resend Purchase Receipt', 'easy-digital-downloads' ) . '</a>';
365
  }
366
 
367
- $row_actions['delete'] = '<a href="' . wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_payment', 'purchase_id' => $payment->ID ), $this->base_url ), 'edd_payment_nonce') . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
368
 
369
  $row_actions = apply_filters( 'edd_payment_row_actions', $row_actions, $payment );
370
 
@@ -388,7 +411,7 @@ class EDD_Payment_History_Table extends WP_List_Table {
388
  return sprintf(
389
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
390
  'payment',
391
- $payment->ID
392
  );
393
  }
394
 
@@ -415,11 +438,27 @@ class EDD_Payment_History_Table extends WP_List_Table {
415
  $customer_id = edd_get_payment_customer_id( $payment->ID );
416
 
417
  if( ! empty( $customer_id ) ) {
418
- $customer = new EDD_Customer( $customer_id );
419
- $value = '<a href="' . esc_url( admin_url( "edit.php?post_type=download&page=edd-customers&view=overview&id=$customer_id" ) ) . '">' . $customer->name . '</a>';
 
 
 
 
 
 
 
 
 
420
  } else {
421
- $email = edd_get_payment_user_email( $payment->ID );
422
- $value = '<a href="' . esc_url( admin_url( "edit.php?post_type=download&page=edd-payment-history&s=$email" ) ) . '">' . __( '(customer missing)', 'easy-digital-downloads' ) . '</a>';
 
 
 
 
 
 
 
423
  }
424
  return apply_filters( 'edd_payments_table_column', $value, $payment->ID, 'user' );
425
  }
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 esc_url( 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' ); ?>
192
  <?php $this->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-payments' ); ?>
243
  $abandoned_count = '&nbsp;<span class="count">(' . $this->abandoned_count . ')</span>';
244
  $revoked_count = '&nbsp;<span class="count">(' . $this->revoked_count . ')</span>';
245
 
246
+ $url = remove_query_arg( 'paged' );
247
  $views = array(
248
+ 'all' => sprintf( '<a href="%s"%s>%s</a>', esc_url( remove_query_arg( array( 'status', 'paged' ) ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __('All','easy-digital-downloads' ) . $total_count ),
249
+ 'publish' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'publish' ), $url ) ), $current === 'publish' ? ' class="current"' : '', __('Completed','easy-digital-downloads' ) . $complete_count ),
250
+ 'pending' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'pending' ), $url ) ), $current === 'pending' ? ' class="current"' : '', __('Pending','easy-digital-downloads' ) . $pending_count ),
251
+ 'processing' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'processing' ), $url ) ), $current === 'processing' ? ' class="current"' : '', __('Processing','easy-digital-downloads' ) . $processing_count ),
252
+ 'refunded' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'refunded' ), $url ) ), $current === 'refunded' ? ' class="current"' : '', __('Refunded','easy-digital-downloads' ) . $refunded_count ),
253
+ 'revoked' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'revoked' ), $url ) ), $current === 'revoked' ? ' class="current"' : '', __('Revoked','easy-digital-downloads' ) . $revoked_count ),
254
+ 'failed' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'failed' ), $url ) ), $current === 'failed' ? ' class="current"' : '', __('Failed','easy-digital-downloads' ) . $failed_count ),
255
+ 'abandoned' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'abandoned' ), $url ) ), $current === 'abandoned' ? ' class="current"' : '', __('Abandoned','easy-digital-downloads' ) . $abandoned_count ),
256
  );
257
 
258
  return apply_filters( 'edd_payments_table_views', $views );
332
  $value = edd_get_payment_status( $payment, true );
333
  break;
334
  case 'details' :
335
+ $url = add_query_arg(
336
+ array(
337
+ 'post_type' => 'download',
338
+ 'page' => 'edd-payment-history',
339
+ 'view' => 'view-order-details',
340
+ 'id' => urlencode( $payment->ID ),
341
+ ),
342
+ admin_url( 'edit.php' )
343
+ );
344
+ $value = '<a href="' . esc_url( $url ) . '">' . __( 'View Order Details', 'easy-digital-downloads' ) . '</a>';
345
  break;
346
  default:
347
  $value = isset( $payment->$column_name ) ? $payment->$column_name : '';
365
  $email = edd_get_payment_user_email( $payment->ID );
366
 
367
  // Add search term string back to base URL
368
+ $search_terms = isset( $_GET['s'] ) ? wp_unslash( trim( $_GET['s'] ) ) : '';
369
  if ( ! empty( $search_terms ) ) {
370
+ $this->base_url = add_query_arg(
371
+ array(
372
+ 's' => urlencode( $search_terms ),
373
+ ),
374
+ $this->base_url
375
+ );
376
  }
377
 
378
+ // Add the payment ID to the URL.
379
+ $base_url = add_query_arg(
380
+ array(
381
+ 'purchase_id' => urlencode( $payment->ID ),
382
+ ),
383
+ $this->base_url
384
+ );
385
+
386
  if ( edd_is_payment_complete( $payment->ID ) && ! empty( $email ) ) {
387
+ $row_actions['email_links'] = '<a href="' . esc_url( add_query_arg( array( 'edd-action' => 'email_links' ), $base_url ) ) . '">' . __( 'Resend Purchase Receipt', 'easy-digital-downloads' ) . '</a>';
388
  }
389
 
390
+ $row_actions['delete'] = '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_payment' ), $base_url ) ), 'edd_payment_nonce') . '">' . __( 'Delete', 'easy-digital-downloads' ) . '</a>';
391
 
392
  $row_actions = apply_filters( 'edd_payment_row_actions', $row_actions, $payment );
393
 
411
  return sprintf(
412
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
413
  'payment',
414
+ absint( $payment->ID )
415
  );
416
  }
417
 
438
  $customer_id = edd_get_payment_customer_id( $payment->ID );
439
 
440
  if( ! empty( $customer_id ) ) {
441
+ $customer = new EDD_Customer( $customer_id );
442
+ $url = add_query_arg(
443
+ array(
444
+ 'post_type' => 'download',
445
+ 'page' => 'edd-customers',
446
+ 'view' => 'overview',
447
+ 'id' => absint( $customer_id ),
448
+ ),
449
+ admin_url( 'edit.php' )
450
+ );
451
+ $value = '<a href="' . esc_url( $url ) . '">' . esc_html( $customer->name ) . '</a>';
452
  } else {
453
+ $url = add_query_arg(
454
+ array(
455
+ 'post_type' => 'download',
456
+ 'page' => 'edd-payment-history',
457
+ 's' => rawurlencode( edd_get_payment_user_email( $payment->ID ) ),
458
+ ),
459
+ admin_url( 'edit.php' )
460
+ );
461
+ $value = '<a href="' . esc_url( $url ) . '">' . __( '(customer missing)', 'easy-digital-downloads' ) . '</a>';
462
  }
463
  return apply_filters( 'edd_payments_table_column', $value, $payment->ID, 'user' );
464
  }
includes/admin/payments/payments-history.php CHANGED
@@ -34,7 +34,7 @@ function edd_payment_history_page() {
34
  <div class="wrap">
35
  <h1><?php echo $edd_payment->labels->menu_name ?></h1>
36
  <?php do_action( 'edd_payments_page_top' ); ?>
37
- <form id="edd-payments-filter" method="get" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-payment-history' ); ?>">
38
  <input type="hidden" name="post_type" value="download" />
39
  <input type="hidden" name="page" value="edd-payment-history" />
40
 
@@ -114,14 +114,22 @@ add_filter( 'admin_title', 'edd_view_order_details_title', 10, 2 );
114
  function edd_override_edit_post_for_payment_link( $url, $post_id, $context ) {
115
 
116
  $post = get_post( $post_id );
117
- if( ! $post )
118
  return $url;
 
119
 
120
- if( 'edd_payment' != $post->post_type )
121
  return $url;
 
122
 
123
- $url = admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . $post_id );
124
-
125
- return $url;
 
 
 
 
 
 
126
  }
127
  add_filter( 'get_edit_post_link', 'edd_override_edit_post_for_payment_link', 10, 3 );
34
  <div class="wrap">
35
  <h1><?php echo $edd_payment->labels->menu_name ?></h1>
36
  <?php do_action( 'edd_payments_page_top' ); ?>
37
+ <form id="edd-payments-filter" method="get" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ); ?>">
38
  <input type="hidden" name="post_type" value="download" />
39
  <input type="hidden" name="page" value="edd-payment-history" />
40
 
114
  function edd_override_edit_post_for_payment_link( $url, $post_id, $context ) {
115
 
116
  $post = get_post( $post_id );
117
+ if ( ! $post ) {
118
  return $url;
119
+ }
120
 
121
+ if ( 'edd_payment' !== $post->post_type ) {
122
  return $url;
123
+ }
124
 
125
+ return add_query_arg(
126
+ array(
127
+ 'post_type' => 'download',
128
+ 'page' => 'edd-payment-history',
129
+ 'view' => 'view-order-details',
130
+ 'id' => absint( $post_id ),
131
+ ),
132
+ admin_url( 'edit.php' )
133
+ );
134
  }
135
  add_filter( 'get_edit_post_link', 'edd_override_edit_post_for_payment_link', 10, 3 );
includes/admin/payments/view-order-details.php CHANGED
@@ -95,9 +95,9 @@ $customer = new EDD_Customer( $payment->customer_id );
95
  <p>
96
  <span class="label"><?php _e( 'Recovery URL', 'easy-digital-downloads' ); ?>:</span>
97
  <?php $recover_help = __( 'Pending and abandoned payments can be resumed by the customer, using this custom URL. Payments can be resumed only when they do not have a transaction ID from the gateway.', 'easy-digital-downloads' ); ?>
98
- <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php echo $recover_help; ?>"></span>
99
 
100
- <input type="text" class="large-text" readonly="readonly" value="<?php echo $payment->get_recovery_url(); ?>" />
101
  </p>
102
  <?php endif; ?>
103
  </div>
@@ -135,7 +135,7 @@ $customer = new EDD_Customer( $payment->customer_id );
135
  if ( false === $discount_obj ) {
136
  $found_discounts[] = $discount;
137
  } else {
138
- $found_discounts[] = '<a href="' . $discount_obj->edit_url() . '">' . $discount_obj->code . '</a>';
139
  }
140
 
141
  }
@@ -147,7 +147,7 @@ $customer = new EDD_Customer( $payment->customer_id );
147
  <span>
148
  <?php
149
  if ( ! empty( $found_discounts ) ) {
150
- echo implode( ', ', $found_discounts );
151
  } else {
152
  _e( 'None', 'easy-digital-downloads' );
153
  }
@@ -163,7 +163,7 @@ $customer = new EDD_Customer( $payment->customer_id );
163
  <p class="strong"><?php _e( 'Fees', 'easy-digital-downloads' ); ?>:</p>
164
  <ul class="edd-payment-fees">
165
  <?php foreach( $fees as $fee ) : ?>
166
- <li data-fee-id="<?php echo $fee['id']; ?>"><span class="fee-label"><?php echo $fee['label'] . ':</span> ' . '<span class="fee-amount" data-fee="' . esc_attr( $fee['amount'] ) . '">' . edd_currency_filter( $fee['amount'], $currency_code ); ?></span></li>
167
  <?php endforeach; ?>
168
  </ul>
169
  </div>
@@ -176,7 +176,7 @@ $customer = new EDD_Customer( $payment->customer_id );
176
  <input name="edd-payment-tax" class="med-text" type="text" value="<?php echo esc_attr( edd_format_amount( $payment->tax ) ); ?>"/>
177
  <?php if ( ! empty( $payment->tax_rate ) ) : ?>
178
  <span class="edd-tax-rate">
179
- &nbsp;<?php echo $payment->tax_rate * 100; ?>%
180
  </span>
181
  <?php endif; ?>
182
  </p>
@@ -207,7 +207,7 @@ $customer = new EDD_Customer( $payment->customer_id );
207
  <?php do_action( 'edd_view_order_details_update_before', $payment_id ); ?>
208
  <div id="major-publishing-actions">
209
  <div id="delete-action">
210
- <a href="<?php echo wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_payment', 'purchase_id' => $payment_id ), admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ), 'edd_payment_nonce' ) ?>" class="edd-delete-payment edd-delete"><?php _e( 'Delete Payment', 'easy-digital-downloads' ); ?></a>
211
  </div>
212
  <input type="submit" class="button button-primary right" value="<?php esc_attr_e( 'Save Payment', 'easy-digital-downloads' ); ?>"/>
213
  <div class="clear"></div>
@@ -230,7 +230,7 @@ $customer = new EDD_Customer( $payment->customer_id );
230
  <select class="edd-order-resend-receipt-email">
231
  <option value=""><?php _e( ' -- select email --', 'easy-digital-downloads' ); ?></option>
232
  <?php foreach( $customer->emails as $email ) : ?>
233
- <option value="<?php echo urlencode( sanitize_email( $email ) ); ?>"><?php echo $email; ?></option>
234
  <?php endforeach; ?>
235
  </select>
236
  </div>
@@ -305,23 +305,43 @@ $customer = new EDD_Customer( $payment->customer_id );
305
  <div id="edd-order-logs" class="postbox edd-order-logs">
306
 
307
  <h3 class="hndle">
308
- <span><?php _e( 'Logs', 'easy-digital-downloads' ); ?></span>
309
  </h3>
310
  <div class="inside">
311
  <div class="edd-admin-box">
312
 
313
  <div class="edd-admin-box-inside">
314
 
 
 
 
 
 
 
 
 
 
 
315
  <p>
316
- <a href="<?php echo admin_url( '/edit.php?post_type=download&page=edd-reports&tab=logs&payment=' . $payment_id ); ?>"><?php _e( 'View file download log for purchase', 'easy-digital-downloads' ); ?></a>
 
 
317
  </p>
318
  <p>
319
- <?php $download_log_url = admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs&customer=' . $customer->id ); ?>
320
- <a href="<?php echo $download_log_url; ?>"><?php _e( 'View customer download log', 'easy-digital-downloads' ); ?></a>
321
  </p>
322
  <p>
323
- <?php $purchase_url = admin_url( 'edit.php?post_type=download&page=edd-payment-history&user=' . esc_attr( edd_get_payment_user_email( $payment_id ) ) ); ?>
324
- <a href="<?php echo $purchase_url; ?>"><?php _e( 'View all purchases of customer', 'easy-digital-downloads' ); ?></a>
 
 
 
 
 
 
 
 
 
325
  </p>
326
  </div>
327
 
@@ -379,7 +399,7 @@ $customer = new EDD_Customer( $payment->customer_id );
379
  if ( is_array( $cart_items ) ) :
380
  $is_qty_enabled = edd_item_quantities_enabled() ? ' item_quantity' : '' ;
381
  ?>
382
- <div id="edd-purchased-files" class="postbox edd-edit-purchase-element <?php echo $column_count; ?>">
383
  <h3 class="hndle edd-payment-details-label-mobile">
384
  <span><?php printf( __( 'Purchased %s', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></span>
385
  </h3>
@@ -389,7 +409,7 @@ $customer = new EDD_Customer( $payment->customer_id );
389
  <?php printf( _x( '%s Purchased', 'payment details purchased item title - full screen', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>
390
  </li>
391
 
392
- <li class="item_price<?php echo $is_qty_enabled; ?>">
393
  <?php
394
  _ex( 'Price', 'payment details purchased item price - full screen', 'easy-digital-downloads' );
395
  if( edd_item_quantities_enabled() ) :
@@ -436,12 +456,12 @@ $customer = new EDD_Customer( $payment->customer_id );
436
  <li class="download">
437
  <span class="edd-purchased-download-title">
438
  <?php if ( ! empty( $download->ID ) ) : ?>
439
- <a href="<?php echo admin_url( 'post.php?post=' . $item_id . '&action=edit' ); ?>">
440
- <?php echo $download->get_name();
441
  if ( isset( $cart_items[ $key ]['item_number'] ) && isset( $cart_items[ $key ]['item_number']['options'] ) ) {
442
  $price_options = $cart_items[ $key ]['item_number']['options'];
443
  if ( edd_has_variable_prices( $item_id ) && isset( $price_id ) ) {
444
- echo ' - ' . edd_get_price_option_name( $item_id, $price_id, $payment_id );
445
  }
446
  }
447
  ?>
@@ -449,35 +469,35 @@ $customer = new EDD_Customer( $payment->customer_id );
449
  <?php else: ?>
450
  <span class="deleted">
451
  <?php if ( ! $cart_items_existed ) {
452
- echo $cart_item['name'];
453
  } else if ( ! empty( $cart_item['name'] ) ) {
454
- echo $cart_item['name']; ?>&nbsp;-&nbsp;
455
  <em>(<?php _e( 'Deleted', 'easy-digital-downloads' ); ?>)</em>
456
  <?php } else { ?>
457
- <em><?php printf( __( '%s deleted', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></em>
458
  <?php } ?>
459
  </span>
460
  <?php endif; ?>
461
  </span>
462
- <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 ); ?>"/>
463
- <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 ); ?>"/>
464
 
465
  <?php if( ! edd_item_quantities_enabled() ) : ?>
466
- <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][quantity]" class="edd-payment-details-download-quantity" value="<?php echo esc_attr( $quantity ); ?>"/>
467
  <?php endif; ?>
468
 
469
  <?php if ( ! edd_use_taxes() ): ?>
470
- <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][item_tax]" class="edd-payment-details-download-item-tax" value="<?php echo $item_tax; ?>" />
471
  <?php endif; ?>
472
 
473
  <?php if ( ! empty( $cart_items[ $key ]['fees'] ) ) : ?>
474
  <?php $fees = array_keys( $cart_items[ $key ]['fees'] ); ?>
475
- <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][fees]" class="edd-payment-details-download-fees" value="<?php echo esc_attr( json_encode( $fees ) ); ?>"/>
476
  <?php endif; ?>
477
 
478
  </li>
479
 
480
- <li class="item_price<?php echo $is_qty_enabled; ?>">
481
  <span class="edd-payment-details-label-mobile">
482
  <?php
483
  _ex( 'Price', 'payment details purchased item price - mobile', 'easy-digital-downloads' );
@@ -487,10 +507,10 @@ $customer = new EDD_Customer( $payment->customer_id );
487
  ?>
488
  </span>
489
  <?php echo edd_currency_symbol( $currency_code ); ?>
490
- <input type="text" class="medium-text edd-price-field edd-payment-details-download-item-price edd-payment-item-input" name="edd-payment-details-downloads[<?php echo $key; ?>][item_price]" value="<?php echo edd_format_amount( $item_price ); ?>" />
491
  <?php if( edd_item_quantities_enabled() ) : ?>
492
  &nbsp;&times;&nbsp;
493
- <input type="number" name="edd-payment-details-downloads[<?php echo $key; ?>][quantity]" class="small-text edd-payment-details-download-quantity edd-payment-item-input" min="1" step="1" value="<?php echo $quantity; ?>" />
494
  <?php endif; ?>
495
  </li>
496
 
@@ -500,7 +520,7 @@ $customer = new EDD_Customer( $payment->customer_id );
500
  <?php _ex( 'Tax', 'payment details purchased item tax - mobile', 'easy-digital-downloads' ); ?>
501
  </span>
502
  <?php echo edd_currency_symbol( $currency_code ); ?>
503
- <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 ); ?>" />
504
  </li>
505
  <?php endif; ?>
506
 
@@ -508,13 +528,13 @@ $customer = new EDD_Customer( $payment->customer_id );
508
  <span class="edd-payment-details-label-mobile">
509
  <?php printf( _x( '%s Total', 'payment details purchased item total - mobile', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>
510
  </span>
511
- <span class="edd-price-currency"><?php echo edd_currency_symbol( $currency_code ); ?></span><span class="price-text edd-payment-details-download-amount"><?php echo edd_format_amount( $price ); ?></span>
512
- <input type="hidden" name="edd-payment-details-downloads[<?php echo $key; ?>][amount]" class="edd-payment-details-download-amount" value="<?php echo esc_attr( $price ); ?>"/>
513
  </li>
514
  </ul>
515
 
516
  <div class="edd-purchased-download-actions actions">
517
- <input type="hidden" class="edd-payment-details-download-has-log" name="edd-payment-details-downloads[<?php echo $key; ?>][has_log]" value="1" />
518
  <?php if( edd_get_download_files( $item_id, $price_id ) && edd_is_payment_complete( $payment_id ) ) : ?>
519
  <span class="edd-copy-download-link-wrapper">
520
  <a href="" class="edd-copy-download-link" data-download-id="<?php echo esc_attr( $item_id ); ?>" data-price-id="<?php echo esc_attr( $price_id ); ?>"><?php _e( 'Copy Download Link(s)', 'easy-digital-downloads' ); ?></a> |
@@ -533,13 +553,13 @@ $customer = new EDD_Customer( $payment->customer_id );
533
  </div>
534
  <?php endif; ?>
535
 
536
- <div class="postbox edd-edit-purchase-element <?php echo $column_count; ?>">
537
 
538
  <div class="edd-add-download-to-purchase-header row header">
539
  <ul class="edd-purchased-files-list-wrapper">
540
  <li class="download"><?php printf( __( 'Add New %s', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></li>
541
 
542
- <li class="item_price<?php echo $is_qty_enabled; ?>">
543
  <?php _e( 'Price', 'easy-digital-downloads' ); ?>
544
  <?php if( edd_item_quantities_enabled() ) : ?>
545
  <?php _e( ' & Quantity', 'easy-digital-downloads' ); ?>
@@ -650,21 +670,31 @@ $customer = new EDD_Customer( $payment->customer_id );
650
  <div class="column-container customer-info">
651
  <div class="column">
652
  <?php if( ! empty( $customer->id ) ) : ?>
653
- <?php $customer_url = admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . $customer->id ); ?>
654
- <a href="<?php echo $customer_url; ?>"><?php echo $customer->name; ?> - <?php echo $customer->email; ?></a>
 
 
 
 
 
 
 
 
 
 
655
  <?php endif; ?>
656
- <input type="hidden" name="edd-current-customer" value="<?php echo $customer->id; ?>" />
657
  </div>
658
  <div class="column">
659
- <a href="#change" class="edd-payment-change-customer"><?php _e( 'Assign to another customer', 'easy-digital-downloads' ); ?></a>
660
  &nbsp;|&nbsp;
661
- <a href="#new" class="edd-payment-new-customer"><?php _e( 'New Customer', 'easy-digital-downloads' ); ?></a>
662
  </div>
663
  </div>
664
 
665
  <div class="column-container change-customer" style="display: none">
666
  <div class="column">
667
- <strong><?php _e( 'Select a customer', 'easy-digital-downloads' ); ?>:</strong>
668
  <?php
669
  $args = array(
670
  'class' => 'edd-payment-change-customer-input',
95
  <p>
96
  <span class="label"><?php _e( 'Recovery URL', 'easy-digital-downloads' ); ?>:</span>
97
  <?php $recover_help = __( 'Pending and abandoned payments can be resumed by the customer, using this custom URL. Payments can be resumed only when they do not have a transaction ID from the gateway.', 'easy-digital-downloads' ); ?>
98
+ <span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php echo esc_attr( $recover_help ); ?>"></span>
99
 
100
+ <input type="text" class="large-text" readonly="readonly" value="<?php echo esc_url( $payment->get_recovery_url() ); ?>" />
101
  </p>
102
  <?php endif; ?>
103
  </div>
135
  if ( false === $discount_obj ) {
136
  $found_discounts[] = $discount;
137
  } else {
138
+ $found_discounts[] = '<a href="' . esc_url( $discount_obj->edit_url() ) . '">' . esc_html( $discount_obj->code ) . '</a>';
139
  }
140
 
141
  }
147
  <span>
148
  <?php
149
  if ( ! empty( $found_discounts ) ) {
150
+ echo implode( ', ', $found_discounts ); // HTML OK
151
  } else {
152
  _e( 'None', 'easy-digital-downloads' );
153
  }
163
  <p class="strong"><?php _e( 'Fees', 'easy-digital-downloads' ); ?>:</p>
164
  <ul class="edd-payment-fees">
165
  <?php foreach( $fees as $fee ) : ?>
166
+ <li data-fee-id="<?php echo esc_attr( $fee['id'] ); ?>"><span class="fee-label"><?php echo esc_html( $fee['label'] ) . ':</span> ' . '<span class="fee-amount" data-fee="' . esc_attr( $fee['amount'] ) . '">' . esc_html( edd_currency_filter( $fee['amount'], $currency_code ) ); ?></span></li>
167
  <?php endforeach; ?>
168
  </ul>
169
  </div>
176
  <input name="edd-payment-tax" class="med-text" type="text" value="<?php echo esc_attr( edd_format_amount( $payment->tax ) ); ?>"/>
177
  <?php if ( ! empty( $payment->tax_rate ) ) : ?>
178
  <span class="edd-tax-rate">
179
+ &nbsp;<?php echo esc_html( $payment->tax_rate * 100 ); ?>%
180
  </span>
181
  <?php endif; ?>
182
  </p>
207
  <?php do_action( 'edd_view_order_details_update_before', $payment_id ); ?>
208
  <div id="major-publishing-actions">
209
  <div id="delete-action">
210
+ <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'edd-action' => 'delete_payment', 'purchase_id' => urlencode( $payment_id ) ), admin_url( 'edit.php?post_type=download&page=edd-payment-history' ) ), 'edd_payment_nonce' ) ); ?>" class="edd-delete-payment edd-delete"><?php esc_html_e( 'Delete Payment', 'easy-digital-downloads' ); ?></a>
211
  </div>
212
  <input type="submit" class="button button-primary right" value="<?php esc_attr_e( 'Save Payment', 'easy-digital-downloads' ); ?>"/>
213
  <div class="clear"></div>
230
  <select class="edd-order-resend-receipt-email">
231
  <option value=""><?php _e( ' -- select email --', 'easy-digital-downloads' ); ?></option>
232
  <?php foreach( $customer->emails as $email ) : ?>
233
+ <option value="<?php echo urlencode( sanitize_email( $email ) ); ?>"><?php echo esc_html( $email ); ?></option>
234
  <?php endforeach; ?>
235
  </select>
236
  </div>
305
  <div id="edd-order-logs" class="postbox edd-order-logs">
306
 
307
  <h3 class="hndle">
308
+ <span><?php esc_html_e( 'Logs', 'easy-digital-downloads' ); ?></span>
309
  </h3>
310
  <div class="inside">
311
  <div class="edd-admin-box">
312
 
313
  <div class="edd-admin-box-inside">
314
 
315
+ <?php
316
+ $logs_url = add_query_arg(
317
+ array(
318
+ 'post_type' => 'download',
319
+ 'page' => 'edd-reports',
320
+ 'tab' => 'logs',
321
+ ),
322
+ admin_url( 'edit.php' )
323
+ );
324
+ ?>
325
  <p>
326
+ <a href="<?php echo esc_url( add_query_arg( 'payment', absint( $payment_id ), $logs_url ) ); ?>">
327
+ <?php esc_html_e( 'View file download log for purchase', 'easy-digital-downloads' ); ?>
328
+ </a>
329
  </p>
330
  <p>
331
+ <a href="<?php echo esc_url( add_query_arg( 'customer', absint( $customer->id ), $logs_url ) ); ?>"><?php esc_html_e( 'View customer download log', 'easy-digital-downloads' ); ?></a>
 
332
  </p>
333
  <p>
334
+ <?php
335
+ $purchase_url = add_query_arg(
336
+ array(
337
+ 'post_type' => 'download',
338
+ 'page' => 'edd-payment-history',
339
+ 'customer' => absint( $customer->id ),
340
+ ),
341
+ admin_url( 'edit.php' )
342
+ );
343
+ ?>
344
+ <a href="<?php echo esc_url( $purchase_url ); ?>"><?php esc_html_e( 'View all purchases of customer', 'easy-digital-downloads' ); ?></a>
345
  </p>
346
  </div>
347
 
399
  if ( is_array( $cart_items ) ) :
400
  $is_qty_enabled = edd_item_quantities_enabled() ? ' item_quantity' : '' ;
401
  ?>
402
+ <div id="edd-purchased-files" class="postbox edd-edit-purchase-element <?php echo esc_attr( $column_count ); ?>">
403
  <h3 class="hndle edd-payment-details-label-mobile">
404
  <span><?php printf( __( 'Purchased %s', 'easy-digital-downloads' ), edd_get_label_plural() ); ?></span>
405
  </h3>
409
  <?php printf( _x( '%s Purchased', 'payment details purchased item title - full screen', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>
410
  </li>
411
 
412
+ <li class="item_price<?php echo esc_attr( $is_qty_enabled ); ?>">
413
  <?php
414
  _ex( 'Price', 'payment details purchased item price - full screen', 'easy-digital-downloads' );
415
  if( edd_item_quantities_enabled() ) :
456
  <li class="download">
457
  <span class="edd-purchased-download-title">
458
  <?php if ( ! empty( $download->ID ) ) : ?>
459
+ <a href="<?php echo esc_url( admin_url( 'post.php?post=' . urlencode( $item_id ) . '&action=edit' ) ); ?>">
460
+ <?php echo esc_html( $download->get_name() );
461
  if ( isset( $cart_items[ $key ]['item_number'] ) && isset( $cart_items[ $key ]['item_number']['options'] ) ) {
462
  $price_options = $cart_items[ $key ]['item_number']['options'];
463
  if ( edd_has_variable_prices( $item_id ) && isset( $price_id ) ) {
464
+ echo ' - ' . esc_html( edd_get_price_option_name( $item_id, $price_id, $payment_id ) );
465
  }
466
  }
467
  ?>
469
  <?php else: ?>
470
  <span class="deleted">
471
  <?php if ( ! $cart_items_existed ) {
472
+ echo esc_html( $cart_item['name'] );
473
  } else if ( ! empty( $cart_item['name'] ) ) {
474
+ echo esc_html( $cart_item['name'] ); ?>&nbsp;-&nbsp;
475
  <em>(<?php _e( 'Deleted', 'easy-digital-downloads' ); ?>)</em>
476
  <?php } else { ?>
477
+ <em><?php echo esc_html( sprintf( __( '%s deleted', 'easy-digital-downloads' ), edd_get_label_singular() ) ); ?></em>
478
  <?php } ?>
479
  </span>
480
  <?php endif; ?>
481
  </span>
482
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][id]" class="edd-payment-details-download-id" value="<?php echo esc_attr( $item_id ); ?>"/>
483
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][price_id]" class="edd-payment-details-download-price-id" value="<?php echo esc_attr( $price_id ); ?>"/>
484
 
485
  <?php if( ! edd_item_quantities_enabled() ) : ?>
486
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][quantity]" class="edd-payment-details-download-quantity" value="<?php echo esc_attr( $quantity ); ?>"/>
487
  <?php endif; ?>
488
 
489
  <?php if ( ! edd_use_taxes() ): ?>
490
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][item_tax]" class="edd-payment-details-download-item-tax" value="<?php echo esc_attr( $item_tax ); ?>" />
491
  <?php endif; ?>
492
 
493
  <?php if ( ! empty( $cart_items[ $key ]['fees'] ) ) : ?>
494
  <?php $fees = array_keys( $cart_items[ $key ]['fees'] ); ?>
495
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][fees]" class="edd-payment-details-download-fees" value="<?php echo esc_attr( json_encode( $fees ) ); ?>"/>
496
  <?php endif; ?>
497
 
498
  </li>
499
 
500
+ <li class="item_price<?php echo esc_attr( $is_qty_enabled ); ?>">
501
  <span class="edd-payment-details-label-mobile">
502
  <?php
503
  _ex( 'Price', 'payment details purchased item price - mobile', 'easy-digital-downloads' );
507
  ?>
508
  </span>
509
  <?php echo edd_currency_symbol( $currency_code ); ?>
510
+ <input type="text" class="medium-text edd-price-field edd-payment-details-download-item-price edd-payment-item-input" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][item_price]" value="<?php echo esc_attr( edd_format_amount( $item_price ) ); ?>" />
511
  <?php if( edd_item_quantities_enabled() ) : ?>
512
  &nbsp;&times;&nbsp;
513
+ <input type="number" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][quantity]" class="small-text edd-payment-details-download-quantity edd-payment-item-input" min="1" step="1" value="<?php echo esc_attr( $quantity ); ?>" />
514
  <?php endif; ?>
515
  </li>
516
 
520
  <?php _ex( 'Tax', 'payment details purchased item tax - mobile', 'easy-digital-downloads' ); ?>
521
  </span>
522
  <?php echo edd_currency_symbol( $currency_code ); ?>
523
+ <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 esc_attr( $key ); ?>][item_tax]" value="<?php echo esc_attr( edd_format_amount( $item_tax ) ); ?>" />
524
  </li>
525
  <?php endif; ?>
526
 
528
  <span class="edd-payment-details-label-mobile">
529
  <?php printf( _x( '%s Total', 'payment details purchased item total - mobile', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>
530
  </span>
531
+ <span class="edd-price-currency"><?php echo edd_currency_symbol( $currency_code ); ?></span><span class="price-text edd-payment-details-download-amount"><?php echo esc_html( edd_format_amount( $price ) ); ?></span>
532
+ <input type="hidden" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][amount]" class="edd-payment-details-download-amount" value="<?php echo esc_attr( $price ); ?>"/>
533
  </li>
534
  </ul>
535
 
536
  <div class="edd-purchased-download-actions actions">
537
+ <input type="hidden" class="edd-payment-details-download-has-log" name="edd-payment-details-downloads[<?php echo esc_attr( $key ); ?>][has_log]" value="1" />
538
  <?php if( edd_get_download_files( $item_id, $price_id ) && edd_is_payment_complete( $payment_id ) ) : ?>
539
  <span class="edd-copy-download-link-wrapper">
540
  <a href="" class="edd-copy-download-link" data-download-id="<?php echo esc_attr( $item_id ); ?>" data-price-id="<?php echo esc_attr( $price_id ); ?>"><?php _e( 'Copy Download Link(s)', 'easy-digital-downloads' ); ?></a> |
553
  </div>
554
  <?php endif; ?>
555
 
556
+ <div class="postbox edd-edit-purchase-element <?php echo esc_attr( $column_count ); ?>">
557
 
558
  <div class="edd-add-download-to-purchase-header row header">
559
  <ul class="edd-purchased-files-list-wrapper">
560
  <li class="download"><?php printf( __( 'Add New %s', 'easy-digital-downloads' ), edd_get_label_singular() ); ?></li>
561
 
562
+ <li class="item_price<?php echo esc_attr( $is_qty_enabled ); ?>">
563
  <?php _e( 'Price', 'easy-digital-downloads' ); ?>
564
  <?php if( edd_item_quantities_enabled() ) : ?>
565
  <?php _e( ' & Quantity', 'easy-digital-downloads' ); ?>
670
  <div class="column-container customer-info">
671
  <div class="column">
672
  <?php if( ! empty( $customer->id ) ) : ?>
673
+ <?php
674
+ $customer_url = add_query_arg(
675
+ array(
676
+ 'post_type' => 'download',
677
+ 'page' => 'edd-customers',
678
+ 'view' => 'overview',
679
+ 'id' => absint( $customer->id ),
680
+ ),
681
+ admin_url( 'edit.php' )
682
+ );
683
+ ?>
684
+ <a href="<?php echo esc_url( $customer_url ); ?>"><?php echo esc_html( $customer->name ); ?> - <?php echo esc_html( $customer->email ); ?></a>
685
  <?php endif; ?>
686
+ <input type="hidden" name="edd-current-customer" value="<?php echo absint( $customer->id ); ?>" />
687
  </div>
688
  <div class="column">
689
+ <a href="#change" class="edd-payment-change-customer"><?php esc_html_e( 'Assign to another customer', 'easy-digital-downloads' ); ?></a>
690
  &nbsp;|&nbsp;
691
+ <a href="#new" class="edd-payment-new-customer"><?php esc_html_e( 'New Customer', 'easy-digital-downloads' ); ?></a>
692
  </div>
693
  </div>
694
 
695
  <div class="column-container change-customer" style="display: none">
696
  <div class="column">
697
+ <strong><?php esc_html_e( 'Select a customer', 'easy-digital-downloads' ); ?>:</strong>
698
  <?php
699
  $args = array(
700
  'class' => 'edd-payment-change-customer-input',
includes/admin/plugins.php CHANGED
@@ -24,9 +24,10 @@ if ( ! defined( 'ABSPATH' ) ) exit;
24
  * @return array $links
25
  */
26
  function edd_plugin_action_links( $links, $file ) {
27
- $settings_link = '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-settings' ) . '">' . esc_html__( 'General Settings', 'easy-digital-downloads' ) . '</a>';
28
- if ( $file == 'easy-digital-downloads/easy-digital-downloads.php' )
29
  array_unshift( $links, $settings_link );
 
30
 
31
  return $links;
32
  }
@@ -43,22 +44,23 @@ add_filter( 'plugin_action_links', 'edd_plugin_action_links', 10, 2 );
43
  * @return array $input
44
  */
45
  function edd_plugin_row_meta( $input, $file ) {
46
- if ( $file != 'easy-digital-downloads/easy-digital-downloads.php' )
47
  return $input;
 
48
 
49
- $edd_link = esc_url( add_query_arg( array(
 
50
  'utm_source' => 'plugins-page',
51
  'utm_medium' => 'plugin-row',
52
  'utm_campaign' => 'admin',
53
- ), 'https://easydigitaldownloads.com/downloads/' )
 
54
  );
55
 
56
  $links = array(
57
- '<a href="' . $edd_link . '">' . esc_html__( 'Extensions', 'easy-digital-downloads' ) . '</a>',
58
  );
59
 
60
- $input = array_merge( $input, $links );
61
-
62
- return $input;
63
  }
64
  add_filter( 'plugin_row_meta', 'edd_plugin_row_meta', 10, 2 );
24
  * @return array $links
25
  */
26
  function edd_plugin_action_links( $links, $file ) {
27
+ $settings_link = '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings' ) ) . '">' . esc_html__( 'General Settings', 'easy-digital-downloads' ) . '</a>';
28
+ if ( 'easy-digital-downloads/easy-digital-downloads.php' === $file ) {
29
  array_unshift( $links, $settings_link );
30
+ }
31
 
32
  return $links;
33
  }
44
  * @return array $input
45
  */
46
  function edd_plugin_row_meta( $input, $file ) {
47
+ if ( 'easy-digital-downloads/easy-digital-downloads.php' !== $file ) {
48
  return $input;
49
+ }
50
 
51
+ $edd_link = add_query_arg(
52
+ array(
53
  'utm_source' => 'plugins-page',
54
  'utm_medium' => 'plugin-row',
55
  'utm_campaign' => 'admin',
56
+ ),
57
+ 'https://easydigitaldownloads.com/downloads/'
58
  );
59
 
60
  $links = array(
61
+ '<a href="' . esc_url( $edd_link ) . '">' . esc_html__( 'Extensions', 'easy-digital-downloads' ) . '</a>',
62
  );
63
 
64
+ return array_merge( $input, $links );
 
 
65
  }
66
  add_filter( 'plugin_row_meta', 'edd_plugin_row_meta', 10, 2 );
includes/admin/reporting/class-download-reports-table.php CHANGED
@@ -91,7 +91,7 @@ class EDD_Download_Reports_Table extends WP_List_Table {
91
  case 'average_earnings' :
92
  return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
93
  case 'details' :
94
- return '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . $item['ID'] ) . '">' . __( 'View Detailed Report', 'easy-digital-downloads' ) . '</a>';
95
  default:
96
  return $item[ $column_name ];
97
  }
91
  case 'average_earnings' :
92
  return edd_currency_filter( edd_format_amount( $item[ $column_name ] ) );
93
  case 'details' :
94
+ return '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&view=downloads&download-id=' . urlencode( $item['ID'] ) ) ) . '">' . __( 'View Detailed Report', 'easy-digital-downloads' ) . '</a>';
95
  default:
96
  return $item[ $column_name ];
97
  }
includes/admin/reporting/class-file-downloads-logs-list-table.php CHANGED
@@ -121,18 +121,19 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
121
  $base_url = remove_query_arg( 'paged' );
122
  switch ( $column_name ) {
123
  case 'download':
124
- $download = new EDD_Download( $item[ $column_name ] );
125
- $column_value = $download->get_name();
126
 
127
- if ( false !== $item['price_id'] ) {
128
- $column_value .= ' &mdash; ' . edd_get_price_option_name( $download->ID, $item['price_id'] );
129
  }
130
 
131
- return '<a href="' . esc_url( add_query_arg( 'download', $download->ID, $base_url ) ) . '" >' . $column_value . '</a>';
 
132
  case 'customer':
133
- return '<a href="' . esc_url( add_query_arg( 'customer', $item['customer']->id, $base_url ) ) . '">' . $item['customer']->name . '</a>';
134
  case 'payment_id':
135
- return false !== $item['payment_id'] ? '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . esc_attr( $item['payment_id'] ) ) ) . '">' . edd_get_payment_number( $item['payment_id'] ) . '</a>' : '';
136
  case 'ip':
137
  return '<a href="' . esc_url( 'https://ipinfo.io/' . $item['ip'] ) . '" target="_blank" rel="noopener noreferrer">' . esc_html( $item['ip'] ) . '</a>';
138
  case 'file':
@@ -321,7 +322,7 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
321
  echo '<select name="download" id="edd-log-download-filter">';
322
  echo '<option value="0">' . __( 'All', 'easy-digital-downloads' ) . '</option>';
323
  foreach ( $downloads as $download ) {
324
- echo '<option value="' . $download . '"' . selected( $download, $this->get_filtered_download() ) . '>' . esc_html( get_the_title( $download ) ) . '</option>';
325
  }
326
  echo '</select>';
327
  }
@@ -381,7 +382,10 @@ class EDD_File_Downloads_Log_Table extends WP_List_Table {
381
  // Filter the $file_id
382
  $file_id = apply_filters( 'edd_log_file_download_file_id', $file_id, $log );
383
 
384
- $file_name = ! empty( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : edd_get_file_name( $files[ $file_id ] );
 
 
 
385
 
386
  if ( ( $this->file_search && strpos( strtolower( $file_name ), strtolower( $this->get_search() ) ) !== false ) || ! $this->file_search ) {
387
  $logs_data[] = array(
121
  $base_url = remove_query_arg( 'paged' );
122
  switch ( $column_name ) {
123
  case 'download':
124
+ $download = new EDD_Download( $item[ $column_name ] );
125
+ $column_value = esc_html( $download->get_name() );
126
 
127
+ if ( false !== $item['price_id'] && $download->has_variable_prices() ) {
128
+ $column_value .= ' &mdash; ' . esc_html( edd_get_price_option_name( $download->ID, $item['price_id'] ) );
129
  }
130
 
131
+ // $column_value may contain some HTML, so is intentionally not escaped.
132
+ return '<a href="' . esc_url( add_query_arg( 'download', absint( $download->ID ), $base_url ) ) . '" >' . $column_value . '</a>';
133
  case 'customer':
134
+ return '<a href="' . esc_url( add_query_arg( 'customer', absint( $item['customer']->id ), $base_url ) ) . '">' . esc_html( $item['customer']->name ) . '</a>';
135
  case 'payment_id':
136
+ return false !== $item['payment_id'] ? '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . esc_attr( $item['payment_id'] ) ) ) . '">' . esc_html( edd_get_payment_number( $item['payment_id'] ) ) . '</a>' : '';
137
  case 'ip':
138
  return '<a href="' . esc_url( 'https://ipinfo.io/' . $item['ip'] ) . '" target="_blank" rel="noopener noreferrer">' . esc_html( $item['ip'] ) . '</a>';
139
  case 'file':
322
  echo '<select name="download" id="edd-log-download-filter">';
323
  echo '<option value="0">' . __( 'All', 'easy-digital-downloads' ) . '</option>';
324
  foreach ( $downloads as $download ) {
325
+ echo '<option value="' . esc_attr( $download ) . '"' . selected( $download, $this->get_filtered_download() ) . '>' . esc_html( get_the_title( $download ) ) . '</option>';
326
  }
327
  echo '</select>';
328
  }
382
  // Filter the $file_id
383
  $file_id = apply_filters( 'edd_log_file_download_file_id', $file_id, $log );
384
 
385
+ $file_name = '';
386
+ if ( ! empty( $files ) && is_numeric( $file_id ) ) {
387
+ $file_name = ! empty( $files[ $file_id ]['name'] ) ? $files[ $file_id ]['name'] : edd_get_file_name( $files[ $file_id ] );
388
+ }
389
 
390
  if ( ( $this->file_search && strpos( strtolower( $file_name ), strtolower( $this->get_search() ) ) !== false ) || ! $this->file_search ) {
391
  $logs_data[] = array(
includes/admin/reporting/class-sales-logs-list-table.php CHANGED
@@ -90,11 +90,11 @@ class EDD_Sales_Log_Table extends WP_List_Table {
90
  }
91
  }
92
 
93
- $return = '<a href="' . add_query_arg( 'download', $item[ $column_name ] ) . '" >' . $title . '</a>';
94
  break;
95
 
96
  case 'customer' :
97
- $return = '<a href="' . admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . absint( $item['customer']->id ) ) . '">' . $item['customer']->name . '</a>';
98
  break;
99
 
100
  case 'item_price' :
@@ -106,7 +106,7 @@ class EDD_Sales_Log_Table extends WP_List_Table {
106
  break;
107
 
108
  case 'payment_id' :
109
- $return = '<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>';
110
  break;
111
 
112
  default:
@@ -280,7 +280,7 @@ class EDD_Sales_Log_Table extends WP_List_Table {
280
  echo '<select name="download" id="edd-log-download-filter">';
281
  echo '<option value="0">' . __( 'All', 'easy-digital-downloads' ) . '</option>';
282
  foreach ( $downloads as $download ) {
283
- echo '<option value="' . $download . '"' . selected( $download, $this->get_filtered_download() ) . '>' . esc_html( get_the_title( $download ) ) . '</option>';
284
  }
285
 
286
  echo '</select>';
90
  }
91
  }
92
 
93
+ $return = '<a href="' . esc_url( add_query_arg( 'download', urlencode( $item[ $column_name ] ) ) ) . '" >' . esc_html( $title ) . '</a>';
94
  break;
95
 
96
  case 'customer' :
97
+ $return = '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-customers&view=overview&id=' . absint( $item['customer']->id ) ) ) . '">' . esc_html( $item['customer']->name ) . '</a>';
98
  break;
99
 
100
  case 'item_price' :
106
  break;
107
 
108
  case 'payment_id' :
109
+ $return = '<a href="' . esc_url( admin_url( 'edit.php?post_type=download&page=edd-payment-history&view=view-order-details&id=' . urlencode( $item['payment_id'] ) ) ) . '">' . esc_html( edd_get_payment_number( $item['payment_id'] ) ) . '</a>';
110
  break;
111
 
112
  default:
280
  echo '<select name="download" id="edd-log-download-filter">';
281
  echo '<option value="0">' . __( 'All', 'easy-digital-downloads' ) . '</option>';
282
  foreach ( $downloads as $download ) {
283
+ echo '<option value="' . esc_attr( $download ) . '"' . selected( $download, $this->get_filtered_download() ) . '>' . esc_html( get_the_title( $download ) ) . '</option>';
284
  }
285
 
286
  echo '</select>';
includes/admin/reporting/export/export-functions.php CHANGED
@@ -75,15 +75,16 @@ function edd_do_ajax_export() {
75
  } else {
76
 
77
  $args = array_merge( $_REQUEST, array(
78
- 'step' => $step,
79
- 'class' => $class,
80
  'nonce' => wp_create_nonce( 'edd-batch-export' ),
81
  'edd_action' => 'download_batch_export',
82
  ) );
83
 
84
  $download_url = add_query_arg( $args, admin_url() );
85
 
86
- echo json_encode( array( 'step' => 'done', 'url' => $download_url ) ); exit;
 
87
 
88
  }
89
  }
75
  } else {
76
 
77
  $args = array_merge( $_REQUEST, array(
78
+ 'step' => urlencode( $step ),
79
+ 'class' => urlencode( $class ),
80
  'nonce' => wp_create_nonce( 'edd-batch-export' ),
81
  'edd_action' => 'download_batch_export',
82
  ) );
83
 
84
  $download_url = add_query_arg( $args, admin_url() );
85
 
86
+ echo json_encode( array( 'step' => 'done', 'url' => esc_url_raw( $download_url ) ) );
87
+ exit;
88
 
89
  }
90
  }
includes/admin/reporting/graphing.php CHANGED
@@ -949,13 +949,24 @@ function edd_get_report_dates() {
949
  * @param $data
950
  */
951
  function edd_parse_report_dates( $data ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
952
  $dates = edd_get_report_dates();
953
-
954
- $view = edd_get_reporting_view();
955
- $id = isset( $_GET['download-id'] ) ? $_GET['download-id'] : null;
956
- $exclude_taxes = isset( $_GET['exclude_taxes'] ) ? $_GET['exclude_taxes'] : null;
957
-
958
- wp_redirect( add_query_arg( $dates, admin_url( 'edit.php?post_type=download&page=edd-reports&view=' . esc_attr( $view ) . '&download-id=' . absint( $id ) . '&exclude_taxes=' . absint( $exclude_taxes ) ) ) ); edd_die();
959
  }
960
  add_action( 'edd_filter_reports', 'edd_parse_report_dates' );
961
 
@@ -971,7 +982,7 @@ function edd_reports_refresh_button() {
971
  'edd-message' => 'refreshed-reports'
972
  ) ), 'edd-refresh-reports' );
973
 
974
- echo '<a href="' . $url . '" title="' . __( 'Clicking this will clear the reports cache', 'easy-digital-downloads' ) . '" class="button edd-refresh-reports-button">' . __( 'Refresh Reports', 'easy-digital-downloads' ) . '</a>';
975
 
976
  }
977
 
949
  * @param $data
950
  */
951
  function edd_parse_report_dates( $data ) {
952
+ $args = array(
953
+ 'post_type' => 'download',
954
+ 'page' => 'edd-reports',
955
+ 'view' => sanitize_key( edd_get_reporting_view() ),
956
+ );
957
+ if ( ! empty( $_GET['download-id'] ) ) {
958
+ $args['download-id'] = absint( $_GET['download-id'] );
959
+ }
960
+ if ( ! empty( $_GET['exclude_taxes'] ) ) {
961
+ $args['exclude_taxes'] = absint( $_GET['exclude_taxes'] );
962
+ }
963
+ $url = add_query_arg(
964
+ $args,
965
+ admin_url( 'edit.php' )
966
+ );
967
  $dates = edd_get_report_dates();
968
+ wp_safe_redirect( esc_url_raw( add_query_arg( $dates, $url ) ) );
969
+ edd_die();
 
 
 
 
970
  }
971
  add_action( 'edd_filter_reports', 'edd_parse_report_dates' );
972
 
982
  'edd-message' => 'refreshed-reports'
983
  ) ), 'edd-refresh-reports' );
984
 
985
+ echo '<a href="' . esc_url( $url ) . '" title="' . esc_html__( 'Clicking this will clear the reports cache', 'easy-digital-downloads' ) . '" class="button edd-refresh-reports-button">' . esc_html__( 'Refresh Reports', 'easy-digital-downloads' ) . '</a>';
986
 
987
  }
988
 
includes/admin/reporting/logs.php CHANGED
@@ -57,7 +57,7 @@ function edd_logs_view_file_downloads() {
57
  ?>
58
  <div class="wrap">
59
  <?php do_action( 'edd_logs_file_downloads_top' ); ?>
60
- <form id="edd-logs-filter" method="get" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs' ); ?>">
61
  <?php
62
  $logs_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-payments' );
63
  $logs_table->display();
@@ -109,7 +109,7 @@ function edd_logs_view_api_requests() {
109
  if( ! current_user_can( 'view_shop_reports' ) ) {
110
  return;
111
  }
112
-
113
  include( dirname( __FILE__ ) . '/class-api-requests-logs-list-table.php' );
114
 
115
  $logs_table = new EDD_API_Request_Log_Table();
@@ -117,7 +117,7 @@ function edd_logs_view_api_requests() {
117
  ?>
118
  <div class="wrap">
119
  <?php do_action( 'edd_logs_api_requests_top' ); ?>
120
- <form id="edd-logs-filter" method="get" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs' ); ?>">
121
  <?php
122
  $logs_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-api-requests' );
123
  $logs_table->display();
@@ -179,4 +179,4 @@ function edd_log_views() {
179
  <?php submit_button( __( 'Apply', 'easy-digital-downloads' ), 'secondary', 'submit', false ); ?>
180
  </form>
181
  <?php
182
- }
57
  ?>
58
  <div class="wrap">
59
  <?php do_action( 'edd_logs_file_downloads_top' ); ?>
60
+ <form id="edd-logs-filter" method="get" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs' ) ); ?>">
61
  <?php
62
  $logs_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-payments' );
63
  $logs_table->display();
109
  if( ! current_user_can( 'view_shop_reports' ) ) {
110
  return;
111
  }
112
+
113
  include( dirname( __FILE__ ) . '/class-api-requests-logs-list-table.php' );
114
 
115
  $logs_table = new EDD_API_Request_Log_Table();
117
  ?>
118
  <div class="wrap">
119
  <?php do_action( 'edd_logs_api_requests_top' ); ?>
120
+ <form id="edd-logs-filter" method="get" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&tab=logs' ) ); ?>">
121
  <?php
122
  $logs_table->search_box( __( 'Search', 'easy-digital-downloads' ), 'edd-api-requests' );
123
  $logs_table->display();
179
  <?php submit_button( __( 'Apply', 'easy-digital-downloads' ), 'secondary', 'submit', false ); ?>
180
  </form>
181
  <?php
182
+ }
includes/admin/reporting/reports.php CHANGED
@@ -21,17 +21,23 @@ if ( ! defined( 'ABSPATH' ) ) exit;
21
  * @return void
22
  */
23
  function edd_reports_page() {
24
- $current_page = admin_url( 'edit.php?post_type=download&page=edd-reports' );
25
- $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'reports';
 
 
 
 
 
 
26
  ?>
27
  <div class="wrap">
28
  <h1><?php esc_html_e( 'Reports', 'easy-digital-downloads' ); ?></h1>
29
  <h2 class="nav-tab-wrapper">
30
- <a href="<?php echo add_query_arg( array( 'tab' => 'reports', 'settings-updated' => false ), $current_page ); ?>" class="nav-tab <?php echo $active_tab == 'reports' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Reports', 'easy-digital-downloads' ); ?></a>
31
  <?php if ( current_user_can( 'export_shop_reports' ) ) { ?>
32
- <a href="<?php echo add_query_arg( array( 'tab' => 'export', 'settings-updated' => false ), $current_page ); ?>" class="nav-tab <?php echo $active_tab == 'export' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Export', 'easy-digital-downloads' ); ?></a>
33
  <?php } ?>
34
- <a href="<?php echo add_query_arg( array( 'tab' => 'logs', 'settings-updated' => false ), $current_page ); ?>" class="nav-tab <?php echo $active_tab == 'logs' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Logs', 'easy-digital-downloads' ); ?></a>
35
  <?php do_action( 'edd_reports_tabs' ); ?>
36
  </h2>
37
 
@@ -309,14 +315,14 @@ function edd_reports_taxes() {
309
 
310
  <div class="metabox-holder" style="padding-top: 0;">
311
  <div class="postbox">
312
- <h3><span><?php _e('Tax Report','easy-digital-downloads' ); ?></span></h3>
313
  <div class="inside">
314
- <p><?php _e( 'This report shows the total amount collected in sales tax for the given year.', 'easy-digital-downloads' ); ?></p>
315
- <form method="get" action="<?php echo admin_url( 'edit.php' ); ?>">
316
- <span><?php echo $year; ?></span>: <strong><?php edd_sales_tax_for_year( $year ); ?></strong>&nbsp;&mdash;&nbsp;
317
  <select name="year">
318
  <?php for ( $i = 2009; $i <= date( 'Y' ); $i++ ) : ?>
319
- <option value="<?php echo $i; ?>"<?php selected( $year, $i ); ?>><?php echo $i; ?></option>
320
  <?php endfor; ?>
321
  </select>
322
  <input type="hidden" name="view" value="taxes" />
@@ -383,7 +389,7 @@ function edd_reports_tab_export() {
383
  <?php
384
  $statuses = edd_get_payment_statuses();
385
  foreach( $statuses as $status => $label ) {
386
- echo '<option value="' . $status . '">' . $label . '</option>';
387
  }
388
  ?>
389
  </select>
21
  * @return void
22
  */
23
  function edd_reports_page() {
24
+ $current_page = add_query_arg(
25
+ array(
26
+ 'post_type' => 'download',
27
+ 'page' => 'edd-reports',
28
+ ),
29
+ admin_url( 'edit.php' )
30
+ );
31
+ $active_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : 'reports';
32
  ?>
33
  <div class="wrap">
34
  <h1><?php esc_html_e( 'Reports', 'easy-digital-downloads' ); ?></h1>
35
  <h2 class="nav-tab-wrapper">
36
+ <a href="<?php echo esc_url( add_query_arg( array( 'tab' => 'reports' ), $current_page ) ); ?>" class="nav-tab <?php echo $active_tab == 'reports' ? 'nav-tab-active' : ''; ?>"><?php esc_html_e( 'Reports', 'easy-digital-downloads' ); ?></a>
37
  <?php if ( current_user_can( 'export_shop_reports' ) ) { ?>
38
+ <a href="<?php echo esc_url( add_query_arg( array( 'tab' => 'export' ), $current_page ) ); ?>" class="nav-tab <?php echo $active_tab == 'export' ? 'nav-tab-active' : ''; ?>"><?php esc_html_e( 'Export', 'easy-digital-downloads' ); ?></a>
39
  <?php } ?>
40
+ <a href="<?php echo esc_url( add_query_arg( array( 'tab' => 'logs' ), $current_page ) ); ?>" class="nav-tab <?php echo $active_tab == 'logs' ? 'nav-tab-active' : ''; ?>"><?php esc_html_e( 'Logs', 'easy-digital-downloads' ); ?></a>
41
  <?php do_action( 'edd_reports_tabs' ); ?>
42
  </h2>
43
 
315
 
316
  <div class="metabox-holder" style="padding-top: 0;">
317
  <div class="postbox">
318
+ <h3><span><?php esc_html_e('Tax Report','easy-digital-downloads' ); ?></span></h3>
319
  <div class="inside">
320
+ <p><?php esc_html_e( 'This report shows the total amount collected in sales tax for the given year.', 'easy-digital-downloads' ); ?></p>
321
+ <form method="get" action="<?php echo esc_url( admin_url( 'edit.php' ) ); ?>">
322
+ <span><?php echo esc_html( $year ); ?></span>: <strong><?php esc_html( edd_sales_tax_for_year( $year ) ); ?></strong>&nbsp;&mdash;&nbsp;
323
  <select name="year">
324
  <?php for ( $i = 2009; $i <= date( 'Y' ); $i++ ) : ?>
325
+ <option value="<?php echo esc_attr( $i ); ?>"<?php selected( $year, $i ); ?>><?php echo esc_attr( $i ); ?></option>
326
  <?php endfor; ?>
327
  </select>
328
  <input type="hidden" name="view" value="taxes" />
389
  <?php
390
  $statuses = edd_get_payment_statuses();
391
  foreach( $statuses as $status => $label ) {
392
+ echo '<option value="' . esc_attr( $status ) . '">' . $label . '</option>';
393
  }
394
  ?>
395
  </select>
includes/admin/settings/display-settings.php CHANGED
@@ -88,7 +88,7 @@ function edd_options_page() {
88
 
89
  // Remove tabs that don't have settings fields.
90
  foreach ( array_keys( $settings_tabs ) as $settings_tab ) {
91
- if ( empty( $all_settings[ $settings_tab ] ) ) {
92
  unset( $settings_tabs[ $settings_tab ] );
93
  }
94
  }
@@ -264,7 +264,7 @@ function edd_options_sidebar() {
264
  </div>
265
  <div class="edd-sidebar-coupon-section">
266
  <label for="edd-coupon-code"><?php _e( 'Use code at checkout:', 'easy-digital-downloads' ); ?></label>
267
- <input id="edd-coupon-code" type="text" value="<?php echo $coupon_code; ?>" readonly>
268
  <p class="edd-coupon-note"><?php _e( 'Sale ends 23:59 PM December 6th CST. Save 25% on <a href="https://sandhillsdev.com/projects/" target="_blank">our other plugins</a>.', 'easy-digital-downloads' ); ?></p>
269
  </div>
270
  <div class="edd-sidebar-footer-section">
88
 
89
  // Remove tabs that don't have settings fields.
90
  foreach ( array_keys( $settings_tabs ) as $settings_tab ) {
91
+ if ( empty( $all_settings[ $settings_tab ] ) && in_array( $settings_tab, array( 'extensions', 'licenses' ), true ) ) {
92
  unset( $settings_tabs[ $settings_tab ] );
93
  }
94
  }
264
  </div>
265
  <div class="edd-sidebar-coupon-section">
266
  <label for="edd-coupon-code"><?php _e( 'Use code at checkout:', 'easy-digital-downloads' ); ?></label>
267
+ <input id="edd-coupon-code" type="text" value="<?php echo esc_attr( $coupon_code ); ?>" readonly>
268
  <p class="edd-coupon-note"><?php _e( 'Sale ends 23:59 PM December 6th CST. Save 25% on <a href="https://sandhillsdev.com/projects/" target="_blank">our other plugins</a>.', 'easy-digital-downloads' ); ?></p>
269
  </div>
270
  <div class="edd-sidebar-footer-section">
includes/admin/settings/register-settings.php CHANGED
@@ -344,7 +344,7 @@ function edd_get_registered_settings() {
344
  'name' => __( 'Allow Usage Tracking?', 'easy-digital-downloads' ),
345
  'desc' => sprintf(
346
  __( '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' ),
347
- 'https://easydigitaldownloads.com/downloads/?utm_source=' . substr( md5( get_bloginfo( 'name' ) ), 0, 10 ) . '&utm_medium=admin&utm_term=settings&utm_campaign=EDDUsageTracking'
348
  ),
349
  'type' => 'checkbox',
350
  ),
@@ -924,7 +924,7 @@ function edd_get_registered_settings() {
924
  'id' => 'show_privacy_policy_on_checkout',
925
  'name' => __( 'Show the Privacy Policy on checkout', 'easy-digital-downloads' ),
926
  'desc' =>
927
- __( 'Display your Privacy Policy on checkout.', 'easy-digital-downloads' ) . ' <a href="' . esc_attr( admin_url( 'privacy.php' ) ) . '">' . __( 'Set your Privacy Policy here', 'easy-digital-downloads' ) .'</a>.' .
928
  '<p>' . sprintf( __( 'Need help creating a Privacy Policy? We recommend %sTermageddon%s.', 'easy-digital-downloads' ), '<a href="https://termageddon.com/i/easy-digital-downloads-edd-termageddon-promotion/" target="_blank" rel="noopener noreferrer">', '</a>' ) . '</p>',
929
  'type' => 'checkbox',
930
  ),
@@ -1684,7 +1684,7 @@ function edd_gateways_callback( $args ) {
1684
  'utm_campaign' => 'admin',
1685
  );
1686
  $url = esc_url( add_query_arg( $url_args, 'https://easydigitaldownloads.com/downloads/category/extensions/gateways/' ) );
1687
- $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>';
1688
 
1689
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1690
  }
@@ -2183,7 +2183,7 @@ function edd_recapture_callback($args) {
2183
  </p>
2184
  <?php else : ?>
2185
  <p>
2186
- <?php printf( __( '%sComplete your connection to Recapture%s', 'easy-digital-downloads' ), '<a href="' . admin_url( 'admin.php?page=recapture' ) . '">', '</a>' ); ?>
2187
  </p>
2188
  <?php endif; ?>
2189
  </div>
@@ -2266,7 +2266,7 @@ function edd_tax_rates_callback($args) {
2266
  ) );
2267
  } else {
2268
  echo EDD()->html->text( array(
2269
- 'name' => 'tax_rates[' . edd_sanitize_key( $key ) . '][state]', $rate['state'],
2270
  'value' => ! empty( $rate['state'] ) ? $rate['state'] : '',
2271
  ) );
2272
  }
@@ -2368,7 +2368,7 @@ if ( ! function_exists( 'edd_license_key_callback' ) ) {
2368
  $messages[] = sprintf(
2369
  __( 'Your license key expired on %s. Please <a href="%s" target="_blank">renew your license key</a>.', 'easy-digital-downloads' ),
2370
  date_i18n( get_option( 'date_format' ), strtotime( $license->expires, current_time( 'timestamp' ) ) ),
2371
- 'https://easydigitaldownloads.com/checkout/?edd_license_key=' . $value . '&utm_campaign=admin&utm_source=licenses&utm_medium=expired'
2372
  );
2373
 
2374
  $license_status = 'license-' . $class . '-notice';
@@ -2507,7 +2507,7 @@ if ( ! function_exists( 'edd_license_key_callback' ) ) {
2507
  $class .= ' ' . edd_sanitize_html_class( $args['field_class'] );
2508
 
2509
  $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
2510
- $html = '<input type="password" autocomplete="off" class="' . sanitize_html_class( $size ) . '-text" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
2511
 
2512
  if ( ( is_object( $license ) && ! empty( $license->license ) && 'valid' == $license->license ) || 'valid' == $license ) {
2513
  $html .= '<input type="submit" class="button-secondary" name="' . $args['id'] . '_deactivate" value="' . __( 'Deactivate License', 'easy-digital-downloads' ) . '"/>';
@@ -2518,8 +2518,8 @@ if ( ! function_exists( 'edd_license_key_callback' ) ) {
2518
  if ( ! empty( $messages ) ) {
2519
  foreach( $messages as $message ) {
2520
 
2521
- $html .= '<div class="edd-license-data edd-license-' . $class . ' ' . $license_status . '">';
2522
- $html .= '<p>' . $message . '</p>';
2523
  $html .= '</div>';
2524
 
2525
  }
344
  'name' => __( 'Allow Usage Tracking?', 'easy-digital-downloads' ),
345
  'desc' => sprintf(
346
  __( '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' ),
347
+ esc_url( 'https://easydigitaldownloads.com/downloads/?utm_source=' . substr( md5( get_bloginfo( 'name' ) ), 0, 10 ) . '&utm_medium=admin&utm_term=settings&utm_campaign=EDDUsageTracking' )
348
  ),
349
  'type' => 'checkbox',
350
  ),
924
  'id' => 'show_privacy_policy_on_checkout',
925
  'name' => __( 'Show the Privacy Policy on checkout', 'easy-digital-downloads' ),
926
  'desc' =>
927
+ __( 'Display your Privacy Policy on checkout.', 'easy-digital-downloads' ) . ' <a href="' . esc_url( admin_url( 'options-privacy.php' ) ) . '">' . __( 'Set your Privacy Policy here', 'easy-digital-downloads' ) .'</a>.' .
928
  '<p>' . sprintf( __( 'Need help creating a Privacy Policy? We recommend %sTermageddon%s.', 'easy-digital-downloads' ), '<a href="https://termageddon.com/i/easy-digital-downloads-edd-termageddon-promotion/" target="_blank" rel="noopener noreferrer">', '</a>' ) . '</p>',
929
  'type' => 'checkbox',
930
  ),
1684
  'utm_campaign' => 'admin',
1685
  );
1686
  $url = esc_url( add_query_arg( $url_args, 'https://easydigitaldownloads.com/downloads/category/extensions/gateways/' ) );
1687
+ $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' ), esc_url( $url ) ) . '</p>';
1688
 
1689
  echo apply_filters( 'edd_after_setting_output', $html, $args );
1690
  }
2183
  </p>
2184
  <?php else : ?>
2185
  <p>
2186
+ <?php printf( __( '%sComplete your connection to Recapture%s', 'easy-digital-downloads' ), '<a href="' . esc_url( admin_url( 'admin.php?page=recapture' ) ) . '">', '</a>' ); ?>
2187
  </p>
2188
  <?php endif; ?>
2189
  </div>
2266
  ) );
2267
  } else {
2268
  echo EDD()->html->text( array(
2269
+ 'name' => 'tax_rates[' . edd_sanitize_key( $key ) . '][state]',
2270
  'value' => ! empty( $rate['state'] ) ? $rate['state'] : '',
2271
  ) );
2272
  }
2368
  $messages[] = sprintf(
2369
  __( 'Your license key expired on %s. Please <a href="%s" target="_blank">renew your license key</a>.', 'easy-digital-downloads' ),
2370
  date_i18n( get_option( 'date_format' ), strtotime( $license->expires, current_time( 'timestamp' ) ) ),
2371
+ esc_url( 'https://easydigitaldownloads.com/checkout/?edd_license_key=' . sanitize_key( $value ) . '&utm_campaign=admin&utm_source=licenses&utm_medium=expired' )
2372
  );
2373
 
2374
  $license_status = 'license-' . $class . '-notice';
2507
  $class .= ' ' . edd_sanitize_html_class( $args['field_class'] );
2508
 
2509
  $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
2510
+ $html = '<input type="password" autocomplete="off" class="' . sanitize_html_class( $size ) . '-text" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" name="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']" value="' . sanitize_key( $value ) . '"/>';
2511
 
2512
  if ( ( is_object( $license ) && ! empty( $license->license ) && 'valid' == $license->license ) || 'valid' == $license ) {
2513
  $html .= '<input type="submit" class="button-secondary" name="' . $args['id'] . '_deactivate" value="' . __( 'Deactivate License', 'easy-digital-downloads' ) . '"/>';
2518
  if ( ! empty( $messages ) ) {
2519
  foreach( $messages as $message ) {
2520
 
2521
+ $html .= '<div class="edd-license-data edd-license-' . esc_attr( $class ) . ' ' . esc_attr( $license_status ) . '">';
2522
+ $html .= '<p>' . wp_kses_post( $message ) . '</p>';
2523
  $html .= '</div>';
2524
 
2525
  }
includes/admin/thickbox.php CHANGED
@@ -109,7 +109,7 @@ function edd_admin_footer_for_thickbox() {
109
  <?php
110
  $styles = array( 'button', 'text link' );
111
  foreach ( $styles as $style ) {
112
- echo '<option value="' . $style . '">' . $style . '</option>';
113
  }
114
  ?>
115
  </select>
@@ -122,7 +122,7 @@ function edd_admin_footer_for_thickbox() {
122
  <option value=""><?php _e('Choose a button color','easy-digital-downloads' ); ?></option>
123
  <?php
124
  foreach ( $colors as $key => $color ) {
125
- echo '<option value="' . str_replace( ' ', '_', $key ) . '">' . $color['label'] . '</option>';
126
  }
127
  ?>
128
  </select>
@@ -132,7 +132,7 @@ function edd_admin_footer_for_thickbox() {
132
  <input type="text" class="regular-text" id="edd-text" value="" placeholder="<?php _e( 'Link text . . .', 'easy-digital-downloads' ); ?>"/>
133
  </div>
134
  <p class="submit">
135
- <input type="button" id="edd-insert-download" class="button-primary" value="<?php echo sprintf( __( 'Insert %s', 'easy-digital-downloads' ), edd_get_label_singular() ); ?>" onclick="insertDownload();" />
136
  <a id="edd-cancel-download-insert" class="button-secondary" onclick="tb_remove();"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
137
  </p>
138
  </div>
109
  <?php
110
  $styles = array( 'button', 'text link' );
111
  foreach ( $styles as $style ) {
112
+ echo '<option value="' . esc_attr( $style ) . '">' . esc_html( $style ) . '</option>';
113
  }
114
  ?>
115
  </select>
122
  <option value=""><?php _e('Choose a button color','easy-digital-downloads' ); ?></option>
123
  <?php
124
  foreach ( $colors as $key => $color ) {
125
+ echo '<option value="' . esc_attr( str_replace( ' ', '_', $key ) ) . '">' . esc_html( $color['label'] ) . '</option>';
126
  }
127
  ?>
128
  </select>
132
  <input type="text" class="regular-text" id="edd-text" value="" placeholder="<?php _e( 'Link text . . .', 'easy-digital-downloads' ); ?>"/>
133
  </div>
134
  <p class="submit">
135
+ <input type="button" id="edd-insert-download" class="button-primary" value="<?php printf( esc_html__( 'Insert %s', 'easy-digital-downloads' ), esc_html( edd_get_label_singular() ) ); ?>" onclick="insertDownload();" />
136
  <a id="edd-cancel-download-insert" class="button-secondary" onclick="tb_remove();"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
137
  </p>
138
  </div>
includes/admin/tools.php CHANGED
@@ -99,13 +99,13 @@ function edd_tools_banned_emails_display() {
99
  do_action( 'edd_tools_banned_emails_before' );
100
  ?>
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" />
@@ -206,11 +206,11 @@ function edd_tools_clear_doing_upgrade_display() {
206
  do_action( 'edd_tools_clear_doing_upgrade_before' );
207
  ?>
208
  <div class="postbox">
209
- <h3><span><?php _e( 'Clear Incomplete Upgrade Notice', 'easy-digital-downloads' ); ?></span></h3>
210
  <div class="inside">
211
- <p><?php _e( 'Sometimes a database upgrade notice may not be cleared after an upgrade is completed due to conflicts with other extensions or other minor issues.', 'easy-digital-downloads' ); ?></p>
212
- <p><?php _e( 'If you\'re certain these upgrades have been completed, you can clear these upgrade notices by clicking the button below. If you have any questions about this, please contact the Easy Digital Downloads support team and we\'ll be happy to help.', 'easy-digital-downloads' ); ?></p>
213
- <form method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ); ?>">
214
  <p>
215
  <input type="hidden" name="edd_action" value="clear_doing_upgrade" />
216
  <?php wp_nonce_field( 'edd_clear_upgrades_nonce', 'edd_clear_upgrades_nonce' ); ?>
@@ -275,10 +275,10 @@ function edd_tools_betas_display() {
275
  ?>
276
 
277
  <div class="postbox edd-beta-support">
278
- <h3><span><?php _e( 'Enable Beta Versions', 'easy-digital-downloads' ); ?></span></h3>
279
  <div class="inside">
280
- <p><?php _e( 'Checking any of the below checkboxes will opt you in to receive pre-release update notifications. You can opt-out at any time. Pre-release updates do not install automatically, you will still have the opportunity to ignore update notifications.', 'easy-digital-downloads' ); ?></p>
281
- <form method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=betas' ); ?>">
282
  <table class="form-table edd-beta-support">
283
  <tbody>
284
  <?php foreach( $has_beta as $slug => $product ) : ?>
@@ -286,8 +286,8 @@ function edd_tools_betas_display() {
286
  <?php $checked = edd_extension_has_beta_support( $slug ); ?>
287
  <th scope="row"><?php echo esc_html( $product ); ?></th>
288
  <td>
289
- <input type="checkbox" name="enabled_betas[<?php echo esc_attr( $slug ); ?>]" id="enabled_betas[<?php echo esc_attr( $slug ); ?>]"<?php echo checked( $checked, true, false ); ?> value="1" />
290
- <label for="enabled_betas[<?php echo esc_attr( $slug ); ?>]"><?php printf( __( 'Get updates for pre-release versions of %s', 'easy-digital-downloads' ), $product ); ?></label>
291
  </td>
292
  </tr>
293
  <?php endforeach; ?>
@@ -933,8 +933,8 @@ function edd_tools_import_export_display() {
933
  <h3><span><?php _e( 'Export Settings', 'easy-digital-downloads' ); ?></span></h3>
934
  <div class="inside">
935
  <p><?php _e( 'Export the Easy Digital Downloads settings for this site as a .json file. This allows you to easily import the configuration into another site.', 'easy-digital-downloads' ); ?></p>
936
- <p><?php printf( __( 'To export shop data (purchases, customers, etc), visit the <a href="%s">Reports</a> page.', 'easy-digital-downloads' ), admin_url( 'edit.php?post_type=download&page=edd-reports&tab=export' ) ); ?></p>
937
- <form method="post" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=import_export' ); ?>">
938
  <p><input type="hidden" name="edd_action" value="export_settings" /></p>
939
  <p>
940
  <?php wp_nonce_field( 'edd_export_nonce', 'edd_export_nonce' ); ?>
@@ -948,7 +948,7 @@ function edd_tools_import_export_display() {
948
  <h3><span><?php _e( 'Import Settings', 'easy-digital-downloads' ); ?></span></h3>
949
  <div class="inside">
950
  <p><?php _e( 'Import the Easy Digital Downloads settings from a .json file. This file can be obtained by exporting the settings on another site using the form above.', 'easy-digital-downloads' ); ?></p>
951
- <form method="post" enctype="multipart/form-data" action="<?php echo admin_url( 'edit.php?post_type=download&page=edd-tools&tab=import_export' ); ?>">
952
  <p>
953
  <input type="file" name="import_file"/>
954
  </p>
@@ -1054,7 +1054,8 @@ function edd_tools_import_export_process_import() {
1054
 
1055
 
1056
 
1057
- wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-tools&edd-message=settings-imported' ) ); exit;
 
1058
 
1059
  }
1060
  add_action( 'edd_import_settings', 'edd_tools_import_export_process_import' );
@@ -1127,7 +1128,7 @@ function edd_handle_submit_debug_log() {
1127
  // Clear the debug log.
1128
  $edd_logs->clear_log_file();
1129
 
1130
- wp_safe_redirect( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=debug_log' ) );
1131
  exit;
1132
 
1133
  }
99
  do_action( 'edd_tools_banned_emails_before' );
100
  ?>
101
  <div class="postbox">
102
+ <h3><span><?php esc_html_e( 'Banned Emails', 'easy-digital-downloads' ); ?></span></h3>
103
  <div class="inside">
104
+ <p><?php esc_html_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 esc_url( 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 esc_textarea( implode( "\n", edd_get_banned_emails() ) ); ?></textarea>
108
+ <span class="description"><?php esc_html_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" />
206
  do_action( 'edd_tools_clear_doing_upgrade_before' );
207
  ?>
208
  <div class="postbox">
209
+ <h3><span><?php esc_html_e( 'Clear Incomplete Upgrade Notice', 'easy-digital-downloads' ); ?></span></h3>
210
  <div class="inside">
211
+ <p><?php esc_html_e( 'Sometimes a database upgrade notice may not be cleared after an upgrade is completed due to conflicts with other extensions or other minor issues.', 'easy-digital-downloads' ); ?></p>
212
+ <p><?php esc_html_e( 'If you\'re certain these upgrades have been completed, you can clear these upgrade notices by clicking the button below. If you have any questions about this, please contact the Easy Digital Downloads support team and we\'ll be happy to help.', 'easy-digital-downloads' ); ?></p>
213
+ <form method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=general' ) ); ?>">
214
  <p>
215
  <input type="hidden" name="edd_action" value="clear_doing_upgrade" />
216
  <?php wp_nonce_field( 'edd_clear_upgrades_nonce', 'edd_clear_upgrades_nonce' ); ?>
275
  ?>
276
 
277
  <div class="postbox edd-beta-support">
278
+ <h3><span><?php esc_html_e( 'Enable Beta Versions', 'easy-digital-downloads' ); ?></span></h3>
279
  <div class="inside">
280
+ <p><?php esc_html_e( 'Checking any of the below checkboxes will opt you in to receive pre-release update notifications. You can opt-out at any time. Pre-release updates do not install automatically, you will still have the opportunity to ignore update notifications.', 'easy-digital-downloads' ); ?></p>
281
+ <form method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=betas' ) ); ?>">
282
  <table class="form-table edd-beta-support">
283
  <tbody>
284
  <?php foreach( $has_beta as $slug => $product ) : ?>
286
  <?php $checked = edd_extension_has_beta_support( $slug ); ?>
287
  <th scope="row"><?php echo esc_html( $product ); ?></th>
288
  <td>
289
+ <input type="checkbox" name="enabled_betas[<?php echo esc_attr( $slug ); ?>]" id="enabled_betas[<?php echo esc_attr( $slug ); ?>]"<?php checked( $checked, true ); ?> value="1" />
290
+ <label for="enabled_betas[<?php echo esc_attr( $slug ); ?>]"><?php printf( esc_html__( 'Get updates for pre-release versions of %s', 'easy-digital-downloads' ), $product ); ?></label>
291
  </td>
292
  </tr>
293
  <?php endforeach; ?>
933
  <h3><span><?php _e( 'Export Settings', 'easy-digital-downloads' ); ?></span></h3>
934
  <div class="inside">
935
  <p><?php _e( 'Export the Easy Digital Downloads settings for this site as a .json file. This allows you to easily import the configuration into another site.', 'easy-digital-downloads' ); ?></p>
936
+ <p><?php printf( __( 'To export shop data (purchases, customers, etc), visit the <a href="%s">Reports</a> page.', 'easy-digital-downloads' ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-reports&tab=export' ) ) ); ?></p>
937
+ <form method="post" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=import_export' ) ); ?>">
938
  <p><input type="hidden" name="edd_action" value="export_settings" /></p>
939
  <p>
940
  <?php wp_nonce_field( 'edd_export_nonce', 'edd_export_nonce' ); ?>
948
  <h3><span><?php _e( 'Import Settings', 'easy-digital-downloads' ); ?></span></h3>
949
  <div class="inside">
950
  <p><?php _e( 'Import the Easy Digital Downloads settings from a .json file. This file can be obtained by exporting the settings on another site using the form above.', 'easy-digital-downloads' ); ?></p>
951
+ <form method="post" enctype="multipart/form-data" action="<?php echo esc_url( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=import_export' ) ); ?>">
952
  <p>
953
  <input type="file" name="import_file"/>
954
  </p>
1054
 
1055
 
1056
 
1057
+ wp_safe_redirect( esc_url_raw( admin_url( 'edit.php?post_type=download&page=edd-tools&edd-message=settings-imported' ) ) );
1058
+ exit;
1059
 
1060
  }
1061
  add_action( 'edd_import_settings', 'edd_tools_import_export_process_import' );
1128
  // Clear the debug log.
1129
  $edd_logs->clear_log_file();
1130
 
1131
+ wp_safe_redirect( esc_url_raw( admin_url( 'edit.php?post_type=download&page=edd-tools&tab=debug_log' ) ) );
1132
  exit;
1133
 
1134
  }
includes/admin/tracking.php CHANGED
@@ -198,7 +198,8 @@ class EDD_Tracking {
198
 
199
  edd_delete_option( 'allow_tracking' );
200
  update_option( 'edd_tracking_notice', '1' );
201
- wp_redirect( remove_query_arg( 'edd_action' ) ); exit;
 
202
  }
203
 
204
  /**
@@ -256,9 +257,9 @@ class EDD_Tracking {
256
  $optout_url = add_query_arg( 'edd_action', 'opt_out_of_tracking' );
257
 
258
  $source = substr( md5( get_bloginfo( 'name' ) ), 0, 10 );
259
- $extensions_url = 'https://easydigitaldownloads.com/downloads/?utm_source=' . $source . '&utm_medium=admin&utm_term=notice&utm_campaign=EDDUsageTracking';
260
  echo '<div class="updated"><p>';
261
- 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 );
262
  echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-secondary">' . __( 'Allow', 'easy-digital-downloads' ) . '</a>';
263
  echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary">' . __( 'Do not allow', 'easy-digital-downloads' ) . '</a>';
264
  echo '</p></div>';
198
 
199
  edd_delete_option( 'allow_tracking' );
200
  update_option( 'edd_tracking_notice', '1' );
201
+ wp_safe_redirect( esc_url_raw( remove_query_arg( 'edd_action' ) ) );
202
+ exit;
203
  }
204
 
205
  /**
257
  $optout_url = add_query_arg( 'edd_action', 'opt_out_of_tracking' );
258
 
259
  $source = substr( md5( get_bloginfo( 'name' ) ), 0, 10 );
260
+ $extensions_url = 'https://easydigitaldownloads.com/downloads/?utm_source=' . sanitize_key( $source ) . '&utm_medium=admin&utm_term=notice&utm_campaign=EDDUsageTracking';
261
  echo '<div class="updated"><p>';
262
+ 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' ), esc_url( $extensions_url ) );
263
  echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-secondary">' . __( 'Allow', 'easy-digital-downloads' ) . '</a>';
264
  echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary">' . __( 'Do not allow', 'easy-digital-downloads' ) . '</a>';
265
  echo '</p></div>';
includes/admin/upgrades/upgrade-functions.php CHANGED
@@ -82,7 +82,7 @@ function edd_show_upgrade_notices() {
82
 
83
  // The payment history needs updated for version 1.2
84
  $url = add_query_arg( 'edd-action', 'upgrade_payments' );
85
- $upgrade_notice = sprintf( __( 'The Payment History needs to be updated. %s', 'easy-digital-downloads' ), '<a href="' . wp_nonce_url( $url, 'edd_upgrade_payments_nonce' ) . '">' . __( 'Click to Upgrade', 'easy-digital-downloads' ) . '</a>' );
86
  add_settings_error( 'edd-notices', 'edd-payments-upgrade', $upgrade_notice, 'error' );
87
  }
88
 
@@ -136,7 +136,7 @@ function edd_show_upgrade_notices() {
136
  if ( get_option( 'edd_upgrade_sequential' ) && edd_get_payments( array( 'fields' => 'ids' ) ) ) {
137
  printf(
138
  '<div class="updated"><p>' . __( 'Easy Digital Downloads needs to upgrade past orders to make them sequential. <a href="%s">Start the order numbers upgrade</a>.', 'easy-digital-downloads' ) . '</p></div>',
139
- admin_url( 'index.php?page=edd-upgrades&edd-upgrade=upgrade_sequential_payment_numbers' )
140
  );
141
  }
142
 
@@ -584,11 +584,12 @@ function edd_v20_upgrade_sequential_payment_numbers() {
584
  $redirect = add_query_arg( array(
585
  'page' => 'edd-upgrades',
586
  'edd-upgrade' => 'upgrade_sequential_payment_numbers',
587
- 'step' => $step,
588
- 'custom' => $number,
589
- 'total' => $total
590
  ), admin_url( 'index.php' ) );
591
- wp_redirect( $redirect ); exit;
 
592
 
593
  } else {
594
 
@@ -597,7 +598,8 @@ function edd_v20_upgrade_sequential_payment_numbers() {
597
  delete_option( 'edd_upgrade_sequential' );
598
  delete_option( 'edd_doing_upgrade' );
599
 
600
- wp_redirect( admin_url() ); exit;
 
601
  }
602
 
603
  }
@@ -699,9 +701,10 @@ function edd_v21_upgrade_customers_db() {
699
  $redirect = add_query_arg( array(
700
  'page' => 'edd-upgrades',
701
  'edd-upgrade' => 'upgrade_customers_db',
702
- 'step' => $step
703
  ), admin_url( 'index.php' ) );
704
- wp_redirect( $redirect ); exit;
 
705
 
706
  } else {
707
 
@@ -710,7 +713,8 @@ function edd_v21_upgrade_customers_db() {
710
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
711
  delete_option( 'edd_doing_upgrade' );
712
 
713
- wp_redirect( admin_url() ); exit;
 
714
  }
715
 
716
  }
@@ -742,7 +746,8 @@ function edd_v226_upgrade_payments_price_logs_db() {
742
  // We had no variable priced products, so go ahead and just complete
743
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
744
  delete_option( 'edd_doing_upgrade' );
745
- wp_redirect( admin_url() ); exit;
 
746
  }
747
  }
748
  $payment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'edd_payment' ORDER BY post_date DESC LIMIT %d,%d;", $offset, $number ) );
@@ -801,14 +806,16 @@ function edd_v226_upgrade_payments_price_logs_db() {
801
  $redirect = add_query_arg( array(
802
  'page' => 'edd-upgrades',
803
  'edd-upgrade' => 'upgrade_payments_price_logs_db',
804
- 'step' => $step
805
  ), admin_url( 'index.php' ) );
806
- wp_redirect( $redirect ); exit;
 
807
  } else {
808
  // No more payments found, finish up
809
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
810
  delete_option( 'edd_doing_upgrade' );
811
- wp_redirect( admin_url() ); exit;
 
812
  }
813
  }
814
  add_action( 'edd_upgrade_payments_price_logs_db', 'edd_v226_upgrade_payments_price_logs_db' );
@@ -843,7 +850,8 @@ function edd_v23_upgrade_payment_taxes() {
843
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
844
  edd_set_upgrade_complete( 'upgrade_payment_taxes' );
845
  delete_option( 'edd_doing_upgrade' );
846
- wp_redirect( admin_url() ); exit;
 
847
  }
848
  }
849
 
@@ -871,17 +879,19 @@ function edd_v23_upgrade_payment_taxes() {
871
  $redirect = add_query_arg( array(
872
  'page' => 'edd-upgrades',
873
  'edd-upgrade' => 'upgrade_payment_taxes',
874
- 'step' => $step,
875
- 'number' => $number,
876
- 'total' => $total
877
  ), admin_url( 'index.php' ) );
878
- wp_redirect( $redirect ); exit;
 
879
  } else {
880
  // No more payments found, finish up
881
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
882
  edd_set_upgrade_complete( 'upgrade_payment_taxes' );
883
  delete_option( 'edd_doing_upgrade' );
884
- wp_redirect( admin_url() ); exit;
 
885
  }
886
  }
887
  add_action( 'edd_upgrade_payment_taxes', 'edd_v23_upgrade_payment_taxes' );
@@ -919,7 +929,8 @@ function edd_v23_upgrade_customer_purchases() {
919
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
920
  edd_set_upgrade_complete( 'upgrade_customer_payments_association' );
921
  delete_option( 'edd_doing_upgrade' );
922
- wp_redirect( admin_url() ); exit;
 
923
  }
924
  }
925
 
@@ -996,11 +1007,12 @@ function edd_v23_upgrade_customer_purchases() {
996
  $redirect = add_query_arg( array(
997
  'page' => 'edd-upgrades',
998
  'edd-upgrade' => 'upgrade_customer_payments_association',
999
- 'step' => $step,
1000
- 'number' => $number,
1001
- 'total' => $total
1002
  ), admin_url( 'index.php' ) );
1003
- wp_redirect( $redirect ); exit;
 
1004
  } else {
1005
 
1006
  // No more customers found, finish up
@@ -1009,7 +1021,8 @@ function edd_v23_upgrade_customer_purchases() {
1009
  edd_set_upgrade_complete( 'upgrade_customer_payments_association' );
1010
  delete_option( 'edd_doing_upgrade' );
1011
 
1012
- wp_redirect( admin_url() ); exit;
 
1013
  }
1014
  }
1015
  add_action( 'edd_upgrade_customer_payments_association', 'edd_v23_upgrade_customer_purchases' );
@@ -1047,7 +1060,8 @@ function edd_upgrade_user_api_keys() {
1047
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
1048
  edd_set_upgrade_complete( 'upgrade_user_api_keys' );
1049
  delete_option( 'edd_doing_upgrade' );
1050
- wp_redirect( admin_url() ); exit;
 
1051
  }
1052
  }
1053
 
@@ -1081,11 +1095,12 @@ function edd_upgrade_user_api_keys() {
1081
  $redirect = add_query_arg( array(
1082
  'page' => 'edd-upgrades',
1083
  'edd-upgrade' => 'upgrade_user_api_keys',
1084
- 'step' => $step,
1085
- 'number' => $number,
1086
- 'total' => $total
1087
  ), admin_url( 'index.php' ) );
1088
- wp_redirect( $redirect ); exit;
 
1089
  } else {
1090
 
1091
  // No more customers found, finish up
@@ -1094,7 +1109,8 @@ function edd_upgrade_user_api_keys() {
1094
  edd_set_upgrade_complete( 'upgrade_user_api_keys' );
1095
  delete_option( 'edd_doing_upgrade' );
1096
 
1097
- wp_redirect( admin_url() ); exit;
 
1098
  }
1099
  }
1100
  add_action( 'edd_upgrade_user_api_keys', 'edd_upgrade_user_api_keys' );
@@ -1149,10 +1165,11 @@ function edd_remove_refunded_sale_logs() {
1149
  $redirect = add_query_arg( array(
1150
  'page' => 'edd-upgrades',
1151
  'edd-upgrade' => 'remove_refunded_sale_logs',
1152
- 'step' => $step,
1153
- 'total' => $total
1154
  ), admin_url( 'index.php' ) );
1155
- wp_redirect( $redirect ); exit;
 
1156
 
1157
  } else {
1158
 
@@ -1162,7 +1179,8 @@ function edd_remove_refunded_sale_logs() {
1162
  edd_set_upgrade_complete( 'remove_refunded_sale_logs' );
1163
  delete_option( 'edd_doing_upgrade' );
1164
 
1165
- wp_redirect( admin_url() ); exit;
 
1166
  }
1167
  }
1168
  add_action( 'edd_remove_refunded_sale_logs', 'edd_remove_refunded_sale_logs' );
82
 
83
  // The payment history needs updated for version 1.2
84
  $url = add_query_arg( 'edd-action', 'upgrade_payments' );
85
+ $upgrade_notice = sprintf( __( 'The Payment History needs to be updated. %s', 'easy-digital-downloads' ), '<a href="' . esc_url( wp_nonce_url( $url, 'edd_upgrade_payments_nonce' ) ) . '">' . __( 'Click to Upgrade', 'easy-digital-downloads' ) . '</a>' );
86
  add_settings_error( 'edd-notices', 'edd-payments-upgrade', $upgrade_notice, 'error' );
87
  }
88
 
136
  if ( get_option( 'edd_upgrade_sequential' ) && edd_get_payments( array( 'fields' => 'ids' ) ) ) {
137
  printf(
138
  '<div class="updated"><p>' . __( 'Easy Digital Downloads needs to upgrade past orders to make them sequential. <a href="%s">Start the order numbers upgrade</a>.', 'easy-digital-downloads' ) . '</p></div>',
139
+ esc_url( admin_url( 'index.php?page=edd-upgrades&edd-upgrade=upgrade_sequential_payment_numbers' ) )
140
  );
141
  }
142
 
584
  $redirect = add_query_arg( array(
585
  'page' => 'edd-upgrades',
586
  'edd-upgrade' => 'upgrade_sequential_payment_numbers',
587
+ 'step' => urlencode( $step ),
588
+ 'custom' => urlencode( $number ),
589
+ 'total' => urlencode( $total ),
590
  ), admin_url( 'index.php' ) );
591
+ wp_safe_redirect( esc_url_raw( $redirect ) );
592
+ exit;
593
 
594
  } else {
595
 
598
  delete_option( 'edd_upgrade_sequential' );
599
  delete_option( 'edd_doing_upgrade' );
600
 
601
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
602
+ exit;
603
  }
604
 
605
  }
701
  $redirect = add_query_arg( array(
702
  'page' => 'edd-upgrades',
703
  'edd-upgrade' => 'upgrade_customers_db',
704
+ 'step' => urlencode( $step ),
705
  ), admin_url( 'index.php' ) );
706
+ wp_safe_redirect( esc_url_raw( $redirect ) );
707
+ exit;
708
 
709
  } else {
710
 
713
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
714
  delete_option( 'edd_doing_upgrade' );
715
 
716
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
717
+ exit;
718
  }
719
 
720
  }
746
  // We had no variable priced products, so go ahead and just complete
747
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
748
  delete_option( 'edd_doing_upgrade' );
749
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
750
+ exit;
751
  }
752
  }
753
  $payment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'edd_payment' ORDER BY post_date DESC LIMIT %d,%d;", $offset, $number ) );
806
  $redirect = add_query_arg( array(
807
  'page' => 'edd-upgrades',
808
  'edd-upgrade' => 'upgrade_payments_price_logs_db',
809
+ 'step' => urlencode( $step ),
810
  ), admin_url( 'index.php' ) );
811
+ wp_safe_redirect( esc_url_raw( $redirect ) );
812
+ exit;
813
  } else {
814
  // No more payments found, finish up
815
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
816
  delete_option( 'edd_doing_upgrade' );
817
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
818
+ exit;
819
  }
820
  }
821
  add_action( 'edd_upgrade_payments_price_logs_db', 'edd_v226_upgrade_payments_price_logs_db' );
850
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
851
  edd_set_upgrade_complete( 'upgrade_payment_taxes' );
852
  delete_option( 'edd_doing_upgrade' );
853
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
854
+ exit;
855
  }
856
  }
857
 
879
  $redirect = add_query_arg( array(
880
  'page' => 'edd-upgrades',
881
  'edd-upgrade' => 'upgrade_payment_taxes',
882
+ 'step' => urlencode( $step ),
883
+ 'number' => urlencode( $number ),
884
+ 'total' => urlencode( $total ),
885
  ), admin_url( 'index.php' ) );
886
+ wp_safe_redirect( esc_url_raw( $redirect ) );
887
+ exit;
888
  } else {
889
  // No more payments found, finish up
890
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
891
  edd_set_upgrade_complete( 'upgrade_payment_taxes' );
892
  delete_option( 'edd_doing_upgrade' );
893
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
894
+ exit;
895
  }
896
  }
897
  add_action( 'edd_upgrade_payment_taxes', 'edd_v23_upgrade_payment_taxes' );
929
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
930
  edd_set_upgrade_complete( 'upgrade_customer_payments_association' );
931
  delete_option( 'edd_doing_upgrade' );
932
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
933
+ exit;
934
  }
935
  }
936
 
1007
  $redirect = add_query_arg( array(
1008
  'page' => 'edd-upgrades',
1009
  'edd-upgrade' => 'upgrade_customer_payments_association',
1010
+ 'step' => urlencode( $step ),
1011
+ 'number' => urlencode( $number ),
1012
+ 'total' => urlencode( $total ),
1013
  ), admin_url( 'index.php' ) );
1014
+ wp_safe_redirect( esc_url_raw( $redirect ) );
1015
+ exit;
1016
  } else {
1017
 
1018
  // No more customers found, finish up
1021
  edd_set_upgrade_complete( 'upgrade_customer_payments_association' );
1022
  delete_option( 'edd_doing_upgrade' );
1023
 
1024
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
1025
+ exit;
1026
  }
1027
  }
1028
  add_action( 'edd_upgrade_customer_payments_association', 'edd_v23_upgrade_customer_purchases' );
1060
  update_option( 'edd_version', preg_replace( '/[^0-9.].*/', '', EDD_VERSION ) );
1061
  edd_set_upgrade_complete( 'upgrade_user_api_keys' );
1062
  delete_option( 'edd_doing_upgrade' );
1063
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
1064
+ exit;
1065
  }
1066
  }
1067
 
1095
  $redirect = add_query_arg( array(
1096
  'page' => 'edd-upgrades',
1097
  'edd-upgrade' => 'upgrade_user_api_keys',
1098
+ 'step' => urlencode( $step ),
1099
+ 'number' => urlencode( $number ),
1100
+ 'total' => urlencode( $total ),
1101
  ), admin_url( 'index.php' ) );
1102
+ wp_safe_redirect( esc_url_raw( $redirect ) );
1103
+ exit;
1104
  } else {
1105
 
1106
  // No more customers found, finish up
1109
  edd_set_upgrade_complete( 'upgrade_user_api_keys' );
1110
  delete_option( 'edd_doing_upgrade' );
1111
 
1112
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
1113
+ exit;
1114
  }
1115
  }
1116
  add_action( 'edd_upgrade_user_api_keys', 'edd_upgrade_user_api_keys' );
1165
  $redirect = add_query_arg( array(
1166
  'page' => 'edd-upgrades',
1167
  'edd-upgrade' => 'remove_refunded_sale_logs',
1168
+ 'step' => urlencode( $step ),
1169
+ 'total' => urlencode( $total ),
1170
  ), admin_url( 'index.php' ) );
1171
+ wp_safe_redirect( esc_url_raw( $redirect ) );
1172
+ exit;
1173
 
1174
  } else {
1175
 
1179
  edd_set_upgrade_complete( 'remove_refunded_sale_logs' );
1180
  delete_option( 'edd_doing_upgrade' );
1181
 
1182
+ wp_safe_redirect( esc_url_raw( admin_url() ) );
1183
+ exit;
1184
  }
1185
  }
1186
  add_action( 'edd_remove_refunded_sale_logs', 'edd_remove_refunded_sale_logs' );
includes/ajax-functions.php CHANGED
@@ -79,7 +79,7 @@ function edd_test_ajax_works() {
79
  )
80
  );
81
 
82
- $ajax = wp_remote_post( edd_get_ajax_url(), $params );
83
  $works = true;
84
 
85
  if ( is_wp_error( $ajax ) ) {
@@ -396,7 +396,7 @@ function edd_ajax_remove_discount() {
396
 
397
  /**
398
  * Allow for custom remove discount code handling.
399
- *
400
  * @since 2.11.4
401
  */
402
  $return = apply_filters( 'edd_ajax_remove_discount_response', $return );
79
  )
80
  );
81
 
82
+ $ajax = wp_safe_remote_post( esc_url_raw( edd_get_ajax_url() ), $params );
83
  $works = true;
84
 
85
  if ( is_wp_error( $ajax ) ) {
396
 
397
  /**
398
  * Allow for custom remove discount code handling.
399
+ *
400
  * @since 2.11.4
401
  */
402
  $return = apply_filters( 'edd_ajax_remove_discount_response', $return );
includes/api/class-edd-api.php CHANGED
@@ -1999,24 +1999,36 @@ class EDD_API {
1999
  wp_die( sprintf( __( 'You do not have permission to %s API keys for this user', 'easy-digital-downloads' ), $process ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
2000
  }
2001
 
 
 
 
 
 
 
 
 
2002
  switch( $process ) {
2003
  case 'generate':
2004
  if( $this->generate_api_key( $user_id ) ) {
2005
  delete_transient( 'edd-total-api-keys' );
2006
- wp_redirect( add_query_arg( 'edd-message', 'api-key-generated', 'edit.php?post_type=download&page=edd-tools&tab=api_keys' ) ); exit();
 
2007
  } else {
2008
- wp_redirect( add_query_arg( 'edd-message', 'api-key-failed', 'edit.php?post_type=download&page=edd-tools&tab=api_keys' ) ); exit();
 
2009
  }
2010
  break;
2011
  case 'regenerate':
2012
  $this->generate_api_key( $user_id, true );
2013
  delete_transient( 'edd-total-api-keys' );
2014
- wp_redirect( add_query_arg( 'edd-message', 'api-key-regenerated', 'edit.php?post_type=download&page=edd-tools&tab=api_keys' ) ); exit();
 
2015
  break;
2016
  case 'revoke':
2017
  $this->revoke_api_key( $user_id );
2018
  delete_transient( 'edd-total-api-keys' );
2019
- wp_redirect( add_query_arg( 'edd-message', 'api-key-revoked', 'edit.php?post_type=download&page=edd-tools&tab=api_keys' ) ); exit();
 
2020
  break;
2021
  default;
2022
  break;
1999
  wp_die( sprintf( __( 'You do not have permission to %s API keys for this user', 'easy-digital-downloads' ), $process ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
2000
  }
2001
 
2002
+ $url = add_query_arg(
2003
+ array(
2004
+ 'post_type' => 'download',
2005
+ 'page' => 'edd-tools',
2006
+ 'tab' => 'api_keys',
2007
+ ),
2008
+ admin_url( 'edit.php' )
2009
+ );
2010
  switch( $process ) {
2011
  case 'generate':
2012
  if( $this->generate_api_key( $user_id ) ) {
2013
  delete_transient( 'edd-total-api-keys' );
2014
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'api-key-generated', $url ) ) );
2015
+ exit();
2016
  } else {
2017
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'api-key-failed', $url ) ) );
2018
+ exit();
2019
  }
2020
  break;
2021
  case 'regenerate':
2022
  $this->generate_api_key( $user_id, true );
2023
  delete_transient( 'edd-total-api-keys' );
2024
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'api-key-regenerated', $url ) ) );
2025
+ exit();
2026
  break;
2027
  case 'revoke':
2028
  $this->revoke_api_key( $user_id );
2029
  delete_transient( 'edd-total-api-keys' );
2030
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'edd-message', 'api-key-revoked', $url ) ) );
2031
+ exit();
2032
  break;
2033
  default;
2034
  break;
includes/cart/actions.php CHANGED
@@ -43,7 +43,8 @@ function edd_process_cart_endpoints() {
43
  $download_id = absint( $wp_query->query_vars['edd-add'] );
44
  $cart = edd_add_to_cart( $download_id, array() );
45
 
46
- wp_redirect( edd_get_checkout_uri() ); edd_die();
 
47
  }
48
 
49
  // Removes an item from the cart with a /edd-remove/# URL
@@ -51,7 +52,8 @@ function edd_process_cart_endpoints() {
51
  $cart_key = absint( $wp_query->query_vars['edd-remove'] );
52
  $cart = edd_remove_from_cart( $cart_key );
53
 
54
- wp_redirect( edd_get_checkout_uri() ); edd_die();
 
55
  }
56
  }
57
  add_action( 'template_redirect', 'edd_process_cart_endpoints', 100 );
@@ -90,10 +92,11 @@ function edd_process_add_to_cart( $data ) {
90
  $url_parameters = substr( $query_args, $query_part );
91
  }
92
 
93
- wp_redirect( edd_get_checkout_uri() . $url_parameters, 303 );
94
  edd_die();
95
  } else {
96
- wp_redirect( remove_query_arg( array( 'edd_action', 'download_id', 'edd_options' ) ) ); edd_die();
 
97
  }
98
  }
99
  add_action( 'edd_add_to_cart', 'edd_process_add_to_cart' );
@@ -119,7 +122,8 @@ function edd_process_remove_from_cart( $data ) {
119
  edd_remove_from_cart( $cart_key );
120
  }
121
 
122
- wp_redirect( remove_query_arg( array( 'edd_action', 'cart_item', 'nocache' ) ) ); edd_die();
 
123
  }
124
  add_action( 'edd_remove', 'edd_process_remove_from_cart' );
125
 
@@ -133,7 +137,8 @@ add_action( 'edd_remove', 'edd_process_remove_from_cart' );
133
  function edd_process_remove_fee_from_cart( $data ) {
134
  $fee = sanitize_text_field( $data['fee'] );
135
  EDD()->fees->remove_fee( $fee );
136
- wp_redirect( remove_query_arg( array( 'edd_action', 'fee', 'nocache' ) ) ); edd_die();
 
137
  }
138
  add_action( 'edd_remove_fee', 'edd_process_remove_fee_from_cart' );
139
 
@@ -148,7 +153,7 @@ function edd_process_collection_purchase( $data ) {
148
  $taxonomy = urldecode( $data['taxonomy'] );
149
  $terms = urldecode( $data['terms'] );
150
  $cart_items = edd_add_collection_to_cart( $taxonomy, $terms );
151
- wp_redirect( add_query_arg( 'added', '1', remove_query_arg( array( 'edd_action', 'taxonomy', 'terms' ) ) ) );
152
  edd_die();
153
  }
154
  add_action( 'edd_purchase_collection', 'edd_process_collection_purchase' );
@@ -182,7 +187,8 @@ function edd_process_cart_save( $data ) {
182
 
183
  $cart = edd_save_cart();
184
  if( ! $cart ) {
185
- wp_redirect( edd_get_checkout_uri() ); exit;
 
186
  }
187
 
188
  }
@@ -198,7 +204,8 @@ function edd_process_cart_restore( $data ) {
198
 
199
  $cart = edd_restore_cart();
200
  if( ! is_wp_error( $cart ) ) {
201
- wp_redirect( edd_get_checkout_uri() ); exit;
 
202
  }
203
 
204
  }
43
  $download_id = absint( $wp_query->query_vars['edd-add'] );
44
  $cart = edd_add_to_cart( $download_id, array() );
45
 
46
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
47
+ edd_die();
48
  }
49
 
50
  // Removes an item from the cart with a /edd-remove/# URL
52
  $cart_key = absint( $wp_query->query_vars['edd-remove'] );
53
  $cart = edd_remove_from_cart( $cart_key );
54
 
55
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
56
+ edd_die();
57
  }
58
  }
59
  add_action( 'template_redirect', 'edd_process_cart_endpoints', 100 );
92
  $url_parameters = substr( $query_args, $query_part );
93
  }
94
 
95
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() . $url_parameters ), 303 );
96
  edd_die();
97
  } else {
98
+ wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'edd_action', 'download_id', 'edd_options' ) ) ) );
99
+ edd_die();
100
  }
101
  }
102
  add_action( 'edd_add_to_cart', 'edd_process_add_to_cart' );
122
  edd_remove_from_cart( $cart_key );
123
  }
124
 
125
+ wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'edd_action', 'cart_item', 'nocache' ) ) ) );
126
+ edd_die();
127
  }
128
  add_action( 'edd_remove', 'edd_process_remove_from_cart' );
129
 
137
  function edd_process_remove_fee_from_cart( $data ) {
138
  $fee = sanitize_text_field( $data['fee'] );
139
  EDD()->fees->remove_fee( $fee );
140
+ wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'edd_action', 'fee', 'nocache' ) ) ) );
141
+ edd_die();
142
  }
143
  add_action( 'edd_remove_fee', 'edd_process_remove_fee_from_cart' );
144
 
153
  $taxonomy = urldecode( $data['taxonomy'] );
154
  $terms = urldecode( $data['terms'] );
155
  $cart_items = edd_add_collection_to_cart( $taxonomy, $terms );
156
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'added', '1', remove_query_arg( array( 'edd_action', 'taxonomy', 'terms' ) ) ) ) );
157
  edd_die();
158
  }
159
  add_action( 'edd_purchase_collection', 'edd_process_collection_purchase' );
187
 
188
  $cart = edd_save_cart();
189
  if( ! $cart ) {
190
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
191
+ exit;
192
  }
193
 
194
  }
204
 
205
  $cart = edd_restore_cart();
206
  if( ! is_wp_error( $cart ) ) {
207
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
208
+ exit;
209
  }
210
 
211
  }
includes/cart/class-edd-cart.php CHANGED
@@ -746,7 +746,7 @@ class EDD_Cart {
746
  $amount = edd_format_discount_rate( edd_get_discount_type( $discount_id ), edd_get_discount_amount( $discount_id ) );
747
 
748
  if ( $echo ) {
749
- echo $amount;
750
  }
751
 
752
  return $amount;
@@ -1147,14 +1147,14 @@ class EDD_Cart {
1147
  * @param bool $echo
1148
  * @return mixed|string|void
1149
  */
1150
- public function total( $echo ) {
1151
  $total = apply_filters( 'edd_cart_total', edd_currency_filter( edd_format_amount( $this->get_total() ) ) );
1152
 
1153
- if ( ! $echo ) {
1154
- return $total;
1155
  }
1156
 
1157
- echo $total;
1158
  }
1159
 
1160
  /**
@@ -1280,11 +1280,11 @@ class EDD_Cart {
1280
  $tax = max( $cart_tax, 0 );
1281
  $tax = apply_filters( 'edd_cart_tax', $cart_tax );
1282
 
1283
- if ( ! $echo ) {
1284
- return $tax;
1285
- } else {
1286
- echo $tax;
1287
  }
 
 
1288
  }
1289
 
1290
  /**
@@ -1393,9 +1393,10 @@ class EDD_Cart {
1393
  }
1394
 
1395
  $messages['edd_cart_save_successful'] = sprintf(
1396
- '<strong>%1$s</strong>: %2$s',
1397
  __( 'Success', 'easy-digital-downloads' ),
1398
- __( 'Cart saved successfully. You can restore your cart using this URL:', 'easy-digital-downloads' ) . ' ' . '<a href="' . edd_get_checkout_uri() . '?edd_action=restore_cart&edd_cart_token=' . $token . '">' . edd_get_checkout_uri() . '?edd_action=restore_cart&edd_cart_token=' . $token . '</a>'
 
1399
  );
1400
 
1401
  EDD()->session->set( 'edd_cart_messages', $messages );
746
  $amount = edd_format_discount_rate( edd_get_discount_type( $discount_id ), edd_get_discount_amount( $discount_id ) );
747
 
748
  if ( $echo ) {
749
+ echo esc_html( $amount );
750
  }
751
 
752
  return $amount;
1147
  * @param bool $echo
1148
  * @return mixed|string|void
1149
  */
1150
+ public function total( $echo = false ) {
1151
  $total = apply_filters( 'edd_cart_total', edd_currency_filter( edd_format_amount( $this->get_total() ) ) );
1152
 
1153
+ if ( $echo ) {
1154
+ echo esc_html( $total );
1155
  }
1156
 
1157
+ return $total;
1158
  }
1159
 
1160
  /**
1280
  $tax = max( $cart_tax, 0 );
1281
  $tax = apply_filters( 'edd_cart_tax', $cart_tax );
1282
 
1283
+ if ( $echo ) {
1284
+ echo esc_html( $tax );
 
 
1285
  }
1286
+
1287
+ return $tax;
1288
  }
1289
 
1290
  /**
1393
  }
1394
 
1395
  $messages['edd_cart_save_successful'] = sprintf(
1396
+ '<strong>%1$s</strong>: %2$s <a href="%3$s">%3$s</a>',
1397
  __( 'Success', 'easy-digital-downloads' ),
1398
+ __( 'Cart saved successfully. You can restore your cart using this URL:', 'easy-digital-downloads' ),
1399
+ esc_url( edd_get_checkout_uri() . '?edd_action=restore_cart&edd_cart_token=' . urlencode( $token ) )
1400
  );
1401
 
1402
  EDD()->session->set( 'edd_cart_messages', $messages );
includes/cart/functions.php CHANGED
@@ -320,11 +320,7 @@ function edd_get_cart_total( $discounts = false ) {
320
  * @return mixed|string|void
321
  */
322
  function edd_cart_total( $echo = true ) {
323
- if ( ! $echo ) {
324
- return EDD()->cart->total( $echo );
325
- }
326
-
327
- EDD()->cart->total( $echo );
328
  }
329
 
330
  /**
@@ -442,11 +438,7 @@ function edd_get_cart_tax_rate( $country = '', $state = '', $postal_code = '' )
442
  * @return string Total tax amount (if $echo is set to true)
443
  */
444
  function edd_cart_tax( $echo = false ) {
445
- if ( ! $echo ) {
446
- return EDD()->cart->tax( $echo );
447
- } else {
448
- EDD()->cart->tax( $echo );
449
- }
450
  }
451
 
452
  /**
320
  * @return mixed|string|void
321
  */
322
  function edd_cart_total( $echo = true ) {
323
+ return EDD()->cart->total( $echo );
 
 
 
 
324
  }
325
 
326
  /**
438
  * @return string Total tax amount (if $echo is set to true)
439
  */
440
  function edd_cart_tax( $echo = false ) {
441
+ return EDD()->cart->tax( $echo );
 
 
 
 
442
  }
443
 
444
  /**
includes/cart/template.php CHANGED
@@ -100,7 +100,7 @@ function edd_get_cart_item_template( $cart_key, $item, $ajax = false ) {
100
  $item = str_replace( '{cart_item_id}', absint( $cart_key ), $item );
101
  $item = str_replace( '{item_id}', absint( $id ), $item );
102
  $item = str_replace( '{item_quantity}', absint( $quantity ), $item );
103
- $item = str_replace( '{remove_url}', $remove_url, $item );
104
  $subtotal = '';
105
  if ( $ajax ){
106
  $subtotal = edd_currency_filter( edd_format_amount( edd_get_cart_subtotal() ) ) ;
@@ -179,7 +179,7 @@ function edd_save_cart_button() {
179
  $color = ( $color == 'inherit' ) ? '' : $color;
180
 
181
  if ( edd_is_cart_saved() ) : ?>
182
- <a class="edd-cart-saving-button edd-submit button<?php echo ' ' . $color; ?>" id="edd-restore-cart-button" href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => edd_get_cart_token() ) ) ); ?>"><?php _e( 'Restore Previous Cart', 'easy-digital-downloads' ); ?></a>
183
  <?php endif; ?>
184
  <a class="edd-cart-saving-button edd-submit button<?php echo ' ' . $color; ?>" id="edd-save-cart-button" href="<?php echo esc_url( add_query_arg( 'edd_action', 'save_cart' ) ); ?>"><?php _e( 'Save Cart', 'easy-digital-downloads' ); ?></a>
185
  <?php
@@ -193,11 +193,12 @@ function edd_save_cart_button() {
193
  */
194
  function edd_empty_cart_restore_cart_link() {
195
 
196
- if( edd_is_cart_saving_disabled() )
197
  return;
 
198
 
199
  if( edd_is_cart_saved() ) {
200
- echo ' <a class="edd-cart-saving-link" id="edd-restore-cart-link" href="' . esc_url( add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => edd_get_cart_token() ) ) ) . '">' . __( 'Restore Previous Cart.', 'easy-digital-downloads' ) . '</a>';
201
  }
202
  }
203
  add_action( 'edd_cart_empty', 'edd_empty_cart_restore_cart_link' );
@@ -273,7 +274,7 @@ function edd_show_added_to_cart_messages( $download_id ) {
273
 
274
  $alert = '<div class="edd_added_to_cart_alert">'
275
  . sprintf( __('You have successfully added %s to your shopping cart.','easy-digital-downloads' ), get_the_title( $download_id ) )
276
- . ' <a href="' . edd_get_checkout_uri() . '" class="edd_alert_checkout_link">' . __('Checkout.','easy-digital-downloads' ) . '</a>'
277
  . '</div>';
278
 
279
  echo apply_filters( 'edd_show_added_to_cart_messages', $alert );
100
  $item = str_replace( '{cart_item_id}', absint( $cart_key ), $item );
101
  $item = str_replace( '{item_id}', absint( $id ), $item );
102
  $item = str_replace( '{item_quantity}', absint( $quantity ), $item );
103
+ $item = str_replace( '{remove_url}', esc_url( $remove_url ), $item );
104
  $subtotal = '';
105
  if ( $ajax ){
106
  $subtotal = edd_currency_filter( edd_format_amount( edd_get_cart_subtotal() ) ) ;
179
  $color = ( $color == 'inherit' ) ? '' : $color;
180
 
181
  if ( edd_is_cart_saved() ) : ?>
182
+ <a class="edd-cart-saving-button edd-submit button<?php echo ' ' . $color; ?>" id="edd-restore-cart-button" href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => urlencode( edd_get_cart_token() ) ) ) ); ?>"><?php _e( 'Restore Previous Cart', 'easy-digital-downloads' ); ?></a>
183
  <?php endif; ?>
184
  <a class="edd-cart-saving-button edd-submit button<?php echo ' ' . $color; ?>" id="edd-save-cart-button" href="<?php echo esc_url( add_query_arg( 'edd_action', 'save_cart' ) ); ?>"><?php _e( 'Save Cart', 'easy-digital-downloads' ); ?></a>
185
  <?php
193
  */
194
  function edd_empty_cart_restore_cart_link() {
195
 
196
+ if ( edd_is_cart_saving_disabled() ) {
197
  return;
198
+ }
199
 
200
  if( edd_is_cart_saved() ) {
201
+ echo ' <a class="edd-cart-saving-link" id="edd-restore-cart-link" href="' . esc_url( add_query_arg( array( 'edd_action' => 'restore_cart', 'edd_cart_token' => urlencode( edd_get_cart_token() ) ) ) ) . '">' . __( 'Restore Previous Cart.', 'easy-digital-downloads' ) . '</a>';
202
  }
203
  }
204
  add_action( 'edd_cart_empty', 'edd_empty_cart_restore_cart_link' );
274
 
275
  $alert = '<div class="edd_added_to_cart_alert">'
276
  . sprintf( __('You have successfully added %s to your shopping cart.','easy-digital-downloads' ), get_the_title( $download_id ) )
277
+ . ' <a href="' . esc_url( edd_get_checkout_uri() ) . '" class="edd_alert_checkout_link">' . __('Checkout.','easy-digital-downloads' ) . '</a>'
278
  . '</div>';
279
 
280
  echo apply_filters( 'edd_show_added_to_cart_messages', $alert );
includes/checkout/functions.php CHANGED
@@ -99,12 +99,13 @@ function edd_is_success_page() {
99
  function edd_send_to_success_page( $query_string = null ) {
100
  $redirect = edd_get_success_page_uri();
101
 
102
- if ( $query_string )
103
  $redirect .= $query_string;
 
104
 
105
  $gateway = isset( $_REQUEST['edd-gateway'] ) ? $_REQUEST['edd-gateway'] : '';
106
 
107
- wp_redirect( apply_filters('edd_success_page_redirect', $redirect, $gateway, $query_string) );
108
  edd_die();
109
  }
110
 
@@ -177,7 +178,7 @@ function edd_send_back_to_checkout( $args = array() ) {
177
  $redirect = add_query_arg( $args, $redirect );
178
  }
179
 
180
- wp_redirect( apply_filters( 'edd_send_back_to_checkout', $redirect, $args ) );
181
  edd_die();
182
  }
183
 
@@ -342,7 +343,7 @@ function edd_enforced_ssl_redirect_handler() {
342
 
343
  $uri = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
344
 
345
- wp_safe_redirect( $uri );
346
  exit;
347
  }
348
  add_action( 'template_redirect', 'edd_enforced_ssl_redirect_handler' );
99
  function edd_send_to_success_page( $query_string = null ) {
100
  $redirect = edd_get_success_page_uri();
101
 
102
+ if ( $query_string ) {
103
  $redirect .= $query_string;
104
+ }
105
 
106
  $gateway = isset( $_REQUEST['edd-gateway'] ) ? $_REQUEST['edd-gateway'] : '';
107
 
108
+ wp_safe_redirect( esc_url_raw( apply_filters( 'edd_success_page_redirect', $redirect, $gateway, $query_string ) ) );
109
  edd_die();
110
  }
111
 
178
  $redirect = add_query_arg( $args, $redirect );
179
  }
180
 
181
+ wp_safe_redirect( esc_url_raw( apply_filters( 'edd_send_back_to_checkout', $redirect, $args ) ) );
182
  edd_die();
183
  }
184
 
343
 
344
  $uri = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
345
 
346
+ wp_safe_redirect( esc_url_raw( $uri ) );
347
  exit;
348
  }
349
  add_action( 'template_redirect', 'edd_enforced_ssl_redirect_handler' );
includes/checkout/template.php CHANGED
@@ -20,7 +20,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
20
  */
21
  function edd_checkout_form() {
22
  $payment_mode = edd_get_chosen_gateway();
23
- $form_action = esc_url( edd_get_checkout_uri( 'payment-mode=' . $payment_mode ) );
24
 
25
  ob_start();
26
  echo '<div id="edd_checkout_wrap">';
@@ -30,7 +30,7 @@ function edd_checkout_form() {
30
  ?>
31
  <div id="edd_checkout_form_wrap" class="edd_clearfix">
32
  <?php do_action( 'edd_before_purchase_form' ); ?>
33
- <form id="edd_purchase_form" class="edd_form" action="<?php echo $form_action; ?>" method="POST">
34
  <?php
35
  /**
36
  * Hooks in at the top of the checkout form
@@ -272,11 +272,11 @@ function edd_get_cc_form() {
272
  </label>
273
  <span class="edd-description"><?php _e( 'The date your credit card expires, typically on the front of the card.', 'easy-digital-downloads' ); ?></span>
274
  <select id="card_exp_month" name="card_exp_month" class="card-expiry-month edd-select edd-select-small required">
275
- <?php for( $i = 1; $i <= 12; $i++ ) { echo '<option value="' . $i . '">' . sprintf ('%02d', $i ) . '</option>'; } ?>
276
  </select>
277
  <span class="exp-divider"> / </span>
278
  <select id="card_exp_year" name="card_exp_year" class="card-expiry-year edd-select edd-select-small required">
279
- <?php for( $i = date('Y'); $i <= date('Y') + 30; $i++ ) { echo '<option value="' . $i . '">' . substr( $i, 2 ) . '</option>'; } ?>
280
  </select>
281
  </p>
282
  <?php do_action( 'edd_after_cc_expiration' ); ?>
@@ -350,7 +350,7 @@ function edd_default_cc_address_fields() {
350
  <?php } ?>
351
  </label>
352
  <span class="edd-description"><?php _e( 'The primary billing address for your credit card.', 'easy-digital-downloads' ); ?></span>
353
- <input type="text" id="card_address" name="card_address" class="card-address edd-input<?php if( edd_field_is_required( 'card_address' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Address line 1', 'easy-digital-downloads' ); ?>" value="<?php echo $customer['address']['line1']; ?>"<?php if( edd_field_is_required( 'card_address' ) ) { echo ' required '; } ?>/>
354
  </p>
355
  <p id="edd-card-address-2-wrap">
356
  <label for="card_address_2" class="edd-label">
@@ -360,7 +360,7 @@ function edd_default_cc_address_fields() {
360
  <?php } ?>
361
  </label>
362
  <span class="edd-description"><?php _e( 'The suite, apt no, PO box, etc, associated with your billing address.', 'easy-digital-downloads' ); ?></span>
363
- <input type="text" id="card_address_2" name="card_address_2" class="card-address-2 edd-input<?php if( edd_field_is_required( 'card_address_2' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Address line 2', 'easy-digital-downloads' ); ?>" value="<?php echo $customer['address']['line2']; ?>"<?php if( edd_field_is_required( 'card_address_2' ) ) { echo ' required '; } ?>/>
364
  </p>
365
  <p id="edd-card-city-wrap">
366
  <label for="card_city" class="edd-label">
@@ -370,7 +370,7 @@ function edd_default_cc_address_fields() {
370
  <?php } ?>
371
  </label>
372
  <span class="edd-description"><?php _e( 'The city for your billing address.', 'easy-digital-downloads' ); ?></span>
373
- <input type="text" id="card_city" name="card_city" class="card-city edd-input<?php if( edd_field_is_required( 'card_city' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'City', 'easy-digital-downloads' ); ?>" value="<?php echo $customer['address']['city']; ?>"<?php if( edd_field_is_required( 'card_city' ) ) { echo ' required '; } ?>/>
374
  </p>
375
  <p id="edd-card-zip-wrap">
376
  <label for="card_zip" class="edd-label">
@@ -380,7 +380,7 @@ function edd_default_cc_address_fields() {
380
  <?php } ?>
381
  </label>
382
  <span class="edd-description"><?php _e( 'The zip or postal code for your billing address.', 'easy-digital-downloads' ); ?></span>
383
- <input type="text" size="4" id="card_zip" name="card_zip" class="card-zip edd-input<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?>" value="<?php echo $customer['address']['zip']; ?>"<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required '; } ?>/>
384
  </p>
385
  <p id="edd-card-country-wrap">
386
  <label for="billing_country" class="edd-label">
@@ -401,7 +401,7 @@ function edd_default_cc_address_fields() {
401
 
402
  $countries = edd_get_country_list();
403
  foreach( $countries as $country_code => $country ) {
404
- echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . $country . '</option>';
405
  }
406
  ?>
407
  </select>
@@ -426,7 +426,7 @@ function edd_default_cc_address_fields() {
426
  <select name="card_state" id="card_state" class="card_state edd-select<?php if( edd_field_is_required( 'card_state' ) ) { echo ' required'; } ?>">
427
  <?php
428
  foreach( $states as $state_code => $state ) {
429
- echo '<option value="' . $state_code . '"' . selected( $state_code, $selected_state, false ) . '>' . $state . '</option>';
430
  }
431
  ?>
432
  </select>
@@ -606,7 +606,7 @@ function edd_payment_mode_select() {
606
  <div id="edd_payment_mode_select_wrap">
607
  <?php do_action('edd_payment_mode_top'); ?>
608
  <?php if( edd_is_ajax_disabled() ) { ?>
609
- <form id="edd_payment_mode" action="<?php echo $page_URL; ?>" method="GET">
610
  <?php } ?>
611
  <fieldset id="edd_payment_mode_select">
612
  <legend><?php _e( 'Select Payment Method', 'easy-digital-downloads' ); ?></legend>
@@ -620,10 +620,10 @@ function edd_payment_mode_select() {
620
 
621
  $label = apply_filters( 'edd_gateway_checkout_label_' . $gateway_id, $gateway['checkout_label'] );
622
  $checked = checked( $gateway_id, $chosen_gateway, false );
623
- $checked_class = $checked ? ' edd-gateway-option-selected' : '';
624
  $nonce = ' data-' . esc_attr( $gateway_id ) . '-nonce="' . wp_create_nonce( 'edd-gateway-selected-' . esc_attr( $gateway_id ) ) .'"';
625
 
626
- echo '<label for="edd-gateway-' . esc_attr( $gateway_id ) . '" class="edd-gateway-option' . $checked_class . '" id="edd-gateway-option-' . esc_attr( $gateway_id ) . '">';
627
  echo '<input type="radio" name="payment-mode" class="edd-gateway" id="edd-gateway-' . esc_attr( $gateway_id ) . '" value="' . esc_attr( $gateway_id ) . '"' . $checked . $nonce . '>' . esc_html( $label );
628
  echo '</label>';
629
 
@@ -752,7 +752,7 @@ function edd_discount_field() {
752
  <span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
753
  <span class="edd-discount-code-field-wrap">
754
  <input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
755
- <input type="submit" class="edd-apply-discount edd-submit <?php echo $color . ' ' . $style; ?>" value="<?php echo _x( 'Apply', 'Apply discount at checkout', 'easy-digital-downloads' ); ?>"/>
756
  </span>
757
  <span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
758
  <span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
@@ -912,7 +912,7 @@ function edd_checkout_final_total() {
912
  ?>
913
  <p id="edd_final_total_wrap">
914
  <strong><?php _e( 'Purchase Total:', 'easy-digital-downloads' ); ?></strong>
915
- <span class="edd_cart_amount" data-subtotal="<?php echo edd_get_cart_subtotal(); ?>" data-total="<?php echo edd_get_cart_total(); ?>"><?php edd_cart_total(); ?></span>
916
  </p>
917
  <?php
918
  }
@@ -937,7 +937,7 @@ function edd_checkout_submit() {
937
  <?php do_action( 'edd_purchase_form_after_submit' ); ?>
938
 
939
  <?php if ( edd_is_ajax_disabled() ) { ?>
940
- <p class="edd-cancel"><a href="<?php echo edd_get_checkout_uri(); ?>"><?php _e( 'Go back', 'easy-digital-downloads' ); ?></a></p>
941
  <?php } ?>
942
  </fieldset>
943
  <?php
@@ -960,7 +960,7 @@ function edd_checkout_button_next() {
960
  ?>
961
  <input type="hidden" name="edd_action" value="gateway_select" />
962
  <input type="hidden" name="page_id" value="<?php echo absint( $purchase_page ); ?>"/>
963
- <input type="submit" name="gateway_submit" id="edd_next_button" class="edd-submit <?php echo $color; ?> <?php echo $style; ?>" value="<?php _e( 'Next', 'easy-digital-downloads' ); ?>"/>
964
  <?php
965
  return apply_filters( 'edd_checkout_button_next', ob_get_clean() );
966
  }
@@ -985,7 +985,7 @@ function edd_checkout_button_purchase() {
985
  $label = edd_get_checkout_button_purchase_label();
986
 
987
  ?>
988
- <input type="submit" class="edd-submit <?php echo $color; ?> <?php echo $style; ?>" id="edd-purchase-button" name="edd-purchase" value="<?php echo $label; ?>"/>
989
  <?php
990
  }
991
 
@@ -1045,10 +1045,10 @@ add_action( 'edd_checkout_form_top', 'edd_agree_to_terms_js' );
1045
  function edd_checkout_hidden_fields() {
1046
  ?>
1047
  <?php if ( is_user_logged_in() ) { ?>
1048
- <input type="hidden" name="edd-user-id" value="<?php echo get_current_user_id(); ?>"/>
1049
  <?php } ?>
1050
  <input type="hidden" name="edd_action" value="purchase"/>
1051
- <input type="hidden" name="edd-gateway" value="<?php echo edd_get_chosen_gateway(); ?>" />
1052
  <?php wp_nonce_field( 'edd-process-checkout', 'edd-process-checkout-nonce', false, true ); ?>
1053
  <?php
1054
  }
@@ -1064,8 +1064,11 @@ function edd_checkout_hidden_fields() {
1064
  */
1065
  function edd_filter_success_page_content( $content ) {
1066
  if ( isset( $_GET['payment-confirmation'] ) && edd_is_success_page() ) {
1067
- if ( has_filter( 'edd_payment_confirm_' . $_GET['payment-confirmation'] ) ) {
1068
- $content = apply_filters( 'edd_payment_confirm_' . $_GET['payment-confirmation'], $content );
 
 
 
1069
  }
1070
  }
1071
 
20
  */
21
  function edd_checkout_form() {
22
  $payment_mode = edd_get_chosen_gateway();
23
+ $form_action = edd_get_checkout_uri( 'payment-mode=' . $payment_mode );
24
 
25
  ob_start();
26
  echo '<div id="edd_checkout_wrap">';
30
  ?>
31
  <div id="edd_checkout_form_wrap" class="edd_clearfix">
32
  <?php do_action( 'edd_before_purchase_form' ); ?>
33
+ <form id="edd_purchase_form" class="edd_form" action="<?php echo esc_url( $form_action ); ?>" method="POST">
34
  <?php
35
  /**
36
  * Hooks in at the top of the checkout form
272
  </label>
273
  <span class="edd-description"><?php _e( 'The date your credit card expires, typically on the front of the card.', 'easy-digital-downloads' ); ?></span>
274
  <select id="card_exp_month" name="card_exp_month" class="card-expiry-month edd-select edd-select-small required">
275
+ <?php for( $i = 1; $i <= 12; $i++ ) { echo '<option value="' . absint( $i ) . '">' . sprintf ('%02d', absint( $i ) ) . '</option>'; } ?>
276
  </select>
277
  <span class="exp-divider"> / </span>
278
  <select id="card_exp_year" name="card_exp_year" class="card-expiry-year edd-select edd-select-small required">
279
+ <?php for( $i = date('Y'); $i <= date('Y') + 30; $i++ ) { echo '<option value="' . absint( $i ) . '">' . substr( $i, 2 ) . '</option>'; } ?>
280
  </select>
281
  </p>
282
  <?php do_action( 'edd_after_cc_expiration' ); ?>
350
  <?php } ?>
351
  </label>
352
  <span class="edd-description"><?php _e( 'The primary billing address for your credit card.', 'easy-digital-downloads' ); ?></span>
353
+ <input type="text" id="card_address" name="card_address" class="card-address edd-input<?php if( edd_field_is_required( 'card_address' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Address line 1', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $customer['address']['line1'] ); ?>"<?php if( edd_field_is_required( 'card_address' ) ) { echo ' required '; } ?>/>
354
  </p>
355
  <p id="edd-card-address-2-wrap">
356
  <label for="card_address_2" class="edd-label">
360
  <?php } ?>
361
  </label>
362
  <span class="edd-description"><?php _e( 'The suite, apt no, PO box, etc, associated with your billing address.', 'easy-digital-downloads' ); ?></span>
363
+ <input type="text" id="card_address_2" name="card_address_2" class="card-address-2 edd-input<?php if( edd_field_is_required( 'card_address_2' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Address line 2', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $customer['address']['line2'] ); ?>"<?php if( edd_field_is_required( 'card_address_2' ) ) { echo ' required '; } ?>/>
364
  </p>
365
  <p id="edd-card-city-wrap">
366
  <label for="card_city" class="edd-label">
370
  <?php } ?>
371
  </label>
372
  <span class="edd-description"><?php _e( 'The city for your billing address.', 'easy-digital-downloads' ); ?></span>
373
+ <input type="text" id="card_city" name="card_city" class="card-city edd-input<?php if( edd_field_is_required( 'card_city' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'City', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $customer['address']['city'] ); ?>"<?php if( edd_field_is_required( 'card_city' ) ) { echo ' required '; } ?>/>
374
  </p>
375
  <p id="edd-card-zip-wrap">
376
  <label for="card_zip" class="edd-label">
380
  <?php } ?>
381
  </label>
382
  <span class="edd-description"><?php _e( 'The zip or postal code for your billing address.', 'easy-digital-downloads' ); ?></span>
383
+ <input type="text" size="4" id="card_zip" name="card_zip" class="card-zip edd-input<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $customer['address']['zip'] ); ?>"<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required '; } ?>/>
384
  </p>
385
  <p id="edd-card-country-wrap">
386
  <label for="billing_country" class="edd-label">
401
 
402
  $countries = edd_get_country_list();
403
  foreach( $countries as $country_code => $country ) {
404
+ echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . esc_html( $country ) . '</option>';
405
  }
406
  ?>
407
  </select>
426
  <select name="card_state" id="card_state" class="card_state edd-select<?php if( edd_field_is_required( 'card_state' ) ) { echo ' required'; } ?>">
427
  <?php
428
  foreach( $states as $state_code => $state ) {
429
+ echo '<option value="' . esc_attr( $state_code ) . '"' . selected( $state_code, $selected_state, false ) . '>' . esc_html( $state ) . '</option>';
430
  }
431
  ?>
432
  </select>
606
  <div id="edd_payment_mode_select_wrap">
607
  <?php do_action('edd_payment_mode_top'); ?>
608
  <?php if( edd_is_ajax_disabled() ) { ?>
609
+ <form id="edd_payment_mode" action="<?php echo esc_url( $page_URL ); ?>" method="GET">
610
  <?php } ?>
611
  <fieldset id="edd_payment_mode_select">
612
  <legend><?php _e( 'Select Payment Method', 'easy-digital-downloads' ); ?></legend>
620
 
621
  $label = apply_filters( 'edd_gateway_checkout_label_' . $gateway_id, $gateway['checkout_label'] );
622
  $checked = checked( $gateway_id, $chosen_gateway, false );
623
+ $checked_class = $checked ? 'edd-gateway-option-selected' : '';
624
  $nonce = ' data-' . esc_attr( $gateway_id ) . '-nonce="' . wp_create_nonce( 'edd-gateway-selected-' . esc_attr( $gateway_id ) ) .'"';
625
 
626
+ echo '<label for="edd-gateway-' . esc_attr( $gateway_id ) . '" class="edd-gateway-option ' . esc_attr( $checked_class ) . '" id="edd-gateway-option-' . esc_attr( $gateway_id ) . '">';
627
  echo '<input type="radio" name="payment-mode" class="edd-gateway" id="edd-gateway-' . esc_attr( $gateway_id ) . '" value="' . esc_attr( $gateway_id ) . '"' . $checked . $nonce . '>' . esc_html( $label );
628
  echo '</label>';
629
 
752
  <span class="edd-description"><?php _e( 'Enter a coupon code if you have one.', 'easy-digital-downloads' ); ?></span>
753
  <span class="edd-discount-code-field-wrap">
754
  <input class="edd-input" type="text" id="edd-discount" name="edd-discount" placeholder="<?php _e( 'Enter discount', 'easy-digital-downloads' ); ?>"/>
755
+ <input type="submit" class="edd-apply-discount edd-submit <?php echo esc_attr( $color ) . ' ' . esc_attr( $style ); ?>" value="<?php echo _x( 'Apply', 'Apply discount at checkout', 'easy-digital-downloads' ); ?>"/>
756
  </span>
757
  <span class="edd-discount-loader edd-loading" id="edd-discount-loader" style="display:none;"></span>
758
  <span id="edd-discount-error-wrap" class="edd_error edd-alert edd-alert-error" aria-hidden="true" style="display:none;"></span>
912
  ?>
913
  <p id="edd_final_total_wrap">
914
  <strong><?php _e( 'Purchase Total:', 'easy-digital-downloads' ); ?></strong>
915
+ <span class="edd_cart_amount" data-subtotal="<?php echo esc_attr( edd_get_cart_subtotal() ); ?>" data-total="<?php echo esc_attr( edd_get_cart_total() ); ?>"><?php edd_cart_total(); // Escaped ?></span>
916
  </p>
917
  <?php
918
  }
937
  <?php do_action( 'edd_purchase_form_after_submit' ); ?>
938
 
939
  <?php if ( edd_is_ajax_disabled() ) { ?>
940
+ <p class="edd-cancel"><a href="<?php echo esc_url( edd_get_checkout_uri() ); ?>"><?php _e( 'Go back', 'easy-digital-downloads' ); ?></a></p>
941
  <?php } ?>
942
  </fieldset>
943
  <?php
960
  ?>
961
  <input type="hidden" name="edd_action" value="gateway_select" />
962
  <input type="hidden" name="page_id" value="<?php echo absint( $purchase_page ); ?>"/>
963
+ <input type="submit" name="gateway_submit" id="edd_next_button" class="edd-submit <?php echo esc_attr( $color ); ?> <?php echo $style; ?>" value="<?php _e( 'Next', 'easy-digital-downloads' ); ?>"/>
964
  <?php
965
  return apply_filters( 'edd_checkout_button_next', ob_get_clean() );
966
  }
985
  $label = edd_get_checkout_button_purchase_label();
986
 
987
  ?>
988
+ <input type="submit" class="edd-submit <?php echo esc_attr( $color ); ?> <?php echo esc_attr( $style ); ?>" id="edd-purchase-button" name="edd-purchase" value="<?php echo esc_attr( $label ); ?>"/>
989
  <?php
990
  }
991
 
1045
  function edd_checkout_hidden_fields() {
1046
  ?>
1047
  <?php if ( is_user_logged_in() ) { ?>
1048
+ <input type="hidden" name="edd-user-id" value="<?php echo esc_attr( get_current_user_id() ); ?>"/>
1049
  <?php } ?>
1050
  <input type="hidden" name="edd_action" value="purchase"/>
1051
+ <input type="hidden" name="edd-gateway" value="<?php echo esc_attr( edd_get_chosen_gateway() ); ?>" />
1052
  <?php wp_nonce_field( 'edd-process-checkout', 'edd-process-checkout-nonce', false, true ); ?>
1053
  <?php
1054
  }
1064
  */
1065
  function edd_filter_success_page_content( $content ) {
1066
  if ( isset( $_GET['payment-confirmation'] ) && edd_is_success_page() ) {
1067
+
1068
+ $confirm = sanitize_text_field( $_GET['payment-confirmation'] );
1069
+
1070
+ if ( has_filter( 'edd_payment_confirm_' . $confirm ) ) {
1071
+ $content = apply_filters( 'edd_payment_confirm_' . $confirm, $content );
1072
  }
1073
  }
1074
 
includes/class-edd-cache-helper.php CHANGED
@@ -112,7 +112,7 @@ class EDD_Cache_Helper {
112
  if ( $enabled && ! in_array( '_wp_session_', $settings ) ) {
113
  ?>
114
  <div class="error">
115
- <p><?php printf( __( 'In order for <strong>database caching</strong> to work with Easy Digital Downloads you must add <code>_wp_session_</code> to the "Ignored query stems" option in W3 Total Cache settings <a href="%s">here</a>.', 'easy-digital-downloads' ), admin_url( 'admin.php?page=w3tc_dbcache' ) ); ?></p>
116
  </div>
117
  <?php
118
  }
112
  if ( $enabled && ! in_array( '_wp_session_', $settings ) ) {
113
  ?>
114
  <div class="error">
115
+ <p><?php printf( __( 'In order for <strong>database caching</strong> to work with Easy Digital Downloads you must add <code>_wp_session_</code> to the "Ignored query stems" option in W3 Total Cache settings <a href="%s">here</a>.', 'easy-digital-downloads' ), esc_url( admin_url( 'admin.php?page=w3tc_dbcache' ) ) ); ?></p>
116
  </div>
117
  <?php
118
  }
includes/class-edd-discount.php CHANGED
@@ -1998,6 +1998,16 @@ class EDD_Discount {
1998
  * @return string Link to the `Edit Discount` page.
1999
  */
2000
  public function edit_url() {
2001
- return esc_url( add_query_arg( array( 'edd-action' => 'edit_discount', 'discount' => $this->ID ), admin_url( 'edit.php?post_type=download&page=edd-discounts' ) ) );
 
 
 
 
 
 
 
 
 
 
2002
  }
2003
  }
1998
  * @return string Link to the `Edit Discount` page.
1999
  */
2000
  public function edit_url() {
2001
+ return esc_url(
2002
+ add_query_arg(
2003
+ array(
2004
+ 'post_type' => 'download',
2005
+ 'page' => 'edd-discounts',
2006
+ 'edd-action' => 'edit_discount',
2007
+ 'discount' => absint( $this->ID ),
2008
+ ),
2009
+ admin_url( 'edit.php' )
2010
+ )
2011
+ );
2012
  }
2013
  }
includes/class-edd-license-handler.php CHANGED
@@ -523,7 +523,7 @@ class EDD_License {
523
 
524
  $messages[] = sprintf(
525
  __( 'You have invalid or expired license keys for Easy Digital Downloads. Please go to the <a href="%s">Licenses page</a> to correct this issue.', 'easy-digital-downloads' ),
526
- admin_url( 'edit.php?post_type=download&page=edd-settings&tab=licenses' )
527
  );
528
 
529
  $showed_invalid_message = true;
523
 
524
  $messages[] = sprintf(
525
  __( 'You have invalid or expired license keys for Easy Digital Downloads. Please go to the <a href="%s">Licenses page</a> to correct this issue.', 'easy-digital-downloads' ),
526
+ esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings&tab=licenses' ) )
527
  );
528
 
529
  $showed_invalid_message = true;
includes/deprecated-functions.php CHANGED
@@ -1013,7 +1013,7 @@ function edd_sendwp_callback( $args ) {
1013
  $connected .= '</a>.';
1014
 
1015
  $disconnected = sprintf(
1016
- __( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="' . admin_url( '/tools.php?page=sendwp' ) . '">Click here</a> to enable it.</em>', 'easy-digital-downloads' )
1017
  );
1018
 
1019
  // Checks if SendWP is connected
1013
  $connected .= '</a>.';
1014
 
1015
  $disconnected = sprintf(
1016
+ __( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="' . esc_url( admin_url( '/tools.php?page=sendwp' ) ) . '">Click here</a> to enable it.</em>', 'easy-digital-downloads' )
1017
  );
1018
 
1019
  // Checks if SendWP is connected
includes/discount-functions.php CHANGED
@@ -838,14 +838,14 @@ function edd_get_cart_discounts_html( $discounts = false ) {
838
  $discount_id = edd_get_discount_id_by_code( $discount );
839
  $rate = edd_format_discount_rate( edd_get_discount_type( $discount_id ), edd_get_discount_amount( $discount_id ) );
840
 
841
- $remove_url = add_query_arg(
842
  array(
843
  'edd_action' => 'remove_cart_discount',
844
- 'discount_id' => $discount_id,
845
- 'discount_code' => $discount
846
  ),
847
  edd_get_checkout_uri()
848
- );
849
 
850
  $discount_html = '';
851
  $discount_html .= "<span class=\"edd_discount\">\n";
@@ -895,7 +895,8 @@ function edd_remove_cart_discount() {
895
 
896
  do_action( 'edd_post_remove_cart_discount', absint( $_GET['discount_id'] ) );
897
 
898
- wp_redirect( edd_get_checkout_uri() ); edd_die();
 
899
  }
900
  add_action( 'edd_remove_cart_discount', 'edd_remove_cart_discount' );
901
 
838
  $discount_id = edd_get_discount_id_by_code( $discount );
839
  $rate = edd_format_discount_rate( edd_get_discount_type( $discount_id ), edd_get_discount_amount( $discount_id ) );
840
 
841
+ $remove_url = esc_url( add_query_arg(
842
  array(
843
  'edd_action' => 'remove_cart_discount',
844
+ 'discount_id' => urlencode( $discount_id ),
845
+ 'discount_code' => urlencode( $discount ),
846
  ),
847
  edd_get_checkout_uri()
848
+ ) );
849
 
850
  $discount_html = '';
851
  $discount_html .= "<span class=\"edd_discount\">\n";
895
 
896
  do_action( 'edd_post_remove_cart_discount', absint( $_GET['discount_id'] ) );
897
 
898
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
899
+ edd_die();
900
  }
901
  add_action( 'edd_remove_cart_discount', 'edd_remove_cart_discount' );
902
 
includes/emails/actions.php CHANGED
@@ -104,6 +104,7 @@ function edd_send_test_email( $data ) {
104
  edd_email_test_purchase_receipt();
105
 
106
  // Remove the test email query arg
107
- wp_redirect( remove_query_arg( 'edd_action' ) ); exit;
 
108
  }
109
  add_action( 'edd_send_test_email', 'edd_send_test_email' );
104
  edd_email_test_purchase_receipt();
105
 
106
  // Remove the test email query arg
107
+ wp_safe_redirect( esc_url_raw( remove_query_arg( 'edd_action' ) ) );
108
+ exit;
109
  }
110
  add_action( 'edd_send_test_email', 'edd_send_test_email' );
includes/emails/template.php CHANGED
@@ -111,7 +111,7 @@ function edd_email_template_preview() {
111
  ob_start();
112
  ?>
113
  <a href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'preview_email' ), home_url() ) ); ?>" class="button-secondary" target="_blank"><?php _e( 'Preview Purchase Receipt', 'easy-digital-downloads' ); ?></a>
114
- <a href="<?php echo wp_nonce_url( add_query_arg( array( 'edd_action' => 'send_test_email' ) ), 'edd-test-email' ); ?>" class="button-secondary"><?php _e( 'Send Test Email', 'easy-digital-downloads' ); ?></a>
115
  <?php
116
  echo ob_get_clean();
117
  }
111
  ob_start();
112
  ?>
113
  <a href="<?php echo esc_url( add_query_arg( array( 'edd_action' => 'preview_email' ), home_url() ) ); ?>" class="button-secondary" target="_blank"><?php _e( 'Preview Purchase Receipt', 'easy-digital-downloads' ); ?></a>
114
+ <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'edd_action' => 'send_test_email' ) ), 'edd-test-email' ) ); ?>" class="button-secondary"><?php _e( 'Send Test Email', 'easy-digital-downloads' ); ?></a>
115
  <?php
116
  echo ob_get_clean();
117
  }
includes/gateways/actions.php CHANGED
@@ -20,8 +20,9 @@ if ( ! defined( 'ABSPATH' ) ) exit;
20
  * @param $data
21
  */
22
  function edd_process_gateway_select( $data ) {
23
- if( isset( $_POST['gateway_submit'] ) ) {
24
- wp_redirect( add_query_arg( 'payment-mode', $_POST['payment-mode'] ) ); exit;
 
25
  }
26
  }
27
  add_action( 'edd_gateway_select', 'edd_process_gateway_select' );
20
  * @param $data
21
  */
22
  function edd_process_gateway_select( $data ) {
23
+ if ( isset( $_POST['gateway_submit'] ) && ! empty( $_POST['payment-mode'] ) ) {
24
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'payment-mode', urlencode( $_POST['payment-mode'] ) ) ) );
25
+ exit;
26
  }
27
  }
28
  add_action( 'edd_gateway_select', 'edd_process_gateway_select' );
includes/gateways/amazon-payments.php CHANGED
@@ -356,7 +356,7 @@ final class EDD_Amazon_Payments {
356
  'amazon_register' => array(
357
  'id' => 'amazon_register',
358
  'name' => __( 'Register with Amazon', 'easy-digital-downloads' ),
359
- 'desc' => '<p><a href="' . $this->get_registration_url() . '" class="button" target="_blank">' .
360
  __( 'Connect Easy Digital Downloads to Amazon', 'easy-digital-downloads' ) .
361
  '</a></p>' .
362
  '<p class="description">' .
@@ -625,7 +625,8 @@ final class EDD_Amazon_Payments {
625
  }
626
 
627
 
628
- wp_redirect( edd_get_checkout_uri( array( 'payment-mode' => 'amazon', 'state' => 'authorized', 'amazon_reference_id' => $reference ) ) ); exit;
 
629
 
630
  }
631
 
356
  'amazon_register' => array(
357
  'id' => 'amazon_register',
358
  'name' => __( 'Register with Amazon', 'easy-digital-downloads' ),
359
+ 'desc' => '<p><a href="' . esc_url( $this->get_registration_url() ) . '" class="button" target="_blank">' .
360
  __( 'Connect Easy Digital Downloads to Amazon', 'easy-digital-downloads' ) .
361
  '</a></p>' .
362
  '<p class="description">' .
625
  }
626
 
627
 
628
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri( array( 'payment-mode' => 'amazon', 'state' => 'authorized', 'amazon_reference_id' => urlencode( $reference ) ) ) ) );
629
+ exit;
630
 
631
  }
632
 
includes/gateways/paypal-standard.php CHANGED
@@ -205,7 +205,7 @@ function edd_process_paypal_purchase( $purchase_data ) {
205
  // Get the success url
206
  $return_url = add_query_arg( array(
207
  'payment-confirmation' => 'paypal',
208
- 'payment-id' => $payment
209
  ), get_permalink( edd_get_option( 'success_page', false ) ) );
210
 
211
  // Get the PayPal redirect uri
@@ -225,10 +225,10 @@ function edd_process_paypal_purchase( $purchase_data ) {
225
  'charset' => get_bloginfo( 'charset' ),
226
  'custom' => $payment,
227
  'rm' => '2',
228
- 'return' => $return_url,
229
- 'cancel_return' => edd_get_failed_transaction_uri( '?payment-id=' . $payment ),
230
- 'notify_url' => $listener_url,
231
- 'image_url' => edd_get_paypal_image_url(),
232
  'cbt' => get_bloginfo( 'name' ),
233
  'bn' => 'EasyDigitalDownloads_SP'
234
  );
@@ -332,7 +332,7 @@ function edd_process_paypal_purchase( $purchase_data ) {
332
  $paypal_redirect = str_replace( '&amp;', '&', $paypal_redirect );
333
 
334
  // Redirect to PayPal
335
- wp_redirect( $paypal_redirect );
336
  exit;
337
  }
338
 
205
  // Get the success url
206
  $return_url = add_query_arg( array(
207
  'payment-confirmation' => 'paypal',
208
+ 'payment-id' => urlencode( $payment ),
209
  ), get_permalink( edd_get_option( 'success_page', false ) ) );
210
 
211
  // Get the PayPal redirect uri
225
  'charset' => get_bloginfo( 'charset' ),
226
  'custom' => $payment,
227
  'rm' => '2',
228
+ 'return' => esc_url_raw( $return_url ),
229
+ 'cancel_return' => esc_url_raw( edd_get_failed_transaction_uri( '?payment-id=' . sanitize_key( $payment ) ) ),
230
+ 'notify_url' => esc_url_raw( $listener_url ),
231
+ 'image_url' => esc_url_raw( edd_get_paypal_image_url() ),
232
  'cbt' => get_bloginfo( 'name' ),
233
  'bn' => 'EasyDigitalDownloads_SP'
234
  );
332
  $paypal_redirect = str_replace( '&amp;', '&', $paypal_redirect );
333
 
334
  // Redirect to PayPal
335
+ wp_redirect( esc_url_raw( $paypal_redirect ) );
336
  exit;
337
  }
338
 
includes/gateways/paypal/scripts.php CHANGED
@@ -86,7 +86,7 @@ function register_js( $force_load = false ) {
86
 
87
  wp_register_script(
88
  'sandhills-paypal-js-sdk',
89
- add_query_arg( array_filter( $sdk_query_args ), 'https://www.paypal.com/sdk/js' )
90
  );
91
 
92
  wp_register_script(
86
 
87
  wp_register_script(
88
  'sandhills-paypal-js-sdk',
89
+ esc_url_raw( add_query_arg( array_filter( $sdk_query_args ), 'https://www.paypal.com/sdk/js' ) )
90
  );
91
 
92
  wp_register_script(
includes/gateways/stripe/includes/admin/admin-filters.php CHANGED
@@ -36,9 +36,9 @@ function edd_stripe_link_transaction_id( $transaction_id, $payment_id ) {
36
  $status = edd_get_payment_status( $payment_id );
37
 
38
  if ( 'preapproval' === $status ) {
39
- $url = '<a href="https://dashboard.stripe.com/' . $test . 'setup_intents/' . $transaction_id . '" target="_blank">' . $transaction_id . '</a>';
40
  } else {
41
- $url = '<a href="https://dashboard.stripe.com/' . $test . 'payments/' . $transaction_id . '" target="_blank">' . $transaction_id . '</a>';
42
  }
43
  return apply_filters( 'edd_stripe_link_payment_details_transaction_id', $url );
44
 
36
  $status = edd_get_payment_status( $payment_id );
37
 
38
  if ( 'preapproval' === $status ) {
39
+ $url = '<a href="https://dashboard.stripe.com/' . esc_attr( $test ) . 'setup_intents/' . esc_attr( $transaction_id ) . '" target="_blank">' . esc_html( $transaction_id ) . '</a>';
40
  } else {
41
+ $url = '<a href="https://dashboard.stripe.com/' . esc_attr( $test ) . 'payments/' . esc_attr( $transaction_id ) . '" target="_blank">' . esc_html( $transaction_id ) . '</a>';
42
  }
43
  return apply_filters( 'edd_stripe_link_payment_details_transaction_id', $url );
44
 
includes/gateways/stripe/includes/admin/settings.php CHANGED
@@ -252,7 +252,7 @@ function edd_stripe_connect_notice_callback( $args ) {
252
 
253
  $class = edd_sanitize_html_class( $args['field_class'] );
254
 
255
- $html = '<div class="'.$class.'" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']">' . $value . '</div>';
256
 
257
  echo $html;
258
  }
252
 
253
  $class = edd_sanitize_html_class( $args['field_class'] );
254
 
255
+ $html = '<div class="' . esc_attr( $class ) . '" id="edd_settings[' . edd_sanitize_key( $args['id'] ) . ']">' . esc_html( $value ) . '</div>';
256
 
257
  echo $html;
258
  }
includes/gateways/stripe/includes/admin/settings/stripe-connect.php CHANGED
@@ -59,7 +59,7 @@ function edds_stripe_connect_url() {
59
  array(
60
  'live_mode' => (int) ! edd_is_test_mode(),
61
  'state' => str_pad( wp_rand( wp_rand(), PHP_INT_MAX ), 100, wp_rand(), STR_PAD_BOTH ),
62
- 'customer_site_url' => $return_url,
63
  ),
64
  'https://easydigitaldownloads.com/?edd_gateway_connect_init=stripe_connect'
65
  );
59
  array(
60
  'live_mode' => (int) ! edd_is_test_mode(),
61
  'state' => str_pad( wp_rand( wp_rand(), PHP_INT_MAX ), 100, wp_rand(), STR_PAD_BOTH ),
62
+ 'customer_site_url' => esc_url_raw( $return_url ),
63
  ),
64
  'https://easydigitaldownloads.com/?edd_gateway_connect_init=stripe_connect'
65
  );
includes/gateways/stripe/includes/admin/upgrade-functions.php CHANGED
@@ -131,12 +131,12 @@ function edd_stripe_customer_id_migration() {
131
  $redirect = add_query_arg( array(
132
  'page' => 'edd-upgrades',
133
  'edd-upgrade' => 'stripe_customer_id_migration',
134
- 'step' => $step,
135
- 'number' => $number,
136
- 'total' => $total
137
  ), admin_url( 'index.php' ) );
138
 
139
- wp_redirect( $redirect );
140
  exit;
141
 
142
  } else {
131
  $redirect = add_query_arg( array(
132
  'page' => 'edd-upgrades',
133
  'edd-upgrade' => 'stripe_customer_id_migration',
134
+ 'step' => absint( $step ),
135
+ 'number' => absint( $number ),
136
+ 'total' => absint( $total ),
137
  ), admin_url( 'index.php' ) );
138
 
139
+ wp_safe_redirect( $redirect );
140
  exit;
141
 
142
  } else {
includes/gateways/stripe/includes/template-functions.php CHANGED
@@ -279,18 +279,20 @@ function edd_stripe_existing_card_field_radio( $user_id = 0 ) {
279
  <?php foreach ( $existing_cards as $card ) : ?>
280
  <?php $source = $card['source']; ?>
281
  <div class="edd-stripe-card-radio-item existing-card-wrapper <?php if ( $card['default'] ) { echo ' selected'; } ?>">
282
- <input type="hidden" id="<?php echo $source->id; ?>-billing-details"
283
- data-address_city="<?php echo $source->address_city; ?>"
284
- data-address_country="<?php echo $source->address_country; ?>"
285
- data-address_line1="<?php echo $source->address_line1; ?>"
286
- data-address_line2="<?php echo $source->address_line2; ?>"
287
- data-address_state="<?php echo $source->address_state; ?>"
288
- data-address_zip="<?php echo $source->address_zip; ?>"
289
- data-brand="<?php echo $source->brand; ?>"
290
- data-last4="<?php echo $source->last4; ?>"
 
 
291
  />
292
- <label for="<?php echo $source->id; ?>">
293
- <input <?php checked( true, $card['default'], true ); ?> type="radio" id="<?php echo $source->id; ?>" name="edd_stripe_existing_card" value="<?php echo $source->id; ?>" class="edd-stripe-existing-card">
294
  <span class="card-label">
295
  <span class="card-data">
296
  <span class="card-name-number">
@@ -378,7 +380,7 @@ function edd_stripe_manage_cards() {
378
  <div id="edd-stripe-manage-cards">
379
  <fieldset>
380
  <legend><?php _e( 'Manage Payment Methods', 'easy-digital-downloads' ); ?></legend>
381
- <input type="hidden" id="stripe-update-card-user_id" name="stripe-update-user-id" value="<?php echo get_current_user_id(); ?>" />
382
  <?php if ( ! empty( $existing_cards ) ) : ?>
383
  <?php foreach( $existing_cards as $card ) : ?>
384
  <?php $source = $card['source']; ?>
@@ -388,8 +390,8 @@ function edd_stripe_manage_cards() {
388
  echo wp_kses(
389
  sprintf(
390
  __( '%1$s •••• %2$s', 'easy-digital-downloads' ),
391
- '<span class="card-brand">' . $source->brand . '</span>',
392
- '<span class="card-last-4">' . $source->last4 . '</span>'
393
  ),
394
  array(
395
  'span' => array(
@@ -596,7 +598,7 @@ function edd_stripe_manage_cards() {
596
 
597
  <a href="#" class="edd-stripe-cancel-update" data-source="<?php echo esc_attr( $source->id ); ?>"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
598
 
599
- <input type="hidden" name="card_id" data-key="id" value="<?php echo $source->id; ?>" />
600
  <?php wp_nonce_field( $source->id . '_update', 'card_update_nonce_' . $source->id, true ); ?>
601
  </p>
602
  </form>
@@ -764,7 +766,7 @@ function edd_stripe_zip_and_country() {
764
 
765
  $countries = edd_get_country_list();
766
  foreach( $countries as $country_code => $country ) {
767
- echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . $country . '</option>';
768
  }
769
  ?>
770
  </select>
@@ -777,7 +779,7 @@ function edd_stripe_zip_and_country() {
777
  <?php } ?>
778
  </label>
779
  <span class="edd-description"><?php _e( 'The zip or postal code for your billing address.', 'easy-digital-downloads' ); ?></span>
780
- <input type="text" size="4" name="card_zip" id="card_zip" class="card-zip edd-input<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?>" value="<?php echo $customer['address']['zip']; ?>"<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required '; } ?> autocomplete="billing postal-code" />
781
  </p>
782
  </fieldset>
783
  <?php
279
  <?php foreach ( $existing_cards as $card ) : ?>
280
  <?php $source = $card['source']; ?>
281
  <div class="edd-stripe-card-radio-item existing-card-wrapper <?php if ( $card['default'] ) { echo ' selected'; } ?>">
282
+ <input
283
+ type="hidden"
284
+ id="<?php echo esc_attr( $source->id ); ?>-billing-details"
285
+ data-address_city="<?php echo esc_attr( $source->address_city ); ?>"
286
+ data-address_country="<?php echo esc_attr( $source->address_country ); ?>"
287
+ data-address_line1="<?php echo esc_attr( $source->address_line1 ); ?>"
288
+ data-address_line2="<?php echo esc_attr( $source->address_line2 ); ?>"
289
+ data-address_state="<?php echo esc_attr( $source->address_state ); ?>"
290
+ data-address_zip="<?php echo esc_attr( $source->address_zip ); ?>"
291
+ data-brand="<?php echo esc_attr( $source->brand ); ?>"
292
+ data-last4="<?php echo esc_attr( $source->last4 ); ?>"
293
  />
294
+ <label for="<?php echo esc_attr( $source->id ); ?>">
295
+ <input <?php checked( true, $card['default'], true ); ?> type="radio" id="<?php echo esc_attr( $source->id ); ?>" name="edd_stripe_existing_card" value="<?php echo esc_attr( $source->id ); ?>" class="edd-stripe-existing-card">
296
  <span class="card-label">
297
  <span class="card-data">
298
  <span class="card-name-number">
380
  <div id="edd-stripe-manage-cards">
381
  <fieldset>
382
  <legend><?php _e( 'Manage Payment Methods', 'easy-digital-downloads' ); ?></legend>
383
+ <input type="hidden" id="stripe-update-card-user_id" name="stripe-update-user-id" value="<?php echo esc_attr( get_current_user_id() ); ?>" />
384
  <?php if ( ! empty( $existing_cards ) ) : ?>
385
  <?php foreach( $existing_cards as $card ) : ?>
386
  <?php $source = $card['source']; ?>
390
  echo wp_kses(
391
  sprintf(
392
  __( '%1$s •••• %2$s', 'easy-digital-downloads' ),
393
+ '<span class="card-brand">' . esc_html( $source->brand ) . '</span>',
394
+ '<span class="card-last-4">' . esc_html( $source->last4 ) . '</span>'
395
  ),
396
  array(
397
  'span' => array(
598
 
599
  <a href="#" class="edd-stripe-cancel-update" data-source="<?php echo esc_attr( $source->id ); ?>"><?php _e( 'Cancel', 'easy-digital-downloads' ); ?></a>
600
 
601
+ <input type="hidden" name="card_id" data-key="id" value="<?php echo esc_attr( $source->id ); ?>" />
602
  <?php wp_nonce_field( $source->id . '_update', 'card_update_nonce_' . $source->id, true ); ?>
603
  </p>
604
  </form>
766
 
767
  $countries = edd_get_country_list();
768
  foreach( $countries as $country_code => $country ) {
769
+ echo '<option value="' . esc_attr( $country_code ) . '"' . selected( $country_code, $selected_country, false ) . '>' . esc_html( $country ) . '</option>';
770
  }
771
  ?>
772
  </select>
779
  <?php } ?>
780
  </label>
781
  <span class="edd-description"><?php _e( 'The zip or postal code for your billing address.', 'easy-digital-downloads' ); ?></span>
782
+ <input type="text" size="4" name="card_zip" id="card_zip" class="card-zip edd-input<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required'; } ?>" placeholder="<?php _e( 'Zip / Postal Code', 'easy-digital-downloads' ); ?>" value="<?php echo esc_attr( $customer['address']['zip'] ); ?>"<?php if( edd_field_is_required( 'card_zip' ) ) { echo ' required '; } ?> autocomplete="billing postal-code" />
783
  </p>
784
  </fieldset>
785
  <?php
includes/gateways/stripe/vendor/autoload.php CHANGED
@@ -2,6 +2,11 @@
2
 
3
  // autoload.php @generated by Composer
4
 
 
 
 
 
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
  return ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
5
+ if (PHP_VERSION_ID < 50600) {
6
+ echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
7
+ exit(1);
8
+ }
9
+
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
  return ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a::getLoader();
includes/gateways/stripe/vendor/composer/ClassLoader.php CHANGED
@@ -37,57 +37,130 @@ namespace Composer\Autoload;
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
- * @see http://www.php-fig.org/psr/psr-0/
41
- * @see http://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
 
 
 
45
  // PSR-4
 
 
 
 
46
  private $prefixLengthsPsr4 = array();
 
 
 
 
47
  private $prefixDirsPsr4 = array();
 
 
 
 
48
  private $fallbackDirsPsr4 = array();
49
 
50
  // PSR-0
 
 
 
 
51
  private $prefixesPsr0 = array();
 
 
 
 
52
  private $fallbackDirsPsr0 = array();
53
 
 
54
  private $useIncludePath = false;
 
 
 
 
 
55
  private $classMap = array();
 
 
56
  private $classMapAuthoritative = false;
 
 
 
 
 
57
  private $missingClasses = array();
 
 
58
  private $apcuPrefix;
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
63
- return call_user_func_array('array_merge', $this->prefixesPsr0);
64
  }
65
 
66
  return array();
67
  }
68
 
 
 
 
 
69
  public function getPrefixesPsr4()
70
  {
71
  return $this->prefixDirsPsr4;
72
  }
73
 
 
 
 
 
74
  public function getFallbackDirs()
75
  {
76
  return $this->fallbackDirsPsr0;
77
  }
78
 
 
 
 
 
79
  public function getFallbackDirsPsr4()
80
  {
81
  return $this->fallbackDirsPsr4;
82
  }
83
 
 
 
 
 
84
  public function getClassMap()
85
  {
86
  return $this->classMap;
87
  }
88
 
89
  /**
90
- * @param array $classMap Class to filename map
 
 
 
91
  */
92
  public function addClassMap(array $classMap)
93
  {
@@ -102,9 +175,11 @@ class ClassLoader
102
  * Registers a set of PSR-0 directories for a given prefix, either
103
  * appending or prepending to the ones previously set for this prefix.
104
  *
105
- * @param string $prefix The prefix
106
- * @param array|string $paths The PSR-0 root directories
107
- * @param bool $prepend Whether to prepend the directories
 
 
108
  */
109
  public function add($prefix, $paths, $prepend = false)
110
  {
@@ -147,11 +222,13 @@ class ClassLoader
147
  * Registers a set of PSR-4 directories for a given namespace, either
148
  * appending or prepending to the ones previously set for this namespace.
149
  *
150
- * @param string $prefix The prefix/namespace, with trailing '\\'
151
- * @param array|string $paths The PSR-4 base directories
152
- * @param bool $prepend Whether to prepend the directories
153
  *
154
  * @throws \InvalidArgumentException
 
 
155
  */
156
  public function addPsr4($prefix, $paths, $prepend = false)
157
  {
@@ -195,8 +272,10 @@ class ClassLoader
195
  * Registers a set of PSR-0 directories for a given prefix,
196
  * replacing any others previously set for this prefix.
197
  *
198
- * @param string $prefix The prefix
199
- * @param array|string $paths The PSR-0 base directories
 
 
200
  */
201
  public function set($prefix, $paths)
202
  {
@@ -211,10 +290,12 @@ class ClassLoader
211
  * Registers a set of PSR-4 directories for a given namespace,
212
  * replacing any others previously set for this namespace.
213
  *
214
- * @param string $prefix The prefix/namespace, with trailing '\\'
215
- * @param array|string $paths The PSR-4 base directories
216
  *
217
  * @throws \InvalidArgumentException
 
 
218
  */
219
  public function setPsr4($prefix, $paths)
220
  {
@@ -234,6 +315,8 @@ class ClassLoader
234
  * Turns on searching the include path for class files.
235
  *
236
  * @param bool $useIncludePath
 
 
237
  */
238
  public function setUseIncludePath($useIncludePath)
239
  {
@@ -256,6 +339,8 @@ class ClassLoader
256
  * that have not been registered with the class map.
257
  *
258
  * @param bool $classMapAuthoritative
 
 
259
  */
260
  public function setClassMapAuthoritative($classMapAuthoritative)
261
  {
@@ -276,6 +361,8 @@ class ClassLoader
276
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
  *
278
  * @param string|null $apcuPrefix
 
 
279
  */
280
  public function setApcuPrefix($apcuPrefix)
281
  {
@@ -296,25 +383,44 @@ class ClassLoader
296
  * Registers this instance as an autoloader.
297
  *
298
  * @param bool $prepend Whether to prepend the autoloader or not
 
 
299
  */
300
  public function register($prepend = false)
301
  {
302
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 
 
 
 
 
 
 
 
 
 
 
303
  }
304
 
305
  /**
306
  * Unregisters this instance as an autoloader.
 
 
307
  */
308
  public function unregister()
309
  {
310
  spl_autoload_unregister(array($this, 'loadClass'));
 
 
 
 
311
  }
312
 
313
  /**
314
  * Loads the given class or interface.
315
  *
316
  * @param string $class The name of the class
317
- * @return bool|null True if loaded, null otherwise
318
  */
319
  public function loadClass($class)
320
  {
@@ -323,6 +429,8 @@ class ClassLoader
323
 
324
  return true;
325
  }
 
 
326
  }
327
 
328
  /**
@@ -367,6 +475,21 @@ class ClassLoader
367
  return $file;
368
  }
369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  private function findFileWithExtension($class, $ext)
371
  {
372
  // PSR-4 lookup
@@ -438,6 +561,10 @@ class ClassLoader
438
  * Scope isolated include.
439
  *
440
  * Prevents access to $this/self from included files.
 
 
 
 
441
  */
442
  function includeFile($file)
443
  {
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see https://www.php-fig.org/psr/psr-0/
41
+ * @see https://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
45
+ /** @var ?string */
46
+ private $vendorDir;
47
+
48
  // PSR-4
49
+ /**
50
+ * @var array[]
51
+ * @psalm-var array<string, array<string, int>>
52
+ */
53
  private $prefixLengthsPsr4 = array();
54
+ /**
55
+ * @var array[]
56
+ * @psalm-var array<string, array<int, string>>
57
+ */
58
  private $prefixDirsPsr4 = array();
59
+ /**
60
+ * @var array[]
61
+ * @psalm-var array<string, string>
62
+ */
63
  private $fallbackDirsPsr4 = array();
64
 
65
  // PSR-0
66
+ /**
67
+ * @var array[]
68
+ * @psalm-var array<string, array<string, string[]>>
69
+ */
70
  private $prefixesPsr0 = array();
71
+ /**
72
+ * @var array[]
73
+ * @psalm-var array<string, string>
74
+ */
75
  private $fallbackDirsPsr0 = array();
76
 
77
+ /** @var bool */
78
  private $useIncludePath = false;
79
+
80
+ /**
81
+ * @var string[]
82
+ * @psalm-var array<string, string>
83
+ */
84
  private $classMap = array();
85
+
86
+ /** @var bool */
87
  private $classMapAuthoritative = false;
88
+
89
+ /**
90
+ * @var bool[]
91
+ * @psalm-var array<string, bool>
92
+ */
93
  private $missingClasses = array();
94
+
95
+ /** @var ?string */
96
  private $apcuPrefix;
97
 
98
+ /**
99
+ * @var self[]
100
+ */
101
+ private static $registeredLoaders = array();
102
+
103
+ /**
104
+ * @param ?string $vendorDir
105
+ */
106
+ public function __construct($vendorDir = null)
107
+ {
108
+ $this->vendorDir = $vendorDir;
109
+ }
110
+
111
+ /**
112
+ * @return string[]
113
+ */
114
  public function getPrefixes()
115
  {
116
  if (!empty($this->prefixesPsr0)) {
117
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
118
  }
119
 
120
  return array();
121
  }
122
 
123
+ /**
124
+ * @return array[]
125
+ * @psalm-return array<string, array<int, string>>
126
+ */
127
  public function getPrefixesPsr4()
128
  {
129
  return $this->prefixDirsPsr4;
130
  }
131
 
132
+ /**
133
+ * @return array[]
134
+ * @psalm-return array<string, string>
135
+ */
136
  public function getFallbackDirs()
137
  {
138
  return $this->fallbackDirsPsr0;
139
  }
140
 
141
+ /**
142
+ * @return array[]
143
+ * @psalm-return array<string, string>
144
+ */
145
  public function getFallbackDirsPsr4()
146
  {
147
  return $this->fallbackDirsPsr4;
148
  }
149
 
150
+ /**
151
+ * @return string[] Array of classname => path
152
+ * @psalm-return array<string, string>
153
+ */
154
  public function getClassMap()
155
  {
156
  return $this->classMap;
157
  }
158
 
159
  /**
160
+ * @param string[] $classMap Class to filename map
161
+ * @psalm-param array<string, string> $classMap
162
+ *
163
+ * @return void
164
  */
165
  public function addClassMap(array $classMap)
166
  {
175
  * Registers a set of PSR-0 directories for a given prefix, either
176
  * appending or prepending to the ones previously set for this prefix.
177
  *
178
+ * @param string $prefix The prefix
179
+ * @param string[]|string $paths The PSR-0 root directories
180
+ * @param bool $prepend Whether to prepend the directories
181
+ *
182
+ * @return void
183
  */
184
  public function add($prefix, $paths, $prepend = false)
185
  {
222
  * Registers a set of PSR-4 directories for a given namespace, either
223
  * appending or prepending to the ones previously set for this namespace.
224
  *
225
+ * @param string $prefix The prefix/namespace, with trailing '\\'
226
+ * @param string[]|string $paths The PSR-4 base directories
227
+ * @param bool $prepend Whether to prepend the directories
228
  *
229
  * @throws \InvalidArgumentException
230
+ *
231
+ * @return void
232
  */
233
  public function addPsr4($prefix, $paths, $prepend = false)
234
  {
272
  * Registers a set of PSR-0 directories for a given prefix,
273
  * replacing any others previously set for this prefix.
274
  *
275
+ * @param string $prefix The prefix
276
+ * @param string[]|string $paths The PSR-0 base directories
277
+ *
278
+ * @return void
279
  */
280
  public function set($prefix, $paths)
281
  {
290
  * Registers a set of PSR-4 directories for a given namespace,
291
  * replacing any others previously set for this namespace.
292
  *
293
+ * @param string $prefix The prefix/namespace, with trailing '\\'
294
+ * @param string[]|string $paths The PSR-4 base directories
295
  *
296
  * @throws \InvalidArgumentException
297
+ *
298
+ * @return void
299
  */
300
  public function setPsr4($prefix, $paths)
301
  {
315
  * Turns on searching the include path for class files.
316
  *
317
  * @param bool $useIncludePath
318
+ *
319
+ * @return void
320
  */
321
  public function setUseIncludePath($useIncludePath)
322
  {
339
  * that have not been registered with the class map.
340
  *
341
  * @param bool $classMapAuthoritative
342
+ *
343
+ * @return void
344
  */
345
  public function setClassMapAuthoritative($classMapAuthoritative)
346
  {
361
  * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
362
  *
363
  * @param string|null $apcuPrefix
364
+ *
365
+ * @return void
366
  */
367
  public function setApcuPrefix($apcuPrefix)
368
  {
383
  * Registers this instance as an autoloader.
384
  *
385
  * @param bool $prepend Whether to prepend the autoloader or not
386
+ *
387
+ * @return void
388
  */
389
  public function register($prepend = false)
390
  {
391
  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
392
+
393
+ if (null === $this->vendorDir) {
394
+ return;
395
+ }
396
+
397
+ if ($prepend) {
398
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
399
+ } else {
400
+ unset(self::$registeredLoaders[$this->vendorDir]);
401
+ self::$registeredLoaders[$this->vendorDir] = $this;
402
+ }
403
  }
404
 
405
  /**
406
  * Unregisters this instance as an autoloader.
407
+ *
408
+ * @return void
409
  */
410
  public function unregister()
411
  {
412
  spl_autoload_unregister(array($this, 'loadClass'));
413
+
414
+ if (null !== $this->vendorDir) {
415
+ unset(self::$registeredLoaders[$this->vendorDir]);
416
+ }
417
  }
418
 
419
  /**
420
  * Loads the given class or interface.
421
  *
422
  * @param string $class The name of the class
423
+ * @return true|null True if loaded, null otherwise
424
  */
425
  public function loadClass($class)
426
  {
429
 
430
  return true;
431
  }
432
+
433
+ return null;
434
  }
435
 
436
  /**
475
  return $file;
476
  }
477
 
478
+ /**
479
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
480
+ *
481
+ * @return self[]
482
+ */
483
+ public static function getRegisteredLoaders()
484
+ {
485
+ return self::$registeredLoaders;
486
+ }
487
+
488
+ /**
489
+ * @param string $class
490
+ * @param string $ext
491
+ * @return string|false
492
+ */
493
  private function findFileWithExtension($class, $ext)
494
  {
495
  // PSR-4 lookup
561
  * Scope isolated include.
562
  *
563
  * Prevents access to $this/self from included files.
564
+ *
565
+ * @param string $file
566
+ * @return void
567
+ * @private
568
  */
569
  function includeFile($file)
570
  {
includes/gateways/stripe/vendor/composer/InstalledVersions.php CHANGED
@@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
20
  *
21
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
  *
23
- * To require it's presence, you can require `composer-runtime-api ^2.0`
 
 
24
  */
25
  class InstalledVersions
26
  {
 
 
 
 
27
  private static $installed;
 
 
 
 
28
  private static $canGetVendors;
 
 
 
 
 
29
  private static $installedByVendor = array();
30
 
31
  /**
@@ -228,7 +243,7 @@ class InstalledVersions
228
 
229
  /**
230
  * @return array
231
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
232
  */
233
  public static function getRootPackage()
234
  {
@@ -242,7 +257,7 @@ class InstalledVersions
242
  *
243
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
244
  * @return array[]
245
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
246
  */
247
  public static function getRawData()
248
  {
@@ -265,7 +280,7 @@ class InstalledVersions
265
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
266
  *
267
  * @return array[]
268
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
269
  */
270
  public static function getAllRawData()
271
  {
@@ -288,7 +303,7 @@ class InstalledVersions
288
  * @param array[] $data A vendor/composer/installed.php data set
289
  * @return void
290
  *
291
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
292
  */
293
  public static function reload($data)
294
  {
@@ -298,7 +313,7 @@ class InstalledVersions
298
 
299
  /**
300
  * @return array[]
301
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
302
  */
303
  private static function getInstalled()
304
  {
20
  *
21
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
22
  *
23
+ * To require its presence, you can require `composer-runtime-api ^2.0`
24
+ *
25
+ * @final
26
  */
27
  class InstalledVersions
28
  {
29
+ /**
30
+ * @var mixed[]|null
31
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
32
+ */
33
  private static $installed;
34
+
35
+ /**
36
+ * @var bool|null
37
+ */
38
  private static $canGetVendors;
39
+
40
+ /**
41
+ * @var array[]
42
+ * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
43
+ */
44
  private static $installedByVendor = array();
45
 
46
  /**
243
 
244
  /**
245
  * @return array
246
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
247
  */
248
  public static function getRootPackage()
249
  {
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
261
  */
262
  public static function getRawData()
263
  {
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
284
  */
285
  public static function getAllRawData()
286
  {
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
307
  */
308
  public static function reload($data)
309
  {
313
 
314
  /**
315
  * @return array[]
316
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
317
  */
318
  private static function getInstalled()
319
  {
includes/gateways/stripe/vendor/composer/LICENSE CHANGED
@@ -1,3 +1,4 @@
 
1
  Copyright (c) Nils Adermann, Jordi Boggiano
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -17,3 +18,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
  THE SOFTWARE.
 
1
+
2
  Copyright (c) Nils Adermann, Jordi Boggiano
3
 
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
18
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
  THE SOFTWARE.
21
+
includes/gateways/stripe/vendor/composer/autoload_classmap.php CHANGED
@@ -2,8 +2,9 @@
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  );
2
 
3
  // autoload_classmap.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
10
  );
includes/gateways/stripe/vendor/composer/autoload_namespaces.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_namespaces.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
includes/gateways/stripe/vendor/composer/autoload_psr4.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
- $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
2
 
3
  // autoload_psr4.php @generated by Composer
4
 
5
+ $vendorDir = dirname(__DIR__);
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
includes/gateways/stripe/vendor/composer/autoload_real.php CHANGED
@@ -22,31 +22,14 @@ class ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a
22
  return self::$loader;
23
  }
24
 
 
 
25
  spl_autoload_register(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'), true, true);
26
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
  spl_autoload_unregister(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'));
28
 
29
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
- if ($useStaticLoader) {
31
- require_once __DIR__ . '/autoload_static.php';
32
-
33
- call_user_func(\Composer\Autoload\ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::getInitializer($loader));
34
- } else {
35
- $map = require __DIR__ . '/autoload_namespaces.php';
36
- foreach ($map as $namespace => $path) {
37
- $loader->set($namespace, $path);
38
- }
39
-
40
- $map = require __DIR__ . '/autoload_psr4.php';
41
- foreach ($map as $namespace => $path) {
42
- $loader->setPsr4($namespace, $path);
43
- }
44
-
45
- $classMap = require __DIR__ . '/autoload_classmap.php';
46
- if ($classMap) {
47
- $loader->addClassMap($classMap);
48
- }
49
- }
50
 
51
  $loader->register(true);
52
 
22
  return self::$loader;
23
  }
24
 
25
+ require __DIR__ . '/platform_check.php';
26
+
27
  spl_autoload_register(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'), true, true);
28
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
  spl_autoload_unregister(array('ComposerAutoloaderInitce2073d68aa3da842e5b37a3b60e999a', 'loadClassLoader'));
30
 
31
+ require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::getInitializer($loader));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  $loader->register(true);
35
 
includes/gateways/stripe/vendor/composer/autoload_static.php CHANGED
@@ -28,11 +28,16 @@ class ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a
28
  ),
29
  );
30
 
 
 
 
 
31
  public static function getInitializer(ClassLoader $loader)
32
  {
33
  return \Closure::bind(function () use ($loader) {
34
  $loader->prefixLengthsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixLengthsPsr4;
35
  $loader->prefixDirsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixDirsPsr4;
 
36
 
37
  }, null, ClassLoader::class);
38
  }
28
  ),
29
  );
30
 
31
+ public static $classMap = array (
32
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
33
+ );
34
+
35
  public static function getInitializer(ClassLoader $loader)
36
  {
37
  return \Closure::bind(function () use ($loader) {
38
  $loader->prefixLengthsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixLengthsPsr4;
39
  $loader->prefixDirsPsr4 = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$prefixDirsPsr4;
40
+ $loader->classMap = ComposerStaticInitce2073d68aa3da842e5b37a3b60e999a::$classMap;
41
 
42
  }, null, ClassLoader::class);
43
  }
includes/gateways/stripe/vendor/composer/installed.json CHANGED
@@ -1,217 +1,223 @@
1
- [
2
- {
3
- "name": "composer/installers",
4
- "version": "v1.11.0",
5
- "version_normalized": "1.11.0.0",
6
- "source": {
7
- "type": "git",
8
- "url": "https://github.com/composer/installers.git",
9
- "reference": "ae03311f45dfe194412081526be2e003960df74b"
10
- },
11
- "dist": {
12
- "type": "zip",
13
- "url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
14
- "reference": "ae03311f45dfe194412081526be2e003960df74b",
15
- "shasum": ""
16
- },
17
- "require": {
18
- "composer-plugin-api": "^1.0 || ^2.0"
19
- },
20
- "replace": {
21
- "roundcube/plugin-installer": "*",
22
- "shama/baton": "*"
23
- },
24
- "require-dev": {
25
- "composer/composer": "1.6.* || ^2.0",
26
- "composer/semver": "^1 || ^3",
27
- "phpstan/phpstan": "^0.12.55",
28
- "phpstan/phpstan-phpunit": "^0.12.16",
29
- "symfony/phpunit-bridge": "^4.2 || ^5",
30
- "symfony/process": "^2.3"
31
- },
32
- "time": "2021-04-28T06:42:17+00:00",
33
- "type": "composer-plugin",
34
- "extra": {
35
- "class": "Composer\\Installers\\Plugin",
36
- "branch-alias": {
37
- "dev-main": "1.x-dev"
38
- }
39
- },
40
- "installation-source": "dist",
41
- "autoload": {
42
- "psr-4": {
43
- "Composer\\Installers\\": "src/Composer/Installers"
44
- }
45
- },
46
- "notification-url": "https://packagist.org/downloads/",
47
- "license": [
48
- "MIT"
49
- ],
50
- "authors": [
51
- {
52
- "name": "Kyle Robinson Young",
53
- "email": "kyle@dontkry.com",
54
- "homepage": "https://github.com/shama"
55
- }
56
- ],
57
- "description": "A multi-framework Composer library installer",
58
- "homepage": "https://composer.github.io/installers/",
59
- "keywords": [
60
- "Craft",
61
- "Dolibarr",
62
- "Eliasis",
63
- "Hurad",
64
- "ImageCMS",
65
- "Kanboard",
66
- "Lan Management System",
67
- "MODX Evo",
68
- "MantisBT",
69
- "Mautic",
70
- "Maya",
71
- "OXID",
72
- "Plentymarkets",
73
- "Porto",
74
- "RadPHP",
75
- "SMF",
76
- "Starbug",
77
- "Thelia",
78
- "Whmcs",
79
- "WolfCMS",
80
- "agl",
81
- "aimeos",
82
- "annotatecms",
83
- "attogram",
84
- "bitrix",
85
- "cakephp",
86
- "chef",
87
- "cockpit",
88
- "codeigniter",
89
- "concrete5",
90
- "croogo",
91
- "dokuwiki",
92
- "drupal",
93
- "eZ Platform",
94
- "elgg",
95
- "expressionengine",
96
- "fuelphp",
97
- "grav",
98
- "installer",
99
- "itop",
100
- "joomla",
101
- "known",
102
- "kohana",
103
- "laravel",
104
- "lavalite",
105
- "lithium",
106
- "magento",
107
- "majima",
108
- "mako",
109
- "mediawiki",
110
- "miaoxing",
111
- "modulework",
112
- "modx",
113
- "moodle",
114
- "osclass",
115
- "phpbb",
116
- "piwik",
117
- "ppi",
118
- "processwire",
119
- "puppet",
120
- "pxcms",
121
- "reindex",
122
- "roundcube",
123
- "shopware",
124
- "silverstripe",
125
- "sydes",
126
- "sylius",
127
- "symfony",
128
- "tastyigniter",
129
- "typo3",
130
- "wordpress",
131
- "yawik",
132
- "zend",
133
- "zikula"
134
- ],
135
- "support": {
136
- "issues": "https://github.com/composer/installers/issues",
137
- "source": "https://github.com/composer/installers/tree/v1.11.0"
138
- },
139
- "funding": [
140
- {
141
- "url": "https://packagist.com",
142
- "type": "custom"
143
  },
144
- {
145
- "url": "https://github.com/composer",
146
- "type": "github"
 
 
147
  },
148
- {
149
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
150
- "type": "tidelift"
151
- }
152
- ]
153
- },
154
- {
155
- "name": "stripe/stripe-php",
156
- "version": "v7.47.0",
157
- "version_normalized": "7.47.0.0",
158
- "source": {
159
- "type": "git",
160
- "url": "https://github.com/stripe/stripe-php.git",
161
- "reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306"
162
- },
163
- "dist": {
164
- "type": "zip",
165
- "url": "https://api.github.com/repos/stripe/stripe-php/zipball/b51656cb398d081fcee53a76f6edb8fd5c1a5306",
166
- "reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306",
167
- "shasum": ""
168
- },
169
- "require": {
170
- "ext-curl": "*",
171
- "ext-json": "*",
172
- "ext-mbstring": "*",
173
- "php": ">=5.6.0"
174
- },
175
- "require-dev": {
176
- "friendsofphp/php-cs-fixer": "2.16.1",
177
- "php-coveralls/php-coveralls": "^2.1",
178
- "phpunit/phpunit": "^5.7",
179
- "squizlabs/php_codesniffer": "^3.3",
180
- "symfony/process": "~3.4"
181
- },
182
- "time": "2020-08-13T22:35:56+00:00",
183
- "type": "library",
184
- "extra": {
185
- "branch-alias": {
186
- "dev-master": "2.0-dev"
187
- }
188
- },
189
- "installation-source": "dist",
190
- "autoload": {
191
- "psr-4": {
192
- "Stripe\\": "lib/"
193
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  },
195
- "notification-url": "https://packagist.org/downloads/",
196
- "license": [
197
- "MIT"
198
- ],
199
- "authors": [
200
- {
201
- "name": "Stripe and contributors",
202
- "homepage": "https://github.com/stripe/stripe-php/contributors"
203
- }
204
- ],
205
- "description": "Stripe PHP Library",
206
- "homepage": "https://stripe.com/",
207
- "keywords": [
208
- "api",
209
- "payment processing",
210
- "stripe"
211
- ],
212
- "support": {
213
- "issues": "https://github.com/stripe/stripe-php/issues",
214
- "source": "https://github.com/stripe/stripe-php/tree/v7.47.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
216
- }
217
- ]
 
 
1
+ {
2
+ "packages": [
3
+ {
4
+ "name": "composer/installers",
5
+ "version": "v1.11.0",
6
+ "version_normalized": "1.11.0.0",
7
+ "source": {
8
+ "type": "git",
9
+ "url": "https://github.com/composer/installers.git",
10
+ "reference": "ae03311f45dfe194412081526be2e003960df74b"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  },
12
+ "dist": {
13
+ "type": "zip",
14
+ "url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
15
+ "reference": "ae03311f45dfe194412081526be2e003960df74b",
16
+ "shasum": ""
17
  },
18
+ "require": {
19
+ "composer-plugin-api": "^1.0 || ^2.0"
20
+ },
21
+ "replace": {
22
+ "roundcube/plugin-installer": "*",
23
+ "shama/baton": "*"
24
+ },
25
+ "require-dev": {
26
+ "composer/composer": "1.6.* || ^2.0",
27
+ "composer/semver": "^1 || ^3",
28
+ "phpstan/phpstan": "^0.12.55",
29
+ "phpstan/phpstan-phpunit": "^0.12.16",
30
+ "symfony/phpunit-bridge": "^4.2 || ^5",
31
+ "symfony/process": "^2.3"
32
+ },
33
+ "time": "2021-04-28T06:42:17+00:00",
34
+ "type": "composer-plugin",
35
+ "extra": {
36
+ "class": "Composer\\Installers\\Plugin",
37
+ "branch-alias": {
38
+ "dev-main": "1.x-dev"
39
+ }
40
+ },
41
+ "installation-source": "dist",
42
+ "autoload": {
43
+ "psr-4": {
44
+ "Composer\\Installers\\": "src/Composer/Installers"
45
+ }
46
+ },
47
+ "notification-url": "https://packagist.org/downloads/",
48
+ "license": [
49
+ "MIT"
50
+ ],
51
+ "authors": [
52
+ {
53
+ "name": "Kyle Robinson Young",
54
+ "email": "kyle@dontkry.com",
55
+ "homepage": "https://github.com/shama"
56
+ }
57
+ ],
58
+ "description": "A multi-framework Composer library installer",
59
+ "homepage": "https://composer.github.io/installers/",
60
+ "keywords": [
61
+ "Craft",
62
+ "Dolibarr",
63
+ "Eliasis",
64
+ "Hurad",
65
+ "ImageCMS",
66
+ "Kanboard",
67
+ "Lan Management System",
68
+ "MODX Evo",
69
+ "MantisBT",
70
+ "Mautic",
71
+ "Maya",
72
+ "OXID",
73
+ "Plentymarkets",
74
+ "Porto",
75
+ "RadPHP",
76
+ "SMF",
77
+ "Starbug",
78
+ "Thelia",
79
+ "Whmcs",
80
+ "WolfCMS",
81
+ "agl",
82
+ "aimeos",
83
+ "annotatecms",
84
+ "attogram",
85
+ "bitrix",
86
+ "cakephp",
87
+ "chef",
88
+ "cockpit",
89
+ "codeigniter",
90
+ "concrete5",
91
+ "croogo",
92
+ "dokuwiki",
93
+ "drupal",
94
+ "eZ Platform",
95
+ "elgg",
96
+ "expressionengine",
97
+ "fuelphp",
98
+ "grav",
99
+ "installer",
100
+ "itop",
101
+ "joomla",
102
+ "known",
103
+ "kohana",
104
+ "laravel",
105
+ "lavalite",
106
+ "lithium",
107
+ "magento",
108
+ "majima",
109
+ "mako",
110
+ "mediawiki",
111
+ "miaoxing",
112
+ "modulework",
113
+ "modx",
114
+ "moodle",
115
+ "osclass",
116
+ "phpbb",
117
+ "piwik",
118
+ "ppi",
119
+ "processwire",
120
+ "puppet",
121
+ "pxcms",
122
+ "reindex",
123
+ "roundcube",
124
+ "shopware",
125
+ "silverstripe",
126
+ "sydes",
127
+ "sylius",
128
+ "symfony",
129
+ "tastyigniter",
130
+ "typo3",
131
+ "wordpress",
132
+ "yawik",
133
+ "zend",
134
+ "zikula"
135
+ ],
136
+ "support": {
137
+ "issues": "https://github.com/composer/installers/issues",
138
+ "source": "https://github.com/composer/installers/tree/v1.11.0"
139
+ },
140
+ "funding": [
141
+ {
142
+ "url": "https://packagist.com",
143
+ "type": "custom"
144
+ },
145
+ {
146
+ "url": "https://github.com/composer",
147
+ "type": "github"
148
+ },
149
+ {
150
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
151
+ "type": "tidelift"
152
+ }
153
+ ],
154
+ "install-path": "./installers"
155
  },
156
+ {
157
+ "name": "stripe/stripe-php",
158
+ "version": "v7.47.0",
159
+ "version_normalized": "7.47.0.0",
160
+ "source": {
161
+ "type": "git",
162
+ "url": "https://github.com/stripe/stripe-php.git",
163
+ "reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306"
164
+ },
165
+ "dist": {
166
+ "type": "zip",
167
+ "url": "https://api.github.com/repos/stripe/stripe-php/zipball/b51656cb398d081fcee53a76f6edb8fd5c1a5306",
168
+ "reference": "b51656cb398d081fcee53a76f6edb8fd5c1a5306",
169
+ "shasum": ""
170
+ },
171
+ "require": {
172
+ "ext-curl": "*",
173
+ "ext-json": "*",
174
+ "ext-mbstring": "*",
175
+ "php": ">=5.6.0"
176
+ },
177
+ "require-dev": {
178
+ "friendsofphp/php-cs-fixer": "2.16.1",
179
+ "php-coveralls/php-coveralls": "^2.1",
180
+ "phpunit/phpunit": "^5.7",
181
+ "squizlabs/php_codesniffer": "^3.3",
182
+ "symfony/process": "~3.4"
183
+ },
184
+ "time": "2020-08-13T22:35:56+00:00",
185
+ "type": "library",
186
+ "extra": {
187
+ "branch-alias": {
188
+ "dev-master": "2.0-dev"
189
+ }
190
+ },
191
+ "installation-source": "dist",
192
+ "autoload": {
193
+ "psr-4": {
194
+ "Stripe\\": "lib/"
195
+ }
196
+ },
197
+ "notification-url": "https://packagist.org/downloads/",
198
+ "license": [
199
+ "MIT"
200
+ ],
201
+ "authors": [
202
+ {
203
+ "name": "Stripe and contributors",
204
+ "homepage": "https://github.com/stripe/stripe-php/contributors"
205
+ }
206
+ ],
207
+ "description": "Stripe PHP Library",
208
+ "homepage": "https://stripe.com/",
209
+ "keywords": [
210
+ "api",
211
+ "payment processing",
212
+ "stripe"
213
+ ],
214
+ "support": {
215
+ "issues": "https://github.com/stripe/stripe-php/issues",
216
+ "source": "https://github.com/stripe/stripe-php/tree/v7.47.0"
217
+ },
218
+ "install-path": "../stripe/stripe-php"
219
  }
220
+ ],
221
+ "dev": false,
222
+ "dev-package-names": []
223
+ }
includes/gateways/stripe/vendor/composer/installed.php CHANGED
@@ -1,31 +1,31 @@
1
  <?php return array(
2
  'root' => array(
 
3
  'pretty_version' => 'dev-master',
4
  'version' => 'dev-master',
 
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => 'e7f98d164d4da798f7126fec7d294fce16299e5d',
9
- 'name' => 'easy-digital-downloads/edd-stripe',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'composer/installers' => array(
14
  'pretty_version' => 'v1.11.0',
15
  'version' => '1.11.0.0',
 
16
  'type' => 'composer-plugin',
17
  'install_path' => __DIR__ . '/./installers',
18
  'aliases' => array(),
19
- 'reference' => 'ae03311f45dfe194412081526be2e003960df74b',
20
  'dev_requirement' => false,
21
  ),
22
  'easy-digital-downloads/edd-stripe' => array(
23
  'pretty_version' => 'dev-master',
24
  'version' => 'dev-master',
 
25
  'type' => 'wordpress-plugin',
26
  'install_path' => __DIR__ . '/../../',
27
  'aliases' => array(),
28
- 'reference' => 'e7f98d164d4da798f7126fec7d294fce16299e5d',
29
  'dev_requirement' => false,
30
  ),
31
  'roundcube/plugin-installer' => array(
@@ -43,10 +43,10 @@
43
  'stripe/stripe-php' => array(
44
  'pretty_version' => 'v7.47.0',
45
  'version' => '7.47.0.0',
 
46
  'type' => 'library',
47
  'install_path' => __DIR__ . '/../stripe/stripe-php',
48
  'aliases' => array(),
49
- 'reference' => 'b51656cb398d081fcee53a76f6edb8fd5c1a5306',
50
  'dev_requirement' => false,
51
  ),
52
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'name' => 'easy-digital-downloads/edd-stripe',
4
  'pretty_version' => 'dev-master',
5
  'version' => 'dev-master',
6
+ 'reference' => '9f03119172fb91371f1a53d7e596334f381552a8',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
 
 
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'composer/installers' => array(
14
  'pretty_version' => 'v1.11.0',
15
  'version' => '1.11.0.0',
16
+ 'reference' => 'ae03311f45dfe194412081526be2e003960df74b',
17
  'type' => 'composer-plugin',
18
  'install_path' => __DIR__ . '/./installers',
19
  'aliases' => array(),
 
20
  'dev_requirement' => false,
21
  ),
22
  'easy-digital-downloads/edd-stripe' => array(
23
  'pretty_version' => 'dev-master',
24
  'version' => 'dev-master',
25
+ 'reference' => '9f03119172fb91371f1a53d7e596334f381552a8',
26
  'type' => 'wordpress-plugin',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),
 
29
  'dev_requirement' => false,
30
  ),
31
  'roundcube/plugin-installer' => array(
43
  'stripe/stripe-php' => array(
44
  'pretty_version' => 'v7.47.0',
45
  'version' => '7.47.0.0',
46
+ 'reference' => 'b51656cb398d081fcee53a76f6edb8fd5c1a5306',
47
  'type' => 'library',
48
  'install_path' => __DIR__ . '/../stripe/stripe-php',
49
  'aliases' => array(),
 
50
  'dev_requirement' => false,
51
  ),
52
  ),
includes/login-register.php CHANGED
@@ -107,7 +107,7 @@ function edd_process_login_form( $data ) {
107
  // Check for errors and redirect if none present.
108
  $errors = edd_get_errors();
109
  if ( ! $errors ) {
110
- $default_redirect_url = esc_url_raw( $data['edd_redirect'] );
111
  if ( has_filter( 'edd_login_redirect' ) ) {
112
  $user_id = $user instanceof WP_User ? $user->ID : false;
113
  /**
@@ -117,9 +117,9 @@ function edd_process_login_form( $data ) {
117
  * @param string $default_redirect_url The URL to which to redirect after logging in.
118
  * @param int|false User ID. false if no ID is available.
119
  */
120
- wp_redirect( apply_filters( 'edd_login_redirect', $default_redirect_url, $user_id ) );
121
  } else {
122
- wp_safe_redirect( $default_redirect_url );
123
  }
124
  edd_die();
125
  }
@@ -299,7 +299,7 @@ function edd_process_register_form( $data ) {
299
  )
300
  );
301
 
302
- wp_redirect( $redirect );
303
  edd_die();
304
  }
305
  }
107
  // Check for errors and redirect if none present.
108
  $errors = edd_get_errors();
109
  if ( ! $errors ) {
110
+ $default_redirect_url = $data['edd_redirect'];
111
  if ( has_filter( 'edd_login_redirect' ) ) {
112
  $user_id = $user instanceof WP_User ? $user->ID : false;
113
  /**
117
  * @param string $default_redirect_url The URL to which to redirect after logging in.
118
  * @param int|false User ID. false if no ID is available.
119
  */
120
+ wp_redirect( esc_url_raw( apply_filters( 'edd_login_redirect', $default_redirect_url, $user_id ) ) );
121
  } else {
122
+ wp_safe_redirect( esc_url_raw( $default_redirect_url ) );
123
  }
124
  edd_die();
125
  }
299
  )
300
  );
301
 
302
+ wp_safe_redirect( esc_url_raw( $redirect ) );
303
  edd_die();
304
  }
305
  }
includes/payments/actions.php CHANGED
@@ -449,7 +449,8 @@ function edd_recover_payment() {
449
  ) {
450
  $redirect = get_permalink( edd_get_option( 'purchase_history_page' ) );
451
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
452
- wp_redirect( $redirect );
 
453
  }
454
 
455
  $payment->add_note( __( 'Payment recovery triggered URL', 'easy-digital-downloads' ) );
@@ -487,9 +488,9 @@ function edd_recover_payment() {
487
 
488
  EDD()->session->set( 'edd_resume_payment', $payment->ID );
489
 
490
- $redirect_args = array( 'payment-mode' => $payment->gateway );
491
  $redirect = add_query_arg( $redirect_args, edd_get_checkout_uri() );
492
- wp_redirect( $redirect );
493
  exit;
494
  }
495
  add_action( 'edd_recover_payment', 'edd_recover_payment' );
@@ -511,7 +512,7 @@ function edd_recovery_user_mismatch() {
511
  if ( is_user_logged_in() && $payment->user_id != get_current_user_id() ) {
512
  edd_empty_cart();
513
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
514
- wp_redirect( get_permalink( edd_get_option( 'purchase_page' ) ) );
515
  exit;
516
  }
517
  }
449
  ) {
450
  $redirect = get_permalink( edd_get_option( 'purchase_history_page' ) );
451
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
452
+ wp_safe_redirect( esc_url_raw( $redirect ) );
453
+ exit;
454
  }
455
 
456
  $payment->add_note( __( 'Payment recovery triggered URL', 'easy-digital-downloads' ) );
488
 
489
  EDD()->session->set( 'edd_resume_payment', $payment->ID );
490
 
491
+ $redirect_args = array( 'payment-mode' => urlencode( $payment->gateway ) );
492
  $redirect = add_query_arg( $redirect_args, edd_get_checkout_uri() );
493
+ wp_safe_redirect( esc_url_raw( $redirect ) );
494
  exit;
495
  }
496
  add_action( 'edd_recover_payment', 'edd_recover_payment' );
512
  if ( is_user_logged_in() && $payment->user_id != get_current_user_id() ) {
513
  edd_empty_cart();
514
  edd_set_error( 'edd-payment-recovery-user-mismatch', __( 'Error resuming payment.', 'easy-digital-downloads' ) );
515
+ wp_safe_redirect( esc_url_raw( get_permalink( edd_get_option( 'purchase_page' ) ) ) );
516
  exit;
517
  }
518
  }
includes/payments/class-edd-payment.php CHANGED
@@ -1983,7 +1983,7 @@ class EDD_Payment {
1983
  return false;
1984
  }
1985
 
1986
- $recovery_url = add_query_arg( array( 'edd_action' => 'recover_payment', 'payment_id' => $this->ID ), edd_get_checkout_uri() );
1987
 
1988
  return apply_filters( 'edd_payment_recovery_url', $recovery_url, $this );
1989
  }
1983
  return false;
1984
  }
1985
 
1986
+ $recovery_url = add_query_arg( array( 'edd_action' => 'recover_payment', 'payment_id' => urlencode( $this->ID ) ), edd_get_checkout_uri() );
1987
 
1988
  return apply_filters( 'edd_payment_recovery_url', $recovery_url, $this );
1989
  }
includes/payments/functions.php CHANGED
@@ -1589,11 +1589,11 @@ function edd_get_payment_note_html( $note, $payment_id = 0 ) {
1589
 
1590
  $delete_note_url = wp_nonce_url( add_query_arg( array(
1591
  'edd-action' => 'delete_payment_note',
1592
- 'note_id' => $note->comment_ID,
1593
- 'payment_id' => $payment_id
1594
  ) ), 'edd_delete_payment_note_' . $note->comment_ID );
1595
 
1596
- $note_html = '<div class="edd-payment-note" id="edd-payment-note-' . $note->comment_ID . '">';
1597
  $note_html .='<p>';
1598
  $note_html .= '<strong>' . $user . '</strong>&nbsp;&ndash;&nbsp;' . date_i18n( $date_format, strtotime( $note->comment_date ) ) . '<br/>';
1599
  $note_html .= make_clickable( wp_kses_post( $note->comment_content ) );
1589
 
1590
  $delete_note_url = wp_nonce_url( add_query_arg( array(
1591
  'edd-action' => 'delete_payment_note',
1592
+ 'note_id' => urlencode( $note->comment_ID ),
1593
+ 'payment_id' => urlencode( $payment_id ),
1594
  ) ), 'edd_delete_payment_note_' . $note->comment_ID );
1595
 
1596
+ $note_html = '<div class="edd-payment-note" id="edd-payment-note-' . esc_attr( $note->comment_ID ) . '">';
1597
  $note_html .='<p>';
1598
  $note_html .= '<strong>' . $user . '</strong>&nbsp;&ndash;&nbsp;' . date_i18n( $date_format, strtotime( $note->comment_date ) ) . '<br/>';
1599
  $note_html .= make_clickable( wp_kses_post( $note->comment_content ) );
includes/post-types.php CHANGED
@@ -377,7 +377,7 @@ add_action( 'init', 'edd_register_post_type_statuses', 2 );
377
  function edd_updated_messages( $messages ) {
378
  global $post, $post_ID;
379
 
380
- $url1 = '<a href="' . get_permalink( $post_ID ) . '">';
381
  $url2 = edd_get_label_singular();
382
  $url3 = '</a>';
383
 
377
  function edd_updated_messages( $messages ) {
378
  global $post, $post_ID;
379
 
380
+ $url1 = '<a href="' . esc_url( get_permalink( $post_ID ) ) . '">';
381
  $url2 = edd_get_label_singular();
382
  $url3 = '</a>';
383
 
includes/process-purchase.php CHANGED
@@ -243,7 +243,8 @@ function edd_process_purchase_login() {
243
  do_action( 'edd_ajax_checkout_errors' );
244
  edd_die();
245
  } else {
246
- wp_redirect( $_SERVER['HTTP_REFERER'] ); exit;
 
247
  }
248
  }
249
 
@@ -254,7 +255,8 @@ function edd_process_purchase_login() {
254
  do_action( 'edd_ajax_checkout_errors' );
255
  edd_die();
256
  } else {
257
- wp_redirect( $_SERVER['HTTP_REFERER'] ); exit;
 
258
  }
259
  }
260
 
@@ -264,7 +266,8 @@ function edd_process_purchase_login() {
264
  echo 'success';
265
  edd_die();
266
  } else {
267
- wp_redirect( edd_get_checkout_uri( $_SERVER['QUERY_STRING'] ) );
 
268
  }
269
  }
270
  add_action( 'wp_ajax_edd_process_checkout_login', 'edd_process_purchase_login' );
@@ -1234,7 +1237,7 @@ function edd_process_straight_to_gateway( $data ) {
1234
  }
1235
 
1236
  edd_set_error( 'edd-straight-to-gateway-error', __( 'There was an error completing your purchase. Please try again.', 'easy-digital-downloads' ) );
1237
- wp_redirect( edd_get_checkout_uri() );
1238
  exit;
1239
  }
1240
 
243
  do_action( 'edd_ajax_checkout_errors' );
244
  edd_die();
245
  } else {
246
+ wp_redirect( esc_url_raw( wp_get_referer() ) );
247
+ exit;
248
  }
249
  }
250
 
255
  do_action( 'edd_ajax_checkout_errors' );
256
  edd_die();
257
  } else {
258
+ wp_redirect( esc_url_raw( wp_get_referer() ) );
259
+ exit;
260
  }
261
  }
262
 
266
  echo 'success';
267
  edd_die();
268
  } else {
269
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri( $_SERVER['QUERY_STRING'] ) ) );
270
+ exit;
271
  }
272
  }
273
  add_action( 'wp_ajax_edd_process_checkout_login', 'edd_process_purchase_login' );
1237
  }
1238
 
1239
  edd_set_error( 'edd-straight-to-gateway-error', __( 'There was an error completing your purchase. Please try again.', 'easy-digital-downloads' ) );
1240
+ wp_safe_redirect( esc_url_raw( edd_get_checkout_uri() ) );
1241
  exit;
1242
  }
1243
 
includes/query-filters.php CHANGED
@@ -144,7 +144,8 @@ function edd_refresh_permalinks_on_bad_404() {
144
 
145
  set_transient( 'edd_refresh_404_permalinks', 1, HOUR_IN_SECONDS * 12 );
146
 
147
- wp_redirect( home_url( add_query_arg( array( 'edd-flush' => 1 ), $wp->request ) ) ); exit;
 
148
 
149
  }
150
  }
144
 
145
  set_transient( 'edd_refresh_404_permalinks', 1, HOUR_IN_SECONDS * 12 );
146
 
147
+ wp_safe_redirect( esc_url_raw( home_url( add_query_arg( array( 'edd-flush' => 1 ), $wp->request ) ) ) );
148
+ exit;
149
 
150
  }
151
  }
includes/scripts.php CHANGED
@@ -55,7 +55,7 @@ function edd_load_scripts() {
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(''),
@@ -81,7 +81,7 @@ function edd_load_scripts() {
81
  wp_enqueue_script( 'edd-ajax' );
82
 
83
  wp_localize_script( 'edd-ajax', 'edd_scripts', apply_filters( 'edd_ajax_script_vars', array(
84
- 'ajaxurl' => edd_get_ajax_url(),
85
  'position_in_cart' => isset( $position ) ? $position : -1,
86
  'has_purchase_links' => $has_purchase_links,
87
  'already_in_cart_message' => __('You have already added this item to your cart','easy-digital-downloads' ), // Item already in the cart message
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' => esc_url_raw( 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(''),
81
  wp_enqueue_script( 'edd-ajax' );
82
 
83
  wp_localize_script( 'edd-ajax', 'edd_scripts', apply_filters( 'edd_ajax_script_vars', array(
84
+ 'ajaxurl' => esc_url_raw( edd_get_ajax_url() ),
85
  'position_in_cart' => isset( $position ) ? $position : -1,
86
  'has_purchase_links' => $has_purchase_links,
87
  'already_in_cart_message' => __('You have already added this item to your cart','easy-digital-downloads' ), // Item already in the cart message
includes/shortcodes.php CHANGED
@@ -615,7 +615,7 @@ function edd_downloads_query( $atts, $content = null ) {
615
  </div>
616
 
617
  <?php
618
-
619
  else:
620
  printf( _x( 'No %s found', 'download post type name', 'easy-digital-downloads' ), edd_get_label_plural() );
621
  endif;
@@ -869,7 +869,7 @@ function edd_process_profile_editor_updates( $data ) {
869
 
870
  if( $errors ) {
871
  // Send back to the profile editor if there are errors
872
- wp_redirect( $data['edd_redirect'] );
873
  edd_die();
874
  }
875
 
@@ -893,7 +893,7 @@ function edd_process_profile_editor_updates( $data ) {
893
 
894
  if ( $updated ) {
895
  do_action( 'edd_user_profile_updated', $user_id, $userdata );
896
- wp_redirect( add_query_arg( 'updated', 'true', $data['edd_redirect'] ) );
897
  edd_die();
898
  }
899
  }
@@ -939,7 +939,7 @@ function edd_process_profile_editor_remove_email() {
939
  $url = $_GET['redirect'];
940
  }
941
 
942
- wp_safe_redirect( $url );
943
  exit;
944
  }
945
  add_action( 'edd_profile-remove-email', 'edd_process_profile_editor_remove_email' );
615
  </div>
616
 
617
  <?php
618
+
619
  else:
620
  printf( _x( 'No %s found', 'download post type name', 'easy-digital-downloads' ), edd_get_label_plural() );
621
  endif;
869
 
870
  if( $errors ) {
871
  // Send back to the profile editor if there are errors
872
+ wp_safe_redirect( esc_url_raw( $data['edd_redirect'] ) );
873
  edd_die();
874
  }
875
 
893
 
894
  if ( $updated ) {
895
  do_action( 'edd_user_profile_updated', $user_id, $userdata );
896
+ wp_safe_redirect( esc_url_raw( add_query_arg( 'updated', 'true', $data['edd_redirect'] ) ) );
897
  edd_die();
898
  }
899
  }
939
  $url = $_GET['redirect'];
940
  }
941
 
942
+ wp_safe_redirect( esc_url_raw( $url ) );
943
  exit;
944
  }
945
  add_action( 'edd_profile-remove-email', 'edd_process_profile_editor_remove_email' );
includes/template-functions.php CHANGED
@@ -58,7 +58,7 @@ function edd_get_purchase_link( $args = array() ) {
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;
@@ -174,7 +174,7 @@ function edd_get_purchase_link( $args = array() ) {
174
 
175
  ob_start();
176
  ?>
177
- <form id="<?php echo $form_id; ?>" class="edd_download_purchase_form edd_purchase_<?php echo absint( $download->ID ); ?>" method="post">
178
 
179
  <?php do_action( 'edd_purchase_link_top', $download->ID, $args ); ?>
180
 
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' ), esc_url( admin_url( 'edit.php?post_type=download&page=edd-settings' ) ) ) );
62
  edd_print_errors();
63
 
64
  $no_checkout_error_displayed = true;
174
 
175
  ob_start();
176
  ?>
177
+ <form id="<?php echo esc_attr( $form_id ); ?>" class="edd_download_purchase_form edd_purchase_<?php echo absint( $download->ID ); ?>" method="post">
178
 
179
  <?php do_action( 'edd_purchase_link_top', $download->ID, $args ); ?>
180
 
includes/user-functions.php CHANGED
@@ -602,11 +602,11 @@ function edd_new_user_notification( $user_id = 0, $user_data = array() ) {
602
  $login_url = apply_filters( 'edd_user_registration_email_login_url', wp_login_url() );
603
  if( $emails->html ) {
604
 
605
- $user_message .= '<a href="' . $login_url . '"> ' . esc_attr__( 'Click here to log in', 'easy-digital-downloads' ) . ' &raquo;</a>' . "\r\n";
606
 
607
  } else {
608
 
609
- $user_message .= sprintf( __( 'To log in, visit: %s', 'easy-digital-downloads' ), $login_url ) . "\r\n";
610
 
611
  }
612
 
@@ -763,11 +763,14 @@ function edd_send_user_verification_email( $user_id = 0 ) {
763
  $subject = apply_filters( 'edd_user_verification_email_subject', __( 'Verify your account', 'easy-digital-downloads' ), $user_id );
764
  $heading = apply_filters( 'edd_user_verification_email_heading', __( 'Verify your account', 'easy-digital-downloads' ), $user_id );
765
  $message = sprintf(
766
- __( "Hello %s,\n\nYour account with %s needs to be verified before you can access your purchase history. <a href='%s'>Click here</a> to verify your account.\n\nLink missing? Visit the following URL: %s", 'easy-digital-downloads' ),
 
 
 
 
767
  $name,
768
  $from_name,
769
- $url,
770
- $url
771
  );
772
 
773
  $message = apply_filters( 'edd_user_verification_email_message', $message, $user_id );
@@ -889,7 +892,7 @@ function edd_validate_user_verification_token( $url = '' ) {
889
 
890
  $link_text = sprintf(
891
  __( 'Sorry but your account verification link has expired. <a href="%s">Click here</a> to request a new verification URL.', 'easy-digital-downloads' ),
892
- edd_get_user_verification_request_url()
893
  );
894
 
895
  wp_die( apply_filters( 'edd_verification_link_expired_text', $link_text ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
@@ -935,7 +938,7 @@ function edd_process_user_verification_request() {
935
  add_query_arg( 'edd-verify-request', '1', edd_get_user_verification_page() )
936
  );
937
 
938
- wp_safe_redirect( $redirect );
939
  exit;
940
 
941
  }
@@ -982,7 +985,7 @@ function edd_process_user_account_verification() {
982
  add_query_arg( 'edd-verify-success', '1', edd_get_user_verification_page() )
983
  );
984
 
985
- wp_safe_redirect( $redirect );
986
  exit;
987
 
988
  }
@@ -1099,7 +1102,7 @@ function edd_show_user_api_key_field( $user ) {
1099
  $sitename = get_bloginfo( 'name' );
1100
  $ios_url = 'edd://new?sitename=' . $sitename . '&siteurl=' . home_url() . '&key=' . $public_key . '&token=' . $token;
1101
  ?>
1102
- <a class="button-secondary" href="<?php echo $ios_url; ?>"><?php _e( 'Add to iOS App', 'easy-digital-downloads' ); ?></a>
1103
  </td>
1104
  </tr>
1105
  </tbody>
602
  $login_url = apply_filters( 'edd_user_registration_email_login_url', wp_login_url() );
603
  if( $emails->html ) {
604
 
605
+ $user_message .= '<a href="' . esc_url( $login_url ) . '"> ' . esc_attr__( 'Click here to log in', 'easy-digital-downloads' ) . ' &rarr;</a>' . "\r\n";
606
 
607
  } else {
608
 
609
+ $user_message .= sprintf( __( 'To log in, visit: %s', 'easy-digital-downloads' ), esc_url( $login_url ) ) . "\r\n";
610
 
611
  }
612
 
763
  $subject = apply_filters( 'edd_user_verification_email_subject', __( 'Verify your account', 'easy-digital-downloads' ), $user_id );
764
  $heading = apply_filters( 'edd_user_verification_email_heading', __( 'Verify your account', 'easy-digital-downloads' ), $user_id );
765
  $message = sprintf(
766
+ __( 'Hello %1$s,
767
+
768
+ Your account with %2$s needs to be verified before you can access your purchase history. <a href="%3$s">Click here</a> to verify your account.
769
+
770
+ Link missing? Visit the following URL: %3$s', 'easy-digital-downloads' ),
771
  $name,
772
  $from_name,
773
+ esc_url_raw( $url )
 
774
  );
775
 
776
  $message = apply_filters( 'edd_user_verification_email_message', $message, $user_id );
892
 
893
  $link_text = sprintf(
894
  __( 'Sorry but your account verification link has expired. <a href="%s">Click here</a> to request a new verification URL.', 'easy-digital-downloads' ),
895
+ esc_url( edd_get_user_verification_request_url() )
896
  );
897
 
898
  wp_die( apply_filters( 'edd_verification_link_expired_text', $link_text ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
938
  add_query_arg( 'edd-verify-request', '1', edd_get_user_verification_page() )
939
  );
940
 
941
+ wp_safe_redirect( esc_url_raw( $redirect ) );
942
  exit;
943
 
944
  }
985
  add_query_arg( 'edd-verify-success', '1', edd_get_user_verification_page() )
986
  );
987
 
988
+ wp_safe_redirect( esc_url_raw( $redirect ) );
989
  exit;
990
 
991
  }
1102
  $sitename = get_bloginfo( 'name' );
1103
  $ios_url = 'edd://new?sitename=' . $sitename . '&siteurl=' . home_url() . '&key=' . $public_key . '&token=' . $token;
1104
  ?>
1105
+ <a class="button-secondary" href="<?php echo esc_url( $ios_url ); ?>"><?php esc_html_e( 'Add to iOS App', 'easy-digital-downloads' ); ?></a>
1106
  </td>
1107
  </tr>
1108
  </tbody>
includes/widgets.php CHANGED
@@ -89,7 +89,7 @@ class edd_cart_widget extends WP_Widget {
89
  $instance = wp_parse_args( (array) $instance, $defaults ); ?>
90
  <p>
91
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ); ?></label>
92
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo $instance['title']; ?>"/>
93
  </p>
94
 
95
  <!-- Hide on Checkout Page -->
@@ -200,7 +200,7 @@ class edd_categories_tags_widget extends WP_Widget {
200
  $instance = wp_parse_args( (array) $instance, $defaults ); ?>
201
  <p>
202
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ); ?></label>
203
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo $instance['title']; ?>"/>
204
  </p>
205
  <p>
206
  <label for="<?php echo esc_attr( $this->get_field_id( 'taxonomy' ) ); ?>"><?php _e( 'Taxonomy:', 'easy-digital-downloads' ); ?></label>
@@ -209,8 +209,8 @@ class edd_categories_tags_widget extends WP_Widget {
209
  $category_labels = edd_get_taxonomy_labels( 'download_category' );
210
  $tag_labels = edd_get_taxonomy_labels( 'download_tag' );
211
  ?>
212
- <option value="download_category" <?php selected( 'download_category', $instance['taxonomy'] ); ?>><?php echo $category_labels['name']; ?></option>
213
- <option value="download_tag" <?php selected( 'download_tag', $instance['taxonomy'] ); ?>><?php echo $tag_labels['name']; ?></option>
214
  </select>
215
  </p>
216
  <p>
@@ -388,7 +388,7 @@ class EDD_Product_Details_Widget extends WP_Widget {
388
  <!-- Title -->
389
  <p>
390
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ) ?></label>
391
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo $instance['title']; ?>" />
392
  </p>
393
 
394
  <p>
@@ -413,7 +413,7 @@ class EDD_Product_Details_Widget extends WP_Widget {
413
  ?>
414
  <select class="widefat" name="<?php echo esc_attr( $this->get_field_name( 'download_id' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'download_id' ) ); ?>">
415
  <?php foreach ( $downloads as $download ) { ?>
416
- <option <?php selected( absint( $instance['download_id'] ), $download->ID ); ?> value="<?php echo esc_attr( $download->ID ); ?>"><?php echo $download->post_title; ?></option>
417
  <?php } ?>
418
  </select>
419
  <?php else: ?>
89
  $instance = wp_parse_args( (array) $instance, $defaults ); ?>
90
  <p>
91
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ); ?></label>
92
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>"/>
93
  </p>
94
 
95
  <!-- Hide on Checkout Page -->
200
  $instance = wp_parse_args( (array) $instance, $defaults ); ?>
201
  <p>
202
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ); ?></label>
203
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>"/>
204
  </p>
205
  <p>
206
  <label for="<?php echo esc_attr( $this->get_field_id( 'taxonomy' ) ); ?>"><?php _e( 'Taxonomy:', 'easy-digital-downloads' ); ?></label>
209
  $category_labels = edd_get_taxonomy_labels( 'download_category' );
210
  $tag_labels = edd_get_taxonomy_labels( 'download_tag' );
211
  ?>
212
+ <option value="download_category" <?php selected( 'download_category', $instance['taxonomy'] ); ?>><?php echo esc_html( $category_labels['name'] ); ?></option>
213
+ <option value="download_tag" <?php selected( 'download_tag', $instance['taxonomy'] ); ?>><?php echo esc_html( $tag_labels['name'] ); ?></option>
214
  </select>
215
  </p>
216
  <p>
388
  <!-- Title -->
389
  <p>
390
  <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:', 'easy-digital-downloads' ) ?></label>
391
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
392
  </p>
393
 
394
  <p>
413
  ?>
414
  <select class="widefat" name="<?php echo esc_attr( $this->get_field_name( 'download_id' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'download_id' ) ); ?>">
415
  <?php foreach ( $downloads as $download ) { ?>
416
+ <option <?php selected( absint( $instance['download_id'] ), $download->ID ); ?> value="<?php echo esc_attr( $download->ID ); ?>"><?php echo esc_html( $download->post_title ); ?></option>
417
  <?php } ?>
418
  </select>
419
  <?php else: ?>
languages/easy-digital-downloads.pot CHANGED
@@ -2,9 +2,9 @@
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.11.6\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
- "POT-Creation-Date: 2022-03-22 00:09:47+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -57,15 +57,15 @@ msgstr ""
57
 
58
  #: includes/EDD_SL_Plugin_Updater.php:486
59
  #: includes/admin/customers/customer-actions.php:301
60
- #: includes/admin/customers/customer-actions.php:345
61
- #: includes/admin/customers/customer-actions.php:603
62
  #: includes/admin/discounts/discount-actions.php:30
63
- #: includes/admin/discounts/discount-actions.php:117
64
- #: includes/admin/discounts/discount-actions.php:182
65
- #: includes/admin/discounts/discount-actions.php:186
66
- #: includes/admin/discounts/discount-actions.php:207
67
- #: includes/admin/discounts/discount-actions.php:211
68
- #: includes/admin/discounts/discount-actions.php:232
69
  #: includes/admin/discounts/edit-discount.php:16
70
  #: includes/admin/downloads/dashboard-columns.php:171
71
  #: includes/admin/import/class-batch-import-downloads.php:65
@@ -73,11 +73,11 @@ msgstr ""
73
  #: includes/admin/import/class-batch-import.php:188
74
  #: includes/admin/payments/actions.php:25
75
  #: includes/admin/payments/actions.php:295
76
- #: includes/admin/payments/actions.php:318
77
- #: includes/admin/payments/actions.php:331
78
- #: includes/admin/payments/actions.php:338
79
- #: includes/admin/payments/actions.php:367
80
- #: includes/admin/payments/actions.php:387
81
  #: includes/admin/payments/view-order-details.php:22
82
  #: includes/admin/payments/view-order-details.php:32
83
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:147
@@ -85,7 +85,7 @@ msgstr ""
85
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:128
86
  #: includes/admin/reporting/export/class-batch-export.php:131
87
  #: includes/admin/reporting/export/export-actions.php:23
88
- #: includes/admin/reporting/reports.php:98
89
  #: includes/admin/tools/class-edd-tools-recount-all-stats.php:225
90
  #: includes/admin/tools/class-edd-tools-recount-customer-stats.php:191
91
  #: includes/admin/tools/class-edd-tools-recount-download-stats.php:242
@@ -96,15 +96,15 @@ msgstr ""
96
  #: includes/admin/upgrades/classes/class-file-download-log-migration.php:136
97
  #: includes/admin/upgrades/upgrade-functions.php:219
98
  #: includes/admin/upgrades/upgrade-functions.php:535
99
- #: includes/admin/upgrades/upgrade-functions.php:617
100
- #: includes/admin/upgrades/upgrade-functions.php:728
101
- #: includes/admin/upgrades/upgrade-functions.php:825
102
- #: includes/admin/upgrades/upgrade-functions.php:899
103
- #: includes/admin/upgrades/upgrade-functions.php:1027
104
- #: includes/admin/upgrades/upgrade-functions.php:1112
105
  #: includes/api/class-edd-api.php:1980 includes/api/class-edd-api.php:1985
106
  #: includes/api/class-edd-api.php:1997 includes/api/class-edd-api.php:1999
107
- #: includes/cart/class-edd-cart.php:1433 includes/cart/class-edd-cart.php:1447
108
  #: includes/class-edd-license-handler.php:398
109
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
110
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1275
@@ -118,8 +118,8 @@ msgstr ""
118
  #: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
119
  #: includes/gateways/stripe/includes/payment-actions.php:1408
120
  #: includes/process-download.php:303 includes/process-download.php:895
121
- #: includes/query-filters.php:48 includes/user-functions.php:895
122
- #: includes/user-functions.php:920 includes/user-functions.php:973
123
  msgid "Error"
124
  msgstr ""
125
 
@@ -204,8 +204,8 @@ msgstr ""
204
 
205
  #: includes/admin/admin-pages.php:40
206
  #: includes/admin/reporting/contextual-help.php:39
207
- #: includes/admin/reporting/reports.php:28
208
- #: includes/admin/reporting/reports.php:30
209
  msgid "Reports"
210
  msgstr ""
211
 
@@ -222,7 +222,7 @@ msgstr ""
222
  msgid "Easy Digital Downloads Info and Tools"
223
  msgstr ""
224
 
225
- #: includes/admin/admin-pages.php:42 includes/admin/customers/customers.php:720
226
  #: includes/admin/tools.php:30
227
  msgid "Tools"
228
  msgstr ""
@@ -231,7 +231,7 @@ msgstr ""
231
  msgid "Easy Digital Downloads Extensions"
232
  msgstr ""
233
 
234
- #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:57
235
  #: includes/admin/settings/contextual-help.php:96
236
  #: includes/admin/settings/register-settings.php:1367
237
  msgid "Extensions"
@@ -531,8 +531,8 @@ msgid "The debug log has been cleared and logging has been disabled."
531
  msgstr ""
532
 
533
  #: includes/admin/customers/class-customer-table.php:72
534
- #: includes/admin/payments/class-payments-table.php:274
535
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:155
536
  #: includes/admin/reporting/class-sales-logs-list-table.php:129
537
  msgid "Customer"
538
  msgstr ""
@@ -541,35 +541,35 @@ msgstr ""
541
  msgid "Unnamed Customer"
542
  msgstr ""
543
 
544
- #: includes/admin/customers/class-customer-table.php:158
545
  msgid "View"
546
  msgstr ""
547
 
548
- #: includes/admin/customers/class-customer-table.php:159
549
  msgid "Download log"
550
  msgstr ""
551
 
552
- #: includes/admin/customers/class-customer-table.php:160
553
  #: includes/admin/discounts/class-discount-codes-table.php:215
554
  #: includes/admin/discounts/class-discount-codes-table.php:267
555
- #: includes/admin/payments/class-payments-table.php:367
556
- #: includes/admin/payments/class-payments-table.php:435
557
  #: includes/admin/settings/register-settings.php:958
558
- #: includes/gateways/stripe/includes/template-functions.php:441
559
  #: includes/payments/functions.php:1600
560
  msgid "Delete"
561
  msgstr ""
562
 
563
- #: includes/admin/customers/class-customer-table.php:163
564
  msgid "(Pending Verification)"
565
  msgstr ""
566
 
567
- #: includes/admin/customers/class-customer-table.php:176
568
  #: includes/admin/discounts/add-discount.php:32
569
  #: includes/admin/discounts/class-discount-codes-table.php:142
570
  #: includes/admin/discounts/edit-discount.php:46
571
  #: includes/admin/downloads/dashboard-columns.php:31
572
- #: includes/admin/payments/view-order-details.php:693
573
  #: includes/admin/reporting/class-export-customers.php:74
574
  #: includes/admin/reporting/export/class-batch-export-customers.php:43
575
  #: includes/admin/reporting/export/class-batch-export-downloads.php:43
@@ -577,20 +577,20 @@ msgstr ""
577
  msgid "Name"
578
  msgstr ""
579
 
580
- #: includes/admin/customers/class-customer-table.php:177
581
  #: includes/privacy-functions.php:585
582
  msgid "Primary Email"
583
  msgstr ""
584
 
585
- #: includes/admin/customers/class-customer-table.php:178
586
  msgid "Purchases"
587
  msgstr ""
588
 
589
- #: includes/admin/customers/class-customer-table.php:179
590
  msgid "Total Spent"
591
  msgstr ""
592
 
593
- #: includes/admin/customers/class-customer-table.php:180
594
  #: includes/admin/reporting/export/class-batch-export-customers.php:48
595
  #: includes/admin/reporting/export/class-batch-export-downloads.php:44
596
  #: includes/privacy-functions.php:593
@@ -599,15 +599,15 @@ msgstr ""
599
 
600
  #: includes/admin/customers/customer-actions.php:17
601
  #: includes/admin/customers/customer-actions.php:186
602
- #: includes/admin/customers/customer-actions.php:379
603
- #: includes/admin/customers/customer-actions.php:534
604
  msgid "You do not have permission to edit this customer."
605
  msgstr ""
606
 
607
  #: includes/admin/customers/customer-actions.php:29
608
- #: includes/admin/customers/customer-actions.php:391
609
- #: includes/admin/customers/customer-actions.php:459
610
- #: includes/admin/customers/customer-actions.php:545
611
  msgid "Cheatin' eh?!"
612
  msgstr ""
613
 
@@ -640,7 +640,7 @@ msgid "An error has occured. Please try again."
640
  msgstr ""
641
 
642
  #: includes/admin/customers/customer-actions.php:207
643
- #: includes/user-functions.php:920
644
  msgid "Nonce verification failed."
645
  msgstr ""
646
 
@@ -665,48 +665,48 @@ msgid "Email address %s added by %s"
665
  msgstr ""
666
 
667
  #: includes/admin/customers/customer-actions.php:257
668
- #: includes/admin/customers/customer-actions.php:355
669
  msgid "Email address %s set as primary by %s"
670
  msgstr ""
671
 
672
  #: includes/admin/customers/customer-actions.php:301
673
- #: includes/admin/customers/customer-actions.php:345
674
- #: includes/admin/customers/customer-actions.php:603
675
  #: includes/admin/import/import-functions.php:31
676
  #: includes/admin/import/import-functions.php:113
677
- #: includes/admin/payments/actions.php:331
678
  #: includes/admin/reporting/export/export-actions.php:23
679
  #: includes/api/class-edd-api.php:1980
680
  #: includes/class-edd-license-handler.php:398
681
  msgid "Nonce verification failed"
682
  msgstr ""
683
 
684
- #: includes/admin/customers/customer-actions.php:311
685
  #: includes/shortcodes.php:934
686
  msgid "Email address %s removed by %s"
687
  msgstr ""
688
 
689
- #: includes/admin/customers/customer-actions.php:395
690
  msgid "A note is required"
691
  msgstr ""
692
 
693
- #: includes/admin/customers/customer-actions.php:446
694
  msgid "You do not have permission to delete this customer."
695
  msgstr ""
696
 
697
- #: includes/admin/customers/customer-actions.php:463
698
  msgid "Please confirm you want to delete this customer"
699
  msgstr ""
700
 
701
- #: includes/admin/customers/customer-actions.php:504
702
  msgid "Error deleting customer"
703
  msgstr ""
704
 
705
- #: includes/admin/customers/customer-actions.php:511
706
  msgid "Invalid Customer ID"
707
  msgstr ""
708
 
709
- #: includes/admin/customers/customer-actions.php:569
710
  msgid "Failed to disconnect user from customer"
711
  msgstr ""
712
 
@@ -736,113 +736,113 @@ msgid "Invalid Customer ID Provided."
736
  msgstr ""
737
 
738
  #: includes/admin/customers/customers.php:116
739
- #: includes/admin/payments/view-order-details.php:646
740
  msgid "Customer Details"
741
  msgstr ""
742
 
743
- #: includes/admin/customers/customers.php:203
744
  msgid "Edit Customer"
745
  msgstr ""
746
 
747
- #: includes/admin/customers/customers.php:229
748
  msgid "Customer Address"
749
  msgstr ""
750
 
751
- #: includes/admin/customers/customers.php:240
752
  msgid "Address 1"
753
  msgstr ""
754
 
755
- #: includes/admin/customers/customers.php:241
756
  msgid "Address 2"
757
  msgstr ""
758
 
759
- #: includes/admin/customers/customers.php:242
760
  #: includes/admin/reporting/class-export-payments.php:66
761
  #: includes/admin/reporting/export/class-batch-export-payments.php:47
762
  #: includes/admin/tools.php:686 includes/checkout/template.php:373
763
- #: includes/gateways/stripe/includes/template-functions.php:485
764
  #: templates/shortcode-profile-editor.php:152
765
  msgid "City"
766
  msgstr ""
767
 
768
- #: includes/admin/customers/customers.php:269
769
  #: includes/admin/settings/register-settings.php:2228
770
  #: includes/admin/tools.php:695 includes/checkout/template.php:435
771
  #: templates/shortcode-profile-editor.php:171
772
  msgid "State / Province"
773
  msgstr ""
774
 
775
- #: includes/admin/customers/customers.php:271
776
  msgid "Postal"
777
  msgstr ""
778
 
779
- #: includes/admin/customers/customers.php:278
780
  msgid "Customer Name"
781
  msgstr ""
782
 
783
- #: includes/admin/customers/customers.php:280
784
  msgid "Customer Email"
785
  msgstr ""
786
 
787
- #: includes/admin/customers/customers.php:286
788
  #. translators: The date.
789
  msgid "Customer since %s"
790
  msgstr ""
791
 
792
- #: includes/admin/customers/customers.php:313
793
  #: includes/admin/reporting/export/class-batch-export-customers.php:42
794
  #: includes/privacy-functions.php:867
795
  msgid "User ID"
796
  msgstr ""
797
 
798
- #: includes/admin/customers/customers.php:317
799
  #: includes/admin/reporting/class-export-payments.php:184
800
  #: includes/admin/reporting/export/class-batch-export-payments.php:222
801
  msgid "none"
802
  msgstr ""
803
 
804
- #: includes/admin/customers/customers.php:320
805
  msgid "Disconnect User"
806
  msgstr ""
807
 
808
- #: includes/admin/customers/customers.php:332
809
  msgid "Update Customer"
810
  msgstr ""
811
 
812
- #: includes/admin/customers/customers.php:333
813
- #: includes/admin/customers/customers.php:695
814
- #: includes/admin/payments/view-order-details.php:684
815
- #: includes/admin/payments/view-order-details.php:704
816
  #: includes/admin/thickbox.php:136 includes/class-edd-html-elements.php:796
817
  #: includes/gateways/stripe/includes/admin/admin-filters.php:109
818
- #: includes/gateways/stripe/includes/template-functions.php:597
819
- #: includes/gateways/stripe/includes/template-functions.php:637
820
  msgid "Cancel"
821
  msgstr ""
822
 
823
- #: includes/admin/customers/customers.php:346
824
  msgid "%d Completed Sale"
825
  msgid_plural "%d Completed Sales"
826
  msgstr[0] ""
827
  msgstr[1] ""
828
 
829
- #: includes/admin/customers/customers.php:351
830
  msgid "Lifetime Value"
831
  msgstr ""
832
 
833
- #: includes/admin/customers/customers.php:364
834
  msgid "Customer Emails"
835
  msgstr ""
836
 
837
- #: includes/admin/customers/customers.php:365
838
  msgid ""
839
  "This customer can use any of the emails listed here when making new "
840
  "purchases."
841
  msgstr ""
842
 
843
- #: includes/admin/customers/customers.php:383
844
- #: includes/admin/payments/class-payments-table.php:270
845
- #: includes/admin/payments/view-order-details.php:697
846
  #: includes/admin/reporting/class-export-customers.php:66
847
  #: includes/admin/reporting/class-export-customers.php:77
848
  #: includes/admin/reporting/class-export-payments.php:61
@@ -853,55 +853,55 @@ msgstr ""
853
  msgid "Email"
854
  msgstr ""
855
 
856
- #: includes/admin/customers/customers.php:384
857
- #: includes/admin/customers/customers.php:443
858
- #: includes/admin/customers/customers.php:476
859
- #: includes/admin/payments/view-order-details.php:555
860
- #: includes/admin/payments/view-order-details.php:618
861
- #: includes/admin/payments/view-order-details.php:681
862
- #: includes/admin/payments/view-order-details.php:701
863
  #: templates/checkout_cart.php:13
864
  msgid "Actions"
865
  msgstr ""
866
 
867
- #: includes/admin/customers/customers.php:404
868
- #: includes/admin/customers/customers.php:417
869
  msgid "Make Primary"
870
  msgstr ""
871
 
872
- #: includes/admin/customers/customers.php:406
873
  #: includes/admin/downloads/metabox.php:442
874
  #: includes/admin/downloads/metabox.php:650
875
  #: includes/admin/downloads/metabox.php:706
876
  #: includes/admin/downloads/metabox.php:831
877
- #: includes/admin/payments/view-order-details.php:523
878
  #: includes/admin/settings/register-settings.php:2231 includes/scripts.php:227
879
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
880
  #: templates/shortcode-profile-editor.php:123
881
  msgid "Remove"
882
  msgstr ""
883
 
884
- #: includes/admin/customers/customers.php:416
885
  #: includes/checkout/template.php:182
886
  #: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:110
887
  #: includes/privacy-functions.php:759
888
  msgid "Email Address"
889
  msgstr ""
890
 
891
- #: includes/admin/customers/customers.php:418
892
  msgid "Add Email"
893
  msgstr ""
894
 
895
- #: includes/admin/customers/customers.php:425
896
  msgid "No Emails Found"
897
  msgstr ""
898
 
899
- #: includes/admin/customers/customers.php:430
900
  msgid "Recent Payments"
901
  msgstr ""
902
 
903
- #: includes/admin/customers/customers.php:439
904
- #: includes/admin/payments/class-payments-table.php:269
905
  #: includes/admin/reporting/class-export-payments.php:59
906
  #: includes/admin/reporting/class-export.php:66
907
  #: includes/admin/reporting/export/class-batch-export-customers.php:41
@@ -910,25 +910,25 @@ msgstr ""
910
  msgid "ID"
911
  msgstr ""
912
 
913
- #: includes/admin/customers/customers.php:440
914
  #: includes/admin/discounts/add-discount.php:65
915
  #: includes/admin/discounts/class-discount-codes-table.php:144
916
  #: includes/admin/discounts/edit-discount.php:79
917
- #: includes/admin/payments/class-payments-table.php:272
918
  #: includes/admin/reporting/class-export-payments.php:72
919
  #: includes/admin/reporting/export/class-batch-export-payments.php:54
920
  #: templates/history-purchases.php:20
921
  msgid "Amount"
922
  msgstr ""
923
 
924
- #: includes/admin/customers/customers.php:441
925
  #: includes/admin/downloads/dashboard-columns.php:37
926
- #: includes/admin/payments/class-payments-table.php:273
927
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:92
928
  #: includes/admin/reporting/class-export-download-history.php:62
929
  #: includes/admin/reporting/class-export-payments.php:78
930
  #: includes/admin/reporting/class-export.php:67
931
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:159
932
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:131
933
  #: includes/admin/reporting/class-sales-logs-list-table.php:133
934
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:46
@@ -940,10 +940,10 @@ msgstr ""
940
  msgid "Date"
941
  msgstr ""
942
 
943
- #: includes/admin/customers/customers.php:442
944
  #: includes/admin/discounts/class-discount-codes-table.php:148
945
  #: includes/admin/discounts/edit-discount.php:184
946
- #: includes/admin/payments/class-payments-table.php:275
947
  #: includes/admin/reporting/class-export-payments.php:80
948
  #: includes/admin/reporting/export/class-batch-export-downloads.php:48
949
  #: includes/admin/reporting/export/class-batch-export-payments.php:65
@@ -951,53 +951,53 @@ msgstr ""
951
  msgid "Status"
952
  msgstr ""
953
 
954
- #: includes/admin/customers/customers.php:456
955
  msgid "View Details"
956
  msgstr ""
957
 
958
- #: includes/admin/customers/customers.php:463
959
  msgid "No Payments Found"
960
  msgstr ""
961
 
962
- #: includes/admin/customers/customers.php:468
963
- #: includes/admin/payments/view-order-details.php:384
964
  msgid "Purchased %s"
965
  msgstr ""
966
 
967
- #: includes/admin/customers/customers.php:486
968
  #: includes/admin/extensions/abstract-extension.php:315
969
  #. translators: the plural Downloads label.
970
  msgid "View %s"
971
  msgstr ""
972
 
973
- #: includes/admin/customers/customers.php:492
974
  msgid "No %s Found"
975
  msgstr ""
976
 
977
- #: includes/admin/customers/customers.php:564
978
  msgid "Agreements"
979
  msgstr ""
980
 
981
- #: includes/admin/customers/customers.php:567
982
  msgid "Last Agreed to Terms"
983
  msgstr ""
984
 
985
- #: includes/admin/customers/customers.php:571
986
- #: includes/admin/customers/customers.php:592
987
  msgid "Previous Agreement Dates"
988
  msgstr ""
989
 
990
- #: includes/admin/customers/customers.php:576
991
- #: includes/admin/customers/customers.php:597
992
  msgid "No date found."
993
  msgstr ""
994
 
995
- #: includes/admin/customers/customers.php:580
996
- #: includes/admin/customers/customers.php:601
997
  msgid "Estimated Privacy Policy Date"
998
  msgstr ""
999
 
1000
- #: includes/admin/customers/customers.php:580
1001
  msgid ""
1002
  "This customer made a purchase prior to agreement dates being logged, this "
1003
  "is the date of their last purchase. If your site was displaying the "
@@ -1005,11 +1005,11 @@ msgid ""
1005
  "last agreed to your terms."
1006
  msgstr ""
1007
 
1008
- #: includes/admin/customers/customers.php:588
1009
  msgid "Last Agreed to Privacy Policy"
1010
  msgstr ""
1011
 
1012
- #: includes/admin/customers/customers.php:601
1013
  msgid ""
1014
  "This customer made a purchase prior to privacy policy dates being logged, "
1015
  "this is the date of their last purchase. If your site was displaying the "
@@ -1017,51 +1017,51 @@ msgid ""
1017
  "they last agreed to your privacy policy."
1018
  msgstr ""
1019
 
1020
- #: includes/admin/customers/customers.php:608
1021
  #: includes/admin/reporting/export/class-batch-export-downloads.php:56
1022
  msgid "Notes"
1023
  msgstr ""
1024
 
1025
- #: includes/admin/customers/customers.php:618
1026
- #: includes/admin/payments/view-order-details.php:832
1027
  msgid "Add Note"
1028
  msgstr ""
1029
 
1030
- #: includes/admin/customers/customers.php:646
1031
  msgid "No Customer Notes"
1032
  msgstr ""
1033
 
1034
- #: includes/admin/customers/customers.php:679
1035
  msgid "Are you sure you want to delete this customer?"
1036
  msgstr ""
1037
 
1038
- #: includes/admin/customers/customers.php:684
1039
  msgid "Delete all associated payments and records?"
1040
  msgstr ""
1041
 
1042
- #: includes/admin/customers/customers.php:694
1043
  msgid "Delete Customer"
1044
  msgstr ""
1045
 
1046
- #: includes/admin/customers/customers.php:723 includes/admin/tools.php:153
1047
  msgid "Recount Customer Stats"
1048
  msgstr ""
1049
 
1050
- #: includes/admin/customers/customers.php:724
1051
  msgid ""
1052
  "Use this tool to recalculate the purchase count and total value of the "
1053
  "customer."
1054
  msgstr ""
1055
 
1056
- #: includes/admin/customers/customers.php:731 includes/admin/tools.php:140
1057
  msgid "Recount Stats"
1058
  msgstr ""
1059
 
1060
- #: includes/admin/customers/customers.php:761
1061
  msgid "This customer's user account is pending verification."
1062
  msgstr ""
1063
 
1064
- #: includes/admin/customers/customers.php:763
1065
  msgid "Verify account."
1066
  msgstr ""
1067
 
@@ -1081,7 +1081,7 @@ msgstr ""
1081
  #: includes/admin/reporting/export/class-batch-export-downloads.php:58
1082
  #: includes/admin/reporting/graphing.php:333
1083
  #: includes/admin/reporting/graphing.php:634
1084
- #: includes/admin/reporting/reports.php:55
1085
  msgid "Earnings"
1086
  msgstr ""
1087
 
@@ -1307,8 +1307,8 @@ msgid "Add Discount Code"
1307
  msgstr ""
1308
 
1309
  #: includes/admin/discounts/class-discount-codes-table.php:125
1310
- #: includes/admin/payments/class-payments-table.php:247
1311
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:322
1312
  #: includes/admin/reporting/class-sales-logs-list-table.php:281
1313
  msgid "All"
1314
  msgstr ""
@@ -1503,22 +1503,22 @@ msgid ""
1503
  msgstr ""
1504
 
1505
  #: includes/admin/discounts/discount-actions.php:30
1506
- #: includes/admin/discounts/discount-actions.php:236
1507
  msgid "You do not have permission to create discount codes"
1508
  msgstr ""
1509
 
1510
- #: includes/admin/discounts/discount-actions.php:117
1511
- #: includes/admin/discounts/discount-actions.php:211
1512
  msgid "You do not have permission to edit discount codes"
1513
  msgstr ""
1514
 
1515
- #: includes/admin/discounts/discount-actions.php:182
1516
- #: includes/admin/discounts/discount-actions.php:207
1517
- #: includes/admin/discounts/discount-actions.php:232
1518
  msgid "Trying to cheat or something?"
1519
  msgstr ""
1520
 
1521
- #: includes/admin/discounts/discount-actions.php:186
1522
  msgid "You do not have permission to delete discount codes"
1523
  msgstr ""
1524
 
@@ -1674,7 +1674,7 @@ msgstr ""
1674
  #: includes/admin/downloads/dashboard-columns.php:34
1675
  #: includes/admin/downloads/dashboard-columns.php:286
1676
  #: includes/admin/downloads/metabox.php:462
1677
- #: includes/admin/payments/view-order-details.php:543
1678
  #: includes/admin/reporting/export/class-batch-export-downloads.php:51
1679
  #: templates/shortcode-receipt.php:130
1680
  msgid "Price"
@@ -1753,7 +1753,7 @@ msgid "Option Name"
1753
  msgstr ""
1754
 
1755
  #: includes/admin/downloads/metabox.php:484 includes/download-functions.php:523
1756
- #: includes/gateways/stripe/includes/template-functions.php:404
1757
  msgid "Default"
1758
  msgstr ""
1759
 
@@ -2186,10 +2186,10 @@ msgid "Import complete! <a href=\"%s\">View imported %s</a>."
2186
  msgstr ""
2187
 
2188
  #: includes/admin/payments/actions.php:25
2189
- #: includes/admin/payments/actions.php:318
2190
- #: includes/admin/payments/actions.php:338
2191
- #: includes/admin/payments/actions.php:367
2192
- #: includes/admin/payments/actions.php:387 includes/emails/actions.php:53
2193
  msgid "You do not have permission to edit this payment record"
2194
  msgstr ""
2195
 
@@ -2232,99 +2232,99 @@ msgstr ""
2232
  msgid "Clear Filter"
2233
  msgstr ""
2234
 
2235
- #: includes/admin/payments/class-payments-table.php:248
2236
  msgid "Completed"
2237
  msgstr ""
2238
 
2239
- #: includes/admin/payments/class-payments-table.php:249
2240
  #: includes/payments/functions.php:753
2241
  msgid "Pending"
2242
  msgstr ""
2243
 
2244
- #: includes/admin/payments/class-payments-table.php:250
2245
  #: includes/payments/functions.php:759
2246
  msgid "Processing"
2247
  msgstr ""
2248
 
2249
- #: includes/admin/payments/class-payments-table.php:251
2250
  #: includes/payments/functions.php:755
2251
  msgid "Refunded"
2252
  msgstr ""
2253
 
2254
- #: includes/admin/payments/class-payments-table.php:252
2255
  #: includes/payments/functions.php:758
2256
  msgid "Revoked"
2257
  msgstr ""
2258
 
2259
- #: includes/admin/payments/class-payments-table.php:253
2260
  #: includes/payments/functions.php:756
2261
  msgid "Failed"
2262
  msgstr ""
2263
 
2264
- #: includes/admin/payments/class-payments-table.php:254
2265
  #: includes/payments/functions.php:757
2266
  msgid "Abandoned"
2267
  msgstr ""
2268
 
2269
- #: includes/admin/payments/class-payments-table.php:271
2270
  #: templates/history-purchases.php:21
2271
  msgid "Details"
2272
  msgstr ""
2273
 
2274
- #: includes/admin/payments/class-payments-table.php:334
2275
  #: includes/admin/payments/payments-history.php:90
2276
  msgid "View Order Details"
2277
  msgstr ""
2278
 
2279
- #: includes/admin/payments/class-payments-table.php:364
2280
  msgid "Resend Purchase Receipt"
2281
  msgstr ""
2282
 
2283
- #: includes/admin/payments/class-payments-table.php:372
2284
  msgid "(unknown)"
2285
  msgstr ""
2286
 
2287
- #: includes/admin/payments/class-payments-table.php:422
2288
  msgid "(customer missing)"
2289
  msgstr ""
2290
 
2291
- #: includes/admin/payments/class-payments-table.php:436
2292
  msgid "Set To Completed"
2293
  msgstr ""
2294
 
2295
- #: includes/admin/payments/class-payments-table.php:437
2296
  msgid "Set To Pending"
2297
  msgstr ""
2298
 
2299
- #: includes/admin/payments/class-payments-table.php:438
2300
  msgid "Set To Processing"
2301
  msgstr ""
2302
 
2303
- #: includes/admin/payments/class-payments-table.php:439
2304
  msgid "Set To Refunded"
2305
  msgstr ""
2306
 
2307
- #: includes/admin/payments/class-payments-table.php:440
2308
  msgid "Set To Revoked"
2309
  msgstr ""
2310
 
2311
- #: includes/admin/payments/class-payments-table.php:441
2312
  msgid "Set To Failed"
2313
  msgstr ""
2314
 
2315
- #: includes/admin/payments/class-payments-table.php:442
2316
  msgid "Set To Abandoned"
2317
  msgstr ""
2318
 
2319
- #: includes/admin/payments/class-payments-table.php:443
2320
  msgid "Set To Preapproval"
2321
  msgstr ""
2322
 
2323
- #: includes/admin/payments/class-payments-table.php:444
2324
  msgid "Set To Cancelled"
2325
  msgstr ""
2326
 
2327
- #: includes/admin/payments/class-payments-table.php:445
2328
  msgid "Resend Email Receipts"
2329
  msgstr ""
2330
 
@@ -2531,7 +2531,7 @@ msgid "Fees"
2531
  msgstr ""
2532
 
2533
  #: includes/admin/payments/view-order-details.php:175
2534
- #: includes/admin/payments/view-order-details.php:551
2535
  #: includes/admin/reporting/class-export-payments.php:73
2536
  #: includes/admin/reporting/export/class-batch-export-payments.php:55
2537
  #: includes/admin/tools.php:632 templates/checkout_cart.php:120
@@ -2608,112 +2608,112 @@ msgid ""
2608
  msgstr ""
2609
 
2610
  #: includes/admin/payments/view-order-details.php:308
2611
- #: includes/admin/reporting/reports.php:34 includes/class-edd-logging.php:72
2612
  msgid "Logs"
2613
  msgstr ""
2614
 
2615
- #: includes/admin/payments/view-order-details.php:316
2616
  msgid "View file download log for purchase"
2617
  msgstr ""
2618
 
2619
- #: includes/admin/payments/view-order-details.php:320
2620
  msgid "View customer download log"
2621
  msgstr ""
2622
 
2623
- #: includes/admin/payments/view-order-details.php:324
2624
  msgid "View all purchases of customer"
2625
  msgstr ""
2626
 
2627
- #: includes/admin/payments/view-order-details.php:354
2628
  msgid "No download attached to this order"
2629
  msgstr ""
2630
 
2631
- #: includes/admin/payments/view-order-details.php:455
2632
  msgid "Deleted"
2633
  msgstr ""
2634
 
2635
- #: includes/admin/payments/view-order-details.php:457
2636
  msgid "%s deleted"
2637
  msgstr ""
2638
 
2639
- #: includes/admin/payments/view-order-details.php:520
2640
  msgid "Copy Download Link(s)"
2641
  msgstr ""
2642
 
2643
- #: includes/admin/payments/view-order-details.php:532
2644
  msgid "No %s included with this purchase"
2645
  msgstr ""
2646
 
2647
- #: includes/admin/payments/view-order-details.php:540
2648
- #: includes/admin/payments/view-order-details.php:620
2649
  msgid "Add New %s"
2650
  msgstr ""
2651
 
2652
- #: includes/admin/payments/view-order-details.php:545
2653
  msgid " & Quantity"
2654
  msgstr ""
2655
 
2656
- #: includes/admin/payments/view-order-details.php:659
2657
  msgid "Assign to another customer"
2658
  msgstr ""
2659
 
2660
- #: includes/admin/payments/view-order-details.php:661
2661
  msgid "New Customer"
2662
  msgstr ""
2663
 
2664
- #: includes/admin/payments/view-order-details.php:667
2665
  msgid "Select a customer"
2666
  msgstr ""
2667
 
2668
- #: includes/admin/payments/view-order-details.php:673
2669
  #: includes/class-edd-html-elements.php:245
2670
  msgid "Type to search all Customers"
2671
  msgstr ""
2672
 
2673
- #: includes/admin/payments/view-order-details.php:687
2674
  msgid "Click \"Save Payment\" to change the customer"
2675
  msgstr ""
2676
 
2677
- #: includes/admin/payments/view-order-details.php:707
2678
  msgid "Click \"Save Payment\" to create new customer"
2679
  msgstr ""
2680
 
2681
- #: includes/admin/payments/view-order-details.php:722
2682
  #: includes/checkout/template.php:347 includes/privacy-functions.php:763
2683
  msgid "Billing Address"
2684
  msgstr ""
2685
 
2686
- #: includes/admin/payments/view-order-details.php:732
2687
  msgid "Street Address Line 1:"
2688
  msgstr ""
2689
 
2690
- #: includes/admin/payments/view-order-details.php:736
2691
  msgid "Street Address Line 2:"
2692
  msgstr ""
2693
 
2694
- #: includes/admin/payments/view-order-details.php:765
2695
  #: includes/admin/settings/register-settings.php:322
2696
  msgid "Select a country"
2697
  msgstr ""
2698
 
2699
- #: includes/admin/payments/view-order-details.php:768
2700
  msgid "Type to search all Countries"
2701
  msgstr ""
2702
 
2703
- #: includes/admin/payments/view-order-details.php:787
2704
  #: includes/admin/settings/register-settings.php:333
2705
  msgid "Select a state"
2706
  msgstr ""
2707
 
2708
- #: includes/admin/payments/view-order-details.php:790
2709
  msgid "Type to search all States/Provinces"
2710
  msgstr ""
2711
 
2712
- #: includes/admin/payments/view-order-details.php:811
2713
  msgid "Payment Notes"
2714
  msgstr ""
2715
 
2716
- #: includes/admin/payments/view-order-details.php:826
2717
  msgid "No payment notes"
2718
  msgstr ""
2719
 
@@ -2811,7 +2811,7 @@ msgid ""
2811
  msgstr ""
2812
 
2813
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:87
2814
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:153
2815
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:126
2816
  #: includes/admin/reporting/class-sales-logs-list-table.php:128
2817
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:39
@@ -2933,7 +2933,7 @@ msgid "Downloaded by"
2933
  msgstr ""
2934
 
2935
  #: includes/admin/reporting/class-export-download-history.php:64
2936
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:158
2937
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:41
2938
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:43
2939
  #: includes/admin/reporting/export/class-batch-export-payments.php:63
@@ -2948,7 +2948,7 @@ msgid "Product"
2948
  msgstr ""
2949
 
2950
  #: includes/admin/reporting/class-export-download-history.php:66
2951
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:157
2952
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:45
2953
  msgid "File"
2954
  msgstr ""
@@ -2971,7 +2971,7 @@ msgstr ""
2971
 
2972
  #: includes/admin/reporting/class-export-payments.php:67
2973
  #: includes/admin/reporting/export/class-batch-export-payments.php:48
2974
- #: includes/gateways/stripe/includes/template-functions.php:532
2975
  msgid "State"
2976
  msgstr ""
2977
 
@@ -2979,8 +2979,8 @@ msgstr ""
2979
  #: includes/admin/reporting/export/class-batch-export-payments.php:49
2980
  #: includes/admin/settings/register-settings.php:2227
2981
  #: includes/admin/tools.php:713
2982
- #: includes/gateways/stripe/includes/template-functions.php:510
2983
- #: includes/gateways/stripe/includes/template-functions.php:519
2984
  #: templates/shortcode-profile-editor.php:162
2985
  msgid "Country"
2986
  msgstr ""
@@ -2988,7 +2988,7 @@ msgstr ""
2988
  #: includes/admin/reporting/class-export-payments.php:69
2989
  #: includes/admin/reporting/export/class-batch-export-payments.php:50
2990
  #: includes/admin/tools.php:704 includes/checkout/template.php:383
2991
- #: includes/gateways/stripe/includes/template-functions.php:780
2992
  #: templates/shortcode-profile-editor.php:157
2993
  msgid "Zip / Postal Code"
2994
  msgstr ""
@@ -3043,7 +3043,7 @@ msgstr ""
3043
  msgid "You do not have permission to export data."
3044
  msgstr ""
3045
 
3046
- #: includes/admin/reporting/class-file-downloads-logs-list-table.php:156
3047
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:127
3048
  #: includes/admin/reporting/class-sales-logs-list-table.php:132
3049
  #: includes/admin/reporting/export/class-batch-export-payments.php:39
@@ -3093,7 +3093,7 @@ msgid ""
3093
  msgstr ""
3094
 
3095
  #: includes/admin/reporting/contextual-help.php:45
3096
- #: includes/admin/reporting/reports.php:32 includes/admin/tools.php:941
3097
  msgid "Export"
3098
  msgstr ""
3099
 
@@ -3373,11 +3373,11 @@ msgstr ""
3373
  msgid "Filter"
3374
  msgstr ""
3375
 
3376
- #: includes/admin/reporting/graphing.php:974
3377
  msgid "Clicking this will clear the reports cache"
3378
  msgstr ""
3379
 
3380
- #: includes/admin/reporting/graphing.php:974
3381
  msgid "Refresh Reports"
3382
  msgstr ""
3383
 
@@ -3399,151 +3399,151 @@ msgstr ""
3399
  msgid "Log Type"
3400
  msgstr ""
3401
 
3402
- #: includes/admin/reporting/reports.php:56
3403
  msgid "Earnings by Category"
3404
  msgstr ""
3405
 
3406
- #: includes/admin/reporting/reports.php:58
3407
  msgid "Payment Methods"
3408
  msgstr ""
3409
 
3410
- #: includes/admin/reporting/reports.php:59
3411
  #: includes/admin/settings/contextual-help.php:80
3412
  #: includes/admin/settings/register-settings.php:1365
3413
  msgid "Taxes"
3414
  msgstr ""
3415
 
3416
- #: includes/admin/reporting/reports.php:98
3417
  msgid "You do not have permission to access this report"
3418
  msgstr ""
3419
 
3420
- #: includes/admin/reporting/reports.php:129
3421
  msgid "Report Type"
3422
  msgstr ""
3423
 
3424
- #: includes/admin/reporting/reports.php:139
3425
  msgid "Show"
3426
  msgstr ""
3427
 
3428
- #: includes/admin/reporting/reports.php:190
3429
  msgid "Go Back"
3430
  msgstr ""
3431
 
3432
- #: includes/admin/reporting/reports.php:267
3433
  msgid "Category Sales Mix: "
3434
  msgstr ""
3435
 
3436
- #: includes/admin/reporting/reports.php:271
3437
  msgid "Category Earnings Mix: "
3438
  msgstr ""
3439
 
3440
- #: includes/admin/reporting/reports.php:280
3441
  msgid ""
3442
  "All Parent categories include sales and earnings stats from child "
3443
  "categories."
3444
  msgstr ""
3445
 
3446
- #: includes/admin/reporting/reports.php:283
3447
  msgid "Stats include all sales and earnings for the lifetime of the store."
3448
  msgstr ""
3449
 
3450
- #: includes/admin/reporting/reports.php:312
3451
  msgid "Tax Report"
3452
  msgstr ""
3453
 
3454
- #: includes/admin/reporting/reports.php:314
3455
  msgid ""
3456
  "This report shows the total amount collected in sales tax for the given "
3457
  "year."
3458
  msgstr ""
3459
 
3460
- #: includes/admin/reporting/reports.php:325 includes/admin/tools.php:169
3461
  msgid "Submit"
3462
  msgstr ""
3463
 
3464
- #: includes/admin/reporting/reports.php:354
3465
  msgid "Export Earnings Report"
3466
  msgstr ""
3467
 
3468
- #: includes/admin/reporting/reports.php:356
3469
  msgid "Download a CSV giving a detailed look into earnings over time."
3470
  msgstr ""
3471
 
3472
- #: includes/admin/reporting/reports.php:366
3473
- #: includes/admin/reporting/reports.php:393
3474
- #: includes/admin/reporting/reports.php:409
3475
- #: includes/admin/reporting/reports.php:421
3476
- #: includes/admin/reporting/reports.php:436
3477
- #: includes/admin/reporting/reports.php:450
3478
- #: includes/admin/reporting/reports.php:467
3479
  msgid "Generate CSV"
3480
  msgstr ""
3481
 
3482
- #: includes/admin/reporting/reports.php:374
3483
  msgid "Export Payment History"
3484
  msgstr ""
3485
 
3486
- #: includes/admin/reporting/reports.php:376
3487
  msgid "Download a CSV of all payments recorded."
3488
  msgstr ""
3489
 
3490
- #: includes/admin/reporting/reports.php:379
3491
- #: includes/admin/reporting/reports.php:432
3492
- #: includes/admin/reporting/reports.php:446
3493
- #: includes/admin/reporting/reports.php:462
3494
  msgid "Choose start date"
3495
  msgstr ""
3496
 
3497
- #: includes/admin/reporting/reports.php:380
3498
- #: includes/admin/reporting/reports.php:433
3499
- #: includes/admin/reporting/reports.php:447
3500
- #: includes/admin/reporting/reports.php:463
3501
  msgid "Choose end date"
3502
  msgstr ""
3503
 
3504
- #: includes/admin/reporting/reports.php:382
3505
  msgid "All Statuses"
3506
  msgstr ""
3507
 
3508
- #: includes/admin/reporting/reports.php:402
3509
  msgid "Export Customers in CSV"
3510
  msgstr ""
3511
 
3512
- #: includes/admin/reporting/reports.php:404
3513
  msgid "Download a CSV of customers."
3514
  msgstr ""
3515
 
3516
- #: includes/admin/reporting/reports.php:415
3517
  msgid "Export Download Products in CSV"
3518
  msgstr ""
3519
 
3520
- #: includes/admin/reporting/reports.php:417
3521
  msgid "Download a CSV of download products."
3522
  msgstr ""
3523
 
3524
- #: includes/admin/reporting/reports.php:427
3525
  msgid "Export Download History in CSV"
3526
  msgstr ""
3527
 
3528
- #: includes/admin/reporting/reports.php:429
3529
  msgid ""
3530
  "Download a CSV of file downloads. To download a CSV for all file downloads, "
3531
  "leave \"Choose a Download\" as it is."
3532
  msgstr ""
3533
 
3534
- #: includes/admin/reporting/reports.php:442
3535
  msgid "Export API Requests in CSV"
3536
  msgstr ""
3537
 
3538
- #: includes/admin/reporting/reports.php:444
3539
  msgid "Download a CSV of API request logs."
3540
  msgstr ""
3541
 
3542
- #: includes/admin/reporting/reports.php:456
3543
  msgid "Export Sales"
3544
  msgstr ""
3545
 
3546
- #: includes/admin/reporting/reports.php:458
3547
  msgid "Download a CSV of all sales."
3548
  msgstr ""
3549
 
@@ -4976,7 +4976,7 @@ msgstr ""
4976
  msgid "System Info"
4977
  msgstr ""
4978
 
4979
- #: includes/admin/tools.php:78 includes/admin/tools.php:1079
4980
  msgid "Debug Log"
4981
  msgstr ""
4982
 
@@ -5200,12 +5200,12 @@ msgid "Total"
5200
  msgstr ""
5201
 
5202
  #: includes/admin/tools.php:668
5203
- #: includes/gateways/stripe/includes/template-functions.php:457
5204
  msgid "Address Line 1"
5205
  msgstr ""
5206
 
5207
  #: includes/admin/tools.php:677
5208
- #: includes/gateways/stripe/includes/template-functions.php:471
5209
  msgid "Address Line 2"
5210
  msgstr ""
5211
 
@@ -5332,7 +5332,7 @@ msgstr ""
5332
  msgid "Please upload a file to import"
5333
  msgstr ""
5334
 
5335
- #: includes/admin/tools.php:1082
5336
  msgid ""
5337
  "Use this tool to help debug Easy Digital Downloads functionality. "
5338
  "Developers may use the <a "
@@ -5341,23 +5341,23 @@ msgid ""
5341
  "debug data."
5342
  msgstr ""
5343
 
5344
- #: includes/admin/tools.php:1087
5345
  msgid "Download Debug Log File"
5346
  msgstr ""
5347
 
5348
- #: includes/admin/tools.php:1088
5349
  msgid "Clear Log"
5350
  msgstr ""
5351
 
5352
- #: includes/admin/tools.php:1089
5353
  msgid "Copy Entire Log"
5354
  msgstr ""
5355
 
5356
- #: includes/admin/tools.php:1094
5357
  msgid "Log file"
5358
  msgstr ""
5359
 
5360
- #: includes/admin/tracking.php:261
5361
  msgid ""
5362
  "Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and "
5363
  "our newsletter and immediately be emailed a discount to the EDD shop, valid "
@@ -5365,11 +5365,11 @@ msgid ""
5365
  "sensitive data is tracked."
5366
  msgstr ""
5367
 
5368
- #: includes/admin/tracking.php:262
5369
  msgid "Allow"
5370
  msgstr ""
5371
 
5372
- #: includes/admin/tracking.php:263
5373
  msgid "Do not allow"
5374
  msgstr ""
5375
 
@@ -5459,12 +5459,12 @@ msgstr ""
5459
 
5460
  #: includes/admin/upgrades/upgrade-functions.php:219
5461
  #: includes/admin/upgrades/upgrade-functions.php:535
5462
- #: includes/admin/upgrades/upgrade-functions.php:617
5463
- #: includes/admin/upgrades/upgrade-functions.php:728
5464
- #: includes/admin/upgrades/upgrade-functions.php:825
5465
- #: includes/admin/upgrades/upgrade-functions.php:899
5466
- #: includes/admin/upgrades/upgrade-functions.php:1027
5467
- #: includes/admin/upgrades/upgrade-functions.php:1112
5468
  #: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
5469
  msgid "You do not have permission to do shop upgrades"
5470
  msgstr ""
@@ -5477,45 +5477,45 @@ msgstr ""
5477
  msgid "Your transaction failed, please try again or contact site support."
5478
  msgstr ""
5479
 
5480
- #: includes/admin/upgrades/upgrade-functions.php:1188
5481
  msgid ""
5482
  "<strong>Migration complete:</strong> You have already completed the update "
5483
  "to the file download logs."
5484
  msgstr ""
5485
 
5486
- #: includes/admin/upgrades/upgrade-functions.php:1196
5487
  msgid ""
5488
  "<strong>Database Upgrade Complete:</strong> All database upgrades have been "
5489
  "completed."
5490
  msgstr ""
5491
 
5492
- #: includes/admin/upgrades/upgrade-functions.php:1198
5493
  msgid "You may now leave this page."
5494
  msgstr ""
5495
 
5496
- #: includes/admin/upgrades/upgrade-functions.php:1204
5497
  msgid ""
5498
  "<strong>Important:</strong> Please leave this screen open and do not "
5499
  "navigate away until the process completes."
5500
  msgstr ""
5501
 
5502
- #: includes/admin/upgrades/upgrade-functions.php:1247
5503
  msgid "Update file download logs"
5504
  msgstr ""
5505
 
5506
- #: includes/admin/upgrades/upgrade-functions.php:1252
5507
  msgid ""
5508
  "This will update the file download logs to remove some <abbr "
5509
  "title=\"Personally Identifiable Information\">PII</abbr> and make file "
5510
  "download counts more accurate."
5511
  msgstr ""
5512
 
5513
- #: includes/admin/upgrades/upgrade-functions.php:1261
5514
- #: includes/admin/upgrades/upgrade-functions.php:1264
5515
  msgid "Update File Download Logs"
5516
  msgstr ""
5517
 
5518
- #: includes/admin/upgrades/upgrade-functions.php:1265
5519
  msgid "File download logs have already been updated."
5520
  msgstr ""
5521
 
@@ -5555,7 +5555,7 @@ msgstr ""
5555
  msgid "Loading notifications..."
5556
  msgstr ""
5557
 
5558
- #: includes/ajax-functions.php:143 includes/cart/actions.php:112
5559
  msgid ""
5560
  "Missing nonce when removing an item from the cart. Please read the "
5561
  "following for more information: "
@@ -5658,27 +5658,27 @@ msgstr ""
5658
  msgid "No download logs found!"
5659
  msgstr ""
5660
 
5661
- #: includes/api/class-edd-api.php:1945 includes/user-functions.php:1072
5662
  msgid "Easy Digital Downloads API Keys"
5663
  msgstr ""
5664
 
5665
- #: includes/api/class-edd-api.php:1954 includes/user-functions.php:1077
5666
  msgid "Generate API Key"
5667
  msgstr ""
5668
 
5669
- #: includes/api/class-edd-api.php:1956 includes/user-functions.php:1079
5670
  msgid "Public key:"
5671
  msgstr ""
5672
 
5673
- #: includes/api/class-edd-api.php:1957 includes/user-functions.php:1080
5674
  msgid "Secret key:"
5675
  msgstr ""
5676
 
5677
- #: includes/api/class-edd-api.php:1958 includes/user-functions.php:1081
5678
  msgid "Token:"
5679
  msgstr ""
5680
 
5681
- #: includes/api/class-edd-api.php:1960 includes/user-functions.php:1083
5682
  msgid "Revoke API Keys"
5683
  msgstr ""
5684
 
@@ -5706,7 +5706,7 @@ msgstr ""
5706
  msgid "excludes %s tax"
5707
  msgstr ""
5708
 
5709
- #: includes/cart/class-edd-cart.php:1397 includes/cart/class-edd-cart.php:1459
5710
  #: templates/shortcode-profile-editor.php:22
5711
  msgid "Success"
5712
  msgstr ""
@@ -5715,15 +5715,15 @@ msgstr ""
5715
  msgid "Cart saved successfully. You can restore your cart using this URL:"
5716
  msgstr ""
5717
 
5718
- #: includes/cart/class-edd-cart.php:1433 includes/cart/class-edd-cart.php:1447
5719
  msgid "Cart restoration failed. Invalid token."
5720
  msgstr ""
5721
 
5722
- #: includes/cart/class-edd-cart.php:1441 includes/cart/class-edd-cart.php:1450
5723
  msgid "The cart cannot be restored. Invalid token."
5724
  msgstr ""
5725
 
5726
- #: includes/cart/class-edd-cart.php:1459
5727
  msgid "Cart restored successfully."
5728
  msgstr ""
5729
 
@@ -5740,19 +5740,19 @@ msgstr ""
5740
  msgid "Save Cart"
5741
  msgstr ""
5742
 
5743
- #: includes/cart/template.php:200
5744
  msgid "Restore Previous Cart."
5745
  msgstr ""
5746
 
5747
- #: includes/cart/template.php:218
5748
  msgid "Update Cart"
5749
  msgstr ""
5750
 
5751
- #: includes/cart/template.php:275
5752
  msgid "You have successfully added %s to your shopping cart."
5753
  msgstr ""
5754
 
5755
- #: includes/cart/template.php:276
5756
  msgid "Checkout."
5757
  msgstr ""
5758
 
@@ -5827,7 +5827,7 @@ msgid "Card name"
5827
  msgstr ""
5828
 
5829
  #: includes/checkout/template.php:270
5830
- #: includes/gateways/stripe/includes/template-functions.php:554
5831
  msgid "Expiration (MM/YY)"
5832
  msgstr ""
5833
 
@@ -5836,8 +5836,8 @@ msgid "The date your credit card expires, typically on the front of the card."
5836
  msgstr ""
5837
 
5838
  #: includes/checkout/template.php:343
5839
- #: includes/gateways/stripe/includes/template-functions.php:449
5840
- #: includes/gateways/stripe/includes/template-functions.php:747
5841
  msgid "Billing Details"
5842
  msgstr ""
5843
 
@@ -5870,22 +5870,22 @@ msgid "The city for your billing address."
5870
  msgstr ""
5871
 
5872
  #: includes/checkout/template.php:377
5873
- #: includes/gateways/stripe/includes/template-functions.php:774
5874
  msgid "Billing Zip / Postal Code"
5875
  msgstr ""
5876
 
5877
  #: includes/checkout/template.php:382
5878
- #: includes/gateways/stripe/includes/template-functions.php:779
5879
  msgid "The zip or postal code for your billing address."
5880
  msgstr ""
5881
 
5882
  #: includes/checkout/template.php:387
5883
- #: includes/gateways/stripe/includes/template-functions.php:750
5884
  msgid "Billing Country"
5885
  msgstr ""
5886
 
5887
  #: includes/checkout/template.php:392
5888
- #: includes/gateways/stripe/includes/template-functions.php:755
5889
  msgid "The country for your billing address."
5890
  msgstr ""
5891
 
@@ -5979,7 +5979,7 @@ msgstr ""
5979
  msgid "Enter a coupon code if you have one."
5980
  msgstr ""
5981
 
5982
- #: includes/checkout/template.php:754 includes/process-purchase.php:389
5983
  #: includes/scripts.php:67
5984
  msgid "Enter discount"
5985
  msgstr ""
@@ -6349,7 +6349,7 @@ msgid "Can't get property %s"
6349
  msgstr ""
6350
 
6351
  #: includes/class-edd-discount.php:789
6352
- #: includes/gateways/stripe/includes/template-functions.php:326
6353
  msgid "Expired"
6354
  msgstr ""
6355
 
@@ -7076,7 +7076,7 @@ msgstr ""
7076
  msgid "Receipt"
7077
  msgstr ""
7078
 
7079
- #: includes/gateways/actions.php:37
7080
  #: includes/gateways/stripe/includes/payment-methods/payment-request/checkout.php:321
7081
  msgid ""
7082
  "Missing nonce when loading the gateway fields. Please read the following "
@@ -7085,7 +7085,7 @@ msgid ""
7085
  "ajax-requests-in-easy-digital-downloads-2-9-4"
7086
  msgstr ""
7087
 
7088
- #: includes/gateways/actions.php:68
7089
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
7090
  msgstr ""
7091
 
@@ -7167,35 +7167,35 @@ msgid ""
7167
  "href=\"%s\">Integration Settings</a>"
7168
  msgstr ""
7169
 
7170
- #: includes/gateways/amazon-payments.php:711
7171
  msgid "Currently logged into Amazon as"
7172
  msgstr ""
7173
 
7174
- #: includes/gateways/amazon-payments.php:712
7175
  msgid "Logout"
7176
  msgstr ""
7177
 
7178
- #: includes/gateways/amazon-payments.php:867
7179
- #: includes/gateways/amazon-payments.php:881
7180
  msgid "Missing Reference ID, please try again"
7181
  msgstr ""
7182
 
7183
- #: includes/gateways/amazon-payments.php:917
7184
  msgid ""
7185
  "Your payment could not be authorized, please try a different payment "
7186
  "method. Reason: %s"
7187
  msgstr ""
7188
 
7189
- #: includes/gateways/amazon-payments.php:964
7190
  msgid "There was an issue processing your payment. Amazon error: %s"
7191
  msgstr ""
7192
 
7193
- #: includes/gateways/amazon-payments.php:1094
7194
  msgid "Invalid Amazon seller ID"
7195
  msgstr ""
7196
 
7197
- #: includes/gateways/amazon-payments.php:1094
7198
- #: includes/gateways/amazon-payments.php:1148
7199
  #: includes/gateways/paypal-standard.php:475
7200
  #: includes/gateways/paypal-standard.php:482
7201
  #: includes/gateways/paypal-standard.php:574
@@ -7205,24 +7205,24 @@ msgstr ""
7205
  msgid "IPN Error"
7206
  msgstr ""
7207
 
7208
- #: includes/gateways/amazon-payments.php:1118
7209
  msgid "Capture declined in Amazon"
7210
  msgstr ""
7211
 
7212
- #: includes/gateways/amazon-payments.php:1136
7213
- #: includes/gateways/amazon-payments.php:1222
7214
  msgid "Refund completed in Amazon. Refund ID: %s"
7215
  msgstr ""
7216
 
7217
- #: includes/gateways/amazon-payments.php:1215
7218
  msgid "Refund declined in Amazon. Refund ID: %s"
7219
  msgstr ""
7220
 
7221
- #: includes/gateways/amazon-payments.php:1228
7222
  msgid "Refund initiated in Amazon. Reference ID: %s"
7223
  msgstr ""
7224
 
7225
- #: includes/gateways/amazon-payments.php:1237
7226
  msgid "Refund request failed in Amazon."
7227
  msgstr ""
7228
 
@@ -8488,7 +8488,7 @@ msgid "Unable to call %1$s::%2$s"
8488
  msgstr ""
8489
 
8490
  #: includes/gateways/stripe/includes/compat.php:116
8491
- #: includes/process-purchase.php:550 includes/process-purchase.php:869
8492
  msgid "The user information is invalid"
8493
  msgstr ""
8494
 
@@ -8718,7 +8718,7 @@ msgstr ""
8718
 
8719
  #: includes/gateways/stripe/includes/payment-methods/buy-now/checkout.php:81
8720
  #: includes/gateways/stripe/includes/payment-methods/payment-request/checkout.php:274
8721
- #: includes/process-purchase.php:462
8722
  msgid "Please enter a valid email address"
8723
  msgstr ""
8724
 
@@ -8834,67 +8834,67 @@ msgid ""
8834
  "or contacts support."
8835
  msgstr ""
8836
 
8837
- #: includes/gateways/stripe/includes/template-functions.php:301
8838
- #: includes/gateways/stripe/includes/template-functions.php:390
8839
  #. translators: %1$s Card type. %2$s Card last 4.
8840
  msgid "%1$s •••• %2$s"
8841
  msgstr ""
8842
 
8843
- #: includes/gateways/stripe/includes/template-functions.php:338
8844
- #: includes/gateways/stripe/includes/template-functions.php:608
8845
  msgid "Add New Card"
8846
  msgstr ""
8847
 
8848
- #: includes/gateways/stripe/includes/template-functions.php:367
8849
  msgid "Payment method management is currently unavailable."
8850
  msgstr ""
8851
 
8852
- #: includes/gateways/stripe/includes/template-functions.php:380
8853
  msgid "Manage Payment Methods"
8854
  msgstr ""
8855
 
8856
- #: includes/gateways/stripe/includes/template-functions.php:409
8857
  msgid "Expires"
8858
  msgstr ""
8859
 
8860
- #: includes/gateways/stripe/includes/template-functions.php:425
8861
  msgid "Update"
8862
  msgstr ""
8863
 
8864
- #: includes/gateways/stripe/includes/template-functions.php:431
8865
  msgid "Set as Default"
8866
  msgstr ""
8867
 
8868
- #: includes/gateways/stripe/includes/template-functions.php:499
8869
  msgid "ZIP Code"
8870
  msgstr ""
8871
 
8872
- #: includes/gateways/stripe/includes/template-functions.php:592
8873
- #: includes/gateways/stripe/includes/template-functions.php:633
8874
  msgid "Please Wait…"
8875
  msgstr ""
8876
 
8877
- #: includes/gateways/stripe/includes/template-functions.php:593
8878
- #: includes/gateways/stripe/includes/template-functions.php:594
8879
  msgid "Update Card"
8880
  msgstr ""
8881
 
8882
- #: includes/gateways/stripe/includes/template-functions.php:610
8883
  msgid "Credit Card Details"
8884
  msgstr ""
8885
 
8886
- #: includes/gateways/stripe/includes/template-functions.php:634
8887
- #: includes/gateways/stripe/includes/template-functions.php:635
8888
  msgid "Add new card"
8889
  msgstr ""
8890
 
8891
- #: includes/gateways/stripe/includes/template-functions.php:846
8892
- #: includes/process-purchase.php:476
8893
  msgid "Please enter your zip / postal code"
8894
  msgstr ""
8895
 
8896
- #: includes/gateways/stripe/includes/template-functions.php:851
8897
- #: includes/process-purchase.php:484
8898
  msgid "Please select your billing country"
8899
  msgstr ""
8900
 
@@ -8952,11 +8952,11 @@ msgid ""
8952
  msgstr ""
8953
 
8954
  #: includes/login-register.php:248 includes/login-register.php:256
8955
- #: includes/process-purchase.php:609
8956
  msgid "Invalid username"
8957
  msgstr ""
8958
 
8959
- #: includes/login-register.php:252 includes/process-purchase.php:602
8960
  msgid "Username already taken"
8961
  msgstr ""
8962
 
@@ -8964,8 +8964,8 @@ msgstr ""
8964
  msgid "Email address already taken"
8965
  msgstr ""
8966
 
8967
- #: includes/login-register.php:264 includes/process-purchase.php:545
8968
- #: includes/process-purchase.php:625 includes/process-purchase.php:734
8969
  msgid "Invalid email"
8970
  msgstr ""
8971
 
@@ -9134,23 +9134,23 @@ msgstr ""
9134
  msgid "Status changed from %s to %s"
9135
  msgstr ""
9136
 
9137
- #: includes/payments/actions.php:451 includes/payments/actions.php:513
9138
  msgid "Error resuming payment."
9139
  msgstr ""
9140
 
9141
- #: includes/payments/actions.php:455
9142
  msgid "Payment recovery triggered URL"
9143
  msgstr ""
9144
 
9145
- #: includes/payments/actions.php:535 includes/payments/actions.php:569
9146
  msgid "To complete this payment, please login to your account."
9147
  msgstr ""
9148
 
9149
- #: includes/payments/actions.php:537
9150
  msgid "Lost Password"
9151
  msgstr ""
9152
 
9153
- #: includes/payments/actions.php:538 templates/shortcode-login.php:33
9154
  msgid "Lost Password?"
9155
  msgstr ""
9156
 
@@ -9715,81 +9715,81 @@ msgstr ""
9715
  msgid "Error processing login. Nonce failed."
9716
  msgstr ""
9717
 
9718
- #: includes/process-purchase.php:356
9719
  msgid "The selected payment gateway is not enabled"
9720
  msgstr ""
9721
 
9722
- #: includes/process-purchase.php:416
9723
  msgid "One or more of the discounts you entered is invalid"
9724
  msgstr ""
9725
 
9726
- #: includes/process-purchase.php:433
9727
  msgid "You must agree to the terms of use"
9728
  msgstr ""
9729
 
9730
- #: includes/process-purchase.php:447
9731
  msgid "You must agree to the privacy policy"
9732
  msgstr ""
9733
 
9734
- #: includes/process-purchase.php:466
9735
  msgid "Please enter your first name"
9736
  msgstr ""
9737
 
9738
- #: includes/process-purchase.php:480
9739
  msgid "Please enter your billing city"
9740
  msgstr ""
9741
 
9742
- #: includes/process-purchase.php:488
9743
  msgid "Please enter billing state / province"
9744
  msgstr ""
9745
 
9746
- #: includes/process-purchase.php:607
9747
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
9748
  msgstr ""
9749
 
9750
- #: includes/process-purchase.php:617
9751
  msgid "You must register or login to complete your purchase"
9752
  msgstr ""
9753
 
9754
- #: includes/process-purchase.php:630
9755
  msgid ""
9756
  "Email already used. Login or use a different email to complete your "
9757
  "purchase."
9758
  msgstr ""
9759
 
9760
- #: includes/process-purchase.php:638 includes/process-purchase.php:742
9761
  msgid "Enter an email"
9762
  msgstr ""
9763
 
9764
- #: includes/process-purchase.php:646
9765
  msgid "Passwords don't match"
9766
  msgstr ""
9767
 
9768
- #: includes/process-purchase.php:655
9769
  msgid "Enter a password"
9770
  msgstr ""
9771
 
9772
- #: includes/process-purchase.php:658
9773
  msgid "Enter the password confirmation"
9774
  msgstr ""
9775
 
9776
- #: includes/process-purchase.php:684
9777
  msgid "You must log in or register to complete your purchase"
9778
  msgstr ""
9779
 
9780
- #: includes/process-purchase.php:723
9781
  msgid "You must be logged into an account to purchase"
9782
  msgstr ""
9783
 
9784
- #: includes/process-purchase.php:951
9785
  msgid "The zip / postal code you entered for your billing address is invalid"
9786
  msgstr ""
9787
 
9788
- #: includes/process-purchase.php:1200
9789
  msgid "An internal error has occurred, please try again or contact support."
9790
  msgstr ""
9791
 
9792
- #: includes/process-purchase.php:1236
9793
  msgid "There was an error completing your purchase. Please try again."
9794
  msgstr ""
9795
 
@@ -10105,41 +10105,41 @@ msgstr ""
10105
 
10106
  #: includes/user-functions.php:766
10107
  msgid ""
10108
- "Hello %s,\n"
10109
  "\n"
10110
- "Your account with %s needs to be verified before you can access your "
10111
- "purchase history. <a href='%s'>Click here</a> to verify your account.\n"
10112
  "\n"
10113
- "Link missing? Visit the following URL: %s"
10114
  msgstr ""
10115
 
10116
- #: includes/user-functions.php:891
10117
  msgid ""
10118
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
10119
  "here</a> to request a new verification URL."
10120
  msgstr ""
10121
 
10122
- #: includes/user-functions.php:924
10123
  msgid "You must be logged in to verify your account."
10124
  msgstr ""
10125
 
10126
- #: includes/user-functions.php:924 includes/user-functions.php:928
10127
  msgid "Notice"
10128
  msgstr ""
10129
 
10130
- #: includes/user-functions.php:928
10131
  msgid "Your account has already been verified."
10132
  msgstr ""
10133
 
10134
- #: includes/user-functions.php:973
10135
  msgid "Invalid verification token provided."
10136
  msgstr ""
10137
 
10138
- #: includes/user-functions.php:1095
10139
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
10140
  msgstr ""
10141
 
10142
- #: includes/user-functions.php:1102
10143
  msgid "Add to iOS App"
10144
  msgstr ""
10145
 
@@ -10422,92 +10422,92 @@ msgctxt "Customer Details page tab title"
10422
  msgid "Customer %s"
10423
  msgstr ""
10424
 
10425
- #: includes/admin/payments/view-order-details.php:389
10426
  msgctxt "payment details purchased item title - full screen"
10427
  msgid "%s Purchased"
10428
  msgstr ""
10429
 
10430
- #: includes/admin/payments/view-order-details.php:394
10431
  msgctxt "payment details purchased item price - full screen"
10432
  msgid "Price"
10433
  msgstr ""
10434
 
10435
- #: includes/admin/payments/view-order-details.php:396
10436
  msgctxt "payment details purchased item quantity - full screen"
10437
  msgid " & Quantity"
10438
  msgstr ""
10439
 
10440
- #: includes/admin/payments/view-order-details.php:403
10441
  msgctxt "payment details purchased item tax - full screen"
10442
  msgid "Tax"
10443
  msgstr ""
10444
 
10445
- #: includes/admin/payments/view-order-details.php:408
10446
  msgctxt "payment details purchased item total - full screen"
10447
  msgid "%s Total"
10448
  msgstr ""
10449
 
10450
- #: includes/admin/payments/view-order-details.php:483
10451
  msgctxt "payment details purchased item price - mobile"
10452
  msgid "Price"
10453
  msgstr ""
10454
 
10455
- #: includes/admin/payments/view-order-details.php:485
10456
  msgctxt "payment details purchased item quantity - mobile"
10457
  msgid " & Quantity"
10458
  msgstr ""
10459
 
10460
- #: includes/admin/payments/view-order-details.php:500
10461
  msgctxt "payment details purchased item tax - mobile"
10462
  msgid "Tax"
10463
  msgstr ""
10464
 
10465
- #: includes/admin/payments/view-order-details.php:509
10466
  msgctxt "payment details purchased item total - mobile"
10467
  msgid "%s Total"
10468
  msgstr ""
10469
 
10470
- #: includes/admin/payments/view-order-details.php:563
10471
  msgctxt "payment details select item to add - mobile"
10472
  msgid "Select New %s To Add"
10473
  msgstr ""
10474
 
10475
- #: includes/admin/payments/view-order-details.php:575
10476
  msgctxt "payment details add item price - mobile"
10477
  msgid "Price"
10478
  msgstr ""
10479
 
10480
- #: includes/admin/payments/view-order-details.php:577
10481
  msgctxt "payment details add item quantity - mobile"
10482
  msgid " & Quantity"
10483
  msgstr ""
10484
 
10485
- #: includes/admin/payments/view-order-details.php:601
10486
  msgctxt "payment details add item tax - mobile"
10487
  msgid "Tax"
10488
  msgstr ""
10489
 
10490
- #: includes/admin/payments/view-order-details.php:743
10491
  msgctxt "Address City"
10492
  msgid "City:"
10493
  msgstr ""
10494
 
10495
- #: includes/admin/payments/view-order-details.php:748
10496
  msgctxt "Zip / Postal code of address"
10497
  msgid "Zip / Postal Code:"
10498
  msgstr ""
10499
 
10500
- #: includes/admin/payments/view-order-details.php:755
10501
  msgctxt "Address country"
10502
  msgid "Country:"
10503
  msgstr ""
10504
 
10505
- #: includes/admin/payments/view-order-details.php:775
10506
  msgctxt "State / province of address"
10507
  msgid "State / Province:"
10508
  msgstr ""
10509
 
10510
- #: includes/admin/reporting/reports.php:360
10511
  msgctxt "Date one to date two"
10512
  msgid "to"
10513
  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.11.7\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
+ "POT-Creation-Date: 2022-06-29 19:45:44+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
57
 
58
  #: includes/EDD_SL_Plugin_Updater.php:486
59
  #: includes/admin/customers/customer-actions.php:301
60
+ #: includes/admin/customers/customer-actions.php:354
61
+ #: includes/admin/customers/customer-actions.php:621
62
  #: includes/admin/discounts/discount-actions.php:30
63
+ #: includes/admin/discounts/discount-actions.php:120
64
+ #: includes/admin/discounts/discount-actions.php:187
65
+ #: includes/admin/discounts/discount-actions.php:191
66
+ #: includes/admin/discounts/discount-actions.php:212
67
+ #: includes/admin/discounts/discount-actions.php:216
68
+ #: includes/admin/discounts/discount-actions.php:237
69
  #: includes/admin/discounts/edit-discount.php:16
70
  #: includes/admin/downloads/dashboard-columns.php:171
71
  #: includes/admin/import/class-batch-import-downloads.php:65
73
  #: includes/admin/import/class-batch-import.php:188
74
  #: includes/admin/payments/actions.php:25
75
  #: includes/admin/payments/actions.php:295
76
+ #: includes/admin/payments/actions.php:328
77
+ #: includes/admin/payments/actions.php:341
78
+ #: includes/admin/payments/actions.php:348
79
+ #: includes/admin/payments/actions.php:377
80
+ #: includes/admin/payments/actions.php:397
81
  #: includes/admin/payments/view-order-details.php:22
82
  #: includes/admin/payments/view-order-details.php:32
83
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:147
85
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:128
86
  #: includes/admin/reporting/export/class-batch-export.php:131
87
  #: includes/admin/reporting/export/export-actions.php:23
88
+ #: includes/admin/reporting/reports.php:104
89
  #: includes/admin/tools/class-edd-tools-recount-all-stats.php:225
90
  #: includes/admin/tools/class-edd-tools-recount-customer-stats.php:191
91
  #: includes/admin/tools/class-edd-tools-recount-download-stats.php:242
96
  #: includes/admin/upgrades/classes/class-file-download-log-migration.php:136
97
  #: includes/admin/upgrades/upgrade-functions.php:219
98
  #: includes/admin/upgrades/upgrade-functions.php:535
99
+ #: includes/admin/upgrades/upgrade-functions.php:619
100
+ #: includes/admin/upgrades/upgrade-functions.php:732
101
+ #: includes/admin/upgrades/upgrade-functions.php:832
102
+ #: includes/admin/upgrades/upgrade-functions.php:909
103
+ #: includes/admin/upgrades/upgrade-functions.php:1040
104
+ #: includes/admin/upgrades/upgrade-functions.php:1128
105
  #: includes/api/class-edd-api.php:1980 includes/api/class-edd-api.php:1985
106
  #: includes/api/class-edd-api.php:1997 includes/api/class-edd-api.php:1999
107
+ #: includes/cart/class-edd-cart.php:1434 includes/cart/class-edd-cart.php:1448
108
  #: includes/class-edd-license-handler.php:398
109
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
110
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1275
118
  #: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
119
  #: includes/gateways/stripe/includes/payment-actions.php:1408
120
  #: includes/process-download.php:303 includes/process-download.php:895
121
+ #: includes/query-filters.php:48 includes/user-functions.php:898
122
+ #: includes/user-functions.php:923 includes/user-functions.php:976
123
  msgid "Error"
124
  msgstr ""
125
 
204
 
205
  #: includes/admin/admin-pages.php:40
206
  #: includes/admin/reporting/contextual-help.php:39
207
+ #: includes/admin/reporting/reports.php:34
208
+ #: includes/admin/reporting/reports.php:36
209
  msgid "Reports"
210
  msgstr ""
211
 
222
  msgid "Easy Digital Downloads Info and Tools"
223
  msgstr ""
224
 
225
+ #: includes/admin/admin-pages.php:42 includes/admin/customers/customers.php:752
226
  #: includes/admin/tools.php:30
227
  msgid "Tools"
228
  msgstr ""
231
  msgid "Easy Digital Downloads Extensions"
232
  msgstr ""
233
 
234
+ #: includes/admin/admin-pages.php:43 includes/admin/plugins.php:61
235
  #: includes/admin/settings/contextual-help.php:96
236
  #: includes/admin/settings/register-settings.php:1367
237
  msgid "Extensions"
531
  msgstr ""
532
 
533
  #: includes/admin/customers/class-customer-table.php:72
534
+ #: includes/admin/payments/class-payments-table.php:275
535
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:156
536
  #: includes/admin/reporting/class-sales-logs-list-table.php:129
537
  msgid "Customer"
538
  msgstr ""
541
  msgid "Unnamed Customer"
542
  msgstr ""
543
 
544
+ #: includes/admin/customers/class-customer-table.php:187
545
  msgid "View"
546
  msgstr ""
547
 
548
+ #: includes/admin/customers/class-customer-table.php:188
549
  msgid "Download log"
550
  msgstr ""
551
 
552
+ #: includes/admin/customers/class-customer-table.php:189
553
  #: includes/admin/discounts/class-discount-codes-table.php:215
554
  #: includes/admin/discounts/class-discount-codes-table.php:267
555
+ #: includes/admin/payments/class-payments-table.php:390
556
+ #: includes/admin/payments/class-payments-table.php:474
557
  #: includes/admin/settings/register-settings.php:958
558
+ #: includes/gateways/stripe/includes/template-functions.php:443
559
  #: includes/payments/functions.php:1600
560
  msgid "Delete"
561
  msgstr ""
562
 
563
+ #: includes/admin/customers/class-customer-table.php:192
564
  msgid "(Pending Verification)"
565
  msgstr ""
566
 
567
+ #: includes/admin/customers/class-customer-table.php:205
568
  #: includes/admin/discounts/add-discount.php:32
569
  #: includes/admin/discounts/class-discount-codes-table.php:142
570
  #: includes/admin/discounts/edit-discount.php:46
571
  #: includes/admin/downloads/dashboard-columns.php:31
572
+ #: includes/admin/payments/view-order-details.php:723
573
  #: includes/admin/reporting/class-export-customers.php:74
574
  #: includes/admin/reporting/export/class-batch-export-customers.php:43
575
  #: includes/admin/reporting/export/class-batch-export-downloads.php:43
577
  msgid "Name"
578
  msgstr ""
579
 
580
+ #: includes/admin/customers/class-customer-table.php:206
581
  #: includes/privacy-functions.php:585
582
  msgid "Primary Email"
583
  msgstr ""
584
 
585
+ #: includes/admin/customers/class-customer-table.php:207
586
  msgid "Purchases"
587
  msgstr ""
588
 
589
+ #: includes/admin/customers/class-customer-table.php:208
590
  msgid "Total Spent"
591
  msgstr ""
592
 
593
+ #: includes/admin/customers/class-customer-table.php:209
594
  #: includes/admin/reporting/export/class-batch-export-customers.php:48
595
  #: includes/admin/reporting/export/class-batch-export-downloads.php:44
596
  #: includes/privacy-functions.php:593
599
 
600
  #: includes/admin/customers/customer-actions.php:17
601
  #: includes/admin/customers/customer-actions.php:186
602
+ #: includes/admin/customers/customer-actions.php:397
603
+ #: includes/admin/customers/customer-actions.php:552
604
  msgid "You do not have permission to edit this customer."
605
  msgstr ""
606
 
607
  #: includes/admin/customers/customer-actions.php:29
608
+ #: includes/admin/customers/customer-actions.php:409
609
+ #: includes/admin/customers/customer-actions.php:477
610
+ #: includes/admin/customers/customer-actions.php:563
611
  msgid "Cheatin' eh?!"
612
  msgstr ""
613
 
640
  msgstr ""
641
 
642
  #: includes/admin/customers/customer-actions.php:207
643
+ #: includes/user-functions.php:923
644
  msgid "Nonce verification failed."
645
  msgstr ""
646
 
665
  msgstr ""
666
 
667
  #: includes/admin/customers/customer-actions.php:257
668
+ #: includes/admin/customers/customer-actions.php:373
669
  msgid "Email address %s set as primary by %s"
670
  msgstr ""
671
 
672
  #: includes/admin/customers/customer-actions.php:301
673
+ #: includes/admin/customers/customer-actions.php:354
674
+ #: includes/admin/customers/customer-actions.php:621
675
  #: includes/admin/import/import-functions.php:31
676
  #: includes/admin/import/import-functions.php:113
677
+ #: includes/admin/payments/actions.php:341
678
  #: includes/admin/reporting/export/export-actions.php:23
679
  #: includes/api/class-edd-api.php:1980
680
  #: includes/class-edd-license-handler.php:398
681
  msgid "Nonce verification failed"
682
  msgstr ""
683
 
684
+ #: includes/admin/customers/customer-actions.php:320
685
  #: includes/shortcodes.php:934
686
  msgid "Email address %s removed by %s"
687
  msgstr ""
688
 
689
+ #: includes/admin/customers/customer-actions.php:413
690
  msgid "A note is required"
691
  msgstr ""
692
 
693
+ #: includes/admin/customers/customer-actions.php:464
694
  msgid "You do not have permission to delete this customer."
695
  msgstr ""
696
 
697
+ #: includes/admin/customers/customer-actions.php:481
698
  msgid "Please confirm you want to delete this customer"
699
  msgstr ""
700
 
701
+ #: includes/admin/customers/customer-actions.php:522
702
  msgid "Error deleting customer"
703
  msgstr ""
704
 
705
+ #: includes/admin/customers/customer-actions.php:529
706
  msgid "Invalid Customer ID"
707
  msgstr ""
708
 
709
+ #: includes/admin/customers/customer-actions.php:587
710
  msgid "Failed to disconnect user from customer"
711
  msgstr ""
712
 
736
  msgstr ""
737
 
738
  #: includes/admin/customers/customers.php:116
739
+ #: includes/admin/payments/view-order-details.php:666
740
  msgid "Customer Details"
741
  msgstr ""
742
 
743
+ #: includes/admin/customers/customers.php:215
744
  msgid "Edit Customer"
745
  msgstr ""
746
 
747
+ #: includes/admin/customers/customers.php:241
748
  msgid "Customer Address"
749
  msgstr ""
750
 
751
+ #: includes/admin/customers/customers.php:252
752
  msgid "Address 1"
753
  msgstr ""
754
 
755
+ #: includes/admin/customers/customers.php:253
756
  msgid "Address 2"
757
  msgstr ""
758
 
759
+ #: includes/admin/customers/customers.php:254
760
  #: includes/admin/reporting/class-export-payments.php:66
761
  #: includes/admin/reporting/export/class-batch-export-payments.php:47
762
  #: includes/admin/tools.php:686 includes/checkout/template.php:373
763
+ #: includes/gateways/stripe/includes/template-functions.php:487
764
  #: templates/shortcode-profile-editor.php:152
765
  msgid "City"
766
  msgstr ""
767
 
768
+ #: includes/admin/customers/customers.php:281
769
  #: includes/admin/settings/register-settings.php:2228
770
  #: includes/admin/tools.php:695 includes/checkout/template.php:435
771
  #: templates/shortcode-profile-editor.php:171
772
  msgid "State / Province"
773
  msgstr ""
774
 
775
+ #: includes/admin/customers/customers.php:283
776
  msgid "Postal"
777
  msgstr ""
778
 
779
+ #: includes/admin/customers/customers.php:290
780
  msgid "Customer Name"
781
  msgstr ""
782
 
783
+ #: includes/admin/customers/customers.php:292
784
  msgid "Customer Email"
785
  msgstr ""
786
 
787
+ #: includes/admin/customers/customers.php:298
788
  #. translators: The date.
789
  msgid "Customer since %s"
790
  msgstr ""
791
 
792
+ #: includes/admin/customers/customers.php:325
793
  #: includes/admin/reporting/export/class-batch-export-customers.php:42
794
  #: includes/privacy-functions.php:867
795
  msgid "User ID"
796
  msgstr ""
797
 
798
+ #: includes/admin/customers/customers.php:329
799
  #: includes/admin/reporting/class-export-payments.php:184
800
  #: includes/admin/reporting/export/class-batch-export-payments.php:222
801
  msgid "none"
802
  msgstr ""
803
 
804
+ #: includes/admin/customers/customers.php:332
805
  msgid "Disconnect User"
806
  msgstr ""
807
 
808
+ #: includes/admin/customers/customers.php:344
809
  msgid "Update Customer"
810
  msgstr ""
811
 
812
+ #: includes/admin/customers/customers.php:345
813
+ #: includes/admin/customers/customers.php:727
814
+ #: includes/admin/payments/view-order-details.php:714
815
+ #: includes/admin/payments/view-order-details.php:734
816
  #: includes/admin/thickbox.php:136 includes/class-edd-html-elements.php:796
817
  #: includes/gateways/stripe/includes/admin/admin-filters.php:109
818
+ #: includes/gateways/stripe/includes/template-functions.php:599
819
+ #: includes/gateways/stripe/includes/template-functions.php:639
820
  msgid "Cancel"
821
  msgstr ""
822
 
823
+ #: includes/admin/customers/customers.php:358
824
  msgid "%d Completed Sale"
825
  msgid_plural "%d Completed Sales"
826
  msgstr[0] ""
827
  msgstr[1] ""
828
 
829
+ #: includes/admin/customers/customers.php:363
830
  msgid "Lifetime Value"
831
  msgstr ""
832
 
833
+ #: includes/admin/customers/customers.php:376
834
  msgid "Customer Emails"
835
  msgstr ""
836
 
837
+ #: includes/admin/customers/customers.php:377
838
  msgid ""
839
  "This customer can use any of the emails listed here when making new "
840
  "purchases."
841
  msgstr ""
842
 
843
+ #: includes/admin/customers/customers.php:395
844
+ #: includes/admin/payments/class-payments-table.php:271
845
+ #: includes/admin/payments/view-order-details.php:727
846
  #: includes/admin/reporting/class-export-customers.php:66
847
  #: includes/admin/reporting/class-export-customers.php:77
848
  #: includes/admin/reporting/class-export-payments.php:61
853
  msgid "Email"
854
  msgstr ""
855
 
856
+ #: includes/admin/customers/customers.php:396
857
+ #: includes/admin/customers/customers.php:455
858
+ #: includes/admin/customers/customers.php:498
859
+ #: includes/admin/payments/view-order-details.php:575
860
+ #: includes/admin/payments/view-order-details.php:638
861
+ #: includes/admin/payments/view-order-details.php:711
862
+ #: includes/admin/payments/view-order-details.php:731
863
  #: templates/checkout_cart.php:13
864
  msgid "Actions"
865
  msgstr ""
866
 
867
+ #: includes/admin/customers/customers.php:416
868
+ #: includes/admin/customers/customers.php:429
869
  msgid "Make Primary"
870
  msgstr ""
871
 
872
+ #: includes/admin/customers/customers.php:418
873
  #: includes/admin/downloads/metabox.php:442
874
  #: includes/admin/downloads/metabox.php:650
875
  #: includes/admin/downloads/metabox.php:706
876
  #: includes/admin/downloads/metabox.php:831
877
+ #: includes/admin/payments/view-order-details.php:543
878
  #: includes/admin/settings/register-settings.php:2231 includes/scripts.php:227
879
  #: templates/checkout_cart.php:57 templates/checkout_cart.php:75
880
  #: templates/shortcode-profile-editor.php:123
881
  msgid "Remove"
882
  msgstr ""
883
 
884
+ #: includes/admin/customers/customers.php:428
885
  #: includes/checkout/template.php:182
886
  #: includes/gateways/stripe/includes/payment-methods/buy-now/template.php:110
887
  #: includes/privacy-functions.php:759
888
  msgid "Email Address"
889
  msgstr ""
890
 
891
+ #: includes/admin/customers/customers.php:430
892
  msgid "Add Email"
893
  msgstr ""
894
 
895
+ #: includes/admin/customers/customers.php:437
896
  msgid "No Emails Found"
897
  msgstr ""
898
 
899
+ #: includes/admin/customers/customers.php:442
900
  msgid "Recent Payments"
901
  msgstr ""
902
 
903
+ #: includes/admin/customers/customers.php:451
904
+ #: includes/admin/payments/class-payments-table.php:270
905
  #: includes/admin/reporting/class-export-payments.php:59
906
  #: includes/admin/reporting/class-export.php:66
907
  #: includes/admin/reporting/export/class-batch-export-customers.php:41
910
  msgid "ID"
911
  msgstr ""
912
 
913
+ #: includes/admin/customers/customers.php:452
914
  #: includes/admin/discounts/add-discount.php:65
915
  #: includes/admin/discounts/class-discount-codes-table.php:144
916
  #: includes/admin/discounts/edit-discount.php:79
917
+ #: includes/admin/payments/class-payments-table.php:273
918
  #: includes/admin/reporting/class-export-payments.php:72
919
  #: includes/admin/reporting/export/class-batch-export-payments.php:54
920
  #: templates/history-purchases.php:20
921
  msgid "Amount"
922
  msgstr ""
923
 
924
+ #: includes/admin/customers/customers.php:453
925
  #: includes/admin/downloads/dashboard-columns.php:37
926
+ #: includes/admin/payments/class-payments-table.php:274
927
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:92
928
  #: includes/admin/reporting/class-export-download-history.php:62
929
  #: includes/admin/reporting/class-export-payments.php:78
930
  #: includes/admin/reporting/class-export.php:67
931
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:160
932
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:131
933
  #: includes/admin/reporting/class-sales-logs-list-table.php:133
934
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:46
940
  msgid "Date"
941
  msgstr ""
942
 
943
+ #: includes/admin/customers/customers.php:454
944
  #: includes/admin/discounts/class-discount-codes-table.php:148
945
  #: includes/admin/discounts/edit-discount.php:184
946
+ #: includes/admin/payments/class-payments-table.php:276
947
  #: includes/admin/reporting/class-export-payments.php:80
948
  #: includes/admin/reporting/export/class-batch-export-downloads.php:48
949
  #: includes/admin/reporting/export/class-batch-export-payments.php:65
951
  msgid "Status"
952
  msgstr ""
953
 
954
+ #: includes/admin/customers/customers.php:478
955
  msgid "View Details"
956
  msgstr ""
957
 
958
+ #: includes/admin/customers/customers.php:485
959
  msgid "No Payments Found"
960
  msgstr ""
961
 
962
+ #: includes/admin/customers/customers.php:490
963
+ #: includes/admin/payments/view-order-details.php:404
964
  msgid "Purchased %s"
965
  msgstr ""
966
 
967
+ #: includes/admin/customers/customers.php:518
968
  #: includes/admin/extensions/abstract-extension.php:315
969
  #. translators: the plural Downloads label.
970
  msgid "View %s"
971
  msgstr ""
972
 
973
+ #: includes/admin/customers/customers.php:524
974
  msgid "No %s Found"
975
  msgstr ""
976
 
977
+ #: includes/admin/customers/customers.php:596
978
  msgid "Agreements"
979
  msgstr ""
980
 
981
+ #: includes/admin/customers/customers.php:599
982
  msgid "Last Agreed to Terms"
983
  msgstr ""
984
 
985
+ #: includes/admin/customers/customers.php:603
986
+ #: includes/admin/customers/customers.php:624
987
  msgid "Previous Agreement Dates"
988
  msgstr ""
989
 
990
+ #: includes/admin/customers/customers.php:608
991
+ #: includes/admin/customers/customers.php:629
992
  msgid "No date found."
993
  msgstr ""
994
 
995
+ #: includes/admin/customers/customers.php:612
996
+ #: includes/admin/customers/customers.php:633
997
  msgid "Estimated Privacy Policy Date"
998
  msgstr ""
999
 
1000
+ #: includes/admin/customers/customers.php:612
1001
  msgid ""
1002
  "This customer made a purchase prior to agreement dates being logged, this "
1003
  "is the date of their last purchase. If your site was displaying the "
1005
  "last agreed to your terms."
1006
  msgstr ""
1007
 
1008
+ #: includes/admin/customers/customers.php:620
1009
  msgid "Last Agreed to Privacy Policy"
1010
  msgstr ""
1011
 
1012
+ #: includes/admin/customers/customers.php:633
1013
  msgid ""
1014
  "This customer made a purchase prior to privacy policy dates being logged, "
1015
  "this is the date of their last purchase. If your site was displaying the "
1017
  "they last agreed to your privacy policy."
1018
  msgstr ""
1019
 
1020
+ #: includes/admin/customers/customers.php:640
1021
  #: includes/admin/reporting/export/class-batch-export-downloads.php:56
1022
  msgid "Notes"
1023
  msgstr ""
1024
 
1025
+ #: includes/admin/customers/customers.php:650
1026
+ #: includes/admin/payments/view-order-details.php:862
1027
  msgid "Add Note"
1028
  msgstr ""
1029
 
1030
+ #: includes/admin/customers/customers.php:678
1031
  msgid "No Customer Notes"
1032
  msgstr ""
1033
 
1034
+ #: includes/admin/customers/customers.php:711
1035
  msgid "Are you sure you want to delete this customer?"
1036
  msgstr ""
1037
 
1038
+ #: includes/admin/customers/customers.php:716
1039
  msgid "Delete all associated payments and records?"
1040
  msgstr ""
1041
 
1042
+ #: includes/admin/customers/customers.php:726
1043
  msgid "Delete Customer"
1044
  msgstr ""
1045
 
1046
+ #: includes/admin/customers/customers.php:755 includes/admin/tools.php:153
1047
  msgid "Recount Customer Stats"
1048
  msgstr ""
1049
 
1050
+ #: includes/admin/customers/customers.php:756
1051
  msgid ""
1052
  "Use this tool to recalculate the purchase count and total value of the "
1053
  "customer."
1054
  msgstr ""
1055
 
1056
+ #: includes/admin/customers/customers.php:763 includes/admin/tools.php:140
1057
  msgid "Recount Stats"
1058
  msgstr ""
1059
 
1060
+ #: includes/admin/customers/customers.php:805
1061
  msgid "This customer's user account is pending verification."
1062
  msgstr ""
1063
 
1064
+ #: includes/admin/customers/customers.php:807
1065
  msgid "Verify account."
1066
  msgstr ""
1067
 
1081
  #: includes/admin/reporting/export/class-batch-export-downloads.php:58
1082
  #: includes/admin/reporting/graphing.php:333
1083
  #: includes/admin/reporting/graphing.php:634
1084
+ #: includes/admin/reporting/reports.php:61
1085
  msgid "Earnings"
1086
  msgstr ""
1087
 
1307
  msgstr ""
1308
 
1309
  #: includes/admin/discounts/class-discount-codes-table.php:125
1310
+ #: includes/admin/payments/class-payments-table.php:248
1311
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:323
1312
  #: includes/admin/reporting/class-sales-logs-list-table.php:281
1313
  msgid "All"
1314
  msgstr ""
1503
  msgstr ""
1504
 
1505
  #: includes/admin/discounts/discount-actions.php:30
1506
+ #: includes/admin/discounts/discount-actions.php:241
1507
  msgid "You do not have permission to create discount codes"
1508
  msgstr ""
1509
 
1510
+ #: includes/admin/discounts/discount-actions.php:120
1511
+ #: includes/admin/discounts/discount-actions.php:216
1512
  msgid "You do not have permission to edit discount codes"
1513
  msgstr ""
1514
 
1515
+ #: includes/admin/discounts/discount-actions.php:187
1516
+ #: includes/admin/discounts/discount-actions.php:212
1517
+ #: includes/admin/discounts/discount-actions.php:237
1518
  msgid "Trying to cheat or something?"
1519
  msgstr ""
1520
 
1521
+ #: includes/admin/discounts/discount-actions.php:191
1522
  msgid "You do not have permission to delete discount codes"
1523
  msgstr ""
1524
 
1674
  #: includes/admin/downloads/dashboard-columns.php:34
1675
  #: includes/admin/downloads/dashboard-columns.php:286
1676
  #: includes/admin/downloads/metabox.php:462
1677
+ #: includes/admin/payments/view-order-details.php:563
1678
  #: includes/admin/reporting/export/class-batch-export-downloads.php:51
1679
  #: templates/shortcode-receipt.php:130
1680
  msgid "Price"
1753
  msgstr ""
1754
 
1755
  #: includes/admin/downloads/metabox.php:484 includes/download-functions.php:523
1756
+ #: includes/gateways/stripe/includes/template-functions.php:406
1757
  msgid "Default"
1758
  msgstr ""
1759
 
2186
  msgstr ""
2187
 
2188
  #: includes/admin/payments/actions.php:25
2189
+ #: includes/admin/payments/actions.php:328
2190
+ #: includes/admin/payments/actions.php:348
2191
+ #: includes/admin/payments/actions.php:377
2192
+ #: includes/admin/payments/actions.php:397 includes/emails/actions.php:53
2193
  msgid "You do not have permission to edit this payment record"
2194
  msgstr ""
2195
 
2232
  msgid "Clear Filter"
2233
  msgstr ""
2234
 
2235
+ #: includes/admin/payments/class-payments-table.php:249
2236
  msgid "Completed"
2237
  msgstr ""
2238
 
2239
+ #: includes/admin/payments/class-payments-table.php:250
2240
  #: includes/payments/functions.php:753
2241
  msgid "Pending"
2242
  msgstr ""
2243
 
2244
+ #: includes/admin/payments/class-payments-table.php:251
2245
  #: includes/payments/functions.php:759
2246
  msgid "Processing"
2247
  msgstr ""
2248
 
2249
+ #: includes/admin/payments/class-payments-table.php:252
2250
  #: includes/payments/functions.php:755
2251
  msgid "Refunded"
2252
  msgstr ""
2253
 
2254
+ #: includes/admin/payments/class-payments-table.php:253
2255
  #: includes/payments/functions.php:758
2256
  msgid "Revoked"
2257
  msgstr ""
2258
 
2259
+ #: includes/admin/payments/class-payments-table.php:254
2260
  #: includes/payments/functions.php:756
2261
  msgid "Failed"
2262
  msgstr ""
2263
 
2264
+ #: includes/admin/payments/class-payments-table.php:255
2265
  #: includes/payments/functions.php:757
2266
  msgid "Abandoned"
2267
  msgstr ""
2268
 
2269
+ #: includes/admin/payments/class-payments-table.php:272
2270
  #: templates/history-purchases.php:21
2271
  msgid "Details"
2272
  msgstr ""
2273
 
2274
+ #: includes/admin/payments/class-payments-table.php:344
2275
  #: includes/admin/payments/payments-history.php:90
2276
  msgid "View Order Details"
2277
  msgstr ""
2278
 
2279
+ #: includes/admin/payments/class-payments-table.php:387
2280
  msgid "Resend Purchase Receipt"
2281
  msgstr ""
2282
 
2283
+ #: includes/admin/payments/class-payments-table.php:395
2284
  msgid "(unknown)"
2285
  msgstr ""
2286
 
2287
+ #: includes/admin/payments/class-payments-table.php:461
2288
  msgid "(customer missing)"
2289
  msgstr ""
2290
 
2291
+ #: includes/admin/payments/class-payments-table.php:475
2292
  msgid "Set To Completed"
2293
  msgstr ""
2294
 
2295
+ #: includes/admin/payments/class-payments-table.php:476
2296
  msgid "Set To Pending"
2297
  msgstr ""
2298
 
2299
+ #: includes/admin/payments/class-payments-table.php:477
2300
  msgid "Set To Processing"
2301
  msgstr ""
2302
 
2303
+ #: includes/admin/payments/class-payments-table.php:478
2304
  msgid "Set To Refunded"
2305
  msgstr ""
2306
 
2307
+ #: includes/admin/payments/class-payments-table.php:479
2308
  msgid "Set To Revoked"
2309
  msgstr ""
2310
 
2311
+ #: includes/admin/payments/class-payments-table.php:480
2312
  msgid "Set To Failed"
2313
  msgstr ""
2314
 
2315
+ #: includes/admin/payments/class-payments-table.php:481
2316
  msgid "Set To Abandoned"
2317
  msgstr ""
2318
 
2319
+ #: includes/admin/payments/class-payments-table.php:482
2320
  msgid "Set To Preapproval"
2321
  msgstr ""
2322
 
2323
+ #: includes/admin/payments/class-payments-table.php:483
2324
  msgid "Set To Cancelled"
2325
  msgstr ""
2326
 
2327
+ #: includes/admin/payments/class-payments-table.php:484
2328
  msgid "Resend Email Receipts"
2329
  msgstr ""
2330
 
2531
  msgstr ""
2532
 
2533
  #: includes/admin/payments/view-order-details.php:175
2534
+ #: includes/admin/payments/view-order-details.php:571
2535
  #: includes/admin/reporting/class-export-payments.php:73
2536
  #: includes/admin/reporting/export/class-batch-export-payments.php:55
2537
  #: includes/admin/tools.php:632 templates/checkout_cart.php:120
2608
  msgstr ""
2609
 
2610
  #: includes/admin/payments/view-order-details.php:308
2611
+ #: includes/admin/reporting/reports.php:40 includes/class-edd-logging.php:72
2612
  msgid "Logs"
2613
  msgstr ""
2614
 
2615
+ #: includes/admin/payments/view-order-details.php:327
2616
  msgid "View file download log for purchase"
2617
  msgstr ""
2618
 
2619
+ #: includes/admin/payments/view-order-details.php:331
2620
  msgid "View customer download log"
2621
  msgstr ""
2622
 
2623
+ #: includes/admin/payments/view-order-details.php:344
2624
  msgid "View all purchases of customer"
2625
  msgstr ""
2626
 
2627
+ #: includes/admin/payments/view-order-details.php:374
2628
  msgid "No download attached to this order"
2629
  msgstr ""
2630
 
2631
+ #: includes/admin/payments/view-order-details.php:475
2632
  msgid "Deleted"
2633
  msgstr ""
2634
 
2635
+ #: includes/admin/payments/view-order-details.php:477
2636
  msgid "%s deleted"
2637
  msgstr ""
2638
 
2639
+ #: includes/admin/payments/view-order-details.php:540
2640
  msgid "Copy Download Link(s)"
2641
  msgstr ""
2642
 
2643
+ #: includes/admin/payments/view-order-details.php:552
2644
  msgid "No %s included with this purchase"
2645
  msgstr ""
2646
 
2647
+ #: includes/admin/payments/view-order-details.php:560
2648
+ #: includes/admin/payments/view-order-details.php:640
2649
  msgid "Add New %s"
2650
  msgstr ""
2651
 
2652
+ #: includes/admin/payments/view-order-details.php:565
2653
  msgid " & Quantity"
2654
  msgstr ""
2655
 
2656
+ #: includes/admin/payments/view-order-details.php:689
2657
  msgid "Assign to another customer"
2658
  msgstr ""
2659
 
2660
+ #: includes/admin/payments/view-order-details.php:691
2661
  msgid "New Customer"
2662
  msgstr ""
2663
 
2664
+ #: includes/admin/payments/view-order-details.php:697
2665
  msgid "Select a customer"
2666
  msgstr ""
2667
 
2668
+ #: includes/admin/payments/view-order-details.php:703
2669
  #: includes/class-edd-html-elements.php:245
2670
  msgid "Type to search all Customers"
2671
  msgstr ""
2672
 
2673
+ #: includes/admin/payments/view-order-details.php:717
2674
  msgid "Click \"Save Payment\" to change the customer"
2675
  msgstr ""
2676
 
2677
+ #: includes/admin/payments/view-order-details.php:737
2678
  msgid "Click \"Save Payment\" to create new customer"
2679
  msgstr ""
2680
 
2681
+ #: includes/admin/payments/view-order-details.php:752
2682
  #: includes/checkout/template.php:347 includes/privacy-functions.php:763
2683
  msgid "Billing Address"
2684
  msgstr ""
2685
 
2686
+ #: includes/admin/payments/view-order-details.php:762
2687
  msgid "Street Address Line 1:"
2688
  msgstr ""
2689
 
2690
+ #: includes/admin/payments/view-order-details.php:766
2691
  msgid "Street Address Line 2:"
2692
  msgstr ""
2693
 
2694
+ #: includes/admin/payments/view-order-details.php:795
2695
  #: includes/admin/settings/register-settings.php:322
2696
  msgid "Select a country"
2697
  msgstr ""
2698
 
2699
+ #: includes/admin/payments/view-order-details.php:798
2700
  msgid "Type to search all Countries"
2701
  msgstr ""
2702
 
2703
+ #: includes/admin/payments/view-order-details.php:817
2704
  #: includes/admin/settings/register-settings.php:333
2705
  msgid "Select a state"
2706
  msgstr ""
2707
 
2708
+ #: includes/admin/payments/view-order-details.php:820
2709
  msgid "Type to search all States/Provinces"
2710
  msgstr ""
2711
 
2712
+ #: includes/admin/payments/view-order-details.php:841
2713
  msgid "Payment Notes"
2714
  msgstr ""
2715
 
2716
+ #: includes/admin/payments/view-order-details.php:856
2717
  msgid "No payment notes"
2718
  msgstr ""
2719
 
2811
  msgstr ""
2812
 
2813
  #: includes/admin/reporting/class-api-requests-logs-list-table.php:87
2814
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:154
2815
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:126
2816
  #: includes/admin/reporting/class-sales-logs-list-table.php:128
2817
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:39
2933
  msgstr ""
2934
 
2935
  #: includes/admin/reporting/class-export-download-history.php:64
2936
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:159
2937
  #: includes/admin/reporting/export/class-batch-export-api-requests.php:41
2938
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:43
2939
  #: includes/admin/reporting/export/class-batch-export-payments.php:63
2948
  msgstr ""
2949
 
2950
  #: includes/admin/reporting/class-export-download-history.php:66
2951
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:158
2952
  #: includes/admin/reporting/export/class-batch-export-file-downloads.php:45
2953
  msgid "File"
2954
  msgstr ""
2971
 
2972
  #: includes/admin/reporting/class-export-payments.php:67
2973
  #: includes/admin/reporting/export/class-batch-export-payments.php:48
2974
+ #: includes/gateways/stripe/includes/template-functions.php:534
2975
  msgid "State"
2976
  msgstr ""
2977
 
2979
  #: includes/admin/reporting/export/class-batch-export-payments.php:49
2980
  #: includes/admin/settings/register-settings.php:2227
2981
  #: includes/admin/tools.php:713
2982
+ #: includes/gateways/stripe/includes/template-functions.php:512
2983
+ #: includes/gateways/stripe/includes/template-functions.php:521
2984
  #: templates/shortcode-profile-editor.php:162
2985
  msgid "Country"
2986
  msgstr ""
2988
  #: includes/admin/reporting/class-export-payments.php:69
2989
  #: includes/admin/reporting/export/class-batch-export-payments.php:50
2990
  #: includes/admin/tools.php:704 includes/checkout/template.php:383
2991
+ #: includes/gateways/stripe/includes/template-functions.php:782
2992
  #: templates/shortcode-profile-editor.php:157
2993
  msgid "Zip / Postal Code"
2994
  msgstr ""
3043
  msgid "You do not have permission to export data."
3044
  msgstr ""
3045
 
3046
+ #: includes/admin/reporting/class-file-downloads-logs-list-table.php:157
3047
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:127
3048
  #: includes/admin/reporting/class-sales-logs-list-table.php:132
3049
  #: includes/admin/reporting/export/class-batch-export-payments.php:39
3093
  msgstr ""
3094
 
3095
  #: includes/admin/reporting/contextual-help.php:45
3096
+ #: includes/admin/reporting/reports.php:38 includes/admin/tools.php:941
3097
  msgid "Export"
3098
  msgstr ""
3099
 
3373
  msgid "Filter"
3374
  msgstr ""
3375
 
3376
+ #: includes/admin/reporting/graphing.php:985
3377
  msgid "Clicking this will clear the reports cache"
3378
  msgstr ""
3379
 
3380
+ #: includes/admin/reporting/graphing.php:985
3381
  msgid "Refresh Reports"
3382
  msgstr ""
3383
 
3399
  msgid "Log Type"
3400
  msgstr ""
3401
 
3402
+ #: includes/admin/reporting/reports.php:62
3403
  msgid "Earnings by Category"
3404
  msgstr ""
3405
 
3406
+ #: includes/admin/reporting/reports.php:64
3407
  msgid "Payment Methods"
3408
  msgstr ""
3409
 
3410
+ #: includes/admin/reporting/reports.php:65
3411
  #: includes/admin/settings/contextual-help.php:80
3412
  #: includes/admin/settings/register-settings.php:1365
3413
  msgid "Taxes"
3414
  msgstr ""
3415
 
3416
+ #: includes/admin/reporting/reports.php:104
3417
  msgid "You do not have permission to access this report"
3418
  msgstr ""
3419
 
3420
+ #: includes/admin/reporting/reports.php:135
3421
  msgid "Report Type"
3422
  msgstr ""
3423
 
3424
+ #: includes/admin/reporting/reports.php:145
3425
  msgid "Show"
3426
  msgstr ""
3427
 
3428
+ #: includes/admin/reporting/reports.php:196
3429
  msgid "Go Back"
3430
  msgstr ""
3431
 
3432
+ #: includes/admin/reporting/reports.php:273
3433
  msgid "Category Sales Mix: "
3434
  msgstr ""
3435
 
3436
+ #: includes/admin/reporting/reports.php:277
3437
  msgid "Category Earnings Mix: "
3438
  msgstr ""
3439
 
3440
+ #: includes/admin/reporting/reports.php:286
3441
  msgid ""
3442
  "All Parent categories include sales and earnings stats from child "
3443
  "categories."
3444
  msgstr ""
3445
 
3446
+ #: includes/admin/reporting/reports.php:289
3447
  msgid "Stats include all sales and earnings for the lifetime of the store."
3448
  msgstr ""
3449
 
3450
+ #: includes/admin/reporting/reports.php:318
3451
  msgid "Tax Report"
3452
  msgstr ""
3453
 
3454
+ #: includes/admin/reporting/reports.php:320
3455
  msgid ""
3456
  "This report shows the total amount collected in sales tax for the given "
3457
  "year."
3458
  msgstr ""
3459
 
3460
+ #: includes/admin/reporting/reports.php:331 includes/admin/tools.php:169
3461
  msgid "Submit"
3462
  msgstr ""
3463
 
3464
+ #: includes/admin/reporting/reports.php:360
3465
  msgid "Export Earnings Report"
3466
  msgstr ""
3467
 
3468
+ #: includes/admin/reporting/reports.php:362
3469
  msgid "Download a CSV giving a detailed look into earnings over time."
3470
  msgstr ""
3471
 
3472
+ #: includes/admin/reporting/reports.php:372
3473
+ #: includes/admin/reporting/reports.php:399
3474
+ #: includes/admin/reporting/reports.php:415
3475
+ #: includes/admin/reporting/reports.php:427
3476
+ #: includes/admin/reporting/reports.php:442
3477
+ #: includes/admin/reporting/reports.php:456
3478
+ #: includes/admin/reporting/reports.php:473
3479
  msgid "Generate CSV"
3480
  msgstr ""
3481
 
3482
+ #: includes/admin/reporting/reports.php:380
3483
  msgid "Export Payment History"
3484
  msgstr ""
3485
 
3486
+ #: includes/admin/reporting/reports.php:382
3487
  msgid "Download a CSV of all payments recorded."
3488
  msgstr ""
3489
 
3490
+ #: includes/admin/reporting/reports.php:385
3491
+ #: includes/admin/reporting/reports.php:438
3492
+ #: includes/admin/reporting/reports.php:452
3493
+ #: includes/admin/reporting/reports.php:468
3494
  msgid "Choose start date"
3495
  msgstr ""
3496
 
3497
+ #: includes/admin/reporting/reports.php:386
3498
+ #: includes/admin/reporting/reports.php:439
3499
+ #: includes/admin/reporting/reports.php:453
3500
+ #: includes/admin/reporting/reports.php:469
3501
  msgid "Choose end date"
3502
  msgstr ""
3503
 
3504
+ #: includes/admin/reporting/reports.php:388
3505
  msgid "All Statuses"
3506
  msgstr ""
3507
 
3508
+ #: includes/admin/reporting/reports.php:408
3509
  msgid "Export Customers in CSV"
3510
  msgstr ""
3511
 
3512
+ #: includes/admin/reporting/reports.php:410
3513
  msgid "Download a CSV of customers."
3514
  msgstr ""
3515
 
3516
+ #: includes/admin/reporting/reports.php:421
3517
  msgid "Export Download Products in CSV"
3518
  msgstr ""
3519
 
3520
+ #: includes/admin/reporting/reports.php:423
3521
  msgid "Download a CSV of download products."
3522
  msgstr ""
3523
 
3524
+ #: includes/admin/reporting/reports.php:433
3525
  msgid "Export Download History in CSV"
3526
  msgstr ""
3527
 
3528
+ #: includes/admin/reporting/reports.php:435
3529
  msgid ""
3530
  "Download a CSV of file downloads. To download a CSV for all file downloads, "
3531
  "leave \"Choose a Download\" as it is."
3532
  msgstr ""
3533
 
3534
+ #: includes/admin/reporting/reports.php:448
3535
  msgid "Export API Requests in CSV"
3536
  msgstr ""
3537
 
3538
+ #: includes/admin/reporting/reports.php:450
3539
  msgid "Download a CSV of API request logs."
3540
  msgstr ""
3541
 
3542
+ #: includes/admin/reporting/reports.php:462
3543
  msgid "Export Sales"
3544
  msgstr ""
3545
 
3546
+ #: includes/admin/reporting/reports.php:464
3547
  msgid "Download a CSV of all sales."
3548
  msgstr ""
3549
 
4976
  msgid "System Info"
4977
  msgstr ""
4978
 
4979
+ #: includes/admin/tools.php:78 includes/admin/tools.php:1080
4980
  msgid "Debug Log"
4981
  msgstr ""
4982
 
5200
  msgstr ""
5201
 
5202
  #: includes/admin/tools.php:668
5203
+ #: includes/gateways/stripe/includes/template-functions.php:459
5204
  msgid "Address Line 1"
5205
  msgstr ""
5206
 
5207
  #: includes/admin/tools.php:677
5208
+ #: includes/gateways/stripe/includes/template-functions.php:473
5209
  msgid "Address Line 2"
5210
  msgstr ""
5211
 
5332
  msgid "Please upload a file to import"
5333
  msgstr ""
5334
 
5335
+ #: includes/admin/tools.php:1083
5336
  msgid ""
5337
  "Use this tool to help debug Easy Digital Downloads functionality. "
5338
  "Developers may use the <a "
5341
  "debug data."
5342
  msgstr ""
5343
 
5344
+ #: includes/admin/tools.php:1088
5345
  msgid "Download Debug Log File"
5346
  msgstr ""
5347
 
5348
+ #: includes/admin/tools.php:1089
5349
  msgid "Clear Log"
5350
  msgstr ""
5351
 
5352
+ #: includes/admin/tools.php:1090
5353
  msgid "Copy Entire Log"
5354
  msgstr ""
5355
 
5356
+ #: includes/admin/tools.php:1095
5357
  msgid "Log file"
5358
  msgstr ""
5359
 
5360
+ #: includes/admin/tracking.php:262
5361
  msgid ""
5362
  "Allow Easy Digital Downloads to track plugin usage? Opt-in to tracking and "
5363
  "our newsletter and immediately be emailed a discount to the EDD shop, valid "
5365
  "sensitive data is tracked."
5366
  msgstr ""
5367
 
5368
+ #: includes/admin/tracking.php:263
5369
  msgid "Allow"
5370
  msgstr ""
5371
 
5372
+ #: includes/admin/tracking.php:264
5373
  msgid "Do not allow"
5374
  msgstr ""
5375
 
5459
 
5460
  #: includes/admin/upgrades/upgrade-functions.php:219
5461
  #: includes/admin/upgrades/upgrade-functions.php:535
5462
+ #: includes/admin/upgrades/upgrade-functions.php:619
5463
+ #: includes/admin/upgrades/upgrade-functions.php:732
5464
+ #: includes/admin/upgrades/upgrade-functions.php:832
5465
+ #: includes/admin/upgrades/upgrade-functions.php:909
5466
+ #: includes/admin/upgrades/upgrade-functions.php:1040
5467
+ #: includes/admin/upgrades/upgrade-functions.php:1128
5468
  #: includes/gateways/stripe/includes/admin/upgrade-functions.php:80
5469
  msgid "You do not have permission to do shop upgrades"
5470
  msgstr ""
5477
  msgid "Your transaction failed, please try again or contact site support."
5478
  msgstr ""
5479
 
5480
+ #: includes/admin/upgrades/upgrade-functions.php:1206
5481
  msgid ""
5482
  "<strong>Migration complete:</strong> You have already completed the update "
5483
  "to the file download logs."
5484
  msgstr ""
5485
 
5486
+ #: includes/admin/upgrades/upgrade-functions.php:1214
5487
  msgid ""
5488
  "<strong>Database Upgrade Complete:</strong> All database upgrades have been "
5489
  "completed."
5490
  msgstr ""
5491
 
5492
+ #: includes/admin/upgrades/upgrade-functions.php:1216
5493
  msgid "You may now leave this page."
5494
  msgstr ""
5495
 
5496
+ #: includes/admin/upgrades/upgrade-functions.php:1222
5497
  msgid ""
5498
  "<strong>Important:</strong> Please leave this screen open and do not "
5499
  "navigate away until the process completes."
5500
  msgstr ""
5501
 
5502
+ #: includes/admin/upgrades/upgrade-functions.php:1265
5503
  msgid "Update file download logs"
5504
  msgstr ""
5505
 
5506
+ #: includes/admin/upgrades/upgrade-functions.php:1270
5507
  msgid ""
5508
  "This will update the file download logs to remove some <abbr "
5509
  "title=\"Personally Identifiable Information\">PII</abbr> and make file "
5510
  "download counts more accurate."
5511
  msgstr ""
5512
 
5513
+ #: includes/admin/upgrades/upgrade-functions.php:1279
5514
+ #: includes/admin/upgrades/upgrade-functions.php:1282
5515
  msgid "Update File Download Logs"
5516
  msgstr ""
5517
 
5518
+ #: includes/admin/upgrades/upgrade-functions.php:1283
5519
  msgid "File download logs have already been updated."
5520
  msgstr ""
5521
 
5555
  msgid "Loading notifications..."
5556
  msgstr ""
5557
 
5558
+ #: includes/ajax-functions.php:143 includes/cart/actions.php:115
5559
  msgid ""
5560
  "Missing nonce when removing an item from the cart. Please read the "
5561
  "following for more information: "
5658
  msgid "No download logs found!"
5659
  msgstr ""
5660
 
5661
+ #: includes/api/class-edd-api.php:1945 includes/user-functions.php:1075
5662
  msgid "Easy Digital Downloads API Keys"
5663
  msgstr ""
5664
 
5665
+ #: includes/api/class-edd-api.php:1954 includes/user-functions.php:1080
5666
  msgid "Generate API Key"
5667
  msgstr ""
5668
 
5669
+ #: includes/api/class-edd-api.php:1956 includes/user-functions.php:1082
5670
  msgid "Public key:"
5671
  msgstr ""
5672
 
5673
+ #: includes/api/class-edd-api.php:1957 includes/user-functions.php:1083
5674
  msgid "Secret key:"
5675
  msgstr ""
5676
 
5677
+ #: includes/api/class-edd-api.php:1958 includes/user-functions.php:1084
5678
  msgid "Token:"
5679
  msgstr ""
5680
 
5681
+ #: includes/api/class-edd-api.php:1960 includes/user-functions.php:1086
5682
  msgid "Revoke API Keys"
5683
  msgstr ""
5684
 
5706
  msgid "excludes %s tax"
5707
  msgstr ""
5708
 
5709
+ #: includes/cart/class-edd-cart.php:1397 includes/cart/class-edd-cart.php:1460
5710
  #: templates/shortcode-profile-editor.php:22
5711
  msgid "Success"
5712
  msgstr ""
5715
  msgid "Cart saved successfully. You can restore your cart using this URL:"
5716
  msgstr ""
5717
 
5718
+ #: includes/cart/class-edd-cart.php:1434 includes/cart/class-edd-cart.php:1448
5719
  msgid "Cart restoration failed. Invalid token."
5720
  msgstr ""
5721
 
5722
+ #: includes/cart/class-edd-cart.php:1442 includes/cart/class-edd-cart.php:1451
5723
  msgid "The cart cannot be restored. Invalid token."
5724
  msgstr ""
5725
 
5726
+ #: includes/cart/class-edd-cart.php:1460
5727
  msgid "Cart restored successfully."
5728
  msgstr ""
5729
 
5740
  msgid "Save Cart"
5741
  msgstr ""
5742
 
5743
+ #: includes/cart/template.php:201
5744
  msgid "Restore Previous Cart."
5745
  msgstr ""
5746
 
5747
+ #: includes/cart/template.php:219
5748
  msgid "Update Cart"
5749
  msgstr ""
5750
 
5751
+ #: includes/cart/template.php:276
5752
  msgid "You have successfully added %s to your shopping cart."
5753
  msgstr ""
5754
 
5755
+ #: includes/cart/template.php:277
5756
  msgid "Checkout."
5757
  msgstr ""
5758
 
5827
  msgstr ""
5828
 
5829
  #: includes/checkout/template.php:270
5830
+ #: includes/gateways/stripe/includes/template-functions.php:556
5831
  msgid "Expiration (MM/YY)"
5832
  msgstr ""
5833
 
5836
  msgstr ""
5837
 
5838
  #: includes/checkout/template.php:343
5839
+ #: includes/gateways/stripe/includes/template-functions.php:451
5840
+ #: includes/gateways/stripe/includes/template-functions.php:749
5841
  msgid "Billing Details"
5842
  msgstr ""
5843
 
5870
  msgstr ""
5871
 
5872
  #: includes/checkout/template.php:377
5873
+ #: includes/gateways/stripe/includes/template-functions.php:776
5874
  msgid "Billing Zip / Postal Code"
5875
  msgstr ""
5876
 
5877
  #: includes/checkout/template.php:382
5878
+ #: includes/gateways/stripe/includes/template-functions.php:781
5879
  msgid "The zip or postal code for your billing address."
5880
  msgstr ""
5881
 
5882
  #: includes/checkout/template.php:387
5883
+ #: includes/gateways/stripe/includes/template-functions.php:752
5884
  msgid "Billing Country"
5885
  msgstr ""
5886
 
5887
  #: includes/checkout/template.php:392
5888
+ #: includes/gateways/stripe/includes/template-functions.php:757
5889
  msgid "The country for your billing address."
5890
  msgstr ""
5891
 
5979
  msgid "Enter a coupon code if you have one."
5980
  msgstr ""
5981
 
5982
+ #: includes/checkout/template.php:754 includes/process-purchase.php:392
5983
  #: includes/scripts.php:67
5984
  msgid "Enter discount"
5985
  msgstr ""
6349
  msgstr ""
6350
 
6351
  #: includes/class-edd-discount.php:789
6352
+ #: includes/gateways/stripe/includes/template-functions.php:328
6353
  msgid "Expired"
6354
  msgstr ""
6355
 
7076
  msgid "Receipt"
7077
  msgstr ""
7078
 
7079
+ #: includes/gateways/actions.php:38
7080
  #: includes/gateways/stripe/includes/payment-methods/payment-request/checkout.php:321
7081
  msgid ""
7082
  "Missing nonce when loading the gateway fields. Please read the following "
7085
  "ajax-requests-in-easy-digital-downloads-2-9-4"
7086
  msgstr ""
7087
 
7088
+ #: includes/gateways/actions.php:69
7089
  msgid "You must enable a payment gateway to use Easy Digital Downloads"
7090
  msgstr ""
7091
 
7167
  "href=\"%s\">Integration Settings</a>"
7168
  msgstr ""
7169
 
7170
+ #: includes/gateways/amazon-payments.php:712
7171
  msgid "Currently logged into Amazon as"
7172
  msgstr ""
7173
 
7174
+ #: includes/gateways/amazon-payments.php:713
7175
  msgid "Logout"
7176
  msgstr ""
7177
 
7178
+ #: includes/gateways/amazon-payments.php:868
7179
+ #: includes/gateways/amazon-payments.php:882
7180
  msgid "Missing Reference ID, please try again"
7181
  msgstr ""
7182
 
7183
+ #: includes/gateways/amazon-payments.php:918
7184
  msgid ""
7185
  "Your payment could not be authorized, please try a different payment "
7186
  "method. Reason: %s"
7187
  msgstr ""
7188
 
7189
+ #: includes/gateways/amazon-payments.php:965
7190
  msgid "There was an issue processing your payment. Amazon error: %s"
7191
  msgstr ""
7192
 
7193
+ #: includes/gateways/amazon-payments.php:1095
7194
  msgid "Invalid Amazon seller ID"
7195
  msgstr ""
7196
 
7197
+ #: includes/gateways/amazon-payments.php:1095
7198
+ #: includes/gateways/amazon-payments.php:1149
7199
  #: includes/gateways/paypal-standard.php:475
7200
  #: includes/gateways/paypal-standard.php:482
7201
  #: includes/gateways/paypal-standard.php:574
7205
  msgid "IPN Error"
7206
  msgstr ""
7207
 
7208
+ #: includes/gateways/amazon-payments.php:1119
7209
  msgid "Capture declined in Amazon"
7210
  msgstr ""
7211
 
7212
+ #: includes/gateways/amazon-payments.php:1137
7213
+ #: includes/gateways/amazon-payments.php:1223
7214
  msgid "Refund completed in Amazon. Refund ID: %s"
7215
  msgstr ""
7216
 
7217
+ #: includes/gateways/amazon-payments.php:1216
7218
  msgid "Refund declined in Amazon. Refund ID: %s"
7219
  msgstr ""
7220
 
7221
+ #: includes/gateways/amazon-payments.php:1229
7222
  msgid "Refund initiated in Amazon. Reference ID: %s"
7223
  msgstr ""
7224
 
7225
+ #: includes/gateways/amazon-payments.php:1238
7226
  msgid "Refund request failed in Amazon."
7227
  msgstr ""
7228
 
8488
  msgstr ""
8489
 
8490
  #: includes/gateways/stripe/includes/compat.php:116
8491
+ #: includes/process-purchase.php:553 includes/process-purchase.php:872
8492
  msgid "The user information is invalid"
8493
  msgstr ""
8494
 
8718
 
8719
  #: includes/gateways/stripe/includes/payment-methods/buy-now/checkout.php:81
8720
  #: includes/gateways/stripe/includes/payment-methods/payment-request/checkout.php:274
8721
+ #: includes/process-purchase.php:465
8722
  msgid "Please enter a valid email address"
8723
  msgstr ""
8724
 
8834
  "or contacts support."
8835
  msgstr ""
8836
 
8837
+ #: includes/gateways/stripe/includes/template-functions.php:303
8838
+ #: includes/gateways/stripe/includes/template-functions.php:392
8839
  #. translators: %1$s Card type. %2$s Card last 4.
8840
  msgid "%1$s •••• %2$s"
8841
  msgstr ""
8842
 
8843
+ #: includes/gateways/stripe/includes/template-functions.php:340
8844
+ #: includes/gateways/stripe/includes/template-functions.php:610
8845
  msgid "Add New Card"
8846
  msgstr ""
8847
 
8848
+ #: includes/gateways/stripe/includes/template-functions.php:369
8849
  msgid "Payment method management is currently unavailable."
8850
  msgstr ""
8851
 
8852
+ #: includes/gateways/stripe/includes/template-functions.php:382
8853
  msgid "Manage Payment Methods"
8854
  msgstr ""
8855
 
8856
+ #: includes/gateways/stripe/includes/template-functions.php:411
8857
  msgid "Expires"
8858
  msgstr ""
8859
 
8860
+ #: includes/gateways/stripe/includes/template-functions.php:427
8861
  msgid "Update"
8862
  msgstr ""
8863
 
8864
+ #: includes/gateways/stripe/includes/template-functions.php:433
8865
  msgid "Set as Default"
8866
  msgstr ""
8867
 
8868
+ #: includes/gateways/stripe/includes/template-functions.php:501
8869
  msgid "ZIP Code"
8870
  msgstr ""
8871
 
8872
+ #: includes/gateways/stripe/includes/template-functions.php:594
8873
+ #: includes/gateways/stripe/includes/template-functions.php:635
8874
  msgid "Please Wait…"
8875
  msgstr ""
8876
 
8877
+ #: includes/gateways/stripe/includes/template-functions.php:595
8878
+ #: includes/gateways/stripe/includes/template-functions.php:596
8879
  msgid "Update Card"
8880
  msgstr ""
8881
 
8882
+ #: includes/gateways/stripe/includes/template-functions.php:612
8883
  msgid "Credit Card Details"
8884
  msgstr ""
8885
 
8886
+ #: includes/gateways/stripe/includes/template-functions.php:636
8887
+ #: includes/gateways/stripe/includes/template-functions.php:637
8888
  msgid "Add new card"
8889
  msgstr ""
8890
 
8891
+ #: includes/gateways/stripe/includes/template-functions.php:848
8892
+ #: includes/process-purchase.php:479
8893
  msgid "Please enter your zip / postal code"
8894
  msgstr ""
8895
 
8896
+ #: includes/gateways/stripe/includes/template-functions.php:853
8897
+ #: includes/process-purchase.php:487
8898
  msgid "Please select your billing country"
8899
  msgstr ""
8900
 
8952
  msgstr ""
8953
 
8954
  #: includes/login-register.php:248 includes/login-register.php:256
8955
+ #: includes/process-purchase.php:612
8956
  msgid "Invalid username"
8957
  msgstr ""
8958
 
8959
+ #: includes/login-register.php:252 includes/process-purchase.php:605
8960
  msgid "Username already taken"
8961
  msgstr ""
8962
 
8964
  msgid "Email address already taken"
8965
  msgstr ""
8966
 
8967
+ #: includes/login-register.php:264 includes/process-purchase.php:548
8968
+ #: includes/process-purchase.php:628 includes/process-purchase.php:737
8969
  msgid "Invalid email"
8970
  msgstr ""
8971
 
9134
  msgid "Status changed from %s to %s"
9135
  msgstr ""
9136
 
9137
+ #: includes/payments/actions.php:451 includes/payments/actions.php:514
9138
  msgid "Error resuming payment."
9139
  msgstr ""
9140
 
9141
+ #: includes/payments/actions.php:456
9142
  msgid "Payment recovery triggered URL"
9143
  msgstr ""
9144
 
9145
+ #: includes/payments/actions.php:536 includes/payments/actions.php:570
9146
  msgid "To complete this payment, please login to your account."
9147
  msgstr ""
9148
 
9149
+ #: includes/payments/actions.php:538
9150
  msgid "Lost Password"
9151
  msgstr ""
9152
 
9153
+ #: includes/payments/actions.php:539 templates/shortcode-login.php:33
9154
  msgid "Lost Password?"
9155
  msgstr ""
9156
 
9715
  msgid "Error processing login. Nonce failed."
9716
  msgstr ""
9717
 
9718
+ #: includes/process-purchase.php:359
9719
  msgid "The selected payment gateway is not enabled"
9720
  msgstr ""
9721
 
9722
+ #: includes/process-purchase.php:419
9723
  msgid "One or more of the discounts you entered is invalid"
9724
  msgstr ""
9725
 
9726
+ #: includes/process-purchase.php:436
9727
  msgid "You must agree to the terms of use"
9728
  msgstr ""
9729
 
9730
+ #: includes/process-purchase.php:450
9731
  msgid "You must agree to the privacy policy"
9732
  msgstr ""
9733
 
9734
+ #: includes/process-purchase.php:469
9735
  msgid "Please enter your first name"
9736
  msgstr ""
9737
 
9738
+ #: includes/process-purchase.php:483
9739
  msgid "Please enter your billing city"
9740
  msgstr ""
9741
 
9742
+ #: includes/process-purchase.php:491
9743
  msgid "Please enter billing state / province"
9744
  msgstr ""
9745
 
9746
+ #: includes/process-purchase.php:610
9747
  msgid "Invalid username. Only lowercase letters (a-z) and numbers are allowed"
9748
  msgstr ""
9749
 
9750
+ #: includes/process-purchase.php:620
9751
  msgid "You must register or login to complete your purchase"
9752
  msgstr ""
9753
 
9754
+ #: includes/process-purchase.php:633
9755
  msgid ""
9756
  "Email already used. Login or use a different email to complete your "
9757
  "purchase."
9758
  msgstr ""
9759
 
9760
+ #: includes/process-purchase.php:641 includes/process-purchase.php:745
9761
  msgid "Enter an email"
9762
  msgstr ""
9763
 
9764
+ #: includes/process-purchase.php:649
9765
  msgid "Passwords don't match"
9766
  msgstr ""
9767
 
9768
+ #: includes/process-purchase.php:658
9769
  msgid "Enter a password"
9770
  msgstr ""
9771
 
9772
+ #: includes/process-purchase.php:661
9773
  msgid "Enter the password confirmation"
9774
  msgstr ""
9775
 
9776
+ #: includes/process-purchase.php:687
9777
  msgid "You must log in or register to complete your purchase"
9778
  msgstr ""
9779
 
9780
+ #: includes/process-purchase.php:726
9781
  msgid "You must be logged into an account to purchase"
9782
  msgstr ""
9783
 
9784
+ #: includes/process-purchase.php:954
9785
  msgid "The zip / postal code you entered for your billing address is invalid"
9786
  msgstr ""
9787
 
9788
+ #: includes/process-purchase.php:1203
9789
  msgid "An internal error has occurred, please try again or contact support."
9790
  msgstr ""
9791
 
9792
+ #: includes/process-purchase.php:1239
9793
  msgid "There was an error completing your purchase. Please try again."
9794
  msgstr ""
9795
 
10105
 
10106
  #: includes/user-functions.php:766
10107
  msgid ""
10108
+ "Hello %1$s,\n"
10109
  "\n"
10110
+ "\t\tYour account with %2$s needs to be verified before you can access your "
10111
+ "purchase history. <a href=\"%3$s\">Click here</a> to verify your account.\n"
10112
  "\n"
10113
+ "\t\tLink missing? Visit the following URL: %3$s"
10114
  msgstr ""
10115
 
10116
+ #: includes/user-functions.php:894
10117
  msgid ""
10118
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
10119
  "here</a> to request a new verification URL."
10120
  msgstr ""
10121
 
10122
+ #: includes/user-functions.php:927
10123
  msgid "You must be logged in to verify your account."
10124
  msgstr ""
10125
 
10126
+ #: includes/user-functions.php:927 includes/user-functions.php:931
10127
  msgid "Notice"
10128
  msgstr ""
10129
 
10130
+ #: includes/user-functions.php:931
10131
  msgid "Your account has already been verified."
10132
  msgstr ""
10133
 
10134
+ #: includes/user-functions.php:976
10135
  msgid "Invalid verification token provided."
10136
  msgstr ""
10137
 
10138
+ #: includes/user-functions.php:1098
10139
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
10140
  msgstr ""
10141
 
10142
+ #: includes/user-functions.php:1105
10143
  msgid "Add to iOS App"
10144
  msgstr ""
10145
 
10422
  msgid "Customer %s"
10423
  msgstr ""
10424
 
10425
+ #: includes/admin/payments/view-order-details.php:409
10426
  msgctxt "payment details purchased item title - full screen"
10427
  msgid "%s Purchased"
10428
  msgstr ""
10429
 
10430
+ #: includes/admin/payments/view-order-details.php:414
10431
  msgctxt "payment details purchased item price - full screen"
10432
  msgid "Price"
10433
  msgstr ""
10434
 
10435
+ #: includes/admin/payments/view-order-details.php:416
10436
  msgctxt "payment details purchased item quantity - full screen"
10437
  msgid " & Quantity"
10438
  msgstr ""
10439
 
10440
+ #: includes/admin/payments/view-order-details.php:423
10441
  msgctxt "payment details purchased item tax - full screen"
10442
  msgid "Tax"
10443
  msgstr ""
10444
 
10445
+ #: includes/admin/payments/view-order-details.php:428
10446
  msgctxt "payment details purchased item total - full screen"
10447
  msgid "%s Total"
10448
  msgstr ""
10449
 
10450
+ #: includes/admin/payments/view-order-details.php:503
10451
  msgctxt "payment details purchased item price - mobile"
10452
  msgid "Price"
10453
  msgstr ""
10454
 
10455
+ #: includes/admin/payments/view-order-details.php:505
10456
  msgctxt "payment details purchased item quantity - mobile"
10457
  msgid " & Quantity"
10458
  msgstr ""
10459
 
10460
+ #: includes/admin/payments/view-order-details.php:520
10461
  msgctxt "payment details purchased item tax - mobile"
10462
  msgid "Tax"
10463
  msgstr ""
10464
 
10465
+ #: includes/admin/payments/view-order-details.php:529
10466
  msgctxt "payment details purchased item total - mobile"
10467
  msgid "%s Total"
10468
  msgstr ""
10469
 
10470
+ #: includes/admin/payments/view-order-details.php:583
10471
  msgctxt "payment details select item to add - mobile"
10472
  msgid "Select New %s To Add"
10473
  msgstr ""
10474
 
10475
+ #: includes/admin/payments/view-order-details.php:595
10476
  msgctxt "payment details add item price - mobile"
10477
  msgid "Price"
10478
  msgstr ""
10479
 
10480
+ #: includes/admin/payments/view-order-details.php:597
10481
  msgctxt "payment details add item quantity - mobile"
10482
  msgid " & Quantity"
10483
  msgstr ""
10484
 
10485
+ #: includes/admin/payments/view-order-details.php:621
10486
  msgctxt "payment details add item tax - mobile"
10487
  msgid "Tax"
10488
  msgstr ""
10489
 
10490
+ #: includes/admin/payments/view-order-details.php:773
10491
  msgctxt "Address City"
10492
  msgid "City:"
10493
  msgstr ""
10494
 
10495
+ #: includes/admin/payments/view-order-details.php:778
10496
  msgctxt "Zip / Postal code of address"
10497
  msgid "Zip / Postal Code:"
10498
  msgstr ""
10499
 
10500
+ #: includes/admin/payments/view-order-details.php:785
10501
  msgctxt "Address country"
10502
  msgid "Country:"
10503
  msgstr ""
10504
 
10505
+ #: includes/admin/payments/view-order-details.php:805
10506
  msgctxt "State / province of address"
10507
  msgid "State / Province:"
10508
  msgstr ""
10509
 
10510
+ #: includes/admin/reporting/reports.php:366
10511
  msgctxt "Date one to date two"
10512
  msgid "to"
10513
  msgstr ""
readme.txt CHANGED
@@ -5,9 +5,9 @@ Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: ecommerce, e-commerce, sell, digital store, stripe
7
  Requires at least: 4.4
8
- Tested up to: 5.9.2
9
  Requires PHP: 5.4
10
- Stable Tag: 2.11.6
11
  License: GNU Version 2 or Any Later Version
12
 
13
  Sell your digital products with the ecommerce plugin written for digital creators, by digital creators.
@@ -145,7 +145,7 @@ Easy Digital Downloads is the perfect digital e-Commerce alternative to Etsy, Gu
145
 
146
  You can use Easy Digital Downloads to sell your digital products with less fees than Gumroad or Etsy.
147
 
148
- If Easy Digital Downloads still doesn't quite fit your needs, take a look at some of our other projects.
149
 
150
  - [WP Simple Pay](https://wpsimplepay.com/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=something-else&utm_term=description) – A lightweight Stripe payments plugin
151
  - [AffiliateWP](https://affiliatewp.com/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=something-else&utm_term=description) – A full-featured affiliate marketing solution
@@ -244,6 +244,10 @@ Yes, through the use of our commercial addon called [Recurring Payments](https:/
244
 
245
  == Changelog ==
246
 
 
 
 
 
247
  = 2.11.6, March 21, 2022 =
248
  * Fix: Improved reliablity of PayPal Commerce modal while on checkout page.
249
  * Fix: PayPal Standard could throw an undefined variable notice when listening to the IPN.
@@ -344,4 +348,76 @@ Yes, through the use of our commercial addon called [Recurring Payments](https:/
344
  * Fix: The edd_items_in_cart cookie wasn't setting the correct attributes on sites with SSLs.
345
  * Fix: Some bundled images hadn't been optimized.
346
  * Fix: The discounts API endpoint could not filter a discount by ID.
347
- * Fix: When making an EDD Wallet deposit, the cart HTML would be removed when taxes were enabled.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: ecommerce, e-commerce, sell, digital store, stripe
7
  Requires at least: 4.4
8
+ Tested up to: 6.0
9
  Requires PHP: 5.4
10
+ Stable Tag: 2.11.7
11
  License: GNU Version 2 or Any Later Version
12
 
13
  Sell your digital products with the ecommerce plugin written for digital creators, by digital creators.
145
 
146
  You can use Easy Digital Downloads to sell your digital products with less fees than Gumroad or Etsy.
147
 
148
+ If Easy Digital Downloads doesn't quite fit your needs, take a look at some of our other projects.
149
 
150
  - [WP Simple Pay](https://wpsimplepay.com/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=something-else&utm_term=description) – A lightweight Stripe payments plugin
151
  - [AffiliateWP](https://affiliatewp.com/?utm_medium=readme&utm_source=wporg&utm_campaign=edd-plugin&utm_content=something-else&utm_term=description) – A full-featured affiliate marketing solution
244
 
245
  == Changelog ==
246
 
247
+ = 2.11.7, June 29, 2022 =
248
+ * Fix: Some settings for custom integrations were not showing settings screens, when no registered EDD settings were found in the section.
249
+ * Fix: Improved sanitization when generating and using URLs.
250
+
251
  = 2.11.6, March 21, 2022 =
252
  * Fix: Improved reliablity of PayPal Commerce modal while on checkout page.
253
  * Fix: PayPal Standard could throw an undefined variable notice when listening to the IPN.
348
  * Fix: The edd_items_in_cart cookie wasn't setting the correct attributes on sites with SSLs.
349
  * Fix: Some bundled images hadn't been optimized.
350
  * Fix: The discounts API endpoint could not filter a discount by ID.
351
+ * Fix: When making an EDD Wallet deposit, the cart HTML would be removed when taxes were enabled.
352
+
353
+ = 2.10.6, June 22, 2021 =
354
+ * New: Added license upgrade notices to EDD admin pages.
355
+ * Improvement: The discount API endpoint now includes `excluded_products`.
356
+ * Improvement: The Hummingbird cache plugin is now detected in `edd_is_caching_plugin_active()`.
357
+ * Fix: Currency symbol was prefixed with minus sign in PHP 8 on some interfaces.
358
+ * Fix: Prevent multi purchase mode from reporting as enabled if a product does not have variable pricing turned on.
359
+ * Fix: Deprecation notices in PHP 8.
360
+ * Improvement: Stripe - When using the filter to adjust Stripe Element styles, we now merge those styles with the default generated ones.
361
+ * Improvement: Stripe - The `edds_is_zero_decimal_currency()` function now accepts an optional `$currency` parameter, so you can check any currency instead of just the shop's selected currency.
362
+ * Fix: Stripe - Fatal error when attempting to perform old database upgrades.
363
+ * Fix: Stripe - Undefined index notice with Stripe Connect.
364
+
365
+ = 2.10.5, May 20, 2021 =
366
+ * Fix: Unexpected checkout fields may become required when they weren't before, after a discount code is applied.
367
+ * Fix: Deprecation notices in PHP 8.
368
+ * New: Stripe - Added UGX to zero decimal currency list.
369
+ * Improvement: Stripe - The Express Checkout gateway option is now completely hidden until eligibility is confirmed, whereas before it was shown and then hidden if determined to be ineligible. This should remove the sudden "flash" of the gateway option disappearing.
370
+ * Improvement: Stripe - Express Checkout settings are now disabled if taxes are enabled for the store.
371
+ * Fix: Stripe - The "Buy Now" modal visible on the page if Buy Now is enabled but the Stripe gateway isn't active.
372
+ * Fix: Stripe - Incorrect get_current_user() function usage.
373
+ * Fix: Stripe - Express Checkout not using custom price (from the Custom Prices add-on).
374
+ * Fix: Stripe - Undefined variable $purchase_data when making purchase that only contains fees.
375
+ * Dev: Stripe - Update refund logic to use new refunds API in EDD 3.0.
376
+ * Dev: Stripe - Remove composer/installer version lock.
377
+
378
+ = 2.10.4, May 4, 2021 =
379
+ * Security Fix: Reflected XSS.
380
+
381
+ = 2.10.3, April 14, 2021 =
382
+ * Security Fix: Fix nonce logic when disconnecting from Stripe Connect.
383
+ * Fix: Not enough padding on file upload field.
384
+
385
+ = 2.10.2, April 5, 2021 =
386
+ * Fix: Stripe - Some Stripe errors were not localized.
387
+ * Fix: Stripe - The pre-approval payment status was being registered when it was not supported.
388
+ * Fix: Stripe - Use of the array_key_first function was only available in PHP 7.3+.
389
+ * Fix: Registration form was not validating all fields.
390
+ * Fix: Batch Download importer was using GLOB_BRACE which is not available on all containerized platforms.
391
+ * Tweak: Re-Organized the gateway list in settings.
392
+ * Tweak: Adjust SendWP setting description.
393
+ * Tweak: Removed Jilt callout in Advanced Email settings.
394
+ * New: Inform store owners of Recapture for abandoned cart recovery.
395
+ * New: Add link to Termageddon for Terms of Agreement and Privacy Policy fields within Easy Digital Downloads settings.
396
+
397
+ = 2.10.1, March 9, 2021 =
398
+ * Fix: Removed incorrect inclusion of license key field for the Stripe integration when the Stripe Pro Payment Gateway extension is not active.
399
+
400
+ = 2.10, March 9, 2021 =
401
+ * New: Accept credit cards, Apple Pay, Google Pay, and Microsoft Pay with the included Stripe Standard payment gateway. Read more about this feature here: https://easydigitaldownloads.com/edd-stripe-integration
402
+ * New: Updated bundled add-on updater class to the latest version (1.8.0).
403
+ * New: Added a notice for users on older PHP versions about upcoming EOL for PHP 5.3, 5.4, and 5.5 support.
404
+ * Fix: The select HTML helper improperly assumed the selected value was an array.
405
+ * Fix: There was a memory leak when calling get_password_reset_key() caused by EDD's customers database class.
406
+ * Fix: When adding items to the cart via AJAX, the presence of the download_id value was assumed, but not verified.
407
+ * Fix: Imported CSV files were not being properly deleted after the import was completed.
408
+ * Fix: The Colorbox JavaScript resources are no longer needed, but were still being enqueued.
409
+ * Fix: Client-side validation of the discount field could cause unexpected issues with the checkout when applying a discount.
410
+ * Fix: The discount amount was incorrect in the sales API endpoint when it was applied to a variably priced product.
411
+ * Fix: When querying the customers API endpoint, it was possible for an undefined variable notice to be logged.
412
+ * Fix: The password fields on the profile editor had incorrect attributes.
413
+ * Fix: After a failed login, the reset password link always linked to the checkout page.
414
+ * Fix: PayPal Standard: Negative fees were being applied twice.
415
+ * Fix: Account for an undefined index of edd-cart-downloads.
416
+ * Fix: The payment icons on checkout were missing alt tags.
417
+ * Fix: The login process was not using wp_safe_redirect.
418
+ * Fix: It was possible to save a non-numeric value for a discount.
419
+ * Fix: The modify_cart_item() function did not allow for decreasing of the tax rate on an item.
420
+ * Fix: Custom add to cart URLs with a malformed download_id value caused an undefined index notice.
421
+ * Fix: When no customer exists for a query, the total_spent returns an undefined index notice.
422
+ * Dev: When checking if a file download limit is reached, the price_id of the purchased download is now passed to the edd_is_file_at_download_limit filter.
423
+ * Dev: The edd_download_price_table_head and edd_download_price_table_row actions have been formally deprecated.
templates/account-pending.php CHANGED
@@ -5,5 +5,5 @@
5
  <?php endif; ?>
6
  <p class="edd-account-pending">
7
  <?php $url = esc_url( edd_get_user_verification_request_url() ); ?>
8
- <?php printf( __( 'Your account is pending verification. Please click the link in your email to activate your account. No email? <a href="%s">Click here</a> to send a new activation code.', 'easy-digital-downloads' ), $url ); ?>
9
- </p>
5
  <?php endif; ?>
6
  <p class="edd-account-pending">
7
  <?php $url = esc_url( edd_get_user_verification_request_url() ); ?>
8
+ <?php printf( __( 'Your account is pending verification. Please click the link in your email to activate your account. No email? <a href="%s">Click here</a> to send a new activation code.', 'easy-digital-downloads' ), esc_url( $url ) ); ?>
9
+ </p>
templates/checkout_cart.php CHANGED
@@ -49,8 +49,8 @@ global $post; ?>
49
  </td>
50
  <td class="edd_cart_actions">
51
  <?php if( edd_item_quantities_enabled() && ! edd_download_quantities_disabled( $item['id'] ) ) : ?>
52
- <input type="number" min="1" step="1" name="edd-cart-download-<?php echo $key; ?>-quantity" data-key="<?php echo $key; ?>" class="edd-input edd-item-quantity" value="<?php echo edd_get_cart_item_quantity( $item['id'], $item['options'] ); ?>"/>
53
- <input type="hidden" name="edd-cart-downloads[]" value="<?php echo $item['id']; ?>"/>
54
  <input type="hidden" name="edd-cart-download-<?php echo $key; ?>-options" value="<?php echo esc_attr( json_encode( $item['options'] ) ); ?>"/>
55
  <?php endif; ?>
56
  <?php do_action( 'edd_cart_actions', $item, $key ); ?>
@@ -89,7 +89,7 @@ global $post; ?>
89
 
90
  <?php if( has_action( 'edd_cart_footer_buttons' ) ) : ?>
91
  <tr class="edd_cart_footer_row<?php if ( edd_is_cart_saving_disabled() ) { echo ' edd-no-js'; } ?>">
92
- <th colspan="<?php echo edd_checkout_cart_columns(); ?>">
93
  <?php do_action( 'edd_cart_footer_buttons' ); ?>
94
  </th>
95
  </tr>
@@ -98,8 +98,8 @@ global $post; ?>
98
  <?php if( edd_use_taxes() && ! edd_prices_include_tax() ) : ?>
99
  <tr class="edd_cart_footer_row edd_cart_subtotal_row"<?php if ( ! edd_is_cart_taxed() ) echo ' style="display:none;"'; ?>>
100
  <?php do_action( 'edd_checkout_table_subtotal_first' ); ?>
101
- <th colspan="<?php echo edd_checkout_cart_columns(); ?>" class="edd_cart_subtotal">
102
- <?php _e( 'Subtotal', 'easy-digital-downloads' ); ?>:&nbsp;<span class="edd_cart_subtotal_amount"><?php echo edd_cart_subtotal(); ?></span>
103
  </th>
104
  <?php do_action( 'edd_checkout_table_subtotal_last' ); ?>
105
  </tr>
@@ -107,7 +107,7 @@ global $post; ?>
107
 
108
  <tr class="edd_cart_footer_row edd_cart_discount_row" <?php if( ! edd_cart_has_discounts() ) echo ' style="display:none;"'; ?>>
109
  <?php do_action( 'edd_checkout_table_discount_first' ); ?>
110
- <th colspan="<?php echo edd_checkout_cart_columns(); ?>" class="edd_cart_discount">
111
  <?php edd_cart_discounts_html(); ?>
112
  </th>
113
  <?php do_action( 'edd_checkout_table_discount_last' ); ?>
@@ -116,8 +116,8 @@ global $post; ?>
116
  <?php if( edd_use_taxes() ) : ?>
117
  <tr class="edd_cart_footer_row edd_cart_tax_row"<?php if( ! edd_is_cart_taxed() ) echo ' style="display:none;"'; ?>>
118
  <?php do_action( 'edd_checkout_table_tax_first' ); ?>
119
- <th colspan="<?php echo edd_checkout_cart_columns(); ?>" class="edd_cart_tax">
120
- <?php _e( 'Tax', 'easy-digital-downloads' ); ?>:&nbsp;<span class="edd_cart_tax_amount" data-tax="<?php echo edd_get_cart_tax( false ); ?>"><?php echo esc_html( edd_cart_tax() ); ?></span>
121
  </th>
122
  <?php do_action( 'edd_checkout_table_tax_last' ); ?>
123
  </tr>
@@ -126,7 +126,7 @@ global $post; ?>
126
 
127
  <tr class="edd_cart_footer_row">
128
  <?php do_action( 'edd_checkout_table_footer_first' ); ?>
129
- <th colspan="<?php echo edd_checkout_cart_columns(); ?>" class="edd_cart_total"><?php _e( 'Total', 'easy-digital-downloads' ); ?>: <span class="edd_cart_amount" data-subtotal="<?php echo edd_get_cart_subtotal(); ?>" data-total="<?php echo edd_get_cart_total(); ?>"><?php edd_cart_total(); ?></span></th>
130
  <?php do_action( 'edd_checkout_table_footer_last' ); ?>
131
  </tr>
132
  </tfoot>
49
  </td>
50
  <td class="edd_cart_actions">
51
  <?php if( edd_item_quantities_enabled() && ! edd_download_quantities_disabled( $item['id'] ) ) : ?>
52
+ <input type="number" min="1" step="1" name="edd-cart-download-<?php echo esc_attr( $key ); ?>-quantity" data-key="<?php echo esc_attr( $key ); ?>" class="edd-input edd-item-quantity" value="<?php echo esc_attr( edd_get_cart_item_quantity( $item['id'], $item['options'] ) ); ?>"/>
53
+ <input type="hidden" name="edd-cart-downloads[]" value="<?php echo esc_attr( $item['id'] ); ?>"/>
54
  <input type="hidden" name="edd-cart-download-<?php echo $key; ?>-options" value="<?php echo esc_attr( json_encode( $item['options'] ) ); ?>"/>
55
  <?php endif; ?>
56
  <?php do_action( 'edd_cart_actions', $item, $key ); ?>
89
 
90
  <?php if( has_action( 'edd_cart_footer_buttons' ) ) : ?>
91
  <tr class="edd_cart_footer_row<?php if ( edd_is_cart_saving_disabled() ) { echo ' edd-no-js'; } ?>">
92
+ <th colspan="<?php echo esc_attr( edd_checkout_cart_columns() ); ?>">
93
  <?php do_action( 'edd_cart_footer_buttons' ); ?>
94
  </th>
95
  </tr>
98
  <?php if( edd_use_taxes() && ! edd_prices_include_tax() ) : ?>
99
  <tr class="edd_cart_footer_row edd_cart_subtotal_row"<?php if ( ! edd_is_cart_taxed() ) echo ' style="display:none;"'; ?>>
100
  <?php do_action( 'edd_checkout_table_subtotal_first' ); ?>
101
+ <th colspan="<?php echo esc_attr( edd_checkout_cart_columns() ); ?>" class="edd_cart_subtotal">
102
+ <?php esc_html_e( 'Subtotal', 'easy-digital-downloads' ); ?>:&nbsp;<span class="edd_cart_subtotal_amount"><?php echo edd_cart_subtotal(); // Escaped ?></span>
103
  </th>
104
  <?php do_action( 'edd_checkout_table_subtotal_last' ); ?>
105
  </tr>
107
 
108
  <tr class="edd_cart_footer_row edd_cart_discount_row" <?php if( ! edd_cart_has_discounts() ) echo ' style="display:none;"'; ?>>
109
  <?php do_action( 'edd_checkout_table_discount_first' ); ?>
110
+ <th colspan="<?php echo esc_attr( edd_checkout_cart_columns() ); ?>" class="edd_cart_discount">
111
  <?php edd_cart_discounts_html(); ?>
112
  </th>
113
  <?php do_action( 'edd_checkout_table_discount_last' ); ?>
116
  <?php if( edd_use_taxes() ) : ?>
117
  <tr class="edd_cart_footer_row edd_cart_tax_row"<?php if( ! edd_is_cart_taxed() ) echo ' style="display:none;"'; ?>>
118
  <?php do_action( 'edd_checkout_table_tax_first' ); ?>
119
+ <th colspan="<?php echo esc_attr( edd_checkout_cart_columns() ); ?>" class="edd_cart_tax">
120
+ <?php _e( 'Tax', 'easy-digital-downloads' ); ?>:&nbsp;<span class="edd_cart_tax_amount" data-tax="<?php echo esc_attr( edd_get_cart_tax() ); ?>"><?php edd_cart_tax( true ); // Escaped ?></span>
121
  </th>
122
  <?php do_action( 'edd_checkout_table_tax_last' ); ?>
123
  </tr>
126
 
127
  <tr class="edd_cart_footer_row">
128
  <?php do_action( 'edd_checkout_table_footer_first' ); ?>
129
+ <th colspan="<?php echo esc_attr( edd_checkout_cart_columns() ); ?>" class="edd_cart_total"><?php _e( 'Total', 'easy-digital-downloads' ); ?>: <span class="edd_cart_amount" data-subtotal="<?php echo esc_attr( edd_get_cart_subtotal() ); ?>" data-total="<?php echo esc_attr( edd_get_cart_total() ); ?>"><?php edd_cart_total(); // Escaped ?></span></th>
130
  <?php do_action( 'edd_checkout_table_footer_last' ); ?>
131
  </tr>
132
  </tfoot>
templates/history-purchases.php CHANGED
@@ -35,10 +35,10 @@ if ( is_user_logged_in() ):
35
  <?php if( $payment->status != 'publish' ) : ?>
36
  <span class="edd_purchase_status <?php echo $payment->status; ?>"><?php echo $payment->status_nicename; ?></span>
37
  <?php if ( $payment->is_recoverable() ) : ?>
38
- &mdash; <a href="<?php echo $payment->get_recovery_url(); ?>"><?php _e( 'Complete Purchase', 'easy-digital-downloads' ); ?></a>
39
  <?php endif; ?>
40
  <?php else: ?>
41
- <a href="<?php echo esc_url( add_query_arg( 'payment_key', $payment->key, edd_get_success_page_uri() ) ); ?>"><?php _e( 'View Details and Downloads', 'easy-digital-downloads' ); ?></a>
42
  <?php endif; ?>
43
  </td>
44
  <?php do_action( 'edd_purchase_history_row_end', $payment->ID, $payment->payment_meta ); ?>
@@ -46,7 +46,7 @@ if ( is_user_logged_in() ):
46
  <?php endforeach; ?>
47
  </table>
48
  <?php
49
- echo edd_pagination(
50
  array(
51
  'type' => 'purchase_history',
52
  'total' => ceil( edd_count_purchases_of_customer() / 20 ) // 20 items per page
35
  <?php if( $payment->status != 'publish' ) : ?>
36
  <span class="edd_purchase_status <?php echo $payment->status; ?>"><?php echo $payment->status_nicename; ?></span>
37
  <?php if ( $payment->is_recoverable() ) : ?>
38
+ &mdash; <a href="<?php echo esc_url( $payment->get_recovery_url() ); ?>"><?php _e( 'Complete Purchase', 'easy-digital-downloads' ); ?></a>
39
  <?php endif; ?>
40
  <?php else: ?>
41
+ <a href="<?php echo esc_url( add_query_arg( 'payment_key', urlencode( $payment->key ), edd_get_success_page_uri() ) ); ?>"><?php _e( 'View Details and Downloads', 'easy-digital-downloads' ); ?></a>
42
  <?php endif; ?>
43
  </td>
44
  <?php do_action( 'edd_purchase_history_row_end', $payment->ID, $payment->payment_meta ); ?>
46
  <?php endforeach; ?>
47
  </table>
48
  <?php
49
+ echo edd_pagination(
50
  array(
51
  'type' => 'purchase_history',
52
  'total' => ceil( edd_count_purchases_of_customer() / 20 ) // 20 items per page
templates/payment-processing.php CHANGED
@@ -1,5 +1,5 @@
1
  <div id="edd-payment-processing">
2
- <p><?php printf( __( 'Your purchase is processing. This page will reload automatically in 8 seconds. If it does not, click <a href="%s">here</a>.', 'easy-digital-downloads' ), edd_get_success_page_uri() ); ?>
3
  <span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>
4
  <script type="text/javascript">setTimeout(function(){ window.location = '<?php echo edd_get_success_page_uri(); ?>'; }, 8000);</script>
5
- </div>
1
  <div id="edd-payment-processing">
2
+ <p><?php printf( __( 'Your purchase is processing. This page will reload automatically in 8 seconds. If it does not, click <a href="%s">here</a>.', 'easy-digital-downloads' ), esc_url( edd_get_success_page_uri() ) ); ?>
3
  <span class="edd-cart-ajax"><i class="edd-icon-spinner edd-icon-spin"></i></span>
4
  <script type="text/javascript">setTimeout(function(){ window.location = '<?php echo edd_get_success_page_uri(); ?>'; }, 8000);</script>
5
+ </div>
templates/shortcode-login.php CHANGED
@@ -24,7 +24,7 @@ if ( ! is_user_logged_in() ) :
24
  </p>
25
  <p class="edd-login-submit">
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>
24
  </p>
25
  <p class="edd-login-submit">
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 esc_attr( 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>
templates/shortcode-profile-editor.php CHANGED
@@ -14,7 +14,7 @@ if ( is_user_logged_in() ):
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() ); ?>
18
  <div class="edd_success edd-alert edd-alert-success"><strong><?php _e( 'Saved cart','easy-digital-downloads' ); ?>:</strong> <?php printf( __( 'You have a saved cart, <a href="%s">click here</a> to restore it.', 'easy-digital-downloads' ), esc_url( $restore_url ) ); ?></div>
19
  <?php endif; ?>
20
 
@@ -26,7 +26,7 @@ if ( is_user_logged_in() ):
26
 
27
  <?php do_action( 'edd_profile_editor_before' ); ?>
28
 
29
- <form id="edd_profile_editor_form" class="edd_form" action="<?php echo edd_get_current_page_url(); ?>" method="post">
30
 
31
  <?php do_action( 'edd_profile_editor_fields_top' ); ?>
32
 
@@ -120,7 +120,7 @@ if ( is_user_logged_in() ):
120
  'edd-remove-customer-email'
121
  );
122
  ?>
123
- <a href="<?php echo $remove_url ?>" class="delete"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
124
  </span>
125
  </li>
126
  <?php endforeach; ?>
@@ -162,7 +162,7 @@ if ( is_user_logged_in() ):
162
  <label for="edd_address_country"><?php _e( 'Country', 'easy-digital-downloads' ); ?></label>
163
  <select name="edd_address_country" id="edd_address_country" class="select edd-select" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>">
164
  <?php foreach( edd_get_country_list() as $key => $country ) : ?>
165
- <option value="<?php echo $key; ?>"<?php selected( $address['country'], $key ); ?>><?php echo esc_html( $country ); ?></option>
166
  <?php endforeach; ?>
167
  </select>
168
  </p>
@@ -173,7 +173,7 @@ if ( is_user_logged_in() ):
173
  <select name="edd_address_state" id="edd_address_state" class="select edd-select">
174
  <?php
175
  foreach( $states as $state_code => $state_name ) {
176
- echo '<option value="' . $state_code . '"' . selected( $state_code, $state, false ) . '>' . $state_name . '</option>';
177
  }
178
  ?>
179
  </select>
@@ -214,7 +214,7 @@ if ( is_user_logged_in() ):
214
  <fieldset id="edd_profile_submit_fieldset">
215
 
216
  <p id="edd_profile_submit_wrap">
217
- <input type="hidden" name="edd_profile_editor_nonce" value="<?php echo wp_create_nonce( 'edd-profile-editor-nonce' ); ?>"/>
218
  <input type="hidden" name="edd_action" value="edit_user_profile" />
219
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( edd_get_current_page_url() ); ?>" />
220
  <input name="edd_profile_editor_submit" id="edd_profile_editor_submit" type="submit" class="edd_submit edd-submit" value="<?php _e( 'Save Changes', 'easy-digital-downloads' ); ?>"/>
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' => urlencode( edd_get_cart_token() ) ), edd_get_checkout_uri() ); ?>
18
  <div class="edd_success edd-alert edd-alert-success"><strong><?php _e( 'Saved cart','easy-digital-downloads' ); ?>:</strong> <?php printf( __( 'You have a saved cart, <a href="%s">click here</a> to restore it.', 'easy-digital-downloads' ), esc_url( $restore_url ) ); ?></div>
19
  <?php endif; ?>
20
 
26
 
27
  <?php do_action( 'edd_profile_editor_before' ); ?>
28
 
29
+ <form id="edd_profile_editor_form" class="edd_form" action="<?php echo esc_url( edd_get_current_page_url() ); ?>" method="post">
30
 
31
  <?php do_action( 'edd_profile_editor_fields_top' ); ?>
32
 
120
  'edd-remove-customer-email'
121
  );
122
  ?>
123
+ <a href="<?php echo esc_url( $remove_url ); ?>" class="delete"><?php _e( 'Remove', 'easy-digital-downloads' ); ?></a>
124
  </span>
125
  </li>
126
  <?php endforeach; ?>
162
  <label for="edd_address_country"><?php _e( 'Country', 'easy-digital-downloads' ); ?></label>
163
  <select name="edd_address_country" id="edd_address_country" class="select edd-select" data-nonce="<?php echo wp_create_nonce( 'edd-country-field-nonce' ); ?>">
164
  <?php foreach( edd_get_country_list() as $key => $country ) : ?>
165
+ <option value="<?php echo esc_attr( $key ); ?>"<?php selected( $address['country'], $key ); ?>><?php echo esc_html( $country ); ?></option>
166
  <?php endforeach; ?>
167
  </select>
168
  </p>
173
  <select name="edd_address_state" id="edd_address_state" class="select edd-select">
174
  <?php
175
  foreach( $states as $state_code => $state_name ) {
176
+ echo '<option value="' . esc_attr( $state_code ) . '"' . selected( $state_code, $state, false ) . '>' . esc_html( $state_name ) . '</option>';
177
  }
178
  ?>
179
  </select>
214
  <fieldset id="edd_profile_submit_fieldset">
215
 
216
  <p id="edd_profile_submit_wrap">
217
+ <input type="hidden" name="edd_profile_editor_nonce" value="<?php echo esc_attr( wp_create_nonce( 'edd-profile-editor-nonce' ) ); ?>"/>
218
  <input type="hidden" name="edd_action" value="edit_user_profile" />
219
  <input type="hidden" name="edd_redirect" value="<?php echo esc_url( edd_get_current_page_url() ); ?>" />
220
  <input name="edd_profile_editor_submit" id="edd_profile_editor_submit" type="submit" class="edd_submit edd-submit" value="<?php _e( 'Save Changes', 'easy-digital-downloads' ); ?>"/>
templates/widget-cart-checkout.php CHANGED
@@ -3,4 +3,4 @@
3
  <li class="cart_item edd-cart-meta edd_cart_tax"><?php _e( 'Estimated Tax:', 'easy-digital-downloads' ); ?> <span class="cart-tax"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_tax() ) ); ?></span></li>
4
  <?php endif; ?>
5
  <li class="cart_item edd-cart-meta edd_total"><?php _e( 'Total:', 'easy-digital-downloads' ); ?> <span class="cart-total"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ); ?></span></li>
6
- <li class="cart_item edd_checkout"><a href="<?php echo edd_get_checkout_uri(); ?>"><?php _e( 'Checkout', 'easy-digital-downloads' ); ?></a></li>
3
  <li class="cart_item edd-cart-meta edd_cart_tax"><?php _e( 'Estimated Tax:', 'easy-digital-downloads' ); ?> <span class="cart-tax"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_tax() ) ); ?></span></li>
4
  <?php endif; ?>
5
  <li class="cart_item edd-cart-meta edd_total"><?php _e( 'Total:', 'easy-digital-downloads' ); ?> <span class="cart-total"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ); ?></span></li>
6
+ <li class="cart_item edd_checkout"><a href="<?php echo esc_url( edd_get_checkout_uri() ); ?>"><?php _e( 'Checkout', 'easy-digital-downloads' ); ?></a></li>
templates/widget-cart-empty.php CHANGED
@@ -4,4 +4,4 @@
4
  <li class="cart_item edd-cart-meta edd_cart_tax" style="display:none;"><?php _e( 'Estimated Tax:', 'easy-digital-downloads' ); ?> <span class="cart-tax"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_tax() ) ); ?></span></li>
5
  <?php endif; ?>
6
  <li class="cart_item edd-cart-meta edd_total" style="display:none;"><?php _e( 'Total:', 'easy-digital-downloads' ); ?> <span class="cart-total"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ); ?></span></li>
7
- <li class="cart_item edd_checkout" style="display:none;"><a href="<?php echo edd_get_checkout_uri(); ?>"><?php _e( 'Checkout', 'easy-digital-downloads' ); ?></a></li>
4
  <li class="cart_item edd-cart-meta edd_cart_tax" style="display:none;"><?php _e( 'Estimated Tax:', 'easy-digital-downloads' ); ?> <span class="cart-tax"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_tax() ) ); ?></span></li>
5
  <?php endif; ?>
6
  <li class="cart_item edd-cart-meta edd_total" style="display:none;"><?php _e( 'Total:', 'easy-digital-downloads' ); ?> <span class="cart-total"><?php echo edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ); ?></span></li>
7
+ <li class="cart_item edd_checkout" style="display:none;"><a href="<?php echo esc_url( edd_get_checkout_uri() ); ?>"><?php _e( 'Checkout', 'easy-digital-downloads' ); ?></a></li>
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-nonce="<?php echo wp_create_nonce( 'edd-remove-cart-widget-item' ); ?>" 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>&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-nonce="<?php echo esc_attr( wp_create_nonce( 'edd-remove-cart-widget-item' ) ); ?>" 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>
templates/widget-cart.php CHANGED
@@ -6,7 +6,7 @@ $cart_items = edd_get_cart_contents();
6
  $cart_quantity = edd_get_cart_quantity();
7
  $display = $cart_quantity > 0 ? '' : ' style="display:none;"';
8
  ?>
9
- <p class="edd-cart-number-of-items"<?php echo $display; ?>><?php _e( 'Number of items in cart', 'easy-digital-downloads' ); ?>: <span class="edd-cart-quantity"><?php echo $cart_quantity; ?></span></p>
10
  <ul class="edd-cart">
11
  <?php if( $cart_items ) : ?>
12
 
6
  $cart_quantity = edd_get_cart_quantity();
7
  $display = $cart_quantity > 0 ? '' : ' style="display:none;"';
8
  ?>
9
+ <p class="edd-cart-number-of-items"<?php echo $display; ?>><?php _e( 'Number of items in cart', 'easy-digital-downloads' ); ?>: <span class="edd-cart-quantity"><?php echo esc_html( $cart_quantity ); ?></span></p>
10
  <ul class="edd-cart">
11
  <?php if( $cart_items ) : ?>
12