Test Failed
Pull Request — master (#1988)
by Ravinder
05:25
created

template-functions.php ➔ give_add_body_classes()   D

Complexity

Conditions 9
Paths 80

Size

Total Lines 45
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 0
Metric Value
cc 9
eloc 29
nc 80
nop 1
dl 0
loc 45
ccs 0
cts 10
cp 0
crap 90
rs 4.909
c 0
b 0
f 0
1
<?php
2
/**
3
 * Template Functions
4
 *
5
 * @package     Give
6
 * @subpackage  Functions/Templates
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
 * Returns the path to the Give templates directory
19
 *
20
 * @since 1.0
21
 * @return string
22
 */
23
function give_get_templates_dir() {
24 47
	return GIVE_PLUGIN_DIR . 'templates';
25
}
26
27
/**
28
 * Returns the URL to the Give templates directory
29
 *
30
 * @since 1.0
31
 * @return string
32
 */
33
function give_get_templates_url() {
34 1
	return GIVE_PLUGIN_URL . 'templates';
35
}
36
37
/**
38
 * Get other templates, passing attributes and including the file.
39
 *
40
 * @since 1.6
41
 *
42
 * @param string $template_name Template file name.
43
 * @param array  $args          Passed arguments. Default is empty array().
44
 * @param string $template_path Template file path. Default is empty.
45
 * @param string $default_path  Default path. Default is empty.
46
 */
47
function give_get_template( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
48
	if ( ! empty( $args ) && is_array( $args ) ) {
49
		extract( $args );
0 ignored issues
show
introduced by
extract() usage is highly discouraged, due to the complexity and unintended issues it might cause.
Loading history...
50
	}
51
52
	$template_names = array( $template_name . '.php' );
53
54
	$located = give_locate_template( $template_names, $template_path, $default_path );
0 ignored issues
show
Documentation introduced by
$template_path is of type string, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Documentation introduced by
$default_path is of type string, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
55
56
	if ( ! file_exists( $located ) ) {
57 44
		/* translators: %s: the template */
58
		Give()->notices->print_frontend_notice( sprintf( __( 'The %s template was not found.', 'give' ), $located ), true );
59
60 44
		return;
61 44
	}
62 44
63 44
	// Allow 3rd party plugin filter template file from their plugin.
64 44
	$located = apply_filters( 'give_get_template', $located, $template_name, $args, $template_path, $default_path );
65
66
	/**
67 44
	 * Fires in give template, before the file is included.
68
	 *
69
	 * Allows you to execute code before the file is included.
70 44
	 *
71
	 * @since 1.6
72
	 *
73
	 * @param string $template_name Template file name.
74
	 * @param string $template_path Template file path.
75
	 * @param string $located       Template file filter by 3rd party plugin.
76
	 * @param array  $args          Passed arguments.
77
	 */
78
	do_action( 'give_before_template_part', $template_name, $template_path, $located, $args );
79
80
	include( $located );
81
82
	/**
83
	 * Fires in give template, after the file is included.
84
	 *
85
	 * Allows you to execute code after the file is included.
86
	 *
87
	 * @since 1.6
88
	 *
89
	 * @param string $template_name Template file name.
90
	 * @param string $template_path Template file path.
91
	 * @param string $located       Template file filter by 3rd party plugin.
92
	 * @param array  $args          Passed arguments.
93 45
	 */
94
	do_action( 'give_after_template_part', $template_name, $template_path, $located, $args );
95
}
96 45
97
/**
98
 * Retrieves a template part
99 45
 *
100
 * Taken from bbPress.
101
 *
102
 * @since 1.0
103
 *
104 45
 * @param string $slug Template part file slug {slug}.php.
105
 * @param string $name Optional. Template part file name {slug}-{name}.php. Default is null.
106
 * @param bool   $load If true the template file will be loaded, if it is found.
107 45
 *
108
 * @return string
109 45
 */
110 45
function give_get_template_part( $slug, $name = null, $load = true ) {
111 45
112
	/**
113 45
	 * Fires in give template part, before the template part is retrieved.
114
	 *
115 45
	 * Allows you to execute code before retrieving the template part.
116 45
	 *
117
	 * @since 1.0
118 45
	 *
119
	 * @param string $slug Template part file slug {slug}.php.
120 45
	 * @param string $name Template part file name {slug}-{name}.php.
121 44
	 */
122 44
	do_action( "get_template_part_{$slug}", $slug, $name );
123
124 45
	// Setup possible parts
125
	$templates = array();
126
	if ( isset( $name ) ) {
127
		$templates[] = $slug . '-' . $name . '.php';
128
	}
129
	$templates[] = $slug . '.php';
130
131
	// Allow template parts to be filtered
132
	$templates = apply_filters( 'give_get_template_part', $templates, $slug, $name );
133
134
	// Return the part that is found
135 46
	return give_locate_template( $templates, $load, false );
136
}
137
138 46
/**
139 46
 * Retrieve the name of the highest priority template file that exists.
140 46
 *
141 46
 * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which
142
 * inherit from a parent theme can just overload one file. If the template is
143 46
 * not found in either of those, it looks in the theme-compat folder last.
144
 *
145
 * Forked from bbPress
146 46
 *
147
 * @since 1.0
148 46
 *
149
 * @param string|array $template_names Template file(s) to search for, in order.
150
 * @param bool         $load           If true the template file will be loaded if it is found.
151
 * @param bool         $require_once   Whether to require_once or require. Default true.
152
 *                                     Has no effect if $load is false.
153
 *
154
 * @return string The template filename if one is located.
155
 */
156
function give_locate_template( $template_names, $load = false, $require_once = true ) {
157
	// No file found yet
158
	$located = false;
159
160 48
	// Try to find a template file
161
	foreach ( (array) $template_names as $template_name ) {
162
163
		// Continue if template is empty
164
		if ( empty( $template_name ) ) {
165
			continue;
166
		}
167
168
		// Trim off any slashes from the template name
169
		$template_name = ltrim( $template_name, '/' );
170
171
		// try locating this template file by looping through the template paths
172
		foreach ( give_get_theme_template_paths() as $template_path ) {
173
174
			if ( file_exists( $template_path . $template_name ) ) {
175
				$located = $template_path . $template_name;
176
				break;
177
			}
178
		}
179
180
		if ( $located ) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $located of type string|false is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== false instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
181
			break;
182
		}
183
	}
184
185
	if ( ( true == $load ) && ! empty( $located ) ) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
186
		load_template( $located, $require_once );
187
	}
