PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
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 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / PaymentGateways / Webhooks / EventHandlers / SubscriptionFirstDonationCompleted.php
give / src / Framework / PaymentGateways / Webhooks / EventHandlers Last commit date
Actions 2 weeks ago DonationAbandoned.php 2 weeks ago DonationCancelled.php 2 weeks ago DonationCompleted.php 2 weeks ago DonationFailed.php 2 weeks ago DonationPending.php 2 weeks ago DonationPreapproval.php 2 weeks ago DonationProcessing.php 2 weeks ago DonationRefunded.php 2 weeks ago DonationRevoked.php 2 weeks ago SubscriptionActive.php 2 years ago SubscriptionCancelled.php 2 years ago SubscriptionCompleted.php 2 years ago SubscriptionExpired.php 2 years ago SubscriptionFailing.php 2 years ago SubscriptionFirstDonationCompleted.php 2 weeks ago SubscriptionPaused.php 1 year ago SubscriptionPending.php 1 year ago SubscriptionRenewalDonationCreated.php 1 year ago SubscriptionSuspended.php 2 years ago
SubscriptionFirstDonationCompleted.php
98 lines
1 <?php
2
3 namespace Give\Framework\PaymentGateways\Webhooks\EventHandlers;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use Give\Donations\Models\DonationNote;
8 use Give\Donations\ValueObjects\DonationStatus;
9 use Give\Framework\PaymentGateways\Log\PaymentGatewayLog;
10 use Give\Framework\PaymentGateways\Webhooks\EventHandlers\Actions\UpdateDonationStatus;
11 use Give\Framework\PaymentGateways\Webhooks\EventHandlers\Actions\UpdateSubscriptionStatus;
12 use Give\Subscriptions\ValueObjects\SubscriptionStatus;
13
14 /**
15 * @since 3.6.0
16 */
17 class SubscriptionFirstDonationCompleted
18 {
19 /**
20 * @since 4.16.0 Add $donationId to support gateways that only receive the transaction ID via webhook (e.g. PayFast).
21 * @since 4.5.0 Add $setDonationComplete and $gatewaySubscriptionId parameters
22 * @since 3.6.0
23 */
24 public function __invoke(
25 string $gatewayTransactionId,
26 string $message = '',
27 bool $setSubscriptionActive = true,
28 bool $setDonationComplete = true,
29 string $gatewaySubscriptionId = '',
30 int $donationId = 0
31 )
32 {
33 if ($donationId > 0) {
34 $donation = Donation::find($donationId);
35
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 }
53 }
54
55 if ( ! $donation || ! $donation->type->isSubscription() || $donation->id !== $donation->subscription->initialDonation()->id) {
56 return;
57 }
58
59 try {
60 if ($setDonationComplete && ! $donation->status->isComplete()) {
61 if (empty($message)) {
62 $message = __('Subscription First Donation Completed.', 'give');
63 }
64
65 (new UpdateDonationStatus())($donation, DonationStatus::COMPLETE(), $message);
66 } else {
67 if (empty($message)) {
68 $message = __('Subscription First Donation Updated.', 'give');
69 }
70
71 DonationNote::create([
72 'donationId' => $donation->id,
73 'content' => $message . ' ' . sprintf(__('%s transaction ID: %s', 'give'),
74 $donation->gateway()->getName(),
75 $donation->gatewayTransactionId
76 ),
77 ]);
78 }
79
80 if ($setSubscriptionActive && ! $donation->subscription->status->isActive()) {
81 (new UpdateSubscriptionStatus())($donation->subscription, SubscriptionStatus::ACTIVE(),
82 __('Subscription Active After The First Donation Got Completed.', 'give'));
83 }
84 } catch (Exception $e) {
85 PaymentGatewayLog::error(
86 sprintf('Subscription First Donation Failed! Error: %s',
87 $e->getCode() . ' - ' . $e->getMessage()),
88 [
89 'Donation Id' => $donation->id,
90 'Gateway Transaction Id' => $gatewayTransactionId,
91 'Gateway Subscription Id' => $donation->subscriptionId,
92 'message' => $message,
93 ]
94 );
95 }
96 }
97 }
98