$title,
'description' => $description,
'language' => $serendipity['lang'],
'additional_fields' => array(),
'link' => $serendipity['baseURL'],
'email' => $serendipity['blogMail'],
'fullFeed' => false,
'showMail' => false,
'version' => $version
);
if (serendipity_get_config_var('feedBannerURL') != '') {
$img = serendipity_get_config_var('feedBannerURL');
$w = serendipity_get_config_var('feedBannerWidth');
$h = serendipity_get_config_var('feedBannerHeight');
} elseif (($banner = serendipity_getTemplateFile('img/rss_banner.png', 'serendipityPath'))) {
$img = serendipity_getTemplateFile('img/rss_banner.png', 'baseURL');
$i = getimagesize($banner);
$w = $i[0];
$h = $i[1];
} else {
$img = serendipity_getTemplateFile('img/s9y_banner_small.png', 'baseURL');
$w = 100;
$h = 21;
}
$metadata['additional_fields']['image'] = <<
$img
RSS: $title - $description
{$serendipity['baseURL']}
$w
$h
IMAGE;
$metadata['additional_fields']['image_atom1.0'] = <<$img
IMAGE;
$metadata['additional_fields']['image_rss1.0_channel'] = '';
$metadata['additional_fields']['image_rss1.0_rdf'] = <<
$img
RSS: $title - $description
{$serendipity['baseURL']}
$w
$h
IMAGE;
// Now, if set, stitch together any fields that have been configured in the syndication plugin.
// First, do some sanity checks
$metadata['additional_fields']['channel'] = '';
$rssFields = array('feedManagingEditor' => 'managingEditor', 'feedWebmaster' => 'webMaster', 'feedTtl' => 'ttl', 'feedPubDate' => 'pubDate');
foreach( $rssFields as $configName => $field) {
$fieldValue = serendipity_get_config_var($configName);
switch($field) {
case 'pubDate':
if (serendipity_db_bool($fieldValue)) {
$fieldValue = gmdate('D, d M Y H:i:s \G\M\T', $entries[0]['last_modified']);
} else {
$fieldValue = '';
}
break;
// Each new RSS-field which needs rewrite of its content should get its own case here.
default:
break;
}
if ($fieldValue != '') {
$metadata['additional_fields']['channel'] .= '<' . $field . '>' . $fieldValue . '' . $field . '>' . "\n";
}
}
if (is_array($metadata['additional_fields'])) {
// Fix up array keys, because "." are not allowed when wanting to output using Smarty
foreach($metadata['additional_fields'] AS $_aid => $af) {
$aid = str_replace('.', '', $_aid);
$metadata['additional_fields'][$aid] = $af;
}
}
$metadata['fullFeed'] = serendipity_get_config_var('feedFull', false);
if ($metadata['fullFeed'] === 'client') {
if ($_GET['fullFeed'] || $serendipity['GET']['fullFeed']) {
$metadata['fullFeed'] = true;
} else {
$metadata['fullFeed'] = false;
}
}
if ($_GET['type'] == 'content' &&
!isset($_GET['category']) &&
!isset($serendipity['GET']['tag']) &&
serendipity_db_bool(serendipity_get_config_var('feedForceCustom', false)) &&
!preg_match('@FeedBurn@i', $_SERVER['HTTP_USER_AGENT']) && // the hardcoded pass for feedburner is for BC. New services should just use the forceLocal-param
!isset($_GET['forceLocal'])
) {
header('Status: 302 Found');
header('Location: ' . serendipity_get_config_var('feedCustom'));
exit;
}
$metadata['showMail'] = serendipity_db_bool(serendipity_get_config_var('feedShowMail', $metadata['showMail']));
$file_version = preg_replace('@[^0-9a-z\.-_]@i', '', $version);
$metadata['template_file'] = 'feed_' . $file_version . '.tpl';
serendipity_smarty_init();
serendipity_plugin_api::hook_event('frontend_rss', $metadata);
$self_url = ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . serendipity_specialchars($_SERVER['REQUEST_URI']);
if (!is_array($entries)) {
$entries = array();
}
if ($entries[0]['last_modified']) {
$gm_modified = gmdate('Y-m-d\TH:i:s\Z', serendipity_serverOffsetHour($entries[0]['last_modified']));
} else {
$gm_modified = gmdate('Y-m-d\TH:i:s\Z', serendipity_serverOffsetHour());
}
serendipity_printEntries_rss($entries, $version, $comments, $metadata['fullFeed'], $metadata['showMail']);
$namespace_hook = 'frontend_display:unknown:namespace';
$once_display_dat = '';
switch($version) {
case 'opml1.0':
$namespace_hook = 'frontend_display:opml-1.0:namespace';
break;
case '0.91':
$namespace_hook = 'frontend_display:rss-0.91:namespace';
break;
case '1.0':
$namespace_hook = 'frontend_display:rss-1.0:namespace';
serendipity_plugin_api::hook_event('frontend_display:rss-1.0:once', $entries);
$once_display_dat = $entries['display_dat'];
unset($entries['display_dat']);
break;
case '2.0':
$namespace_hook = 'frontend_display:rss-2.0:namespace';
break;
case 'atom0.3':
$namespace_hook = 'frontend_display:atom-0.3:namespace';
break;
case 'atom1.0':
// For people wanting extra RFC compliance
// header('Content-Type: application/atom+xml; charset=utf-8');
$namespace_hook = 'frontend_display:atom-1.0:namespace';
break;
}
serendipity_plugin_api::hook_event($namespace_hook, $entries);
$namespace_display_dat = $entries['display_dat'] ?? null;
$channel_display_dat = $entries['channel_dat'] ?? null;
unset($entries['display_dat']);
unset($entries['channel_dat']);
$serendipity['smarty']->assignByRef('metadata', $metadata);
$serendipity['smarty']->assignByRef('entries', $entries);
$serendipity['smarty']->assignByRef('namespace_display_dat', $namespace_display_dat);
$serendipity['smarty']->assignByRef('channel_display_dat', $channel_display_dat);
$serendipity['smarty']->assignByRef('once_display_dat', $once_display_dat);
$serendipity['smarty']->assign(
array(
'is_comments' => $comments,
'last_modified' => $gm_modified,
'self_url' => $self_url,
)
);
$serendipity['smarty']->display($metadata['template_file']);
/* vim: set sts=4 ts=4 expandtab : */