188
189
	return $located;
190
}
191
192
/**
193
 * Returns a list of paths to check for template locations
194
 *
195
 * @since 1.0
196
 * @return array
197
 */
198
function give_get_theme_template_paths() {
199
200
	$template_dir = give_get_theme_template_dir_name();
201
202
	$file_paths = array(
203
		1   => trailingslashit( get_stylesheet_directory() ) . $template_dir,
204
		10  => trailingslashit( get_template_directory() ) . $template_dir,
205
		100 => give_get_templates_dir(),
206
	);
207
208
	$file_paths = apply_filters( 'give_template_paths', $file_paths );
209
210
	// sort the file paths based on priority
211
	ksort( $file_paths, SORT_NUMERIC );
212
213
	return array_map( 'trailingslashit', $file_paths );
214
}
215
216
/**
217
 * Returns the template directory name.
218
 *
219
 * Themes can filter this by using the give_templates_dir filter.
220
 *
221
 * @since 1.0
222
 * @return string
223
 */
224
function give_get_theme_template_dir_name() {
225
	return trailingslashit( apply_filters( 'give_templates_dir', 'give' ) );
226
}
227
228
/**
229
 * Adds Give Version to the <head> tag
230
 *
231
 * @since 1.0
232
 * @return void
233
 */
234
function give_version_in_header() {
235
	echo '<meta name="generator" content="Give v' . GIVE_VERSION . '" />' . "\n";
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'GIVE_VERSION'
Loading history...
236
}
237
238
add_action( 'wp_head', 'give_version_in_header' );
239
240
/**
241
 * Determines if we're currently on the Donations History page.
242
 *
243
 * @since 1.0
244
 * @return bool True if on the Donations History page, false otherwise.
245
 */
