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