PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.8.1
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 / Subscriptions / DataTransferObjects / SubscriptionArgs.php
give / src / Subscriptions / DataTransferObjects Last commit date
SubscriptionArgs.php 3 years ago SubscriptionNoteQueryData.php 9 months ago SubscriptionQueryData.php 3 years ago
SubscriptionArgs.php
181 lines
1 <?php
2
3 namespace Give\Subscriptions\DataTransferObjects;
4
5 /**
6 * Class SubscriptionArgs
7 * @since 2.18.0
8 */
9 final class SubscriptionArgs
10 {
11 /**
12 * @var string
13 */
14 public $period;
15 /**
16 * @var string
17 */
18 public $times;
19 /**
20 * @var string
21 */
22 public $frequency;
23 /**
24 * @var string
25 */
26 public $formTitle;
27 /**
28 * @var string
29 */
30 public $formId;
31 /**
32 * @var string
33 */
34 public $priceId;
35 /**
36 * @var string
37 */
38 public $price;
39 /**
40 * @var string
41 */
42 public $status;
43 /**
44 * @var float|int|string
45 */
46 public $initialAmount;
47 /**
48 * @var float|int|string
49 */
50 public $recurringAmount;
51 /**
52 * @var string
53 */
54 public $periodInterval;
55 /**
56 * @var float|int
57 */
58 public $frequencyIntervalCount;
59 /**
60 * @var int
61 */
62 public $billTimes;
63 /**
64 * @var int|mixed
65 */
66 public $recurringFeeAmount;
67 /**
68 * @var mixed|string
69 */
70 public $profileId;
71 /**
72 * @var mixed|string
73 */
74 public $transactionId;
75
76 /**
77 * Convert data from request into DTO
78 *
79 * @since 2.18.0
80 *
81 * @return self
82 */
83 public static function fromRequest(array $request)
84 {
85 $self = new static();
86
87 $self->period = $request['period'];
88 $self->times = $request['times'];
89 $self->frequency = $request['frequency'];
90 $self->formTitle = $request['formTitle'];
91 $self->formId = $request['formId'];
92 $self->priceId = $request['priceId'];
93 $self->price = $request['price'];
94 $self->status = $request['status'];
95 $self->initialAmount = give_sanitize_amount_for_db($self->price);
96 $self->recurringAmount = give_sanitize_amount_for_db($self->price);
97 $self->recurringFeeAmount = isset($request['recurringFeeAmount']) ? $request['recurringFeeAmount'] : 0;
98 $self->profileId = isset($request['profileId']) ? $request['profileId'] : '';
99 $self->transactionId = isset($request['transactionId']) ? $request['transactionId'] : '';
100 $self->periodInterval = self::get_interval($self->period, $self->frequency);
101 $self->frequencyIntervalCount = self::get_interval_count($self->period, $self->frequency);
102
103 // @phpstan-ignore-next-line function is undefined in add-on. Also, the calling class, CreateSubscriptionAction, does not seem to be used...
104 $self->billTimes = give_recurring_calculate_times($self->times, $self->frequency);
105
106 return $self;
107 }
108
109 /**
110 * @since 2.18.0
111 *
112 * @return array
113 */
114 public function toArray()
115 {
116 return [
117 'name' => $this->formTitle,
118 'id' => $this->formId,
119 // @TODO Deprecate w/ backwards compatiblity.
120 'form_id' => $this->formId,
121 'price_id' => $this->priceId,
122 'initial_amount' => $this->initialAmount,
123 // add fee here in future.
124 'recurring_amount' => $this->recurringAmount,
125 'period' => $this->periodInterval,
126 'frequency' => $this->frequencyIntervalCount,
127 // Passed interval. Example: charge every 3 weeks.
128 'bill_times' => $this->billTimes,
129 'profile_id' => '',
130 // Profile ID for this subscription - This is set by the payment gateway.
131 'transaction_id' => '',
132 // Transaction ID for this subscription - This is set by the payment gateway.
133 'status' => 'pending',
134 ];
135 }
136
137 /**
138 * Gets interval length and interval unit for Authorize.net based on Give subscription period.
139 *
140 * @since 2.18.0
141 *
142 * @param int $frequency
143 *
144 * @param string $period
145 *
146 * @return string
147 */
148 private static function get_interval($period, $frequency)
149 {
150 $interval = $period;
151
152 if ($period === 'quarter') {
153 $interval = 'month';
154 }
155
156 return $interval;
157 }
158
159 /**
160 * Gets interval length and interval unit for Authorize.net based on Give subscription period.
161 *
162 * @since 2.18.0
163 *
164 * @param int $frequency
165 *
166 * @param string $period
167 *
168 * @return float|int
169 */
170 private static function get_interval_count($period, $frequency)
171 {
172 $interval_count = $frequency;
173
174 if ($period === 'quarter') {
175 $interval_count = 3 * $frequency;
176 }
177
178 return $interval_count;
179 }
180 }
181