Passed
Push — feature/210-emails-to-edd-cust... ( 9b6426...8b96ba )
by Sudar
39:40 queued 35:16
created

get_column_label_by_db_column()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 37
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 2.0008

Importance

Changes 0
Metric Value
cc 2
eloc 17
nc 2
nop 1
dl 0
loc 37
ccs 16
cts 17
cp 0.9412
crap 2.0008
rs 9.7
c 0
b 0
f 0
1
<?php namespace EmailLog\Util;
2
3
/**
4
 * Email Log Helper functions.
5
 * Some of these functions would be used the addons.
6
 */
7
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
8
9
/**
10
 * Perform additional sanitation of emails.
11
 *
12
 * @since 1.9
13
 *
14
 * @param string $email    Email string to be sanitized.
15
 * @param bool   $multiple (Optional) Should multiple emails be allowed. True by default.
16
 *
17
 * @return string Sanitized email.
18
 */
19
function sanitize_email( $email, $multiple = true ) {
20 13
	$emails = explode( ',', $email );
21 13
	if ( ! $multiple ) {
22 3
		$emails = array_slice( $emails, 0, 1 );
23 3
	}
24
25 13
	$cleaned_emails = array_map( __NAMESPACE__ . '\\sanitize_email_with_name', $emails );
26
27 13
	return implode( ', ', $cleaned_emails );
28
}
29
30
/**
31
 * Sanitize email with name.
32
 *
33
 * @since 1.9
34
 *
35
 * @param string $string Email string to be sanitized.
36
 *
37
 * @return string Sanitized email.
38
 */
39
function sanitize_email_with_name( $string ) {
40 13
	$string = trim( $string );
41
42 13
	$bracket_pos = strpos( $string, '<' );
43 13
	if ( false !== $bracket_pos ) {
44 5
		if ( $bracket_pos > 0 ) {
45 5
			$name = substr( $string, 0, $bracket_pos );
46 5
			$name = trim( $name );
47
48 5
			$email = substr( $string, $bracket_pos + 1 );
49 5
			$email = str_replace( '>', '', $email );
50
51 5
			return sanitize_text_field( $name ) . ' <' . \sanitize_email( $email ) . '>';
52
		}
53
	}
54
55 8
	return \sanitize_email( $string );
56
}
57
58
/**
59
 * Gets the columns to export logs.
60
 *
61
 * If the More Fields add-on is active, additional columns are returned.
62
 *
63
 * @since 2.0.0
64
 *
65
 * @return string[] List of Columns to export.
66
 */
67
function get_log_columns_to_export() {
68
69
	if ( is_plugin_active( 'email-log-more-fields/email-log-more-fields.php' ) ) {
70
		return array( 'id', 'sent_date', 'to_email', 'subject', 'from', 'cc', 'bcc', 'reply-to', 'attachment' );
71
	}
72
73
	return array( 'id', 'sent_date', 'to_email', 'subject' );
74
}
75
76
/**
77
 * Is it an admin request and not an ajax request.
78
 *
79
 * @since 2.1
80
 *
81
 * @return bool True if admin non ajax request, False otherwise.
82
 */
83
function is_admin_non_ajax_request() {
84
	if ( function_exists( 'wp_doing_ajax' ) && wp_doing_ajax() ) {
85
		return false;
86
	}
87
88
	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
89
		return false;
90
	}
91
92
	return is_admin();
93
}
94
95
/**
96
 * Checks the Checkbox when values are present in a given array.
97
 *
98
 * Use this function in Checkbox fields.
99
 *
100
 * @since 2.1.0
101
 *
102
 * @param array  $values  List of all possible values.
103
 * @param string $current The current value to be checked.
104
 */
