Edit File by line
/home/zeestwma/redstone.../wp-inclu...
File: rss.php
}
[500] Fix | Delete
}
[501] Fix | Delete
else {
[502] Fix | Delete
$errormsg = "Failed to fetch $url. ";
[503] Fix | Delete
if ( $resp->error ) {
[504] Fix | Delete
# compensate for Snoopy's annoying habit to tacking
[505] Fix | Delete
# on '\n'
[506] Fix | Delete
$http_error = substr($resp->error, 0, -2);
[507] Fix | Delete
$errormsg .= "(HTTP Error: $http_error)";
[508] Fix | Delete
}
[509] Fix | Delete
else {
[510] Fix | Delete
$errormsg .= "(HTTP Response: " . $resp->response_code .')';
[511] Fix | Delete
}
[512] Fix | Delete
}
[513] Fix | Delete
}
[514] Fix | Delete
else {
[515] Fix | Delete
$errormsg = "Unable to retrieve RSS file for unknown reasons.";
[516] Fix | Delete
}
[517] Fix | Delete
[518] Fix | Delete
// else fetch failed
[519] Fix | Delete
[520] Fix | Delete
// attempt to return cached object
[521] Fix | Delete
if ($rss) {
[522] Fix | Delete
if ( MAGPIE_DEBUG ) {
[523] Fix | Delete
debug("Returning STALE object for $url");
[524] Fix | Delete
}
[525] Fix | Delete
return $rss;
[526] Fix | Delete
}
[527] Fix | Delete
[528] Fix | Delete
// else we totally failed
[529] Fix | Delete
// error( $errormsg );
[530] Fix | Delete
[531] Fix | Delete
return false;
[532] Fix | Delete
[533] Fix | Delete
} // end if ( !MAGPIE_CACHE_ON ) {
[534] Fix | Delete
} // end fetch_rss()
[535] Fix | Delete
endif;
[536] Fix | Delete
[537] Fix | Delete
/**
[538] Fix | Delete
* Retrieve URL headers and content using WP HTTP Request API.
[539] Fix | Delete
*
[540] Fix | Delete
* @since 1.5.0
[541] Fix | Delete
* @package External
[542] Fix | Delete
* @subpackage MagpieRSS
[543] Fix | Delete
*
[544] Fix | Delete
* @param string $url URL to retrieve
[545] Fix | Delete
* @param array $headers Optional. Headers to send to the URL. Default empty string.
[546] Fix | Delete
* @return Snoopy style response
[547] Fix | Delete
*/
[548] Fix | Delete
function _fetch_remote_file($url, $headers = "" ) {
[549] Fix | Delete
$resp = wp_safe_remote_request( $url, array( 'headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT ) );
[550] Fix | Delete
if ( is_wp_error($resp) ) {
[551] Fix | Delete
$error = array_shift($resp->errors);
[552] Fix | Delete
[553] Fix | Delete
$resp = new stdClass;
[554] Fix | Delete
$resp->status = 500;
[555] Fix | Delete
$resp->response_code = 500;
[556] Fix | Delete
$resp->error = $error[0] . "\n"; //\n = Snoopy compatibility
[557] Fix | Delete
return $resp;
[558] Fix | Delete
}
[559] Fix | Delete
[560] Fix | Delete
// Snoopy returns headers unprocessed.
[561] Fix | Delete
// Also note, WP_HTTP lowercases all keys, Snoopy did not.
[562] Fix | Delete
$return_headers = array();
[563] Fix | Delete
foreach ( wp_remote_retrieve_headers( $resp ) as $key => $value ) {
[564] Fix | Delete
if ( !is_array($value) ) {
[565] Fix | Delete
$return_headers[] = "$key: $value";
[566] Fix | Delete
} else {
[567] Fix | Delete
foreach ( $value as $v )
[568] Fix | Delete
$return_headers[] = "$key: $v";
[569] Fix | Delete
}
[570] Fix | Delete
}
[571] Fix | Delete
[572] Fix | Delete
$response = new stdClass;
[573] Fix | Delete
$response->status = wp_remote_retrieve_response_code( $resp );
[574] Fix | Delete
$response->response_code = wp_remote_retrieve_response_code( $resp );
[575] Fix | Delete
$response->headers = $return_headers;
[576] Fix | Delete
$response->results = wp_remote_retrieve_body( $resp );
[577] Fix | Delete
[578] Fix | Delete
return $response;
[579] Fix | Delete
}
[580] Fix | Delete
[581] Fix | Delete
/**
[582] Fix | Delete
* Retrieve
[583] Fix | Delete
*
[584] Fix | Delete
* @since 1.5.0
[585] Fix | Delete
* @package External
[586] Fix | Delete
* @subpackage MagpieRSS
[587] Fix | Delete
*
[588] Fix | Delete
* @param array $resp
[589] Fix | Delete
* @return MagpieRSS|bool
[590] Fix | Delete
*/
[591] Fix | Delete
function _response_to_rss ($resp) {
[592] Fix | Delete
$rss = new MagpieRSS( $resp->results );
[593] Fix | Delete
[594] Fix | Delete
// if RSS parsed successfully
[595] Fix | Delete
if ( $rss && (!isset($rss->ERROR) || !$rss->ERROR) ) {
[596] Fix | Delete
[597] Fix | Delete
// find Etag, and Last-Modified
[598] Fix | Delete
foreach ( (array) $resp->headers as $h) {
[599] Fix | Delete
// 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1"
[600] Fix | Delete
if (strpos($h, ": ")) {
[601] Fix | Delete
list($field, $val) = explode(": ", $h, 2);
[602] Fix | Delete
}
[603] Fix | Delete
else {
[604] Fix | Delete
$field = $h;
[605] Fix | Delete
$val = "";
[606] Fix | Delete
}
[607] Fix | Delete
[608] Fix | Delete
if ( $field == 'etag' ) {
[609] Fix | Delete
$rss->etag = $val;
[610] Fix | Delete
}
[611] Fix | Delete
[612] Fix | Delete
if ( $field == 'last-modified' ) {
[613] Fix | Delete
$rss->last_modified = $val;
[614] Fix | Delete
}
[615] Fix | Delete
}
[616] Fix | Delete
[617] Fix | Delete
return $rss;
[618] Fix | Delete
} // else construct error message
[619] Fix | Delete
else {
[620] Fix | Delete
$errormsg = "Failed to parse RSS file.";
[621] Fix | Delete
[622] Fix | Delete
if ($rss) {
[623] Fix | Delete
$errormsg .= " (" . $rss->ERROR . ")";
[624] Fix | Delete
}
[625] Fix | Delete
// error($errormsg);
[626] Fix | Delete
[627] Fix | Delete
return false;
[628] Fix | Delete
} // end if ($rss and !$rss->error)
[629] Fix | Delete
}
[630] Fix | Delete
[631] Fix | Delete
/**
[632] Fix | Delete
* Set up constants with default values, unless user overrides.
[633] Fix | Delete
*
[634] Fix | Delete
* @since 1.5.0
[635] Fix | Delete
*
[636] Fix | Delete
* @global string $wp_version The WordPress version string.
[637] Fix | Delete
*
[638] Fix | Delete
* @package External
[639] Fix | Delete
* @subpackage MagpieRSS
[640] Fix | Delete
*/
[641] Fix | Delete
function init () {
[642] Fix | Delete
if ( defined('MAGPIE_INITALIZED') ) {
[643] Fix | Delete
return;
[644] Fix | Delete
}
[645] Fix | Delete
else {
[646] Fix | Delete
define('MAGPIE_INITALIZED', 1);
[647] Fix | Delete
}
[648] Fix | Delete
[649] Fix | Delete
if ( !defined('MAGPIE_CACHE_ON') ) {
[650] Fix | Delete
define('MAGPIE_CACHE_ON', 1);
[651] Fix | Delete
}
[652] Fix | Delete
[653] Fix | Delete
if ( !defined('MAGPIE_CACHE_DIR') ) {
[654] Fix | Delete
define('MAGPIE_CACHE_DIR', './cache');
[655] Fix | Delete
}
[656] Fix | Delete
[657] Fix | Delete
if ( !defined('MAGPIE_CACHE_AGE') ) {
[658] Fix | Delete
define('MAGPIE_CACHE_AGE', 60*60); // one hour
[659] Fix | Delete
}
[660] Fix | Delete
[661] Fix | Delete
if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) {
[662] Fix | Delete
define('MAGPIE_CACHE_FRESH_ONLY', 0);
[663] Fix | Delete
}
[664] Fix | Delete
[665] Fix | Delete
if ( !defined('MAGPIE_DEBUG') ) {
[666] Fix | Delete
define('MAGPIE_DEBUG', 0);
[667] Fix | Delete
}
[668] Fix | Delete
[669] Fix | Delete
if ( !defined('MAGPIE_USER_AGENT') ) {
[670] Fix | Delete
$ua = 'WordPress/' . $GLOBALS['wp_version'];
[671] Fix | Delete
[672] Fix | Delete
if ( MAGPIE_CACHE_ON ) {
[673] Fix | Delete
$ua = $ua . ')';
[674] Fix | Delete
}
[675] Fix | Delete
else {
[676] Fix | Delete
$ua = $ua . '; No cache)';
[677] Fix | Delete
}
[678] Fix | Delete
[679] Fix | Delete
define('MAGPIE_USER_AGENT', $ua);
[680] Fix | Delete
}
[681] Fix | Delete
[682] Fix | Delete
if ( !defined('MAGPIE_FETCH_TIME_OUT') ) {
[683] Fix | Delete
define('MAGPIE_FETCH_TIME_OUT', 2); // 2 second timeout
[684] Fix | Delete
}
[685] Fix | Delete
[686] Fix | Delete
// use gzip encoding to fetch rss files if supported?
[687] Fix | Delete
if ( !defined('MAGPIE_USE_GZIP') ) {
[688] Fix | Delete
define('MAGPIE_USE_GZIP', true);
[689] Fix | Delete
}
[690] Fix | Delete
}
[691] Fix | Delete
[692] Fix | Delete
function is_info ($sc) {
[693] Fix | Delete
return $sc >= 100 && $sc < 200;
[694] Fix | Delete
}
[695] Fix | Delete
[696] Fix | Delete
function is_success ($sc) {
[697] Fix | Delete
return $sc >= 200 && $sc < 300;
[698] Fix | Delete
}
[699] Fix | Delete
[700] Fix | Delete
function is_redirect ($sc) {
[701] Fix | Delete
return $sc >= 300 && $sc < 400;
[702] Fix | Delete
}
[703] Fix | Delete
[704] Fix | Delete
function is_error ($sc) {
[705] Fix | Delete
return $sc >= 400 && $sc < 600;
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
function is_client_error ($sc) {
[709] Fix | Delete
return $sc >= 400 && $sc < 500;
[710] Fix | Delete
}
[711] Fix | Delete
[712] Fix | Delete
function is_server_error ($sc) {
[713] Fix | Delete
return $sc >= 500 && $sc < 600;
[714] Fix | Delete
}
[715] Fix | Delete
[716] Fix | Delete
class RSSCache {
[717] Fix | Delete
var $BASE_CACHE; // where the cache files are stored
[718] Fix | Delete
var $MAX_AGE = 43200; // when are files stale, default twelve hours
[719] Fix | Delete
var $ERROR = ''; // accumulate error messages
[720] Fix | Delete
[721] Fix | Delete
/**
[722] Fix | Delete
* PHP5 constructor.
[723] Fix | Delete
*/
[724] Fix | Delete
function __construct( $base = '', $age = '' ) {
[725] Fix | Delete
$this->BASE_CACHE = WP_CONTENT_DIR . '/cache';
[726] Fix | Delete
if ( $base ) {
[727] Fix | Delete
$this->BASE_CACHE = $base;
[728] Fix | Delete
}
[729] Fix | Delete
if ( $age ) {
[730] Fix | Delete
$this->MAX_AGE = $age;
[731] Fix | Delete
}
[732] Fix | Delete
[733] Fix | Delete
}
[734] Fix | Delete
[735] Fix | Delete
/**
[736] Fix | Delete
* PHP4 constructor.
[737] Fix | Delete
*/
[738] Fix | Delete
public function RSSCache( $base = '', $age = '' ) {
[739] Fix | Delete
self::__construct( $base, $age );
[740] Fix | Delete
}
[741] Fix | Delete
[742] Fix | Delete
/*=======================================================================*\
[743] Fix | Delete
Function: set
[744] Fix | Delete
Purpose: add an item to the cache, keyed on url
[745] Fix | Delete
Input: url from which the rss file was fetched
[746] Fix | Delete
Output: true on success
[747] Fix | Delete
\*=======================================================================*/
[748] Fix | Delete
function set ($url, $rss) {
[749] Fix | Delete
$cache_option = 'rss_' . $this->file_name( $url );
[750] Fix | Delete
[751] Fix | Delete
set_transient($cache_option, $rss, $this->MAX_AGE);
[752] Fix | Delete
[753] Fix | Delete
return $cache_option;
[754] Fix | Delete
}
[755] Fix | Delete
[756] Fix | Delete
/*=======================================================================*\
[757] Fix | Delete
Function: get
[758] Fix | Delete
Purpose: fetch an item from the cache
[759] Fix | Delete
Input: url from which the rss file was fetched
[760] Fix | Delete
Output: cached object on HIT, false on MISS
[761] Fix | Delete
\*=======================================================================*/
[762] Fix | Delete
function get ($url) {
[763] Fix | Delete
$this->ERROR = "";
[764] Fix | Delete
$cache_option = 'rss_' . $this->file_name( $url );
[765] Fix | Delete
[766] Fix | Delete
if ( ! $rss = get_transient( $cache_option ) ) {
[767] Fix | Delete
$this->debug(
[768] Fix | Delete
"Cache does not contain: $url (cache option: $cache_option)"
[769] Fix | Delete
);
[770] Fix | Delete
return 0;
[771] Fix | Delete
}
[772] Fix | Delete
[773] Fix | Delete
return $rss;
[774] Fix | Delete
}
[775] Fix | Delete
[776] Fix | Delete
/*=======================================================================*\
[777] Fix | Delete
Function: check_cache
[778] Fix | Delete
Purpose: check a url for membership in the cache
[779] Fix | Delete
and whether the object is older then MAX_AGE (ie. STALE)
[780] Fix | Delete
Input: url from which the rss file was fetched
[781] Fix | Delete
Output: cached object on HIT, false on MISS
[782] Fix | Delete
\*=======================================================================*/
[783] Fix | Delete
function check_cache ( $url ) {
[784] Fix | Delete
$this->ERROR = "";
[785] Fix | Delete
$cache_option = 'rss_' . $this->file_name( $url );
[786] Fix | Delete
[787] Fix | Delete
if ( get_transient($cache_option) ) {
[788] Fix | Delete
// object exists and is current
[789] Fix | Delete
return 'HIT';
[790] Fix | Delete
} else {
[791] Fix | Delete
// object does not exist
[792] Fix | Delete
return 'MISS';
[793] Fix | Delete
}
[794] Fix | Delete
}
[795] Fix | Delete
[796] Fix | Delete
/*=======================================================================*\
[797] Fix | Delete
Function: serialize
[798] Fix | Delete
\*=======================================================================*/
[799] Fix | Delete
function serialize ( $rss ) {
[800] Fix | Delete
return serialize( $rss );
[801] Fix | Delete
}
[802] Fix | Delete
[803] Fix | Delete
/*=======================================================================*\
[804] Fix | Delete
Function: unserialize
[805] Fix | Delete
\*=======================================================================*/
[806] Fix | Delete
function unserialize ( $data ) {
[807] Fix | Delete
return unserialize( $data );
[808] Fix | Delete
}
[809] Fix | Delete
[810] Fix | Delete
/*=======================================================================*\
[811] Fix | Delete
Function: file_name
[812] Fix | Delete
Purpose: map url to location in cache
[813] Fix | Delete
Input: url from which the rss file was fetched
[814] Fix | Delete
Output: a file name
[815] Fix | Delete
\*=======================================================================*/
[816] Fix | Delete
function file_name ($url) {
[817] Fix | Delete
return md5( $url );
[818] Fix | Delete
}
[819] Fix | Delete
[820] Fix | Delete
/*=======================================================================*\
[821] Fix | Delete
Function: error
[822] Fix | Delete
Purpose: register error
[823] Fix | Delete
\*=======================================================================*/
[824] Fix | Delete
function error ($errormsg, $lvl=E_USER_WARNING) {
[825] Fix | Delete
$this->ERROR = $errormsg;
[826] Fix | Delete
if ( MAGPIE_DEBUG ) {
[827] Fix | Delete
wp_trigger_error( '', $errormsg, $lvl);
[828] Fix | Delete
}
[829] Fix | Delete
else {
[830] Fix | Delete
error_log( $errormsg, 0);
[831] Fix | Delete
}
[832] Fix | Delete
}
[833] Fix | Delete
function debug ($debugmsg, $lvl=E_USER_NOTICE) {
[834] Fix | Delete
if ( MAGPIE_DEBUG ) {
[835] Fix | Delete
$this->error("MagpieRSS [debug] $debugmsg", $lvl);
[836] Fix | Delete
}
[837] Fix | Delete
}
[838] Fix | Delete
}
[839] Fix | Delete
[840] Fix | Delete
if ( !function_exists('parse_w3cdtf') ) :
[841] Fix | Delete
function parse_w3cdtf ( $date_str ) {
[842] Fix | Delete
[843] Fix | Delete
# regex to match W3C date/time formats
[844] Fix | Delete
$pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";
[845] Fix | Delete
[846] Fix | Delete
if ( preg_match( $pat, $date_str, $match ) ) {
[847] Fix | Delete
list( $year, $month, $day, $hours, $minutes, $seconds) =
[848] Fix | Delete
array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]);
[849] Fix | Delete
[850] Fix | Delete
# calc epoch for current date assuming GMT
[851] Fix | Delete
$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);
[852] Fix | Delete
[853] Fix | Delete
$offset = 0;
[854] Fix | Delete
if ( $match[11] == 'Z' ) {
[855] Fix | Delete
# zulu time, aka GMT
[856] Fix | Delete
}
[857] Fix | Delete
else {
[858] Fix | Delete
list( $tz_mod, $tz_hour, $tz_min ) =
[859] Fix | Delete
array( $match[8], $match[9], $match[10]);
[860] Fix | Delete
[861] Fix | Delete
# zero out the variables
[862] Fix | Delete
if ( ! $tz_hour ) { $tz_hour = 0; }
[863] Fix | Delete
if ( ! $tz_min ) { $tz_min = 0; }
[864] Fix | Delete
[865] Fix | Delete
$offset_secs = (($tz_hour*60)+$tz_min)*60;
[866] Fix | Delete
[867] Fix | Delete
# is timezone ahead of GMT? then subtract offset
[868] Fix | Delete
#
[869] Fix | Delete
if ( $tz_mod == '+' ) {
[870] Fix | Delete
$offset_secs = $offset_secs * -1;
[871] Fix | Delete
}
[872] Fix | Delete
[873] Fix | Delete
$offset = $offset_secs;
[874] Fix | Delete
}
[875] Fix | Delete
$epoch = $epoch + $offset;
[876] Fix | Delete
return $epoch;
[877] Fix | Delete
}
[878] Fix | Delete
else {
[879] Fix | Delete
return -1;
[880] Fix | Delete
}
[881] Fix | Delete
}
[882] Fix | Delete
endif;
[883] Fix | Delete
[884] Fix | Delete
if ( !function_exists('wp_rss') ) :
[885] Fix | Delete
/**
[886] Fix | Delete
* Display all RSS items in a HTML ordered list.
[887] Fix | Delete
*
[888] Fix | Delete
* @since 1.5.0
[889] Fix | Delete
* @package External
[890] Fix | Delete
* @subpackage MagpieRSS
[891] Fix | Delete
*
[892] Fix | Delete
* @param string $url URL of feed to display. Will not auto sense feed URL.
[893] Fix | Delete
* @param int $num_items Optional. Number of items to display, default is all.
[894] Fix | Delete
*/
[895] Fix | Delete
function wp_rss( $url, $num_items = -1 ) {
[896] Fix | Delete
if ( $rss = fetch_rss( $url ) ) {
[897] Fix | Delete
echo '<ul>';
[898] Fix | Delete
[899] Fix | Delete
if ( $num_items !== -1 ) {
[900] Fix | Delete
$rss->items = array_slice( $rss->items, 0, $num_items );
[901] Fix | Delete
}
[902] Fix | Delete
[903] Fix | Delete
foreach ( (array) $rss->items as $item ) {
[904] Fix | Delete
printf(
[905] Fix | Delete
'<li><a href="%1$s" title="%2$s">%3$s</a></li>',
[906] Fix | Delete
esc_url( $item['link'] ),
[907] Fix | Delete
esc_attr( strip_tags( $item['description'] ) ),
[908] Fix | Delete
esc_html( $item['title'] )
[909] Fix | Delete
);
[910] Fix | Delete
}
[911] Fix | Delete
[912] Fix | Delete
echo '</ul>';
[913] Fix | Delete
} else {
[914] Fix | Delete
_e( 'An error has occurred, which probably means the feed is down. Try again later.' );
[915] Fix | Delete
}
[916] Fix | Delete
}
[917] Fix | Delete
endif;
[918] Fix | Delete
[919] Fix | Delete
if ( !function_exists('get_rss') ) :
[920] Fix | Delete
/**
[921] Fix | Delete
* Display RSS items in HTML list items.
[922] Fix | Delete
*
[923] Fix | Delete
* You have to specify which HTML list you want, either ordered or unordered
[924] Fix | Delete
* before using the function. You also have to specify how many items you wish
[925] Fix | Delete
* to display. You can't display all of them like you can with wp_rss()
[926] Fix | Delete
* function.
[927] Fix | Delete
*
[928] Fix | Delete
* @since 1.5.0
[929] Fix | Delete
* @package External
[930] Fix | Delete
* @subpackage MagpieRSS
[931] Fix | Delete
*
[932] Fix | Delete
* @param string $url URL of feed to display. Will not auto sense feed URL.
[933] Fix | Delete
* @param int $num_items Optional. Number of items to display, default is all.
[934] Fix | Delete
* @return bool False on failure.
[935] Fix | Delete
*/
[936] Fix | Delete
function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS
[937] Fix | Delete
$rss = fetch_rss($url);
[938] Fix | Delete
if ( $rss ) {
[939] Fix | Delete
$rss->items = array_slice($rss->items, 0, $num_items);
[940] Fix | Delete
foreach ( (array) $rss->items as $item ) {
[941] Fix | Delete
echo "<li>\n";
[942] Fix | Delete
echo "<a href='$item[link]' title='$item[description]'>";
[943] Fix | Delete
echo esc_html($item['title']);
[944] Fix | Delete
echo "</a><br />\n";
[945] Fix | Delete
echo "</li>\n";
[946] Fix | Delete
}
[947] Fix | Delete
} else {
[948] Fix | Delete
return false;
[949] Fix | Delete
}
[950] Fix | Delete
}
[951] Fix | Delete
endif;
[952] Fix | Delete
[953] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function