OSDN Git Service

BugTrack/2540 Simplify INSTALL / UPDATING document
[pukiwiki/pukiwiki.git] / plugin / rss.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone
3 // rss.inc.php
4 // Copyright 2003-2021 PukiWiki Development Team
5 // License: GPL v2 or (at your option) any later version
6 //
7 // RSS plugin: Publishing RSS of RecentChanges
8
9 // Usage: plugin=rss[&ver=[0.91|1.0|2.0]] (Default: 0.91)
10 //
11 // NOTE for acronyms
12 //   RSS 0.9,  1.0  : RSS means 'RDF Site Summary'
13 //   RSS 0.91, 0.92 : RSS means 'Rich Site Summary'
14 //   RSS 2.0        : RSS means 'Really Simple Syndication' (born from RSS 0.92)
15
16 function plugin_rss_action()
17 {
18         global $vars, $rss_max, $page_title, $whatsnew;
19
20         $version = isset($vars['ver']) ? $vars['ver'] : '';
21         switch($version){
22         case '':  $version = '0.91'; break; // Default
23         case '1': $version = '1.0';  break; // Sugar
24         case '2': $version = '2.0';  break; // Sugar
25         case '0.91': /* FALLTHROUGH */
26         case '1.0' : /* FALLTHROUGH */
27         case '2.0' : break;
28         default: die('Invalid RSS version!!');
29         }
30
31         $recent = CACHE_DIR . 'recent.dat';
32         if (! file_exists($recent)) die('recent.dat is not found');
33
34         $lang = LANG;
35         $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
36
37         // Creating <item>
38         $items = $rdf_li = '';
39
40         foreach (file_head($recent, $rss_max) as $line) {
41                 list($time, $page) = explode("\t", rtrim($line));
42                 $r_page_link = htmlsc(get_page_uri($page, PKWK_URI_ABSOLUTE));
43                 $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
44
45                 switch ($version) {
46                 case '0.91': /* FALLTHROUGH */
47                 case '2.0':
48                         $date = get_date('D, d M Y H:i:s T', $time);
49                         $date = ($version == '0.91') ?
50                                 ' <description>' . $date . '</description>' :
51                                 ' <pubDate>'     . $date . '</pubDate>';
52                         $items .= <<<EOD
53 <item>
54  <title>$title</title>
55  <link>$r_page_link</link>
56 $date
57 </item>
58
59 EOD;
60                         break;
61
62                 case '1.0':
63                         // Add <item> into <items>
64                         $rdf_li .= '    <rdf:li rdf:resource="' . $r_page_link .
65                                 '" />' . "\n";
66
67                         $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
68                         $items .= <<<EOD
69 <item rdf:about="$r_page_link">
70  <title>$title</title>
71  <link>$r_page_link</link>
72  <dc:date>$date</dc:date>
73  <dc:identifier>$r_page_link</dc:identifier>
74 </item>
75
76 EOD;
77                         break;
78                 }
79         }
80
81         // Feeding start
82         pkwk_common_headers();
83         header('Content-type: application/xml');
84         print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
85
86         $r_whatsnew_link = htmlsc(get_page_uri($whatsnew, PKWK_URI_ABSOLUTE));
87         switch ($version) {
88         case '0.91':
89                 print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' .
90                 ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n";
91                  /* FALLTHROUGH */
92
93         case '2.0':
94                 print <<<EOD
95 <rss version="$version">
96  <channel>
97   <title>$page_title_utf8</title>
98   <link>$r_whatsnew_link</link>
99   <description>PukiWiki RecentChanges</description>
100   <language>$lang</language>
101
102 $items
103  </channel>
104 </rss>
105 EOD;
106                 break;
107
108         case '1.0':
109                 print <<<EOD
110 <rdf:RDF
111   xmlns:dc="http://purl.org/dc/elements/1.1/"
112   xmlns="http://purl.org/rss/1.0/"
113   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
114   xml:lang="$lang">
115  <channel rdf:about="$r_whatsnew_link">
116   <title>$page_title_utf8</title>
117   <link>$r_whatsnew_link</link>
118   <description>PukiWiki RecentChanges</description>
119   <items>
120    <rdf:Seq>
121 $rdf_li
122    </rdf:Seq>
123   </items>
124  </channel>
125
126 $items
127 </rdf:RDF>
128 EOD;
129                 break;
130         }
131         exit;
132 }