OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / wiki_main / include / plugin / rss.inc.php
1 <?php
2 /**
3  * rssプラグイン
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2008 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: rss.inc.php 1137 2008-10-27 04:14:04Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 // Usage: plugin=rss[&ver=[0.91|1.0|2.0]] (Default: 0.91)
17 //
18 // NOTE for acronyms
19 //   RSS 0.9,  1.0  : RSS means 'RDF Site Summary'
20 //   RSS 0.91, 0.92 : RSS means 'Rich Site Summary'
21 //   RSS 2.0        : RSS means 'Really Simple Syndication' (born from RSS 0.92)
22
23 function plugin_rss_action()
24 {
25         //global $vars, $rss_max, $page_title, $whatsnew, $trackback;
26         global $rss_max, $page_title, $trackback;
27         global $gPageManager;
28
29         //$version = isset($vars['ver']) ? $vars['ver'] : '';
30         $version = WikiParam::getVar('ver');
31         switch($version){
32         case '':  $version = '0.91'; break; // Default
33         case '1': $version = '1.0';  break; // Sugar
34         case '2': $version = '2.0';  break; // Sugar
35         case '0.91': /* FALLTHROUGH */
36         case '1.0' : /* FALLTHROUGH */
37         case '2.0' : break;
38         default: die('Invalid RSS version!!');
39         }
40
41         //$recent = CACHE_DIR . 'recent.dat';
42         //if (! file_exists($recent)) die('recent.dat is not found');
43         $lines = WikiPage::getCacheRecentChanges();
44         if (empty($lines)) die('recent.dat is not found');
45
46         $lang = LANG;
47         $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
48         $self = get_script_uri();
49
50         // Creating <item>
51         $items = $rdf_li = '';
52
53         //foreach (file_head($recent, $rss_max) as $line) {
54         $lineCount = $rss_max < count($lines) ? $rss_max : count($lines);
55         for ($i = 0; $i < $lineCount; $i++){
56                 //list($time, $page) = explode("\t", rtrim($line));
57                 list($time, $page) = explode("\t", rtrim($lines[$i]));
58                 $r_page = rawurlencode($page);
59                 $title  = mb_convert_encoding($page, 'UTF-8', SOURCE_ENCODING);
60                 $pageUrl = $self . WikiParam::convQuery("?$r_page");
61
62                 switch ($version) {
63                 case '0.91': /* FALLTHROUGH */
64                 case '2.0':
65                         $date = get_date('D, d M Y H:i:s T', $time);
66                         $date = ($version == '0.91') ?
67                                 ' <description>' . $date . '</description>' :
68                                 ' <pubDate>'     . $date . '</pubDate>';
69                         $items .= <<<EOD
70 <item>
71  <title>$title</title>
72  <link>$pageUrl</link>
73 $date
74 </item>
75 EOD;
76 /*                      $items .= <<<EOD
77 <item>
78  <title>$title</title>
79  <link>$self?$r_page</link>
80 $date
81 </item>
82 EOD;*/
83                         break;
84
85                 case '1.0':
86                         // Add <item> into <items>
87                         $rdf_li .= '    <rdf:li rdf:resource="' . $self . WikiParam::convQuery('?' . $r_page) . '" />' . "\n";
88
89                         $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
90                         $trackback_ping = '';
91                         if ($trackback) {
92                                 $tb_id = md5($r_page);
93                                 $trackback_ping = ' <trackback:ping>' . $self . WikiParam::convQuery('?tb_id=' . $tb_id, false) . '</trackback:ping>';
94                         }
95                         $items .= <<<EOD
96 <item rdf:about="$pageUrl">
97  <title>$title</title>
98  <link>$pageUrl</link>
99  <dc:date>$date</dc:date>
100  <dc:identifier>$pageUrl</dc:identifier>
101 $trackback_ping
102 </item>
103 EOD;
104 /*
105                         $items .= <<<EOD
106 <item rdf:about="$self?$r_page">
107  <title>$title</title>
108  <link>$self?$r_page</link>
109  <dc:date>$date</dc:date>
110  <dc:identifier>$self?$r_page</dc:identifier>
111 $trackback_ping
112 </item>
113 EOD;
114 */
115                         break;
116                 }
117         }
118
119         // ページ作成処理中断
120         $gPageManager->abortPage();
121                 
122         // Feeding start
123         pkwk_common_headers();
124         header('Content-type: application/xml');
125         print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
126
127         //$r_whatsnew = rawurlencode($whatsnew);
128         $r_whatsnew = rawurlencode(WikiConfig::getWhatsnewPage());
129         $whatsnewUrl = $self . WikiParam::convQuery("?$r_whatsnew");
130
131         switch ($version) {
132         case '0.91':
133                 print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' .
134                 ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n";
135                  /* FALLTHROUGH */
136
137         case '2.0':
138                 print <<<EOD
139 <rss version="$version">
140  <channel>
141   <title>$page_title_utf8</title>
142   <link>$whatsnewUrl</link>
143   <description>PukiWiki RecentChanges</description>
144   <language>$lang</language>
145 $items
146  </channel>
147 </rss>
148 EOD;
149 /*
150                 print <<<EOD
151 <rss version="$version">
152  <channel>
153   <title>$page_title_utf8</title>
154   <link>$self?$r_whatsnew</link>
155   <description>PukiWiki RecentChanges</description>
156   <language>$lang</language>
157 $items
158  </channel>
159 </rss>
160 EOD;
161 */
162                 break;
163
164         case '1.0':
165                 $xmlns_trackback = $trackback ?
166                         '  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
167                 print <<<EOD
168 <rdf:RDF
169   xmlns:dc="http://purl.org/dc/elements/1.1/"
170 $xmlns_trackback
171   xmlns="http://purl.org/rss/1.0/"
172   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
173   xml:lang="$lang">
174  <channel rdf:about="$whatsnewUrl">
175   <title>$page_title_utf8</title>
176   <link>$whatsnewUrl</link>
177   <description>PukiWiki RecentChanges</description>
178   <items>
179    <rdf:Seq>
180 $rdf_li
181    </rdf:Seq>
182   </items>
183  </channel>
184 $items
185 </rdf:RDF>
186 EOD;
187 /*
188                 print <<<EOD
189 <rdf:RDF
190   xmlns:dc="http://purl.org/dc/elements/1.1/"
191 $xmlns_trackback
192   xmlns="http://purl.org/rss/1.0/"
193   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
194   xml:lang="$lang">
195  <channel rdf:about="$self?$r_whatsnew">
196   <title>$page_title_utf8</title>
197   <link>$self?$r_whatsnew</link>
198   <description>PukiWiki RecentChanges</description>
199   <items>
200    <rdf:Seq>
201 $rdf_li
202    </rdf:Seq>
203   </items>
204  </channel>
205 $items
206 </rdf:RDF>
207 EOD;
208 */
209                 break;
210         }
211         //exit;
212         // システム強制終了
213         $gPageManager->exitSystem();
214 }
215 ?>