PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.21.2
GiveWP – Donation Plugin and Fundraising Platform v2.21.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 4 years ago Query.php 4 years ago
Model.php
316 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 **@return array
43 */
44 protected function getForms()
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 false;
83 }
84 }
85
86 protected function getDonations()
87 {
88 $query_args = [
89 'post_status' => [
90 'publish',
91 'give_subscription',
92 ],
93 'number' => -1,
94 'give_forms' => $this->getForms(),
95 ];
96 $query = new \Give_Payments_Query($query_args);
97
98 return $query->get_payments();
99 }
100
101 /**
102 * Get output markup for Progress Bar
103 *
104 * @since 2.9.0
105 **@return string
106 */
107 public function getOutput()
108 {
109 ob_start();
110 $output = '';
111 require $this->getTemplatePath();
112 $output = ob_get_contents();
113 ob_end_clean();
114
115 return $output;
116 }
117
118 /**
119 * Returns query results for Donation Revenue.
120 * @since 2.9.0
121 * @return stdClass seem MultiFormGoals/ProgressBar/Query.php
122 */
123 protected function getDonationRevenueResults()
124 {
125 if ( ! $this->donationRevenueResults) {
126 $query = new Query($this->getForms());
127 $this->donationRevenueResults = $query->getResults();
128 }
129
130 return $this->donationRevenueResults;
131 }
132
133 /**
134 * Get raw earnings value for Progress Bar
135 *
136 * @since 2.9.0
137 **@return string
138 */
139 protected function getTotal()
140 {
141 $query = new Query($this->getForms());
142 $results = $query->getResults();
143
144 return Money::ofMinor($results->total, give_get_option('currency'))->getAmount();
145 }
146
147 /**
148 * Get number of donations for Progress Bar
149 *
150 * @since 2.9.0
151 **@return int
152 */
153 protected function getDonationCount()
154 {
155 $results = $this->getDonationRevenueResults();
156
157 return $results->count;
158 }
159
160 /**
161 * Get formatted total remaining (ex: $75)
162 *
163 * @since 2.9.0
164 */
165 protected function getFormattedTotalRemaining()
166 {
167 $total_remaining = ($this->getGoal() - $this->getTotal()) > 0 ? ($this->getGoal() - $this->getTotal()) : 0;
168
169 return give_currency_filter(
170 give_format_amount(
171 $total_remaining,
172 [
173 'sanitize' => false,
174 'decimal' => false,
175 ]
176 )
177 );
178 }
179
180 /**
181 * Get goal for Progress Bar
182 *
183 * @since 2.9.0
184 **@return string
185 */
186 protected function getGoal()
187 {
188 return $this->goal;
189 }
190
191 /**
192 * Get goal color for Progress Bar
193 *
194 * @since 2.9.0
195 **@return string
196 */
197 protected function getColor()
198 {
199 return $this->color;
200 }
201
202 /**
203 * Get template path for Progress Bar component template
204 * @since 2.9.0
205 **/
206 public function getTemplatePath()
207 {
208 return GIVE_PLUGIN_DIR . '/src/MultiFormGoals/resources/views/progressbar.php';
209 }
210
211 protected 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 protected function getFormattedGoal()
225 {
226 return give_currency_filter(
227 give_format_amount(
228 $this->getGoal(),
229 [
230 'sanitize' => false,
231 'decimal' => false,
232 ]
233 )
234 );
235 }
236
237 /**
238 * Get end date for Progress Bar
239 *
240 * @since 2.9.0
241 **@return string
242 */
243 protected function getEndDate()
244 {
245 return $this->enddate;
246 }
247
248 /**
249 * Get minutes remaining before Progress Bar end date
250 *
251 * @since 2.9.0
252 **@return string
253 */
254 protected function getMinutesRemaining()
255 {
256 $enddate = strtotime($this->getEndDate());
257 if ($enddate) {
258 $now = current_time('timestamp', false);
259
260 return $now < $enddate ? ($enddate - $now) / 60 : 0;
261 } else {
262 return false;
263 }
264 }
265
266 /**
267 * Get time remaining before Progress Bar end date
268 *
269 * @since 2.9.0
270 **@return string
271 */
272 protected function getTimeToGo()
273 {
274 $minutes = $this->getMinutesRemaining();
275 switch ($minutes) {
276 case $minutes > 1440:
277 {
278 return round($minutes / 1440);
279 }
280 case $minutes < 1440 && $minutes > 60:
281 {
282 return round($minutes / 60);
283 }
284 case $minutes < 60:
285 {
286 return round($minutes);
287 }
288 }
289 }
290
291 /**
292 * Get time remaining before Progress Bar end date
293 *
294 * @since 2.9.0
295 **@return string
296 */
297 protected function getTimeToGoLabel()
298 {
299 $minutes = $this->getMinutesRemaining();
300 switch ($minutes) {
301 case $minutes > 1440:
302 {
303 return _n('day to go', 'days to go', $this->getTimeToGo(), 'give');
304 }
305 case $minutes < 1440 && $minutes > 60:
306 {
307 return _n('hour to go', 'hours to go', $this->getTimeToGo(), 'give');
308 }
309 case $minutes < 60:
310 {
311 return _n('minute to go', 'minutes to go', $this->getTimeToGo(), 'give');
312 }
313 }
314 }
315 }
316