OSDN Git Service

BugTrack/2484 AutoTicketLink for JIRA: Support underscore key XX_X
[pukiwiki/pukiwiki.git] / plugin / rss.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone
3 // rss.inc.php
4 // Copyright 2003-2017 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         $self = get_base_uri(PKWK_URI_ABSOLUTE);
37
38         // Creating <item>
39         $items = $rdf_li = '';
40
41         foreach (file_head($recent, $rss_max) as $line) {
42                 list($time, $page) = explode("\t", rtrim($line));
43                 $r_page = pagename_urlencode($page);
44                 $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
45
46                 switch ($version) {
47                 case '0.91': /* FALLTHROUGH */
48                 case '2.0':
49                         $date = get_date('D, d M Y H:i:s T', $time);
50                         $date = ($version == '0.91') ?
51                                 ' <description>' . $date . '</description>' :
52                                 ' <pubDate>'     . $date . '</pubDate>';
53                         $items .= <<<EOD
54 <item>
55  <title>$title</title>
56  <link>$self?$r_page</link>
57 $date
58 </item>
59
60 EOD;
61                         break;
62
63                 case '1.0':
64                         // Add <item> into <items>
65                         $rdf_li .= '    <rdf:li rdf:resource="' . $self .
66                                 '?' . $r_page . '" />' . "\n";
67
68                         $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
69                         $items .= <<<EOD
70 <item rdf:about="$self?$r_page">
71  <title>$title</title>
72  <link>$self?$r_page</link>
73  <dc:date>$date</dc:date>
74  <dc:identifier>$self?$r_page</dc:identifier>
75 </item>
76
77 EOD;
78                         break;
79                 }
80         }
81
82         // Feeding start
83         pkwk_common_headers();
84         header('Content-type: application/xml');
85         print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
86
87         $r_whatsnew = pagename_urlencode($whatsnew);
88         switch ($version) {
89         case '0.91':
90                 print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' .
91                 ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n";
92                  /* FALLTHROUGH */
93
94         case '2.0':
95                 print <<<EOD
96 <rss version="$version">
97  <channel>
98   <title>$page_title_utf8</title>
99   <link>$self?$r_whatsnew</link>
100   <description>PukiWiki RecentChanges</description>
101   <language>$lang</language>
102
103 $items
104  </channel>
105 </rss>
106 EOD;
107                 break;
108
109         case '1.0':
110                 print <<<EOD
111 <rdf:RDF
112   xmlns:dc="http://purl.org/dc/elements/1.1/"
113   xmlns="http://purl.org/rss/1.0/"
114   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
115   xml:lang="$lang">
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 }