PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.4
GiveWP – Donation Plugin and Fundraising Platform v3.16.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 / FormMigration / Steps / RecurringDonationOptions.php
give / src / FormMigration / Steps Last commit date
FormFields 2 years ago FormTemplate 2 years ago ActiveCampaign.php 2 years ago ConstantContact.php 2 years ago ConvertKit.php 2 years ago CurrencySwitcher.php 2 years ago DonationGoal.php 2 years ago DonationOptions.php 2 years ago DoubleTheDonation.php 2 years ago EmailSettings.php 2 years ago FeeRecovery.php 2 years ago FormExcerpt.php 2 years ago FormFeaturedImage.php 2 years ago FormFieldManager.php 2 years ago FormFields.php 2 years ago FormGrid.php 2 years ago FormMeta.php 2 years ago FormTaxonomies.php 1 year ago FormTitle.php 2 years ago FundsAndDesignations.php 2 years ago GiftAid.php 2 years ago Mailchimp.php 2 years ago MigrateMeta.php 2 years ago OfflineDonations.php 2 years ago PaymentGateways.php 2 years ago PdfSettings.php 2 years ago PerFormGateways.php 2 years ago RazorpayPerFormSettings.php 1 year ago RecurringDonationOptions.php 2 years ago TermsAndConditions.php 2 years ago
RecurringDonationOptions.php
144 lines
1 <?php
2
3 namespace Give\FormMigration\Steps;
4
5 use Give\FormBuilder\BlockModels\DonationAmountBlockModel;
6 use Give\FormMigration\Contracts\FormMigrationStep;
7 use Give\Subscriptions\ValueObjects\SubscriptionPeriod;
8
9 /**
10 * @since 3.0.0
11 */
12 class RecurringDonationOptions extends FormMigrationStep
13 {
14 /**
15 * @since 3.0.0
16 */
17 public function canHandle(): bool
18 {
19 return $this->formV2->isRecurringDonationsEnabled();
20 }
21
22 /**
23 * @since 3.0.0
24 */
25 public function process()
26 {
27 $block = $this->fieldBlocks->findByName('givewp/donation-amount');
28 $amountBlock = new DonationAmountBlockModel($block);
29
30 switch ($this->formV2->getRecurringDonationsOption()) {
31 case 'no':
32 $amountBlock->setRecurringEnabled(false);
33 break;
34 case 'yes_donor':
35 $this->handleDonorChoice($amountBlock);
36 break;
37 case 'yes_admin':
38 $this->handleAdminDefined($amountBlock);
39 break;
40 default:
41 break;
42 }
43 }
44
45 /**
46 * Donor's choice has its own set of options for period functionality and default period (checkbox opt-in).
47 *
48 * @since 3.0.0
49 */
50 protected function handleDonorChoice(DonationAmountBlockModel $amountBlock)
51 {
52 $amountBlock->setRecurringEnabled();
53 $amountBlock->setRecurringEnableOneTimeDonations();
54
55 // donor's choice of billing period means the donor selects the billing period
56 if ($this->formV2->isRecurringPeriodFunctionalityDonorsChoice()) {
57 // add all available subscription billing period options
58 $amountBlock->setRecurringBillingPeriodOptions(...SubscriptionPeriod::values());
59
60 if ($this->formV2->isRecurringDefaultCheckboxEnabled()) {
61 $defaultPeriod = $this->getBillingPeriodFromMeta(
62 $this->formV2->getRecurringPeriodDefaultDonorsChoice()
63 );
64
65 $amountBlock->setRecurringOptInDefaultBillingPeriod($defaultPeriod);
66 } else {
67 $amountBlock->setAttribute('recurringOptInDefaultBillingPeriod', 'one-time');
68 }
69 // admins choice of billing period means the admin selects the billing period
70 } elseif ($this->formV2->isRecurringPeriodFunctionalityAdminChoice()) {
71 $defaultBillingPeriod = $this->getBillingPeriodFromMeta($this->formV2->getRecurringPeriod());
72
73 $amountBlock->setRecurringBillingPeriodOptions($defaultBillingPeriod);
74
75 if ($this->formV2->isRecurringDefaultCheckboxEnabled()) {
76 $amountBlock->setRecurringOptInDefaultBillingPeriod($defaultBillingPeriod);
77 } else {
78 $amountBlock->setAttribute('recurringOptInDefaultBillingPeriod', 'one-time');
79 }
80 }
81
82 if (!empty($recurringBillingInterval = $this->formV2->getRecurringBillingInterval())) {
83 $amountBlock->setRecurringBillingInterval($recurringBillingInterval);
84 }
85
86 if (!empty($recurringLengthOfTime = $this->formV2->getRecurringLengthOfTime())) {
87 $amountBlock->setRecurringLengthOfTime($recurringLengthOfTime);
88 }
89 }
90
91 /**
92 * Admins choice works differently depending on the donation option value and if custom amount is enabled.
93 * If donation option is 'set', then it uses the general recurring options.
94 * If donation option is 'multi' and custom amount is enabled, then it uses the custom amount recurring options.
95 * If donation option is 'multi' and custom amount is disabled, then it uses the first donation level recurring options.
96 *
97 * @since 3.0.0
98 */
99 protected function handleAdminDefined(DonationAmountBlockModel $amountBlock)
100 {
101 $amountBlock->setRecurringEnabled();
102 $amountBlock->setRecurringEnableOneTimeDonations(false);
103
104 if ($this->formV2->isDonationOptionSet()) {
105 $billingPeriod = $this->getBillingPeriodFromMeta($this->formV2->getRecurringPeriod());
106
107 $amountBlock->setRecurringLengthOfTime($this->formV2->getRecurringLengthOfTime());
108 $amountBlock->setRecurringBillingInterval($this->formV2->getRecurringBillingInterval());
109 $amountBlock->setRecurringBillingPeriodOptions($billingPeriod);
110 $amountBlock->setRecurringOptInDefaultBillingPeriod($billingPeriod);
111 } elseif ($this->formV2->isDonationOptionMulti()) {
112 if ($this->formV2->isCustomAmountOptionEnabled()) {
113 $billingPeriod = $this->getBillingPeriodFromMeta($this->formV2->getRecurringCustomAmountPeriod());
114
115 $amountBlock->setRecurringLengthOfTime($this->formV2->getRecurringCustomAmountTimes());
116 $amountBlock->setRecurringBillingInterval($this->formV2->getRecurringCustomAmountInterval());
117 $amountBlock->setRecurringBillingPeriodOptions($billingPeriod);
118 $amountBlock->setRecurringOptInDefaultBillingPeriod($billingPeriod);
119 } else {
120 // get from donation levels
121 $donationLevels = $this->formV2->getDonationLevels();
122
123 if (!empty($donationLevels) && $donationLevels[0]['_give_recurring'] === 'yes') {
124 $level = $donationLevels[0];
125 $amountBlock->setRecurringLengthOfTime((int)$level["_give_times"]);
126 $amountBlock->setRecurringBillingInterval((int)$level["_give_period_interval"]);
127
128 $period = $this->getBillingPeriodFromMeta($level["_give_period"]);
129 $amountBlock->setRecurringBillingPeriodOptions($period);
130 $amountBlock->setRecurringOptInDefaultBillingPeriod($period);
131 }
132 }
133 }
134 }
135
136 /**
137 * @since 3.0.0
138 */
139 protected function getBillingPeriodFromMeta(string $period): SubscriptionPeriod
140 {
141 return SubscriptionPeriod::isValid($period) ? new SubscriptionPeriod($period) : SubscriptionPeriod::MONTH();
142 }
143 }
144