PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.0.7
GiveWP – Donation Plugin and Fundraising Platform v2.0.7
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 / includes / forms / functions.php
give / includes / forms Last commit date
functions.php 7 years ago template.php 7 years ago widget.php 7 years ago
functions.php
1040 lines
1 <?php
2 /**
3 * Give Form Functions
4 *
5 * @package WordImpress
6 * @subpackage Includes/Forms
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.1
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Filter: Do not show the Give shortcut button on Give Forms CPT
19 *
20 * @return bool
21 */
22 function give_shortcode_button_condition() {
23
24 global $typenow;
25
26 if ( $typenow != 'give_forms' ) {
27 return true;
28 }
29
30 return false;
31 }
32
33 add_filter( 'give_shortcode_button_condition', 'give_shortcode_button_condition' );
34
35
36 /**
37 * Get the form ID from the form $args
38 *
39 * @param array $args
40 *
41 * @return int|false
42 */
43 function get_form_id_from_args( $args ) {
44
45 if ( isset( $args['form_id'] ) && $args['form_id'] != 0 ) {
46
47 return intval( $args['form_id'] );
48 }
49
50 return false;
51 }
52
53 /**
54 * Checks whether floating labels is enabled for the form ID in $args
55 *
56 * @since 1.1
57 *
58 * @param array $args
59 *
60 * @return bool
61 */
62 function give_is_float_labels_enabled( $args ) {
63
64 $float_labels = '';
65
66 if ( ! empty( $args['float_labels'] ) ) {
67 $float_labels = $args['float_labels'];
68 }
69
70 if ( empty( $float_labels ) ) {
71 $float_labels = give_get_meta( $args['form_id'], '_give_form_floating_labels', true );
72 }
73
74 if ( empty( $float_labels ) || ( 'global' === $float_labels ) ) {
75 $float_labels = give_get_option( 'floatlabels', 'disabled' );
76 }
77
78 return give_is_setting_enabled( $float_labels );
79 }
80
81 /**
82 * Determines if a user can checkout or not
83 *
84 * Allows themes and plugins to set donation checkout conditions
85 *
86 * @since 1.0
87 *
88 * @return bool Can user checkout?
89 */
90 function give_can_checkout() {
91
92 $can_checkout = true;
93
94 return (bool) apply_filters( 'give_can_checkout', $can_checkout );
95 }
96
97 /**
98 * Retrieve the Success page URI
99 *
100 * @access public
101 * @since 1.0
102 *
103 * @return string
104 */
105 function give_get_success_page_uri() {
106 $give_options = give_get_settings();
107
108 $success_page = isset( $give_options['success_page'] ) ? get_permalink( absint( $give_options['success_page'] ) ) : get_bloginfo( 'url' );
109
110 return apply_filters( 'give_get_success_page_uri', $success_page );
111 }
112
113 /**
114 * Determines if we're currently on the Success page.
115 *
116 * @since 1.0
117 *
118 * @return bool True if on the Success page, false otherwise.
119 */
120 function give_is_success_page() {
121 $give_options = give_get_settings();
122 $is_success_page = isset( $give_options['success_page'] ) ? is_page( $give_options['success_page'] ) : false;
123
124 return apply_filters( 'give_is_success_page', $is_success_page );
125 }
126
127 /**
128 * Send To Success Page
129 *
130 * Sends the user to the success page.
131 *
132 * @param string $query_string
133 *
134 * @access public
135 * @since 1.0
136 * @return void
137 */
138 function give_send_to_success_page( $query_string = null ) {
139
140 $redirect = give_get_success_page_uri();
141
142 if ( $query_string ) {
143 $redirect .= $query_string;
144 }
145
146 $gateway = isset( $_REQUEST['give-gateway'] ) ? $_REQUEST['give-gateway'] : '';
147
148 wp_redirect( apply_filters( 'give_success_page_redirect', $redirect, $gateway, $query_string ) );
149 give_die();
150 }
151
152
153 /**
154 * Send back to donation form.
155 *
156 * Used to redirect a user back to the donation form if there are errors present.
157 *
158 * @param array|string $args
159 *
160 * @access public
161 * @since 1.0
162 * @return Void
163 */
164 function give_send_back_to_checkout( $args = array() ) {
165
166 $url = isset( $_POST['give-current-url'] ) ? sanitize_text_field( $_POST['give-current-url'] ) : '';
167 $form_id = 0;
168
169 // Set the form_id.
170 if ( isset( $_POST['give-form-id'] ) ) {
171 $form_id = sanitize_text_field( $_POST['give-form-id'] );
172 }
173
174 // Need a URL to continue. If none, redirect back to single form.
175 if ( empty( $url ) ) {
176 wp_safe_redirect( get_permalink( $form_id ) );
177 give_die();
178 }
179
180 $defaults = array(
181 'form-id' => (int) $form_id,
182 );
183
184 // Set the $level_id.
185 if ( isset( $_POST['give-price-id'] ) ) {
186 $defaults['level-id'] = sanitize_text_field( $_POST['give-price-id'] );
187 }
188
189 // Check for backward compatibility.
190 if ( is_string( $args ) ) {
191 $args = str_replace( '?', '', $args );
192 }
193
194 $args = wp_parse_args( $args, $defaults );
195
196 // Merge URL query with $args to maintain third-party URL parameters after redirect.
197 $url_data = wp_parse_url( $url );
198
199 // Check if an array to prevent notices before parsing.
200 if ( isset( $url_data['query'] ) && ! empty( $url_data['query'] ) ) {
201 parse_str( $url_data['query'], $query );
202
203 // Precaution: don't allow any CC info.
204 unset( $query['card_number'] );
205 unset( $query['card_cvc'] );
206
207 } else {
208 // No $url_data so pass empty array.
209 $query = array();
210 }
211
212 $new_query = array_merge( $args, $query );
213 $new_query_string = http_build_query( $new_query );
214
215 // Assemble URL parts.
216 $redirect = home_url( '/' . $url_data['path'] . '?' . $new_query_string . '#give-form-' . $form_id . '-wrap' );
217
218 // Redirect them.
219 wp_safe_redirect( apply_filters( 'give_send_back_to_checkout', $redirect, $args ) );
220 give_die();
221
222 }
223
224 /**
225 * Get Success Page URL
226 *
227 * Gets the success page URL.
228 *
229 * @param string $query_string
230 *
231 * @access public
232 * @since 1.0
233 * @return string
234 */
235 function give_get_success_page_url( $query_string = null ) {
236
237 $success_page = give_get_option( 'success_page', 0 );
238 $success_page = get_permalink( $success_page );
239
240 if ( $query_string ) {
241 $success_page .= $query_string;
242 }
243
244 return apply_filters( 'give_success_page_url', $success_page );
245
246 }
247
248 /**
249 * Get the URL of the Failed Donation Page.
250 *
251 * @since 1.0
252 *
253 * @param bool $extras Extras to append to the URL.
254 *
255 * @return mixed Full URL to the Failed Donation Page, if present, home page if it doesn't exist.
256 */
257 function give_get_failed_transaction_uri( $extras = false ) {
258 $give_options = give_get_settings();
259
260 // Remove question mark.
261 if ( 0 === strpos( $extras, '?' ) ) {
262 $extras = substr( $extras, 1 );
263 }
264
265 $extras_args = wp_parse_args( $extras );
266
267 // Set nonce if payment id exist in extra params.
268 if ( array_key_exists( 'payment-id', $extras_args ) ) {
269 $extras_args['_wpnonce'] = wp_create_nonce( "give-failed-donation-{$extras_args['payment-id']}" );
270 $extras = http_build_query( $extras_args );
271 }
272
273 $uri = ! empty( $give_options['failure_page'] ) ?
274 trailingslashit( get_permalink( $give_options['failure_page'] ) ) :
275 home_url();
276
277
278 if ( $extras ) {
279 $uri .= "?{$extras}";
280 }
281
282 return apply_filters( 'give_get_failed_transaction_uri', $uri );
283 }
284
285 /**
286 * Determines if we're currently on the Failed Donation Page.
287 *
288 * @since 1.0
289 * @return bool True if on the Failed Donation Page, false otherwise.
290 */
291 function give_is_failed_transaction_page() {
292 $give_options = give_get_settings();
293 $ret = isset( $give_options['failure_page'] ) ? is_page( $give_options['failure_page'] ) : false;
294
295 return apply_filters( 'give_is_failure_page', $ret );
296 }
297
298 /**
299 * Mark payments as Failed when returning to the Failed Donation Page
300 *
301 * @since 1.0
302 * @since 1.8.16 Add security check
303 *
304 * @return bool
305 */
306 function give_listen_for_failed_payments() {
307
308 $failed_page = give_get_option( 'failure_page', 0 );
309 $payment_id = ! empty( $_GET['payment-id'] ) ? absint( $_GET['payment-id'] ) : 0;
310 $nonce = ! empty( $_GET['_wpnonce'] ) ? give_clean( $_GET['_wpnonce'] ) : false;
311
312 // Bailout.
313 if ( ! $failed_page || ! is_page( $failed_page ) || ! $payment_id || ! $nonce ) {
314 return false;
315 }
316
317 // Security check.
318 if ( ! wp_verify_nonce( $nonce, "give-failed-donation-{$payment_id}" ) ) {
319 wp_die( __( 'Nonce verification failed.', 'give' ), __( 'Error', 'give' ) );
320 }
321
322 // Set payment status to failure
323 give_update_payment_status( $payment_id, 'failed' );
324 }
325
326 add_action( 'template_redirect', 'give_listen_for_failed_payments' );
327
328 /**
329 * Retrieve the Donation History page URI
330 *
331 * @access public
332 * @since 1.7
333 *
334 * @return string
335 */
336 function give_get_history_page_uri() {
337 $give_options = give_get_settings();
338
339 $history_page = isset( $give_options['history_page'] ) ? get_permalink( absint( $give_options['history_page'] ) ) : get_bloginfo( 'url' );
340
341 return apply_filters( 'give_get_history_page_uri', $history_page );
342 }
343
344 /**
345 * Check if a field is required
346 *
347 * @param string $field
348 * @param int $form_id
349 *
350 * @access public
351 * @since 1.0
352 * @return bool
353 */
354 function give_field_is_required( $field = '', $form_id ) {
355
356 $required_fields = give_get_required_fields( $form_id );
357
358 return array_key_exists( $field, $required_fields );
359 }
360
361 /**
362 * Record Donation In Log
363 *
364 * Stores log information for a donation.
365 *
366 * @since 1.0
367 *
368 * @param int $give_form_id Give Form ID.
369 * @param int $payment_id Payment ID.
370 * @param bool|int $price_id Price ID, if any.
371 * @param string|null $donation_date The date of the donation.
372 *
373 * @return void
374 */
375 function give_record_donation_in_log( $give_form_id = 0, $payment_id, $price_id = false, $donation_date = null ) {
376 $log_data = array(
377 'log_parent' => $payment_id,
378 'log_type' => 'sale',
379 'log_date' => isset( $donation_date ) ? $donation_date : null,
380 'log_date_gmt' => isset( $donation_date ) ? $donation_date : null,
381 );
382
383 $log_meta = array(
384 'form_id' => $give_form_id,
385 'price_id' => (int) $price_id,
386 );
387
388 Give()->logs->insert_log( $log_data, $log_meta );
389 }
390
391
392 /**
393 * Increases the donation total count of a donation form.
394 *
395 * @since 1.0
396 *
397 * @param int $form_id Give Form ID
398 * @param int $quantity Quantity to increase donation count by
399 *
400 * @return bool|int
401 */
402 function give_increase_donation_count( $form_id = 0, $quantity = 1 ) {
403 $quantity = (int) $quantity;
404 $form = new Give_Donate_Form( $form_id );
405
406 return $form->increase_sales( $quantity );
407 }
408
409 /**
410 * Decreases the sale count of a form. Primarily for when a donation is refunded.
411 *
412 * @since 1.0
413 *
414 * @param int $form_id Give Form ID
415 * @param int $quantity Quantity to increase donation count by
416 *
417 * @return bool|int
418 */
419 function give_decrease_donation_count( $form_id = 0, $quantity = 1 ) {
420 $quantity = (int) $quantity;
421 $form = new Give_Donate_Form( $form_id );
422
423 return $form->decrease_sales( $quantity );
424 }
425
426 /**
427 * Increases the total earnings of a form.
428 *
429 * @since 1.0
430 *
431 * @param int $give_form_id Give Form ID
432 * @param int $amount Earnings
433 *
434 * @return bool|int
435 */
436 function give_increase_earnings( $give_form_id = 0, $amount ) {
437 $form = new Give_Donate_Form( $give_form_id );
438
439 return $form->increase_earnings( $amount );
440 }
441
442 /**
443 * Decreases the total earnings of a form.
444 *
445 * Primarily for when a donation is refunded.
446 *
447 * @since 1.0
448 *
449 * @param int $form_id Give Form ID
450 * @param int $amount Earnings
451 *
452 * @return bool|int
453 */
454 function give_decrease_form_earnings( $form_id = 0, $amount ) {
455
456 $form = new Give_Donate_Form( $form_id );
457
458 return $form->decrease_earnings( $amount );
459 }
460
461
462 /**
463 * Returns the total earnings for a form.
464 *
465 * @since 1.0
466 *
467 * @param int $form_id Give Form ID
468 *
469 * @return int $earnings Earnings for a certain form
470 */
471 function give_get_form_earnings_stats( $form_id = 0 ) {
472 $give_form = new Give_Donate_Form( $form_id );
473
474 /**
475 * Filter the form earnings
476 *
477 * @since 1.8.17
478 */
479 return apply_filters( 'give_get_form_earnings_stats', $give_form->earnings, $form_id, $give_form );
480 }
481
482
483 /**
484 * Return the sales number for a form.
485 *
486 * @since 1.0
487 *
488 * @param int $give_form_id Give Form ID
489 *
490 * @return int $sales Amount of sales for a certain form
491 */
492 function give_get_form_sales_stats( $give_form_id = 0 ) {
493 $give_form = new Give_Donate_Form( $give_form_id );
494
495 return $give_form->sales;
496 }
497
498
499 /**
500 * Retrieves the average monthly sales for a specific donation form
501 *
502 * @since 1.0
503 *
504 * @param int $form_id Form ID
505 *
506 * @return float $sales Average monthly sales
507 */
508 function give_get_average_monthly_form_sales( $form_id = 0 ) {
509 $sales = give_get_form_sales_stats( $form_id );
510 $release_date = get_post_field( 'post_date', $form_id );
511
512 $diff = abs( current_time( 'timestamp' ) - strtotime( $release_date ) );
513
514 $months = floor( $diff / ( 30 * 60 * 60 * 24 ) ); // Number of months since publication
515
516 if ( $months > 0 ) {
517 $sales = ( $sales / $months );
518 }
519
520 return $sales;
521 }
522
523
524 /**
525 * Retrieves the average monthly earnings for a specific form
526 *
527 * @since 1.0
528 *
529 * @param int $form_id Form ID
530 *
531 * @return float $earnings Average monthly earnings
532 */
533 function give_get_average_monthly_form_earnings( $form_id = 0 ) {
534 $earnings = give_get_form_earnings_stats( $form_id );
535 $release_date = get_post_field( 'post_date', $form_id );
536
537 $diff = abs( current_time( 'timestamp' ) - strtotime( $release_date ) );
538
539 $months = floor( $diff / ( 30 * 60 * 60 * 24 ) ); // Number of months since publication
540
541 if ( $months > 0 ) {
542 $earnings = ( $earnings / $months );
543 }
544
545 return $earnings < 0 ? 0 : $earnings;
546 }
547
548
549 /**
550 * Get Price Option Name (Text)
551 *
552 * Retrieves the name of a variable price option.
553 *
554 * @since 1.0
555 *
556 * @param int $form_id ID of the donation form.
557 * @param int $price_id ID of the price option.
558 * @param int $payment_id payment ID for use in filters ( optional ).
559 * @param bool $use_fallback Outputs the level amount if no level text is provided.
560 *
561 * @return string $price_name Name of the price option
562 */
563 function give_get_price_option_name( $form_id = 0, $price_id = 0, $payment_id = 0, $use_fallback = true ) {
564
565 $prices = give_get_variable_prices( $form_id );
566 $price_name = '';
567
568 if ( false === $prices ) {
569 return $price_name;
570 }
571
572 foreach ( $prices as $price ) {
573
574 if ( intval( $price['_give_id']['level_id'] ) === intval( $price_id ) ) {
575
576 $price_text = isset( $price['_give_text'] ) ? $price['_give_text'] : '';
577 $price_fallback = $use_fallback ?
578 give_currency_filter(
579 give_format_amount(
580 $price['_give_amount'],
581 array( 'sanitize' => false )
582 ),
583 array( 'decode_currency' => true )
584 ) : '';
585 $price_name = ! empty( $price_text ) ? $price_text : $price_fallback;
586
587 }
588 }
589
590 return apply_filters( 'give_get_price_option_name', $price_name, $form_id, $payment_id, $price_id );
591 }
592
593
594 /**
595 * Retrieves a price from from low to high of a variable priced form
596 *
597 * @since 1.0
598 *
599 * @param int $form_id ID of the form
600 * @param bool $formatted Flag to decide which type of price range string return
601 *
602 * @return string $range A fully formatted price range
603 */
604 function give_price_range( $form_id = 0, $formatted = true ) {
605 $low = give_get_lowest_price_option( $form_id );
606 $high = give_get_highest_price_option( $form_id );
607 $order_type = ! empty( $_REQUEST['order'] ) ? $_REQUEST['order'] : 'asc';
608
609 $range = sprintf(
610 '<span class="give_price_range_%1$s">%2$s</span><span class="give_price_range_sep">&nbsp;&ndash;&nbsp;</span><span class="give_price_range_%3$s">%4$s</span>',
611 'asc' === $order_type ? 'low' : 'high',
612 'asc' === $order_type ? give_currency_filter( give_format_amount( $low, array( 'sanitize' => false ) ) ) : give_currency_filter( give_format_amount( $high, array( 'sanitize' => false ) ) ),
613 'asc' === $order_type ? 'high' : 'low',
614 'asc' === $order_type ? give_currency_filter( give_format_amount( $high, array( 'sanitize' => false ) ) ) : give_currency_filter( give_format_amount( $low, array( 'sanitize' => false ) ) )
615
616 );
617
618 if ( ! $formatted ) {
619 $range = wp_strip_all_tags( $range );
620 }
621
622 return apply_filters( 'give_price_range', $range, $form_id, $low, $high );
623 }
624
625
626 /**
627 * Get Lowest Price ID
628 *
629 * Retrieves the ID for the cheapest price option of a variable donation form
630 *
631 * @since 1.5
632 *
633 * @param int $form_id ID of the donation
634 *
635 * @return int ID of the lowest price
636 */
637 function give_get_lowest_price_id( $form_id = 0 ) {
638
639 if ( empty( $form_id ) ) {
640 $form_id = get_the_ID();
641 }
642
643 if ( ! give_has_variable_prices( $form_id ) ) {
644 return give_get_form_price( $form_id );
645 }
646
647 $prices = give_get_variable_prices( $form_id );
648
649 $min = $min_id = 0;
650
651 if ( ! empty( $prices ) ) {
652
653 foreach ( $prices as $key => $price ) {
654
655 if ( empty( $price['_give_amount'] ) ) {
656 continue;
657 }
658
659 if ( ! isset( $min ) ) {
660 $min = $price['_give_amount'];
661 } else {
662 $min = min( $min, $price['_give_amount'] );
663 }
664
665 if ( $price['_give_amount'] == $min ) {
666 $min_id = $price['_give_id']['level_id'];
667 }
668 }
669 }
670
671 return (int) $min_id;
672 }
673
674 /**
675 * Retrieves cheapest price option of a variable priced form
676 *
677 * @since 1.0
678 *
679 * @param int $form_id ID of the form
680 *
681 * @return float Amount of the lowest price
682 */
683 function give_get_lowest_price_option( $form_id = 0 ) {
684 if ( empty( $form_id ) ) {
685 $form_id = get_the_ID();
686 }
687
688 if ( ! give_has_variable_prices( $form_id ) ) {
689 return give_get_form_price( $form_id );
690 }
691
692 if ( ! ( $low = get_post_meta( $form_id, '_give_levels_minimum_amount', true ) ) ) {
693 // Backward compatibility.
694 $prices = wp_list_pluck( give_get_variable_prices( $form_id ), '_give_amount' );
695 $low = ! empty( $prices ) ? min( $prices ) : 0;
696 }
697
698 return give_maybe_sanitize_amount( $low );
699 }
700
701 /**
702 * Retrieves most expensive price option of a variable priced form
703 *
704 * @since 1.0
705 *
706 * @param int $form_id ID of the form
707 *
708 * @return float Amount of the highest price
709 */
710 function give_get_highest_price_option( $form_id = 0 ) {
711
712 if ( empty( $form_id ) ) {
713 $form_id = get_the_ID();
714 }
715
716 if ( ! give_has_variable_prices( $form_id ) ) {
717 return give_get_form_price( $form_id );
718 }
719
720 if ( ! ( $high = get_post_meta( $form_id, '_give_levels_maximum_amount', true ) ) ) {
721 // Backward compatibility.
722 $prices = wp_list_pluck( give_get_variable_prices( $form_id ), '_give_amount' );
723 $high = ! empty( $prices ) ? max( $prices ) : 0;
724 }
725
726 return give_maybe_sanitize_amount( $high );
727 }
728
729 /**
730 * Returns the price of a form, but only for non-variable priced forms.
731 *
732 * @since 1.0
733 *
734 * @param int $form_id ID number of the form to retrieve a price for
735 *
736 * @return mixed string|int Price of the form
737 */
738 function give_get_form_price( $form_id = 0 ) {
739
740 if ( empty( $form_id ) ) {
741 return false;
742 }
743
744 $form = new Give_Donate_Form( $form_id );
745
746 return $form->__get( 'price' );
747 }
748
749 /**
750 * Returns the minimum price amount of a form, only enforced for the custom amount input.
751 *
752 * @since 1.3.6
753 *
754 * @param int $form_id ID number of the form to retrieve the minimum price for
755 *
756 * @return mixed string|int Minimum price of the form
757 */
758 function give_get_form_minimum_price( $form_id = 0 ) {
759
760 if ( empty( $form_id ) ) {
761 return false;
762 }
763
764 $form = new Give_Donate_Form( $form_id );
765
766 return $form->get_minimum_price();
767
768 }
769
770 /**
771 * Displays a formatted price for a donation form
772 *
773 * @since 1.0
774 *
775 * @param int $form_id ID of the form price to show
776 * @param bool $echo Whether to echo or return the results
777 * @param bool|int $price_id Optional price id for variable pricing
778 *
779 * @return int $formatted_price
780 */
781 function give_price( $form_id = 0, $echo = true, $price_id = false ) {
782 $price = 0;
783
784 if ( empty( $form_id ) ) {
785 $form_id = get_the_ID();
786 }
787
788 if ( give_has_variable_prices( $form_id ) ) {
789
790 $prices = give_get_variable_prices( $form_id );
791
792 if ( false !== $price_id ) {
793
794 // loop through multi-prices to see which is default
795 foreach ( $prices as $price ) {
796 // this is the default price
797 if ( isset( $price['_give_default'] ) && $price['_give_default'] === 'default' ) {
798 $price = (float) $price['_give_amount'];
799 };
800 }
801 } else {
802
803 $price = give_get_lowest_price_option( $form_id );
804 }
805 } else {
806
807 $price = give_get_form_price( $form_id );
808 }
809
810 $price = apply_filters( 'give_form_price', give_maybe_sanitize_amount( $price ), $form_id );
811 $formatted_price = '<span class="give_price" id="give_price_' . $form_id . '">' . $price . '</span>';
812 $formatted_price = apply_filters( 'give_form_price_after_html', $formatted_price, $form_id, $price );
813
814 if ( $echo ) {
815 echo $formatted_price;
816 } else {
817 return $formatted_price;
818 }
819 }
820
821 add_filter( 'give_form_price', 'give_format_amount', 10 );
822 add_filter( 'give_form_price', 'give_currency_filter', 20 );
823
824
825 /**
826 * Retrieves the amount of a variable price option
827 *
828 * @since 1.0
829 *
830 * @param int $form_id ID of the form
831 * @param int $price_id ID of the price option
832 *
833 * @return float $amount Amount of the price option
834 */
835 function give_get_price_option_amount( $form_id = 0, $price_id = 0 ) {
836 $prices = give_get_variable_prices( $form_id );
837
838 $amount = 0.00;
839
840 foreach ( $prices as $price ) {
841 if ( isset( $price['_give_id']['level_id'] ) && $price['_give_id']['level_id'] == $price_id ) {
842 $amount = isset( $price['_give_amount'] ) ? $price['_give_amount'] : 0.00;
843 break;
844 };
845 }
846
847 return apply_filters( 'give_get_price_option_amount', give_maybe_sanitize_amount( $amount ), $form_id, $price_id );
848 }
849
850 /**
851 * Returns the goal of a form
852 *
853 * @since 1.0
854 *
855 * @param int $form_id ID number of the form to retrieve a goal for
856 *
857 * @return mixed string|int Goal of the form
858 */
859 function give_get_form_goal( $form_id = 0 ) {
860
861 if ( empty( $form_id ) ) {
862 return false;
863 }
864
865 $form = new Give_Donate_Form( $form_id );
866
867 return $form->goal;
868
869 }
870
871 /**
872 * Returns the goal format of a form
873 *
874 * @since 2.0
875 *
876 * @param int $form_id ID number of the form to retrieve a goal for
877 *
878 * @return mixed string|int Goal of the form
879 */
880 function give_get_form_goal_format( $form_id = 0 ) {
881
882 if ( empty( $form_id ) ) {
883 return false;
884 }
885
886 return give_get_meta( $form_id, '_give_goal_format', true );
887
888 }
889
890 /**
891 * Display/Return a formatted goal for a donation form
892 *
893 * @since 1.0
894 *
895 * @param int $form_id ID of the form price to show
896 * @param bool $echo Whether to echo or return the results
897 *
898 * @return string $formatted_goal
899 */
900 function give_goal( $form_id = 0, $echo = true ) {
901
902 if ( empty( $form_id ) ) {
903 $form_id = get_the_ID();
904 }
905
906 $goal = give_get_form_goal( $form_id );
907 $goal_format = give_get_form_goal_format($form_id);
908
909 if ( 'donation' === $goal_format ) {
910 $goal = "{$goal} donations";
911 } else {
912 $goal = apply_filters( 'give_form_goal', give_maybe_sanitize_amount( $goal ), $form_id );
913 }
914
915 $formatted_goal = sprintf(
916 '<span class="give_price" id="give_price_%1$s">%2$s</span>',
917 $form_id,
918 $goal
919 );
920 $formatted_goal = apply_filters( 'give_form_price_after_html', $formatted_goal, $form_id, $goal );
921
922 if ( $echo ) {
923 echo $formatted_goal;
924 } else {
925 return $formatted_goal;
926 }
927 }
928
929 add_filter( 'give_form_goal', 'give_format_amount', 10 );
930 add_filter( 'give_form_goal', 'give_currency_filter', 20 );
931
932
933 /**
934 * Checks if users can only donate when logged in
935 *
936 * @since 1.0
937 *
938 * @param int $form_id Give form ID
939 *
940 * @return bool $ret Whether or not the logged_in_only setting is set
941 */
942 function give_logged_in_only( $form_id ) {
943 // If _give_logged_in_only is set to enable then guest can donate from that specific form.
944 // Otherwise it is member only donation form.
945 $val = give_get_meta( $form_id, '_give_logged_in_only', true );
946 $val = ! empty( $val ) ? $val : 'enabled';
947
948 $ret = ! give_is_setting_enabled( $val );
949
950 return (bool) apply_filters( 'give_logged_in_only', $ret, $form_id );
951 }
952
953
954 /**
955 * Checks the option for the "Register / Login Option"
956 *
957 * @since 1.4.1
958 *
959 * @param int $form_id
960 *
961 * @return string
962 */
963 function give_show_login_register_option( $form_id ) {
964
965 $show_register_form = give_get_meta( $form_id, '_give_show_register_form', true );
966
967 return apply_filters( 'give_show_register_form', $show_register_form, $form_id );
968
969 }
970
971
972 /**
973 * Get pre fill form field values.
974 *
975 * Note: this function will extract form field values from give_purchase session data.
976 *
977 * @since 1.8
978 *
979 * @param int $form_id Form ID.
980 *
981 * @return array
982 */
983 function _give_get_prefill_form_field_values( $form_id ) {
984 $logged_in_donor_info = array();
985
986 if ( is_user_logged_in() ) :
987 $donor_data = get_userdata( get_current_user_id() );
988 $donor_address = give_get_donor_address( get_current_user_id() );
989
990 $logged_in_donor_info = array(
991 // First name.
992 'give_first' => $donor_data->first_name,
993
994 // Last name.
995 'give_last' => $donor_data->last_name,
996
997 // Email.
998 'give_email' => $donor_data->user_email,
999
1000 // Street address 1.
1001 'card_address' => $donor_address['line1'],
1002
1003 // Street address 2.
1004 'card_address_2' => $donor_address['line2'],
1005
1006 // Country.
1007 'billing_country' => $donor_address['country'],
1008
1009 // State.
1010 'card_state' => $donor_address['state'],
1011
1012 // City.
1013 'card_city' => $donor_address['city'],
1014
1015 // Zipcode
1016 'card_zip' => $donor_address['zip'],
1017 );
1018 endif;
1019
1020 // Bailout: Auto fill form field values only form form which donor is donating.
1021 if (
1022 empty( $_GET['form-id'] )
1023 || ! $form_id
1024 || ( $form_id !== absint( $_GET['form-id'] ) )
1025 ) {
1026 return $logged_in_donor_info;
1027 }
1028
1029 // Get purchase data.
1030 $give_purchase_data = Give()->session->get( 'give_purchase' );
1031
1032 // Get donor info from form data.
1033 $give_donor_info_in_session = empty( $give_purchase_data['post_data'] )
1034 ? array()
1035 : $give_purchase_data['post_data'];
1036
1037 // Output.
1038 return wp_parse_args( $give_donor_info_in_session, $logged_in_donor_info );
1039 }
1040