246
function give_is_donation_history_page() {
247
248
	$ret = is_page( give_get_option( 'history_page' ) );
249
250
	return apply_filters( 'give_is_donation_history_page', $ret );
251
}
252
253
/**
254
 * Adds body classes for Give pages
255
 *
256
 * @since 1.0
257
 *
258
 * @param array $class current classes
259
 *
260
 * @return array Modified array of classes
261
 */
262
function give_add_body_classes( $class ) {
263
	$classes = (array) $class;
264
265
	if ( give_is_success_page() ) {
266
		$classes[] = 'give-success';
267
		$classes[] = 'give-page';
268
	}
269
270
	if ( give_is_failed_transaction_page() ) {
271
		$classes[] = 'give-failed-transaction';
272
		$classes[] = 'give-page';
273
	}
274
275
	if ( give_is_donation_history_page() ) {
276
		$classes[] = 'give-donation-history';
277
		$classes[] = 'give-page';
278
	}
279
280
	if ( give_is_test_mode() ) {
281
		$classes[] = 'give-test-mode';
282
		$classes[] = 'give-page';
283
	}
284
285
	//Theme-specific Classes used to prevent conflicts via CSS
286
	$current_theme = wp_get_theme();
287
288
	switch ( $current_theme->template ) {
289
290
		case 'Divi':
291
			$classes[] = 'give-divi';
292
			break;
293
		case 'Avada':
294
			$classes[] = 'give-avada';
295
			break;
296
		case 'twentysixteen':
297
			$classes[] = 'give-twentysixteen';
298
			break;
299
		case 'twentyseventeen':
300
			$classes[] = 'give-twentyseventeen';
301
			break;
302
303
	}
304
305
	return array_unique( $classes );
306
}
307
308
add_filter( 'body_class', 'give_add_body_classes' );
309
310
311
/**
312
 * Add Post Class Filter
313
 *
314
 * Adds extra post classes for forms
315
 *
316
 * @since       1.0
317
 *
318
 * @param array        $classes
319
 * @param string|array $class
320
 * @param int|string   $post_id
321
 *
322
 * @return array
323
 */
324
function give_add_post_class( $classes, $class = '', $post_id = '' ) {
0 ignored issues
show
Unused Code introduced by
The parameter $class 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...
325
	if ( ! $post_id || 'give_forms' !== get_post_type( $post_id ) ) {
326
		return $classes;
327
	}
328
329
	//@TODO: Add classes for custom taxonomy and form configurations (multi vs single donations, etc).
330
331
	if ( false !== ( $key = array_search( 'hentry', $classes ) ) ) {
332
		unset( $classes[ $key ] );
333
	}
334
335
	return $classes;
336
}
337
338
339
add_filter( 'post_class', 'give_add_post_class', 20, 3 );
340
341
/**
342
 * Get the placeholder image URL for forms etc
343
 *
344
 * @access public
345
 * @return string
346
 */
347
function give_get_placeholder_img_src() {
348
349
	$placeholder_url = '//placehold.it/600x600&text=' . urlencode( esc_attr__( 'Give Placeholder Image', 'give' ) );
350
351
	return apply_filters( 'give_placeholder_img_src', $placeholder_url );
352
}
353
354
355
/**
356
 * Global
357
 */
