Test Failed
Push — master ( 966cf3...fe1ced )
by Devin
13:57 queued 06:53
created

functions.php ➔ give_admin_notices_disabled()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 1
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
ccs 1
cts 1
cp 1
crap 1
1
<?php
2
/**
3
 * Email Functions
4
 *
5
 * @package     Give
6
 * @subpackage  Emails
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
/**
18
 * Email Donation Receipt.
19
 *
20
 * Email the donation confirmation to the donor via the customizable "Donation Receipt" settings.
21
 *
22
 * @since 1.0
23
 *
24
 * @param int  $payment_id   Payment ID.
25
 * @param bool $admin_notice Whether to send the admin email notification or not (default: true).
26
 *
27
 * @return void
28
 */
29
function give_email_donation_receipt( $payment_id, $admin_notice = true ) {
30
	$payment = new Give_Payment( $payment_id );
31 42
32
	/**
33 42
	 * Fire the action
34 42
	 */
35
	do_action( 'give_donation-receipt_email_notification', $payment_id );
36 42
37 42
	// If admin notifications are on, send the admin notice.
38
	if ( $admin_notice && ! give_admin_notices_disabled( $payment_id ) ) {
39 42
		/**
40
		 * Fires in the donation email receipt.
41 42
		 *
42 42
		 * When admin email notices are not disabled, you can add new email notices.
43 42
		 *
44
		 * @since 1.0
45 42
		 *
46 42
		 * @param int   $payment_id   Payment id.
47
		 * @param mixed $payment_data Payment meta data.
48 42
		 */
49
		do_action( 'give_new-donation_email_notification', $payment_id, $payment->payment_meta );
50 42
	}
51 42
}
52 42
53
/**
54
 * Sends the Admin Sale Notification Email
55 42
 *
56 42
 * @since 1.0
57
 *
58 42
 * @param int $payment_id Payment ID (default: 0)
59
 *
60 42
 * @return void
61 42
 */
62 42
function give_admin_email_notice( $payment_id ) {
63 42
	/**
64
	 * Fires in the donation email receipt.
65
	 *
66
	 * When admin email notices are not disabled, you can add new email notices.
67
	 *
68
	 * @since 1.0
69
	 *
70
	 * @param int   $payment_id   Payment id.
71
	 * @param mixed $payment_data Payment meta data.
72
	 */
73
	do_action( 'give_new-donation_email_notification', $payment_id );
74
}
75
76
add_action( 'give_admin_donation_email', 'give_admin_email_notice' );
77
78
79
/**
80
 * Get default donation notification email text
81
 *
82
 * Returns the stored email text if available, the standard email text if not
83
 *
84
 * @since  1.0
85
 * @return string $message
86
 */
87
function give_get_default_donation_notification_email() {
88
89
	$default_email_body = __( 'Hi there,', 'give' ) . "\n\n";
90
	$default_email_body .= __( 'This email is to inform you that a new donation has been made on your website:', 'give' ) . ' <a href="' . get_bloginfo( 'url' ) . '" target="_blank">' . get_bloginfo( 'url' ) . '</a>' . ".\n\n";
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'get_bloginfo'
Loading history...
91
	$default_email_body .= '<strong>' . __( 'Donor:', 'give' ) . '</strong> {name}' . "\n";
92
	$default_email_body .= '<strong>' . __( 'Donation:', 'give' ) . '</strong> {donation}' . "\n";
93
	$default_email_body .= '<strong>' . __( 'Amount:', 'give' ) . '</strong> {amount}' . "\n";
94
	$default_email_body .= '<strong>' . __( 'Payment Method:', 'give' ) . '</strong> {payment_method}' . "\n\n";
95
	$default_email_body .= __( 'Thank you,', 'give' ) . "\n\n";
96
	$default_email_body .= '{sitename}' . "\n";
97
98
	return apply_filters( 'give_default_donation_notification_email', $default_email_body );
99
}
100
101
102
/**
103
 * Get default donation receipt email text
104
 *
105
 * Returns the stored email text if available, the standard email text if not
106
 *
107
 * @since  1.3.7
108
 * @return string $message
109
 */
