PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | functions.compat.php +161 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,161 @@
1 +<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase
2 +/**
3 + * Compatibility functions for YouTube URLs and WP.com helper functions.
4 + *
5 + * @package automattic/jetpack
6 + */
7 +
8 +use Automattic\Jetpack\Connection\Manager as Connection_Manager;
9 +
10 +/**
11 + * Required for class.media-extractor.php to match expected function naming convention.
12 + *
13 + * @param string|array $url Can be just the $url or the whole $atts array.
14 + * @return bool|mixed The Youtube video ID via jetpack_get_youtube_id
15 + */
16 +function jetpack_shortcode_get_youtube_id( $url ) {
17 + return jetpack_get_youtube_id( $url );
18 +}
19 +
20 +/**
21 + * Extract video ID from a YouTube url.
22 + *
23 + * @param string|array $url YouTube URL.
24 + * @return bool|mixed The Youtube video ID
25 + */
26 +function jetpack_get_youtube_id( $url ) {
27 + // Do we have an $atts array? Get first att
28 + if ( is_array( $url ) ) {
29 + $url = reset( $url );
30 + }
31 +
32 + $url = jetpack_youtube_sanitize_url( $url );
33 + $url = wp_parse_url( $url );
34 + $id = false;
35 +
36 + if ( ! isset( $url['query'] ) ) {
37 + return false;
38 + }
39 +
40 + parse_str( $url['query'], $qargs );
41 +
42 + if ( ! isset( $qargs['v'] ) && ! isset( $qargs['list'] ) ) {
43 + return false;
44 + }
45 +
46 + if ( isset( $qargs['list'] ) ) {
47 + $id = preg_replace( '|[^_a-z0-9-]|i', '', $qargs['list'] );
48 + }
49 +
50 + if ( empty( $id ) ) {
51 + $id = preg_replace( '|[^_a-z0-9-]|i', '', $qargs['v'] );
52 + }
53 +
54 + return $id;
55 +}
56 +
57 +if ( ! function_exists( 'jetpack_youtube_sanitize_url' ) ) :
58 + /**
59 + * Normalizes a YouTube URL to include a v= parameter and a query string free of encoded ampersands.
60 + *
61 + * @param string|array $url YouTube URL.
62 + * @return string|false The normalized URL or false if input is invalid.
63 + */
64 + function jetpack_youtube_sanitize_url( $url ) {
65 + if ( is_array( $url ) && isset( $url['url'] ) ) {
66 + $url = $url['url'];
67 + }
68 + if ( ! is_string( $url ) ) {
69 + return false;
70 + }
71 +
72 + $url = trim( $url, ' "' );
73 + $url = trim( $url );
74 + $url = str_replace( array( 'youtu.be/', '/v/', '/shorts/', '#!v=', '&amp;', '&#038;', 'playlist' ), array( 'youtu.be/?v=', '/?v=', '/watch?v=', '?v=', '&', '&', 'videoseries' ), $url );
75 +
76 + // Replace any extra question marks with ampersands - the result of a URL like "https://www.youtube.com/v/dQw4w9WgXcQ?fs=1&hl=en_US" being passed in.
77 + $query_string_start = strpos( $url, '?' );
78 +
79 + if ( false !== $query_string_start ) {
80 + $url = substr( $url, 0, $query_string_start + 1 ) . str_replace( '?', '&', substr( $url, $query_string_start + 1 ) );
81 + }
82 +
83 + return $url;
84 + }
85 +endif;
86 +
87 +/**
88 + * Merge in three string helper functions from WPCOM to make working with strings easier.
89 + *
90 + * @see WPCOM/wp-content/mu-plugins/string-helpers.php
91 + */
92 +if ( ! function_exists( 'wp_startswith' ) ) :
93 + /**
94 + * Check whether a string starts with a specific substring.
95 + *
96 + * @param string $haystack String we are filtering.
97 + * @param string $needle The substring we are looking for.
98 + * @return bool
99 + */
100 + function wp_startswith( $haystack, $needle ) {
101 + if ( ! $haystack || ! $needle || ! is_scalar( $haystack ) || ! is_scalar( $needle ) ) {
102 + return false;
103 + }
104 +
105 + $haystack = (string) $haystack;
106 + $needle = (string) $needle;
107 +
108 + return str_starts_with( $haystack, $needle );
109 + }
110 +endif;
111 +
112 +if ( ! function_exists( 'wp_endswith' ) ) :
113 + /**
114 + * Check whether a string ends with a specific substring.
115 + *
116 + * @param string $haystack String we are filtering.
117 + * @param string $needle The substring we are looking for.
118 + * @return bool
119 + */
120 + function wp_endswith( $haystack, $needle ) {
121 + if ( ! $haystack || ! $needle || ! is_scalar( $haystack ) || ! is_scalar( $needle ) ) {
122 + return false;
123 + }
124 +
125 + $haystack = (string) $haystack;
126 + $needle = (string) $needle;
127 +
128 + return str_ends_with( $haystack, $needle );
129 + }
130 +endif;
131 +
132 +if ( ! function_exists( 'wp_in' ) ) :
133 + /**
134 + * Checks whether a string contains a specific substring.
135 + *
136 + * @param string $needle The substring we are looking for.
137 + * @param string $haystack String we are filtering.
138 + * @return bool
139 + */
140 + function wp_in( $needle, $haystack ) {
141 + if ( ! $haystack || ! $needle || ! is_scalar( $haystack ) || ! is_scalar( $needle ) ) {
142 + return false;
143 + }
144 +
145 + $haystack = (string) $haystack;
146 + $needle = (string) $needle;
147 +
148 + return str_contains( $haystack, $needle );
149 + }
150 +endif;
151 +
152 +/**
153 + * Deprecated connection function.
154 + *
155 + * @param string $text Deprecated.
156 + * @deprecated 7.5 Use Connection_Manager instead.
157 + */
158 +function jetpack_sha1_base64( $text ) {
159 + $connection = new Connection_Manager();
160 + return $connection->sha1_base64( $text );
161 +}