Completed
Push — branch-4.0 ( fc0d6f...bf547c )
by
unknown
08:22
created

youtube.php ➔ youtube_id()   F

Complexity

Conditions 64
Paths > 20000

Size

Total Lines 181
Code Lines 99

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 64
eloc 99
nc 429496.7295
nop 1
dl 0
loc 181
rs 2
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
/**
4
 * youtube shortcode
5
 *
6
 * Contains shortcode + some improvements over the Embeds syntax @
7
 * http://codex.wordpress.org/Embeds
8
 *
9
 * @example [youtube=http://www.youtube.com/watch?v=wq0rXGLs0YM&amp;fs=1&amp;hl=bg_BG]
10
 */
11
12
/**
13
 * Replaces YouTube embeds with YouTube shortcodes.
14
 *
15
 * @param string $content HTML content.
16
 * @return string The content with YouTube embeds replaced with YouTube shortcodes.
17
 */
18
// 2008-07-15:
19
//<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/bZBHZT3a-FA&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/bZBHZT3a-FA&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
20
// around 2008-06-06 youtube changed their old embed code to this:
21
//<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/M1D30gS7Z8U&hl=en"></param><embed src="http://www.youtube.com/v/M1D30gS7Z8U&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object>
22
// old style was:
23
// <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/dGY28Qbj76A&rel=0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/dGY28Qbj76A&rel=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></object>
24
// 12-2010:
25
// <object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/3H8bnKdf654?fs=1&amp;hl=en_GB"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3H8bnKdf654?fs=1&amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
26
// 01-2011:
27
// <iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/Qq9El3ki0_g" frameborder="0" allowFullScreen></iframe>
28
// <iframe class="youtube-player" type="text/html" width="640" height="385" src="http://www.youtube.com/embed/VIDEO_ID" frameborder="0"></iframe>
29
30
function youtube_embed_to_short_code( $content ) {
31
	if ( false === strpos( $content, 'youtube.com' ) )
32
		return $content;
33
34
	//older codes
35
	$regexp = '!<object width="\d+" height="\d+"><param name="movie" value="https?://www\.youtube\.com/v/([^"]+)"></param>(?:<param name="\w+" value="[^"]*"></param>)*<embed src="https?://www\.youtube\.com/v/(.+)" type="application/x-shockwave-flash"(?: \w+="[^"]*")* width="\d+" height="\d+"></embed></object>!i';
36
	$regexp_ent = htmlspecialchars( $regexp, ENT_NOQUOTES );
37
	$old_regexp = '!<embed(?:\s+\w+="[^"]*")*\s+src="https?(?:\:|&#0*58;)//www\.youtube\.com/v/([^"]+)"(?:\s+\w+="[^"]*")*\s*(?:/>|>\s*</embed>)!';
38
	$old_regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $old_regexp, ENT_NOQUOTES ) );
39
40
	//new code
41
	$ifr_regexp = '!<iframe((?:\s+\w+="[^"]*")*?)\s+src="(https?:)?//(?:www\.)*youtube.com/embed/([^"]+)".*?</iframe>!i';
42
	$ifr_regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $ifr_regexp, ENT_NOQUOTES ) );
43
44
	foreach ( array( 'regexp', 'regexp_ent', 'old_regexp', 'old_regexp_ent', 'ifr_regexp', 'ifr_regexp_ent' ) as $reg ) {
45
		if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) )
46
			continue;
