]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/RSSWriter091.php
Allow bold, italics or underlined for numbers
[SourceForge/phpwiki.git] / lib / RSSWriter091.php
1 <?php
2 // ----------------------------------------------------------------------
3 // phpWiki
4 // ----------------------------------------------------------------------
5 // LICENSE
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License (GPL)
9 // as published by the Free Software Foundation; either version 2
10 // of the License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // To read the license please visit http://www.gnu.org/copyleft/gpl.html
18 // ----------------------------------------------------------------------
19 // Original Author of file: Lawrence Akka
20 // Purpose of file: Plugin and associated classes
21 // for outputting RecentChanges in RSS 0.91 format
22 // ----------------------------------------------------------------------
23
24 include_once 'lib/RssWriter.php';
25 class RSSWriter091 extends RSSWriter
26 {
27     function RSSWriter091()
28     {
29         $this->XmlElement('rss', array('version' => "0.91"));
30         $this->_items = array();
31     }
32
33     /**
34      * Finish construction of RSS.
35      */
36     function finish()
37     {
38         if (isset($this->_finished))
39             return;
40
41         $channel = &$this->_channel;
42         $items = &$this->_items;
43
44         if ($items) {
45             foreach ($items as $i)
46                 $channel->pushContent($i);
47         }
48         $this->pushContent($channel);
49         $this->__spew();
50         $this->_finished = true;
51     }
52
53     /**
54      * Create a new RDF <em>typedNode</em>.
55      */
56     function __node($type, $properties, $uri = false)
57     {
58         return new XmlElement($type, '',
59             $this->__elementize($properties));
60     }
61
62     /**
63      * Write output to HTTP client.
64      */
65     function __spew()
66     {
67         header("Content-Type: application/xml; charset=" . RSS_ENCODING);
68         printf("<?xml version=\"1.0\" encoding=\"%s\"?>\n", RSS_ENCODING);
69         print("<!DOCTYPE rss PUBLIC \"-//Netscape Communications//DTD RSS 0.91//EN\"\n");
70         print("\"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n\n");
71         $this->printXML();
72     }
73
74 }
75
76 class _RecentChanges_RssFormatter091
77     extends _RecentChanges_RSSFormatter
78 // This class should probably go at then of RecentChanges.php
79 {
80     function format($changes)
81     {
82         //    include_once('lib/RssWriter.php');
83         $rss = new RssWriter091;
84
85         $rss->channel($this->channel_properties());
86
87         if (($props = $this->image_properties()))
88             $rss->image($props);
89         if (($props = $this->textinput_properties()))
90             $rss->textinput($props);
91
92         while ($rev = $changes->next()) {
93             $rss->addItem($this->item_properties($rev),
94                 $this->pageURI($rev));
95         }
96
97         global $request;
98         $request->discardOutput();
99         $rss->finish();
100         $request->finish(); // NORETURN!!!!
101     }
102
103     function channel_properties()
104     {
105         global $request;
106
107         $rc_url = WikiURL($request->getArg('pagename'), false, 'absurl');
108
109         return array('title' => WIKI_NAME,
110             'description' => _("RecentChanges"),
111             'link' => $rc_url,
112             'language' => 'en-US');
113
114         /* FIXME: language should come from $LANG (or other config variable). */
115
116         /* FIXME: other things one might like in <channel>:
117          * managingEditor
118          * webmaster
119          * lastBuildDate
120          * copyright
121          */
122     }
123
124     function item_properties($rev)
125     {
126         $page = $rev->getPage();
127         $pagename = $page->getName();
128
129         return array('title' => SplitPagename($pagename),
130             'description' => $this->summary($rev),
131             'link' => $this->pageURL($rev)
132         );
133     }
134 }
135
136 // Local Variables:
137 // mode: php
138 // tab-width: 8
139 // c-basic-offset: 4
140 // c-hanging-comment-ender-p: nil
141 // indent-tabs-mode: nil
142 // End: