PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
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 / DonationForms / Controllers / DonateController.php
give / src / DonationForms / Controllers Last commit date
DonateController.php 2 years ago DonationConfirmationReceiptViewController.php 2 years ago DonationFormViewController.php 2 years ago
DonateController.php
143 lines
1 <?php
2
3 namespace Give\DonationForms\Controllers;
4
5 use Exception;
6 use Give\DonationForms\DataTransferObjects\DonateControllerData;
7 use Give\Donors\Models\Donor;
8 use Give\Framework\PaymentGateways\Controllers\GatewayPaymentController;
9 use Give\Framework\PaymentGateways\Controllers\GatewaySubscriptionController;
10 use Give\Framework\PaymentGateways\Exceptions\PaymentGatewayException;
11 use Give\Framework\PaymentGateways\PaymentGateway;
12 use Give\PaymentGateways\Actions\GetGatewayDataFromRequest;
13 use Give\Subscriptions\Models\Subscription;
14
15 /**
16 * @since 3.0.0
17 */
18 class DonateController
19 {
20 /**
21 * First we create a donation and/or subscription, then move on to the gateway processing
22 *
23 * @since 3.0.0
24 *
25 * @return void
26 * @throws Exception|PaymentGatewayException
27 */
28 public function donate(DonateControllerData $formData, PaymentGateway $gateway)
29 {
30 $donor = $this->getOrCreateDonor(
31 $formData->wpUserId,
32 $formData->email,
33 $formData->firstName,
34 $formData->lastName
35 );
36
37 if ($formData->donationType->isSingle()) {
38 $donation = $formData->toDonation($donor->id);
39 $donation->save();
40
41 do_action('givewp_donate_controller_donation_created', $formData, $donation, null);
42
43 $gatewayData = apply_filters(
44 "givewp_create_payment_gateway_data_{$gateway::id()}",
45 (new GetGatewayDataFromRequest)(),
46 $donation
47 );
48
49 $controller = new GatewayPaymentController($gateway);
50 $controller->create($donation, $gatewayData);
51 }
52
53 if ($formData->donationType->isSubscription()) {
54 $this->validateGatewaySupportsSubscriptions($gateway);
55
56 $subscription = $formData->toSubscription($donor->id);
57 $subscription->save();
58
59 $donation = $formData->toInitialSubscriptionDonation($donor->id, $subscription->id);
60 $donation->save();
61
62 do_action('givewp_donate_controller_donation_created', $formData, $donation, $subscription);
63
64 do_action('givewp_donate_controller_subscription_created', $formData, $subscription, $donation);
65
66 $gatewayData = apply_filters(
67 "givewp_create_subscription_gateway_data_{$gateway::id()}",
68 (new GetGatewayDataFromRequest)(),
69 $donation,
70 $subscription
71 );
72
73 $controller = new GatewaySubscriptionController($gateway);
74 $controller->create($donation, $subscription, $gatewayData);
75 }
76 }
77
78 /**
79 * @since 3.0.0
80 *
81 * @param int|null $userId
82 * @param string $donorEmail
83 * @param string $firstName
84 * @param string $lastName
85 *
86 * @return Donor
87 * @throws Exception
88 */
89 private function getOrCreateDonor(
90 int $userId,
91 string $donorEmail,
92 string $firstName,
93 string $lastName
94 ): Donor {
95 // first check if donor exists as a user
96 $donor = Donor::whereUserId($userId);
97
98 // If they exist as a donor & user then make sure they don't already own this email before adding to their additional emails list..
99 if ($donor && !$donor->hasEmail($donorEmail)) {
100 $donor->additionalEmails = array_merge($donor->additionalEmails ?? [], [$donorEmail]);
101 $donor->save();
102 }
103
104 // if donor is not a user than check for any donor matching this email
105 if (!$donor) {
106 $donor = Donor::whereEmail($donorEmail);
107 }
108
109 // if no donor exists then create a new one using their personal information from the form.
110 if (!$donor) {
111 $donor = Donor::create([
112 'name' => trim("$firstName $lastName"),
113 'firstName' => $firstName,
114 'lastName' => $lastName,
115 'email' => $donorEmail,
116 'userId' => $userId ?: null
117 ]);
118 }
119
120 return $donor;
121 }
122
123 /**
124 * @throws PaymentGatewayException
125 */
126 private function validateGatewaySupportsSubscriptions(PaymentGateway $gateway)
127 {
128 if (!$gateway->supportsSubscriptions()) {
129 $gatewayName = $gateway->getName();
130
131 throw new PaymentGatewayException(
132 sprintf(
133 __(
134 "[%s] This payment gateway does not support recurring payments, please try selecting another payment gateway.",
135 'give'
136 ),
137 $gatewayName
138 )
139 );
140 }
141 }
142 }
143