Completed
Push — issues/611 ( 661115...758b1c )
by Ravinder
21:11
created

offline-donations.php ➔ give_offline_send_admin_notice()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 48
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 30
nc 6
nop 1
dl 0
loc 48
rs 8.551
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 21 and the first side effect is on line 31.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
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
/**
35
 * Add our payment instructions to the checkout
36
 *
37
 * @since  1.0
38
 *
39
 * @param  int $form_id Give form id.
40
 *
41
 * @return void
42
 */
43
function give_offline_payment_cc_form( $form_id ) {
44
	// Get offline payment instruction.
45
	$offline_instructions = give_get_offline_payment_instruction( $form_id, true );
46
47
	ob_start();
48
49
	/**
50
	 * Fires before the offline info fields.
51
	 *
52
	 * @since 1.0
53
	 *
54
	 * @param int $form_id Give form id.
55
	 */
56
	do_action( 'give_before_offline_info_fields', $form_id );
57
	?>
58
    <fieldset id="give_offline_payment_info">
59
		<?php echo stripslashes( $offline_instructions ); ?>
60
    </fieldset>
61
	<?php
62
	/**
63
	 * Fires after the offline info fields.
64
	 *
65
	 * @since 1.0
66
	 *
67
	 * @param int $form_id Give form id.
68
	 */
69
	do_action( 'give_after_offline_info_fields', $form_id );
70
71
	echo ob_get_clean();
72
}
73
74
add_action( 'give_offline_cc_form', 'give_offline_payment_cc_form' );
75
76
/**
77
 * Give Offline Billing Field
78
 *
79
 * @param $form_id
80
 */
81
function give_offline_billing_fields( $form_id ) {
82
	//Enable Default CC fields (billing info)
83
	$post_offline_cc_fields        = get_post_meta( $form_id, '_give_offline_donation_enable_billing_fields_single', true );
84
	$post_offline_customize_option = get_post_meta( $form_id, '_give_customize_offline_donations', true );
85
86
	$global_offline_cc_fields = give_get_option( 'give_offline_donation_enable_billing_fields' );
87
88
	//Output CC Address fields if global option is on and user hasn't elected to customize this form's offline donation options
89
	if (
90
		( give_is_setting_enabled( $post_offline_customize_option, 'global' ) && give_is_setting_enabled( $global_offline_cc_fields ) )
91
		|| ( give_is_setting_enabled( $post_offline_customize_option, 'enabled' ) && give_is_setting_enabled( $post_offline_cc_fields ) )
92
	) {
93
		give_default_cc_address_fields( $form_id );
94
	}
95
}
96
97
add_action( 'give_before_offline_info_fields', 'give_offline_billing_fields', 10, 1 );
98
99
/**
100
 * Process the payment
101
 *
102
 * @since  1.0
103
 *
104
 * @param $purchase_data
105
 *
106
 * @return void
107
 */
108
function give_offline_process_payment( $purchase_data ) {
109
110
	$purchase_summary = give_get_purchase_summary( $purchase_data );
111
112
	// setup the payment details
113
	$payment_data = array(
114
		'price'           => $purchase_data['price'],
115
		'give_form_title' => $purchase_data['post_data']['give-form-title'],
116
		'give_form_id'    => intval( $purchase_data['post_data']['give-form-id'] ),
117
		'give_price_id'   => isset( $purchase_data['post_data']['give-price-id'] ) ? $purchase_data['post_data']['give-price-id'] : '',
118
		'date'            => $purchase_data['date'],
119
		'user_email'      => $purchase_data['user_email'],
120
		'purchase_key'    => $purchase_data['purchase_key'],
121
		'currency'        => give_get_currency(),
122
		'user_info'       => $purchase_data['user_info'],
123
		'status'          => 'pending',
124
		'gateway'         => 'offline',
125
	);
126
127
128
	// record the pending payment
129
	$payment = give_insert_payment( $payment_data );
130
131
	if ( $payment ) {
132
		give_send_to_success_page();
133
	} else {
134
		// if errors are present, send the user back to the donation form so they can be corrected
135
		give_send_back_to_checkout( '?payment-mode=' . $purchase_data['post_data']['give-gateway'] );
136
	}
137
138
}
139
140
add_action( 'give_gateway_offline', 'give_offline_process_payment' );
141
142
143
/**
144
 * Send Offline Donation Instructions
145
 *
146
 * Sends a notice to the donor with offline instructions; can be customized per form
147
 *
148
 * @param int $payment_id
149
 *
150
 * @since       1.0
151
 * @return void
152
 */
