PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.15.1
GiveWP – Donation Plugin and Fundraising Platform v3.15.1
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 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 / templates / shortcode-form-grid.php
give / templates Last commit date
emails 2 years ago global 6 years ago receipt 7 years ago single-give-form 6 years ago email-login-form.php 6 years ago history-donations.php 4 years ago payment-processing.php 6 years ago shortcode-donor-wall.php 2 years ago shortcode-form-grid.php 1 year ago shortcode-goal.php 2 years ago shortcode-login.php 6 years ago shortcode-profile-editor.php 6 years ago shortcode-receipt.php 2 years ago shortcode-register.php 8 years ago shortcode-totals-progress.php 6 years ago single-give-form.php 6 years ago
shortcode-form-grid.php
511 lines
1 <?php
2 /**
3 * This template is used to display the donation grid with [donation_grid]
4 */
5
6 // Exit if accessed directly.
7 use Give\DonationForms\DonationQuery;
8 use Give\Helpers\Form\Template;
9 use Give\Helpers\Form\Utils as FormUtils;
10
11 if (!defined('ABSPATH')) {
12 exit;
13 }
14
15 /**
16 * List of changes
17 *
18 * @since 2.27.1 Use get_the_excerpt function to get short description of donation form to display in form grid.
19 */
20
21 $form_id = get_the_ID(); // Form ID.
22 $give_settings = $args[0]; // Give settings.
23 $atts = $args[1]; // Shortcode attributes.
24 $raw_content = ''; // Raw form content.
25 $stripped_content = ''; // Form content stripped of HTML tags and shortcodes.
26 $excerpt = ''; // Trimmed form excerpt ready for display.
27
28 $flex_direction = $atts['columns'] === '1' ? "row" : "column";
29
30 $activeTemplate = FormUtils::isLegacyForm($form_id) ? 'legacy' : Template::getActiveID($form_id);
31
32 /* @var \Give\Form\Template $formTemplate */
33 $formTemplate = Give()->templates->getTemplate($activeTemplate);
34
35 $renderTags = static function ($wrapper_class, $apply_styles = true) use ($form_id, $atts) {
36 if (!taxonomy_exists('give_forms_tag')) {
37 return '';
38 }
39
40 $tags = wp_get_post_terms($form_id, 'give_forms_tag');
41
42 $tag_bg_color = !empty($atts['tag_background_color'])
43 ? $atts['tag_background_color']
44 : '#69b86b';
45
46 $tag_text_color = !empty($atts['tag_text_color'])
47 ? $atts['tag_text_color']
48 : '#ffffff';
49
50 $tag_container_color = count($tags) >= 1
51 ? 'rgba(0, 0, 0, 0.35)'
52 : 'none';
53
54 $tag_elements = array_map(
55 static function ($term) use ($tag_text_color, $tag_bg_color) {
56 $style = sprintf(
57 'color: %s; background-color: %s;',
58 esc_attr($tag_text_color),
59 esc_attr($tag_bg_color)
60 );
61
62 return "<span style='$style'>$term->name</span>";
63 },
64 $tags
65 );
66
67 $tag_elements = implode('', $tag_elements);
68 $styles = sprintf(
69 "background-color: %s;",
70 $apply_styles ? esc_attr($tag_container_color) : ''
71 );
72
73 return "
74 <div class='$wrapper_class' style='$styles' >
75 $tag_elements
76 </div>
77 ";
78 };
79 ?>
80
81 <div class="give-grid__item">
82 <?php
83 // Print the opening anchor tag based on display style.
84 if ('redirect' === $atts['display_style']) {
85 $form_grid_option = give_get_meta($form_id, '_give_form_grid_option', true);
86 $form_grid_redirect_url = esc_url(give_get_meta($form_id, '_give_form_grid_redirect_url', true));
87
88 $url = ($form_grid_option === 'custom' && filter_var($form_grid_redirect_url, FILTER_VALIDATE_URL))
89 ? $form_grid_redirect_url
90 : get_the_permalink();
91
92 printf(
93 '<a id="give-card-%1$s" onclick="return !document.body.classList.contains( \'block-editor-page\' )" class="give-card" href="%2$s">',
94 esc_attr($form_id),
95 esc_attr($url)
96 );
97 } elseif ('modal_reveal' === $atts['display_style']) {
98 printf(
99 '<a id="give-card-%1$s" class="give-card js-give-grid-modal-launcher" data-effect="mfp-zoom-out" href="#give-modal-form-%1$s">',
100 esc_attr($form_id)
101 );
102 }
103 ?>
104 <div class="give-form-grid" style="flex-direction:<?php
105 echo esc_attr($flex_direction) ?>">
106 <?php
107 // Maybe display the featured image.
108 if (
109 give_is_setting_enabled($give_settings['form_featured_img'])
110 && ($imageSrc = $formTemplate->getFormFeaturedImage($form_id))
111 && $atts['show_featured_image']
112 && $atts['columns'] !== '1'
113 ) {
114 /*
115 * Filters the image size used in card layouts.
116 *
117 * @param string The image size.
118 * @param array Form grid attributes.
119 */
120 $image_size = apply_filters('give_form_grid_image_size', $atts['image_size'], $atts);
121 $image_attr = '';
122
123 if ('auto' !== $atts['image_height']) {
124 $image_attr = [
125 'style' => 'height: ' . $atts['image_height'],
126 ];
127 }
128
129 $image = wp_get_attachment_image(attachment_url_to_postid($imageSrc), $image_size, false, $image_attr);
130
131
132 echo "
133 <div class='give-form-grid-media'>
134 <div class='give-card__media'> $image </div>
135
136 {$renderTags('give-form-grid-media__tags')}
137 </div>
138 ";
139 } elseif (
140 give_is_setting_enabled($give_settings['form_featured_img'])
141 && ($imageSrc = $formTemplate->getFormFeaturedImage($form_id))
142 && $atts['show_featured_image']
143 && $atts['columns'] === '1') {
144 echo "
145 <div id='row-media' class='give-form-grid-media'>
146 <img class='give-form-grid-media' src='" . esc_url($imageSrc) . "' alt='' />
147
148 {$renderTags('give-form-grid-media__tags')}
149 </div>
150 ";
151 }
152 ?>
153
154 <div class="give-form-grid-container">
155 <div class="give-form-grid-content">
156 <?php
157 if (!$atts['show_featured_image']) {
158 echo "
159 <div class='give-form-grid-media'>
160 {$renderTags('give-form-grid-media__tags_no_image', false)}
161 </div>
162 ";
163 }
164 ?>
165
166 <?php
167
168 // Maybe display the form title.
169 if (true === $atts['show_title']) {
170 printf(
171 '<h3 class="give-form-grid-content__title">%1$s</h3>',
172 $formTemplate->getFormHeading($form_id)
173 );
174 }
175
176 // Maybe display the form excerpt.
177 if (true === $atts['show_excerpt']) {
178 if ($raw_content = get_the_excerpt($form_id)) {
179 $stripped_content = wp_strip_all_tags(
180 strip_shortcodes($raw_content)
181 );
182 } else {
183 // Get content from the form post's content field.
184 $raw_content = give_get_meta($form_id, '_give_form_content', true);
185
186 if (!empty($raw_content)) {
187 $stripped_content = wp_strip_all_tags(
188 strip_shortcodes($raw_content)
189 );
190 }
191 }
192
193 // Maybe truncate excerpt.
194 if (0 < $atts['excerpt_length']) {
195 $excerpt = wp_trim_words($stripped_content, $atts['excerpt_length']);
196 } else {
197 $excerpt = $stripped_content;
198 }
199
200 $excerpt = ($excerpt === '[]') ? '' : $excerpt;
201
202 printf('<p class="give-form-grid-content__text">%s</p>', $excerpt);
203 }
204
205 if ($atts['show_donate_button']):
206 $button_text = !empty($atts['donate_button_text'])
207 ? $atts['donate_button_text']
208 : give_get_meta($form_id, '_give_form_grid_donate_button_text', true);
209
210 /**
211 * @since 2.23.1 Updated the default text color for the donate button, see #6591.
212 */
213 $button_text_color = !empty($atts['donate_button_text_color'])
214 ? $atts['donate_button_text_color']
215 : '#000000';
216 ?>
217 <button style="text-decoration-color: <?php
218 echo esc_attr($button_text_color); ?>">
219 <span style="color: <?php
220 echo esc_attr($button_text_color); ?>">
221 <?php
222 echo esc_html($button_text) ?: __('Donate', 'give'); ?>
223 </span>
224 </button>
225 <?php
226 endif; ?>
227
228 </div>
229 <?php
230 $form = new Give_Donate_Form($form_id);
231 $goal_option = give_get_meta($form->ID, '_give_goal_option', true);
232
233 // Sanity check - ensure form has pass all condition to show goal.
234 $hide_goal = (isset($atts['show_goal']) && !filter_var($atts['show_goal'], FILTER_VALIDATE_BOOLEAN))
235 || empty($form->ID)
236 || (is_singular('give_forms') && !give_is_setting_enabled($goal_option))
237 || !give_is_setting_enabled($goal_option) || 0 === $form->goal;
238
239 // Maybe display the goal progress bar.
240
241 if (!$hide_goal) :
242 $goal_progress_stats = give_goal_progress_stats($form);
243 $goal_format = $goal_progress_stats['format'];
244 $color = $atts['progress_bar_color'];
245 $show_goal = isset($atts['show_goal']) ? filter_var($atts['show_goal'], FILTER_VALIDATE_BOOLEAN) : true;
246 /**
247 * @since 3.14.0 Replace "$form->get_earnings()" with (new DonationQuery())->form($form->ID)->sumIntendedAmount()
248 */
249 $shortcode_stats = apply_filters(
250 'give_goal_shortcode_stats',
251 [
252 'income' => (new DonationQuery())->form($form->ID)->sumIntendedAmount(),
253 'goal' => $goal_progress_stats['raw_goal'],
254 ],
255 $form_id,
256 $goal_progress_stats,
257 $args
258 );
259
260 $income = $shortcode_stats['income'];
261 $goal = $shortcode_stats['goal'];
262
263 /**
264 * @since 3.14.0 Use the 'give_donate_form_get_sales" filter to ensure the correct donation count will be used
265 */
266 add_filter('give_donate_form_get_sales', function ($sales, $donationFormId) {
267 return (new Give\MultiFormGoals\ProgressBar\Model(['ids' => [$donationFormId]]))->getDonationCount();
268 }, 10, 2);
269
270 switch ($goal_format) {
271 case 'donation':
272 $progress = $goal ? round(($form->get_sales() / $goal) * 100, 2) : 0;
273 $progress_bar_value = $form->get_sales() >= $goal ? 100 : $progress;
274 break;
275
276 case 'donors':
277 $progress = $goal ? round((give_get_form_donor_count($form->ID) / $goal) * 100, 2) : 0;
278 $progress_bar_value = give_get_form_donor_count($form->ID) >= $goal ? 100 : $progress;
279 break;
280
281 case 'percentage':
282 $progress = $goal ? round(($income / $goal) * 100, 2) : 0;
283 $progress_bar_value = $income >= $goal ? 100 : $progress;
284 break;
285
286 default:
287 $progress = $goal ? round(($income / $goal) * 100, 2) : 0;
288 $progress_bar_value = $income >= $goal ? 100 : $progress;
289 break;
290 }
291
292 ?>
293 <div class="give-form-grid-progress">
294 <?php
295 $style = "width:$progress_bar_value%;";
296 $style .= "background: linear-gradient(180deg, {$color} 0%, {$color} 100%); background-blend-mode: multiply;";
297 echo "
298 <div class='give-form-grid-progress-bar'>
299 <div class='give-progress-bar' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='$progress_bar_value'>
300 <span style='" . esc_attr($style) . "'></span>
301 </div>
302 </div>
303 ";
304
305 ?>
306 <div class="form-grid-raised">
307 <div class="form-grid-raised__details">
308 <?php
309 if ('amount' === $goal_format) :
310
311 /**
312 * Filter the give currency.
313 *
314 * @since 1.8.17
315 */
316 $form_currency = apply_filters(
317 'give_goal_form_currency',
318 give_get_currency($form_id),
319 $form_id
320 );
321
322 /**
323 * Filter the income formatting arguments.
324 *
325 * @since 1.8.17
326 */
327 $income_format_args = apply_filters(
328 'give_goal_income_format_args',
329 [
330 'sanitize' => false,
331 'currency' => $form_currency,
332 'decimal' => false,
333 ],
334 $form_id
335 );
336
337 /**
338 * Filter the goal formatting arguments.
339 *
340 * @since 1.8.17
341 */
342 $goal_format_args = apply_filters(
343 'give_goal_amount_format_args',
344 [
345 'sanitize' => false,
346 'currency' => $form_currency,
347 'decimal' => false,
348 ],
349 $form_id
350 );
351
352 /**
353 * This filter will be used to convert the goal amounts to different currencies.
354 *
355 * @since 2.5.4
356 *
357 * @param array $amounts List of goal amounts.
358 * @param int $form_id Donation Form ID.
359 */
360 $goal_amounts = apply_filters(
361 'give_goal_amounts',
362 [
363 $form_currency => $goal,
364 ],
365 $form_id
366 );
367
368 /**
369 * This filter will be used to convert the income amounts to different currencies.
370 *
371 * @since 2.5.4
372 *
373 * @param array $amounts List of goal amounts.
374 * @param int $form_id Donation Form ID.
375 */
376 $income_amounts = apply_filters(
377 'give_goal_raised_amounts',
378 [
379 $form_currency => $income,
380 ],
381 $form_id
382 );
383
384 // Get human readable donation amount.
385 $income = give_human_format_large_amount(
386 give_format_amount($income, $income_format_args), ['currency' => $form_currency]
387 );
388 $goal = give_human_format_large_amount(
389 give_format_amount($goal, $goal_format_args),
390 ['currency' => $form_currency]
391 );
392
393 // Format the human readable donation amount.
394 $formatted_income = give_currency_filter(
395 $income,
396 [
397 'form_id' => $form_id,
398 ]
399 );
400
401 $formatted_goal = give_currency_filter(
402 $goal,
403 [
404 'form_id' => $form_id,
405 ]
406 );
407 echo sprintf(
408 /* translators: 1: amount of income raised 2: goal target amount. */
409 __(
410 '<span class="amount" data-amounts="%1$s">%2$s</span>
411 <span class="goal" data-amounts="%3$s">of %4$s</span>',
412 'give'
413 ),
414 esc_attr(wp_json_encode($income_amounts, JSON_PRETTY_PRINT)),
415 esc_attr($formatted_income),
416 esc_attr(wp_json_encode($goal_amounts, JSON_PRETTY_PRINT)),
417 esc_attr($formatted_goal)
418 );
419
420 elseif ('percentage' === $goal_format) :
421
422 echo sprintf( /* translators: %s: percentage of the amount raised compared to the goal target */
423 __(
424 '
425 <span class="amount">%s%%</span>
426 <span class="goal">of 100&#37;</span>',
427 'give'
428 ),
429 round($progress)
430 );
431
432 elseif ('donation' === $goal_format) :?>
433
434 <span class="amount">
435 <?php
436 echo give_format_amount($form->get_sales(), ['decimal' => false]) ?>
437 </span>
438
439 <span class="goal">
440 <?php
441 echo sprintf(
442 _n('of %s donation', 'of %s donations', $goal, 'give'),
443 give_format_amount($goal, ['decimal' => false])
444 ); ?>
445 </span>
446
447 <?php
448 elseif ('donors' === $goal_format) : ?>
449
450 <span class="amount"> <?php
451 echo give_get_form_donor_count($form->ID) ?> </span>
452 <span class="goal">
453 <?php
454 echo sprintf(
455 _n('of %s donor', 'of %s donors', $goal, 'give'),
456 give_format_amount($goal, ['decimal' => false])
457 ); ?>
458 </span>
459 <?php
460 endif ?>
461 </div>
462
463 <div class="form-grid-raised__details">
464 <span class="amount form-grid-raised__details_donations">
465 <?php
466 echo $form->get_sales() ?>
467 </span>
468 <span class="goal">
469 <?php
470 echo _n('donation', 'donations', $goal, 'give') ?> </span>
471 </div>
472 </div>
473 </div>
474 <?php
475 endif ?>
476 </div>
477 </div>
478 </a>
479 <?php
480 // If modal, print form in hidden container until it is time to be revealed.
481 if ('modal_reveal' === $atts['display_style']) {
482 if (
483 !isset($_GET['context']) // check if we are in block editor
484 && !FormUtils::isLegacyForm($form_id)
485 ) {
486 echo give_form_shortcode(
487 [
488 'id' => $form_id,
489 'display_style' => 'button',
490 ]
491 );
492 } else {
493 printf(
494 '<div id="give-modal-form-%1$s" class="give-donation-grid-item-form give-modal--slide mfp-hide">',
495 $form_id
496 );
497
498 echo give_form_shortcode(
499 [
500 'id' => $form_id,
501 'display_style' => 'button',
502 ]
503 );
504
505 echo '</div>';
506 }
507 }
508 ?>
509 </div>
510
511