110
function give_get_default_donation_receipt_email() {
111
112 42
	$default_email_body = __( 'Dear', 'give' ) . " {name},\n\n";
113
	$default_email_body .= __( 'Thank you for your donation. Your generosity is appreciated! Here are the details of your donation:', 'give' ) . "\n\n";
114 42
	$default_email_body .= '<strong>' . __( 'Donor:', 'give' ) . '</strong> {fullname}' . "\n";
115
	$default_email_body .= '<strong>' . __( 'Donation:', 'give' ) . '</strong> {donation}' . "\n";
116
	$default_email_body .= '<strong>' . __( 'Donation Date:', 'give' ) . '</strong> {date}' . "\n";
117
	$default_email_body .= '<strong>' . __( 'Amount:', 'give' ) . '</strong> {amount}' . "\n";
118 42
	$default_email_body .= '<strong>' . __( 'Payment Method:', 'give' ) . '</strong> {payment_method}' . "\n";
119
	$default_email_body .= '<strong>' . __( 'Payment ID:', 'give' ) . '</strong> {payment_id}' . "\n";
120
	$default_email_body .= '<strong>' . __( 'Receipt ID:', 'give' ) . '</strong> {receipt_id}' . "\n\n";
121
	$default_email_body .= '{receipt_link}' . "\n\n";
122 42
	$default_email_body .= "\n\n";
123 42
	$default_email_body .= __( 'Sincerely,', 'give' ) . "\n";
124
	$default_email_body .= '{sitename}' . "\n";
125 42
126 42
	return apply_filters( 'give_default_donation_receipt_email', $default_email_body );
127
}
128
129 42
/**
130 42
 * Get various correctly formatted names used in emails
131 42
 *
132
 * @since 1.0
133 42
 *
134 42
 * @param $user_info
135
 * @param $payment Give_Payment|bool for getting the names.
136 42
 *
137 42
 * @return array $email_names
138
 */
