PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.4
GiveWP – Donation Plugin and Fundraising Platform v4.16.4
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 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 1 month ago DonationAbandoned.php 1 month ago DonationCancelled.php 1 month ago DonationCompleted.php 1 month ago DonationFailed.php 1 month ago DonationPending.php 1 month ago DonationPreapproval.php 1 month ago DonationProcessing.php 1 month ago DonationRefunded.php 1 month ago DonationRevoked.php 1 month 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 1 month 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