153
function give_offline_send_donor_instructions( $payment_id = 0 ) {
154
155
	$payment_data                      = give_get_payment_meta( $payment_id );
156
	$post_offline_customization_option = get_post_meta( $payment_data['form_id'], '_give_customize_offline_donations', true );
157
158
	//Customize email content depending on whether the single form has been customized
159
	$email_content = give_get_option( 'global_offline_donation_email' );
160
161
	if ( give_is_setting_enabled( $post_offline_customization_option, 'enabled' ) ) {
162
		$email_content = get_post_meta( $payment_data['form_id'], '_give_offline_donation_email', true );
163
	}
164
165
	$from_name = give_get_option( 'from_name', wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) );
166
167
	/**
168
	 * Filters the from name.
169
	 *
170
	 * @since 1.7
171
	 */
172
	$from_name = apply_filters( 'give_donation_from_name', $from_name, $payment_id, $payment_data );
173
174
	$from_email = give_get_option( 'from_email', get_bloginfo( 'admin_email' ) );
175
176
	/**
177
	 * Filters the from email.
178
	 *
179
	 * @since 1.7
180
	 */
181
	$from_email = apply_filters( 'give_donation_from_address', $from_email, $payment_id, $payment_data );
182
183
	$to_email = give_get_payment_user_email( $payment_id );
184
185
	$subject = give_get_option( 'offline_donation_subject', __( 'Offline Donation Instructions', 'give' ) );
186
	if ( give_is_setting_enabled( $post_offline_customization_option, 'enabled' ) ) {
187
		$subject = get_post_meta( $payment_data['form_id'], '_give_offline_donation_subject', true );
188
	}
189
190
	$subject = apply_filters( 'give_offline_donation_subject', wp_strip_all_tags( $subject ), $payment_id );
191
	$subject = give_do_email_tags( $subject, $payment_id );
192
193
	$attachments = apply_filters( 'give_offline_donation_attachments', array(), $payment_id, $payment_data );
194
	$message     = give_do_email_tags( $email_content, $payment_id );
195
196
	$emails = Give()->emails;
197
198
	$emails->__set( 'from_name', $from_name );
199
	$emails->__set( 'from_email', $from_email );
200
	$emails->__set( 'heading', __( 'Offline Donation Instructions', 'give' ) );
201
202
	$headers = apply_filters( 'give_receipt_headers', $emails->get_headers(), $payment_id, $payment_data );
203
	$emails->__set( 'headers', $headers );
204
205
	$emails->send( $to_email, $subject, $message, $attachments );
206
207
}
208
209
210
/**
211
 * Send Offline Donation Admin Notice.
212
 *
213
 * Sends a notice to site admins about the pending donation.
214
 *
215
 * @since       1.0
216
 *
217
 * @param int $payment_id
218
 *
219
 * @return void
220
 *
221
 */
