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

Give_Email_Access_Email::init()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 21
nc 1
nop 0
dl 0
loc 26
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * Email access notification
4
 *
5
 *
6
 * @package     Give
7
 * @subpackage  Classes/Emails
8
 * @copyright   Copyright (c) 2016, WordImpress
9
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
10
 * @since       2.0
11
 */
12
13
// Exit if access directly.
14
if ( ! defined( 'ABSPATH' ) ) {
15
	exit;
16
}
17
18
if ( ! class_exists( 'Give_Email_Access_Email' ) ) :
19
20
	/**
21
	 * Give_Email_Access_Email
22
	 *
23
	 * @abstract
24
	 * @since 2.0
25
	 */
26
	class Give_Email_Access_Email extends Give_Email_Notification {
27
		/**
28
		 * Create a class instance.
29
		 *
30
		 * @access public
31
		 * @since  2.0
32
		 */
33
		public function init() {
34
			$this->load( array(
35
				'id'                           => 'email-access',
36
				'label'                        => __( 'Email access', 'give' ),
37
				'description'                  => __( 'Sent when donors request access to their donation history using only their email as verification. (See Settings > General > Access Control)', 'give' ),
38
				'notification_status'          => give_get_option( 'email_access', 'disabled' ),
39
				'form_metabox_setting'         => false,
40
				'notification_status_editable' => false,
41
				'email_tag_context'            => 'donor',
42
				'recipient_group_name'         => __( 'Donor', 'give' ),
43
				'default_email_subject'        => sprintf( __( 'Please confirm your email for %s', 'give' ), get_bloginfo( 'url' ) ),
44
				'default_email_message'        => $this->get_default_email_message(),
45
				'notices' => array(
46
					'non-notification-status-editable' => sprintf(
47
						'%1$s <a href="%2$s">%3$s &raquo;</a>',
48
						__( 'This notification is automatically toggled based on whether the email access is enabled or not.', 'give' ),
49
						esc_url( admin_url('edit.php?post_type=give_forms&page=give-settings&tab=general&section=access-control') ),
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
50
						__( 'Edit Setting', 'give' )
51
					)
52
				),
53
			) );
54
55
			add_filter( "give_{$this->config['id']}_email_notification", array( $this, 'setup_email_notification' ), 10, 2 );
56
			add_action( 'give_save_settings_give_settings', array( $this, 'set_notification_status' ), 10, 2 );
57
			add_filter( 'give_email_preview_header', array( $this, 'email_preview_header' ), 10, 2 );
58
		}
59
60
61
		/**
62
		 * Get email subject.
63
		 *
64
		 * @since  2.0
65
		 * @access public
66
		 *
67
		 * @param int $form_id
68
		 *
69
		 * @return string
70
		 */
71 View Code Duplication
		public function get_email_subject( $form_id = null ) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
72
			$subject = wp_strip_all_tags(
73
				Give_Email_Notification_Util::get_value(
74
					$this,
75
					Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_subject',
76
					$form_id,
77
					$this->config['default_email_subject']
78
				)
79
			);
80
81
			/**
82
			 * Filters the donation notification subject.
83
			 * Note: This filter will deprecate soon.
84
			 *
85
			 * @since 1.0
86
			 */
87
			$subject = apply_filters( 'give_email_access_token_subject', $subject );
88
89
			/**
90
			 * Filters the donation notification subject.
91
			 *
92
			 * @since 2.0
93
			 */
94
			$subject = apply_filters( "give_{$this->config['id']}_get_email_subject", $subject, $this, $form_id );
95
96
			return $subject;
97
		}
98
99
100
		/**
101
		 * Get email attachment.
102
		 *
103
		 * @since  2.0
104
		 * @access public
105
		 *
106
		 * @param int $form_id
107
		 *
108
		 * @return string
109
		 */
110 View Code Duplication
		public function get_email_message( $form_id = null ) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
111
			$message = Give_Email_Notification_Util::get_value(
112
				$this,
113
				Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_message',
114
				$form_id,
115
				$this->config['default_email_message']
116
			);
117
118
			/**
119
			 * Filter the email message
120
			 * Note: This filter will deprecate soon.
121
			 *
122
			 * @since 1.0
123
			 */
124
			$message = apply_filters( 'give_email_access_token_message', $message );
125
126
			/**
127
			 * Filter the email message
128
			 *
129
			 * @since 2.0
130
			 */
131
			$message = apply_filters( "give_{$this->config['id']}_get_default_email_message", $message, $this, $form_id );
132
133
			return $message;
134
		}
135
136
137
		/**
138
		 * Get email attachment.
139
		 *
140
		 * @since  2.0
141
		 * @access public
142
		 *
143
		 * @param int $form_id
144
		 * @return array
145
		 */
146
		public function get_email_attachments( $form_id = null ) {
147
			/**
148
			 * Filters the donation notification email attachments.
149
			 * By default, there is no attachment but plugins can hook in to provide one more multiple.
150
			 * Note: This filter will deprecate soon.
151
			 *
152
			 * @since 1.0
153
			 */
154
			$attachments = apply_filters( 'give_admin_donation_notification_attachments', array() );
155
156
			/**
157
			 * Filters the donation notification email attachments.
158
			 * By default, there is no attachment but plugins can hook in to provide one more multiple.
159
			 *
160
			 * @since 2.0
161
			 */
162
			$attachments = apply_filters( "give_{$this->config['id']}_get_email_attachments", $attachments, $this, $form_id );
163
164
			return $attachments;
165
		}
