PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.17.0
GiveWP – Donation Plugin and Fundraising Platform v4.17.0
4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 All 256 releases
← All changes | src/Framework/PaymentGateways/Webhooks/EventHandlers/SubscriptionFirstDonationCompleted.php +23 -6 4.15.3 → 4.17.0 View file →
@@ -2,8 +2,9 @@
2 2
3 3 namespace Give\Framework\PaymentGateways\Webhooks\EventHandlers;
4 4
5 5 use Exception;
6 +use Give\Donations\Models\Donation;
6 7 use Give\Donations\Models\DonationNote;
7 8 use Give\Donations\ValueObjects\DonationStatus;
8 9 use Give\Framework\PaymentGateways\Log\PaymentGatewayLog;
9 10 use Give\Framework\PaymentGateways\Webhooks\EventHandlers\Actions\UpdateDonationStatus;
@@ -15,8 +16,9 @@
15 16 */
16 17 class SubscriptionFirstDonationCompleted
17 18 {
18 19 /**
20 + * @since 4.16.0 Add $donationId to support gateways that only receive the transaction ID via webhook (e.g. PayFast).
19 21 * @since 4.5.0 Add $setDonationComplete and $gatewaySubscriptionId parameters
20 22 * @since 3.6.0
21 23 */
22 24 public function __invoke(
@@ -23,17 +25,32 @@
23 25 string $gatewayTransactionId,
24 26 string $message = '',
25 27 bool $setSubscriptionActive = true,
26 28 bool $setDonationComplete = true,
27 - string $gatewaySubscriptionId = ''
29 + string $gatewaySubscriptionId = '',
30 + int $donationId = 0
28 31 )
29 32 {
30 - $donation = give()->donations->getByGatewayTransactionId($gatewayTransactionId);
33 + if ($donationId > 0) {
34 + $donation = Donation::find($donationId);
31 35
32 - if (! $donation && ! empty($gatewaySubscriptionId) && $subscription = give()->subscriptions->getByGatewaySubscriptionId($gatewaySubscriptionId)) {
33 - $donation = $subscription->initialDonation();
34 - $donation->gatewayTransactionId = $gatewayTransactionId;
35 - $donation->save();
36 + if ($donation && $donation->subscription) {
37 + $donation->gatewayTransactionId = $gatewayTransactionId;
38 + $donation->save();
39 +
40 + if ( ! empty($gatewaySubscriptionId) && empty($donation->subscription->gatewaySubscriptionId)) {
41 + $donation->subscription->gatewaySubscriptionId = $gatewaySubscriptionId;
42 + $donation->subscription->save();
43 + }
44 + }
45 + } else {
46 + $donation = give()->donations->getByGatewayTransactionId($gatewayTransactionId);
47 +
48 + if (! $donation && ! empty($gatewaySubscriptionId) && $subscription = give()->subscriptions->getByGatewaySubscriptionId($gatewaySubscriptionId)) {
49 + $donation = $subscription->initialDonation();
50 + $donation->gatewayTransactionId = $gatewayTransactionId;
51 + $donation->save();
52 + }
36 53 }
37 54
38 55 if ( ! $donation || ! $donation->type->isSubscription() || $donation->id !== $donation->subscription->initialDonation()->id) {
39 56 return;