WordPress/wp-includes/class-wp-http-requests-response.php
Gary Pendergast aaf99e6913 Code is Poetry.
WordPress' code just... wasn't.
This is now dealt with.

Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS.
Fixes #41057.


Built from https://develop.svn.wordpress.org/trunk@42343


git-svn-id: http://core.svn.wordpress.org/trunk@42172 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-11-30 23:11:00 +00:00

199 lines
4.2 KiB
PHP

<?php
/**
* HTTP API: WP_HTTP_Requests_Response class
*
* @package WordPress
* @subpackage HTTP
* @since 4.6.0
*/
/**
* Core wrapper object for a Requests_Response for standardisation.
*
* @since 4.6.0
*
* @see WP_HTTP_Response
*/
class WP_HTTP_Requests_Response extends WP_HTTP_Response {
/**
* Requests Response object.
*
* @since 4.6.0
* @var Requests_Response
*/
protected $response;
/**
* Filename the response was saved to.
*
* @since 4.6.0
* @var string|null
*/
protected $filename;
/**
* Constructor.
*
* @since 4.6.0
*
* @param Requests_Response $response HTTP response.
* @param string $filename Optional. File name. Default empty.
*/
public function __construct( Requests_Response $response, $filename = '' ) {
$this->response = $response;
$this->filename = $filename;
}
/**
* Retrieves the response object for the request.
*
* @since 4.6.0
*
* @return Requests_Response HTTP response.
*/
public function get_response_object() {
return $this->response;
}
/**
* Retrieves headers associated with the response.
*
* @since 4.6.0
*
* @see \Requests_Utility_CaseInsensitiveDictionary
*
* @return \Requests_Utility_CaseInsensitiveDictionary Map of header name to header value.
*/
public function get_headers() {
// Ensure headers remain case-insensitive.
$converted = new Requests_Utility_CaseInsensitiveDictionary();
foreach ( $this->response->headers->getAll() as $key => $value ) {
if ( count( $value ) === 1 ) {
$converted[ $key ] = $value[0];
} else {
$converted[ $key ] = $value;
}
}
return $converted;
}
/**
* Sets all header values.
*
* @since 4.6.0
*
* @param array $headers Map of header name to header value.
*/
public function set_headers( $headers ) {
$this->response->headers = new Requests_Response_Headers( $headers );
}
/**
* Sets a single HTTP header.
*
* @since 4.6.0
*
* @param string $key Header name.
* @param string $value Header value.
* @param bool $replace Optional. Whether to replace an existing header of the same name.
* Default true.
*/
public function header( $key, $value, $replace = true ) {
if ( $replace ) {
unset( $this->response->headers[ $key ] );
}
$this->response->headers[ $key ] = $value;
}
/**
* Retrieves the HTTP return code for the response.
*
* @since 4.6.0
*
* @return int The 3-digit HTTP status code.
*/
public function get_status() {
return $this->response->status_code;
}
/**
* Sets the 3-digit HTTP status code.
*
* @since 4.6.0
*
* @param int $code HTTP status.
*/
public function set_status( $code ) {
$this->response->status_code = absint( $code );
}
/**
* Retrieves the response data.
*
* @since 4.6.0
*
* @return mixed Response data.
*/
public function get_data() {
return $this->response->body;
}
/**
* Sets the response data.
*
* @since 4.6.0
*
* @param mixed $data Response data.
*/
public function set_data( $data ) {
$this->response->body = $data;
}
/**
* Retrieves cookies from the response.
*
* @since 4.6.0
*
* @return WP_HTTP_Cookie[] List of cookie objects.
*/
public function get_cookies() {
$cookies = array();
foreach ( $this->response->cookies as $cookie ) {
$cookies[] = new WP_Http_Cookie(
array(
'name' => $cookie->name,
'value' => urldecode( $cookie->value ),
'expires' => isset( $cookie->attributes['expires'] ) ? $cookie->attributes['expires'] : null,
'path' => isset( $cookie->attributes['path'] ) ? $cookie->attributes['path'] : null,
'domain' => isset( $cookie->attributes['domain'] ) ? $cookie->attributes['domain'] : null,
)
);
}
return $cookies;
}
/**
* Converts the object to a WP_Http response array.
*
* @since 4.6.0
*
* @return array WP_Http response array, per WP_Http::request().
*/
public function to_array() {
return array(
'headers' => $this->get_headers(),
'body' => $this->get_data(),
'response' => array(
'code' => $this->get_status(),
'message' => get_status_header_desc( $this->get_status() ),
),
'cookies' => $this->get_cookies(),
'filename' => $this->filename,
);
}
}