PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.1.2
GiveWP – Donation Plugin and Fundraising Platform v3.1.2
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 / 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
137 lines
1 <?php
2
3 namespace Give\DonationForms\Controllers;
4
5 use Exception;
6 use Give\DonationForms\Actions\GetOrCreateDonor;
7 use Give\DonationForms\DataTransferObjects\DonateControllerData;
8 use Give\Donors\Models\Donor;
9 use Give\Framework\PaymentGateways\Controllers\GatewayPaymentController;
10 use Give\Framework\PaymentGateways\Controllers\GatewaySubscriptionController;
11 use Give\Framework\PaymentGateways\Exceptions\PaymentGatewayException;
12 use Give\Framework\PaymentGateways\PaymentGateway;
13 use Give\PaymentGateways\Actions\GetGatewayDataFromRequest;
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 * @unreleased Pass the form ID to match updated signature for getOrCreateDonor().
24 * @since 3.0.0
25 *
26 * @return void
27 * @throws Exception|PaymentGatewayException
28 */
29 public function donate(DonateControllerData $formData, PaymentGateway $gateway)
30 {
31 $donor = $this->getOrCreateDonor(
32 $formData->formId,
33 $formData->wpUserId,
34 $formData->email,
35 $formData->firstName,
36 $formData->lastName,
37 $formData->honorific
38 );
39
40 if ($formData->donationType->isSingle()) {
41 $donation = $formData->toDonation($donor->id);
42 $donation->save();
43
44 do_action('givewp_donate_controller_donation_created', $formData, $donation, null);
45
46 $gatewayData = apply_filters(
47 "givewp_create_payment_gateway_data_{$gateway::id()}",
48 (new GetGatewayDataFromRequest)(),
49 $donation
50 );
51
52 $controller = new GatewayPaymentController($gateway);
53 $controller->create($donation, $gatewayData);
54 }
55
56 if ($formData->donationType->isSubscription()) {
57 $this->validateGatewaySupportsSubscriptions($gateway);
58
59 $subscription = $formData->toSubscription($donor->id);
60 $subscription->save();
61
62 $donation = $formData->toInitialSubscriptionDonation($donor->id, $subscription->id);
63 $donation->save();
64
65 do_action('givewp_donate_controller_donation_created', $formData, $donation, $subscription);
66
67 do_action('givewp_donate_controller_subscription_created', $formData, $subscription, $donation);
68
69 $gatewayData = apply_filters(
70 "givewp_create_subscription_gateway_data_{$gateway::id()}",
71 (new GetGatewayDataFromRequest)(),
72 $donation,
73 $subscription
74 );
75
76 $controller = new GatewaySubscriptionController($gateway);
77 $controller->create($donation, $subscription, $gatewayData);
78 }
79 }
80
81 /**
82 * @unreleased Added $formId to the signature for passing to do_action hooks. Added honorific and use GetOrCreateDonor action
83 * @since 3.0.0
84 *
85 * @throws Exception
86 */
87 private function getOrCreateDonor(
88 int $formId,
89 ?int $userId,
90 string $donorEmail,
91 string $firstName,
92 string $lastName,
93 ?string $honorific
94 ): Donor {
95 $getOrCreateDonorAction = new GetOrCreateDonor();
96
97 $donor = $getOrCreateDonorAction(
98 $userId,
99 $donorEmail,
100 $firstName,
101 $lastName,
102 $honorific
103 );
104
105 if ($getOrCreateDonorAction->donorCreated) {
106 /**
107 * @unreleased Add a new do_action hook to differentiate when a v3 form creates a new donor.
108 * @param Donor $donor
109 * @param int $formId
110 */
111 do_action('givewp_donate_controller_donor_created', $donor, $formId);
112 }
113
114 return $donor;
115 }
116
117 /**
118 * @throws PaymentGatewayException
119 */
120 private function validateGatewaySupportsSubscriptions(PaymentGateway $gateway)
121 {
122 if (!$gateway->supportsSubscriptions()) {
123 $gatewayName = $gateway->getName();
124
125 throw new PaymentGatewayException(
126 sprintf(
127 __(
128 "[%s] This payment gateway does not support recurring payments, please try selecting another payment gateway.",
129 'give'
130 ),
131 $gatewayName
132 )
133 );
134 }
135 }
136 }
137