PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.4
GiveWP – Donation Plugin and Fundraising Platform v2.2.4
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 / gateways / offline-donations.php
give / includes / gateways Last commit date
actions.php 7 years ago functions.php 8 years ago manual.php 8 years ago offline-donations.php 7 years ago paypal-standard.php 7 years ago
offline-donations.php
518 lines
1 <?php
2 /**
3 * Offline Donations Gateway
4 *
5 * @package Give
6 * @subpackage Gateways
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 /**
13 * Register the payment gateway
14 *
15 * @since 1.0
16 *
17 * @param array $gateways
18 *
19 * @return array
20 */
21 function give_offline_register_gateway( $gateways ) {
22 // Format: ID => Name
23 $gateways['offline'] = array(
24 'admin_label' => esc_attr__( 'Offline Donation', 'give' ),
25 'checkout_label' => esc_attr__( 'Offline Donation', 'give' ),
26 );
27
28 return $gateways;
29 }
30
31 add_filter( 'give_payment_gateways', 'give_offline_register_gateway', 1 );
32
33 /**
34 * Add our payment instructions to the checkout
35 *
36 * @since 1.0
37 *
38 * @param int $form_id Give form id.
39 *
40 * @return void
41 */
42 function give_offline_payment_cc_form( $form_id ) {
43 // Get offline payment instruction.
44 $offline_instructions = give_get_offline_payment_instruction( $form_id, true );
45
46 ob_start();
47
48 /**
49 * Fires before the offline info fields.
50 *
51 * @since 1.0
52 *
53 * @param int $form_id Give form id.
54 */
55 do_action( 'give_before_offline_info_fields', $form_id );
56 ?>
57 <fieldset id="give_offline_payment_info">
58 <?php echo stripslashes( $offline_instructions ); ?>
59 </fieldset>
60 <?php
61 /**
62 * Fires after the offline info fields.
63 *
64 * @since 1.0
65 *
66 * @param int $form_id Give form id.
67 */
68 do_action( 'give_after_offline_info_fields', $form_id );
69
70 echo ob_get_clean();
71 }
72
73 add_action( 'give_offline_cc_form', 'give_offline_payment_cc_form' );
74
75 /**
76 * Give Offline Billing Field
77 *
78 * @param $form_id
79 */
80 function give_offline_billing_fields( $form_id ) {
81 //Enable Default CC fields (billing info)
82 $post_offline_cc_fields = give_get_meta( $form_id, '_give_offline_donation_enable_billing_fields_single', true );
83 $post_offline_customize_option = give_get_meta( $form_id, '_give_customize_offline_donations', true );
84
85 $global_offline_cc_fields = give_get_option( 'give_offline_donation_enable_billing_fields' );
86
87 //Output CC Address fields if global option is on and user hasn't elected to customize this form's offline donation options
88 if (
89 ( give_is_setting_enabled( $post_offline_customize_option, 'global' ) && give_is_setting_enabled( $global_offline_cc_fields ) )
90 || ( give_is_setting_enabled( $post_offline_customize_option, 'enabled' ) && give_is_setting_enabled( $post_offline_cc_fields ) )
91 ) {
92 give_default_cc_address_fields( $form_id );
93 }
94 }
95
96 add_action( 'give_before_offline_info_fields', 'give_offline_billing_fields', 10, 1 );
97
98 /**
99 * Process the payment
100 *
101 * @since 1.0
102 *
103 * @param $purchase_data
104 *
105 * @return void
106 */
107 function give_offline_process_payment( $purchase_data ) {
108
109 // Setup the payment details.
110 $payment_data = array(
111 'price' => $purchase_data['price'],
112 'give_form_title' => $purchase_data['post_data']['give-form-title'],
113 'give_form_id' => intval( $purchase_data['post_data']['give-form-id'] ),
114 'give_price_id' => isset( $purchase_data['post_data']['give-price-id'] ) ? $purchase_data['post_data']['give-price-id'] : '',
115 'date' => $purchase_data['date'],
116 'user_email' => $purchase_data['user_email'],
117 'purchase_key' => $purchase_data['purchase_key'],
118 'currency' => give_get_currency( $purchase_data['post_data']['give-form-id'], $purchase_data ),
119 'user_info' => $purchase_data['user_info'],
120 'status' => 'pending',
121 'gateway' => 'offline',
122 );
123
124
125 // record the pending payment
126 $payment = give_insert_payment( $payment_data );
127
128 if ( $payment ) {
129 give_send_to_success_page();
130 } else {
131 // if errors are present, send the user back to the donation form so they can be corrected
132 give_send_back_to_checkout( '?payment-mode=' . $purchase_data['post_data']['give-gateway'] );
133 }
134
135 }
136
137 add_action( 'give_gateway_offline', 'give_offline_process_payment' );
138
139
140 /**
141 * Send Offline Donation Instructions
142 *
143 * Sends a notice to the donor with offline instructions; can be customized per form
144 *
145 * @param int $payment_id
146 *
147 * @since 1.0
148 * @return void
149 */
150 function give_offline_send_donor_instructions( $payment_id = 0 ) {
151
152 $payment_data = give_get_payment_meta( $payment_id );
153 $post_offline_customization_option = give_get_meta( $payment_data['form_id'], '_give_customize_offline_donations', true );
154
155 //Customize email content depending on whether the single form has been customized
156 $email_content = give_get_option( 'global_offline_donation_email' );
157
158 if ( give_is_setting_enabled( $post_offline_customization_option, 'enabled' ) ) {
159 $email_content = give_get_meta( $payment_data['form_id'], '_give_offline_donation_email', true );
160 }
161
162 $from_name = give_get_option( 'from_name', wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) );
163
164 /**
165 * Filters the from name.
166 *
167 * @since 1.7
168 */
169 $from_name = apply_filters( 'give_donation_from_name', $from_name, $payment_id, $payment_data );
170
171 $from_email = give_get_option( 'from_email', get_bloginfo( 'admin_email' ) );
172
173 /**
174 * Filters the from email.
175 *
176 * @since 1.7
177 */
178 $from_email = apply_filters( 'give_donation_from_address', $from_email, $payment_id, $payment_data );
179
180 $to_email = give_get_payment_user_email( $payment_id );
181
182 $subject = give_get_option( 'offline_donation_subject', __( 'Offline Donation Instructions', 'give' ) );
183 if ( give_is_setting_enabled( $post_offline_customization_option, 'enabled' ) ) {
184 $subject = give_get_meta( $payment_data['form_id'], '_give_offline_donation_subject', true );
185 }
186
187 $subject = apply_filters( 'give_offline_donation_subject', wp_strip_all_tags( $subject ), $payment_id );
188 $subject = give_do_email_tags( $subject, $payment_id );
189
190 $attachments = apply_filters( 'give_offline_donation_attachments', array(), $payment_id, $payment_data );
191 $message = give_do_email_tags( $email_content, $payment_id );
192
193 $emails = Give()->emails;
194
195 $emails->__set( 'from_name', $from_name );
196 $emails->__set( 'from_email', $from_email );
197 $emails->__set( 'heading', __( 'Offline Donation Instructions', 'give' ) );
198
199 $headers = apply_filters( 'give_receipt_headers', $emails->get_headers(), $payment_id, $payment_data );
200 $emails->__set( 'headers', $headers );
201
202 $emails->send( $to_email, $subject, $message, $attachments );
203
204 }
205
206
207 /**
208 * Send Offline Donation Admin Notice.
209 *
210 * Sends a notice to site admins about the pending donation.
211 *
212 * @since 1.0
213 *
214 * @param int $payment_id
215 *
216 * @return void
217 *
218 */
219 function give_offline_send_admin_notice( $payment_id = 0 ) {
220
221 /* Send an email notification to the admin */
222 $admin_email = give_get_admin_notice_emails();
223 $user_info = give_get_payment_meta_user_info( $payment_id );
224
225 if ( isset( $user_info['id'] ) && $user_info['id'] > 0 ) {
226 $user_data = get_userdata( $user_info['id'] );
227 $name = $user_data->display_name;
228 } elseif ( isset( $user_info['first_name'] ) && isset( $user_info['last_name'] ) ) {
229 $name = $user_info['first_name'] . ' ' . $user_info['last_name'];
230 } else {
231 $name = $user_info['email'];
232 }
233
234 $amount = give_donation_amount( $payment_id );
235
236 $admin_subject = apply_filters( 'give_offline_admin_donation_notification_subject', __( 'New Pending Donation', 'give' ), $payment_id );
237
238 $admin_message = __( 'Dear Admin,', 'give' ) . "\n\n";
239 $admin_message .= sprintf(__( 'A new offline donation has been made on your website for %s.', 'give' ), $amount) . "\n\n";
240 $admin_message .= __( 'The donation is in a pending status and is awaiting payment. Donation instructions have been emailed to the donor. Once you receive payment, be sure to mark the donation as complete using the link below.', 'give' ) . "\n\n";
241
242
243 $admin_message .= '<strong>' . __( 'Donor:', 'give' ) . '</strong> {fullname}' . "\n";
244 $admin_message .= '<strong>' . __( 'Amount:', 'give' ) . '</strong> {amount}' . "\n\n";
245
246 $admin_message .= sprintf(
247 '<a href="%1$s">%2$s</a>',
248 admin_url( 'edit.php?post_type=give_forms&page=give-payment-history&view=view-payment-details&id=' . $payment_id ),
249 __( 'View Donation Details &raquo;', 'give' )
250 ) . "\n\n";
251
252 $admin_message = apply_filters( 'give_offline_admin_donation_notification', $admin_message, $payment_id );
253 $admin_message = give_do_email_tags( $admin_message, $payment_id );
254
255 $attachments = apply_filters( 'give_offline_admin_donation_notification_attachments', array(), $payment_id );
256 $admin_headers = apply_filters( 'give_offline_admin_donation_notification_headers', array(), $payment_id );
257
258 //Send Email
259 $emails = Give()->emails;
260 $emails->__set( 'heading', __( 'New Offline Donation', 'give' ) );
261
262 if ( ! empty( $admin_headers ) ) {
263 $emails->__set( 'headers', $admin_headers );
264 }
265
266 $emails->send( $admin_email, $admin_subject, $admin_message, $attachments );
267
268 }
269
270
271 /**
272 * Register gateway settings.
273 *
274 * @param $settings
275 *
276 * @return array
277 */
278 function give_offline_add_settings( $settings ) {
279
280 // Bailout: Do not show offline gateways setting in to metabox if its disabled globally.
281 if ( in_array( 'offline', (array) give_get_option( 'gateways' ) ) ) {
282 return $settings;
283 }
284
285 //Vars
286 $prefix = '_give_';
287
288 $is_gateway_active = give_is_gateway_active( 'offline' );
289
290 //this gateway isn't active
291 if ( ! $is_gateway_active ) {
292 //return settings and bounce
293 return $settings;
294 }
295
296 //Fields
297 $check_settings = array(
298
299 array(
300 'name' => __( 'Offline Donations', 'give' ),
301 'desc' => __( 'Do you want to customize the donation instructions for this form?', 'give' ),
302 'id' => $prefix . 'customize_offline_donations',
303 'type' => 'radio_inline',
304 'default' => 'global',
305 'options' => apply_filters( 'give_forms_content_options_select', array(
306 'global' => __( 'Global Option', 'give' ),
307 'enabled' => __( 'Customize', 'give' ),
308 'disabled' => __( 'Disable', 'give' ),
309 )
310 ),
311 ),
312 array(
313 'name' => __( 'Billing Fields', 'give' ),
314 'desc' => __( 'This option will enable the billing details section for this form\'s offline donation payment gateway. The fieldset will appear above the offline donation instructions.', 'give' ),
315 'id' => $prefix . 'offline_donation_enable_billing_fields_single',
316 'row_classes' => 'give-subfield give-hidden',
317 'type' => 'radio_inline',
318 'default' => 'disabled',
319 'options' => array(
320 'enabled' => __( 'Enabled', 'give' ),
321 'disabled' => __( 'Disabled', 'give' ),
322 ),
323 ),
324 array(
325 'id' => $prefix . 'offline_checkout_notes',
326 'name' => __( 'Donation Instructions', 'give' ),
327 'desc' => __( 'Enter the instructions you want to display to the donor during the donation process. Most likely this would include important information like mailing address and who to make the check out to.', 'give' ),
328 'default' => give_get_default_offline_donation_content(),
329 'type' => 'wysiwyg',
330 'row_classes' => 'give-subfield give-hidden',
331 'options' => array(
332 'textarea_rows' => 6,
333 )
334 ),
335 array(
336 'name' => 'offline_docs',
337 'type' => 'docs_link',
338 'url' => 'http://docs.givewp.com/settings-gateway-offline-donations',
339 'title' => __( 'Offline Donations', 'give' ),
340 ),
341 );
342
343 return array_merge( $settings, $check_settings );
344 }
345
346 add_filter( 'give_forms_offline_donations_metabox_fields', 'give_offline_add_settings' );
347
348
349 /**
350 * Offline Donation Content
351 *
352 * Get default offline donation text
353 *
354 * @return string
355 */
356 function give_get_default_offline_donation_content() {
357 $default_text = '<p>' . __( 'In order to make an offline donation we ask that you please follow these instructions', 'give' ) . ': </p>';
358 $default_text .= '<ol>';
359 $default_text .= '<li>';
360 $default_text .= sprintf(
361 /* translators: %s: site name */
362 __( 'Make a check payable to "{sitename}"', 'give' ) );
363 $default_text .= '</li>';
364 $default_text .= '<li>';
365 $default_text .= sprintf(
366 /* translators: %s: site name */
367 __( 'On the memo line of the check, please indicate that the donation is for "{sitename}"', 'give' ) );
368 $default_text .= '</li>';
369 $default_text .= '<li>' . __( 'Please mail your check to:', 'give' ) . '</li>';
370 $default_text .= '</ol>';
371 $default_text .= '{offline_mailing_address}<br>';
372 $default_text .= '<p>' . __( 'All contributions will be gratefully acknowledged and are tax deductible.', 'give' ) . '</p>';
373
374 return apply_filters( 'give_default_offline_donation_content', $default_text );
375
376 }
377
378 /**
379 * Offline Donation Email Content
380 *
381 * Gets the default offline donation email content
382 *
383 * @return string
384 */
385 function give_get_default_offline_donation_email_content() {
386 $default_text = '<p>' . __( 'Dear {name},', 'give' ) . '</p>';
387 $default_text .= '<p>' . __( 'Thank you for your offline donation request! Your generosity is greatly appreciated. In order to make an offline donation we ask that you please follow these instructions:', 'give' ) . '</p>';
388 $default_text .= '<ol>';
389 $default_text .= '<li>';
390 $default_text .= sprintf(
391 /* translators: %s: site name */
392 __( 'Make a check payable to "{sitename}"', 'give' )
393 );
394 $default_text .= '</li>';
395 $default_text .= '<li>';
396 $default_text .= sprintf(
397 __( 'On the memo line of the check, please indicate that the donation is for "{sitename}"', 'give' )
398 );
399 $default_text .= '</li>';
400 $default_text .= '<li>' . __( 'Please mail your check to:', 'give' ) . '</li>';
401 $default_text .= '</ol>';
402 $default_text .= '{offline_mailing_address}<br>';
403 $default_text .= '<p>' . __( 'Once your donation has been received we will mark it as complete and you will receive an email receipt for your records. Please contact us with any questions you may have!', 'give' ) . '</p>';
404 $default_text .= '<p>' . __( 'Sincerely,', 'give' ) . '</p>';
405 $default_text .= '<p>{sitename}</p>';
406
407 return apply_filters( 'give_default_offline_donation_content', $default_text );
408
409 }
410
411 /**
412 * Get offline payment instructions.
413 *
414 * @since 1.7
415 *
416 * @param int $form_id
417 * @param bool $wpautop
418 *
419 * @return string
420 */
421 function give_get_offline_payment_instruction( $form_id, $wpautop = false ) {
422 // Bailout.
423 if ( ! $form_id ) {
424 return '';
425 }
426
427 $post_offline_customization_option = give_get_meta( $form_id, '_give_customize_offline_donations', true );
428 $post_offline_instructions = give_get_meta( $form_id, '_give_offline_checkout_notes', true );
429 $global_offline_instruction = give_get_option( 'global_offline_donation_content' );
430 $offline_instructions = $global_offline_instruction;
431
432 if ( give_is_setting_enabled( $post_offline_customization_option ) ) {
433 $offline_instructions = $post_offline_instructions;
434 }
435
436 $settings_url = admin_url( 'post.php?post=' . $form_id . '&action=edit&message=1' );
437
438 /* translators: %s: form settings url */
439 $offline_instructions = ! empty( $offline_instructions )
440 ? $offline_instructions
441 : sprintf(
442 __( 'Please enter offline donation instructions in <a href="%s">this form\'s settings</a>.', 'give' ),
443 $settings_url
444 );
445
446 $offline_instructions = give_do_email_tags( $offline_instructions, null );
447
448 $formmated_offline_instructions = $wpautop
449 ? wpautop( do_shortcode( $offline_instructions ) )
450 : $offline_instructions;
451
452 /**
453 * Filter the offline instruction content
454 *
455 * @since 2.2.0
456 *
457 */
458 $formmated_offline_instructions = apply_filters(
459 'give_the_offline_instructions_content',
460 $formmated_offline_instructions,
461 $offline_instructions,
462 $form_id,
463 $wpautop
464 );
465
466 return $formmated_offline_instructions;
467 }
468
469
470 /**
471 * Remove offline gateway from gateway list of offline disable for form.
472 *
473 * @since 1.8
474 *
475 * @param array $gateway_list
476 * @param $form_id
477 *
478 * @return array
479 */
480 function give_filter_offline_gateway( $gateway_list, $form_id ) {
481 if (
482 // Show offline payment gateway if enable for new donation form.
483 ( false === strpos( $_SERVER['REQUEST_URI'], '/wp-admin/post-new.php?post_type=give_forms' ) )
484 && $form_id
485 && ! give_is_setting_enabled( give_get_meta( $form_id, '_give_customize_offline_donations', true ), array( 'enabled', 'global' ) )
486 ) {
487 unset( $gateway_list['offline'] );
488 }
489
490 // Output.
491 return $gateway_list;
492 }
493
494 add_filter( 'give_enabled_payment_gateways', 'give_filter_offline_gateway', 10, 2 );
495
496 /**
497 * Set default gateway to global default payment gateway
498 * if current default gateways selected offline and offline payment gateway is disabled.
499 *
500 * @since 1.8
501 *
502 * @param string $meta_key Meta key.
503 * @param string $meta_value Meta value.
504 * @param int $postid Form ID.
505 *
506 * @return void
507 */
508 function _give_customize_offline_donations_on_save_callback( $meta_key, $meta_value, $postid ) {
509 if (
510 ! give_is_setting_enabled( $meta_value, array( 'global', 'enabled' ) )
511 && ( 'offline' === give_get_meta( $postid, '_give_default_gateway', true ) )
512 ) {
513 give_update_meta( $postid, '_give_default_gateway', 'global' );
514 }
515 }
516
517 add_filter( 'give_save__give_customize_offline_donations', '_give_customize_offline_donations_on_save_callback', 10, 3 );
518