Completed
Push — fix/pijp-update ( 700585...08d7fb )
by
unknown
09:00
created

functions.global.php ➔ jetpack_upgrader_pre_download()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
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
 * Please write docblocks
10
 */
11
12
/**
13
 * Disable direct access.
14
 */
15
if ( ! defined( 'ABSPATH' ) ) {
16
	exit;
17
}
18
19
/**
20
 * Determine if this site is an AT site or not looking first at the 'at_options' option.
21
 * As a fallback, check for presence of wpcomsh plugin to determine if a current site has undergone AT.
22
 *
23
 * @since 4.8.1
24
 *
25
 * @return bool
26
 */
27
function jetpack_is_automated_transfer_site() {
28
	$at_options = get_option( 'at_options', array() );
29
	return ! empty( $at_options ) || defined( 'WPCOMSH__PLUGIN_FILE' );
30
}
31
32
/**
33
 * Register post type for migration.
34
 *
35
 * @since 5.2
36
 */
37
function jetpack_register_migration_post_type() {
38
	register_post_type( 'jetpack_migration', array(
39
		'supports'     => array(),
40
		'taxonomies'   => array(),
41
		'hierarchical' => false,
42
		'public'       => false,
43
		'has_archive'  => false,
44
		'can_export'   => true,
45
	) );
46
}
47
48
/**
49
 * Stores migration data in the database.
50
 *
51
 * @since 5.2
52
 *
53
 * @param string $option_name
54
 * @param bool $option_value
55
 *
56
 * @return int|WP_Error
57
 */
58
function jetpack_store_migration_data( $option_name, $option_value ) {
59
	jetpack_register_migration_post_type();
60
61
	$insert = array(
62
		'post_title' => $option_name,
63
		'post_content_filtered' => $option_value,
64
		'post_type' => 'jetpack_migration',
65
		'post_date' => date( 'Y-m-d H:i:s', time() ),
66
	);
67
68
	$post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
69
70
	if ( null !== $post ) {
71
		$insert['ID'] = $post->ID;
72
	}
73
74
	return wp_insert_post( $insert, true );
75
}
76
77
/**
78
 * Retrieves legacy image widget data.
79
 *
80
 * @since 5.2
81
 *
82
 * @param string $option_name
83
 *
84
 * @return mixed|null
85
 */
86
function jetpack_get_migration_data( $option_name ) {
87
	$post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
88
89
	return null !== $post ? maybe_unserialize( $post->post_content_filtered ) : null;
90
}
91
92
/**
93
 * Intervene upgrade process so Jetpack themes are downloaded with credentials.
94
 *
95
 * @since 5.3
96
 *
97
 * @param bool   $preempt Whether to preempt an HTTP request's return value. Default false.
98
 * @param array  $r       HTTP request arguments.
99
 * @param string $url     The request URL.
100
 *
101
 * @return array|bool|WP_Error
102
 */
103
function jetpack_theme_update( $preempt, $r, $url ) {
104
	if ( false !== stripos( $url, JETPACK__WPCOM_JSON_API_HOST . '/rest/v1/themes/download' ) ) {
105
		$file = $r['filename'];
106
		if ( ! $file ) {
107
			return new WP_Error( 'problem_creating_theme_file', esc_html__( 'Problem creating file for theme download', 'jetpack' ) );
108
		}
109
		$theme = pathinfo( parse_url( $url, PHP_URL_PATH ), PATHINFO_FILENAME );
110
111
		// Remove filter to avoid endless loop since wpcom_json_api_request_as_blog uses this too.
112
		remove_filter( 'pre_http_request', 'jetpack_theme_update' );
113
		$result = Jetpack_Client::wpcom_json_api_request_as_blog(
114
			"themes/download/$theme.zip", '1.1', array( 'stream' => true, 'filename' => $file )
115
		);
116
117
		if ( 200 !== wp_remote_retrieve_response_code( $result ) ) {
118
			return new WP_Error( 'problem_fetching_theme', esc_html__( 'Problem downloading theme', 'jetpack' ) );
119
		}
120
		return $result;
121
	}
122
	return $preempt;
123
}
124
125
/**
126
 * Add the filter when a upgrade is going to be downloaded.
127
 *
128
 * @since 5.3
129
 *
130
 * @param bool $reply Whether to bail without returning the package. Default false.
131
 *
132
 * @return bool
133
 */
134
function jetpack_upgrader_pre_download( $reply ) {
135
	add_filter( 'pre_http_request', 'jetpack_theme_update', 10, 3 );
136
	return $reply;
137
}
138
139
add_filter( 'upgrader_pre_download', 'jetpack_upgrader_pre_download' );
140