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