47
48
		foreach ( $matches as $match ) {
49
			// Hack, but '?' should only ever appear once, and
50
			// it should be for the 1st field-value pair in query string,
51
			// if it is present
52
			// YouTube changed their embed code.
53
			// Example of how it is now:
54
			//     <object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/aP9AaD4tgBY?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aP9AaD4tgBY?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
55
			// As shown at the start of function, previous YouTube didn't '?'
56
			// the 1st field-value pair.
57
			if ( in_array ( $reg, array( 'ifr_regexp', 'ifr_regexp_ent' ) ) ) {
58
				$params = $match[1];
59
60
				if ( 'ifr_regexp_ent' == $reg )
61
					$params = html_entity_decode( $params );
62
63
				$params = wp_kses_hair( $params, array( 'http' ) );
64
65
				$width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
66
				$height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
67
				$wh = '';
68
69
				if ( $width && $height )
70
					$wh = "&w=$width&h=$height";
71
72
				$url = esc_url_raw( "https://www.youtube.com/watch?v={$match[3]}{$wh}" );
73
			} else {
74
				$match[1] = str_replace( '?', '&', $match[1] );
75
76
				$url = esc_url_raw( "https://www.youtube.com/watch?v=" . html_entity_decode( $match[1] ) );
77
			}
78
79
			$content = str_replace( $match[0], "[youtube $url]", $content );
80
81
			/**
82
			 * Fires before the YouTube embed is transformed into a shortcode.
83
			 *
84
			 * @module shortcodes
85
			 *
86
			 * @since 1.2.0
87
			 *
88
			 * @param string youtube Shortcode name.
89
			 * @param string $url YouTube video URL.
90
			 */
91
			do_action( 'jetpack_embed_to_shortcode', 'youtube', $url );
92
		}
93
	}
94
95
	return $content;
96
}
97
98
add_filter( 'pre_kses', 'youtube_embed_to_short_code' );
99
100
/**
101
 * Replaces plain-text links to YouTube videos with YouTube embeds.
102
 *
103
 * @param string $content HTML content
104
 * @return string The content with embeds instead of URLs
105
 */
106
function youtube_link( $content ) {
107
	return jetpack_preg_replace_callback_outside_tags( '!(?:\n|\A)https?://(?:www\.)?(?:youtube.com/(?:v/|playlist|watch[/\#?])|youtu\.be/)[^\s]+?(?:\n|\Z)!i', 'youtube_link_callback', $content, 'youtube.com/' );
108
}
109
110
/**
111
 * Callback function for the regex that replaces YouTube URLs with
112
 * YouTube embeds.
113
 */
114
function youtube_link_callback( $matches ) {
115
	return "\n" . youtube_id( $matches[0] ) . "\n";
116
}
117
118
/**
119
 * Normalizes a YouTube URL to include a v= parameter and a query string free of encoded ampersands.
120
 *
121
 * @param string $url
122
 * @return string The normalized URL
123
 */
124 View Code Duplication
if ( ! function_exists( 'youtube_sanitize_url' ) ) :
125
function youtube_sanitize_url( $url ) {
0 ignored issues
show
Best Practice introduced by
The function youtube_sanitize_url() has been defined more than once; this definition is ignored, only the first definition in functions.compat.php (L52-65) is considered.

This check looks for functions that have already been defined in other files.

Some Codebases, like WordPress, make a practice of defining functions multiple times. This may lead to problems with the detection of function parameters and types. If you really need to do this, you can mark the duplicate definition with the @ignore annotation.

/**
 * @ignore
 */
function getUser() {

}

function getUser($id, $realm) {

}

See also the PhpDoc documentation for @ignore.

Loading history...
126
	$url = trim( $url, ' "' );
127
	$url = trim( $url );
128
	$url = str_replace( array( 'youtu.be/', '/v/', '#!v=', '&amp;', '&#038;', 'playlist' ), array( 'youtu.be/?v=', '/?v=', '?v=', '&', '&', 'videoseries' ), $url );
129
130
	// Replace any extra question marks with ampersands - the result of a URL like "http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US" being passed in.
131
	$query_string_start = strpos( $url, "?" );
132
133
	if ( false !== $query_string_start ) {
134
		$url = substr( $url, 0, $query_string_start + 1 ) . str_replace( "?", "&", substr( $url, $query_string_start + 1 ) );
135
	}
136
137
	return $url;
138
}
139
endif;
140
141
/*
142
 * url can be:
143
 *    http://www.youtube.com/embed/videoseries?list=PL94269DA08231042B&amp;hl=en_US
144
 *    http://www.youtube.com/watch#!v=H2Ncxw1xfck
145
 *    http://www.youtube.com/watch?v=H2Ncxw1xfck
146
 *    http://www.youtube.com/watch?v=H2Ncxw1xfck&w=320&h=240&fmt=1&rel=0&showsearch=1&hd=0
147
 *    http://www.youtube.com/v/jF-kELmmvgA
148
 *    http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US
149
 *    http://youtu.be/Rrohlqeir5E
150
 */
