OSDN Git Service

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