222
function give_offline_send_admin_notice( $payment_id = 0 ) {
223
224
	/* Send an email notification to the admin */
225
	$admin_email = give_get_admin_notice_emails();
226
	$user_info   = give_get_payment_meta_user_info( $payment_id );
227
228
	if ( isset( $user_info['id'] ) && $user_info['id'] > 0 ) {
229
		$user_data = get_userdata( $user_info['id'] );
230
		$name      = $user_data->display_name;
231
	} elseif ( isset( $user_info['first_name'] ) && isset( $user_info['last_name'] ) ) {
232
		$name = $user_info['first_name'] . ' ' . $user_info['last_name'];
233
	} else {
234
		$name = $user_info['email'];
235
	}
236
237
	$amount = give_currency_filter( give_format_amount( give_get_payment_amount( $payment_id ) ) );
238
239
	$admin_subject = apply_filters( 'give_offline_admin_donation_notification_subject', __( 'New Pending Donation', 'give' ), $payment_id );
240
241
	$admin_message = __( 'Dear Admin,', 'give' ) . "\n\n";
242
	$admin_message .= __( 'An offline donation has been made on your website:', 'give' ) . ' ' . get_bloginfo( 'name' ) . ' ';
243
	$admin_message .= __( 'Hooray! 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";
244
245
246
	$admin_message .= '<strong>' . __( 'Donor:', 'give' ) . '</strong> {fullname}' . "\n";
247
	$admin_message .= '<strong>' . __( 'Amount:', 'give' ) . '</strong> {amount}' . "\n\n";
248
249
	$admin_message .= sprintf(
250
		                  '<a href="%1$s">%2$s</a>',
251
		                  admin_url( 'edit.php?post_type=give_forms&page=give-payment-history&view=view-order-details&id=' . $payment_id ),
252
		                  __( 'Click Here to View and/or Update Donation Details', 'give' )
253
	                  ) . "\n\n";
254
255
	$admin_message = apply_filters( 'give_offline_admin_donation_notification', $admin_message, $payment_id );
256
	$admin_message = give_do_email_tags( $admin_message, $payment_id );
257
258
	$attachments   = apply_filters( 'give_offline_admin_donation_notification_attachments', array(), $payment_id );
259
	$admin_headers = apply_filters( 'give_offline_admin_donation_notification_headers', array(), $payment_id );
260
261
	//Send Email
262
	$emails = Give()->emails;
263
	if ( ! empty( $admin_headers ) ) {
264
		$emails->__set( 'headers', $admin_headers );
265
	}
266
267
	$emails->send( $admin_email, $admin_subject, $admin_message, $attachments );
268
269
}
270
271
272
/**
273
>>>>>>> release/2.0
274
 * Register gateway settings.
275
 *
276
 * @param $settings
277
 *
278
 * @return array
279
 */
280
function give_offline_add_settings( $settings ) {
281
282
	// Bailout: Do not show offline gateways setting in to metabox if its disabled globally.
283
	if ( in_array( 'offline', give_get_option( 'gateways' ) ) ) {
284
		return $settings;
285
	}
286
287
	//Vars
288
	$prefix = '_give_';
289
290
	$is_gateway_active = give_is_gateway_active( 'offline' );
291
292
	//this gateway isn't active
293
	if ( ! $is_gateway_active ) {
294
		//return settings and bounce
295
		return $settings;
296
	}
297
298
	//Fields
299
	$check_settings = array(
300
301
		array(
302
			'name'    => __( 'Offline Donations', 'give' ),
303
			'desc'    => __( 'Do you want to customize the donation instructions for this form?', 'give' ),
304
			'id'      => $prefix . 'customize_offline_donations',
305
			'type'    => 'radio_inline',
306
			'default' => 'global',
307
			'options' => apply_filters( 'give_forms_content_options_select', array(
308
					'global'   => __( 'Global Option', 'give' ),
309
					'enabled'  => __( 'Customize', 'give' ),
310
					'disabled' => __( 'Disable', 'give' ),
311
				)
312
			),
313
		),
314
		array(
315
			'name'        => __( 'Billing Fields', 'give' ),
316
			'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' ),
317
			'id'          => $prefix . 'offline_donation_enable_billing_fields_single',
318
			'row_classes' => 'give-subfield',
319
			'type'        => 'radio_inline',
320
			'default'     => 'disabled',
321
			'options'     => array(
322
				'enabled'  => __( 'Enabled', 'give' ),
323
				'disabled' => __( 'Disabled', 'give' ),
324
			),
325
		),
326
		array(
327
			'id'          => $prefix . 'offline_checkout_notes',
328
			'name'        => __( 'Donation Instructions', 'give' ),
329
			'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' ),
330
			'default'     => give_get_default_offline_donation_content(),
331
			'type'        => 'wysiwyg',
332
			'row_classes' => 'give-subfield',
333
			'options'     => array(
334
				'textarea_rows' => 6,
335
			),
336
		),
337
		array(
338
			'id'          => $prefix . 'offline_donation_subject',
339
			'name'        => __( 'Email Subject', 'give' ),
340
			'desc'        => __( 'Enter the subject line for the donation receipt email.', 'give' ),
341
			'default'     => __( '{form_title} - Offline Donation Instructions', 'give' ),
342
			'row_classes' => 'give-subfield',
343
			'type'        => 'text',
344
		),
345
		array(
346
			'id'          => $prefix . 'offline_donation_email',
347
			'name'        => __( 'Email Instructions', 'give' ),
348
			'desc'        => __( 'Enter the instructions you want emailed to the donor after they have submitted the donation form. Most likely this would include important information like mailing address and who to make the check out to.', 'give' ) . ' ' . __( 'Available template tags:', 'give' ) . give_get_emails_tags_list(),
349
			'default'     => give_get_default_offline_donation_email_content(),
350
			'type'        => 'wysiwyg',
351
			'row_classes' => 'give-subfield',
352
			'options'     => array(
353
				'textarea_rows' => 6,
354
			),
355
		),
356
		array(
357
			'name'  => 'offline_docs',
358
			'type'  => 'docs_link',
359
			'url'   => 'http://docs.givewp.com/settings-gateway-offline-donations',
360
			'title' => __( 'Offline Donations', 'give' ),
361
		),
362
	);
