PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.0.3
Jetpack – WP Security, Backup, Speed, & Growth v8.0.3
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / functions.global.php
jetpack Last commit date
3rd-party 6 years ago _inc 6 years ago bin 6 years ago css 6 years ago extensions 1 year ago images 6 years ago json-endpoints 3 years ago languages 6 years ago modules 1 year ago sal 6 years ago src 6 years ago vendor 6 years ago views 7 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 6 years ago class.frame-nonce-preview.php 6 years ago class.jetpack-admin.php 6 years ago class.jetpack-affiliate.php 6 years ago class.jetpack-autoupdate.php 6 years ago class.jetpack-bbpress-json-api-compat.php 6 years ago class.jetpack-cli.php 6 years ago class.jetpack-client-server.php 6 years ago class.jetpack-connection-banner.php 6 years ago class.jetpack-data.php 6 years ago class.jetpack-debugger.php 7 years ago class.jetpack-error.php 10 years ago class.jetpack-gutenberg.php 6 years ago class.jetpack-heartbeat.php 6 years ago class.jetpack-idc.php 6 years ago class.jetpack-ixr-client.php 6 years ago class.jetpack-modules-list-table.php 6 years ago class.jetpack-network-sites-list-table.php 6 years ago class.jetpack-network.php 6 years ago class.jetpack-plan.php 6 years ago class.jetpack-post-images.php 6 years ago class.jetpack-twitter-cards.php 6 years ago class.jetpack-user-agent.php 6 years ago class.jetpack-xmlrpc-server.php 6 years ago class.jetpack.php 6 years ago class.json-api-endpoints.php 3 years ago class.json-api.php 6 years ago class.photon.php 6 years ago composer.json 6 years ago functions.compat.php 6 years ago functions.gallery.php 6 years ago functions.global.php 6 years ago functions.opengraph.php 6 years ago functions.photon.php 6 years ago jest.config.js 6 years ago jetpack.php 1 year ago json-api-config.php 10 years ago json-endpoints.php 7 years ago load-jetpack.php 6 years ago locales.php 7 years ago readme.txt 1 year ago require-lib.php 6 years ago uninstall.php 6 years ago wpml-config.xml 10 years ago
functions.global.php
339 lines
1 <?php
2 /**
3 * This file is meant to be the home for any generic & reusable functions
4 * that can be accessed anywhere within Jetpack.
5 *
6 * This file is loaded whether or not Jetpack is active.
7 *
8 * Please namespace with jetpack_
9 *
10 * @package Jetpack
11 */
12
13 use Automattic\Jetpack\Connection\Client;
14
15 /**
16 * Disable direct access.
17 */
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 if ( ! function_exists( 'wp_timezone' ) ) {
23 /**
24 * Shim for WordPress 5.3's wp_timezone() function.
25 *
26 * This is a mix of wp_timezone(), which calls wp_timezone_string().
27 * We don't need both in Jetpack, so providing only one function.
28 *
29 * @since 7.9.0
30 * @todo Remove when WP 5.3 is Jetpack's minimum
31 *
32 * @return DateTimeZone Site's DateTimeZone
33 */
34 function wp_timezone() {
35 $timezone_string = get_option( 'timezone_string' );
36
37 if ( $timezone_string ) {
38 return new DateTimeZone( $timezone_string );
39 }
40
41 $offset = (float) get_option( 'gmt_offset' );
42 $hours = (int) $offset;
43 $minutes = ( $offset - $hours );
44
45 $sign = ( $offset < 0 ) ? '-' : '+';
46 $abs_hour = abs( $hours );
47 $abs_mins = abs( $minutes * 60 );
48 $tz_offset = sprintf( '%s%02d:%02d', $sign, $abs_hour, $abs_mins );
49
50 return new DateTimeZone( $tz_offset );
51 }
52 }
53
54 /**
55 * Set the admin language, based on user language.
56 *
57 * @since 4.5.0
58 * @deprecated 6.6.0 Use Core function instead.
59 *
60 * @return string
61 */
62 function jetpack_get_user_locale() {
63 _deprecated_function( __FUNCTION__, 'jetpack-6.6.0', 'get_user_locale' );
64 return get_user_locale();
65 }
66
67 /**
68 * Determine if this site is an Atomic site or not looking first at the 'at_options' option.
69 * As a fallback, check for presence of wpcomsh plugin to determine if a current site has undergone AT.
70 *
71 * @since 4.8.1
72 *
73 * @return bool
74 */
75 function jetpack_is_atomic_site() {
76 $at_options = get_option( 'at_options', array() );
77 return ! empty( $at_options ) || defined( 'WPCOMSH__PLUGIN_FILE' );
78 }
79
80 /**
81 * Register post type for migration.
82 *
83 * @since 5.2
84 */
85 function jetpack_register_migration_post_type() {
86 register_post_type(
87 'jetpack_migration',
88 array(
89 'supports' => array(),
90 'taxonomies' => array(),
91 'hierarchical' => false,
92 'public' => false,
93 'has_archive' => false,
94 'can_export' => true,
95 )
96 );
97 }
98
99 /**
100 * Stores migration data in the database.
101 *
102 * @since 5.2
103 *
104 * @param string $option_name Option name.
105 * @param bool $option_value Option value.
106 *
107 * @return int|WP_Error
108 */
109 function jetpack_store_migration_data( $option_name, $option_value ) {
110 jetpack_register_migration_post_type();
111
112 $insert = array(
113 'post_title' => $option_name,
114 'post_content_filtered' => $option_value,
115 'post_type' => 'jetpack_migration',
116 'post_date' => date( 'Y-m-d H:i:s', time() ),
117 );
118
119 $post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
120
121 if ( null !== $post ) {
122 $insert['ID'] = $post->ID;
123 }
124
125 return wp_insert_post( $insert, true );
126 }
127
128 /**
129 * Retrieves legacy image widget data.
130 *
131 * @since 5.2
132 *
133 * @param string $option_name Option name.
134 *
135 * @return mixed|null
136 */
137 function jetpack_get_migration_data( $option_name ) {
138 $post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
139
140 return null !== $post ? maybe_unserialize( $post->post_content_filtered ) : null;
141 }
142
143 /**
144 * Prints a TOS blurb used throughout the connection prompts.
145 *
146 * @since 5.3
147 *
148 * @echo string
149 */
150 function jetpack_render_tos_blurb() {
151 printf(
152 wp_kses(
153 /* Translators: placeholders are links. */
154 __( 'By clicking the <strong>Set up Jetpack</strong> button, you agree to our <a href="%1$s" target="_blank" rel="noopener noreferrer">Terms of Service</a> and to <a href="%2$s" target="_blank" rel="noopener noreferrer">share details</a> with WordPress.com.', 'jetpack' ),
155 array(
156 'a' => array(
157 'href' => array(),
158 'target' => array(),
159 'rel' => array(),
160 ),
161 'strong' => true,
162 )
163 ),
164 'https://wordpress.com/tos',
165 'https://jetpack.com/support/what-data-does-jetpack-sync'
166 );
167 }
168
169 /**
170 * Intervene upgrade process so Jetpack themes are downloaded with credentials.
171 *
172 * @since 5.3
173 *
174 * @param bool $preempt Whether to preempt an HTTP request's return value. Default false.
175 * @param array $r HTTP request arguments.
176 * @param string $url The request URL.
177 *
178 * @return array|bool|WP_Error
179 */
180 function jetpack_theme_update( $preempt, $r, $url ) {
181 if ( false !== stripos( $url, JETPACK__WPCOM_JSON_API_HOST . '/rest/v1/themes/download' ) ) {
182 $file = $r['filename'];
183 if ( ! $file ) {
184 return new WP_Error( 'problem_creating_theme_file', esc_html__( 'Problem creating file for theme download', 'jetpack' ) );
185 }
186 $theme = pathinfo( wp_parse_url( $url, PHP_URL_PATH ), PATHINFO_FILENAME );
187
188 // Remove filter to avoid endless loop since wpcom_json_api_request_as_blog uses this too.
189 remove_filter( 'pre_http_request', 'jetpack_theme_update' );
190 $result = Client::wpcom_json_api_request_as_blog(
191 "themes/download/$theme.zip",
192 '1.1',
193 array(
194 'stream' => true,
195 'filename' => $file,
196 )
197 );
198
199 if ( 200 !== wp_remote_retrieve_response_code( $result ) ) {
200 return new WP_Error( 'problem_fetching_theme', esc_html__( 'Problem downloading theme', 'jetpack' ) );
201 }
202 return $result;
203 }
204 return $preempt;
205 }
206
207 /**
208 * Add the filter when a upgrade is going to be downloaded.
209 *
210 * @since 5.3
211 *
212 * @param bool $reply Whether to bail without returning the package. Default false.
213 *
214 * @return bool
215 */
216 function jetpack_upgrader_pre_download( $reply ) {
217 add_filter( 'pre_http_request', 'jetpack_theme_update', 10, 3 );
218 return $reply;
219 }
220
221 add_filter( 'upgrader_pre_download', 'jetpack_upgrader_pre_download' );
222
223
224 /**
225 * Wraps data in a way so that we can distinguish between objects and array and also prevent object recursion.
226 *
227 * @since 6.1.0
228 *
229 * @param array|obj $any Source data to be cleaned up.
230 * @param array $seen_nodes Built array of nodes.
231 *
232 * @return array
233 */
234 function jetpack_json_wrap( &$any, $seen_nodes = array() ) {
235 if ( is_object( $any ) ) {
236 $input = get_object_vars( $any );
237 $input['__o'] = 1;
238 } else {
239 $input = &$any;
240 }
241
242 if ( is_array( $input ) ) {
243 $seen_nodes[] = &$any;
244
245 $return = array();
246
247 foreach ( $input as $k => &$v ) {
248 if ( ( is_array( $v ) || is_object( $v ) ) ) {
249 if ( in_array( $v, $seen_nodes, true ) ) {
250 continue;
251 }
252 $return[ $k ] = jetpack_json_wrap( $v, $seen_nodes );
253 } else {
254 $return[ $k ] = $v;
255 }
256 }
257
258 return $return;
259 }
260
261 return $any;
262 }
263
264 /**
265 * Checks if the mime_content_type function is available and return it if so.
266 *
267 * The function mime_content_type is enabled by default in PHP, but can be disabled. We attempt to
268 * enforce this via composer.json, but that won't be checked in majority of cases where
269 * this would be happening.
270 *
271 * @since 7.8.0
272 *
273 * @param string $file File location.
274 *
275 * @return string|false MIME type or false if functionality is not available.
276 */
277 function jetpack_mime_content_type( $file ) {
278 if ( function_exists( 'mime_content_type' ) ) {
279 return mime_content_type( $file );
280 }
281
282 return false;
283 }
284
285 /**
286 * Checks that the mime type of the specified file is among those in a filterable list of mime types.
287 *
288 * @since 7.8.0
289 *
290 * @param string $file Path to file to get its mime type.
291 *
292 * @return bool
293 */
294 function jetpack_is_file_supported_for_sideloading( $file ) {
295 $type = jetpack_mime_content_type( $file );
296
297 if ( ! $type ) {
298 return false;
299 }
300
301 /**
302 * Filter the list of supported mime types for media sideloading.
303 *
304 * @since 4.0.0
305 *
306 * @module json-api
307 *
308 * @param array $supported_mime_types Array of the supported mime types for media sideloading.
309 */
310 $supported_mime_types = apply_filters(
311 'jetpack_supported_media_sideload_types',
312 array(
313 'image/png',
314 'image/jpeg',
315 'image/gif',
316 'image/bmp',
317 'video/quicktime',
318 'video/mp4',
319 'video/mpeg',
320 'video/ogg',
321 'video/3gpp',
322 'video/3gpp2',
323 'video/h261',
324 'video/h262',
325 'video/h264',
326 'video/x-msvideo',
327 'video/x-ms-wmv',
328 'video/x-ms-asf',
329 )
330 );
331
332 // If the type returned was not an array as expected, then we know we don't have a match.
333 if ( ! is_array( $supported_mime_types ) ) {
334 return false;
335 }
336
337 return in_array( $type, $supported_mime_types, true );
338 }
339