151
152
/**
153
 * Converts a YouTube URL into an embedded YouTube video.
154
 */
155
function youtube_id( $url ) {
156
	if ( ! $id = jetpack_get_youtube_id( $url ) )
157
		return '<!--YouTube Error: bad URL entered-->';
158
159
	$url = youtube_sanitize_url( $url );
160
	$url = parse_url( $url );
161
162
	if ( ! isset( $url['query'] ) )
163
		return false;
164
165
	if ( isset( $url['fragment'] ) ) {
166
		wp_parse_str( $url['fragment'], $fargs );
0 ignored issues
show
Bug introduced by
The variable $fargs seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
167
	} else {
168
		$fargs = array();
169
	}
170
	wp_parse_str( $url['query'], $qargs );
0 ignored issues
show
Bug introduced by
The variable $qargs seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
171
172
	$qargs = array_merge( $fargs, $qargs );
0 ignored issues
show
Bug introduced by
The variable $fargs does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
Bug introduced by
The variable $qargs seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
173
174
	// calculate the width and height, taking content_width into consideration
175
	global $content_width;
176
177
	$input_w = ( isset( $qargs['w'] ) && intval( $qargs['w'] ) ) ? intval( $qargs['w'] ) : 0;
178
	$input_h = ( isset( $qargs['h'] ) && intval( $qargs['h'] ) ) ? intval( $qargs['h'] ) : 0;
179
180
	$default_width = get_option('embed_size_w');
181
182
	if ( empty( $default_width ) ) {
183
		if ( ! empty( $content_width ) ) {
184
			$default_width = $content_width;
185
		} else {
186
			$default_width = 640;
187
		}
188
	}
189
190
	if ( $input_w > 0 && $input_h > 0 ) {
191
		$w = $input_w;
192
		$h = $input_h;
193
	} elseif ( 0 == $input_w && 0 == $input_h ) {
194
		if ( isset( $qargs['fmt'] ) && intval( $qargs['fmt'] ) ) {
195
			$w = ( ! empty( $content_width ) ? min( $content_width, 480 ) : 480 );
196
		} else {
197
			$w = ( ! empty( $content_width ) ? min( $content_width, $default_width ) : $default_width );
198
			$h = ceil( ( $w / 16 ) * 9 ) + 30;
199
		}
200
	} elseif ( $input_w > 0 ) {
201
		$w = $input_w;
202
		$h = ceil( ( $w / 16 ) * 9 ) + 30;
203
	} else {
204
		if ( isset( $qargs['fmt'] ) && intval( $qargs['fmt'] ) ) {
205
			$w = ( ! empty( $content_width ) ? min( $content_width, 480 ) : 480 );
206
		} else {
207
			$w = ( ! empty( $content_width ) ? min( $content_width, $default_width ) : $default_width );
208
			$h = $input_h;
209
		}
210
	}
211
212
	/**
213
	 * Filter the YouTube player width.
214
	 *
215
	 * @module shortcodes
216
	 *
217
	 * @since 1.1.0
218
	 *
219
	 * @param int $w Width of the YouTube player in pixels.
220
	 */
221
	$w = (int) apply_filters( 'youtube_width', $w );
222
223
	/**
224
	 * Filter the YouTube player height.
225
	 *
226
	 * @module shortcodes
227
	 *
228
	 * @since 1.1.0
229
	 *
230
	 * @param int $h Height of the YouTube player in pixels.
231
	 */
232
	$h = (int) apply_filters( 'youtube_height', $h );
0 ignored issues
show
Bug introduced by
The variable $h does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
233
234
	$rel =    ( isset( $qargs['rel'] )            && 0 == $qargs['rel']            ) ? 0 : 1;
235
	$search = ( isset( $qargs['showsearch'] )     && 1 == $qargs['showsearch']     ) ? 1 : 0;
236
	$info =   ( isset( $qargs['showinfo'] )       && 0 == $qargs['showinfo']       ) ? 0 : 1;
237
	$iv =     ( isset( $qargs['iv_load_policy'] ) && 3 == $qargs['iv_load_policy'] ) ? 3 : 1;
238
239
	$fmt =    ( isset( $qargs['fmt'] )            && intval( $qargs['fmt'] )       ) ? '&fmt=' . (int) $qargs['fmt']     : '';
240
241
	if ( ! isset( $qargs['autohide'] ) || ( $qargs['autohide'] < 0 || 2 < $qargs['autohide'] ) ) {
242
		$autohide = '&autohide=2';
243
	} else {
244
		$autohide = '&autohide=' . absint( $qargs['autohide'] );
245
	}
246
247
	$start = 0;
248
	if ( isset( $qargs['start'] ) ) {
249
		$start = intval( $qargs['start'] );
250
	} else if ( isset( $qargs['t'] ) ) {
251
		$time_pieces = preg_split( '/(?<=\D)(?=\d+)/', $qargs['t'] );
252
253
		foreach ( $time_pieces as $time_piece ) {
254
			$int = (int) $time_piece;
255
			switch ( substr( $time_piece, -1 ) ) {
256
			case 'h' :
257
				$start += $int * 3600;
258
				break;
259
			case 'm' :
260
				$start += $int * 60;
261
				break;
262
			case 's' :
263
				$start += $int;
264
				break;
265
			}
266
		}
267
	}
268
269
	$start = $start ? '&start=' . $start : '';
270
	$end =    ( isset( $qargs['end'] )            && intval( $qargs['end'] )       ) ? '&end=' . (int) $qargs['end']     : '';
271
	$hd =     ( isset( $qargs['hd'] )             && intval( $qargs['hd'] )        ) ? '&hd=' . (int) $qargs['hd']       : '';
272
273
	$vq =     ( isset( $qargs['vq'] )             && in_array( $qargs['vq'], array('hd720','hd1080') ) ) ? '&vq=' . $qargs['vq'] : '';
0 ignored issues
show
Unused Code introduced by
$vq is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
274
275
	$cc = ( isset( $qargs['cc_load_policy'] ) ) ? '&cc_load_policy=1' : '';
276
	$cc_lang = ( isset( $qargs['cc_lang_pref'] )   ) ? '&cc_lang_pref=' . preg_replace( '/[^_a-z0-9-]/i', '', $qargs['cc_lang_pref'] ) : '';
277
278
	$wmode =  ( isset( $qargs['wmode'] ) && in_array( strtolower( $qargs['wmode'] ), array( 'opaque', 'window', 'transparent' ) ) ) ? $qargs['wmode'] : 'transparent';
279
280
	$theme =  ( isset( $qargs['theme'] ) && in_array( strtolower( $qargs['theme'] ), array( 'dark', 'light' ) ) ) ? '&theme=' . $qargs['theme'] : '';
281
282
	$autoplay = '';
283
	/**
284
	 * Allow YouTube videos to start playing automatically.
285
	 *
286
	 * @module shortcodes
287
	 *
288
	 * @since 2.2.2
289
	 *
290
	 * @param bool false Enable autoplay for YouTube videos.
291
	 */
292
	if ( apply_filters( 'jetpack_youtube_allow_autoplay', false ) && isset( $qargs['autoplay'] ) )
293
		$autoplay = '&autoplay=' . (int)$qargs['autoplay'];
294
295
	if ( ( isset( $url['path'] ) && '/videoseries' == $url['path'] ) || isset( $qargs['list'] ) ) {
296
		$html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/videoseries?list=$id&hl=en_US" ) ) . "' allowfullscreen='true' style='border:0;'></iframe>";
297
	} else {
298
		$html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( set_url_scheme( "http://www.youtube.com/embed/$id?version=3&rel=$rel&fs=1$fmt$autohide&showsearch=$search&showinfo=$info&iv_load_policy=$iv$start$end$hd&wmode=$wmode$theme$autoplay{$cc}{$cc_lang}" ) ) . "' allowfullscreen='true' style='border:0;'></iframe>";
299
	}
300
301
	// Let's do some alignment wonder in a span, unless we're producing a feed
302
	if ( ! is_feed() ) {
303
		$alignmentcss = 'text-align:center;';
304
		if ( isset( $qargs['align'] ) ) {
305
			switch ( $qargs['align'] ) {
306
				case 'left':
307
					$alignmentcss = "float:left; width:{$w}px; height:{$h}px; margin-right:10px; margin-bottom: 10px;";
308
					break;
309
				case 'right':
310
					$alignmentcss = "float:right; width:{$w}px; height:{$h}px; margin-left:10px; margin-bottom: 10px;";
311
					break;
312
			}
313
		}
314
315
		$html = sprintf(
316
			'<span class="embed-youtube" style="%s display: block;">%s</span>',
317
			esc_attr( $alignmentcss ),
318
			$html
319
		);
320
321
	}
322
323
	/**
324
	 * Filter the YouTube video HTML output.
325
	 *
326
	 * @module shortcodes
327
	 *
328
	 * @since 1.2.3
329
	 *
330
	 * @param string $html YouTube video HTML output.
331
	 */
332
	$html = apply_filters( 'video_embed_html', $html );
333
334
	return $html;
335
}
336
337
function youtube_shortcode( $atts ) {
338
	return youtube_id( ( isset ( $atts[0] ) ) ? ltrim( $atts[0] , '=' ) : shortcode_new_to_old_params( $atts ) );
339
}
340
341
add_shortcode( 'youtube', 'youtube_shortcode' );
342
343
/**
344
 * For bare URLs on their own line of the form
345
 * http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US
346
 */