166
167
168
		/**
169
		 * Get default email message.
170
		 *
171
		 * @since  2.0
172
		 * @access public
173
		 *
174
		 * @return string
175
		 */
176
		public function get_default_email_message() {
177
			$message = sprintf(
178
				           __( 'Please click the link to access your donation history on <a target="_blank" href="%1$s">%1$s</a>. If you did not request this email, please contact <a href="mailto:%2$s">%2$s</a>.', 'give' ),
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 16 spaces, but found 27.
Loading history...
179
				           get_bloginfo( 'url' ),
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 16 spaces, but found 27.
Loading history...
180
				           get_bloginfo( 'admin_email' )
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 16 spaces, but found 27.
Loading history...
181
			           ) . "\n\n";
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 12 spaces, but found 23.
Loading history...
182
			$message .= '{email_access_link}' . "\n\n";
183
			$message .= "\n\n";
184
			$message .= __( 'Sincerely,', 'give' ) . "\n";
185
			$message .= get_bloginfo( 'name' ) . "\n";
186
187
			/**
188
			 * Filter the new donation email message
189
			 *
190
			 * @since 2.0
191
			 *
192
			 * @param string $message
193
			 */
194
			return apply_filters( "give_{$this->config['id']}_get_default_email_message", $message, $this );
195
		}
196
197
198
		/**
199
		 * Set email data
200
		 *
201
		 * @since 2.0
202
		 */
203
		public function setup_email_data() {
204
			/**
205
			 * Filters the from name.
206
			 * Note: This filter will deprecate soon.
207
			 *
208
			 * @since 1.0
209
			 */
210
			$from_name = apply_filters( 'give_donation_from_name', Give()->emails->get_from_name() );
211
212
			/**
213
			 * Filters the from email.
214
			 * Note: This filter will deprecate soon.
215
			 *
216
			 * @since 1.0
217
			 */
218
			$from_email = apply_filters( 'give_donation_from_address', Give()->emails->get_from_address() );
219
220
			Give()->emails->__set( 'from_name', $from_name );
221
			Give()->emails->__set( 'from_email', $from_email );
222
			Give()->emails->__set( 'heading', apply_filters( 'give_email_access_token_heading', __( 'Confirm Email', 'give' ) ) );
223
224
			/**
225
			 * Filters the donation notification email headers.
226
			 *
227
			 * @since 1.0
228
			 */
229
			$headers = apply_filters( 'give_admin_donation_notification_headers', Give()->emails->get_headers() );
230
231
			Give()->emails->__set( 'headers', $headers );
232
		}
233
234
		/**
235
		 * Setup email notification.
236
		 *
237
		 * @param int    $donor_id Donor ID.
238
		 * @param string $email    Donor Email.
239
		 *
240
		 * @since  2.0
241
		 * @access public
242
		 *
243
		 * @return bool
244
		 */
245
		public function setup_email_notification( $donor_id, $email ) {
246
			$donor = Give()->donors->get_donor_by( 'email', $email );
247
			$this->recipient_email = $email;
248
249
			// Set email data.
250
			$this->setup_email_data();
251
252
			// Send email.
253
			return $this->send_email_notification(
254
				array(
255
					'donor_id' => $donor_id,
256
					'user_id'  => $donor->user_id
0 ignored issues
show
introduced by
Each line in an array declaration must end in a comma
Loading history...
257
				)
258
			);
259
		}
260
261
262
		/**
263
		 * Set notification status
264
		 *
265
		 * @since  2.0
266
		 * @access public
267
		 *
268
		 * @param $update_options
269
		 * @param $option_name
270
		 */
271
		public function set_notification_status( $update_options, $option_name ) {
272
			// Get updated settings.
273
			$update_options = give_get_settings();
274
275
			if (
276
				! empty( $update_options['email_access'] )
277
				&& ! empty( $update_options[ "{$this->config['id']}_notification" ] )
278
				&& $update_options['email_access'] !== $update_options[ "{$this->config['id']}_notification" ]
279
			) {
280
				$update_options[ "{$this->config['id']}_notification" ] = $update_options['email_access'];
281
				update_option( $option_name, $update_options );
282
			}
283
		}
284
285
286
		/**
287
		 * email preview header.
288
		 *
289
		 * @since  2.0
290
		 * @access public
291
		 *
292
		 * @param string                  $email_preview_header
293
		 * @param Give_Email_Access_Email $email
294
		 * @return string
295
		 */
296
		public function email_preview_header( $email_preview_header, $email ) {
297
			if( $this->config['id'] === $email->config['id'] ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
298
				$email_preview_header = '';
299
			}
300
301
			return $email_preview_header;
302
		}
303
	}
304
305
endif; // End class_exists check
306
307
return Give_Email_Access_Email::get_instance();
308