OSDN Git Service

BugTrack2/106: Inserted BugTrack no to the comments
[pukiwiki/pukiwiki.git] / plugin / rss.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone
3 // $Id: rss.inc.php,v 1.17 2005/10/04 13:41:03 henoheno Exp $
4 //
5 // RSS plugin: Publishing RSS of RecentChanges
6 //
7 // Usage: plugin=rss[&ver=[0.91|1.0|2.0]] (Default: 0.91)
8 //
9 // NOTE for acronyms
10 //   RSS 0.9,  1.0  : RSS means 'RDF Site Summary'
11 //   RSS 0.91, 0.92 : RSS means 'Rich Site Summary'
12 //   RSS 2.0        : RSS means 'Really Simple Syndication' (born from RSS 0.92)
13
14 function plugin_rss_action()
15 {
16         global $vars, $rss_max, $page_title, $whatsnew, $trackback;
17
18         $version = isset($vars['ver']) ? $vars['ver'] : '';
19         switch($version){
20         case '':  $version = '0.91'; break; // Default
21         case '1': $version = '1.0';  break; // Sugar
22         case '2': $version = '2.0';  break; // Sugar
23         case '0.91': /* FALLTHROUGH */
24         case '1.0' : /* FALLTHROUGH */
25         case '2.0' : break;
26         default: die('Invalid RSS version!!');
27         }
28
29         $recent = CACHE_DIR . 'recent.dat';
30         if (! file_exists($recent)) die('recent.dat is not found');
31
32         $lang = LANG;
33         $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
34         $self = get_script_uri();
35
36         // Creating <item>
37         $items = $rdf_li = '';
38
39         // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5
40         $file_array = file($recent); // with array_splice()
41
42         foreach (array_splice($file_array, 0, $rss_max) as $line) {
43                 list($time, $page) = explode("\t", rtrim($line));
44                 $r_page = rawurlencode($page);
45                 $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
46
47                 switch ($version) {
48                 case '0.91': /* FALLTHROUGH */
49                 case '2.0':
50                         $date = get_date('D, d M Y H:i:s T', $time);
51                         $date = ($version == '0.91') ?
52                                 ' <description>' . $date . '</description>' :
53                                 ' <pubDate>'     . $date . '</pubDate>';
54                         $items .= <<<EOD
55 <item>
56  <title>$title</title>
57  <link>$self?$r_page</link>
58 $date
59 </item>
60
61 EOD;
62                         break;
63
64                 case '1.0':
65                         // Add <item> into <items>
66                         $rdf_li .= '    <rdf:li rdf:resource="' . $self .
67                                 '?' . $r_page . '" />' . "\n";
68
69                         $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
70                         $trackback_ping = '';
71                         if ($trackback) {
72                                 $tb_id = md5($r_page);
73                                 $trackback_ping = ' <trackback:ping>' . $self .
74                                         '?tb_id=' . $tb_id . '</trackback:ping>';
75                         }
76                         $items .= <<<EOD
77 <item rdf:about="$self?$r_page">
78  <title>$title</title>
79  <link>$self?$r_page</link>
80  <dc:date>$date</dc:date>
81  <dc:identifier>$self?$r_page</dc:identifier>
82 $trackback_ping
83 </item>
84
85 EOD;
86                         break;
87                 }
88         }
89
90         // Feeding start
91         pkwk_common_headers();
92         header('Content-type: application/xml');
93         print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
94
95         $r_whatsnew = rawurlencode($whatsnew);
96         switch ($version) {
97         case '0.91':
98                 print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' .
99                 ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n";
100                  /* FALLTHROUGH */
101
102         case '2.0':
103                 print <<<EOD
104 <rss version="$version">
105  <channel>
106   <title>$page_title_utf8</title>
107   <link>$self?$r_whatsnew</link>
108   <description>PukiWiki RecentChanges</description>
109   <language>$lang</language>
110
111 $items
112  </channel>
113 </rss>
114 EOD;
115                 break;
116
117         case '1.0':
118                 $xmlns_trackback = $trackback ?
119                         '  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
120                 print <<<EOD
121 <rdf:RDF
122   xmlns:dc="http://purl.org/dc/elements/1.1/"
123 $xmlns_trackback
124   xmlns="http://purl.org/rss/1.0/"
125   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
126   xml:lang="$lang">
127  <channel rdf:about="$self?$r_whatsnew">
128   <title>$page_title_utf8</title>
129   <link>$self?$r_whatsnew</link>
130   <description>PukiWiki RecentChanges</description>
131   <items>
132    <rdf:Seq>
133 $rdf_li
134    </rdf:Seq>
135   </items>
136  </channel>
137
138 $items
139 </rdf:RDF>
140 EOD;
141                 break;
142         }
143         exit;
144 }
145 ?>