358
if ( ! function_exists( 'give_output_content_wrapper' ) ) {
359
360
	/**
361
	 * Output the start of the page wrapper.
362
	 */
363
	function give_output_content_wrapper() {
364
		give_get_template_part( 'global/wrapper-start' );
365
	}
366
}
367
if ( ! function_exists( 'give_output_content_wrapper_end' ) ) {
368
369
	/**
370
	 * Output the end of the page wrapper.
371
	 */
372
	function give_output_content_wrapper_end() {
373
		give_get_template_part( 'global/wrapper-end' );
374
	}
375
}
376
377
/**
378
 * Single Give Form
379
 */
380
if ( ! function_exists( 'give_left_sidebar_pre_wrap' ) ) {
381
	function give_left_sidebar_pre_wrap() {
382
		echo apply_filters( 'give_left_sidebar_pre_wrap', '<div id="give-sidebar-left" class="give-sidebar give-single-form-sidebar-left">' );
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'apply_filters'
Loading history...
383
	}
384
}
385
386
if ( ! function_exists( 'give_left_sidebar_post_wrap' ) ) {
387
	function give_left_sidebar_post_wrap() {
388
		echo apply_filters( 'give_left_sidebar_post_wrap', '</div>' );
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'apply_filters'
Loading history...
389
	}
390
}
391
392
if ( ! function_exists( 'give_get_forms_sidebar' ) ) {
393
	function give_get_forms_sidebar() {
394
		give_get_template_part( 'single-give-form/sidebar' );
395
	}
396
}
397
398
if ( ! function_exists( 'give_show_form_images' ) ) {
399
400
	/**
401
	 * Output the donation form featured image.
402
	 */
403
	function give_show_form_images() {
404
		if ( give_is_setting_enabled( give_get_option( 'form_featured_img' ) ) ) {
405
			give_get_template_part( 'single-give-form/featured-image' );
406
		}
407
	}
408
}
409
410
if ( ! function_exists( 'give_template_single_title' ) ) {
411
412
	/**
413
	 * Output the form title.
414
	 */
415
	function give_template_single_title() {
416
		give_get_template_part( 'single-give-form/title' );
417
	}
418
}
419
420
/**
421
 * Conditional Functions
422
 */
423
424
if ( ! function_exists( 'is_give_form' ) ) {
425
426
	/**
427
	 * is_give_form
428
	 *
429
	 * Returns true when viewing a single form.
430
	 *
431
	 * @since 1.6
432
	 *
433
	 * @return bool
434
	 */
435
	function is_give_form() {
436
		return is_singular( array( 'give_form' ) );
437
	}
438
}
439
440
if ( ! function_exists( 'is_give_category' ) ) {
441
442
	/**
443
	 * is_give_category
444
	 *
445
	 * Returns true when viewing give form category archive.
446
	 *
447
	 * @since 1.6
448
	 *
449
	 * @param string $term The term slug your checking for.
450
	 *                     Leave blank to return true on any.
451
	 *                     Default is blank.
452
	 *
453
	 * @return bool
454
	 */
455
	function is_give_category( $term = '' ) {
456
		return is_tax( 'give_forms_category', $term );
457
	}
458
}
459
460
if ( ! function_exists( 'is_give_tag' ) ) {
461
462
	/**
463
	 * is_give_tag
464
	 *
465
	 * Returns true when viewing give form tag archive.
466
	 *
467
	 * @since 1.6
468
	 *
469
	 * @param string $term The term slug your checking for.
470
	 *                     Leave blank to return true on any.
471
	 *                     Default is blank.
472
	 *
473
	 * @return bool
474
	 */
475
	function is_give_tag( $term = '' ) {
476
		return is_tax( 'give_forms_tag', $term );
477
	}
478
}
479
480
if ( ! function_exists( 'is_give_taxonomy' ) ) {
481
482
	/**
483
	 * is_give_taxonomy
484
	 *
485
	 * Returns true when viewing a give form taxonomy archive.
486
	 *
487
	 * @since 1.6
488
	 *
489
	 * @return bool
490
	 */
491
	function is_give_taxonomy() {
492
		return is_tax( get_object_taxonomies( 'give_form' ) );
493
	}
494
}
495