Completed
Push — renovate/react-monorepo ( 545e89...65a81e )
by
unknown
268:48 queued 253:47
created

slideshare.php ➔ slideshare_shortcode()   F

Complexity

Conditions 22
Paths 2882

Size

Total Lines 107

Duplication

Lines 9
Ratio 8.41 %

Importance

Changes 0
Metric Value
cc 22
nc 2882
nop 1
dl 9
loc 107
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * Slideshare shortcode
4
 *
5
 * Formats:
6
 * Old style (still compatible): [slideshare id=5342235&doc=camprock-101002163655-phpapp01&w=300&h=200]
7
 * New style: [slideshare id=5342235&w=300&h=200&fb=0&mw=0&mh=0&sc=no]
8
 *
9
 * Legend:
10
 *  id    = Document ID provided by Slideshare
11
 *  w     = Width of iFrame     (int)
12
 *  h     = Height of iFrame    (int)
13
 *  fb    = iFrame frameborder  (int)
14
 *  mw    = iFrame marginwidth  (int)
15
 *  mh    = iFrame marginheight (int)
16
 *  sc    = iFrame Scrollbar    (yes/no)
17
 *  pro   = Slideshare Pro      (yes/no)
18
 *  style = Inline CSS          (string)
19
 *
20
 * @package automattic/jetpack
21
 */
22
23
/**
24
 * Register and display shortcode.
25
 *
26
 * @param array $atts Shortcode attributes.
27
 */
28
function slideshare_shortcode( $atts ) {
29
	global $content_width;
30
31
	$params = shortcode_new_to_old_params( $atts );
32
	parse_str( $params, $arguments );
33
34
	if ( empty( $arguments ) ) {
35
		return '<!-- SlideShare error: no arguments -->';
36
	}
37
38
	$attr = shortcode_atts(
39
		array(
40
			'id'    => '',
41
			'w'     => '',
42
			'h'     => '',
43
			'fb'    => '',
44
			'mw'    => '',
45
			'mh'    => '',
46
			'sc'    => '',
47
			'pro'   => '',
48
			'style' => '',
49
		),
50
		$arguments
51
	);
52
53
	// check that the Slideshare ID contains letters, numbers and query strings.
54
	$pattern = '/[^-_a-zA-Z0-9?=&]/';
55
	if ( empty( $attr['id'] ) || preg_match( $pattern, $attr['id'] ) ) {
56
		return '<!-- SlideShare error: id is missing or has illegal characters -->';
57
	}
58
59
	// check the width/height.
60
	$w = (int) $attr['w'];
61
62
	// If no width was specified (or uses the wrong format), and if we have a $content_width, use that.
63
	if ( empty( $w ) && ! empty( $content_width ) ) {
64
		$w = (int) $content_width;
65
	} elseif ( $w < 300 || $w > 1600 ) { // If width was specified, but is too small/large, set default value.
66
		$w = 425;
67
	} else {
68
		$w = (int) $w;
69
	}
70
71
	$h = ceil( $w * 348 / 425 ); // Note: user-supplied height is ignored.
72
73
	if ( ! empty( $attr['pro'] ) ) {
74
		$source = 'https://www.slideshare.net/slidesharepro/' . $attr['id'];
75
	} else {
76
		$source = 'https://www.slideshare.net/slideshow/embed_code/' . $attr['id'];
77
	}
78
79
	if ( isset( $attr['rel'] ) ) {
80
		$source = add_query_arg( 'rel', (int) $attr['rel'], $source );
81
	}
82
83
	if ( ! empty( $attr['startSlide'] ) ) {
84
		$source = add_query_arg( 'startSlide', (int) $attr['startSlide'], $source );
85
	}
86
87
	$player = sprintf( "<iframe src='%s' width='%d' height='%d'", esc_url( $source ), $w, $h );
88
89
	// check the frameborder.
90 View Code Duplication
	if ( ! empty( $attr['fb'] ) || '0' === $attr['fb'] ) {
91
		$player .= " frameborder='" . (int) $attr['fb'] . "'";
92
	}
93
94
	$is_amp = ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() );
95
96
	if ( ! $is_amp ) {
97
		// check the margin width; if not empty, cast as int.
98 View Code Duplication
		if ( ( ! empty( $attr['mw'] ) || '0' === $attr['mw'] ) ) {
99
			$player .= " marginwidth='" . (int) $attr['mw'] . "'";
100
		}
101
102
		// check the margin height, if not empty, cast as int.
103 View Code Duplication
		if ( ( ! empty( $attr['mh'] ) || '0' === $attr['mh'] ) ) {
104
			$player .= " marginheight='" . (int) $attr['mh'] . "'";
105
		}
106
	}
107
108
	if ( ! empty( $attr['style'] ) ) {
109
		$player .= " style='" . esc_attr( $attr['style'] ) . "'";
110
	}
111
112
	// check the scrollbar; cast as a lowercase string for comparison.
113
	if ( ! empty( $attr['sc'] ) ) {
114
		$sc = strtolower( $attr['sc'] );
115
116
		if ( in_array( $sc, array( 'yes', 'no' ), true ) ) {
117
			$player .= " scrolling='" . $sc . "'";
118
		}
119
	}
120
121
	$player .= ' sandbox="allow-popups allow-scripts allow-same-origin allow-presentation" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>';
122
123
	/**
124
	 * Filter the returned SlideShare shortcode.
125
	 *
126
	 * @module shortcodes
127
	 *
128
	 * @since 4.7.0
129
	 *
130
	 * @param string $player The iframe to return.
131
	 * @param array  $atts   The attributes specified in the shortcode.
132
	 */
133
	return apply_filters( 'jetpack_slideshare_shortcode', $player, $atts );
0 ignored issues
show
Unused Code introduced by
The call to apply_filters() has too many arguments starting with $atts.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
134
}
135
add_shortcode( 'slideshare', 'slideshare_shortcode' );
136