OSDN Git Service

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