X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FFeed.php;h=e737a76ad333dc8732e3456f4bdce2d04b1d9e4a;hb=3f7fe13247c19fc02e48c9b50bafb9e1c0d07700;hp=a34dae4e0f12c7834ccee09dbd019fb9e6758b1a;hpb=90155b8a9719ada6522a320a3315b4e698fdd970;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Feed.php b/includes/Feed.php index a34dae4e0f..e737a76ad3 100644 --- a/includes/Feed.php +++ b/includes/Feed.php @@ -20,27 +20,31 @@ # http://www.gnu.org/copyleft/gpl.html /** - * Contain class to build rss / atom ... feeds + * Contain a feed class as well as classes to build rss / atom ... feeds + * Available feeds are defined in Defines.php + * @package MediaWiki */ -/** - * Available feeds objects - */ -$wgFeedClasses = array( - 'rss' => 'RSSFeed', - 'atom' => 'AtomFeed', - ); /** * @todo document + * @package MediaWiki */ class FeedItem { + /**#@+ + * @var string + * @access private + */ var $Title = 'Wiki'; var $Description = ''; var $Url = ''; var $Date = ''; var $Author = ''; + /**#@-*/ + /** + * @todo document + */ function FeedItem( $Title, $Description, $Url, $Date = '', $Author = '', $Comments = '' ) { $this->Title = $Title; $this->Description = $Description; @@ -50,78 +54,151 @@ class FeedItem { $this->Comments = $Comments; } - /* Static... */ + /** + * @static + * @todo document + */ function xmlEncode( $string ) { - global $wgInputEncoding, $wgLang; + global $wgInputEncoding, $wgContLang; $string = str_replace( "\r\n", "\n", $string ); + $string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $string ); if( strcasecmp( $wgInputEncoding, 'utf-8' ) != 0 ) { - $string = $wgLang->iconv( $wgInputEncoding, 'utf-8', $string ); + $string = $wgContLang->iconv( $wgInputEncoding, 'utf-8', $string ); } return htmlspecialchars( $string ); } - function getTitle() { - return $this->xmlEncode( $this->Title ); - } - function getUrl() { - return $this->xmlEncode( $this->Url ); - } - function getDescription() { - return $this->xmlEncode( $this->Description ); - } + + /** + * @todo document + */ + function getTitle() { return $this->xmlEncode( $this->Title ); } + /** + * @todo document + */ + function getUrl() { return $this->xmlEncode( $this->Url ); } + /** + * @todo document + */ + function getDescription() { return $this->xmlEncode( $this->Description ); } + /** + * @todo document + */ function getLanguage() { - global $wgLanguageCode; - return $wgLanguageCode; - } - function getDate() { - return $this->Date; - } - function getAuthor() { - return $this->xmlEncode( $this->Author ); - } - function getComments() { - return $this->xmlEncode( $this->Comments ); + global $wgContLanguageCode; + return $wgContLanguageCode; } + /** + * @todo document + */ + function getDate() { return $this->Date; } + /** + * @todo document + */ + function getAuthor() { return $this->xmlEncode( $this->Author ); } + /** + * @todo document + */ + function getComments() { return $this->xmlEncode( $this->Comments ); } } /** * @todo document + * @package MediaWiki */ class ChannelFeed extends FeedItem { - /* Abstract functions, override! */ + /**#@+ + * Abstract function, override! + * @abstract + */ + + /** + * Generate Header of the feed + */ function outHeader() { # print ""; } + + /** + * Generate an item + * @param $item + */ function outItem( $item ) { # print "..."; } + + /** + * Generate Footer of the feed + */ function outFooter() { # print ""; } + /**#@-*/ - function outXmlHeader( $mimetype='application/xml' ) { - global $wgServer, $wgStylePath, $wgOut; + /** + * Setup and send HTTP headers. Don't send any content; + * content might end up being cached and re-sent with + * these same headers later. + * + * This should be called from the outHeader() method, + * but can also be called separately. + * + * @access public + */ + function httpHeaders() { + global $wgOut; # We take over from $wgOut, excepting its cache header info $wgOut->disable(); + $mimetype = $this->contentType(); header( "Content-type: $mimetype; charset=UTF-8" ); $wgOut->sendCacheControl(); + } + + /** + * Return an internet media type to be sent in the headers. + * + * @return string + * @access private + */ + function contentType() { + return 'application/xml'; + } + + /** + * Output the initial XML headers with a stylesheet for legibility + * if someone finds it in a browser. + * @access private + */ + function outXmlHeader() { + global $wgServer, $wgStylePath; + + $this->httpHeaders(); print '<' . '?xml version="1.0" encoding="utf-8"?' . ">\n"; print '<' . '?xml-stylesheet type="text/css" href="' . - htmlspecialchars( "$wgServer$wgStylePath/feed.css" ) . '"?' . ">\n"; + htmlspecialchars( "$wgServer$wgStylePath/common/feed.css" ) . '"?' . ">\n"; } } /** * Generate a RSS feed * @todo document + * @package MediaWiki */ class RSSFeed extends ChannelFeed { + /** + * Format a date given a timestamp + * @param integer $ts Timestamp + * @return string Date string + */ function formatTime( $ts ) { - return gmdate( 'D, d M Y H:i:s \G\M\T', wfTimestamp2Unix( $ts ) ); + return gmdate( 'D, d M Y H:i:s \G\M\T', wfTimestamp( TS_UNIX, $ts ) ); } + /** + * Ouput an RSS 2.0 header + */ function outHeader() { global $wgVersion; @@ -137,6 +214,10 @@ class RSSFeed extends ChannelFeed { @@ -150,6 +231,9 @@ class RSSFeed extends ChannelFeed { @@ -160,13 +244,20 @@ class RSSFeed extends ChannelFeed { /** * Generate an Atom feed * @todo document + * @package MediaWiki */ class AtomFeed extends ChannelFeed { + /** + * @todo document + */ function formatTime( $ts ) { // need to use RFC 822 time format at least for rss2.0 - return gmdate( 'Y-m-d\TH:i:s', wfTimestamp2Unix( $ts ) ); + return gmdate( 'Y-m-d\TH:i:s', wfTimestamp( TS_UNIX, $ts ) ); } + /** + * @todo document + */ function outHeader() { global $wgVersion, $wgOut; @@ -181,6 +272,9 @@ class AtomFeed extends ChannelFeed { @@ -202,6 +296,9 @@ class AtomFeed extends ChannelFeed { */ } + /** + * @todo document + */ function outFooter() {?>