$recent_st_array['mtime']) {
readfile($rss_cache);
exit;
}
}
ob_start();
$lang = LANG;
$page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
$self = get_script_uri();
// Creating -
$items = $rdf_li = '';
// BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5
$file_array = file($recent); // with array_splice()
foreach (file_head($recent, $rss_max) as $line) {
list($time, $page) = explode("\t", rtrim($line));
$r_page = rawurlencode($page);
$title = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
switch ($version) {
case '0.91': /* FALLTHROUGH */
case '2.0':
// $date = get_date('D, d M Y H:i:s T', $time);
$date = get_date('D, d M Y H:i:s +0900', $time);
$date = ($version == '0.91') ? '' : ' ' . $date . '' . "\n$self?$r_page";
$retval = plugin_rss2_htmlrender($page);
if ($retval['body'] != '' && $title != 'RecentDeleted') {
$desc = "";
if ($version == '2.0') {
$desc = "";
$desc = mb_convert_encoding($desc, 'UTF-8', SOURCE_ENCODING);
}
$items .= <<
$title
$self?$r_page
$desc
$date
EOD;
}
break;
case '1.0':
$retval = plugin_rss2_htmlrender($page);
// Add - into
if ($retval['body'] != '' && $title != 'RecentDeleted') {
$rdf_li .= ' ' . "\n";
$date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
$trackback_ping = '';
if ($trackback) {
$tb_id = md5($r_page);
$trackback_ping = ' ' . $self .
'?tb_id=' . $tb_id . '';
}
$desc = "";
$desc = mb_convert_encoding($desc, 'UTF-8', SOURCE_ENCODING);
$items .= <<
$title
$self?$r_page
$desc
$date
$self?$r_page
$trackback_ping
EOD;
}
break;
}
}
// Feeding start
pkwk_common_headers();
header('Content-type: application/xml');
print '' . "\n\n";
$r_whatsnew = rawurlencode($whatsnew);
switch ($version) {
case '0.91':
print '' . "\n";
/* FALLTHROUGH */
case '2.0':
print <<
$page_title_utf8
$self?$r_whatsnew
PukiWiki RecentChanges
$lang
$items
EOD;
break;
case '1.0':
$xmlns_trackback = $trackback ?
' xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
print <<
$page_title_utf8
$self?$r_whatsnew
PukiWiki RecentChanges
$rdf_li
$items
EOD;
break;
}
// Create RSS cache
$fp = fopen($rss_cache, 'w');
$rss = ob_get_contents();
fwrite($fp, $rss);
fclose($fp);
ob_end_flush();
exit;
}
// rendering
function plugin_rss2_htmlrender($page)
{
global $script, $_title, $vars;
global $read_auth, $read_auth_pages;
$matches = array();
// Avoid read_auth pages
if ($read_auth) {
foreach ($read_auth_pages as $key=>$val) {
if (preg_match($key, $page, $matches)) {
return array('msg'=>$_title, 'body'=>$page);
}
}
}
$postdata = @join('', get_source($page));
if ($postdata) {
$vars['page'] = $page;
$dynamic_regex = "/(#counter|#online|#contents|#popular\(.*\)|#recent\(.*\)|&counter(\(.*\))?;|&lastmod.*(\(.*\))?;|&online(\(.*\))?;)/";
$postdata = preg_replace($dynamic_regex, "", $postdata);
$postdata = make_str_rules($postdata);
$postdata = explode("\n", $postdata);
$postdata = drop_submit(convert_html($postdata));
$dagger_regex = "/(]*>†<\/a>)/";
$postdata = preg_replace($dagger_regex, "", $postdata);
$title_regex = "\s+title=\"[^\"]*\"";
while (preg_match("/()/", $postdata, $matches)) {
$search = $matches[0];
$replace = $matches[1] . $matches[3];
$postdata = str_replace($search, $replace, $postdata);
}
$uri_regex = "/(href|src)=\"((?!https?:\/\/)[^\"]*)\"/";
while (preg_match($uri_regex, $postdata, $matches)) {
$search = $matches[0];
$replace = $matches[1] . "=\"" . $script . $matches[2] . "\"";
$postdata = str_replace($search, $replace, $postdata);
}
$omit_regex = "/\s+(id|class|style)=\"[^\"]*\"/";
$postdata = preg_replace($omit_regex, "", $postdata);
} else {
return array('msg'=>$_title, 'body'=>'');
}
return array('msg'=>$_title, 'body'=>$postdata);
}
?>