Easy Digital Downloads - Version 2.8.13

Version Description

Download this release

Release Info

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

Code changes from version 2.8.12 to 2.8.13

easy-digital-downloads.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: The easiest way to sell digital products with WordPress.
6
  * Author: Easy Digital Downloads
7
  * Author URI: https://easydigitaldownloads.com
8
- * Version: 2.8.12
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
@@ -25,7 +25,7 @@
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
- * @version 2.8.12
29
  */
30
 
31
  // Exit if accessed directly.
@@ -206,7 +206,7 @@ final class Easy_Digital_Downloads {
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
- define( 'EDD_VERSION', '2.8.12' );
210
  }
211
 
212
  // 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.8.13
9
  * Text Domain: easy-digital-downloads
10
  * Domain Path: languages
11
  *
25
  * @package EDD
26
  * @category Core
27
  * @author Pippin Williamson
28
+ * @version 2.8.13
29
  */
30
 
31
  // Exit if accessed directly.
206
 
207
  // Plugin version.
208
  if ( ! defined( 'EDD_VERSION' ) ) {
209
+ define( 'EDD_VERSION', '2.8.13' );
210
  }
211
 
212
  // Plugin Folder Path.
includes/admin/customers/customer-actions.php CHANGED
@@ -250,11 +250,11 @@ function edd_add_customer_email( $args ) {
250
 
251
  $user = wp_get_current_user();
252
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
253
- $customer_note = __( sprintf( 'Email address %s added by %s', $email, $user_login ), 'easy-digital-downloads' );
254
  $customer->add_note( $customer_note );
255
 
256
  if ( $primary ) {
257
- $customer_note = __( sprintf( 'Email address %s set as primary by %s', $email, $user_login ), 'easy-digital-downloads' );
258
  $customer->add_note( $customer_note );
259
  }
260
 
@@ -308,7 +308,7 @@ function edd_remove_customer_email() {
308
 
309
  $user = wp_get_current_user();
310
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
311
- $customer_note = __( sprintf( 'Email address %s removed by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
312
  $customer->add_note( $customer_note );
313
 
314
  } else {
@@ -352,7 +352,7 @@ function edd_set_customer_primary_email() {
352
 
353
  $user = wp_get_current_user();
354
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
355
- $customer_note = __( sprintf( 'Email address %s set as primary by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
356
  $customer->add_note( $customer_note );
357
 
358
  } else {
250
 
251
  $user = wp_get_current_user();
252
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
253
+ $customer_note = sprintf( __( 'Email address %s added by %s', 'easy-digital-downloads' ), $email, $user_login );
254
  $customer->add_note( $customer_note );
255
 
256
  if ( $primary ) {
257
+ $customer_note = sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), $email, $user_login );
258
  $customer->add_note( $customer_note );
259
  }
260
 
308
 
309
  $user = wp_get_current_user();
310
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
311
+ $customer_note = sprintf( __( 'Email address %s removed by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
312
  $customer->add_note( $customer_note );
313
 
314
  } else {
352
 
353
  $user = wp_get_current_user();
354
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
355
+ $customer_note = sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
356
  $customer->add_note( $customer_note );
357
 
358
  } else {
includes/cart/class-edd-cart.php CHANGED
@@ -228,6 +228,7 @@ class EDD_Cart {
228
  }
229
 
230
  $item['quantity'] = edd_item_quantities_enabled() ? absint( $item['quantity'] ) : 1;
 
231
 
232
  $options = isset( $item['options'] ) ? $item['options'] : array();
233
 
228
  }
229
 
230
  $item['quantity'] = edd_item_quantities_enabled() ? absint( $item['quantity'] ) : 1;
231
+ $item['quantity'] = max( 1, $item['quantity'] ); // Force quantity to 1
232
 
233
  $options = isset( $item['options'] ) ? $item['options'] : array();
234
 
includes/gateways/paypal-standard.php CHANGED
@@ -67,8 +67,21 @@ function edd_register_paypal_gateway_settings( $gateway_settings ) {
67
  ),
68
  );
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  $disable_ipn_desc = sprintf(
71
- __( 'If payments are not getting marked as complete, then check this box. This forces the site to use a slightly less secure method of verifying purchases. See our <a href="%s" target="_blank">FAQ</a> for further information.', 'easy-digital-downloads' ),
72
  'http://docs.easydigitaldownloads.com/article/190-payments-not-marked-as-complete'
73
  );
74
 
@@ -286,6 +299,8 @@ function edd_process_paypal_purchase( $purchase_data ) {
286
 
287
  $paypal_args = apply_filters( 'edd_paypal_redirect_args', $paypal_args, $purchase_data );
288
 
 
 
289
  // Build query
290
  $paypal_redirect .= http_build_query( $paypal_args );
291
 
@@ -309,6 +324,9 @@ add_action( 'edd_gateway_paypal', 'edd_process_paypal_purchase' );
309
  function edd_listen_for_paypal_ipn() {
310
  // Regular PayPal IPN
311
  if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] == 'IPN' ) {
 
 
 
312
  do_action( 'edd_verify_paypal_ipn' );
313
  }
314
  }
@@ -326,6 +344,8 @@ function edd_process_paypal_ipn() {
326
  return;
327
  }
328
 
 
 
329
  // Set initial post data to empty string
330
  $post_data = '';
331
 
@@ -375,6 +395,19 @@ function edd_process_paypal_ipn() {
375
 
376
  }
377
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  if ( ! edd_get_option( 'disable_paypal_verification' ) ) {
379
 
380
  // Validate the IPN
@@ -397,21 +430,26 @@ function edd_process_paypal_ipn() {
397
  'body' => $encoded_data_array
398
  );
399
 
 
 
400
  // Get response
401
  $api_response = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
402
 
403
  if ( is_wp_error( $api_response ) ) {
404
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
 
405
 
406
  return; // Something went wrong
407
  }
408
 
409
  if ( wp_remote_retrieve_body( $api_response ) !== 'VERIFIED' && edd_get_option( 'disable_paypal_verification', false ) ) {
410
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
 
411
 
412
  return; // Response not okay
413
  }
414
 
 
415
  }
416
 
417
  // Check if $post_data_array has been populated
@@ -457,6 +495,19 @@ add_action( 'edd_verify_paypal_ipn', 'edd_process_paypal_ipn' );
457
  * @return void
458
  */
459
  function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
460
  if ( $data['txn_type'] != 'web_accept' && $data['txn_type'] != 'cart' && $data['payment_status'] != 'Refunded' ) {
461
  return;
462
  }
@@ -482,6 +533,7 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
482
  // Verify payment recipient
483
  if ( strcasecmp( $business_email, trim( edd_get_option( 'paypal_email', false ) ) ) != 0 ) {
484
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid business email in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
485
  edd_update_payment_status( $payment_id, 'failed' );
486
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid PayPal business email.', 'easy-digital-downloads' ) );
487
  return;
@@ -491,6 +543,7 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
491
  if ( $currency_code != strtolower( $payment->currency ) ) {
492
 
493
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid currency in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
494
  edd_update_payment_status( $payment_id, 'failed' );
495
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid currency in PayPal IPN.', 'easy-digital-downloads' ) );
496
  return;
@@ -550,12 +603,14 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
550
  if ( number_format( (float) $paypal_amount, 2 ) < number_format( (float) $payment_amount, 2 ) ) {
551
  // The prices don't match
552
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid payment amount in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
 
553
  edd_update_payment_status( $payment_id, 'failed' );
554
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid amount in PayPal IPN.', 'easy-digital-downloads' ) );
555
  return;
556
  }
557
  if ( $purchase_key != edd_get_payment_key( $payment_id ) ) {
558
  // Purchase keys don't match
 
559
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid purchase key in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
560
  edd_update_payment_status( $payment_id, 'failed' );
561
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid purchase key in PayPal IPN.', 'easy-digital-downloads' ) );
@@ -636,6 +691,7 @@ function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
636
 
637
  if( ! empty( $note ) ) {
638
 
 
639
  edd_insert_payment_note( $payment_id, $note );
640
 
641
  }
@@ -654,8 +710,19 @@ add_action( 'edd_paypal_web_accept', 'edd_process_paypal_web_accept_and_cart', 1
654
  */
655
  function edd_process_paypal_refund( $data, $payment_id = 0 ) {
656
 
657
- // Collect payment details
 
 
 
 
 
 
 
 
 
 
658
 
 
659
  if( empty( $payment_id ) ) {
660
  return;
661
  }
@@ -740,7 +807,7 @@ function edd_get_paypal_image_url() {
740
  }
741
 
742
  /**
743
- * Shows "Purchase Processing" message for PayPal payments are still pending on site return
744
  *
745
  * This helps address the Race Condition, as detailed in issue #1839
746
  *
@@ -762,9 +829,9 @@ function edd_paypal_success_page_content( $content ) {
762
  $payment_id = edd_get_purchase_id_by_key( $session['purchase_key'] );
763
  }
764
 
765
- $payment = get_post( $payment_id );
766
 
767
- if ( $payment && 'pending' == $payment->post_status ) {
768
 
769
  // Payment is still pending so show processing indicator to fix the Race Condition, issue #
770
  ob_start();
@@ -780,6 +847,90 @@ function edd_paypal_success_page_content( $content ) {
780
  }
781
  add_filter( 'edd_payment_confirm_paypal', 'edd_paypal_success_page_content' );
782
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  /**
784
  * Given a Payment ID, extract the transaction ID
785
  *
67
  ),
68
  );
69
 
70
+ $pdt_desc = sprintf(
71
+ __( 'Enter your PayPal Identity Token in order to enable Payment Data Transfer (PDT). This allows payments to be verified without relying on the PayPal IPN. See our <a href="%s" target="_blank">documentation</a> for further information.', 'easy-digital-downloads' ),
72
+ 'http://docs.easydigitaldownloads.com/article/918-paypal-standard'
73
+ );
74
+
75
+ $paypal_settings['paypal_identify_token'] = array(
76
+ 'id' => 'paypal_identity_token',
77
+ 'name' => __( 'PayPal Identity Token', 'easy-digital-downloads' ),
78
+ 'type' => 'text',
79
+ 'desc' => $pdt_desc,
80
+ 'size' => 'regular',
81
+ );
82
+
83
  $disable_ipn_desc = sprintf(
84
+ __( 'If you are unable to use Payment Data Transfer and payments are not getting marked as complete, then check this box. This forces the site to use a slightly less secure method of verifying purchases. See our <a href="%s" target="_blank">FAQ</a> for further information.', 'easy-digital-downloads' ),
85
  'http://docs.easydigitaldownloads.com/article/190-payments-not-marked-as-complete'
86
  );
87
 
299
 
300
  $paypal_args = apply_filters( 'edd_paypal_redirect_args', $paypal_args, $purchase_data );
301
 
302
+ edd_debug_log( 'PayPal arguments: ' . print_r( $paypal_args, true ) );
303
+
304
  // Build query
305
  $paypal_redirect .= http_build_query( $paypal_args );
306
 
324
  function edd_listen_for_paypal_ipn() {
325
  // Regular PayPal IPN
326
  if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] == 'IPN' ) {
327
+
328
+ edd_debug_log( 'PayPal IPN endpoint loaded' );
329
+
330
  do_action( 'edd_verify_paypal_ipn' );
331
  }
332
  }
344
  return;
345
  }
346
 
347
+ edd_debug_log( 'edd_process_paypal_ipn() running during PayPal IPN processing' );
348
+
349
  // Set initial post data to empty string
350
  $post_data = '';
351
 
395
 
396
  }
397
 
398
+ /**
399
+ * PayPal Web IPN Verification
400
+ *
401
+ * Allows filtering the IPN Verification data that PayPal passes back in via IPN with PayPal Standard
402
+ *
403
+ * @since 2.8.13
404
+ *
405
+ * @param array $data The PayPal Web Accept Data
406
+ */
407
+ $encoded_data_array = apply_filters( 'edd_process_paypal_ipn_data', $encoded_data_array );
408
+
409
+ edd_debug_log( 'encoded_data_array data array: ' . print_r( $encoded_data_array, true ) );
410
+
411
  if ( ! edd_get_option( 'disable_paypal_verification' ) ) {
412
 
413
  // Validate the IPN
430
  'body' => $encoded_data_array
431
  );
432
 
433
+ edd_debug_log( 'Attempting to verify PayPal IPN. Data sent for verification: ' . print_r( $remote_post_vars, true ) );
434
+
435
  // Get response
436
  $api_response = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
437
 
438
  if ( is_wp_error( $api_response ) ) {
439
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
440
+ edd_debug_log( 'Invalid IPN verification response. IPN data: ' . print_r( $api_response, true ) );
441
 
442
  return; // Something went wrong
443
  }
444
 
445
  if ( wp_remote_retrieve_body( $api_response ) !== 'VERIFIED' && edd_get_option( 'disable_paypal_verification', false ) ) {
446
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid IPN verification response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $api_response ) ) );
447
+ edd_debug_log( 'Invalid IPN verification response. IPN data: ' . print_r( $api_response, true ) );
448
 
449
  return; // Response not okay
450
  }
451
 
452
+ edd_debug_log( 'IPN verified successfully' );
453
  }
454
 
455
  // Check if $post_data_array has been populated
495
  * @return void
496
  */
497
  function edd_process_paypal_web_accept_and_cart( $data, $payment_id ) {
498
+
499
+ /**
500
+ * PayPal Web Accept Data
501
+ *
502
+ * Allows filtering the Web Accept data that PayPal passes back in via IPN with PayPal Standard
503
+ *
504
+ * @since 2.8.13
505
+ *
506
+ * @param array $data The PayPal Web Accept Data
507
+ * @param int $payment_id The Payment ID associated with this IPN request
508
+ */
509
+ $data = apply_filters( 'edd_paypal_web_accept_and_cart_data', $data, $payment_id );
510
+
511
  if ( $data['txn_type'] != 'web_accept' && $data['txn_type'] != 'cart' && $data['payment_status'] != 'Refunded' ) {
512
  return;
513
  }
533
  // Verify payment recipient
534
  if ( strcasecmp( $business_email, trim( edd_get_option( 'paypal_email', false ) ) ) != 0 ) {
535
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid business email in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
536
+ edd_debug_log( 'Invalid business email in IPN response. IPN data: ' . print_r( $data, true ) );
537
  edd_update_payment_status( $payment_id, 'failed' );
538
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid PayPal business email.', 'easy-digital-downloads' ) );
539
  return;
543
  if ( $currency_code != strtolower( $payment->currency ) ) {
544
 
545
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid currency in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
546
+ edd_debug_log( 'Invalid currency in IPN response. IPN data: ' . print_r( $data, true ) );
547
  edd_update_payment_status( $payment_id, 'failed' );
548
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid currency in PayPal IPN.', 'easy-digital-downloads' ) );
549
  return;
603
  if ( number_format( (float) $paypal_amount, 2 ) < number_format( (float) $payment_amount, 2 ) ) {
604
  // The prices don't match
605
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid payment amount in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
606
+ edd_debug_log( 'Invalid payment amount in IPN response. IPN data: ' . printf( $data, true ) );
607
  edd_update_payment_status( $payment_id, 'failed' );
608
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid amount in PayPal IPN.', 'easy-digital-downloads' ) );
609
  return;
610
  }
611
  if ( $purchase_key != edd_get_payment_key( $payment_id ) ) {
612
  // Purchase keys don't match
613
+ edd_debug_log( 'Invalid purchase key in IPN response. IPN data: ' . printf( $data, true ) );
614
  edd_record_gateway_error( __( 'IPN Error', 'easy-digital-downloads' ), sprintf( __( 'Invalid purchase key in IPN response. IPN data: %s', 'easy-digital-downloads' ), json_encode( $data ) ), $payment_id );
615
  edd_update_payment_status( $payment_id, 'failed' );
616
  edd_insert_payment_note( $payment_id, __( 'Payment failed due to invalid purchase key in PayPal IPN.', 'easy-digital-downloads' ) );
691
 
692
  if( ! empty( $note ) ) {
693
 
694
+ edd_debug_log( 'Payment not marked as completed because: ' . $note );
695
  edd_insert_payment_note( $payment_id, $note );
696
 
697
  }
710
  */
711
  function edd_process_paypal_refund( $data, $payment_id = 0 ) {
712
 
713
+ /**
714
+ * PayPal Process Refund Data
715
+ *
716
+ * Allows filtering the Refund data that PayPal passes back in via IPN with PayPal Standard
717
+ *
718
+ * @since 2.8.13
719
+ *
720
+ * @param array $data The PayPal Refund data
721
+ * @param int $payment_id The Payment ID associated with this IPN request
722
+ */
723
+ $data = apply_filters( 'edd_process_paypal_refund_data', $data, $payment_id );
724
 
725
+ // Collect payment details
726
  if( empty( $payment_id ) ) {
727
  return;
728
  }
807
  }
808
 
809
  /**
810
+ * Shows "Purchase Processing" message for PayPal payments are still pending on site return.
811
  *
812
  * This helps address the Race Condition, as detailed in issue #1839
813
  *
829
  $payment_id = edd_get_purchase_id_by_key( $session['purchase_key'] );
830
  }
831
 
832
+ $payment = new EDD_Payment( $payment_id );
833
 
834
+ if ( $payment->ID > 0 && 'pending' == $payment->status ) {
835
 
836
  // Payment is still pending so show processing indicator to fix the Race Condition, issue #
837
  ob_start();
847
  }
848
  add_filter( 'edd_payment_confirm_paypal', 'edd_paypal_success_page_content' );
849
 
850
+ /**
851
+ * Mark payment as complete on return from PayPal if a PayPal Identity Token is present.
852
+ *
853
+ * See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/6197
854
+ *
855
+ * @since 2.8.13
856
+ * @return void
857
+ */
858
+ function edd_paypal_process_pdt_on_return() {
859
+
860
+ if ( ! isset( $_GET['payment-id'] ) || ! isset( $_GET['tx'] ) ) {
861
+ return;
862
+ }
863
+
864
+ $token = edd_get_option( 'paypal_identity_token' );
865
+
866
+ if( ! edd_is_success_page() || ! $token || ! edd_is_gateway_active( 'paypal' ) ) {
867
+ return;
868
+ }
869
+
870
+ $payment_id = isset( $_GET['payment-id'] ) ? absint( $_GET['payment-id'] ) : false;
871
+
872
+ if( empty( $payment_id ) ) {
873
+ return;
874
+ }
875
+
876
+ $payment = new EDD_Payment( $payment_id );
877
+
878
+ if( $token && ! empty( $_GET['tx'] ) && $payment->ID > 0 ) {
879
+
880
+ // An identity token has been provided in settings so let's immediately verify the purchase
881
+
882
+ $remote_post_vars = array(
883
+ 'method' => 'POST',
884
+ 'timeout' => 45,
885
+ 'redirection' => 5,
886
+ 'httpversion' => '1.1',
887
+ 'blocking' => true,
888
+ 'headers' => array(
889
+ 'host' => 'www.paypal.com',
890
+ 'connection' => 'close',
891
+ 'content-type' => 'application/x-www-form-urlencoded',
892
+ 'post' => '/cgi-bin/webscr HTTP/1.1',
893
+ 'user-agent' => 'EDD PDT Verification/' . EDD_VERSION . '; ' . get_bloginfo( 'url' )
894
+
895
+ ),
896
+ 'sslverify' => false,
897
+ 'body' => array(
898
+ 'tx' => sanitize_text_field( $_GET['tx'] ),
899
+ 'at' => $token,
900
+ 'cmd' => '_notify-synch',
901
+ )
902
+ );
903
+
904
+ // Sanitize the data for debug logging.
905
+ $debug_args = $remote_post_vars;
906
+ $debug_args['body']['at'] = str_pad( substr( $debug_args['body']['at'], -6 ), strlen( $debug_args['body']['at'] ), '*', STR_PAD_LEFT );
907
+ edd_debug_log( 'Attempting to verify PayPal payment with PDT. Args: ' . print_r( $debug_args, true ) );
908
+
909
+ $request = wp_remote_post( edd_get_paypal_redirect( true, true ), $remote_post_vars );
910
+
911
+ if ( ! is_wp_error( $request ) ) {
912
+
913
+ $body = wp_remote_retrieve_body( $request );
914
+
915
+ if( false !== strpos( $body, 'SUCCESS' ) ) {
916
+
917
+ // Purchase verified, set to completed
918
+ $payment->status = 'publish';
919
+ $payment->transaction_id = sanitize_text_field( $_GET['tx'] );
920
+ $payment->save();
921
+
922
+ }
923
+
924
+ } else {
925
+
926
+ edd_debug_log( 'Attempt to verify PayPal payment with PDT failed. Request return: ' . print_r( $request, true ) );
927
+
928
+ }
929
+ }
930
+
931
+ }
932
+ add_action( 'template_redirect', 'edd_paypal_process_pdt_on_return' );
933
+
934
  /**
935
  * Given a Payment ID, extract the transaction ID
936
  *
includes/payments/class-payments-query.php CHANGED
@@ -486,13 +486,7 @@ class EDD_Payments_Query extends EDD_Stats {
486
 
487
  $this->__unset( 's' );
488
 
489
- } elseif (
490
- edd_get_option( 'enable_sequential' ) &&
491
- (
492
- false !== strpos( $search, edd_get_option( 'sequential_prefix' ) ) ||
493
- false !== strpos( $search, edd_get_option( 'sequential_postfix' ) )
494
- )
495
- ) {
496
 
497
  $search_meta = array(
498
  'key' => '_edd_payment_number',
486
 
487
  $this->__unset( 's' );
488
 
489
+ } elseif ( edd_get_option( 'enable_sequential' ) ) {
 
 
 
 
 
 
490
 
491
  $search_meta = array(
492
  'key' => '_edd_payment_number',
includes/shortcodes.php CHANGED
@@ -932,7 +932,7 @@ function edd_process_profile_editor_remove_email() {
932
 
933
  $user = wp_get_current_user();
934
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
935
- $customer_note = __( sprintf( 'Email address %s removed by %s', $_GET['email'], $user_login ), 'easy-digital-downloads' );
936
  $customer->add_note( $customer_note );
937
 
938
  } else {
932
 
933
  $user = wp_get_current_user();
934
  $user_login = ! empty( $user->user_login ) ? $user->user_login : 'EDDBot';
935
+ $customer_note = sprintf( __( 'Email address %s removed by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
936
  $customer->add_note( $customer_note );
937
 
938
  } else {
includes/user-functions.php CHANGED
@@ -483,12 +483,14 @@ function edd_add_past_purchases_to_new_user( $user_id ) {
483
  edd_send_user_verification_email( $user_id );
484
 
485
  foreach( $payments as $payment ) {
486
- if( intval( edd_get_payment_user_id( $payment->ID ) ) > 0 ) {
487
- continue; // This payment already associated with an account
488
- }
 
489
 
490
- $payment->user_id = $user_id;
491
- $payment->save();
 
492
  }
493
  }
494
 
483
  edd_send_user_verification_email( $user_id );
484
 
485
  foreach( $payments as $payment ) {
486
+ if ( is_object( $payment ) && $payment instanceof EDD_Payment ) {
487
+ if ( intval( $payment->user_id ) > 0 ) {
488
+ continue; // This payment already associated with an account
489
+ }
490
 
491
+ $payment->user_id = $user_id;
492
+ $payment->save();
493
+ }
494
  }
495
  }
496
 
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.8.11\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
- "POT-Creation-Date: 2017-11-10 18:06:43+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -89,16 +89,16 @@ msgstr ""
89
  #: includes/admin/upgrades/upgrade-functions.php:1098
90
  #: includes/api/class-edd-api.php:1990 includes/api/class-edd-api.php:1995
91
  #: includes/api/class-edd-api.php:2007 includes/api/class-edd-api.php:2009
92
- #: includes/cart/class-edd-cart.php:1468 includes/cart/class-edd-cart.php:1482
93
  #: includes/class-edd-license-handler.php:307
94
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
95
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1248
96
  #: includes/emails/actions.php:53 includes/emails/template.php:243
97
  #: includes/error-tracking.php:40 includes/gateways/functions.php:221
98
- #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:155
99
  #: includes/process-download.php:289 includes/process-download.php:822
100
- #: includes/query-filters.php:48 includes/user-functions.php:878
101
- #: includes/user-functions.php:903 includes/user-functions.php:956
102
  msgid "Error"
103
  msgstr ""
104
 
@@ -510,7 +510,7 @@ msgid "An error has occured. Please try again."
510
  msgstr ""
511
 
512
  #: includes/admin/customers/customer-actions.php:207
513
- #: includes/user-functions.php:903
514
  msgid "Nonce verification failed."
515
  msgstr ""
516
 
@@ -530,6 +530,15 @@ msgstr ""
530
  msgid "Email successfully added to customer."
531
  msgstr ""
532
 
 
 
 
 
 
 
 
 
 
533
  #: includes/admin/customers/customer-actions.php:301
534
  #: includes/admin/customers/customer-actions.php:345
535
  #: includes/admin/customers/customer-actions.php:603
@@ -541,6 +550,11 @@ msgstr ""
541
  msgid "Nonce verification failed"
542
  msgstr ""
543
 
 
 
 
 
 
544
  #: includes/admin/customers/customer-actions.php:395
545
  msgid "A note is required"
546
  msgstr ""
@@ -2612,7 +2626,7 @@ msgid "Payment ID"
2612
  msgstr ""
2613
 
2614
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:79
2615
- #: includes/gateways/manual.php:73 includes/gateways/paypal-standard.php:178
2616
  msgid "Payment Error"
2617
  msgstr ""
2618
 
@@ -4901,27 +4915,27 @@ msgstr ""
4901
  msgid "No download logs found!"
4902
  msgstr ""
4903
 
4904
- #: includes/api/class-edd-api.php:1954 includes/user-functions.php:1038
4905
  msgid "Easy Digital Downloads API Keys"
4906
  msgstr ""
4907
 
4908
- #: includes/api/class-edd-api.php:1963 includes/user-functions.php:1043
4909
  msgid "Generate API Key"
4910
  msgstr ""
4911
 
4912
- #: includes/api/class-edd-api.php:1965 includes/user-functions.php:1045
4913
  msgid "Public key:"
4914
  msgstr ""
4915
 
4916
- #: includes/api/class-edd-api.php:1966 includes/user-functions.php:1046
4917
  msgid "Secret key:"
4918
  msgstr ""
4919
 
4920
- #: includes/api/class-edd-api.php:1967 includes/user-functions.php:1047
4921
  msgid "Token:"
4922
  msgstr ""
4923
 
4924
- #: includes/api/class-edd-api.php:1969 includes/user-functions.php:1049
4925
  msgid "Revoke API Keys"
4926
  msgstr ""
4927
 
@@ -4933,32 +4947,32 @@ msgstr ""
4933
  msgid "You do not have permission to %s API keys for this user"
4934
  msgstr ""
4935
 
4936
- #: includes/cart/class-edd-cart.php:909
4937
  msgid "includes %s tax"
4938
  msgstr ""
4939
 
4940
- #: includes/cart/class-edd-cart.php:911
4941
  msgid "excludes %s tax"
4942
  msgstr ""
4943
 
4944
- #: includes/cart/class-edd-cart.php:1431 includes/cart/class-edd-cart.php:1494
4945
  #: templates/shortcode-profile-editor.php:22
4946
  msgid "Success"
4947
  msgstr ""
4948
 
4949
- #: includes/cart/class-edd-cart.php:1432
4950
  msgid "Cart saved successfully. You can restore your cart using this URL:"
4951
  msgstr ""
4952
 
4953
- #: includes/cart/class-edd-cart.php:1468 includes/cart/class-edd-cart.php:1482
4954
  msgid "Cart restoration failed. Invalid token."
4955
  msgstr ""
4956
 
4957
- #: includes/cart/class-edd-cart.php:1476 includes/cart/class-edd-cart.php:1485
4958
  msgid "The cart cannot be restored. Invalid token."
4959
  msgstr ""
4960
 
4961
- #: includes/cart/class-edd-cart.php:1494
4962
  msgid "Cart restored successfully."
4963
  msgstr ""
4964
 
@@ -5389,8 +5403,8 @@ msgstr ""
5389
  msgid "Customer User ID: %s"
5390
  msgstr ""
5391
 
5392
- #: includes/class-edd-cli.php:335 includes/user-functions.php:565
5393
- #: includes/user-functions.php:574
5394
  msgid "Username: %s"
5395
  msgstr ""
5396
 
@@ -6288,12 +6302,12 @@ msgstr ""
6288
 
6289
  #: includes/gateways/amazon-payments.php:1113
6290
  #: includes/gateways/amazon-payments.php:1167
6291
- #: includes/gateways/paypal-standard.php:404
6292
- #: includes/gateways/paypal-standard.php:410
6293
- #: includes/gateways/paypal-standard.php:484
6294
- #: includes/gateways/paypal-standard.php:493
6295
- #: includes/gateways/paypal-standard.php:552
6296
- #: includes/gateways/paypal-standard.php:559
6297
  msgid "IPN Error"
6298
  msgstr ""
6299
 
@@ -6334,7 +6348,7 @@ msgstr ""
6334
  msgid "The requested price ID does not exist."
6335
  msgstr ""
6336
 
6337
- #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:155
6338
  msgid "Nonce verification has failed"
6339
  msgstr ""
6340
 
@@ -6366,117 +6380,129 @@ msgstr ""
6366
 
6367
  #: includes/gateways/paypal-standard.php:71
6368
  msgid ""
6369
- "If payments are not getting marked as complete, then check this box. This "
6370
- "forces the site to use a slightly less secure method of verifying "
6371
- "purchases. See our <a href=\"%s\" target=\"_blank\">FAQ</a> for further "
6372
  "information."
6373
  msgstr ""
6374
 
6375
  #: includes/gateways/paypal-standard.php:77
 
 
 
 
 
 
 
 
 
 
 
 
6376
  msgid "Disable PayPal IPN Verification"
6377
  msgstr ""
6378
 
6379
- #: includes/gateways/paypal-standard.php:85
6380
  msgid "API Credentials"
6381
  msgstr ""
6382
 
6383
- #: includes/gateways/paypal-standard.php:88
6384
  msgid ""
6385
  "API credentials are necessary to process PayPal refunds from inside "
6386
  "WordPress. These can be obtained from <a href=\"%s\" target=\"_blank\">your "
6387
  "PayPal account</a>."
6388
  msgstr ""
6389
 
6390
- #: includes/gateways/paypal-standard.php:94
6391
  msgid "Live API Username"
6392
  msgstr ""
6393
 
6394
- #: includes/gateways/paypal-standard.php:95
6395
  msgid "Your PayPal live API username. "
6396
  msgstr ""
6397
 
6398
- #: includes/gateways/paypal-standard.php:101
6399
  msgid "Live API Password"
6400
  msgstr ""
6401
 
6402
- #: includes/gateways/paypal-standard.php:102
6403
  msgid "Your PayPal live API password."
6404
  msgstr ""
6405
 
6406
- #: includes/gateways/paypal-standard.php:108
6407
  msgid "Live API Signature"
6408
  msgstr ""
6409
 
6410
- #: includes/gateways/paypal-standard.php:109
6411
  msgid "Your PayPal live API signature."
6412
  msgstr ""
6413
 
6414
- #: includes/gateways/paypal-standard.php:115
6415
  msgid "Test API Username"
6416
  msgstr ""
6417
 
6418
- #: includes/gateways/paypal-standard.php:116
6419
  msgid "Your PayPal test API username."
6420
  msgstr ""
6421
 
6422
- #: includes/gateways/paypal-standard.php:122
6423
  msgid "Test API Password"
6424
  msgstr ""
6425
 
6426
- #: includes/gateways/paypal-standard.php:123
6427
  msgid "Your PayPal test API password."
6428
  msgstr ""
6429
 
6430
- #: includes/gateways/paypal-standard.php:129
6431
  msgid "Test API Signature"
6432
  msgstr ""
6433
 
6434
- #: includes/gateways/paypal-standard.php:130
6435
  msgid "Your PayPal test API signature."
6436
  msgstr ""
6437
 
6438
- #: includes/gateways/paypal-standard.php:178
6439
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6440
  msgstr ""
6441
 
6442
- #: includes/gateways/paypal-standard.php:404
6443
- #: includes/gateways/paypal-standard.php:410
6444
  msgid "Invalid IPN verification response. IPN data: %s"
6445
  msgstr ""
6446
 
6447
- #: includes/gateways/paypal-standard.php:484
6448
  msgid "Invalid business email in IPN response. IPN data: %s"
6449
  msgstr ""
6450
 
6451
- #: includes/gateways/paypal-standard.php:486
6452
  msgid "Payment failed due to invalid PayPal business email."
6453
  msgstr ""
6454
 
6455
- #: includes/gateways/paypal-standard.php:493
6456
  msgid "Invalid currency in IPN response. IPN data: %s"
6457
  msgstr ""
6458
 
6459
- #: includes/gateways/paypal-standard.php:495
6460
  msgid "Payment failed due to invalid currency in PayPal IPN."
6461
  msgstr ""
6462
 
6463
- #: includes/gateways/paypal-standard.php:552
6464
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6465
  msgstr ""
6466
 
6467
- #: includes/gateways/paypal-standard.php:554
6468
  msgid "Payment failed due to invalid amount in PayPal IPN."
6469
  msgstr ""
6470
 
6471
- #: includes/gateways/paypal-standard.php:559
6472
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6473
  msgstr ""
6474
 
6475
- #: includes/gateways/paypal-standard.php:561
6476
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6477
  msgstr ""
6478
 
6479
- #: includes/gateways/paypal-standard.php:567
6480
  #: tests/helpers/class-helper-payment.php:131
6481
  #: tests/helpers/class-helper-payment.php:234
6482
  #: tests/helpers/class-helper-payment.php:342
@@ -6487,79 +6513,79 @@ msgstr ""
6487
  msgid "PayPal Transaction ID: %s"
6488
  msgstr ""
6489
 
6490
- #: includes/gateways/paypal-standard.php:581
6491
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6492
  msgstr ""
6493
 
6494
- #: includes/gateways/paypal-standard.php:588
6495
  msgid ""
6496
  "Payment requires a confirmed customer address and must be accepted manually "
6497
  "through PayPal"
6498
  msgstr ""
6499
 
6500
- #: includes/gateways/paypal-standard.php:594
6501
  msgid ""
6502
  "Payment must be accepted manually through PayPal due to international "
6503
  "account regulations"
6504
  msgstr ""
6505
 
6506
- #: includes/gateways/paypal-standard.php:600
6507
  msgid ""
6508
  "Payment received in non-shop currency and must be accepted manually through "
6509
  "PayPal"
6510
  msgstr ""
6511
 
6512
- #: includes/gateways/paypal-standard.php:607
6513
  msgid ""
6514
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6515
  "violation of government regulations"
6516
  msgstr ""
6517
 
6518
- #: includes/gateways/paypal-standard.php:613
6519
  msgid "Payment was sent to non-confirmed or non-registered email address."
6520
  msgstr ""
6521
 
6522
- #: includes/gateways/paypal-standard.php:619
6523
  msgid "PayPal account must be upgraded before this payment can be accepted"
6524
  msgstr ""
6525
 
6526
- #: includes/gateways/paypal-standard.php:625
6527
  msgid ""
6528
  "PayPal account is not verified. Verify account in order to accept this "
6529
  "payment"
6530
  msgstr ""
6531
 
6532
- #: includes/gateways/paypal-standard.php:631
6533
  msgid ""
6534
  "Payment is pending for unknown reasons. Contact PayPal support for "
6535
  "assistance"
6536
  msgstr ""
6537
 
6538
- #: includes/gateways/paypal-standard.php:672
6539
  msgid "Partial PayPal refund processed: %s"
6540
  msgstr ""
6541
 
6542
- #: includes/gateways/paypal-standard.php:677
6543
  msgid "PayPal Payment #%s Refunded for reason: %s"
6544
  msgstr ""
6545
 
6546
- #: includes/gateways/paypal-standard.php:678
6547
  msgid "PayPal Refund Transaction ID: %s"
6548
  msgstr ""
6549
 
6550
- #: includes/gateways/paypal-standard.php:853
6551
  msgid "Refund Payment in PayPal"
6552
  msgstr ""
6553
 
6554
- #: includes/gateways/paypal-standard.php:1002
6555
  msgid "PayPal refund failed for unknown reason."
6556
  msgstr ""
6557
 
6558
- #: includes/gateways/paypal-standard.php:1012
6559
  msgid "PayPal refund transaction ID: %s"
6560
  msgstr ""
6561
 
6562
- #: includes/gateways/paypal-standard.php:1016
6563
  msgid "PayPal refund failed: %s"
6564
  msgstr ""
6565
 
@@ -7461,51 +7487,51 @@ msgstr ""
7461
  msgid "Plain Text"
7462
  msgstr ""
7463
 
7464
- #: includes/user-functions.php:563
7465
  msgid "[%s] New User Registration"
7466
  msgstr ""
7467
 
7468
- #: includes/user-functions.php:564
7469
  msgid "New user registration"
7470
  msgstr ""
7471
 
7472
- #: includes/user-functions.php:566
7473
  msgid "E-mail: %s"
7474
  msgstr ""
7475
 
7476
- #: includes/user-functions.php:572
7477
  msgid "[%s] Your username and password"
7478
  msgstr ""
7479
 
7480
- #: includes/user-functions.php:573
7481
  msgid "Your account info"
7482
  msgstr ""
7483
 
7484
- #: includes/user-functions.php:577
7485
  msgid "Password entered at checkout"
7486
  msgstr ""
7487
 
7488
- #: includes/user-functions.php:579
7489
  msgid "Password entered at registration"
7490
  msgstr ""
7491
 
7492
- #: includes/user-functions.php:582
7493
  msgid "Password: %s"
7494
  msgstr ""
7495
 
7496
- #: includes/user-functions.php:586
7497
  msgid "Click here to log in"
7498
  msgstr ""
7499
 
7500
- #: includes/user-functions.php:590
7501
  msgid "To log in, visit: %s"
7502
  msgstr ""
7503
 
7504
- #: includes/user-functions.php:746 includes/user-functions.php:747
7505
  msgid "Verify your account"
7506
  msgstr ""
7507
 
7508
- #: includes/user-functions.php:749
7509
  msgid ""
7510
  "Hello %s,\n"
7511
  "\n"
@@ -7515,33 +7541,33 @@ msgid ""
7515
  "Link missing? Visit the following URL: %s"
7516
  msgstr ""
7517
 
7518
- #: includes/user-functions.php:874
7519
  msgid ""
7520
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
7521
  "here</a> to request a new verification URL."
7522
  msgstr ""
7523
 
7524
- #: includes/user-functions.php:907
7525
  msgid "You must be logged in to verify your account."
7526
  msgstr ""
7527
 
7528
- #: includes/user-functions.php:907 includes/user-functions.php:911
7529
  msgid "Notice"
7530
  msgstr ""
7531
 
7532
- #: includes/user-functions.php:911
7533
  msgid "Your account has already been verified."
7534
  msgstr ""
7535
 
7536
- #: includes/user-functions.php:956
7537
  msgid "Invalid verification token provided."
7538
  msgstr ""
7539
 
7540
- #: includes/user-functions.php:1061
7541
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
7542
  msgstr ""
7543
 
7544
- #: includes/user-functions.php:1068
7545
  msgid "Add to iOS App"
7546
  msgstr ""
7547
 
2
  # This file is distributed under the same license as the Easy Digital Downloads package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Easy Digital Downloads 2.8.12\n"
6
  "Report-Msgid-Bugs-To: https://easydigitaldownloads.com/\n"
7
+ "POT-Creation-Date: 2017-11-20 17:26:16+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
89
  #: includes/admin/upgrades/upgrade-functions.php:1098
90
  #: includes/api/class-edd-api.php:1990 includes/api/class-edd-api.php:1995
91
  #: includes/api/class-edd-api.php:2007 includes/api/class-edd-api.php:2009
92
+ #: includes/cart/class-edd-cart.php:1469 includes/cart/class-edd-cart.php:1483
93
  #: includes/class-edd-license-handler.php:307
94
  #: includes/deprecated-functions.php:517 includes/deprecated-functions.php:532
95
  #: includes/deprecated-functions.php:542 includes/download-functions.php:1248
96
  #: includes/emails/actions.php:53 includes/emails/template.php:243
97
  #: includes/error-tracking.php:40 includes/gateways/functions.php:221
98
+ #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
99
  #: includes/process-download.php:289 includes/process-download.php:822
100
+ #: includes/query-filters.php:48 includes/user-functions.php:880
101
+ #: includes/user-functions.php:905 includes/user-functions.php:958
102
  msgid "Error"
103
  msgstr ""
104
 
510
  msgstr ""
511
 
512
  #: includes/admin/customers/customer-actions.php:207
513
+ #: includes/user-functions.php:905
514
  msgid "Nonce verification failed."
515
  msgstr ""
516
 
530
  msgid "Email successfully added to customer."
531
  msgstr ""
532
 
533
+ #: includes/admin/customers/customer-actions.php:253
534
+ msgid "Email address %s added by %s"
535
+ msgstr ""
536
+
537
+ #: includes/admin/customers/customer-actions.php:257
538
+ #: includes/admin/customers/customer-actions.php:355
539
+ msgid "Email address %s set as primary by %s"
540
+ msgstr ""
541
+
542
  #: includes/admin/customers/customer-actions.php:301
543
  #: includes/admin/customers/customer-actions.php:345
544
  #: includes/admin/customers/customer-actions.php:603
550
  msgid "Nonce verification failed"
551
  msgstr ""
552
 
553
+ #: includes/admin/customers/customer-actions.php:311
554
+ #: includes/shortcodes.php:935
555
+ msgid "Email address %s removed by %s"
556
+ msgstr ""
557
+
558
  #: includes/admin/customers/customer-actions.php:395
559
  msgid "A note is required"
560
  msgstr ""
2626
  msgstr ""
2627
 
2628
  #: includes/admin/reporting/class-gateway-error-logs-list-table.php:79
2629
+ #: includes/gateways/manual.php:73 includes/gateways/paypal-standard.php:191
2630
  msgid "Payment Error"
2631
  msgstr ""
2632
 
4915
  msgid "No download logs found!"
4916
  msgstr ""
4917
 
4918
+ #: includes/api/class-edd-api.php:1954 includes/user-functions.php:1040
4919
  msgid "Easy Digital Downloads API Keys"
4920
  msgstr ""
4921
 
4922
+ #: includes/api/class-edd-api.php:1963 includes/user-functions.php:1045
4923
  msgid "Generate API Key"
4924
  msgstr ""
4925
 
4926
+ #: includes/api/class-edd-api.php:1965 includes/user-functions.php:1047
4927
  msgid "Public key:"
4928
  msgstr ""
4929
 
4930
+ #: includes/api/class-edd-api.php:1966 includes/user-functions.php:1048
4931
  msgid "Secret key:"
4932
  msgstr ""
4933
 
4934
+ #: includes/api/class-edd-api.php:1967 includes/user-functions.php:1049
4935
  msgid "Token:"
4936
  msgstr ""
4937
 
4938
+ #: includes/api/class-edd-api.php:1969 includes/user-functions.php:1051
4939
  msgid "Revoke API Keys"
4940
  msgstr ""
4941
 
4947
  msgid "You do not have permission to %s API keys for this user"
4948
  msgstr ""
4949
 
4950
+ #: includes/cart/class-edd-cart.php:910
4951
  msgid "includes %s tax"
4952
  msgstr ""
4953
 
4954
+ #: includes/cart/class-edd-cart.php:912
4955
  msgid "excludes %s tax"
4956
  msgstr ""
4957
 
4958
+ #: includes/cart/class-edd-cart.php:1432 includes/cart/class-edd-cart.php:1495
4959
  #: templates/shortcode-profile-editor.php:22
4960
  msgid "Success"
4961
  msgstr ""
4962
 
4963
+ #: includes/cart/class-edd-cart.php:1433
4964
  msgid "Cart saved successfully. You can restore your cart using this URL:"
4965
  msgstr ""
4966
 
4967
+ #: includes/cart/class-edd-cart.php:1469 includes/cart/class-edd-cart.php:1483
4968
  msgid "Cart restoration failed. Invalid token."
4969
  msgstr ""
4970
 
4971
+ #: includes/cart/class-edd-cart.php:1477 includes/cart/class-edd-cart.php:1486
4972
  msgid "The cart cannot be restored. Invalid token."
4973
  msgstr ""
4974
 
4975
+ #: includes/cart/class-edd-cart.php:1495
4976
  msgid "Cart restored successfully."
4977
  msgstr ""
4978
 
5403
  msgid "Customer User ID: %s"
5404
  msgstr ""
5405
 
5406
+ #: includes/class-edd-cli.php:335 includes/user-functions.php:567
5407
+ #: includes/user-functions.php:576
5408
  msgid "Username: %s"
5409
  msgstr ""
5410
 
6302
 
6303
  #: includes/gateways/amazon-payments.php:1113
6304
  #: includes/gateways/amazon-payments.php:1167
6305
+ #: includes/gateways/paypal-standard.php:439
6306
+ #: includes/gateways/paypal-standard.php:446
6307
+ #: includes/gateways/paypal-standard.php:535
6308
+ #: includes/gateways/paypal-standard.php:545
6309
+ #: includes/gateways/paypal-standard.php:605
6310
+ #: includes/gateways/paypal-standard.php:614
6311
  msgid "IPN Error"
6312
  msgstr ""
6313
 
6348
  msgid "The requested price ID does not exist."
6349
  msgstr ""
6350
 
6351
+ #: includes/gateways/manual.php:33 includes/gateways/paypal-standard.php:168
6352
  msgid "Nonce verification has failed"
6353
  msgstr ""
6354
 
6380
 
6381
  #: includes/gateways/paypal-standard.php:71
6382
  msgid ""
6383
+ "Enter your PayPal Identity Token in order to enable Payment Data Transfer "
6384
+ "(PDT). This allows payments to be verified without relying on the PayPal "
6385
+ "IPN. See our <a href=\"%s\" target=\"_blank\">documentation</a> for further "
6386
  "information."
6387
  msgstr ""
6388
 
6389
  #: includes/gateways/paypal-standard.php:77
6390
+ msgid "PayPal Identity Token"
6391
+ msgstr ""
6392
+
6393
+ #: includes/gateways/paypal-standard.php:84
6394
+ msgid ""
6395
+ "If you are unable to use Payment Data Transfer and payments are not getting "
6396
+ "marked as complete, then check this box. This forces the site to use a "
6397
+ "slightly less secure method of verifying purchases. See our <a href=\"%s\" "
6398
+ "target=\"_blank\">FAQ</a> for further information."
6399
+ msgstr ""
6400
+
6401
+ #: includes/gateways/paypal-standard.php:90
6402
  msgid "Disable PayPal IPN Verification"
6403
  msgstr ""
6404
 
6405
+ #: includes/gateways/paypal-standard.php:98
6406
  msgid "API Credentials"
6407
  msgstr ""
6408
 
6409
+ #: includes/gateways/paypal-standard.php:101
6410
  msgid ""
6411
  "API credentials are necessary to process PayPal refunds from inside "
6412
  "WordPress. These can be obtained from <a href=\"%s\" target=\"_blank\">your "
6413
  "PayPal account</a>."
6414
  msgstr ""
6415
 
6416
+ #: includes/gateways/paypal-standard.php:107
6417
  msgid "Live API Username"
6418
  msgstr ""
6419
 
6420
+ #: includes/gateways/paypal-standard.php:108
6421
  msgid "Your PayPal live API username. "
6422
  msgstr ""
6423
 
6424
+ #: includes/gateways/paypal-standard.php:114
6425
  msgid "Live API Password"
6426
  msgstr ""
6427
 
6428
+ #: includes/gateways/paypal-standard.php:115
6429
  msgid "Your PayPal live API password."
6430
  msgstr ""
6431
 
6432
+ #: includes/gateways/paypal-standard.php:121
6433
  msgid "Live API Signature"
6434
  msgstr ""
6435
 
6436
+ #: includes/gateways/paypal-standard.php:122
6437
  msgid "Your PayPal live API signature."
6438
  msgstr ""
6439
 
6440
+ #: includes/gateways/paypal-standard.php:128
6441
  msgid "Test API Username"
6442
  msgstr ""
6443
 
6444
+ #: includes/gateways/paypal-standard.php:129
6445
  msgid "Your PayPal test API username."
6446
  msgstr ""
6447
 
6448
+ #: includes/gateways/paypal-standard.php:135
6449
  msgid "Test API Password"
6450
  msgstr ""
6451
 
6452
+ #: includes/gateways/paypal-standard.php:136
6453
  msgid "Your PayPal test API password."
6454
  msgstr ""
6455
 
6456
+ #: includes/gateways/paypal-standard.php:142
6457
  msgid "Test API Signature"
6458
  msgstr ""
6459
 
6460
+ #: includes/gateways/paypal-standard.php:143
6461
  msgid "Your PayPal test API signature."
6462
  msgstr ""
6463
 
6464
+ #: includes/gateways/paypal-standard.php:191
6465
  msgid "Payment creation failed before sending buyer to PayPal. Payment data: %s"
6466
  msgstr ""
6467
 
6468
+ #: includes/gateways/paypal-standard.php:439
6469
+ #: includes/gateways/paypal-standard.php:446
6470
  msgid "Invalid IPN verification response. IPN data: %s"
6471
  msgstr ""
6472
 
6473
+ #: includes/gateways/paypal-standard.php:535
6474
  msgid "Invalid business email in IPN response. IPN data: %s"
6475
  msgstr ""
6476
 
6477
+ #: includes/gateways/paypal-standard.php:538
6478
  msgid "Payment failed due to invalid PayPal business email."
6479
  msgstr ""
6480
 
6481
+ #: includes/gateways/paypal-standard.php:545
6482
  msgid "Invalid currency in IPN response. IPN data: %s"
6483
  msgstr ""
6484
 
6485
+ #: includes/gateways/paypal-standard.php:548
6486
  msgid "Payment failed due to invalid currency in PayPal IPN."
6487
  msgstr ""
6488
 
6489
+ #: includes/gateways/paypal-standard.php:605
6490
  msgid "Invalid payment amount in IPN response. IPN data: %s"
6491
  msgstr ""
6492
 
6493
+ #: includes/gateways/paypal-standard.php:608
6494
  msgid "Payment failed due to invalid amount in PayPal IPN."
6495
  msgstr ""
6496
 
6497
+ #: includes/gateways/paypal-standard.php:614
6498
  msgid "Invalid purchase key in IPN response. IPN data: %s"
6499
  msgstr ""
6500
 
6501
+ #: includes/gateways/paypal-standard.php:616
6502
  msgid "Payment failed due to invalid purchase key in PayPal IPN."
6503
  msgstr ""
6504
 
6505
+ #: includes/gateways/paypal-standard.php:622
6506
  #: tests/helpers/class-helper-payment.php:131
6507
  #: tests/helpers/class-helper-payment.php:234
6508
  #: tests/helpers/class-helper-payment.php:342
6513
  msgid "PayPal Transaction ID: %s"
6514
  msgstr ""
6515
 
6516
+ #: includes/gateways/paypal-standard.php:636
6517
  msgid "Payment made via eCheck and will clear automatically in 5-8 days"
6518
  msgstr ""
6519
 
6520
+ #: includes/gateways/paypal-standard.php:643
6521
  msgid ""
6522
  "Payment requires a confirmed customer address and must be accepted manually "
6523
  "through PayPal"
6524
  msgstr ""
6525
 
6526
+ #: includes/gateways/paypal-standard.php:649
6527
  msgid ""
6528
  "Payment must be accepted manually through PayPal due to international "
6529
  "account regulations"
6530
  msgstr ""
6531
 
6532
+ #: includes/gateways/paypal-standard.php:655
6533
  msgid ""
6534
  "Payment received in non-shop currency and must be accepted manually through "
6535
  "PayPal"
6536
  msgstr ""
6537
 
6538
+ #: includes/gateways/paypal-standard.php:662
6539
  msgid ""
6540
  "Payment is being reviewed by PayPal staff as high-risk or in possible "
6541
  "violation of government regulations"
6542
  msgstr ""
6543
 
6544
+ #: includes/gateways/paypal-standard.php:668
6545
  msgid "Payment was sent to non-confirmed or non-registered email address."
6546
  msgstr ""
6547
 
6548
+ #: includes/gateways/paypal-standard.php:674
6549
  msgid "PayPal account must be upgraded before this payment can be accepted"
6550
  msgstr ""
6551
 
6552
+ #: includes/gateways/paypal-standard.php:680
6553
  msgid ""
6554
  "PayPal account is not verified. Verify account in order to accept this "
6555
  "payment"
6556
  msgstr ""
6557
 
6558
+ #: includes/gateways/paypal-standard.php:686
6559
  msgid ""
6560
  "Payment is pending for unknown reasons. Contact PayPal support for "
6561
  "assistance"
6562
  msgstr ""
6563
 
6564
+ #: includes/gateways/paypal-standard.php:739
6565
  msgid "Partial PayPal refund processed: %s"
6566
  msgstr ""
6567
 
6568
+ #: includes/gateways/paypal-standard.php:744
6569
  msgid "PayPal Payment #%s Refunded for reason: %s"
6570
  msgstr ""
6571
 
6572
+ #: includes/gateways/paypal-standard.php:745
6573
  msgid "PayPal Refund Transaction ID: %s"
6574
  msgstr ""
6575
 
6576
+ #: includes/gateways/paypal-standard.php:1004
6577
  msgid "Refund Payment in PayPal"
6578
  msgstr ""
6579
 
6580
+ #: includes/gateways/paypal-standard.php:1153
6581
  msgid "PayPal refund failed for unknown reason."
6582
  msgstr ""
6583
 
6584
+ #: includes/gateways/paypal-standard.php:1163
6585
  msgid "PayPal refund transaction ID: %s"
6586
  msgstr ""
6587
 
6588
+ #: includes/gateways/paypal-standard.php:1167
6589
  msgid "PayPal refund failed: %s"
6590
  msgstr ""
6591
 
7487
  msgid "Plain Text"
7488
  msgstr ""
7489
 
7490
+ #: includes/user-functions.php:565
7491
  msgid "[%s] New User Registration"
7492
  msgstr ""
7493
 
7494
+ #: includes/user-functions.php:566
7495
  msgid "New user registration"
7496
  msgstr ""
7497
 
7498
+ #: includes/user-functions.php:568
7499
  msgid "E-mail: %s"
7500
  msgstr ""
7501
 
7502
+ #: includes/user-functions.php:574
7503
  msgid "[%s] Your username and password"
7504
  msgstr ""
7505
 
7506
+ #: includes/user-functions.php:575
7507
  msgid "Your account info"
7508
  msgstr ""
7509
 
7510
+ #: includes/user-functions.php:579
7511
  msgid "Password entered at checkout"
7512
  msgstr ""
7513
 
7514
+ #: includes/user-functions.php:581
7515
  msgid "Password entered at registration"
7516
  msgstr ""
7517
 
7518
+ #: includes/user-functions.php:584
7519
  msgid "Password: %s"
7520
  msgstr ""
7521
 
7522
+ #: includes/user-functions.php:588
7523
  msgid "Click here to log in"
7524
  msgstr ""
7525
 
7526
+ #: includes/user-functions.php:592
7527
  msgid "To log in, visit: %s"
7528
  msgstr ""
7529
 
7530
+ #: includes/user-functions.php:748 includes/user-functions.php:749
7531
  msgid "Verify your account"
7532
  msgstr ""
7533
 
7534
+ #: includes/user-functions.php:751
7535
  msgid ""
7536
  "Hello %s,\n"
7537
  "\n"
7541
  "Link missing? Visit the following URL: %s"
7542
  msgstr ""
7543
 
7544
+ #: includes/user-functions.php:876
7545
  msgid ""
7546
  "Sorry but your account verification link has expired. <a href=\"%s\">Click "
7547
  "here</a> to request a new verification URL."
7548
  msgstr ""
7549
 
7550
+ #: includes/user-functions.php:909
7551
  msgid "You must be logged in to verify your account."
7552
  msgstr ""
7553
 
7554
+ #: includes/user-functions.php:909 includes/user-functions.php:913
7555
  msgid "Notice"
7556
  msgstr ""
7557
 
7558
+ #: includes/user-functions.php:913
7559
  msgid "Your account has already been verified."
7560
  msgstr ""
7561
 
7562
+ #: includes/user-functions.php:958
7563
  msgid "Invalid verification token provided."
7564
  msgstr ""
7565
 
7566
+ #: includes/user-functions.php:1063
7567
  msgid "Easy Digital Downloads <a href=\"%s\">iOS App</a>"
7568
  msgstr ""
7569
 
7570
+ #: includes/user-functions.php:1070
7571
  msgid "Add to iOS App"
7572
  msgstr ""
7573
 
readme.txt CHANGED
@@ -6,7 +6,7 @@ Donate link: https://easydigitaldownloads.com/donate/
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
  Requires at least: 4.4
8
  Tested up to: 4.9
9
- Stable Tag: 2.8.12
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
@@ -49,7 +49,6 @@ Payment gateways supported through free or premium extension:
49
  * Coinbase
50
  * Moneybookers / Skrill
51
  * Payza
52
- * MercadoPago
53
  * PagSeguro
54
 
55
  See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
@@ -169,7 +168,6 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
169
  * [SOFORT Banking](https://easydigitaldownloads.com/downloads/sofort-banking-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=sofort-banking-gateway&utm_campaign=readme)
170
  * [PayU India](https://easydigitaldownloads.com/downloads/payu-india-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payu-india-payment-gateway&utm_campaign=readme)
171
  * [Payza](https://easydigitaldownloads.com/downloads/payza-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payza-payment-gateway&utm_campaign=readme)
172
- * [MercadoPago](https://easydigitaldownloads.com/downloads/mercadopago/?utm_source=gateway&utm_medium=faq_tab&utm_content=mercadopago&utm_campaign=readme)
173
  * [First Data](https://easydigitaldownloads.com/downloads/first-data-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=first-data-payment-gateway&utm_campaign=readme)
174
  * [PayPlug](https://easydigitaldownloads.com/downloads/payplug-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payplug-gateway&utm_campaign=readme)
175
  * [GoCardless](https://easydigitaldownloads.com/downloads/gocardless-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=gocardless-payment-gateway&utm_campaign=readme)
@@ -213,6 +211,18 @@ Yes. Easy Digital Downloads also includes default support for Amazon Payments an
213
 
214
  == Changelog ==
215
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  = 2.8.12, November 10, 2017 =
217
  * Fix: Reverted some of the performance improvements due to edge case errors.
218
  * Fix: Corrected a misspelled function edd_render_dowwn_tax_options.
6
  Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
7
  Requires at least: 4.4
8
  Tested up to: 4.9
9
+ Stable Tag: 2.8.13
10
  License: GNU Version 2 or Any Later Version
11
 
12
  The easiest way to sell digital products with WordPress.
49
  * Coinbase
50
  * Moneybookers / Skrill
51
  * Payza
 
52
  * PagSeguro
53
 
54
  See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
168
  * [SOFORT Banking](https://easydigitaldownloads.com/downloads/sofort-banking-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=sofort-banking-gateway&utm_campaign=readme)
169
  * [PayU India](https://easydigitaldownloads.com/downloads/payu-india-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payu-india-payment-gateway&utm_campaign=readme)
170
  * [Payza](https://easydigitaldownloads.com/downloads/payza-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payza-payment-gateway&utm_campaign=readme)
 
171
  * [First Data](https://easydigitaldownloads.com/downloads/first-data-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=first-data-payment-gateway&utm_campaign=readme)
172
  * [PayPlug](https://easydigitaldownloads.com/downloads/payplug-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=payplug-gateway&utm_campaign=readme)
173
  * [GoCardless](https://easydigitaldownloads.com/downloads/gocardless-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=gocardless-payment-gateway&utm_campaign=readme)
211
 
212
  == Changelog ==
213
 
214
+ = 2.8.13, November 20, 2017 =
215
+ * Fix: Cart details incorrectly reported item quantity as 0 in some cases.
216
+ * Fix: Prevent an edge case around adding past purchases to new users.
217
+ * Fix: Searching by custom order number only worked if a suffix or prefix is included.
218
+ * Fix: Corrected some translation issues.
219
+ * New: Allow filtering of the PayPal IPN data.
220
+ * New: Add support for Payment Data Transport (PDT) in PayPal Standard.
221
+ * Tweak: Removed MercadoPago from list of extensions in readme.
222
+ * Tweak: Added a colon that was missing on taxes & subtotal of the purchase confirmation.
223
+ * Tweak: Add debug logging to PayPal IPN capturing.
224
+
225
+
226
  = 2.8.12, November 10, 2017 =
227
  * Fix: Reverted some of the performance improvements due to edge case errors.
228
  * Fix: Corrected a misspelled function edd_render_dowwn_tax_options.
templates/shortcode-receipt.php CHANGED
@@ -87,7 +87,7 @@ $status = edd_get_payment_status( $payment, true );
87
 
88
  <?php if( edd_use_taxes() ) : ?>
89
  <tr>
90
- <td><strong><?php _e( 'Tax', 'easy-digital-downloads' ); ?></strong></td>
91
  <td><?php echo edd_payment_tax( $payment->ID ); ?></td>
92
  </tr>
93
  <?php endif; ?>
@@ -95,7 +95,7 @@ $status = edd_get_payment_status( $payment, true );
95
  <?php if ( filter_var( $edd_receipt_args['price'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
96
 
97
  <tr>
98
- <td><strong><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?></strong></td>
99
  <td>
100
  <?php echo edd_payment_subtotal( $payment->ID ); ?>
101
  </td>
87
 
88
  <?php if( edd_use_taxes() ) : ?>
89
  <tr>
90
+ <td><strong><?php _e( 'Tax', 'easy-digital-downloads' ); ?>:</strong></td>
91
  <td><?php echo edd_payment_tax( $payment->ID ); ?></td>
92
  </tr>
93
  <?php endif; ?>
95
  <?php if ( filter_var( $edd_receipt_args['price'], FILTER_VALIDATE_BOOLEAN ) ) : ?>
96
 
97
  <tr>
98
+ <td><strong><?php _e( 'Subtotal', 'easy-digital-downloads' ); ?>:</strong></td>
99
  <td>
100
  <?php echo edd_payment_subtotal( $payment->ID ); ?>
101
  </td>