summaryrefslogtreecommitdiff
path: root/includes/Feed.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2010-07-28 11:52:48 +0200
committerPierre Schmitz <pierre@archlinux.de>2010-07-28 11:52:48 +0200
commit222b01f5169f1c7e69762e0e8904c24f78f71882 (patch)
tree8e932e12546bb991357ec48eb1638d1770be7a35 /includes/Feed.php
parent00ab76a6b686e98a914afc1975812d2b1aaa7016 (diff)
update to MediaWiki 1.16.0
Diffstat (limited to 'includes/Feed.php')
-rw-r--r--includes/Feed.php111
1 files changed, 100 insertions, 11 deletions
diff --git a/includes/Feed.php b/includes/Feed.php
index fe6d8feb..782b6428 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,56 +43,134 @@ 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;
}
+ /**
+ * Encode $string so that it can be safely embedded in a XML document
+ *
+ * @param $string String: string to encode
+ * @return 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 );
}
+ /**
+ * 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;
}
+ /**
+ * 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 );
@@ -96,6 +180,7 @@ class FeedItem {
/**
* @todo document (needs one-sentence top-level class description).
+ * @ingroup Feed
*/
class ChannelFeed extends FeedItem {
/**#@+
@@ -133,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
@@ -178,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 ) );
@@ -210,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 ) {
?>
<item>
<title><?php print $item->getTitle() ?></title>
<link><?php print $item->getUrl() ?></link>
+ <guid<?php if( $item->RSSIsPermalink ) print ' isPermaLink="true"' ?>><?php print $item->getUniqueId() ?></guid>
<description><?php print $item->getDescription() ?></description>
<?php if( $item->getDate() ) { ?><pubDate><?php print $this->formatTime( $item->getDate() ) ?></pubDate><?php } ?>
<?php if( $item->getAuthor() ) { ?><dc:creator><?php print $item->getAuthor() ?></dc:creator><?php }?>
@@ -237,6 +324,8 @@ class RSSFeed extends ChannelFeed {
/**
* Generate an Atom feed
+ *
+ * @ingroup Feed
*/
class AtomFeed extends ChannelFeed {
/**
@@ -297,7 +386,7 @@ class AtomFeed extends ChannelFeed {
global $wgMimeType;
?>
<entry>
- <id><?php print $item->getUrl() ?></id>
+ <id><?php print $item->getUniqueId() ?></id>
<title><?php print $item->getTitle() ?></title>
<link rel="alternate" type="<?php print $wgMimeType ?>" href="<?php print $item->getUrl() ?>"/>
<?php if( $item->getDate() ) { ?>