2 rcs_id('$Id: RecentChanges.php,v 1.3 2001-12-07 22:28:21 dairiki Exp $');
5 define('RSS_ENCODING', 'ISO-8859-1');
7 class WikiPlugin_RecentChanges
10 var $name = 'RecentChanges';
12 function getDefaultArguments() {
13 return array('days' => 2,
14 'show_minor' => false,
21 function run($dbi, $argstr, $request) {
22 $args = $this->getArgs($argstr, $request);
24 $params = array('include_minor_revisions' => $show_minor,
25 'exclude_major_revisions' => !$show_major,
26 'include_all_revisions' => $show_all);
28 $params['since'] = time() - 24 * 3600 * $days;
29 $title = sprintf(_("RecentChanges in the past %.1f days"), $args['days']);
32 $title = _("RecentChanges");
35 $changes = $dbi->mostRecent($params);
37 if ($request->getArg('action') != 'browse')
38 $format = false; // default -> HTML
44 header("Content-Type: application/xml; charset=" . RSS_ENCODING);
46 $xml = $this->__format_as_rss($changes, $title, $args, $request);
47 printf("<?xml version=\"1.0\" encoding=\"%s\"?>\n", RSS_ENCODING);
48 printf("<!-- Generated by PhpWiki:\n%s-->\n", $GLOBALS['RCS_IDS']);
53 return $this->__format_as_html($changes, $title, $args);
58 function __format_as_html($changes, $title, $args) {
61 global $WikiNameRegexp;
66 $diffargs = array('action' => 'diff');
68 // FIXME: add XML icon (and link) to title?
69 $html = QElement('h3', $title);
71 $limit = $args['limit'];
72 while ($rev = $changes->next()) {
73 $created = $rev->get('mtime');
74 $date = strftime($dateformat, $created);
75 $time = strftime("%l:%M %P", $created); // Make configurable.
76 if ($date != $last_date) {
78 $html .= Element('ul', join("\n", $lines));
81 $html .= Element('p',QElement('b', $date));
85 $page = $rev->getPage();
86 $pagename = $page->getName();
88 if ($args['show_all']) {
89 // FIXME: should set previous, too, if showing only minor or major revs.
91 $diffargs['version'] = $rev->getVersion();
95 array('href' => WikiURL($pagename, $diffargs)),
98 $wikipage = LinkWikiWord($page->getName());
100 $author = $rev->get('author');
101 if (preg_match("/^$WikiNameRegexp\$/", $author))
102 $author = LinkWikiWord($author);
104 $author = htmlspecialchars($author);
106 $summary = $rev->get('summary');
108 $summary = QElement('b', "[$summary]");
110 $lines[] = Element('li',
111 "$diff $wikipage $time $summary ... $author");
113 if ($limit && --$limit <= 0)
117 $html .= Element('ul', join("\n", $lines));
122 function __format_as_rss($changes, $title, $args, $request) {
123 include_once('lib/RssWriter.php');
124 $rss = new RssWriter;
125 $rc_url = WikiURL($request->getArg('pagename'), false, 'absurl');
127 $chan = array('title' => 'PhpWiki', // FIXME: this should be a config define
128 'dc:description' => $title,
130 'dc:date' => Iso8601DateTime(time()));
132 /* FIXME: other things one might like in <channel>:
141 * rss091:managingEditor
143 * rss091:lastBuildDate
147 $rss->channel($chan, $rc_url);
149 $rss->image(array('title' => 'PhpWiki', // FIXME: this should be a config define
150 'link' => WikiURL(_("HomePage"), false, 'absurl'),
151 'url' => DataURL($GLOBALS['logo'])));
153 $rss->textinput(array('title' => _("Search"),
154 'description' => _("Title Search"),
156 'link' => WikiURL(_("TitleSearch"), false, 'absurl')));
158 $limit = $args['limit'];
159 while ($rev = $changes->next()) {
160 $page = $rev->getPage();
163 if ($args['show_all']) {
164 // FIXME: should set previous, too, if showing only minor or major revs.
165 // or maybe difftype.
166 $urlargs['version'] = $rev->getVersion();
169 $pagename = $page->getName();
171 $item = array('title' => split_pagename($pagename),
172 'description' => $rev->get('summary'),
173 'link' => WikiURL($pagename, $urlargs, 'absurl'),
174 'dc:date' => Iso8601DateTime($rev->get('mtime')),
175 'dc:contributor' => $rev->get('author'),
176 'wiki:version' => $rev->getVersion(),
177 'wiki:importance' => $rev->get('is_minor_edit') ? 'minor' : 'major',
178 // wiki:status = 'new' | 'updated' | 'deleted'
179 'wiki:diff' => WikiURL($pagename,
180 array_merge($urlargs,
181 array('action' => 'diff',
182 'previous' => 'major')),
184 'wiki:history' => WikiURL($pagename,
185 array('action' => 'info'),
190 $uri = WikiURL($pagename, array('version' => $rev->getVersion()), 'absurl');
191 $rss->addItem($item, $uri);
193 if ($limit && --$limit <= 0)
197 return $rss->asXML();
202 // (c-file-style: "gnu")
207 // c-hanging-comment-ender-p: nil
208 // indent-tabs-mode: nil