PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.22.3
GiveWP – Donation Plugin and Fundraising Platform v2.22.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 / PaymentGateways / Actions / CreateSubscriptionAction.php
give / src / PaymentGateways / Actions Last commit date
CreatePaymentAction.php 4 years ago CreateSubscriptionAction.php 4 years ago GetGatewayDataFromRequest.php 3 years ago RegisterPaymentGateways.php 3 years ago
CreateSubscriptionAction.php
139 lines
1 <?php
2
3 namespace Give\PaymentGateways\Actions;
4
5 use Give\PaymentGateways\DataTransferObjects\FormData;
6 use Give\PaymentGateways\DataTransferObjects\SubscriptionData;
7 use Give\Subscriptions\DataTransferObjects\SubscriptionArgs;
8 use Give\Subscriptions\Models\LegacySubscriber;
9 use Give\ValueObjects\DonorInfo;
10 use Give_Donor;
11
12 /**
13 * Class CreateSubscriptionAction
14 * @since 2.18.0
15 */
16 class CreateSubscriptionAction
17 {
18 /**
19 * Processes the recurring donation form and sends sets up the subscription data for hand-off to the gateway.
20 *
21 * @since 2.18.0
22 *
23 * @param int $donationId
24 * @param FormData $formData
25 * @param SubscriptionData $subscriptionData
26 *
27 * @return int
28 */
29 public function __invoke($donationId, FormData $formData, SubscriptionData $subscriptionData)
30 {
31 $donor = $this->getOrCreateDonor($formData->donorInfo);
32
33 $subscriptionArgs = $this->getSubscriptionData($formData, $subscriptionData);
34
35 return $this->createSubscription($donationId, $donor->id, $subscriptionArgs);
36 }
37
38 /**
39 * @param FormData $formData
40 * @param SubscriptionData $subscriptionData
41 *
42 * @return SubscriptionArgs
43 */
44 private function getSubscriptionData(FormData $formData, SubscriptionData $subscriptionData)
45 {
46 $subscriptionArgs = SubscriptionArgs::fromRequest([
47 'period' => $subscriptionData->period,
48 'times' => !empty($subscriptionData->times) ? (int)$subscriptionData->times : 0,
49 'frequency' => !empty($subscriptionData->frequency) ? (int)$subscriptionData->frequency : 1,
50 'formTitle' => $formData->formTitle,
51 'formId' => $formData->formId,
52 'priceId' => $formData->priceId,
53 'price' => $formData->price,
54 'status' => 'pending'
55 ]);
56
57 apply_filters('give_recurring_subscription_pre_gateway_args', $subscriptionArgs->toArray());
58
59 return $subscriptionArgs;
60 }
61
62 /**
63 * Get or create donor
64 *
65 * @since 2.18.0
66 *
67 * @param DonorInfo $donorInfo
68 *
69 * @return Give_Donor
70 */
71 private function getOrCreateDonor(DonorInfo $donorInfo)
72 {
73 $subscriber = empty($donorInfo->wpUserId) ?
74 new Give_Donor($donorInfo->email) :
75 new Give_Donor($donorInfo->wpUserId, true);
76
77 if (empty($subscriber->id)) {
78 $name = sprintf(
79 '%s %s',
80 (!empty($donorInfo->firstName) ? trim($donorInfo->firstName) : ''),
81 (!empty($donorInfo->lastName) ? trim($donorInfo->lastName) : '')
82 );
83
84 $subscriber_data = [
85 'name' => trim($name),
86 'email' => $donorInfo->email,
87 'user_id' => $donorInfo->wpUserId,
88 ];
89
90 $subscriber->create($subscriber_data);
91 }
92
93 return $subscriber;
94 }
95
96 /**
97 * Records subscription donations in the database and creates a give_payment record.
98 *
99 * @since 2.18.0
100 *
101 * @param int $donationId
102 * @param int $donorId
103 * @param SubscriptionArgs $subscriptionArgs
104 *
105 * @return int
106 */
107 private function createSubscription($donationId, $donorId, $subscriptionArgs)
108 {
109 // Set subscription_payment.
110 give_update_meta($donationId, '_give_subscription_payment', true);
111
112 // Now create the subscription record.
113 $subscriber = new LegacySubscriber($donorId);
114
115 $args = [
116 'form_id' => $subscriptionArgs->formId,
117 'parent_payment_id' => $donationId,
118 'status' => $subscriptionArgs->status,
119 'period' => $subscriptionArgs->periodInterval,
120 'frequency' => $subscriptionArgs->frequencyIntervalCount,
121 'initial_amount' => $subscriptionArgs->initialAmount,
122 'recurring_amount' => $subscriptionArgs->recurringAmount,
123 'recurring_fee_amount' => $subscriptionArgs->recurringFeeAmount,
124 'bill_times' => $subscriptionArgs->billTimes,
125 'expiration' => $subscriber->get_new_expiration(
126 $subscriptionArgs->formId,
127 $subscriptionArgs->priceId,
128 $subscriptionArgs->frequencyIntervalCount,
129 $subscriptionArgs->periodInterval
130 ),
131 'profile_id' => $subscriptionArgs->profileId,
132 'transaction_id' => $subscriptionArgs->transactionId,
133 'user_id' => $donorId,
134 ];
135
136 return $subscriber->add_subscription($args)->id;
137 }
138 }
139