347
function wpcom_youtube_embed_crazy_url( $matches, $attr, $url ) {
0 ignored issues
show
Unused Code introduced by
The parameter $matches 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...
Unused Code introduced by
The parameter $attr 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...
348
	return youtube_id( $url );
349
}
350
351
function wpcom_youtube_embed_crazy_url_init() {
352
	wp_embed_register_handler( 'wpcom_youtube_embed_crazy_url', '#https?://(?:www\.)?(?:youtube.com/(?:v/|playlist|watch[/\#?])|youtu\.be/).*#i', 'wpcom_youtube_embed_crazy_url' );
353
}
354
355
add_action( 'init', 'wpcom_youtube_embed_crazy_url_init' );
356
357
/**
358
 * Allow oEmbeds in Jetpack's Comment form.
359
 *
360
 * @module shortcodes
361
 *
362
 * @since 2.8.0
363
 *
364
 * @param int get_option('embed_autourls') Option to automatically embed all plain text URLs.
365
 */
366 View Code Duplication
if ( apply_filters( 'jetpack_comments_allow_oembed', get_option('embed_autourls') ) ) {
367
	// We attach wp_kses_post to comment_text in default-filters.php with priority of 10 anyway, so the iframe gets filtered out.
368
	if ( ! is_admin() ) {
369
		// Higher priority because we need it before auto-link and autop get to it
370
		add_filter( 'comment_text', 'youtube_link', 1 );
371
	}
372
}
373
374
/**
375
 * Core changes to do_shortcode (https://core.trac.wordpress.org/changeset/34747) broke "improper" shortcodes
376
 * with the format [shortcode=http://url.com].
377
 *
378
 * This removes the "=" from the shortcode so it can be parsed.
379
 *
380
 * @see https://github.com/Automattic/jetpack/issues/3121
381
 */
382
function jetpack_fix_youtube_shortcode_display_filter( $content ) {
383
	if ( strpos( $content, '[youtube=' ) !== false ) {
384
		$content = preg_replace( '@\[youtube=(.*?)\]@', '[youtube $1]', $content );
385
	}
386
387
	return $content;
388
}
389
add_filter( 'the_content', 'jetpack_fix_youtube_shortcode_display_filter', 7 );
390