PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / MultiFormGoals / ProgressBar / Model.php
give / src / MultiFormGoals / ProgressBar Last commit date
Block.php 2 years ago Model.php 1 year ago Query.php 5 months ago
Model.php
351 lines
1 <?php
2
3 namespace Give\MultiFormGoals\ProgressBar;
4
5 use Give\DonationForms\DonationQuery;
6
7 /**
8 * @since 3.16.0 Add $statusList property
9 * @since 2.9.0
10 */
11 class Model
12 {
13
14 // Settings
15 protected $ids;
16 protected $tags;
17 protected $categories;
18 protected $goal;
19 protected $enddate;
20 protected $color;
21
22 // Internal
23 protected $forms = [];
24 protected $donationRevenueResults;
25
26 protected $statusList = [];
27
28 /**
29 * Constructs and sets up setting variables for a new Progress Bar model
30 *
31 * @since 3.16.0 Add statusList support for $args
32 * @since 2.9.0
33 **@param array $args Arguments for new Progress Bar, including 'ids'
34 */
35 public function __construct(array $args)
36 {
37 isset($args['ids']) ? $this->ids = $args['ids'] : $this->ids = [];
38 isset($args['tags']) ? $this->tags = $args['tags'] : $this->tags = [];
39 isset($args['categories']) ? $this->categories = $args['categories'] : $this->categories = [];
40 isset($args['goal']) ? $this->goal = $args['goal'] : $this->goal = '1000';
41 isset($args['enddate']) ? $this->enddate = $args['enddate'] : $this->enddate = '';
42 isset($args['color']) ? $this->color = $args['color'] : $this->color = '#28c77b';
43 isset($args['statusList']) ? $this->statusList = $args['statusList'] : $this->statusList = ['publish'];
44 }
45
46 /**
47 * Get forms associated with Progress Bar
48 *
49 * @since 3.16.0 Use $statusList property
50 * @since 3.0.3 Return empty array instead of false
51 * @since 2.9.0
52 */
53 public function getForms(): array
54 {
55 if ( ! empty($this->forms)) {
56 return $this->forms;
57 }
58
59 $query_args = [
60 'post_type' => 'give_forms',
61 'post_status' => $this->statusList,
62 'post__in' => $this->ids,
63 'posts_per_page' => -1,
64 'fields' => 'ids',
65 'tax_query' => [
66 'relation' => 'AND',
67 ],
68 ];
69
70 if ( ! empty($this->tags)) {
71 $query_args['tax_query'][] = [
72 'taxonomy' => 'give_forms_tag',
73 'terms' => $this->tags,
74 ];
75 }
76
77 if ( ! empty($this->categories)) {
78 $query_args['tax_query'][] = [
79 'taxonomy' => 'give_forms_category',
80 'terms' => $this->categories,
81 ];
82 }
83
84 $query = new \WP_Query($query_args);
85
86 if ($query->posts) {
87 $this->forms = $query->posts;
88
89 return $query->posts;
90 } else {
91 return [];
92 }
93 }
94
95 /**
96 * @since 2.9.0
97 */
98 public function getDonations(): array
99 {
100 $query_args = [
101 'post_status' => [
102 'publish',
103 'give_subscription',
104 ],
105 'number' => -1,
106 'give_forms' => $this->getForms(),
107 ];
108 $query = new \Give_Payments_Query($query_args);
109
110 return $query->get_payments();
111 }
112
113 /**
114 * Get output markup for Progress Bar
115 *
116 * @since 2.9.0
117 */
118 public function getOutput(): string
119 {
120 ob_start();
121 $output = '';
122 require $this->getTemplatePath();
123 return ob_get_clean();
124 }
125
126 /**
127 * Returns query results for Donation Revenue.
128 * @since 2.9.0
129 * @return stdClass seem MultiFormGoals/ProgressBar/Query.php
130 */
131 public function getDonationRevenueResults()
132 {
133 if ( ! $this->donationRevenueResults) {
134 $query = new Query($this->getForms());
135 $this->donationRevenueResults = $query->getResults();
136 }
137
138 return $this->donationRevenueResults;
139 }
140
141 /**
142 * Get raw earnings value for Progress Bar
143 *
144 * @since 3.12.0 use DonationQuery
145 * @since 2.9.0
146 */
147 public function getTotal(): string
148 {
149 return (new DonationQuery())->forms($this->getForms())->sumIntendedAmount();
150 }
151
152 /**
153 * Get number of donations for Progress Bar
154 *
155 * @since 2.9.0
156 */
157 public function getDonationCount(): int
158 {
159 $results = $this->getDonationRevenueResults();
160
161 return $results->count;
162 }
163
164 /**
165 * Get formatted number of donations
166 *
167 * @since 3.19.1
168 */
169 public function getFormattedDonationCount(): string
170 {
171 return give_format_amount(
172 $this->getDonationCount(),
173 [
174 'sanitize' => false,
175 'decimal' => false,
176 'currency' => false,
177 ]
178 );
179 }
180
181 /**
182 * Get formatted total remaining (ex: $75)
183 *
184 * @since 2.9.0
185 */
186 protected function getFormattedTotalRemaining()
187 {
188 $total_remaining = ($this->getGoal() - $this->getTotal()) > 0 ? ($this->getGoal() - $this->getTotal()) : 0;
189
190 return give_currency_filter(
191 give_format_amount(
192 $total_remaining,
193 [
194 'sanitize' => false,
195 'decimal' => false,
196 ]
197 )
198 );
199 }
200
201 /**
202 * Get goal for Progress Bar
203 *
204 * @since 2.9.0
205 */
206 public function getGoal(): string
207 {
208 return $this->goal;
209 }
210
211 /**
212 * Get goal color for Progress Bar
213 *
214 * @since 2.9.0
215 */
216 public function getColor(): string
217 {
218 return $this->color;
219 }
220
221 /**
222 * Get template path for Progress Bar component template
223 * @since 2.9.0
224 **/
225 public function getTemplatePath()
226 {
227 return GIVE_PLUGIN_DIR . '/src/MultiFormGoals/resources/views/progressbar.php';
228 }
229
230 /**
231 * @since 2.24.0
232 *
233 * @return mixed|string
234 */
235 public function getFormattedTotal()
236 {
237 return give_currency_filter(
238 give_format_amount(
239 $this->getTotal(),
240 [
241 'sanitize' => false,
242 'decimal' => false,
243 ]
244 )
245 );
246 }
247
248 /**
249 * @since 2.24.0
250 *
251 * @return mixed|string
252 */
253 public function getFormattedGoal()
254 {
255 return give_currency_filter(
256 give_format_amount(
257 $this->getGoal(),
258 [
259 'sanitize' => false,
260 'decimal' => false,
261 ]
262 )
263 );
264 }
265
266 /**
267 * Get end date for Progress Bar
268 *
269 * @since 2.9.0
270 */
271 public function getEndDate(): string
272 {
273 return $this->enddate;
274 }
275
276 /**
277 * Get minutes remaining before Progress Bar end date
278 *
279 * @since 2.9.0
280 */
281 public function getMinutesRemaining(): string
282 {
283 $enddate = strtotime($this->getEndDate());
284 if ($enddate) {
285 $now = current_time('timestamp', false);
286
287 return $now < $enddate ? ($enddate - $now) / 60 : 0;
288 } else {
289 return false;
290 }
291 }
292
293 /**
294 * Get time remaining before Progress Bar end date
295 *
296 * @since 2.9.0
297 *
298 * @return float|int
299 */
300 public function getTimeToGo()
301 {
302 $minutes = $this->getMinutesRemaining();
303
304 switch ($minutes) {
305 case $minutes > 1440:
306 {
307 return round($minutes / 1440);
308 }
309 case $minutes < 1440 && $minutes > 60:
310 {
311 return round($minutes / 60);
312 }
313 case $minutes < 60:
314 {
315 return round($minutes);
316 }
317 default:
318 {
319 return 0;
320 }
321 }
322 }
323
324 /**
325 * Get time remaining before Progress Bar end date
326 *
327 * @since 2.9.0
328 */
329 public function getTimeToGoLabel(): string
330 {
331 $minutes = $this->getMinutesRemaining();
332
333 switch ($minutes) {
334 case $minutes > 1440:
335 {
336 return _n('day to go', 'days to go', $this->getTimeToGo(), 'give');
337 }
338 case $minutes < 1440 && $minutes > 60:
339 {
340 return _n('hour to go', 'hours to go', $this->getTimeToGo(), 'give');
341 }
342 case $minutes < 60:
343 {
344 return _n('minute to go', 'minutes to go', $this->getTimeToGo(), 'give');
345 }
346 default:
347 return '';
348 }
349 }
350 }
351