X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2FFeed.php;h=782b64283b1adc61a03bb6b29283474a142df779;hb=1dd0888ea999133906a80576d538a69580eb7959;hp=512057d9371b662553f6813f6533da0735d98b18;hpb=79d5225c0e864482269e2315f47b899697681e52;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Feed.php b/includes/Feed.php index 512057d937..782b64283b 100644 --- a/includes/Feed.php +++ b/includes/Feed.php @@ -19,13 +19,19 @@ # http://www.gnu.org/copyleft/gpl.html /** + * @defgroup Feed Feed + * * Basic support for outputting syndication feeds in RSS, other formats. * Contain a feed class as well as classes to build rss / atom ... feeds * Available feeds are defined in Defines.php + * + * @file */ /** * A base class for basic support for outputting syndication feeds in RSS and other formats. + * + * @ingroup Feed */ class FeedItem { /**#@+ @@ -37,45 +43,144 @@ class FeedItem { var $Url = ''; var $Date = ''; var $Author = ''; + var $UniqueId = ''; + var $RSSIsPermalink; /**#@-*/ - /**#@+ - * @todo document - * @param $Url URL uniquely designating the item. + /** + * Constructor + * + * @param $Title String: Item's title + * @param $Description String + * @param $Url String: URL uniquely designating the item. + * @param $Date String: Item's date + * @param $Author String: Author's user name + * @param $Comments String */ function __construct( $Title, $Description, $Url, $Date = '', $Author = '', $Comments = '' ) { $this->Title = $Title; $this->Description = $Description; $this->Url = $Url; + $this->UniqueId = $Url; + $this->RSSIsPermalink = false; $this->Date = $Date; $this->Author = $Author; $this->Comments = $Comments; } /** - * @static + * Encode $string so that it can be safely embedded in a XML document + * + * @param $string String: string to encode + * @return String */ - function xmlEncode( $string ) { + public function xmlEncode( $string ) { $string = str_replace( "\r\n", "\n", $string ); $string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $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 ); } - function getLanguage() { + /** + * Get the unique id of this item + * + * @return String + */ + public function getUniqueId() { + if ( $this->UniqueId ) { + return $this->xmlEncode( $this->UniqueId ); + } + } + + /** + * set the unique id of an item + * + * @param $uniqueId String: unique id for the item + * @param $RSSisPermalink Boolean: set to true if the guid (unique id) is a permalink (RSS feeds only) + */ + public function setUniqueId($uniqueId, $RSSisPermalink = False) { + $this->UniqueId = $uniqueId; + $this->RSSIsPermalink = $isPermalink; + } + + /** + * Get the title of this item; already xml-encoded + * + * @return String + */ + public function getTitle() { + return $this->xmlEncode( $this->Title ); + } + + /** + * Get the URL of this item; already xml-encoded + * + * @return String + */ + public function getUrl() { + return $this->xmlEncode( $this->Url ); + } + + /** + * Get the description of this item; already xml-encoded + * + * @return String + */ + public function getDescription() { + return $this->xmlEncode( $this->Description ); + } + + /** + * Get the language of this item + * + * @return String + */ + public function getLanguage() { global $wgContLanguageCode; return $wgContLanguageCode; } - function getDate() { return $this->Date; } - function getAuthor() { return $this->xmlEncode( $this->Author ); } - function getComments() { return $this->xmlEncode( $this->Comments ); } + + /** + * Get the title of this item + * + * @return String + */ + public function getDate() { + return $this->Date; + } + + /** + * Get the author of this item; already xml-encoded + * + * @return String + */ + public function getAuthor() { + return $this->xmlEncode( $this->Author ); + } + + /** + * Get the comment of this item; already xml-encoded + * + * @return String + */ + public function getComments() { + return $this->xmlEncode( $this->Comments ); + } + + /** + * Quickie hack... strip out wikilinks to more legible form from the comment. + * + * @param $text String: wikitext + * @return String + */ + public static function stripComment( $text ) { + return preg_replace( '/\[\[([^]]*\|)?([^]]+)\]\]/', '\2', $text ); + } /**#@-*/ } /** * @todo document (needs one-sentence top-level class description). + * @ingroup Feed */ class ChannelFeed extends FeedItem { /**#@+ @@ -113,10 +218,8 @@ class ChannelFeed extends FeedItem { * * This should be called from the outHeader() method, * but can also be called separately. - * - * @public */ - function httpHeaders() { + public function httpHeaders() { global $wgOut; # We take over from $wgOut, excepting its cache header info @@ -149,7 +252,7 @@ class ChannelFeed extends FeedItem { global $wgStylePath, $wgStyleVersion; $this->httpHeaders(); - echo '' . "\n"; + echo '' . "\n"; echo '\n"; @@ -158,13 +261,16 @@ class ChannelFeed extends FeedItem { /** * Generate a RSS feed + * + * @ingroup Feed */ class RSSFeed extends ChannelFeed { /** * Format a date given a timestamp - * @param integer $ts Timestamp - * @return string Date string + * + * @param $ts Integer: timestamp + * @return String: date string */ function formatTime( $ts ) { return gmdate( 'D, d M Y H:i:s \G\M\T', wfTimestamp( TS_UNIX, $ts ) ); @@ -190,13 +296,14 @@ class RSSFeed extends ChannelFeed { /** * Output an RSS 2.0 item - * @param FeedItem item to be output + * @param $item FeedItem: item to be output */ function outItem( $item ) { ?> <?php print $item->getTitle() ?> getUrl() ?> + RSSIsPermalink ) print ' isPermaLink="true"' ?>>getUniqueId() ?> getDescription() ?> getDate() ) { ?>formatTime( $item->getDate() ) ?> getAuthor() ) { ?>getAuthor() ?> @@ -217,6 +324,8 @@ class RSSFeed extends ChannelFeed { /** * Generate an Atom feed + * + * @ingroup Feed */ class AtomFeed extends ChannelFeed { /** @@ -277,7 +386,7 @@ class AtomFeed extends ChannelFeed { global $wgMimeType; ?> - getUrl() ?> + getUniqueId() ?> <?php print $item->getTitle() ?> getDate() ) { ?>