PluginProbe
Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) / 1.8.11.3
Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) v1.8.11.3
1.8.13.1 1.8.13 1.8.12.3 1.8.12.2 1.8.12.1 1.8.12 1.8.11.3 1.8.11.2 1.8.11.1 1.8.11 1.6.6 1.6.60 1.6.7 1.6.8 1.6.9 1.7.0 1.7.0.1 1.7.0.11 1.7.0.12 1.7.0.14 1.7.0.2 1.7.0.3 1.7.0.5 1.7.0.6 1.7.0.7 All 212 releases
charitable / includes / admin / campaign-builder / fields / class-campaign-summary.php

class-campaign-summary.php in Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) 1.8.11.3, at includes/admin/campaign-builder/fields/class-campaign-summary.php

446 lines 15.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class to add info bar field to a campaign form in the builder.
4 *
5 * @package Charitable/Classes/Charitable_Field_Campaign_Summary
6 * @author David Bisset
7 * @copyright Copyright (c) 2023, WP Charitable LLC
8 * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9 * @since 1.8.0
10 * @version 1.8.0
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 if ( ! class_exists( 'Charitable_Field_Campaign_Summary' ) ) :
18
19 /**
20 * Class to add campaign summary field to a campaign form in the builder.
21 */
22 class Charitable_Field_Campaign_Summary extends Charitable_Builder_Field {
23
24 /**
25 * Primary class constructor.
26 *
27 * @since 1.8.0
28 */
29 public function init() {
30
31 // Basic information.
32 $this->name = esc_html__( 'Campaign Summary', 'charitable' );
33 $this->type = 'campaign-summary';
34 $this->icon = 'fa-list-ul';
35 $this->order = 50;
36
37 $this->align_default = 'center';
38
39 // Edit/Duplication information.
40 $this->can_be_edited = true;
41 $this->can_be_deleted = true;
42 $this->can_be_duplicated = true;
43 $this->edit_label = 'Edit Campaign Summary';
44 $this->edit_type = 'campaign-summary';
45 $this->edit_section = 'recommended';
46
47 // Misc.
48 $this->tooltip = '';
49
50 // Define additional field properties.
51 add_action( 'charitable_frontend_js', [ $this, 'frontend_js' ] );
52 }
53
54 /**
55 * Social Sharing options panel inside the builder.
56 *
57 * @since 1.8.0
58 *
59 * @param array $field Field settings.
60 */
61 public function field_options( $field ) {
62 /*
63 * Basic field options.
64 */
65
66 } // phpcs:ignore
67
68 /**
69 * Render the field.
70 *
71 * @since 1.8.0
72 *
73 * @param array $field_data Any field data.
74 * @param array $campaign_data Amount data and settings.
75 * @param integer $field_id The field ID.
76 * @param string $mode Where the field is being displayed ("preview" or "template").
77 * @param array $template_data Tempalate data.
78 */
79 public function render( $field_data = false, $campaign_data = false, $field_id = 0, $mode = 'template', $template_data = false ) {
80
81 $campaign = isset( $campaign_data['id'] ) && 0 !== intval( $campaign_data['id'] ) ? charitable_get_campaign( $campaign_data['id'] ) : false;
82
83 if ( ! $campaign ) {
84 // use default settings?
85 $percent_donated = '0%';
86 $donation_summary_content = '<span class="amount">$0.00</span> Donated';
87 $donor_count = '0';
88 $time_left = false;
89 $is_time_left = false;
90 } else {
91 $percent_donated = ( false !== $campaign->get_percent_donated() ) ? esc_html( $campaign->get_percent_donated() ) : '&nbsp;&nbsp;';
92 $donation_summary_content = ( method_exists( $campaign, 'get_builder_donation_summary' ) ) ? $campaign->get_builder_donation_summary() : $campaign->get_donation_summary();
93 $donor_count = esc_html( $campaign->get_donor_count() );
94 $time_left = trim( $campaign->get_time_left() );
95 $is_time_left = ( '' !== $time_left ) ? true : false;
96 }
97
98 ob_start();
99
100 $headline = ! empty( $field_data['headline'] ) ? esc_html( $field_data['headline'] ) : false;
101
102 ?>
103
104 <?php
105
106 $preview_css_class = $this->maybe_display_field( $campaign_data, $field_id, 'campaign_hide_percent_raised' ) ? false : 'charitable-hidden';
107 $preview_css_class = $percent_donated !== '&nbsp;&nbsp;' ? $preview_css_class : 'charitable-hidden';
108
109 ?>
110 <div class="campaign-raised campaign-summary-item campaign_hide_percent_raised <?php echo esc_attr( $preview_css_class ); ?>">
111 <?php
112
113 printf(
114 /* translators: %s: percentage raised */
115 _x( '%s Raised', 'percentage raised', 'charitable' ), // phpcs:ignore
116 '<span class="amount">' . esc_html( $percent_donated ) . '</span>'
117 );
118
119 ?>
120 </div>
121
122 <?php
123
124 $preview_css_class = $this->maybe_display_field( $campaign_data, $field_id, 'campaign_hide_amount_donated' ) ? false : 'charitable-hidden';
125
126 if ( '' !== trim( $donation_summary_content ) ) :
127 ?>
128 <div class="campaign-figures campaign-summary-item campaign_hide_amount_donated <?php echo esc_attr( $preview_css_class ); ?>"><?php echo $donation_summary_content; // phpcs:ignore ?></div>
129 <?php endif; ?>
130
131 <?php
132
133 $preview_css_class = $this->maybe_display_field( $campaign_data, $field_id, 'campaign_hide_number_of_donors', $field_data ) ? false : 'charitable-hidden';
134
135 ?>
136
137 <div class="campaign-donors campaign-summary-item campaign_hide_number_of_donors <?php echo esc_attr( $preview_css_class ); ?>">
138 <?php
139
140 if ( intval( $donor_count ) === 1 ) {
141
142 printf(
143 /* translators: %s: number of donors */
144 _x( '%s Donor', 'number of donors', 'charitable' ), // phpcs:ignore
145 '<span class="donors-count">' . esc_html( $donor_count ) . '</span>'
146 );
147
148 } else {
149
150 printf(
151 /* translators: %s: number of donors */
152 _x( '%s Donors', 'number of donors', 'charitable' ), // phpcs:ignore
153 '<span class="donors-count">' . esc_html( $donor_count ) . '</span>'
154 );
155
156 }
157 ?>
158 </div>
159
160 <?php
161
162 $preview_css_class = 'charitable-hidden';
163
164 if ( 'template' === $mode ) {
165 if ( ! empty( $field_data['show_hide'] ) && isset( $field_data['show_hide']['campaign_hide_time_remaining'] ) && 1 === intval( $field_data['show_hide']['campaign_hide_time_remaining'] ) ) {
166 $preview_css_class = $is_time_left ? false : 'charitable-hidden';
167 }
168 } elseif ( ! empty( $field_data['show_hide'] ) && isset( $field_data['show_hide']['campaign_hide_time_remaining'] ) && 1 === intval( $field_data['show_hide']['campaign_hide_time_remaining'] ) ) {
169 $preview_css_class = $is_time_left ? false : 'charitable-hidden';
170 }
171
172 // $preview_css_class = $is_time_left ? false : 'charitable-hidden';
173
174 ?>
175
176 <div class="campaign-time-left campaign-summary-item campaign_hide_time_remaining <?php echo esc_attr( $preview_css_class ); ?>">
177 <?php
178 if ( $is_time_left ) {
179 echo $time_left; // phpcs:ignore
180 } else {
181 echo '<span class="amount time-left days-left">XX</span> Days Left';
182 }
183 ?>
184 </div>
185
186 <?php
187
188 $pre_html = ob_get_clean();
189
190 $html = '<div class="charitable-field-' . $mode . '-campaign-summary charitable-prevent-select"><div class="charitable-main-placeholder"><h5 class="charitable-field-' . $mode . '-headline">' . $headline . '</h5></div>' . $pre_html . '</div>';
191
192 return $html;
193 }
194
195 /**
196 * Social Sharing preview inside the builder.
197 *
198 * @since 1.8.0
199 *
200 * @param array $field_data Field data and settings.
201 * @param array $campaign_data Campaign data and settings.
202 * @param array $field_id Field ID.
203 * @param string $theme Template data.
204 */
205 public function field_preview( $field_data = false, $campaign_data = false, $field_id = false, $theme = '' ) {
206
207 if ( empty( $field_data['align'] ) ) {
208 $field_data['align'] = $this->align_default;
209 }
210
211 $html = $this->field_title( $this->name );
212 $html .= $this->field_wrapper( $this->render( $field_data, $campaign_data, $field_id, 'preview' ), $field_data );
213
214 echo $html; // phpcs:ignore
215 }
216
217 /**
218 * The display on the campaign front-end.
219 *
220 * @since 1.8.0
221 *
222 * @param string $field_type The passed field type.
223 * @param array $field_data Any field data.
224 * @param array $campaign_data Amount data and settings.
225 * @param bool $is_preview_page If the page is a preview page.
226 * @param int $field_id The field ID.
227 */
228 public function field_display( $field_type = '', $field_data = false, $campaign_data = false, $is_preview_page = false, $field_id = 0 ) {
229
230 $html = $this->field_display_wrapper( $this->render( $field_data, $campaign_data, $field_id ), $field_data );
231
232 echo apply_filters( 'charitable_campaign_builder_' . $this->type . '_field_display', $html, $campaign_data ); // phpcs:ignore
233 }
234
235 /**
236 * The display on the form settings backend when the user clicks on the field/block.
237 *
238 * @since 1.8.0
239 *
240 * @param array $field_id Field ID.
241 * @param array $campaign_data Campaign data and settings.
242 */
243 public function settings_display( $field_id = false, $campaign_data = false ) {
244
245 if ( ! class_exists( 'Charitable_Builder_Form_Fields' ) || false === $field_id ) {
246 return;
247 }
248
249 $charitable_builder_form_fields = new Charitable_Builder_Form_Fields();
250
251 $settings = isset( $campaign_data['fields'][ $field_id ] ) ? $campaign_data['fields'][ $field_id ] : false;
252 $field_id = intval( $field_id );
253
254 ob_start();
255
256 ?>
257
258 <h4 class="charitable-panel-field" data-field-id="<?php echo intval( $field_id ); ?>"><?php echo esc_html( $this->name ); ?> (ID: <?php echo intval( $field_id ); ?>)</h4>
259
260 <div class="charitable-panel-field charitable-panel-field-section" data-field-id="<?php echo intval( $field_id ); ?>">
261
262 <?php echo do_action( 'charitable_builder_' . $this->type . '_settings_display_start', $field_id, $campaign_data ); // phpcs:ignore ?>
263
264 </div>
265
266 <?php
267
268 echo $charitable_builder_form_fields->generate_text( // phpcs:ignore
269 isset( $settings['headline'] ) ? $settings['headline'] : '',
270 esc_html__( 'Headline', 'charitable' ),
271 array(
272 'id' => 'field_' . esc_attr( $this->type ) . '_headline' . '_' . intval( $field_id ), // phpcs:ignore
273 'name' => array( '_fields', intval( $field_id ), 'headline' ),
274 'field_id' => intval( $field_id ),
275 'tooltip' => esc_html__( 'Add a headline to this field.', 'charitable' ),
276 'class' => 'charitable-campaign-builder-headline',
277 )
278 );
279
280 echo $charitable_builder_form_fields->generate_checkboxes( // phpcs:ignore
281 isset( $settings['show_hide'] ) ? $settings['show_hide'] : false,
282 esc_html__( 'Choose what information to show:', 'charitable' ),
283 array(
284 'id' => 'field_' . esc_attr( $this->type ) . '_show_hide' . '_' . intval( $field_id ), // phpcs:ignore
285 'name' => array( '_fields', intval( $field_id ), 'show_hide' ),
286 'field_id' => intval( $field_id ),
287 'tooltip' => esc_html( $this->tooltip ),
288 'class' => 'charitable-campaign-summary-checkboxes',
289 'description' => esc_html__( 'Note: Some items might not be visible or enabled depending on campaign goal and date settings. Save and refresh the builder to see updated values.', 'charitable' ),
290 'options' => array(
291 esc_html__( 'Amount Donated', 'charitable' ) => 'campaign_hide_amount_donated',
292 esc_html__( 'Number of Donors', 'charitable' ) => 'campaign_hide_number_of_donors',
293 esc_html__( 'Percent Raised', 'charitable' ) => 'campaign_hide_percent_raised',
294 esc_html__( 'Time Remaining', 'charitable' ) => 'campaign_hide_time_remaining',
295 ),
296 'defaults' => array(
297 'campaign_hide_amount_donated',
298 'campaign_hide_number_of_donors',
299 ),
300 )
301 );
302
303 echo $charitable_builder_form_fields->generate_divider( false, false, array( 'field_id' => $field_id ) ); // phpcs:ignore
304
305 echo $charitable_builder_form_fields->generate_number_slider( // phpcs:ignore
306 isset( $settings['width_percentage'] ) ? $settings['width_percentage'] : 100,
307 esc_html__( 'Width', 'charitable' ),
308 array(
309 'id' => 'field_' . esc_attr( $this->type ) . '_width_percentage' . '_' . intval( $field_id ), // phpcs:ignore
310 'name' => array( '_fields', intval( $field_id ), 'width_percentage' ),
311 'field_type' => esc_attr( $this->type ),
312 'field_id' => intval( $field_id ),
313 'symbol' => '%',
314 'min' => 0,
315 'min_actual' => 30,
316 'css_class' => 'charitable-indicator-on-hover',
317 'tooltip' => esc_html__( 'Adjust the width of the field within the column.', 'charitable' ),
318 )
319 );
320
321 echo $charitable_builder_form_fields->generate_align( // phpcs:ignore
322 isset( $settings['align'] ) ? $settings['align'] : esc_attr( $this->align_default ),
323 esc_html__( 'Align', 'charitable' ),
324 array(
325 'id' => 'field_' . esc_attr( $this->type ) . '_align' . '_' . intval( $field_id ), // phpcs:ignore
326 'name' => array( '_fields', intval( $field_id ), 'align' ),
327 'field_id' => intval( $field_id ),
328 )
329 );
330
331 /* CSS CLASS */
332
333 echo $charitable_builder_form_fields->generate_text( // phpcs:ignore
334 isset( $settings['css_class'] ) ? $settings['css_class'] : false,
335 esc_html__( 'CSS Class', 'charitable' ),
336 array(
337 'id' => 'field_' . esc_attr( $this->type ) . '_css_class' . '_' . intval( $field_id ), // phpcs:ignore
338 'name' => array( '_fields', intval( $field_id ), 'css_class' ),
339 'field_id' => intval( $field_id ),
340 'tooltip' => esc_html__( 'Add CSS classes (seperated by a space) for this field to customize it\'s appearance in your theme.', 'charitable' ),
341 )
342 );
343
344 ?>
345
346 <div class="charitable-panel-field charitable-panel-field-section" data-field-id="<?php echo intval( $field_id ); ?>">
347
348 <?php do_action( 'charitable_builder_' . $this->type . '_settings_display_end', $field_id, $campaign_data ); ?>
349
350 </div>
351
352 <?php
353
354 $html = ob_get_clean();
355
356 return $html;
357 }
358
359 /**
360 * Enqueue frontend limit option js.
361 *
362 * @since 1.8.0
363 *
364 * @param array $forms Forms on the current page.
365 */
366 public function frontend_js( $forms ) {
367 }
368
369 /**
370 * Format and sanitize field.
371 *
372 * @since 1.8.0
373 *
374 * @param int $field_id Field ID.
375 * @param mixed $field_submit Field value that was submitted.
376 * @param array $campaign_data Form data and settings.
377 */
378 public function format( $field_id, $field_submit, $campaign_data ) {
379 }
380
381 /**
382 * Validate field on form submit.
383 *
384 * @since 1.8.0
385 *
386 * @param int $field_id Field ID.
387 * @param mixed $field_submit Field value that was submitted.
388 * @param array $campaign_data Form data and settings.
389 */
390 public function validate( $field_id, $field_submit, $campaign_data ) {
391 }
392
393 /**
394 * Easier to read field/function to determine to show a part of the summary based on settings.
395 *
396 * @since 1.8.0
397 *
398 * @param array $campaign_data Campaign Data.
399 * @param int $field_id Field ID.
400 * @param string $slug Slug.
401 * @param array $field_data Field Data.
402 */
403 public function maybe_display_field( $campaign_data = false, $field_id = 0, $slug = false, $field_data = false ) {
404
405 if ( false === $slug ) {
406 return false;
407 }
408
409 // Overriding check - if the slug is a key in $field_Data and equals 1, return true.
410 if ( ! empty( $field_data ) && ! empty( $field_data['show_hide'] ) && key_exists( $slug, $field_data['show_hide'] ) ) {
411 if ( 1 === intval( $field_data['show_hide'][ $slug ] ) ) {
412 return true;
413 }
414 } else if ( ! empty( $field_data ) && ! empty( $field_data['show_hide'] ) && ! key_exists( $slug, $field_data['show_hide'] ) ) {
415 return false;
416 }
417
418 $slug = strtolower( $slug );
419
420 if ( $slug === 'campaign_hide_percent_raised' && ( empty( $campaign_data ) || empty( $campaign_data['settings']['general']['goal'] ) || '' === $campaign_data['settings']['general']['goal'] ) ) {
421 return false;
422 }
423
424 $settings = ! empty( $campaign_data['fields'][ $field_id ] ) ? $campaign_data['fields'][ $field_id ] : false;
425
426 if ( ! empty( $settings ) && ! empty( $settings['show_hide'] ) && key_exists( $slug, $settings['show_hide'] ) ) {
427 if ( 1 === intval( $settings['show_hide'][ $slug ] ) ) {
428 return true;
429 } else {
430 return false;
431 }
432 } else { // phpcs:ignore
433 // With no settings, establish defaults.
434 if ( empty( $settings ) || ! isset( $settings['show_hide'] ) ) {
435 if ( 'campaign_hide_amount_donated' === $slug || 'campaign_hide_number_of_donors' === $slug ) {
436 return true;
437 }
438 }
439 }
440
441 return false;
442 }
443 }
444
445 new Charitable_Field_Campaign_Summary();
446 endif;