PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.9
GiveWP – Donation Plugin and Fundraising Platform v4.16.9
4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.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 All 255 releases
← All changes | templates/shortcode-goal.php +218 -80 2.3.24.16.9 View file →
@@ -1,51 +1,111 @@
1 1 <?php
2 +
3 +use Give\Log\Log;
4 +use Give\DonationForms\DonationQuery;
5 +
2 6 /**
3 7 * This template is used to display the goal with [give_goal]
8 + *
9 + * @since 4.16.3 Escaped the goal color when rendering the progress bar.
4 10 */
5 11
6 -$form = new Give_Donate_Form( $form_id );
12 +/**
13 + * @var int $form_id form id passed from the give_show_goal_progress() context
14 + * @var $args array shortcode args
15 + */
16 +
17 +if ( empty($form_id) ) {
18 + Log::error('Failed to render [give_goal] shortcode.',
19 + ['form_id' => $form_id,
20 + 'file' => '__templates/shortcode-goal.php__',
21 + 'line' => '10'
22 + ]);
23 + return false;
24 +}
25 +
26 +$form = new Give_Donate_Form( $form_id );
27 +
7 28 $goal_option = give_get_meta( $form->ID, '_give_goal_option', true );
8 -
9 29 // Sanity check - ensure form has pass all condition to show goal.
10 30 if ( ( isset( $args['show_goal'] ) && ! filter_var( $args['show_goal'], FILTER_VALIDATE_BOOLEAN ) )
11 31 || empty( $form->ID )
12 32 || ( is_singular( 'give_forms' ) && ! give_is_setting_enabled( $goal_option ) )
13 33 || ! give_is_setting_enabled( $goal_option ) || 0 === $form->goal ) {
14 - return false;
34 + return false;
15 35 }
16 36
17 -$goal_format = give_get_form_goal_format( $form_id );
18 -$price = give_get_meta( $form_id, '_give_set_price', true );
19 -$color = give_get_meta( $form_id, '_give_goal_color', true );
37 +$goal_progress_stats = give_goal_progress_stats( $form );
38 +$goal_format = $goal_progress_stats['format'];
39 +$color = empty($args['color']) ? give_get_meta( $form_id, '_give_goal_color', true ) : sanitize_hex_color( $args['color'] );
20 40 $show_text = isset( $args['show_text'] ) ? filter_var( $args['show_text'], FILTER_VALIDATE_BOOLEAN ) : true;
21 41 $show_bar = isset( $args['show_bar'] ) ? filter_var( $args['show_bar'], FILTER_VALIDATE_BOOLEAN ) : true;
22 -$goal_progress_stats = give_goal_progress_stats( $form );
23 42
24 -$income = $goal_progress_stats['raw_actual'];
25 -$goal = $goal_progress_stats['raw_goal'];
43 +/**
44 + * @since 4.7.0 only use dates when they are set
45 + * @since 3.12.0 use DonationQuery to get donation amounts
46 + */
47 +$form_income = 0;
48 +$donationQuery = (new DonationQuery())->form($form->ID);
26 49
50 +if (isset($args['start_date'], $args['end_date'])) {
51 + if ($args['start_date'] === $args['end_date']) {
52 + $form_income = $donationQuery->sumIntendedAmount();
53 + } else {
54 + // If end date is not set, we have to use the current datetime.
55 + if (! $args['end_date']) {
56 + $args['end_date'] = date('Y-m-d H:i:s');
57 + }
58 +
59 + $form_income = $donationQuery->between($args['start_date'], $args['end_date'])->sumIntendedAmount();
60 + }
61 +}
62 +
63 +
64 +/**
65 + * Allow filtering the goal stats used for this shortcode context.
66 + *
67 + * @since 2.23.1
68 + *
69 + * @param array $stats The income and goal values for this form goal.
70 + * @param int $form_id Donation Form ID.
71 + * @param array $goal_progress_stats The full goal progress stats.
72 + * @param array $args The full list of shortcode arguments passed.
73 + */
74 +$shortcode_stats = apply_filters(
75 + 'give_goal_shortcode_stats',
76 + array(
77 + 'income' => $form_income,
78 + 'goal' => $goal_progress_stats['raw_goal'],
79 + ),
80 + $form_id,
81 + $goal_progress_stats,
82 + $args
83 +);
84 +$income = $shortcode_stats['income'];
85 +$goal = $shortcode_stats['goal'];
86 +
27 87 switch ( $goal_format ) {
28 88
29 - case 'donation':
30 - $progress = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
31 - $progress_bar_value = $income >= $goal ? 100 : $progress;
32 - break;
89 + case 'donation':
90 + $progress = $goal ? round( ( $form->get_sales() / $goal ) * 100, 2 ) : 0;
91 + $progress_bar_value = $form->get_sales() >= $goal ? 100 : $progress;
92 + break;
33 93
34 - case 'donors':
35 - $progress_bar_value = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
36 - $progress = $progress_bar_value;
37 - break;
94 + case 'donors':
95 + $progress = $goal ? round( ( give_get_form_donor_count( $form->ID ) / $goal ) * 100, 2 ) : 0;
96 + $progress_bar_value = give_get_form_donor_count( $form->ID ) >= $goal ? 100 : $progress;
97 + break;
38 98
39 - case 'percentage':
40 - $progress = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
41 - $progress_bar_value = $income >= $goal ? 100 : $progress;
42 - break;
99 + case 'percentage':
100 + $progress = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
101 + $progress_bar_value = $income >= $goal ? 100 : $progress;
102 + break;
43 103
44 - default:
45 - $progress = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
46 - $progress_bar_value = $income >= $goal ? 100 : $progress;
47 - break;
104 + default:
105 + $progress = $goal ? round( ( $income / $goal ) * 100, 2 ) : 0;
106 + $progress_bar_value = $income >= $goal ? 100 : $progress;
107 + break;
48 108
49 109 }
50 110
51 111 /**
@@ -55,76 +115,154 @@
55 115 */
56 116 $progress = apply_filters( 'give_goal_amount_funded_percentage_output', $progress, $form_id, $form );
57 117 ?>
58 118 <div class="give-goal-progress">
59 - <?php if ( ! empty( $show_text ) ) : ?>
119 + <?php if ( ! empty( $show_text ) ) : ?>
60 120 <div class="raised">
61 - <?php
62 - if ( 'amount' === $goal_format ) :
121 + <?php
122 + if ( 'amount' === $goal_format ) :
123 + /**
124 + * Filter the give currency.
125 + *
126 + * @since 1.8.17
127 + */
128 + $form_currency = apply_filters( 'give_goal_form_currency', give_get_currency( $form_id ), $form_id );
129 + /**
130 + * Filter the income formatting arguments.
131 + *
132 + * @since 1.8.17
133 + */
134 + $income_format_args = apply_filters(
135 + 'give_goal_income_format_args',
136 + array(
137 + 'sanitize' => false,
138 + 'currency' => $form_currency,
139 + 'decimal' => false,
140 + ),
141 + $form_id
142 + );
143 + /**
144 + * Filter the goal formatting arguments.
145 + *
146 + * @since 1.8.17
147 + */
148 + $goal_format_args = apply_filters(
149 + 'give_goal_amount_format_args',
150 + array(
151 + 'sanitize' => false,
152 + 'currency' => $form_currency,
153 + 'decimal' => false,
154 + ),
155 + $form_id
156 + );
157 + /**
158 + * This filter will be used to convert the goal amounts to different currencies.
159 + *
160 + * @since 2.5.4
161 + *
162 + * @param array $amounts List of goal amounts.
163 + * @param int $form_id Donation Form ID.
164 + */
165 + $goal_amounts = apply_filters(
166 + 'give_goal_amounts',
167 + array(
168 + $form_currency => $goal,
169 + ),
170 + $form_id
171 + );
172 + /**
173 + * This filter will be used to convert the income amounts to different currencies.
174 + *
175 + * @since 2.5.4
176 + *
177 + * @param array $amounts List of goal amounts.
178 + * @param int $form_id Donation Form ID.
179 + */
180 + $income_amounts = apply_filters(
181 + 'give_goal_raised_amounts',
182 + array(
183 + $form_currency => $income,
184 + ),
185 + $form_id
186 + );
187 + // Get human readable donation amount.
188 + $income = give_human_format_large_amount( give_format_amount( $income, $income_format_args ), array( 'currency' => $form_currency ) );
189 + $goal = give_human_format_large_amount( give_format_amount( $goal, $goal_format_args ), array( 'currency' => $form_currency ) );
190 + // Format the human readable donation amount.
191 + $formatted_income = give_currency_filter(
192 + $income,
193 + array(
194 + 'form_id' => $form_id,
195 + )
196 + );
197 + $formatted_goal = give_currency_filter(
198 + $goal,
199 + array(
200 + 'form_id' => $form_id,
201 + )
202 + );
63 203
64 - /**
65 - * Filter the give currency.
66 - *
67 - * @since 1.8.17
68 - */
69 - $form_currency = apply_filters( 'give_goal_form_currency', give_get_currency( $form_id ), $form_id );
204 + echo sprintf(
205 + /* translators: 1: amount of income raised 2: goal target amount. */
206 + __( '<span class="income" data-amounts="%1$s">%2$s</span> of <span class="goal-text" data-amounts="%3$s">%4$s</span> raised', 'give' ),
207 + esc_attr( wp_json_encode( $income_amounts, JSON_PRETTY_PRINT ) ),
208 + esc_attr( $formatted_income ),
209 + esc_attr( wp_json_encode( $goal_amounts, JSON_PRETTY_PRINT ) ),
70 210
71 - /**
72 - * Filter the income formatting arguments.
73 - *
74 - * @since 1.8.17
75 - */
76 - $income_format_args = apply_filters( 'give_goal_income_format_args', array(
77 - 'sanitize' => false,
78 - 'currency' => $form_currency,
79 - 'decimal' => false,
80 - ), $form_id );
81 -
82 - /**
83 - * Filter the goal formatting arguments.
84 - *
85 - * @since 1.8.17
86 - */
87 - $goal_format_args = apply_filters( 'give_goal_amount_format_args', array(
88 - 'sanitize' => false,
89 - 'currency' => $form_currency,
90 - 'decimal' => false,
91 - ), $form_id );
92 -
93 - // Get formatted amount.
94 - $income = give_human_format_large_amount( give_format_amount( $income, $income_format_args ), array( 'currency' => $form_currency ) );
95 - $goal = give_human_format_large_amount( give_format_amount( $goal, $goal_format_args ), array( 'currency' => $form_currency ) );
96 -
97 - echo sprintf( /* translators: 1: amount of income raised 2: goal target amount. */
98 - __( '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> raised', 'give' ), give_currency_filter( $income, array( 'form_id' => $form_id ) ), give_currency_filter( $goal, array( 'form_id' => $form_id ) ) );
99 -
211 + esc_attr( $formatted_goal )
212 + );
100 213 elseif ( 'percentage' === $goal_format ) :
101 214
102 - echo sprintf( /* translators: %s: percentage of the amount raised compared to the goal target */
103 - __( '<span class="give-percentage">%s%%</span> funded', 'give' ), round( $progress ) );
215 + echo sprintf( /* translators: %s: percentage of the amount raised compared to the goal target */
216 + __( '<span class="give-percentage">%s%%</span> funded', 'give' ),
217 + round( $progress )
218 + );
104 219
105 220 elseif ( 'donation' === $goal_format ) :
106 221
107 - echo sprintf( /* translators: 1: total number of donations completed 2: total number of donations set as goal */
108 - _n( '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donation', '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donations', $goal, 'give' ), $income, $goal );
222 + echo sprintf( /* translators: 1: total number of donations completed 2: total number of donations set as goal */
223 + _n(
224 + '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donation',
225 + '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donations',
226 + $goal,
227 + 'give'
228 + ),
109 229
230 + give_format_amount( $form->get_sales(), array( 'decimal' => false )),
231 + give_format_amount( $goal, array( 'decimal' => false ))
232 + );
233 +
110 234 elseif ( 'donors' === $goal_format ) :
111 235
112 - echo sprintf( /* translators: 1: total number of donors completed 2: total number of donors set as goal */
113 - _n( '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donation', '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donors', $goal, 'give' ), $income, $goal );
236 + echo sprintf( /* translators: 1: total number of donors completed 2: total number of donors set as goal */
237 + _n(
238 + '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donor',
239 + '<span class="income">%1$s</span> of <span class="goal-text">%2$s</span> donors',
240 + $goal,
241 + 'give'
242 + ),
114 243
115 - endif;
116 - ?>
244 + give_format_amount( give_get_form_donor_count( $form->ID ), array( 'decimal' => false ) ),
245 + give_format_amount( $goal, array( 'decimal' => false ) )
246 + );
247 +
248 + endif;
249 + ?>
117 250 </div>
118 - <?php endif; ?>
251 + <?php endif; ?>
119 252
253 + <?php if ( ! empty( $show_bar ) ) :
254 + $style = "width:{$progress_bar_value}%";
120 255
121 - <?php if ( ! empty( $show_bar ) ) : ?>
122 - <div class="give-progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100"
123 - aria-valuenow="<?php echo esc_attr( $progress_bar_value ); ?>">
124 - <span style="width: <?php echo esc_attr( $progress_bar_value ); ?>%;<?php if ( ! empty( $color ) ) {
125 - echo 'background-color:' . $color;
126 - } ?>"></span>
127 - </div><!-- /.give-progress-bar -->
128 - <?php endif; ?>
256 + if ( ! empty($color)) {
257 + $style .= ";background: linear-gradient(180deg, {$color} 0%, {$color} 100%), linear-gradient(180deg, #fff 0%, #ccc 100%); background-blend-mode: multiply;";
258 + }
259 + ?>
260 + <div class="progress-bar">
261 + <div class="give-progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="<?php echo esc_attr( $progress_bar_value ); ?>">
262 + <span style="<?php echo esc_attr( $style ); ?>"></span>
263 + </div>
264 + </div>
265 + <?php endif; ?>
129 266
130 267 </div><!-- /.goal-progress -->
268 +