$title, 'description' => $description, 'language' => $serendipity['lang'], 'additional_fields' => array(), 'link' => $serendipity['baseURL'], 'email' => $serendipity['blogMail'], 'fullFeed' => false, 'showMail' => false, 'version' => $version ); include_once(S9Y_INCLUDE_PATH . 'include/plugin_api.inc.php'); $plugins = serendipity_plugin_api::enum_plugins(); if (is_array($plugins)) { // load each plugin to make some introspection foreach ($plugins as $plugin_data) { if (preg_match('|@serendipity_syndication_plugin|', $plugin_data['name'])) { $plugin =& serendipity_plugin_api::load_plugin($plugin_data['name'], $plugin_data['authorid']); $metadata['additional_fields'] = $plugin->generate_rss_fields($metadata['title'], $metadata['description'], $entries); 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'] = $plugin->get_config('fullfeed', 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']) && $plugin->get_config('show_feedburner') === 'force' && !preg_match('@FeedBurn@i', $_SERVER['HTTP_USER_AGENT']) && !(serendipity_userLoggedIn() && isset($_GET['forceLocal'])) ) { $fbid = $plugin->get_config('fb_id'); if (stristr($fbid, 'http://')) { $url = $fbid; } else { $url = 'http://feeds.feedburner.com/' . $fbid; } header('Status: 302 Found'); header('Location: ' . $url); exit; } $metadata['showMail'] = serendipity_db_bool($plugin->get_config('show_mail', $metadata['showMail'])); break; } } } $file_version = preg_replace('@[^0-9a-z\.-_]@i', '', $version); $metadata['template_file'] = serendipity_getTemplateFile('feed_' . $file_version . '.tpl', 'serendipityPath'); serendipity_smarty_init(); serendipity_plugin_api::hook_event('frontend_rss', $metadata); if (!$metadata['template_file'] || $metadata['template_file'] == 'feed_' . $file_version . '.tpl') { die("Invalid RSS version specified or RSS-template file not found\n"); } $self_url = 'http://' . $_SERVER['HTTP_HOST'] . htmlspecialchars($_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']; $channel_display_dat = $entries['channel_dat']; 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 : */