363
364
	return array_merge( $settings, $check_settings );
365
}
366
367
add_filter( 'give_forms_offline_donations_metabox_fields', 'give_offline_add_settings' );
368
369
370
/**
371
 * Offline Donation Content
372
 *
373
 * Get default offline donation text
374
 *
375
 * @return string
376
 */
377
function give_get_default_offline_donation_content() {
378
379
	$sitename = get_bloginfo( 'sitename' );
380
381
	$default_text = '<p>' . __( 'In order to make an offline donation we ask that you please follow these instructions', 'give' ) . ': </p>';
382
	$default_text .= '<ol>';
383
	$default_text .= '<li>';
384
	$default_text .= sprintf(
385
	/* translators: %s: site name */
386
		__( 'Make a check payable to "%s"', 'give' ),
387
		$sitename
388
	);
389
	$default_text .= '</li>';
390
	$default_text .= '<li>';
391
	$default_text .= sprintf(
392
	/* translators: %s: site name */
393
		__( 'On the memo line of the check, please indicate that the donation is for "%s"', 'give' ),
394
		$sitename
395
	);
396
	$default_text .= '</li>';
397
	$default_text .= '<li>' . __( 'Please mail your check to:', 'give' ) . '</li>';
398
	$default_text .= '</ol>';
399
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>' . $sitename . '</em><br>';
400
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>123 G Street </em><br>';
401
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>San Diego, CA 92101 </em><br>';
402
	$default_text .= '<p>' . __( 'All contributions will be gratefully acknowledged and are tax deductible.', 'give' ) . '</p>';
403
404
	return apply_filters( 'give_default_offline_donation_content', $default_text );
405
406
}
407
408
/**
409
 * Offline Donation Email Content
410
 *
411
 * Gets the default offline donation email content
412
 *
413
 * @return string
414
 */
415
function give_get_default_offline_donation_email_content() {
416
417
	$sitename     = get_bloginfo( 'sitename' );
418
	$default_text = '<p>' . __( 'Dear {name},', 'give' ) . '</p>';
419
	$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>';
420
	$default_text .= '<ol>';
421
	$default_text .= '<li>';
422
	$default_text .= sprintf(
423
	/* translators: %s: site name */
424
		__( 'Make a check payable to "%s"', 'give' ),
425
		$sitename
426
	);
427
	$default_text .= '</li>';
428
	$default_text .= '<li>';
429
	$default_text .= sprintf(
430
	/* translators: %s: site name */
431
		__( 'On the memo line of the check, please indicate that the donation is for "%s"', 'give' ),
432
		$sitename
433
	);
434
	$default_text .= '</li>';
435
	$default_text .= '<li>' . __( 'Please mail your check to:', 'give' ) . '</li>';
436
	$default_text .= '</ol>';
437
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>' . $sitename . '</em><br>';
438
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>123 G Street </em><br>';
439
	$default_text .= '&nbsp;&nbsp;&nbsp;&nbsp;<em>San Diego, CA 92101 </em><br>';
440
	$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>';
441
	$default_text .= '<p>' . __( 'Sincerely,', 'give' ) . '</p>';
442
	$default_text .= '<p>' . $sitename . '</p>';
443
444
	return apply_filters( 'give_default_offline_donation_content', $default_text );
445
446
}
447
448
/**
449
 * Set notice for offline donation.
450
 *
451
 * @since 1.7
452
 *
453
 * @param string $notice
454
 * @param int    $id
455
 *
456
 * @return string
0 ignored issues
show
Documentation introduced by
Should the return type not be string|null?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
457
 */
458
function give_offline_donation_receipt_status_notice( $notice, $id ) {
459
	$payment = new Give_Payment( $id );
460
461
	if ( 'offline' !== $payment->gateway || $payment->is_completed() ) {
462
		return $notice;
463
	}
464
465
	return give_output_error( __( 'Payment Pending: Please follow the instructions below to complete your donation.', 'give' ), false, 'warning' );
466
}
467
468
add_filter( 'give_receipt_status_notice', 'give_offline_donation_receipt_status_notice', 10, 2 );
469
470
/**
471
 * Add offline payment instruction on payment receipt.
472
 *
473
 * @since 1.7
474
 *
475
 * @param WP_Post $payment
476
 *
477
 * @return mixed
478
 */
