diff options
author | Amir Sarabadani <ladsgroup@gmail.com> | 2022-10-17 13:10:57 +0200 |
---|---|---|
committer | Krinkle <krinkle@fastmail.com> | 2022-10-20 17:25:49 +0000 |
commit | f8bf3687f4e2ea32a3c5c7ac8492e6f573b51e9a (patch) | |
tree | 93ec660b854dc2a4720a95535ca1f83916a98f4c /includes/Feed/RSSFeed.php | |
parent | 68521d08ffd0c6fbf0b5adf8be4cd5e831ea20bf (diff) | |
download | mediawikicore-f8bf3687f4e2ea32a3c5c7ac8492e6f573b51e9a.tar.gz mediawikicore-f8bf3687f4e2ea32a3c5c7ac8492e6f573b51e9a.zip |
Feed: Move feed-related classes to Feed/ and namespace them
Bug: T166010
Change-Id: Icdbe003e74d2f31b68b575acfa94c09c24d7aed5
Diffstat (limited to 'includes/Feed/RSSFeed.php')
-rw-r--r-- | includes/Feed/RSSFeed.php | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/includes/Feed/RSSFeed.php b/includes/Feed/RSSFeed.php new file mode 100644 index 000000000000..1e3efa727c83 --- /dev/null +++ b/includes/Feed/RSSFeed.php @@ -0,0 +1,96 @@ +<?php +/** + * Copyright © 2004 Brion Vibber <brion@pobox.com> + * https://www.mediawiki.org/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + */ + +namespace MediaWiki\Feed; + +/** + * Generate an RSS feed. + * + * @ingroup Feed + */ +class RSSFeed extends ChannelFeed { + + /** + * Format a date given a timestamp. If a timestamp is not given, nothing is returned + * + * @param string|int|null $ts Timestamp + * @return string|null Date string + */ + private function formatTime( $ts ) { + if ( $ts ) { + return gmdate( 'D, d M Y H:i:s \G\M\T', (int)wfTimestamp( TS_UNIX, $ts ) ); + } + return null; + } + + /** + * Output an RSS 2.0 header + */ + public function outHeader() { + $this->outXmlHeader(); + // Manually escaping rather than letting Mustache do it because Mustache + // uses htmlentities, which does not work with XML + $templateParams = [ + 'title' => $this->getTitle(), + 'url' => $this->xmlEncode( wfExpandUrl( $this->getUrlUnescaped(), PROTO_CURRENT ) ), + 'description' => $this->getDescription(), + 'language' => $this->xmlEncode( $this->getLanguage() ), + 'version' => $this->xmlEncode( MW_VERSION ), + 'timestamp' => $this->xmlEncode( $this->formatTime( wfTimestampNow() ) ) + ]; + print $this->templateParser->processTemplate( 'RSSHeader', $templateParams ); + } + + /** + * Output an RSS 2.0 item + * @param FeedItem $item Item to be output + */ + public function outItem( $item ) { + // Manually escaping rather than letting Mustache do it because Mustache + // uses htmlentities, which does not work with XML + $templateParams = [ + "title" => $item->getTitle(), + "url" => $this->xmlEncode( wfExpandUrl( $item->getUrlUnescaped(), PROTO_CURRENT ) ), + "permalink" => $item->rssIsPermalink, + "uniqueID" => $item->getUniqueID(), + "description" => $item->getDescription(), + "date" => $this->xmlEncode( $this->formatTime( $item->getDate() ) ), + "author" => $item->getAuthor() + ]; + $comments = $item->getCommentsUnescaped(); + if ( $comments ) { + $commentsEscaped = $this->xmlEncode( wfExpandUrl( $comments, PROTO_CURRENT ) ); + $templateParams["comments"] = $commentsEscaped; + } + print $this->templateParser->processTemplate( 'RSSItem', $templateParams ); + } + + /** + * Output an RSS 2.0 footer + */ + public function outFooter() { + print "</channel></rss>"; + } +} + +class_alias( RSSFeed::class, 'RSSFeed' ); |