X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/11be8dc178e77d0b46189bbd8e33a216a9b90942..16e7b37c7914d753890c1a05a9335f3b43751eb8:/wp-includes/rss.php diff --git a/wp-includes/rss.php b/wp-includes/rss.php index 99627734..208ca720 100644 --- a/wp-includes/rss.php +++ b/wp-includes/rss.php @@ -10,12 +10,21 @@ * * @package External * @subpackage MagpieRSS + * @deprecated 3.0.0 Use SimplePie instead. */ -/* - * Hook to use another RSS object instead of MagpieRSS +/** + * Deprecated. Use SimplePie (class-simplepie.php) instead. + */ +_deprecated_file( basename( __FILE__ ), '3.0.0', WPINC . '/class-simplepie.php' ); + +/** + * Fires before MagpieRSS is loaded, to optionally replace it. + * + * @since 2.3.0 + * @deprecated 3.0.0 */ -do_action('load_feed_engine'); +do_action( 'load_feed_engine' ); /** RSS feed constant. */ define('RSS', 'RSS'); @@ -46,23 +55,23 @@ class MagpieRSS { var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); - function MagpieRSS ($source) { + /** + * PHP5 constructor. + */ + function __construct( $source ) { - # if PHP xml isn't compiled in, die + # Check if PHP xml isn't compiled # - if ( !function_exists('xml_parser_create') ) - trigger_error( "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php" ); - - $parser = @xml_parser_create(); - - if ( !is_resource($parser) ) - trigger_error( "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php"); + if ( ! function_exists('xml_parser_create') ) { + return trigger_error( "PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension." ); + } + $parser = xml_parser_create(); $this->parser = $parser; # pass in parser, and a reference to this object - # setup handlers + # set up handlers # xml_set_object( $this->parser, $this ); xml_set_element_handler($this->parser, @@ -89,6 +98,13 @@ class MagpieRSS { $this->normalize(); } + /** + * PHP4 constructor. + */ + public function MagpieRSS( $source ) { + self::__construct( $source ); + } + function feed_start_element($p, $element, &$attrs) { $el = $element = strtolower($element); $attrs = array_change_key_case($attrs, CASE_LOWER); @@ -96,7 +112,7 @@ class MagpieRSS { // check for a namespace, and split if found $ns = false; if ( strpos( $element, ':' ) ) { - list($ns, $el) = split( ':', $element, 2); + list($ns, $el) = explode( ':', $element, 2); } if ( $ns and $ns != 'rdf' ) { $this->current_namespace = $ns; @@ -162,7 +178,6 @@ class MagpieRSS { $this->incontent = $el; - } // if inside an Atom content construct (e.g. content or summary) field treat tags as text @@ -170,7 +185,7 @@ class MagpieRSS { { // if tags are inlined, then flatten $attrs_str = join(' ', - array_map('map_attrs', + array_map(array('MagpieRSS', 'map_attrs'), array_keys($attrs), array_values($attrs) ) ); @@ -201,8 +216,6 @@ class MagpieRSS { } } - - function feed_cdata ($p, $text) { if ($this->feed_type == ATOM and $this->incontent) @@ -242,7 +255,7 @@ class MagpieRSS { } elseif ($this->feed_type == ATOM and $this->incontent ) { // balance tags properly - // note: i don't think this is actually neccessary + // note: This may not actually be necessary if ( $this->stack[0] == $el ) { $this->append_content(""); @@ -389,7 +402,7 @@ if ( !function_exists('fetch_rss') ) : /** * Build Magpie object based on RSS from URL. * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS * @@ -421,7 +434,7 @@ function fetch_rss ($url) { else { // Flow // 1. check cache - // 2. if there is a hit, make sure its fresh + // 2. if there is a hit, make sure it's fresh // 3. if cached obj fails freshness check, fetch remote // 4. if remote fails, return stale object, or error @@ -431,7 +444,6 @@ function fetch_rss ($url) { debug($cache->ERROR, E_USER_WARNING); } - $cache_status = 0; // response of check_cache $request_headers = array(); // HTTP headers to send with fetch $rss = 0; // parsed RSS object @@ -456,7 +468,7 @@ function fetch_rss ($url) { // else attempt a conditional get - // setup headers + // set up headers if ( $cache_status == 'STALE' ) { $rss = $cache->get( $url ); if ( isset($rss->etag) and $rss->last_modified ) { @@ -527,7 +539,7 @@ endif; /** * Retrieve URL headers and content using WP HTTP Request API. * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS * @@ -535,8 +547,8 @@ endif; * @param array $headers Optional. Headers to send to the URL. * @return Snoopy style response */ -function _fetch_remote_file ($url, $headers = "" ) { - $resp = wp_remote_request($url, array('headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT)); +function _fetch_remote_file($url, $headers = "" ) { + $resp = wp_safe_remote_request( $url, array( 'headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT ) ); if ( is_wp_error($resp) ) { $error = array_shift($resp->errors); @@ -546,11 +558,24 @@ function _fetch_remote_file ($url, $headers = "" ) { $resp->error = $error[0] . "\n"; //\n = Snoopy compatibility return $resp; } + + // Snoopy returns headers unprocessed. + // Also note, WP_HTTP lowercases all keys, Snoopy did not. + $return_headers = array(); + foreach ( wp_remote_retrieve_headers( $resp ) as $key => $value ) { + if ( !is_array($value) ) { + $return_headers[] = "$key: $value"; + } else { + foreach ( $value as $v ) + $return_headers[] = "$key: $v"; + } + } + $response = new stdClass; - $response->status = $resp['response']['code']; - $response->response_code = $resp['response']['code']; - $response->headers = $resp['headers']; - $response->results = $resp['body']; + $response->status = wp_remote_retrieve_response_code( $resp ); + $response->response_code = wp_remote_retrieve_response_code( $resp ); + $response->headers = $return_headers; + $response->results = wp_remote_retrieve_body( $resp ); return $response; } @@ -558,12 +583,12 @@ function _fetch_remote_file ($url, $headers = "" ) { /** * Retrieve * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS * - * @param unknown_type $resp - * @return unknown + * @param array $resp + * @return MagpieRSS|bool */ function _response_to_rss ($resp) { $rss = new MagpieRSS( $resp->results ); @@ -572,7 +597,7 @@ function _response_to_rss ($resp) { if ( $rss && (!isset($rss->ERROR) || !$rss->ERROR) ) { // find Etag, and Last-Modified - foreach( (array) $resp->headers as $h) { + foreach ( (array) $resp->headers as $h) { // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" if (strpos($h, ": ")) { list($field, $val) = explode(": ", $h, 2); @@ -582,11 +607,11 @@ function _response_to_rss ($resp) { $val = ""; } - if ( $field == 'ETag' ) { + if ( $field == 'etag' ) { $rss->etag = $val; } - if ( $field == 'Last-Modified' ) { + if ( $field == 'last-modified' ) { $rss->last_modified = $val; } } @@ -606,9 +631,9 @@ function _response_to_rss ($resp) { } /** - * Setup constants with default values, unless user overrides. + * Set up constants with default values, unless user overrides. * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS */ @@ -692,7 +717,10 @@ class RSSCache { var $MAX_AGE = 43200; // when are files stale, default twelve hours var $ERROR = ''; // accumulate error messages - function RSSCache ($base='', $age='') { + /** + * PHP5 constructor. + */ + function __construct( $base = '', $age = '' ) { $this->BASE_CACHE = WP_CONTENT_DIR . '/cache'; if ( $base ) { $this->BASE_CACHE = $base; @@ -703,25 +731,23 @@ class RSSCache { } + /** + * PHP4 constructor. + */ + public function RSSCache( $base = '', $age = '' ) { + self::__construct( $base, $age ); + } + /*=======================================================================*\ Function: set Purpose: add an item to the cache, keyed on url - Input: url from wich the rss file was fetched - Output: true on sucess + Input: url from which the rss file was fetched + Output: true on success \*=======================================================================*/ function set ($url, $rss) { - global $wpdb; $cache_option = 'rss_' . $this->file_name( $url ); - $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; - - // shouldn't these be using get_option() ? - if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_option ) ) ) - add_option($cache_option, '', '', 'no'); - if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_timestamp ) ) ) - add_option($cache_timestamp, '', '', 'no'); - update_option($cache_option, $rss); - update_option($cache_timestamp, time() ); + set_transient($cache_option, $rss, $this->MAX_AGE); return $cache_option; } @@ -729,22 +755,20 @@ class RSSCache { /*=======================================================================*\ Function: get Purpose: fetch an item from the cache - Input: url from wich the rss file was fetched + Input: url from which the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function get ($url) { $this->ERROR = ""; $cache_option = 'rss_' . $this->file_name( $url ); - if ( ! get_option( $cache_option ) ) { + if ( ! $rss = get_transient( $cache_option ) ) { $this->debug( "Cache doesn't contain: $url (cache option: $cache_option)" ); return 0; } - $rss = get_option( $cache_option ); - return $rss; } @@ -752,28 +776,17 @@ class RSSCache { Function: check_cache Purpose: check a url for membership in the cache and whether the object is older then MAX_AGE (ie. STALE) - Input: url from wich the rss file was fetched + Input: url from which the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function check_cache ( $url ) { $this->ERROR = ""; - $cache_option = $this->file_name( $url ); - $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; - - if ( $mtime = get_option($cache_timestamp) ) { - // find how long ago the file was added to the cache - // and whether that is longer then MAX_AGE - $age = time() - $mtime; - if ( $this->MAX_AGE > $age ) { - // object exists and is current + $cache_option = 'rss_' . $this->file_name( $url ); + + if ( get_transient($cache_option) ) { + // object exists and is current return 'HIT'; - } - else { - // object exists but is old - return 'STALE'; - } - } - else { + } else { // object does not exist return 'MISS'; } @@ -796,7 +809,7 @@ class RSSCache { /*=======================================================================*\ Function: file_name Purpose: map url to location in cache - Input: url from wich the rss file was fetched + Input: url from which the rss file was fetched Output: a file name \*=======================================================================*/ function file_name ($url) { @@ -875,7 +888,7 @@ if ( !function_exists('wp_rss') ) : /** * Display all RSS items in a HTML ordered list. * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS * @@ -893,9 +906,9 @@ function wp_rss( $url, $num_items = -1 ) { foreach ( (array) $rss->items as $item ) { printf( '
  • %3$s
  • ', - clean_url( $item['link'] ), - attribute_escape( strip_tags( $item['description'] ) ), - htmlentities( $item['title'] ) + esc_url( $item['link'] ), + esc_attr( strip_tags( $item['description'] ) ), + esc_html( $item['title'] ) ); } @@ -915,7 +928,7 @@ if ( !function_exists('get_rss') ) : * to display. You can't display all of them like you can with wp_rss() * function. * - * @since unknown + * @since 1.5.0 * @package External * @subpackage MagpieRSS * @@ -930,7 +943,7 @@ function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS foreach ( (array) $rss->items as $item ) { echo "
  • \n"; echo ""; - echo htmlentities($item['title']); + echo esc_html($item['title']); echo "
    \n"; echo "
  • \n"; } @@ -939,5 +952,3 @@ function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS } } endif; - -?>