479
function give_offline_payment_receipt_after( $payment ) {
480
	// Get payment object.
481
	$payment = new Give_Payment( $payment->ID );
482
483
	// Bailout.
484
	if ( 'offline' !== $payment->gateway ) {
485
		return false;
486
	}
487
488
	?>
489
    <tr>
490
        <td scope="row"><strong><?php esc_html_e( 'Offline Payment Instruction:', 'give' ); ?></strong></td>
491
        <td>
492
			<?php echo give_get_offline_payment_instruction( $payment->form_id, true ); ?>
493
        </td>
494
    </tr>
495
	<?php
496
}
497
498
add_filter( 'give_payment_receipt_after', 'give_offline_payment_receipt_after' );
499
500
/**
501
 * Get offline payment instructions.
502
 *
503
 * @since 1.7
504
 *
505
 * @param int  $form_id
506
 * @param bool $wpautop
507
 *
508
 * @return string
509
 */
510
function give_get_offline_payment_instruction( $form_id, $wpautop = false ) {
511
	// Bailout.
512
	if ( ! $form_id ) {
513
		return '';
514
	}
515
516
	$post_offline_customization_option = get_post_meta( $form_id, '_give_customize_offline_donations', true );
517
	$post_offline_instructions         = get_post_meta( $form_id, '_give_offline_checkout_notes', true );
518
	$global_offline_instruction        = give_get_option( 'global_offline_donation_content' );
519
	$offline_instructions              = $global_offline_instruction;
520
521
	if ( give_is_setting_enabled( $post_offline_customization_option ) ) {
522
		$offline_instructions = $post_offline_instructions;
523
	}
524
525
	$settings_url = admin_url( 'post.php?post=' . $form_id . '&action=edit&message=1' );
526
527
	/* translators: %s: form settings url */
528
	$offline_instructions = ! empty( $offline_instructions ) ? $offline_instructions : sprintf( __( 'Please enter offline donation instructions in <a href="%s">this form\'s settings</a>.', 'give' ), $settings_url );
529
530
	return ( $wpautop ? wpautop( $offline_instructions ) : $offline_instructions );
531
}
532
533
534
/**
535
 * Remove offline gateway from gateway list of offline disable for form.
536
 *
537
 * @since  1.8
538
 *
539
 * @param  array $gateway_list
540
 * @param        $form_id
541
 *
542
 * @return array
543
 */
544
function give_filter_offline_gateway( $gateway_list, $form_id ) {
545
	if (
546
		// Show offline payment gateway if enable for new donation form.
547
		( false === strpos( $_SERVER['REQUEST_URI'], '/wp-admin/post-new.php?post_type=give_forms' ) )
548
		&& $form_id
549
		&& ! give_is_setting_enabled( get_post_meta( $form_id, '_give_customize_offline_donations', true ), array( 'enabled', 'global', ) )
550
	) {
551
		unset( $gateway_list['offline'] );
552
	}
553
554
	// Output.
555
	return $gateway_list;
556
}
557
558
add_filter( 'give_enabled_payment_gateways', 'give_filter_offline_gateway', 10, 2 );
559
560
/**
561
 * Set default gateway to global default payment gateway
562
 * if current default gateways selected offline and offline payment gateway is disabled.
563
 *
564
 * @since 1.8
565
 *
566
 * @param  string $meta_key   Meta key.
567
 * @param  string $meta_value Meta value.
568
 * @param  int    $postid     Form ID.
569
 *
570
 * @return void
571
 */
572
function _give_customize_offline_donations_on_save_callback( $meta_key, $meta_value, $postid ) {
0 ignored issues
show
Unused Code introduced by
The parameter $meta_key is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
573
	if ( ! give_is_setting_enabled( $meta_value ) && ( 'offline' === get_post_meta( $postid, '_give_default_gateway', true ) ) ) {
574
		update_post_meta( $postid, '_give_default_gateway', 'global' );
575
	}
576
}
577
578
add_filter( 'give_save__give_customize_offline_donations', '_give_customize_offline_donations_on_save_callback', 10, 3 );
579