105
function checked_array( $values, $current ) {
106 2
	if ( ! is_array( $values ) ) {
1 ignored issue
show
introduced by
The condition is_array($values) is always true.
Loading history...
107 1
		return;
108
	}
109
110 1
	if ( in_array( $current, $values ) ) {
111 1
		echo "checked='checked'";
112 1
	}
113 1
}
114
115
/**
116
 * Returns Comma separated values of the given array elements.
117
 *
118
 * Use $delimiter param to join elements other than `,`.
119
 *
120
 * @since 2.3.0
121
 *
122
 * @param array|string $value     The array whose values are to be joined.
123
 * @param string       $delimiter Optional. Default is `,`.
124
 *
125
 * @return string
126
 */
127
function join_array_elements_with_delimiter( $value, $delimiter = ',' ) {
128
	if ( is_array( $value ) ) {
129
		return implode( $delimiter, $value );
130
	}
131
132
	return is_string( $value ) ? $value : '';
1 ignored issue
show
introduced by
The condition is_string($value) is always true.
Loading history...
133
}
134
135
/**
136
 * Gets the User defined Date time format.
137
 *
138
 * @used-by \EmailLog\Core\UI\Setting\CoreSetting
139
 * @used-by \EmailLog\Util\render_auto_delete_logs_next_run_schedule()
140
 *
141
 * @since   2.3.0
142
 *
143
 * @return string
144
 */
145
function get_user_defined_date_time_format() {
146
	return sprintf( '%1$s %2$s', get_option( 'date_format', 'Y-m-d' ), get_option( 'time_format', 'g:i a' ) );
0 ignored issues
show
Bug introduced by
It seems like get_option('date_format', 'Y-m-d') can also be of type false; however, parameter $args of sprintf() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

146
	return sprintf( '%1$s %2$s', /** @scrutinizer ignore-type */ get_option( 'date_format', 'Y-m-d' ), get_option( 'time_format', 'g:i a' ) );
Loading history...
147
}
148
149
/**
150
 * Renders the next run auto delete logs schedule in Date and time format set within WordPress.
151
 *
152
 * @used-by \EmailLog\Addon\UI\Setting\DashboardWidget
153
 * @used-by \EmailLog\Core\UI\Component\AutoDeleteLogsSetting
154
 *
155
 * @since 2.3.0
156
 */
157
function render_auto_delete_logs_next_run_schedule() {
158
	?>
159
	<?php if ( wp_next_scheduled( 'el_scheduled_delete_logs' ) ) : ?>
160
		<p>
161
			<?php _e( 'Auto delete logs cron will be triggered next at', 'email-log' ); ?>:
162
			<?php $date_time_format = get_user_defined_date_time_format(); ?>
163
			<strong><?php echo get_date_from_gmt( date( 'Y-m-d H:i:s', wp_next_scheduled( 'el_scheduled_delete_logs' ) ), $date_time_format ); ?></strong>
0 ignored issues
show
Bug introduced by
It seems like wp_next_scheduled('el_scheduled_delete_logs') can also be of type false; however, parameter $timestamp of date() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

163
			<strong><?php echo get_date_from_gmt( date( 'Y-m-d H:i:s', /** @scrutinizer ignore-type */ wp_next_scheduled( 'el_scheduled_delete_logs' ) ), $date_time_format ); ?></strong>
Loading history...
164
		</p>
165
	<?php endif; ?>
166
	<?php
167
}
168
169
/**
170
 * Gets the value by key from the array.
171
 *
172
 * If the key isn't found, then null is returned.
173
 *
174
 * @since 2.3.0
175
 *
176
 * @param array  $array   The actual array.
177
 * @param string $key     The key whose value is to be retrieved.
178
 * @param string $default Optional.
179
 *
180
 * @return mixed|null
181
 */
182
function el_array_get( $array, $key, $default = null ) {
183
	return isset( $array[ $key ] ) ? $array[ $key ] : $default;
184
}
185
186
/**
187
 * Returns TRUE if the given search term is Advanced Search Term.
188
 *
189
 * @param string $term Search Term.
190
 *
191
 * @return bool
192
 */
