OSDN Git Service

BugTrack2/361 Simplify URL. Keep slash / and colon : in page name URL
[pukiwiki/pukiwiki.git] / plugin / rss.inc.php
index af6646d..19faf42 100644 (file)
@@ -1,29 +1,44 @@
 <?php
-/////////////////////////////////////////////////
-// PukiWiki - Yet another WikiWikiWeb clone.
+// PukiWiki - Yet another WikiWikiWeb clone
+// $Id: rss.inc.php,v 1.21 2007/02/11 05:53:31 henoheno Exp $
 //
-// $Id: rss.inc.php,v 1.9 2004/11/07 12:48:59 henoheno Exp $
+// RSS plugin: Publishing RSS of RecentChanges
 //
-// Publishing RSS feed of RecentChanges
-// HOW TO USE: rss.inc.php?ver=[0.91(default)|1.0|2.0]
+// Usage: plugin=rss[&ver=[0.91|1.0|2.0]] (Default: 0.91)
+//
+// NOTE for acronyms
+//   RSS 0.9,  1.0  : RSS means 'RDF Site Summary'
+//   RSS 0.91, 0.92 : RSS means 'Rich Site Summary'
+//   RSS 2.0        : RSS means 'Really Simple Syndication' (born from RSS 0.92)
 
 function plugin_rss_action()
 {
-       global $vars, $script, $rss_max, $page_title, $whatsnew, $trackback;
+       global $vars, $rss_max, $page_title, $whatsnew;
 
-       $self = (preg_match('#^https?://#', $script) ? $script : get_script_uri());
-       if ($self === FALSE) die('please set "$script" at INI_FILE');
+       $version = isset($vars['ver']) ? $vars['ver'] : '';
+       switch($version){
+       case '':  $version = '0.91'; break; // Default
+       case '1': $version = '1.0';  break; // Sugar
+       case '2': $version = '2.0';  break; // Sugar
+       case '0.91': /* FALLTHROUGH */
+       case '1.0' : /* FALLTHROUGH */
+       case '2.0' : break;
+       default: die('Invalid RSS version!!');
+       }
 
        $recent = CACHE_DIR . 'recent.dat';
        if (! file_exists($recent)) die('recent.dat is not found');
 
-       $version = (isset($vars['ver']) && $vars['ver'] != '') ? $vars['ver'] : '0.91'; // default
+       $lang = LANG;
        $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
+       $self = get_script_uri();
 
+       // Creating <item>
        $items = $rdf_li = '';
-       foreach (array_splice(file($recent), 0, $rss_max) as $line) {
+
+       foreach (file_head($recent, $rss_max) as $line) {
                list($time, $page) = explode("\t", rtrim($line));
-               $r_page = rawurlencode($page);
+               $r_page = pagename_urlencode($page);
                $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
 
                switch ($version) {
@@ -32,7 +47,7 @@ function plugin_rss_action()
                        $date = get_date('D, d M Y H:i:s T', $time);
                        $date = ($version == '0.91') ?
                                ' <description>' . $date . '</description>' :
-                               ' <pubDate>' . $date . '</pubDate>';
+                               ' <pubDate>'     . $date . '</pubDate>';
                        $items .= <<<EOD
 <item>
  <title>$title</title>
@@ -44,35 +59,30 @@ EOD;
                        break;
 
                case '1.0':
-                       $dc_date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
-                       $dc_identifier = " <dc:identifier>$self?$r_page</dc:identifier>";
-                       $trackback_ping = '';
-                       $rdf_li .= "    <rdf:li rdf:resource=\"$self?$r_page\" />\n";
-                       if ($trackback) {
-                               $tb_id = md5($r_page);
-                               $trackback_ping = " <trackback:ping>$self?tb_id=$tb_id</trackback:ping>";
-                       }
+                       // Add <item> into <items>
+                       $rdf_li .= '    <rdf:li rdf:resource="' . $self .
+                               '?' . $r_page . '" />' . "\n";
+
+                       $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
                        $items .= <<<EOD
 <item rdf:about="$self?$r_page">
  <title>$title</title>
  <link>$self?$r_page</link>
- <dc:date>$dc_date</dc:date>
-$dc_identifier
-$trackback_ping
+ <dc:date>$date</dc:date>
+ <dc:identifier>$self?$r_page</dc:identifier>
 </item>
 
 EOD;
                        break;
-               default:
-                       die('Invalid RSS version!!');
                }
        }
 
        // Feeding start
+       pkwk_common_headers();
        header('Content-type: application/xml');
        print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
 
-       $r_whatsnew = rawurlencode($whatsnew);
+       $r_whatsnew = pagename_urlencode($whatsnew);
        switch ($version) {
        case '0.91':
                print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' .
@@ -86,7 +96,7 @@ EOD;
   <title>$page_title_utf8</title>
   <link>$self?$r_whatsnew</link>
   <description>PukiWiki RecentChanges</description>
-  <language>ja</language>
+  <language>$lang</language>
 
 $items
  </channel>
@@ -95,15 +105,12 @@ EOD;
                break;
 
        case '1.0':
-               $xmlns_trackback = $trackback ?
-                       '  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
                print <<<EOD
 <rdf:RDF
   xmlns:dc="http://purl.org/dc/elements/1.1/"
-$xmlns_trackback
   xmlns="http://purl.org/rss/1.0/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xml:lang="ja">
+  xml:lang="$lang">
  <channel rdf:about="$self?$r_whatsnew">
   <title>$page_title_utf8</title>
   <link>$self?$r_whatsnew</link>
@@ -122,4 +129,4 @@ EOD;
        }
        exit;
 }
-?>
+