Flatten feed location. Now, if people decide to host this at my-domain/feed, the feeds won't be at my-domain/feed/feed Reviewed-on: https://gitea.subcultureofone.org/greg/tkr/pulls/72 Co-authored-by: Greg Sarjeant <greg@subcultureofone.org> Co-committed-by: Greg Sarjeant <greg@subcultureofone.org>
53 lines
2.1 KiB
PHP
53 lines
2.1 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
class RssGenerator extends FeedGenerator {
|
|
public function generate(): string {
|
|
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
|
$xml .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n";
|
|
$xml .= $this->buildChannel();
|
|
$xml .= '</rss>' . "\n";
|
|
|
|
Log::debug("Generated RSS feed: " . strlen($xml) . " bytes");
|
|
return $xml;
|
|
}
|
|
|
|
public function getContentType(): string {
|
|
return 'application/rss+xml; charset=utf-8';
|
|
}
|
|
|
|
private function buildChannel(): string {
|
|
Log::debug("Building RSS channel for " . $this->settings->siteTitle);
|
|
ob_start();
|
|
?>
|
|
<channel>
|
|
<title><?php echo Util::escape_xml($this->settings->siteTitle . ' RSS Feed') ?></title>
|
|
<link><?php echo Util::escape_xml(Util::buildUrl($this->settings->baseUrl, $this->settings->basePath))?></link>
|
|
<atom:link href="<?php echo Util::escape_xml(Util::buildUrl($this->settings->baseUrl, $this->settings->basePath, 'rss'))?>"
|
|
rel="self"
|
|
type="application/rss+xml" />
|
|
<description><?php echo Util::escape_xml($this->settings->siteDescription) ?></description>
|
|
<language>en-us</language>
|
|
<lastBuildDate><?php echo date(DATE_RSS); ?></lastBuildDate>
|
|
<?php foreach ($this->ticks as $tick):
|
|
// build the tick entry components
|
|
$tickPath = "tick/" . $tick['id'];
|
|
$tickUrl = Util::escape_xml($this->buildTickUrl($tick['id']));
|
|
$tickDate = date(DATE_RSS, strtotime($tick['timestamp']));
|
|
$tickTitle = Util::escape_xml($tick['tick']);
|
|
$tickDescription = Util::escape_xml(Util::linkify(Util::escape_html($tick['tick'])));
|
|
Log::debug("RSS item: {$tickDescription}");
|
|
?>
|
|
<item>
|
|
<title><?php echo $tickTitle; ?></title>
|
|
<link><?php echo $tickUrl; ?></link>
|
|
<description><?php echo $tickDescription; ?></description>
|
|
<pubDate><?php echo $tickDate; ?></pubDate>
|
|
<guid><?php echo $tickUrl; ?></guid>
|
|
</item>
|
|
<?php endforeach; ?>
|
|
</channel>
|
|
<?php
|
|
return ob_get_clean();
|
|
}
|
|
}
|