193
function is_advanced_search_term( $term ) {
194
	if ( ! is_string( $term ) ) {
0 ignored issues
show
introduced by
The condition is_string($term) is always true.
Loading history...
195
		return false;
196
	}
197
198
	$predicates = get_advanced_search_term_predicates( $term );
199
200
	return ! empty( $predicates );
201
}
202
203
/**
204
 * Gets the Search Term Predicates.
205
 *
206
 * Example:
207
 *
208
 * If $term = to:[email protected] then,
209
 *
210
 * the output would be
211
 *
212
 * $output = array(
213
 *      'to' => [email protected]
214
 * )
215
 *
216
 * @since 2.3.0
217
 *
218
 * @param string $term Search Term.
219
 *
220
 * @return array
221
 */
222
function get_advanced_search_term_predicates( $term ) {
223
	if ( ! is_string( $term ) ) {
0 ignored issues
show
introduced by
The condition is_string($term) is always true.
Loading history...
224
		return array();
225
	}
226
227
	$predicates           = explode( ' ', $term );
228
	$predicates_organized = array();
229
230
	foreach ( $predicates as $predicate ) {
231
		$is_match = preg_match( '/(id|email|to|cc|bcc|reply-to):(.*)$/', $predicate, $matches );
232
		if ( 1 === $is_match ) {
233
			$predicates_organized[ $matches[1] ] = $matches[2];
234
		}
235
	}
236
237
	return $predicates_organized;
238
}
239
240
/**
241
 * Gets the Advanced Search URL.
242
 *
243
 * @since 2.3.0
244
 *
245
 * @return string
246
 */
247
function get_advanced_search_url() {
248
	$admin_url = get_admin_url( null, 'admin.php?page=email-log' );
249
250
	return add_query_arg( 'el_as', 1, $admin_url );
251
}
252
253
/**
254
 * Gets the Column labels to be used in LogList table.
255
 *
256
 * @since 2.3.0
257
 *
258
 * @param string $db_column
259
 *
260
 * @return string
261
 */
262
function get_column_label_by_db_column( $db_column ) {
263
	$labels = array(
264 1
		'id'          => __( 'ID', 'email-log' ),
265 1
		'sent_date'   => __( 'Sent at', 'email-log' ),
266 1
		'to'          => __( 'To', 'email-log' ), // EmailLog\Core\UI\ListTable::get_columns() uses `to`
0 ignored issues
show
Unused Code Comprehensibility introduced by
42% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
267 1
		'to_email'    => __( 'To', 'email-log' ),
268 1
		'subject'     => __( 'Subject', 'email-log' ),
269 1
		'message'     => __( 'Message', 'email-log' ),
270 1
		'from'        => __( 'From', 'email-log' ),
271 1
		'cc'          => __( 'CC', 'email-log' ),
272 1
		'bcc'         => __( 'BCC', 'email-log' ),
273 1
		'reply-to'    => __( 'Reply To', 'email-log' ),
274 1
		'attachments' => __( 'Attachment', 'email-log' ),
275 1
		'attachment'  => __( 'Attachment', 'email-log' ),
276 1
	);
277
278
	/**
279
	 * Filters the Labels used through out the Email Log plugin.
280
	 *
281
	 * @since 2.3.0
282
	 *
283
	 * @param array $labels {
284
	 *                      List of DB Columns and its respective labels.
285
	 *
286
	 *                      Example:
287
	 *                      'id'          => __( 'ID', 'email-log' ),
288
	 *
289
	 * @type string $key    DB Column or any key for which a Label would be required. Accepts a internationalized string as Label.
290
	 *              }
291
	 */
292 1
	$labels = apply_filters( 'el_db_column_labels', $labels );
293
294 1
	if ( array_key_exists( $db_column, $labels ) ) {
295 1
		return $labels[ $db_column ];
296
	}
297
298
	return $db_column;
299
}
300