139 42
function give_get_email_names( $user_info, $payment = false ) {
140
	$email_names = array();
141 42
142
	if ( is_a( $payment, 'Give_Payment' ) ) {
143 42
144 42
		if ( $payment->user_id > 0 ) {
145 42
146 42
			$user_data               = get_userdata( $payment->user_id );
147 42
			$email_names['name']     = $payment->first_name;
148
			$email_names['fullname'] = trim( $payment->first_name . ' ' . $payment->last_name );
149 42
			$email_names['username'] = $user_data->user_login;
150
151 42
		} elseif ( ! empty( $payment->first_name ) ) {
152
153
			$email_names['name']     = $payment->first_name;
154
			$email_names['fullname'] = trim( $payment->first_name . ' ' . $payment->last_name );
155
			$email_names['username'] = $payment->first_name;
156
157
		} else {
158
159
			$email_names['name']     = $payment->email;
160
			$email_names['username'] = $payment->email;
161
162
		}
0 ignored issues
show
introduced by
Blank line found after control structure
Loading history...
163
164 42
	} else {
165
166 42
		// Support for old serialized data.
167 42
		if ( is_serialized( $user_info ) ) {
168
169 42
			// Security check.
170
			preg_match( '/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $user_info, $matches );
171
			if ( ! empty( $matches ) ) {
172
				return array(
173
					'name'     => '',
174
					'fullname' => '',
175
					'username' => '',
176
				);
177
			} else {
178
				$user_info = maybe_unserialize( $user_info );
179
			}
0 ignored issues
show
introduced by
Blank line found after control structure
Loading history...
180
181
		}
182
183 42
		if ( isset( $user_info['id'] ) && $user_info['id'] > 0 && isset( $user_info['first_name'] ) ) {
184
			$user_data               = get_userdata( $user_info['id'] );
185 42
			$email_names['name']     = $user_info['first_name'];
186
			$email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
187
			$email_names['username'] = $user_data->user_login;
188
		} elseif ( isset( $user_info['first_name'] ) ) {
189
			$email_names['name']     = $user_info['first_name'];
190
			$email_names['fullname'] = $user_info['first_name'] . ' ' . $user_info['last_name'];
191
			$email_names['username'] = $user_info['first_name'];
192
		} else {
193
			$email_names['name']     = $user_info['email'];
194
			$email_names['username'] = $user_info['email'];
195
		}
0 ignored issues
show
introduced by
Blank line found after control structure
Loading history...
196
197
	}
198
199
	return $email_names;
200
}
201
202
/**
203
 * Send email to admin when user tries to login and restricted due to user - donor disconnection.
204
 *
205
 * @param int $user_id  User ID.
206
 * @param int $donor_id Donor ID.
207
 *
208
 * @since 1.8.14
209
 */
210
function give_admin_email_user_donor_disconnection( $user_id, $donor_id ) {
211
212
	$user_id  = absint( $user_id );
213
	$donor_id = absint( $donor_id );
214
215
	// Bail Out, if user id doesn't exists.
216
	if ( empty( $user_id ) ) {
217
		return;
218
	}
219
220
	// Bail Out, if donor id doesn't exists.
221
	if ( empty( $donor_id ) ) {
222 42
		return;
223 42
	}
224 42
225 42
	$from_name = give_get_option( 'from_name', wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) );
226 42
227 42
	$from_email = give_get_option( 'from_email', get_bloginfo( 'admin_email' ) );
228 42
229 42
	/* translators: %s: payment id */
230 42
	$subject = __( 'Attention: User tries to login whose Donor profile is disconnected!', 'give' );
231 42
232
	/**
233 42
	 * Filters the Donor-User Disconnection notification subject.
234 42
	 *
235 42
	 * @since 1.8.14
236
	 */
237 42
	$subject = apply_filters( 'give_admin_donor_user_disconnection_notification_subject', wp_strip_all_tags( $subject ) );
238
239 42
	$headers = "From: " . stripslashes_deep( html_entity_decode( $from_name, ENT_COMPAT, 'UTF-8' ) ) . " <$from_email>\r\n";
0 ignored issues
show
Coding Style Comprehensibility introduced by
The string literal From: does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
240
	$headers .= "Reply-To: " . $from_email . "\r\n";
0 ignored issues
show
Coding Style Comprehensibility introduced by
The string literal Reply-To: does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
241 42
	$headers .= "Content-Type: text/html; charset=utf-8\r\n";
242
243
	/**
244
	 * Filters the Donor-User Disconnection notification email headers.
245
	 *
246
	 * @since 1.8.14
247
	 */
248
	$headers = apply_filters( 'give_admin_donor_user_disconnection_notification_headers', $headers );
249
250
	$message = __( 'Hi Admin,', 'give' ) . "\n\n";
251
	$message .= __( 'This email is to inform you that a user has tried logging in. But, User was unable to login due to User-Donor profile disconnection.', 'give' ) . "\n\n";
252
	$message .= __( 'Do you want to reconnect User and Donor profile again?', 'give' ) . "\n\n";
253
	$message .= sprintf(
254 42
		'<a href="%1$s">%2$s</a>',
255 42
		esc_url( admin_url() . 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor_id . '&user_id=' . $user_id . '&give-message=reconnect-user' ),
256
		__( 'Reconnect User', 'give' ) . "\n\n"
257 42
	);
258 42
	$message .= __( 'Thank you,', 'give' ) . "\n\n";
259 41
	$message .= '{sitename}' . "\n";
260 41
261 41
	$emails = Give()->emails;
262 41
	$emails->__set( 'from_name', $from_name );
263 42
	$emails->__set( 'from_email', $from_email );
264 1
	$emails->__set( 'headers', $headers );
265 1
	$emails->__set( 'heading', __( 'User - Donor Profile Disconnection', 'give' ) );
266 1
267 1
	$emails->send( give_get_admin_notice_emails(), $subject, give_do_email_tags( $message ) );
0 ignored issues
show
Bug introduced by
The call to give_do_email_tags() misses a required argument $tag_args.

This check looks for function calls that miss required arguments.

Loading history...
268
269
}
270