Completed
Push — add/checksum-histogram-api ( da85cc...fcb325 )
by
unknown
09:04
created

class.jetpack-ixr-client.php (3 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
defined( 'ABSPATH' ) or die( 'No direct access, please.' );
4
5
require_once( ABSPATH . WPINC . '/class-IXR.php' );
6
7
/**
8
 * IXR_Client
9
 *
10
 * @package IXR
11
 * @since 1.5
12
 *
13
 */
14
class Jetpack_IXR_Client extends IXR_Client {
15
	public $jetpack_args = null;
16
17
	function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
18
		$defaults = array(
19
			'url' => Jetpack::xmlrpc_api_url(),
20
			'user_id' => 0,
21
		);
22
23
		$args = wp_parse_args( $args, $defaults );
0 ignored issues
show
Consider using a different name than the parameter $args. This often makes code more readable.
Loading history...
24
25
		$this->jetpack_args = $args;
26
27
		$this->IXR_Client( $args['url'], $path, $port, $timeout );
28
	}
29
30
	function query() {
31
		$args = func_get_args();
32
		$method = array_shift( $args );
33
		$request = new IXR_Request( $method, $args );
34
		$xml = trim( $request->getXml() );
35
36
		$response = Jetpack_Client::remote_request( $this->jetpack_args, $xml );
37
38
		if ( is_wp_error( $response ) ) {
39
			$this->error = new IXR_Error( -10520, sprintf( 'Jetpack: [%s] %s', $response->get_error_code(), $response->get_error_message() ) );
40
			return false;
41
		}
42
43
		if ( !$response ) {
44
			$this->error = new IXR_Error( -10520, 'Jetpack: Unknown Error' );
45
			return false;
46
		}
47
48
		if ( 200 != wp_remote_retrieve_response_code( $response ) ) {
49
			$this->error = new IXR_Error( -32300, 'transport error - HTTP status code was not 200' );
50
			return false;
51
		}
52
53
		$content = wp_remote_retrieve_body( $response );
54
55
		// Now parse what we've got back
56
		$this->message = new IXR_Message( $content );
57
		if ( !$this->message->parse() ) {
58
			// XML error
59
			$this->error = new IXR_Error( -32700, 'parse error. not well formed' );
60
			return false;
61
		}
62
63
		// Is the message a fault?
64
		if ( $this->message->messageType == 'fault' ) {
65
			$this->error = new IXR_Error( $this->message->faultCode, $this->message->faultString );
66
			return false;
67
		}
68
69
		// Message must be OK
70
		return true;
71
	}
72
73
	function get_jetpack_error( $fault_code = null, $fault_string = null ) {
74
		if ( is_null( $fault_code ) ) {
75
			$fault_code = $this->error->code;
0 ignored issues
show
Consider using a different name than the parameter $fault_code. This often makes code more readable.
Loading history...
76
		}
77
78
		if ( is_null( $fault_string ) ) {
79
			$fault_string = $this->error->message;
0 ignored issues
show
Consider using a different name than the parameter $fault_string. This often makes code more readable.
Loading history...
80
		}
81
82
		if ( preg_match( '#jetpack:\s+\[(\w+)\]\s*(.*)?$#i', $fault_string, $match ) ) {
83
			$code    = $match[1];
84
			$message = $match[2];
85
			$status  = $fault_code;
86
			return new Jetpack_Error( $code, $message, $status );
87
		}
88
89
		return new Jetpack_Error( "IXR_{$fault_code}", $fault_string );
90
	}
91
}
92
93
/**
94
 * IXR_ClientMulticall
95
 *
96
 * @package IXR
97
 * @since 1.5
98
 */
99
class Jetpack_IXR_ClientMulticall extends Jetpack_IXR_Client {
100
	public $calls = array();
101
102
	function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
103
		parent::__construct( $args, $path, $port, $timeout );
104
	}
105
106
	function addCall() {
107
		$args = func_get_args();
108
		$methodName = array_shift( $args );
109
		$struct = array(
110
			'methodName' => $methodName,
111
			'params' => $args
112
		);
113
		$this->calls[] = $struct;
114
	}
115
116
	function query() {
117
		usort( $this->calls, array( $this, 'sort_calls' ) );
118
119
		// Prepare multicall, then call the parent::query() method
120
		return parent::query( 'system.multicall', $this->calls );
121
	}
122
123
	// Make sure syncs are always done first
124
	function sort_calls( $a, $b ) {
125
		if ( 'jetpack.syncContent' == $a['methodName'] ) {
126
			return -1;
127
		}
128
129
		if ( 'jetpack.syncContent' == $b['methodName'] ) {
130
			return 1;
131
		}
132
133
		return 0;
134
	}
135
}
136