PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.4.0
GiveWP – Donation Plugin and Fundraising Platform v3.4.0
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 / Actions / ConvertDonationAmountBlockToFieldsApi.php
give / src / DonationForms / Actions Last commit date
ConvertConsentBlockToFieldsApi.php 2 years ago ConvertDonationAmountBlockToFieldsApi.php 2 years ago ConvertDonationFormBlocksToFieldsApi.php 2 years ago ConvertQueryDataToDonationForm.php 2 years ago DispatchDonateControllerDonationCreatedListeners.php 2 years ago DispatchDonateControllerSubscriptionCreatedListeners.php 2 years ago GenerateAuthUrl.php 2 years ago GenerateDonateRouteSignatureArgs.php 2 years ago GenerateDonateRouteUrl.php 2 years ago GenerateDonationConfirmationReceiptUrl.php 2 years ago GenerateDonationConfirmationReceiptViewRouteUrl.php 2 years ago GenerateDonationFormPreviewRouteUrl.php 2 years ago GenerateDonationFormValidationRouteUrl.php 2 years ago GenerateDonationFormViewRouteUrl.php 2 years ago GetOrCreateDonor.php 2 years ago SanitizeDonationFormPreviewRequest.php 2 years ago StoreBackwardsCompatibleFormMeta.php 2 years ago
ConvertDonationAmountBlockToFieldsApi.php
168 lines
1 <?php
2
3 namespace Give\DonationForms\Actions;
4
5 use Give\DonationForms\Rules\DonationTypeRule;
6 use Give\DonationForms\Rules\Max;
7 use Give\DonationForms\Rules\Min;
8 use Give\DonationForms\Rules\Size;
9 use Give\DonationForms\Rules\SubscriptionFrequencyRule;
10 use Give\DonationForms\Rules\SubscriptionInstallmentsRule;
11 use Give\DonationForms\Rules\SubscriptionPeriodRule;
12 use Give\Donations\ValueObjects\DonationType;
13 use Give\FormBuilder\BlockModels\DonationAmountBlockModel;
14 use Give\Framework\FieldsAPI\Amount;
15 use Give\Framework\FieldsAPI\DonationAmount;
16 use Give\Framework\FieldsAPI\Exceptions\EmptyNameException;
17 use Give\Framework\FieldsAPI\Exceptions\NameCollisionException;
18 use Give\Framework\FieldsAPI\Field;
19 use Give\Framework\FieldsAPI\Group;
20 use Give\Framework\FieldsAPI\Hidden;
21 use Give\Framework\FieldsAPI\Option;
22 use Give\Framework\FieldsAPI\Radio;
23 use Give\Subscriptions\ValueObjects\SubscriptionPeriod;
24
25
26 class ConvertDonationAmountBlockToFieldsApi
27 {
28
29 /**
30 * @since 3.0.0
31 *
32 * @throws EmptyNameException
33 * @throws NameCollisionException
34 */
35 public function __invoke(DonationAmountBlockModel $block, string $currency): DonationAmount
36 {
37 $amountField = DonationAmount::make('donationAmount')->tap(function (Group $group) use ($block, $currency) {
38 $amountRules = ['required', 'numeric'];
39
40 if (!$block->isCustomAmountEnabled() &&
41 $block->getPriceOption() === 'set') {
42 $size = $block->getSetPrice();
43
44 $amountRules[] = new Size($size);
45 }
46
47 if ($block->isCustomAmountEnabled()) {
48 if ($block->hasAttribute('customAmountMin')) {
49 $amountRules[] = new Min($block->getAttribute('customAmountMin'));
50 }
51
52 if ($block->hasAttribute('customAmountMax') && $block->getAttribute('customAmountMax') > 0) {
53 $amountRules[] = new Max($block->getAttribute('customAmountMax'));
54 }
55 }
56
57 /** @var Amount $amountNode */
58 $amountNode = $group->getNodeByName('amount');
59 $defaultLevel = $block->getDefaultLevel() > 0 ? $block->getDefaultLevel() : 10;
60 $amountNode
61 ->label($block->getLabel())
62 ->levels(...$block->getLevels())
63 ->allowLevels($block->getPriceOption() === 'multi')
64 ->allowCustomAmount($block->isCustomAmountEnabled())
65 ->fixedAmountValue($block->getSetPrice())
66 ->defaultValue(
67 $block->getPriceOption() === 'set' ?
68 $block->getSetPrice() : $defaultLevel
69 )
70 ->rules(...$amountRules);
71
72 /** @var Hidden $currencyNode */
73 $currencyNode = $group->getNodeByName('currency');
74 $currencyNode
75 ->defaultValue($currency)
76 ->rules('required', 'currency');
77 });
78
79 if (!$block->isRecurringEnabled()) {
80 $donationType = Hidden::make('donationType')
81 ->defaultValue(DonationType::SINGLE()->getValue())
82 ->rules(new DonationTypeRule());
83
84 $amountField->donationType($donationType);
85 } else {
86 $subscriptionPeriod = $this->getRecurringAmountPeriodField($block);
87
88 $donationTypeDefault = $subscriptionPeriod->getDefaultValue() === 'one-time' ? DonationType::SINGLE(
89 )->getValue() : DonationType::SUBSCRIPTION()->getValue();
90
91 $donationType = Hidden::make('donationType')
92 ->defaultValue($donationTypeDefault)
93 ->rules(new DonationTypeRule());
94
95 $subscriptionFrequency = Hidden::make('subscriptionFrequency')
96 ->defaultValue($block->getRecurringBillingInterval())
97 ->rules(new SubscriptionFrequencyRule());
98
99 $subscriptionInstallments = Hidden::make('subscriptionInstallments')
100 ->defaultValue($block->getRecurringLengthOfTime())
101 ->rules(new SubscriptionInstallmentsRule());
102
103 $amountField
104 ->enableSubscriptions()
105 ->subscriptionDetailsAreFixed($block->isRecurringFixed())
106 ->donationType($donationType)
107 ->subscriptionPeriod($subscriptionPeriod)
108 ->subscriptionFrequency($subscriptionFrequency)
109 ->subscriptionInstallments($subscriptionInstallments);
110 }
111
112 return $amountField;
113 }
114
115 /**
116 * @since 3.0.0
117 *
118 * @throws EmptyNameException
119 */
120 protected function getRecurringAmountPeriodField(DonationAmountBlockModel $block): Field
121 {
122 $recurringBillingPeriodOptions = $block->getRecurringBillingPeriodOptions();
123
124 // if recurring is fixed - fields are all hidden
125 if ($block->isRecurringFixed()) {
126 $fixedBillingPeriod = $recurringBillingPeriodOptions[0];
127
128 $subscriptionPeriodDefaultValue = SubscriptionPeriod::isValid(
129 $fixedBillingPeriod
130 ) ? (new SubscriptionPeriod($fixedBillingPeriod))->getValue() : SubscriptionPeriod::MONTH()->getValue();
131
132 return Hidden::make('subscriptionPeriod')
133 ->defaultValue($subscriptionPeriodDefaultValue)
134 ->rules(new SubscriptionPeriodRule());
135 }
136
137 if ($block->isRecurringEnableOneTimeDonations()) {
138 $recurringBillingPeriodOptions = array_merge(['one-time'], $recurringBillingPeriodOptions);
139 }
140
141 $options = array_map(static function ($option) {
142 if (SubscriptionPeriod::isValid($option)) {
143 $subscriptionPeriod = new SubscriptionPeriod($option);
144
145 return new Option($subscriptionPeriod->getValue(), $subscriptionPeriod->label(0));
146 }
147
148 return new Option($option, $option === 'one-time' ? __('One Time', 'give') : ucfirst($option));
149 }, $recurringBillingPeriodOptions);
150
151 $recurringOptInDefault = $block->getRecurringOptInDefaultBillingPeriod();
152
153 if (SubscriptionPeriod::isValid($recurringOptInDefault)) {
154 $subscriptionPeriod = new SubscriptionPeriod($recurringOptInDefault);
155
156 $defaultValue = $subscriptionPeriod->getValue();
157 } else {
158 $defaultValue = 'one-time';
159 }
160
161 return Radio::make('subscriptionPeriod')
162 ->defaultValue($defaultValue)
163 ->label(__('Choose your donation frequency', 'give'))
164 ->options(...$options)
165 ->rules(new SubscriptionPeriodRule());
166 }
167 }
168