PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.3
GiveWP – Donation Plugin and Fundraising Platform v3.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 / MultiFormGoals / ProgressBar / Model.php
give / src / MultiFormGoals / ProgressBar Last commit date
Block.php 2 years ago Model.php 1 year ago Query.php 1 year ago
Model.php
334 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 total remaining (ex: $75)
166 *
167 * @since 2.9.0
168 */
169 protected function getFormattedTotalRemaining()
170 {
171 $total_remaining = ($this->getGoal() - $this->getTotal()) > 0 ? ($this->getGoal() - $this->getTotal()) : 0;
172
173 return give_currency_filter(
174 give_format_amount(
175 $total_remaining,
176 [
177 'sanitize' => false,
178 'decimal' => false,
179 ]
180 )
181 );
182 }
183
184 /**
185 * Get goal for Progress Bar
186 *
187 * @since 2.9.0
188 */
189 public function getGoal(): string
190 {
191 return $this->goal;
192 }
193
194 /**
195 * Get goal color for Progress Bar
196 *
197 * @since 2.9.0
198 */
199 public function getColor(): string
200 {
201 return $this->color;
202 }
203
204 /**
205 * Get template path for Progress Bar component template
206 * @since 2.9.0
207 **/
208 public function getTemplatePath()
209 {
210 return GIVE_PLUGIN_DIR . '/src/MultiFormGoals/resources/views/progressbar.php';
211 }
212
213 /**
214 * @since 2.24.0
215 *
216 * @return mixed|string
217 */
218 public function getFormattedTotal()
219 {
220 return give_currency_filter(
221 give_format_amount(
222 $this->getTotal(),
223 [
224 'sanitize' => false,
225 'decimal' => false,
226 ]
227 )
228 );
229 }
230
231 /**
232 * @since 2.24.0
233 *
234 * @return mixed|string
235 */
236 public function getFormattedGoal()
237 {
238 return give_currency_filter(
239 give_format_amount(
240 $this->getGoal(),
241 [
242 'sanitize' => false,
243 'decimal' => false,
244 ]
245 )
246 );
247 }
248
249 /**
250 * Get end date for Progress Bar
251 *
252 * @since 2.9.0
253 */
254 public function getEndDate(): string
255 {
256 return $this->enddate;
257 }
258
259 /**
260 * Get minutes remaining before Progress Bar end date
261 *
262 * @since 2.9.0
263 */
264 public function getMinutesRemaining(): string
265 {
266 $enddate = strtotime($this->getEndDate());
267 if ($enddate) {
268 $now = current_time('timestamp', false);
269
270 return $now < $enddate ? ($enddate - $now) / 60 : 0;
271 } else {
272 return false;
273 }
274 }
275
276 /**
277 * Get time remaining before Progress Bar end date
278 *
279 * @since 2.9.0
280 *
281 * @return float|int
282 */
283 public function getTimeToGo()
284 {
285 $minutes = $this->getMinutesRemaining();
286
287 switch ($minutes) {
288 case $minutes > 1440:
289 {
290 return round($minutes / 1440);
291 }
292 case $minutes < 1440 && $minutes > 60:
293 {
294 return round($minutes / 60);
295 }
296 case $minutes < 60:
297 {
298 return round($minutes);
299 }
300 default:
301 {
302 return 0;
303 }
304 }
305 }
306
307 /**
308 * Get time remaining before Progress Bar end date
309 *
310 * @since 2.9.0
311 */
312 public function getTimeToGoLabel(): string
313 {
314 $minutes = $this->getMinutesRemaining();
315
316 switch ($minutes) {
317 case $minutes > 1440:
318 {
319 return _n('day to go', 'days to go', $this->getTimeToGo(), 'give');
320 }
321 case $minutes < 1440 && $minutes > 60:
322 {
323 return _n('hour to go', 'hours to go', $this->getTimeToGo(), 'give');
324 }
325 case $minutes < 60:
326 {
327 return _n('minute to go', 'minutes to go', $this->getTimeToGo(), 'give');
328 }
329 default:
330 return '';
331 }
332 }
333 }
334