wp/wp-includes/Requests/Response/Headers.php
changeset 7 cf61fcea0001
child 18 be944660c56a
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
       
     1 <?php
       
     2 /**
       
     3  * Case-insensitive dictionary, suitable for HTTP headers
       
     4  *
       
     5  * @package Requests
       
     6  */
       
     7 
       
     8 /**
       
     9  * Case-insensitive dictionary, suitable for HTTP headers
       
    10  *
       
    11  * @package Requests
       
    12  */
       
    13 class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictionary {
       
    14 	/**
       
    15 	 * Get the given header
       
    16 	 *
       
    17 	 * Unlike {@see self::getValues()}, this returns a string. If there are
       
    18 	 * multiple values, it concatenates them with a comma as per RFC2616.
       
    19 	 *
       
    20 	 * Avoid using this where commas may be used unquoted in values, such as
       
    21 	 * Set-Cookie headers.
       
    22 	 *
       
    23 	 * @param string $key
       
    24 	 * @return string Header value
       
    25 	 */
       
    26 	public function offsetGet($key) {
       
    27 		$key = strtolower($key);
       
    28 		if (!isset($this->data[$key])) {
       
    29 			return null;
       
    30 		}
       
    31 
       
    32 		return $this->flatten($this->data[$key]);
       
    33 	}
       
    34 
       
    35 	/**
       
    36 	 * Set the given item
       
    37 	 *
       
    38 	 * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
       
    39 	 *
       
    40 	 * @param string $key Item name
       
    41 	 * @param string $value Item value
       
    42 	 */
       
    43 	public function offsetSet($key, $value) {
       
    44 		if ($key === null) {
       
    45 			throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
       
    46 		}
       
    47 
       
    48 		$key = strtolower($key);
       
    49 
       
    50 		if (!isset($this->data[$key])) {
       
    51 			$this->data[$key] = array();
       
    52 		}
       
    53 
       
    54 		$this->data[$key][] = $value;
       
    55 	}
       
    56 
       
    57 	/**
       
    58 	 * Get all values for a given header
       
    59 	 *
       
    60 	 * @param string $key
       
    61 	 * @return array Header values
       
    62 	 */
       
    63 	public function getValues($key) {
       
    64 		$key = strtolower($key);
       
    65 		if (!isset($this->data[$key])) {
       
    66 			return null;
       
    67 		}
       
    68 
       
    69 		return $this->data[$key];
       
    70 	}
       
    71 
       
    72 	/**
       
    73 	 * Flattens a value into a string
       
    74 	 *
       
    75 	 * Converts an array into a string by imploding values with a comma, as per
       
    76 	 * RFC2616's rules for folding headers.
       
    77 	 *
       
    78 	 * @param string|array $value Value to flatten
       
    79 	 * @return string Flattened value
       
    80 	 */
       
    81 	public function flatten($value) {
       
    82 		if (is_array($value)) {
       
    83 			$value = implode(',', $value);
       
    84 		}
       
    85 
       
    86 		return $value;
       
    87 	}
       
    88 
       
    89 	/**
       
    90 	 * Get an iterator for the data
       
    91 	 *
       
    92 	 * Converts the internal
       
    93 	 * @return ArrayIterator
       
    94 	 */
       
    95 	public function getIterator() {
       
    96 		return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
       
    97 	}
       
    98 }